From 377a8750c4c3450fa7ac47175af0447e14894a35 Mon Sep 17 00:00:00 2001 From: MartinBelthle Date: Fri, 15 Nov 2024 11:08:24 +0100 Subject: [PATCH 01/86] feat(ts-gen): add failing area and cluster info inside error msg (#2227) --- .../generate_thermal_cluster_timeseries.py | 96 ++++++++++--------- ...est_generate_thermal_cluster_timeseries.py | 5 +- 2 files changed, 54 insertions(+), 47 deletions(-) diff --git a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py index 43ed95b21d..c6bff64114 100644 --- a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py +++ b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py @@ -86,53 +86,57 @@ def _build_timeseries( # 5- Loop through thermal clusters in alphabetical order sorted_thermals = sorted(area.thermals, key=lambda x: x.id) for thermal in sorted_thermals: - # 6 - Filters out clusters with no generation - if thermal.gen_ts == LocalTSGenerationBehavior.FORCE_NO_GENERATION: + try: + # 6 - Filters out clusters with no generation + if thermal.gen_ts == LocalTSGenerationBehavior.FORCE_NO_GENERATION: + generation_performed += 1 + continue + # 7- Build the cluster + url = ["input", "thermal", "prepro", area_id, thermal.id.lower(), "modulation"] + matrix = study_data.tree.get_node(url) + matrix_df = matrix.parse(return_dataframe=True) # type: ignore + modulation_capacity = matrix_df[MODULATION_CAPACITY_COLUMN].to_numpy() + url = ["input", "thermal", "prepro", area_id, thermal.id.lower(), "data"] + matrix = study_data.tree.get_node(url) + matrix_df = matrix.parse(return_dataframe=True) # type: ignore + fo_duration, po_duration, fo_rate, po_rate, npo_min, npo_max = [ + np.array(matrix_df[i], dtype=float if i in [FO_RATE_COLUMN, PO_RATE_COLUMN] else int) + for i in matrix_df.columns + ] + generation_params = OutageGenerationParameters( + unit_count=thermal.unit_count, + fo_law=ProbabilityLaw(thermal.law_forced.value.upper()), + fo_volatility=thermal.volatility_forced, + po_law=ProbabilityLaw(thermal.law_planned.value.upper()), + po_volatility=thermal.volatility_planned, + fo_duration=fo_duration, + fo_rate=fo_rate, + po_duration=po_duration, + po_rate=po_rate, + npo_min=npo_min, + npo_max=npo_max, + ) + cluster = ThermalCluster( + outage_gen_params=generation_params, + nominal_power=thermal.nominal_capacity, + modulation=modulation_capacity, + ) + # 8- Generate the time-series + results = generator.generate_time_series_for_clusters(cluster, nb_years) + generated_matrix = results.available_power + # 9- Write the matrix inside the input folder. + df = pd.DataFrame(data=generated_matrix) + df = df[list(df.columns)].astype(int) + target_path = self._build_matrix_path(tmp_path / area_id / thermal.id.lower()) + dump_dataframe(df, target_path, None) + # 10- Notify the progress to the notifier generation_performed += 1 - continue - # 7- Build the cluster - url = ["input", "thermal", "prepro", area_id, thermal.id.lower(), "modulation"] - matrix = study_data.tree.get_node(url) - matrix_df = matrix.parse(return_dataframe=True) # type: ignore - modulation_capacity = matrix_df[MODULATION_CAPACITY_COLUMN].to_numpy() - url = ["input", "thermal", "prepro", area_id, thermal.id.lower(), "data"] - matrix = study_data.tree.get_node(url) - matrix_df = matrix.parse(return_dataframe=True) # type: ignore - fo_duration, po_duration, fo_rate, po_rate, npo_min, npo_max = [ - np.array(matrix_df[i], dtype=float if i in [FO_RATE_COLUMN, PO_RATE_COLUMN] else int) - for i in matrix_df.columns - ] - generation_params = OutageGenerationParameters( - unit_count=thermal.unit_count, - fo_law=ProbabilityLaw(thermal.law_forced.value.upper()), - fo_volatility=thermal.volatility_forced, - po_law=ProbabilityLaw(thermal.law_planned.value.upper()), - po_volatility=thermal.volatility_planned, - fo_duration=fo_duration, - fo_rate=fo_rate, - po_duration=po_duration, - po_rate=po_rate, - npo_min=npo_min, - npo_max=npo_max, - ) - cluster = ThermalCluster( - outage_gen_params=generation_params, - nominal_power=thermal.nominal_capacity, - modulation=modulation_capacity, - ) - # 8- Generate the time-series - results = generator.generate_time_series_for_clusters(cluster, nb_years) - generated_matrix = results.available_power - # 9- Write the matrix inside the input folder. - df = pd.DataFrame(data=generated_matrix) - df = df[list(df.columns)].astype(int) - target_path = self._build_matrix_path(tmp_path / area_id / thermal.id.lower()) - dump_dataframe(df, target_path, None) - # 10- Notify the progress to the notifier - generation_performed += 1 - if listener: - progress = int(100 * generation_performed / total_generations) - listener.notify_progress(progress) + if listener: + progress = int(100 * generation_performed / total_generations) + listener.notify_progress(progress) + except Exception as e: + e.args = (f"Area {area_id}, cluster {thermal.id.lower()}: " + e.args[0],) + raise def to_dto(self) -> CommandDTO: return CommandDTO(action=self.command_name.value, args={}) diff --git a/tests/integration/study_data_blueprint/test_generate_thermal_cluster_timeseries.py b/tests/integration/study_data_blueprint/test_generate_thermal_cluster_timeseries.py index 2f69568e4c..2a41307e06 100644 --- a/tests/integration/study_data_blueprint/test_generate_thermal_cluster_timeseries.py +++ b/tests/integration/study_data_blueprint/test_generate_thermal_cluster_timeseries.py @@ -112,7 +112,10 @@ def test_errors_and_limit_cases(self, client: TestClient, user_access_token: str # Timeseries generation fails because there's no nominal power task = self._generate_timeseries(client, user_access_token, study_id) assert task.status == TaskStatus.FAILED - assert "Nominal power must be strictly positive, got 0.0" in task.result.message + assert ( + f"Area {area1_id}, cluster {cluster_name.lower()}: Nominal power must be strictly positive, got 0.0" + in task.result.message + ) # Puts the nominal power as a float body = {"nominalCapacity": 4.4} From 4a8f05b90bc523dc13f79e1a6f04b26dc9f28cc0 Mon Sep 17 00:00:00 2001 From: Theo Pascoli Date: Mon, 18 Nov 2024 12:00:24 +0100 Subject: [PATCH 02/86] refactor(link,ui-api): update DTO format for link (#2221) Co-authored-by: Samir Kamal <1954121+skamril@users.noreply.github.com> ANT-2312 ANT-1882 --- antarest/core/exceptions.py | 5 + antarest/core/utils/string.py | 4 + antarest/study/business/link_management.py | 59 +++--- antarest/study/business/model/__init__.py | 11 ++ antarest/study/business/model/link_model.py | 102 ++++++++++ .../study/business/table_mode_management.py | 13 +- antarest/study/service.py | 20 +- .../rawstudy/model/filesystem/config/links.py | 85 ++++++-- .../variantstudy/model/command/create_link.py | 97 ++------- antarest/study/web/study_data_blueprint.py | 15 +- .../study_data_blueprint/test_link.py | 182 +++++++++++++++++ .../study_data_blueprint/test_table_mode.py | 6 + tests/integration/test_integration.py | 16 +- .../storage/business/test_arealink_manager.py | 185 +++++++++++++++++- .../model/command/test_create_link.py | 80 ++++---- webapp/package-lock.json | 8 + webapp/package.json | 6 +- webapp/src/common/types.ts | 15 -- .../Xpansion/Candidates/CandidateForm.tsx | 4 +- .../Candidates/CreateCandidateDialog.tsx | 4 +- .../explore/Xpansion/Candidates/index.tsx | 4 +- webapp/src/redux/ducks/studyMaps.ts | 33 ++-- .../studies/config/thematicTrimming/index.ts | 4 +- .../services/api/studies/links/constants.ts | 35 ++++ .../src/services/api/studies/links/index.ts | 50 +++++ .../src/services/api/studies/links/types.ts | 54 +++++ webapp/src/services/api/studies/raw/index.ts | 10 +- .../services/api/studies/tableMode/index.ts | 6 +- webapp/src/services/api/studies/timeseries.ts | 2 +- webapp/src/services/api/studydata.ts | 43 +--- webapp/src/services/api/tasks/index.ts | 8 +- 31 files changed, 870 insertions(+), 296 deletions(-) create mode 100644 antarest/study/business/model/__init__.py create mode 100644 antarest/study/business/model/link_model.py create mode 100644 tests/integration/study_data_blueprint/test_link.py create mode 100644 webapp/src/services/api/studies/links/constants.ts create mode 100644 webapp/src/services/api/studies/links/index.ts create mode 100644 webapp/src/services/api/studies/links/types.ts diff --git a/antarest/core/exceptions.py b/antarest/core/exceptions.py index f0818d559c..5d574421a6 100644 --- a/antarest/core/exceptions.py +++ b/antarest/core/exceptions.py @@ -295,6 +295,11 @@ def __init__(self, message: str) -> None: super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) +class LinkValidationError(HTTPException): + def __init__(self, message: str) -> None: + super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) + + class VariantStudyParentNotValid(HTTPException): def __init__(self, message: str) -> None: super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) diff --git a/antarest/core/utils/string.py b/antarest/core/utils/string.py index 35c5e75541..ab45405753 100644 --- a/antarest/core/utils/string.py +++ b/antarest/core/utils/string.py @@ -18,3 +18,7 @@ def to_pascal_case(value: str) -> str: def to_camel_case(value: str) -> str: v = to_pascal_case(value) return v[0].lower() + v[1:] if len(v) > 0 else "" + + +def to_kebab_case(string: str) -> str: + return string.replace("_", "-") diff --git a/antarest/study/business/link_management.py b/antarest/study/business/link_management.py index 54831ad8ac..6715c20cff 100644 --- a/antarest/study/business/link_management.py +++ b/antarest/study/business/link_management.py @@ -12,12 +12,14 @@ import typing as t +from antares.study.version import StudyVersion + from antarest.core.exceptions import ConfigFileNotFound from antarest.core.model import JSON -from antarest.core.serialization import AntaresBaseModel from antarest.study.business.all_optional_meta import all_optional_model, camel_case_model +from antarest.study.business.model.link_model import LinkDTO, LinkInternal from antarest.study.business.utils import execute_or_add_commands -from antarest.study.model import RawStudy +from antarest.study.model import RawStudy, Study from antarest.study.storage.rawstudy.model.filesystem.config.links import LinkProperties from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.model.command.create_link import CreateLink @@ -27,18 +29,6 @@ _ALL_LINKS_PATH = "input/links" -class LinkUIDTO(AntaresBaseModel): - color: str - width: float - style: str - - -class LinkInfoDTO(AntaresBaseModel): - area1: str - area2: str - ui: t.Optional[LinkUIDTO] = None - - @all_optional_model @camel_case_model class LinkOutput(LinkProperties): @@ -51,38 +41,39 @@ class LinkManager: def __init__(self, storage_service: StudyStorageService) -> None: self.storage_service = storage_service - def get_all_links(self, study: RawStudy, with_ui: bool = False) -> t.List[LinkInfoDTO]: + def get_all_links(self, study: Study) -> t.List[LinkDTO]: file_study = self.storage_service.get_storage(study).get_raw(study) - result = [] + result: t.List[LinkDTO] = [] + for area_id, area in file_study.config.areas.items(): - links_config: t.Optional[t.Dict[str, t.Any]] = None - if with_ui: - links_config = file_study.tree.get(["input", "links", area_id, "properties"]) + links_config = file_study.tree.get(["input", "links", area_id, "properties"]) + for link in area.links: - ui_info: t.Optional[LinkUIDTO] = None - if with_ui and links_config and link in links_config: - ui_info = LinkUIDTO( - color=f"{links_config[link].get('colorr', '163')},{links_config[link].get('colorg', '163')},{links_config[link].get('colorb', '163')}", - width=links_config[link].get("link-width", 1), - style=links_config[link].get("link-style", "plain"), - ) - result.append(LinkInfoDTO(area1=area_id, area2=link, ui=ui_info)) + link_tree_config: t.Dict[str, t.Any] = links_config[link] + link_tree_config.update({"area1": area_id, "area2": link}) + + link_internal = LinkInternal.model_validate(link_tree_config) + + result.append(link_internal.to_dto()) return result - def create_link(self, study: RawStudy, link_creation_info: LinkInfoDTO) -> LinkInfoDTO: + def create_link(self, study: Study, link_creation_dto: LinkDTO) -> LinkDTO: + link = link_creation_dto.to_internal(StudyVersion.parse(study.version)) + storage_service = self.storage_service.get_storage(study) file_study = storage_service.get_raw(study) + command = CreateLink( - area1=link_creation_info.area1, - area2=link_creation_info.area2, + area1=link.area1, + area2=link.area2, + parameters=link.model_dump(exclude_none=True), command_context=self.storage_service.variant_study_service.command_factory.command_context, ) + execute_or_add_commands(study, file_study, [command], self.storage_service) - return LinkInfoDTO( - area1=link_creation_info.area1, - area2=link_creation_info.area2, - ) + + return link_creation_dto def delete_link(self, study: RawStudy, area1_id: str, area2_id: str) -> None: file_study = self.storage_service.get_storage(study).get_raw(study) diff --git a/antarest/study/business/model/__init__.py b/antarest/study/business/model/__init__.py new file mode 100644 index 0000000000..058c6b221a --- /dev/null +++ b/antarest/study/business/model/__init__.py @@ -0,0 +1,11 @@ +# Copyright (c) 2024, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. diff --git a/antarest/study/business/model/link_model.py b/antarest/study/business/model/link_model.py new file mode 100644 index 0000000000..d43a9e6e0b --- /dev/null +++ b/antarest/study/business/model/link_model.py @@ -0,0 +1,102 @@ +# Copyright (c) 2024, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. +import typing as t + +from antares.study.version import StudyVersion +from pydantic import ConfigDict, Field, model_validator + +from antarest.core.exceptions import LinkValidationError +from antarest.core.serialization import AntaresBaseModel +from antarest.core.utils.string import to_camel_case, to_kebab_case +from antarest.study.model import STUDY_VERSION_8_2 +from antarest.study.storage.rawstudy.model.filesystem.config.links import ( + AssetType, + FilterOption, + LinkStyle, + TransmissionCapacity, + comma_separated_enum_list, +) + +DEFAULT_COLOR = 112 +FILTER_VALUES: t.List[FilterOption] = [ + FilterOption.HOURLY, + FilterOption.DAILY, + FilterOption.WEEKLY, + FilterOption.MONTHLY, + FilterOption.ANNUAL, +] + + +class Area(AntaresBaseModel): + area1: str + area2: str + + @model_validator(mode="after") + def validate_areas(self) -> t.Self: + if self.area1 == self.area2: + raise LinkValidationError(f"Cannot create a link that goes from and to the same single area: {self.area1}") + return self + + +class LinkDTO(Area): + model_config = ConfigDict(alias_generator=to_camel_case, populate_by_name=True, extra="forbid") + + hurdles_cost: bool = False + loop_flow: bool = False + use_phase_shifter: bool = False + transmission_capacities: TransmissionCapacity = TransmissionCapacity.ENABLED + asset_type: AssetType = AssetType.AC + display_comments: bool = True + colorr: int = Field(default=DEFAULT_COLOR, ge=0, le=255) + colorb: int = Field(default=DEFAULT_COLOR, ge=0, le=255) + colorg: int = Field(default=DEFAULT_COLOR, ge=0, le=255) + link_width: float = 1 + link_style: LinkStyle = LinkStyle.PLAIN + + filter_synthesis: t.Optional[comma_separated_enum_list] = FILTER_VALUES + filter_year_by_year: t.Optional[comma_separated_enum_list] = FILTER_VALUES + + def to_internal(self, version: StudyVersion) -> "LinkInternal": + if version < STUDY_VERSION_8_2 and {"filter_synthesis", "filter_year_by_year"} & self.model_fields_set: + raise LinkValidationError("Cannot specify a filter value for study's version earlier than v8.2") + + data = self.model_dump() + + if version < STUDY_VERSION_8_2: + data["filter_synthesis"] = None + data["filter_year_by_year"] = None + + return LinkInternal(**data) + + +class LinkInternal(AntaresBaseModel): + model_config = ConfigDict(alias_generator=to_kebab_case, populate_by_name=True, extra="forbid") + + area1: str = "area1" + area2: str = "area2" + hurdles_cost: bool = False + loop_flow: bool = False + use_phase_shifter: bool = False + transmission_capacities: TransmissionCapacity = TransmissionCapacity.ENABLED + asset_type: AssetType = AssetType.AC + display_comments: bool = True + colorr: int = Field(default=DEFAULT_COLOR, ge=0, le=255) + colorb: int = Field(default=DEFAULT_COLOR, ge=0, le=255) + colorg: int = Field(default=DEFAULT_COLOR, ge=0, le=255) + link_width: float = 1 + link_style: LinkStyle = LinkStyle.PLAIN + filter_synthesis: t.Optional[comma_separated_enum_list] = FILTER_VALUES + filter_year_by_year: t.Optional[comma_separated_enum_list] = FILTER_VALUES + + def to_dto(self) -> LinkDTO: + data = self.model_dump() + return LinkDTO(**data) diff --git a/antarest/study/business/table_mode_management.py b/antarest/study/business/table_mode_management.py index b108c57cb8..ded9133a46 100644 --- a/antarest/study/business/table_mode_management.py +++ b/antarest/study/business/table_mode_management.py @@ -15,6 +15,7 @@ import numpy as np import pandas as pd +from antares.study.version import StudyVersion from antarest.core.exceptions import ChildNotFoundError from antarest.core.model import JSON @@ -25,7 +26,7 @@ from antarest.study.business.binding_constraint_management import BindingConstraintManager, ConstraintInput from antarest.study.business.enum_ignore_case import EnumIgnoreCase from antarest.study.business.link_management import LinkManager, LinkOutput -from antarest.study.model import RawStudy +from antarest.study.model import STUDY_VERSION_8_2, RawStudy _TableIndex = str # row name _TableColumn = str # column name @@ -98,8 +99,13 @@ def _get_table_data_unsafe(self, study: RawStudy, table_type: TableModeType) -> data = {area_id: area.model_dump(mode="json", by_alias=True) for area_id, area in areas_map.items()} elif table_type == TableModeType.LINK: links_map = self._link_manager.get_all_links_props(study) + excludes = ( + set() + if StudyVersion.parse(study.version) >= STUDY_VERSION_8_2 + else {"filter_synthesis", "filter_year_by_year"} + ) data = { - f"{area1_id} / {area2_id}": link.model_dump(mode="json", by_alias=True) + f"{area1_id} / {area2_id}": link.model_dump(mode="json", by_alias=True, exclude=excludes) for (area1_id, area2_id), link in links_map.items() } elif table_type == TableModeType.THERMAL: @@ -195,8 +201,9 @@ def update_table_data( elif table_type == TableModeType.LINK: links_map = {tuple(key.split(" / ")): LinkOutput(**values) for key, values in data.items()} updated_map = self._link_manager.update_links_props(study, links_map) # type: ignore + excludes = set() if int(study.version) >= STUDY_VERSION_8_2 else {"filter_synthesis", "filter_year_by_year"} data = { - f"{area1_id} / {area2_id}": link.model_dump(by_alias=True) + f"{area1_id} / {area2_id}": link.model_dump(by_alias=True, exclude=excludes) for (area1_id, area2_id), link in updated_map.items() } return data diff --git a/antarest/study/service.py b/antarest/study/service.py index 19067b6f9a..3170e311d0 100644 --- a/antarest/study/service.py +++ b/antarest/study/service.py @@ -86,8 +86,9 @@ from antarest.study.business.correlation_management import CorrelationManager from antarest.study.business.district_manager import DistrictManager from antarest.study.business.general_management import GeneralManager -from antarest.study.business.link_management import LinkInfoDTO, LinkManager +from antarest.study.business.link_management import LinkManager from antarest.study.business.matrix_management import MatrixManager, MatrixManagerError +from antarest.study.business.model.link_model import LinkDTO from antarest.study.business.optimization_management import OptimizationManager from antarest.study.business.playlist_management import PlaylistManager from antarest.study.business.scenario_builder_management import ScenarioBuilderManager @@ -358,7 +359,7 @@ def __init__( self.task_service = task_service self.areas = AreaManager(self.storage_service, self.repository) self.district_manager = DistrictManager(self.storage_service) - self.links = LinkManager(self.storage_service) + self.links_manager = LinkManager(self.storage_service) self.config_manager = ConfigManager(self.storage_service) self.general_manager = GeneralManager(self.storage_service) self.thematic_trimming_manager = ThematicTrimmingManager(self.storage_service) @@ -380,7 +381,7 @@ def __init__( self.correlation_manager = CorrelationManager(self.storage_service) self.table_mode_manager = TableModeManager( self.areas, - self.links, + self.links_manager, self.thermal_manager, self.renewable_manager, self.st_storage_manager, @@ -1867,12 +1868,11 @@ def get_all_areas( def get_all_links( self, uuid: str, - with_ui: bool, params: RequestParameters, - ) -> t.List[LinkInfoDTO]: + ) -> t.List[LinkDTO]: study = self.get_study(uuid) assert_permission(params.user, study, StudyPermissionType.READ) - return self.links.get_all_links(study, with_ui) + return self.links_manager.get_all_links(study) def create_area( self, @@ -1896,13 +1896,13 @@ def create_area( def create_link( self, uuid: str, - link_creation_dto: LinkInfoDTO, + link_creation_dto: LinkDTO, params: RequestParameters, - ) -> LinkInfoDTO: + ) -> LinkDTO: study = self.get_study(uuid) assert_permission(params.user, study, StudyPermissionType.WRITE) self._assert_study_unarchived(study) - new_link = self.links.create_link(study, link_creation_dto) + new_link = self.links_manager.create_link(study, link_creation_dto) self.event_bus.push( Event( type=EventType.STUDY_DATA_EDITED, @@ -2018,7 +2018,7 @@ def delete_link( if referencing_binding_constraints: binding_ids = [bc.id for bc in referencing_binding_constraints] raise ReferencedObjectDeletionNotAllowed(link_id, binding_ids, object_type="Link") - self.links.delete_link(study, area_from, area_to) + self.links_manager.delete_link(study, area_from, area_to) self.event_bus.push( Event( type=EventType.STUDY_DATA_EDITED, diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/links.py b/antarest/study/storage/rawstudy/model/filesystem/config/links.py index 88059ef50e..726fe72e93 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/links.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/links.py @@ -16,8 +16,9 @@ import typing as t -from pydantic import Field, field_validator, model_validator +from pydantic import BeforeValidator, Field, PlainSerializer, field_validator, model_validator +from antarest.core.exceptions import LinkValidationError from antarest.study.business.enum_ignore_case import EnumIgnoreCase from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import ( validate_color_rgb, @@ -66,6 +67,74 @@ class TransmissionCapacity(EnumIgnoreCase): ENABLED = "enabled" +class LinkStyle(EnumIgnoreCase): + """ + Enum representing the style of a link in a network visualization. + + Attributes: + DOT: Represents a dotted line style. + PLAIN: Represents a solid line style. + DASH: Represents a dashed line style. + DOT_DASH: Represents a line style with alternating dots and dashes. + """ + + DOT = "dot" + PLAIN = "plain" + DASH = "dash" + DOT_DASH = "dotdash" + OTHER = "other" + + +class FilterOption(EnumIgnoreCase): + """ + Enum representing the time filter options for data visualization or analysis in Antares Web. + + Attributes: + HOURLY: Represents filtering data by the hour. + DAILY: Represents filtering data by the day. + WEEKLY: Represents filtering data by the week. + MONTHLY: Represents filtering data by the month. + ANNUAL: Represents filtering data by the year. + """ + + HOURLY = "hourly" + DAILY = "daily" + WEEKLY = "weekly" + MONTHLY = "monthly" + ANNUAL = "annual" + + +def validate_filters( + filter_value: t.Union[t.List[FilterOption], str], enum_cls: t.Type[FilterOption] +) -> t.List[FilterOption]: + if isinstance(filter_value, str): + filter_accepted_values = [e for e in enum_cls] + + options = filter_value.replace(" ", "").split(",") + + invalid_options = [opt for opt in options if opt not in filter_accepted_values] + if invalid_options: + raise LinkValidationError( + f"Invalid value(s) in filters: {', '.join(invalid_options)}. " + f"Allowed values are: {', '.join(filter_accepted_values)}." + ) + + return [enum_cls(opt) for opt in options] + + return filter_value + + +def join_with_comma(values: t.List[FilterOption]) -> str: + return ", ".join(value.name.lower() for value in values) + + +comma_separated_enum_list = t.Annotated[ + t.List[FilterOption], + BeforeValidator(lambda x: validate_filters(x, FilterOption)), + PlainSerializer(lambda x: join_with_comma(x)), +] + + class LinkProperties(IniProperties): """ Configuration read from a section in the `input/links//properties.ini` file. @@ -157,17 +226,3 @@ def _validate_color_rgb(cls, v: t.Any) -> str: @model_validator(mode="before") def _validate_colors(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: return validate_colors(values) - - # noinspection SpellCheckingInspection - def to_config(self) -> t.Dict[str, t.Any]: - """ - Convert the object to a dictionary for writing to a configuration file. - """ - obj = dict(super().to_config()) - color_rgb = obj.pop("colorRgb", "#707070") - return { - "colorr": int(color_rgb[1:3], 16), - "colorg": int(color_rgb[3:5], 16), - "colorb": int(color_rgb[5:7], 16), - **obj, - } diff --git a/antarest/study/storage/variantstudy/model/command/create_link.py b/antarest/study/storage/variantstudy/model/command/create_link.py index 7954981d99..dd62fc349c 100644 --- a/antarest/study/storage/variantstudy/model/command/create_link.py +++ b/antarest/study/storage/variantstudy/model/command/create_link.py @@ -9,42 +9,25 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. - from typing import Any, Dict, List, Optional, Tuple, Union, cast from pydantic import ValidationInfo, field_validator, model_validator -from antarest.core.model import JSON from antarest.core.utils.utils import assert_this from antarest.matrixstore.model import MatrixData +from antarest.study.business.model.link_model import LinkInternal from antarest.study.model import STUDY_VERSION_8_2 from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig, Link from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.utils import strip_matrix_protocol, validate_matrix from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput, FilteringOptions from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand +from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix +from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener from antarest.study.storage.variantstudy.model.model import CommandDTO -class LinkProperties: - HURDLES_COST: bool = False - LOOP_FLOW: bool = False - USE_PHASE_SHIFTER: bool = False - DISPLAY_COMMENTS: bool = True - TRANSMISSION_CAPACITIES: str = "enabled" - ASSET_TYPE: str = "ac" - LINK_STYLE: str = "plain" - LINK_WIDTH: int = 1 - COLORR: int = 112 - COLORG: int = 112 - COLORB: int = 112 - - -class LinkAlreadyExistError(Exception): - pass - - class CreateLink(ICommand): """ Command used to create a link between two areas. @@ -98,51 +81,6 @@ def _create_link_in_config(self, area_from: str, area_to: str, study_data: FileS ], ) - @staticmethod - def generate_link_properties(parameters: JSON) -> JSON: - return { - "hurdles-cost": parameters.get( - "hurdles-cost", - LinkProperties.HURDLES_COST, - ), - "loop-flow": parameters.get("loop-flow", LinkProperties.LOOP_FLOW), - "use-phase-shifter": parameters.get( - "use-phase-shifter", - LinkProperties.USE_PHASE_SHIFTER, - ), - "transmission-capacities": parameters.get( - "transmission-capacities", - LinkProperties.TRANSMISSION_CAPACITIES, - ), - "asset-type": parameters.get( - "asset-type", - LinkProperties.ASSET_TYPE, - ), - "link-style": parameters.get( - "link-style", - LinkProperties.LINK_STYLE, - ), - "link-width": parameters.get( - "link-width", - LinkProperties.LINK_WIDTH, - ), - "colorr": parameters.get("colorr", LinkProperties.COLORR), - "colorg": parameters.get("colorg", LinkProperties.COLORG), - "colorb": parameters.get("colorb", LinkProperties.COLORB), - "display-comments": parameters.get( - "display-comments", - LinkProperties.DISPLAY_COMMENTS, - ), - "filter-synthesis": parameters.get( - "filter-synthesis", - FilteringOptions.FILTER_SYNTHESIS, - ), - "filter-year-by-year": parameters.get( - "filter-year-by-year", - FilteringOptions.FILTER_YEAR_BY_YEAR, - ), - } - def _apply_config(self, study_data: FileStudyTreeConfig) -> Tuple[CommandOutput, Dict[str, Any]]: if self.area1 not in study_data.areas: return ( @@ -161,15 +99,6 @@ def _apply_config(self, study_data: FileStudyTreeConfig) -> Tuple[CommandOutput, {}, ) - if self.area1 == self.area2: - return ( - CommandOutput( - status=False, - message="Cannot create link between the same node", - ), - {}, - ) - # Link parameters between two areas are stored in only one of the two # areas in the "input/links" tree. One area acts as source (`area_from`) # and the other as target (`area_to`). @@ -211,13 +140,20 @@ def _apply(self, study_data: FileStudy, listener: Optional[ICommandListener] = N output, data = self._apply_config(study_data.config) if not output.status: return output + + to_exclude = {"area1", "area2"} + if version < STUDY_VERSION_8_2: + to_exclude.update("filter-synthesis", "filter-year-by-year") + + validated_properties = LinkInternal.model_validate(self.parameters).model_dump( + by_alias=True, exclude=to_exclude + ) + area_from = data["area_from"] area_to = data["area_to"] - self.parameters = self.parameters or {} - link_property = CreateLink.generate_link_properties(self.parameters) + study_data.tree.save(validated_properties, ["input", "links", area_from, "properties", area_to]) - study_data.tree.save(link_property, ["input", "links", area_from, "properties", area_to]) self.series = self.series or (self.command_context.generator_matrix_constants.get_link(version=version)) self.direct = self.direct or (self.command_context.generator_matrix_constants.get_link_direct()) self.indirect = self.indirect or (self.command_context.generator_matrix_constants.get_link_indirect()) @@ -298,13 +234,14 @@ def match(self, other: ICommand, equal: bool = False) -> bool: def _create_diff(self, other: "ICommand") -> List["ICommand"]: other = cast(CreateLink, other) - from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix - from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig commands: List[ICommand] = [] area_from, area_to = sorted([self.area1, self.area2]) if self.parameters != other.parameters: - link_property = CreateLink.generate_link_properties(other.parameters or {}) + properties = LinkInternal.model_validate(other.parameters or {}) + link_property = properties.model_dump( + mode="json", by_alias=True, exclude_none=True, exclude={"area1", "area2"} + ) commands.append( UpdateConfig( target=f"input/links/{area_from}/properties/{area_to}", diff --git a/antarest/study/web/study_data_blueprint.py b/antarest/study/web/study_data_blueprint.py index a6d39c7164..6d94a48c54 100644 --- a/antarest/study/web/study_data_blueprint.py +++ b/antarest/study/web/study_data_blueprint.py @@ -68,7 +68,7 @@ ) from antarest.study.business.district_manager import DistrictCreationDTO, DistrictInfoDTO, DistrictUpdateDTO from antarest.study.business.general_management import GeneralFormFields -from antarest.study.business.link_management import LinkInfoDTO +from antarest.study.business.model.link_model import LinkDTO from antarest.study.business.optimization_management import OptimizationFormFields from antarest.study.business.playlist_management import PlaylistColumns from antarest.study.business.scenario_builder_management import Rulesets, ScenarioType @@ -147,19 +147,18 @@ def get_areas( "/studies/{uuid}/links", tags=[APITag.study_data], summary="Get all links", - response_model=t.List[LinkInfoDTO], + response_model=t.List[LinkDTO], ) def get_links( uuid: str, - with_ui: bool = False, current_user: JWTUser = Depends(auth.get_current_user), - ) -> t.Any: + ) -> t.List[LinkDTO]: logger.info( f"Fetching link list for study {uuid}", extra={"user": current_user.id}, ) params = RequestParameters(user=current_user) - areas_list = study_service.get_all_links(uuid, with_ui, params) + areas_list = study_service.get_all_links(uuid, params) return areas_list @bp.post( @@ -184,13 +183,13 @@ def create_area( "/studies/{uuid}/links", tags=[APITag.study_data], summary="Create a link", - response_model=LinkInfoDTO, + response_model=LinkDTO, ) def create_link( uuid: str, - link_creation_info: LinkInfoDTO, + link_creation_info: LinkDTO, current_user: JWTUser = Depends(auth.get_current_user), - ) -> t.Any: + ) -> LinkDTO: logger.info( f"Creating new link for study {uuid}", extra={"user": current_user.id}, diff --git a/tests/integration/study_data_blueprint/test_link.py b/tests/integration/study_data_blueprint/test_link.py new file mode 100644 index 0000000000..9459426728 --- /dev/null +++ b/tests/integration/study_data_blueprint/test_link.py @@ -0,0 +1,182 @@ +# Copyright (c) 2024, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. + +import pytest +from starlette.testclient import TestClient + +from antarest.study.storage.rawstudy.model.filesystem.config.links import TransmissionCapacity +from tests.integration.prepare_proxy import PreparerProxy + + +@pytest.mark.unit_test +class TestLink: + @pytest.mark.parametrize("study_type", ["raw", "variant"]) + def test_link_820(self, client: TestClient, user_access_token: str, study_type: str) -> None: + client.headers = {"Authorization": f"Bearer {user_access_token}"} # type: ignore + + preparer = PreparerProxy(client, user_access_token) + study_id = preparer.create_study("foo", version=820) + if study_type == "variant": + study_id = preparer.create_variant(study_id, name="Variant 1") + + area1_id = preparer.create_area(study_id, name="Area 1")["id"] + area2_id = preparer.create_area(study_id, name="Area 2")["id"] + area3_id = preparer.create_area(study_id, name="Area 3")["id"] + + # Test create link with default values + res = client.post(f"/v1/studies/{study_id}/links", json={"area1": area1_id, "area2": area2_id}) + + assert res.status_code == 200, res.json() + + expected = { + "area1": "area 1", + "area2": "area 2", + "assetType": "ac", + "colorb": 112, + "colorg": 112, + "colorr": 112, + "displayComments": True, + "filterSynthesis": "hourly, daily, weekly, monthly, annual", + "filterYearByYear": "hourly, daily, weekly, monthly, annual", + "hurdlesCost": False, + "linkStyle": "plain", + "linkWidth": 1.0, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": False, + } + assert expected == res.json() + res = client.delete(f"/v1/studies/{study_id}/links/{area1_id}/{area2_id}") + res.raise_for_status() + + # Test create link with parameters + + parameters = { + "area1": "area 1", + "area2": "area 2", + "assetType": "ac", + "colorb": 160, + "colorg": 170, + "colorr": 180, + "displayComments": True, + "filterSynthesis": "hourly, daily, weekly, monthly, annual", + "filterYearByYear": "hourly, daily, weekly, monthly, annual", + "hurdlesCost": False, + "linkStyle": "plain", + "linkWidth": 1.0, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": False, + } + res = client.post( + f"/v1/studies/{study_id}/links", + json=parameters, + ) + + assert res.status_code == 200, res.json() + + assert parameters == res.json() + res = client.delete(f"/v1/studies/{study_id}/links/{area1_id}/{area2_id}") + res.raise_for_status() + + # Create two links, count them, then delete one + + res1 = client.post(f"/v1/studies/{study_id}/links", json={"area1": area1_id, "area2": area2_id}) + res2 = client.post(f"/v1/studies/{study_id}/links", json={"area1": area1_id, "area2": area3_id}) + + assert res1.status_code == 200, res1.json() + assert res2.status_code == 200, res2.json() + + res = client.get(f"/v1/studies/{study_id}/links") + + assert res.status_code == 200, res.json() + assert 2 == len(res.json()) + + res = client.delete(f"/v1/studies/{study_id}/links/{area1_id}/{area3_id}") + res.raise_for_status() + + res = client.get(f"/v1/studies/{study_id}/links") + + assert res.status_code == 200, res.json() + assert 1 == len(res.json()) + client.delete(f"/v1/studies/{study_id}/links/{area1_id}/{area2_id}") + res.raise_for_status() + + # Test create link with same area + + res = client.post(f"/v1/studies/{study_id}/links", json={"area1": area1_id, "area2": area1_id}) + + assert res.status_code == 422, res.json() + expected = { + "description": "Cannot create a link that goes from and to the same single area: area 1", + "exception": "LinkValidationError", + } + assert expected == res.json() + + # Test create link with wrong value for enum + + res = client.post( + f"/v1/studies/{study_id}/links", + json={"area1": area1_id, "area2": area2_id, "assetType": TransmissionCapacity.ENABLED}, + ) + assert res.status_code == 422, res.json() + expected = { + "body": {"area1": "area 1", "area2": "area 2", "assetType": "enabled"}, + "description": "Input should be 'ac', 'dc', 'gaz', 'virt' or 'other'", + "exception": "RequestValidationError", + } + assert expected == res.json() + + # Test create link with wrong color parameter + + res = client.post(f"/v1/studies/{study_id}/links", json={"area1": area1_id, "area2": area2_id, "colorr": 260}) + + assert res.status_code == 422, res.json() + expected = { + "body": {"area1": "area 1", "area2": "area 2", "colorr": 260}, + "description": "Input should be less than or equal to 255", + "exception": "RequestValidationError", + } + assert expected == res.json() + + # Test create link with wrong filter parameter + + res = client.post( + f"/v1/studies/{study_id}/links", + json={"area1": area1_id, "area2": area2_id, "filterSynthesis": "centurial"}, + ) + + assert res.status_code == 422, res.json() + expected = { + "description": "Invalid value(s) in filters: centurial. Allowed values are: hourly, daily, weekly, monthly, annual.", + "exception": "LinkValidationError", + } + assert expected == res.json() + + def test_create_link_810(self, client: TestClient, user_access_token: str) -> None: + client.headers = {"Authorization": f"Bearer {user_access_token}"} # type: ignore + + preparer = PreparerProxy(client, user_access_token) + study_id = preparer.create_study("foo", version=810) + area1_id = preparer.create_area(study_id, name="Area 1")["id"] + area2_id = preparer.create_area(study_id, name="Area 2")["id"] + + res = client.post( + f"/v1/studies/{study_id}/links", json={"area1": area1_id, "area2": area2_id, "filterSynthesis": "hourly"} + ) + + assert res.status_code == 422, res.json() + expected = { + "description": "Cannot specify a filter value for study's version earlier than v8.2", + "exception": "LinkValidationError", + } + assert expected == res.json() diff --git a/tests/integration/study_data_blueprint/test_table_mode.py b/tests/integration/study_data_blueprint/test_table_mode.py index 98d7f03393..a7b1878020 100644 --- a/tests/integration/study_data_blueprint/test_table_mode.py +++ b/tests/integration/study_data_blueprint/test_table_mode.py @@ -293,6 +293,12 @@ def test_lifecycle__nominal( "usePhaseShifter": False, }, } + # removes filter fields for study version prior to v8.2 + if study_version < 820: + for key in expected_links: + del expected_links[key]["filterSynthesis"] + del expected_links[key]["filterYearByYear"] + # asserts actual equals expected without the non-updated link. actual = res.json() expected_result = copy.deepcopy(expected_links) diff --git a/tests/integration/test_integration.py b/tests/integration/test_integration.py index a9fa59088f..37f34f5273 100644 --- a/tests/integration/test_integration.py +++ b/tests/integration/test_integration.py @@ -593,12 +593,24 @@ def test_area_management(client: TestClient, admin_access_token: str) -> None: }, ) res.raise_for_status() - res_links = client.get(f"/v1/studies/{study_id}/links?with_ui=true") + res_links = client.get(f"/v1/studies/{study_id}/links") assert res_links.json() == [ { "area1": "area 1", "area2": "area 2", - "ui": {"color": "112,112,112", "style": "plain", "width": 1.0}, + "assetType": "ac", + "colorb": 112, + "colorg": 112, + "colorr": 112, + "displayComments": True, + "filterSynthesis": "hourly, daily, weekly, monthly, annual", + "filterYearByYear": "hourly, daily, weekly, monthly, annual", + "hurdlesCost": False, + "linkStyle": "plain", + "linkWidth": 1.0, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": False, } ] diff --git a/tests/storage/business/test_arealink_manager.py b/tests/storage/business/test_arealink_manager.py index cb1d29c971..456be82a5b 100644 --- a/tests/storage/business/test_arealink_manager.py +++ b/tests/storage/business/test_arealink_manager.py @@ -24,11 +24,12 @@ from antarest.matrixstore.repository import MatrixContentRepository from antarest.matrixstore.service import SimpleMatrixService from antarest.study.business.area_management import AreaCreationDTO, AreaManager, AreaType, UpdateAreaUi -from antarest.study.business.link_management import LinkInfoDTO, LinkManager +from antarest.study.business.link_management import LinkDTO, LinkManager from antarest.study.model import Patch, PatchArea, PatchCluster, RawStudy, StudyAdditionalData from antarest.study.repository import StudyMetadataRepository from antarest.study.storage.patch_service import PatchService from antarest.study.storage.rawstudy.model.filesystem.config.files import build +from antarest.study.storage.rawstudy.model.filesystem.config.links import AssetType, LinkStyle, TransmissionCapacity from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, DistrictSet, FileStudyTreeConfig, Link from antarest.study.storage.rawstudy.model.filesystem.config.thermal import ThermalConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy @@ -37,7 +38,7 @@ from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants from antarest.study.storage.variantstudy.command_factory import CommandFactory -from antarest.study.storage.variantstudy.model.command.common import CommandName +from antarest.study.storage.variantstudy.model.command.common import CommandName, FilteringOptions from antarest.study.storage.variantstudy.model.dbmodel import VariantStudy from antarest.study.storage.variantstudy.model.model import CommandDTO from antarest.study.storage.variantstudy.variant_study_service import VariantStudyService @@ -102,6 +103,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): # noinspection PyArgumentList study = RawStudy( id=study_id, + version="820", path=str(empty_study.config.study_path), additional_data=StudyAdditionalData(), ) @@ -134,7 +136,14 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): } area_manager.create_area(study, AreaCreationDTO(name="test2", type=AreaType.AREA)) - link_manager.create_link(study, LinkInfoDTO(area1="test", area2="test2")) + + link_manager.create_link( + study, + LinkDTO( + area1="test", + area2="test2", + ), + ) assert empty_study.config.areas["test"].links.get("test2") is not None link_manager.delete_link(study, "test", "test2") @@ -148,6 +157,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): # noinspection PyArgumentList study = VariantStudy( id=variant_id, + version="820", path=str(empty_study.config.study_path), additional_data=StudyAdditionalData(), ) @@ -216,7 +226,52 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): ) area_manager.create_area(study, AreaCreationDTO(name="test2", type=AreaType.AREA)) - link_manager.create_link(study, LinkInfoDTO(area1="test", area2="test2")) + link_manager.create_link( + study, + LinkDTO( + area1="test", + area2="test2", + ), + ) + variant_study_service.append_commands.assert_called_with( + variant_id, + [ + CommandDTO( + action=CommandName.CREATE_LINK.value, + args={ + "area1": "test", + "area2": "test2", + "parameters": { + "area1": "test", + "area2": "test2", + "hurdles_cost": False, + "loop_flow": False, + "use_phase_shifter": False, + "transmission_capacities": TransmissionCapacity.ENABLED, + "asset_type": AssetType.AC, + "display_comments": True, + "colorr": 112, + "colorg": 112, + "colorb": 112, + "link_width": 1.0, + "link_style": LinkStyle.PLAIN, + "filter_synthesis": "hourly, daily, weekly, monthly, annual", + "filter_year_by_year": "hourly, daily, weekly, monthly, annual", + }, + }, + ), + ], + RequestParameters(DEFAULT_ADMIN_USER), + ) + + study.version = 810 + link_manager.create_link( + study, + LinkDTO( + area1="test", + area2="test2", + ), + ) variant_study_service.append_commands.assert_called_with( variant_id, [ @@ -225,7 +280,21 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): args={ "area1": "test", "area2": "test2", - "parameters": None, + "parameters": { + "area1": "test", + "area2": "test2", + "hurdles_cost": False, + "loop_flow": False, + "use_phase_shifter": False, + "transmission_capacities": TransmissionCapacity.ENABLED, + "asset_type": AssetType.AC, + "display_comments": True, + "colorr": 112, + "colorg": 112, + "colorb": 112, + "link_width": 1.0, + "link_style": LinkStyle.PLAIN, + }, }, ), ], @@ -260,7 +329,7 @@ def test_get_all_area(): ) link_manager = LinkManager(storage_service=StudyStorageService(raw_study_service, Mock())) - study = RawStudy() + study = RawStudy(version="900") config = FileStudyTreeConfig( study_path=Path("somepath"), path=Path("somepath"), @@ -416,12 +485,108 @@ def test_get_all_area(): all_areas = area_manager.get_all_areas(study) assert expected_all == [area.model_dump() for area in all_areas] + file_tree_mock.get.side_effect = [ + { + "a2": { + "hurdles-cost": False, + "loop-flow": False, + "use-phase-shifter": False, + "transmission-capacities": TransmissionCapacity.ENABLED, + "asset-type": AssetType.AC, + "display-comments": False, + "filter-synthesis": FilteringOptions.FILTER_SYNTHESIS, + "filter-year-by-year": FilteringOptions.FILTER_YEAR_BY_YEAR, + }, + "a3": { + "hurdles-cost": False, + "loop-flow": False, + "use-phase-shifter": False, + "transmission-capacities": TransmissionCapacity.ENABLED, + "asset-type": AssetType.AC, + "display-comments": False, + "filter-synthesis": FilteringOptions.FILTER_SYNTHESIS, + "filter-year-by-year": FilteringOptions.FILTER_YEAR_BY_YEAR, + }, + }, + { + "a3": { + "hurdles-cost": False, + "loop-flow": False, + "use-phase-shifter": False, + "transmission-capacities": TransmissionCapacity.ENABLED, + "asset-type": AssetType.AC, + "display-comments": False, + "filter-synthesis": FilteringOptions.FILTER_SYNTHESIS, + "filter-year-by-year": FilteringOptions.FILTER_YEAR_BY_YEAR, + } + }, + { + "a3": { + "hurdles-cost": False, + "loop-flow": False, + "use-phase-shifter": False, + "transmission-capacities": TransmissionCapacity.ENABLED, + "asset-type": AssetType.AC, + "display-comments": False, + "filter-synthesis": FilteringOptions.FILTER_SYNTHESIS, + "filter-year-by-year": FilteringOptions.FILTER_YEAR_BY_YEAR, + } + }, + ] links = link_manager.get_all_links(study) assert [ - {"area1": "a1", "area2": "a2", "ui": None}, - {"area1": "a1", "area2": "a3", "ui": None}, - {"area1": "a2", "area2": "a3", "ui": None}, - ] == [link.model_dump() for link in links] + { + "area1": "a1", + "area2": "a2", + "asset_type": "ac", + "colorb": 112, + "colorg": 112, + "colorr": 112, + "display_comments": False, + "filter_synthesis": "hourly, daily, weekly, monthly, annual", + "filter_year_by_year": "hourly, daily, weekly, monthly, annual", + "hurdles_cost": False, + "link_style": "plain", + "link_width": 1.0, + "loop_flow": False, + "transmission_capacities": "enabled", + "use_phase_shifter": False, + }, + { + "area1": "a1", + "area2": "a3", + "asset_type": "ac", + "colorb": 112, + "colorg": 112, + "colorr": 112, + "display_comments": False, + "filter_synthesis": "hourly, daily, weekly, monthly, annual", + "filter_year_by_year": "hourly, daily, weekly, monthly, annual", + "hurdles_cost": False, + "link_style": "plain", + "link_width": 1.0, + "loop_flow": False, + "transmission_capacities": "enabled", + "use_phase_shifter": False, + }, + { + "area1": "a2", + "area2": "a3", + "asset_type": "ac", + "colorb": 112, + "colorg": 112, + "colorr": 112, + "display_comments": False, + "filter_synthesis": "hourly, daily, weekly, monthly, annual", + "filter_year_by_year": "hourly, daily, weekly, monthly, annual", + "hurdles_cost": False, + "link_style": "plain", + "link_width": 1.0, + "loop_flow": False, + "transmission_capacities": "enabled", + "use_phase_shifter": False, + }, + ] == [link.model_dump(mode="json") for link in links] def test_update_area(): diff --git a/tests/variantstudy/model/command/test_create_link.py b/tests/variantstudy/model/command/test_create_link.py index 9d847f0f24..33a536b514 100644 --- a/tests/variantstudy/model/command/test_create_link.py +++ b/tests/variantstudy/model/command/test_create_link.py @@ -10,19 +10,17 @@ # # This file is part of the Antares project. -import configparser - import numpy as np import pytest from pydantic import ValidationError +from antarest.study.business.link_management import LinkInternal from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter -from antarest.study.storage.variantstudy.model.command.common import FilteringOptions from antarest.study.storage.variantstudy.model.command.create_area import CreateArea -from antarest.study.storage.variantstudy.model.command.create_link import CreateLink, LinkProperties +from antarest.study.storage.variantstudy.model.command.create_link import CreateLink from antarest.study.storage.variantstudy.model.command.icommand import ICommand from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink @@ -34,8 +32,6 @@ class TestCreateLink: def test_validation(self, empty_study: FileStudy, command_context: CommandContext): area1 = "Area1" - area1_id = transform_name_to_id(area1) - area2 = "Area2" CreateArea.model_validate( @@ -54,8 +50,8 @@ def test_validation(self, empty_study: FileStudy, command_context: CommandContex with pytest.raises(ValidationError): CreateLink( - area1=area1_id, - area2=area1_id, + area1=area1, + area2=area1, parameters={}, command_context=command_context, series=[[0]], @@ -110,19 +106,17 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): link = IniReader() link_data = link.read(study_path / "input" / "links" / area1_id / "properties.ini") - assert link_data[area2_id]["hurdles-cost"] == LinkProperties.HURDLES_COST - assert link_data[area2_id]["loop-flow"] == LinkProperties.LOOP_FLOW - assert link_data[area2_id]["use-phase-shifter"] == LinkProperties.USE_PHASE_SHIFTER - assert str(link_data[area2_id]["transmission-capacities"]) == LinkProperties.TRANSMISSION_CAPACITIES - assert str(link_data[area2_id]["asset-type"]) == LinkProperties.ASSET_TYPE - assert str(link_data[area2_id]["link-style"]) == LinkProperties.LINK_STYLE - assert int(link_data[area2_id]["link-width"]) == LinkProperties.LINK_WIDTH - assert int(link_data[area2_id]["colorr"]) == LinkProperties.COLORR - assert int(link_data[area2_id]["colorg"]) == LinkProperties.COLORG - assert int(link_data[area2_id]["colorb"]) == LinkProperties.COLORB - assert link_data[area2_id]["display-comments"] == LinkProperties.DISPLAY_COMMENTS - assert str(link_data[area2_id]["filter-synthesis"]) == FilteringOptions.FILTER_SYNTHESIS - assert str(link_data[area2_id]["filter-year-by-year"]) == FilteringOptions.FILTER_YEAR_BY_YEAR + assert link_data[area2_id]["hurdles-cost"] is False + assert link_data[area2_id]["loop-flow"] is False + assert link_data[area2_id]["use-phase-shifter"] is False + assert link_data[area2_id]["transmission-capacities"] == "enabled" + assert link_data[area2_id]["asset-type"] == "ac" + assert link_data[area2_id]["link-style"] == "plain" + assert int(link_data[area2_id]["link-width"]) == 1 + assert int(link_data[area2_id]["colorr"]) == 112 + assert int(link_data[area2_id]["colorg"]) == 112 + assert int(link_data[area2_id]["colorb"]) == 112 + assert link_data[area2_id]["display-comments"] is True empty_study.config.version = 820 create_link_command: ICommand = CreateLink( @@ -157,17 +151,17 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): assert not output.status parameters = { - "hurdles-cost": "true", - "loop-flow": "true", - "use-phase-shifter": "true", - "transmission-capacities": "disabled", + "hurdles-cost": True, + "loop-flow": True, + "use-phase-shifter": True, + "transmission-capacities": "ignore", "asset-type": "dc", "link-style": "other", "link-width": 12, "colorr": 120, "colorg": 120, "colorb": 120, - "display-comments": "true", + "display-comments": True, "filter-synthesis": "hourly", "filter-year-by-year": "hourly", } @@ -189,21 +183,19 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): assert (study_path / "input" / "links" / area1_id / f"{area3_id}.txt.link").exists() - link = configparser.ConfigParser() - link.read(study_path / "input" / "links" / area1_id / "properties.ini") - assert str(link[area3_id]["hurdles-cost"]) == parameters["hurdles-cost"] - assert str(link[area3_id]["loop-flow"]) == parameters["loop-flow"] - assert str(link[area3_id]["use-phase-shifter"]) == parameters["use-phase-shifter"] - assert str(link[area3_id]["transmission-capacities"]) == parameters["transmission-capacities"] - assert str(link[area3_id]["asset-type"]) == parameters["asset-type"] - assert str(link[area3_id]["link-style"]) == parameters["link-style"] - assert int(link[area3_id]["link-width"]) == parameters["link-width"] - assert int(link[area3_id]["colorr"]) == parameters["colorr"] - assert int(link[area3_id]["colorg"]) == parameters["colorg"] - assert int(link[area3_id]["colorb"]) == parameters["colorb"] - assert str(link[area3_id]["display-comments"]) == parameters["display-comments"] - assert str(link[area3_id]["filter-synthesis"]) == parameters["filter-synthesis"] - assert str(link[area3_id]["filter-year-by-year"]) == parameters["filter-year-by-year"] + link = IniReader() + link_data = link.read(study_path / "input" / "links" / area1_id / "properties.ini") + assert link_data[area3_id]["hurdles-cost"] == parameters["hurdles-cost"] + assert link_data[area3_id]["loop-flow"] == parameters["loop-flow"] + assert link_data[area3_id]["use-phase-shifter"] == parameters["use-phase-shifter"] + assert link_data[area3_id]["transmission-capacities"] == parameters["transmission-capacities"] + assert link_data[area3_id]["asset-type"] == parameters["asset-type"] + assert link_data[area3_id]["link-style"] == parameters["link-style"] + assert int(link_data[area3_id]["link-width"]) == parameters["link-width"] + assert int(link_data[area3_id]["colorr"]) == parameters["colorr"] + assert int(link_data[area3_id]["colorg"]) == parameters["colorg"] + assert int(link_data[area3_id]["colorb"]) == parameters["colorb"] + assert link_data[area3_id]["display-comments"] == parameters["display-comments"] output = create_link_command.apply( study_data=empty_study, @@ -258,7 +250,7 @@ def test_create_diff(command_context: CommandContext): other_match = CreateLink( area1="foo", area2="bar", - parameters={"hurdles-cost": "true"}, + parameters={"hurdles_cost": "true"}, series=series_b, command_context=command_context, ) @@ -266,7 +258,9 @@ def test_create_diff(command_context: CommandContext): assert base.create_diff(other_match) == [ UpdateConfig( target="input/links/bar/properties/foo", - data=CreateLink.generate_link_properties({"hurdles-cost": "true"}), + data=LinkInternal.model_validate({"area1": "bar", "area2": "foo", "hurdles_cost": "true"}).model_dump( + by_alias=True, exclude_none=True, exclude={"area1", "area2"} + ), command_context=command_context, ), ReplaceMatrix( diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 809c088d3d..b4f6734d44 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -62,6 +62,7 @@ "redux": "4.2.1", "redux-thunk": "2.4.2", "swagger-ui-react": "5.17.14", + "tinycolor2": "1.6.0", "ts-toolbelt": "9.6.0", "use-undo": "1.1.1", "uuid": "10.0.0", @@ -94,6 +95,7 @@ "@types/react-window": "1.8.8", "@types/swagger-ui-react": "4.18.3", "@types/testing-library__jest-dom": "6.0.0", + "@types/tinycolor2": "1.4.6", "@types/uuid": "10.0.0", "@typescript-eslint/eslint-plugin": "7.2.0", "@typescript-eslint/parser": "7.2.0", @@ -4054,6 +4056,12 @@ "@testing-library/jest-dom": "*" } }, + "node_modules/@types/tinycolor2": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", + "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", + "dev": true + }, "node_modules/@types/unist": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", diff --git a/webapp/package.json b/webapp/package.json index 117add1312..113cdf9238 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -26,8 +26,8 @@ "axios": "1.7.7", "clsx": "2.1.1", "d3": "5.16.0", - "debug": "4.3.7", "date-fns": "4.1.0", + "debug": "4.3.7", "draft-convert": "2.1.13", "draft-js": "0.11.7", "draftjs-to-html": "0.9.1", @@ -68,6 +68,7 @@ "redux": "4.2.1", "redux-thunk": "2.4.2", "swagger-ui-react": "5.17.14", + "tinycolor2": "1.6.0", "ts-toolbelt": "9.6.0", "use-undo": "1.1.1", "uuid": "10.0.0", @@ -79,12 +80,12 @@ "@testing-library/user-event": "14.5.2", "@total-typescript/ts-reset": "0.6.1", "@types/d3": "5.16.0", + "@types/date-fns": "2.6.0", "@types/debug": "4.1.12", "@types/draft-convert": "2.1.8", "@types/draft-js": "0.11.18", "@types/draftjs-to-html": "0.8.4", "@types/js-cookie": "3.0.6", - "@types/date-fns": "2.6.0", "@types/jsoneditor": "9.9.5", "@types/lodash": "4.17.9", "@types/node": "22.7.3", @@ -100,6 +101,7 @@ "@types/react-window": "1.8.8", "@types/swagger-ui-react": "4.18.3", "@types/testing-library__jest-dom": "6.0.0", + "@types/tinycolor2": "1.4.6", "@types/uuid": "10.0.0", "@typescript-eslint/eslint-plugin": "7.2.0", "@typescript-eslint/parser": "7.2.0", diff --git a/webapp/src/common/types.ts b/webapp/src/common/types.ts index 4e087569f7..0674b5031a 100644 --- a/webapp/src/common/types.ts +++ b/webapp/src/common/types.ts @@ -531,21 +531,6 @@ export interface UpdateAreaUi { layerColor: AreaLayerColor; } -export interface LinkUIInfoDTO { - color: string; - style: string; - width: number; -} - -export interface LinkCreationInfoDTO { - area1: string; - area2: string; -} - -export interface LinkInfoWithUI extends LinkCreationInfoDTO { - ui: LinkUIInfoDTO; -} - export interface AreaCreationDTO { name: string; type: object; diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CandidateForm.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CandidateForm.tsx index bb74aac2ad..8f0be1caa7 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CandidateForm.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CandidateForm.tsx @@ -35,14 +35,14 @@ import { StyledVisibilityIcon, StyledDeleteIcon, } from "../share/styles"; -import { LinkCreationInfoDTO } from "../../../../../../common/types"; import { XpansionCandidate } from "../types"; import SelectSingle from "../../../../../common/SelectSingle"; import SwitchFE from "../../../../../common/fieldEditors/SwitchFE"; +import type { LinkDTO } from "@/services/api/studies/links/types"; interface PropType { candidate: XpansionCandidate | undefined; - links: LinkCreationInfoDTO[]; + links: LinkDTO[]; capacities: string[]; deleteCandidate: (name: string | undefined) => Promise; updateCandidate: ( diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CreateCandidateDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CreateCandidateDialog.tsx index b4c09015e7..8e03d0c70d 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CreateCandidateDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CreateCandidateDialog.tsx @@ -17,7 +17,6 @@ import { Button, ButtonGroup } from "@mui/material"; import { useTranslation } from "react-i18next"; import AddCircleIcon from "@mui/icons-material/AddCircle"; import * as R from "ramda"; -import { LinkCreationInfoDTO } from "../../../../../../common/types"; import { XpansionCandidate } from "../types"; import FormDialog from "../../../../../common/dialogs/FormDialog"; import StringFE from "../../../../../common/fieldEditors/StringFE"; @@ -26,10 +25,11 @@ import SelectFE from "../../../../../common/fieldEditors/SelectFE"; import NumberFE from "../../../../../common/fieldEditors/NumberFE"; import { SubmitHandlerPlus } from "../../../../../common/Form/types"; import { validateString } from "@/utils/validation/string"; +import type { LinkDTO } from "@/services/api/studies/links/types"; interface PropType { open: boolean; - links: LinkCreationInfoDTO[]; + links: LinkDTO[]; onClose: () => void; onSave: (candidate: XpansionCandidate) => void; candidates: XpansionCandidate[]; diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx index 66d41de0c2..43cc113532 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx @@ -36,7 +36,6 @@ import { removeEmptyFields, } from "../../../../../../services/utils/index"; import useEnqueueErrorSnackbar from "../../../../../../hooks/useEnqueueErrorSnackbar"; -import { getAllLinks } from "../../../../../../services/api/studydata"; import XpansionPropsView from "./XpansionPropsView"; import CreateCandidateDialog from "./CreateCandidateDialog"; import CandidateForm from "./CandidateForm"; @@ -44,6 +43,7 @@ import usePromiseWithSnackbarError from "../../../../../../hooks/usePromiseWithS import DataViewerDialog from "../../../../../common/dialogs/DataViewerDialog"; import EmptyView from "../../../../../common/page/SimpleContent"; import SplitView from "../../../../../common/SplitView"; +import { getLinks } from "@/services/api/studies/links"; function Candidates() { const [t] = useTranslation(); @@ -104,7 +104,7 @@ function Candidates() { if (exist) { return { capacities: await getAllCapacities(study.id), - links: await getAllLinks({ uuid: study.id }), + links: await getLinks({ studyId: study.id }), }; } return {}; diff --git a/webapp/src/redux/ducks/studyMaps.ts b/webapp/src/redux/ducks/studyMaps.ts index 9b5d1303dd..04dce9a7cc 100644 --- a/webapp/src/redux/ducks/studyMaps.ts +++ b/webapp/src/redux/ducks/studyMaps.ts @@ -47,11 +47,14 @@ import { getStudySynthesis, } from "../selectors"; import * as studyDataApi from "../../services/api/studydata"; +import * as linksApi from "../../services/api/studies/links"; import { createStudyLink, deleteStudyLink, setCurrentArea, } from "./studySyntheses"; +import type { TLinkStyle } from "@/services/api/studies/links/types"; +import tinycolor from "tinycolor2"; export interface StudyMapNode { id: string; @@ -167,11 +170,11 @@ export const setLayers = createAction< type LinkStyle = [number[], string]; -const makeLinkStyle = R.cond<[string], LinkStyle>([ - [R.equals("dot"), (): LinkStyle => [[1, 5], "round"]], - [R.equals("dash"), (): LinkStyle => [[16, 8], "square"]], - [R.equals("dotdash"), (): LinkStyle => [[10, 6, 1, 6], "square"]], - [R.T, (): LinkStyle => [[0], "butt"]], +const makeLinkStyle = R.cond<[TLinkStyle], LinkStyle>([ + [(v) => v === "dot", () => [[1, 5], "round"]], + [(v) => v === "dash", () => [[16, 8], "square"]], + [(v) => v === "dotdash", () => [[10, 6, 1, 6], "square"]], + [R.T, () => [[0], "butt"]], ]); const initStudyMapLayers = ( @@ -217,17 +220,21 @@ export const fetchStudyMapLayers = createAsyncThunk< async function getLinks( studyId: StudyMap["studyId"], ): Promise { - const links = await studyDataApi.getAllLinks({ uuid: studyId, withUi: true }); + const links = await linksApi.getLinks({ studyId }); return links.reduce( (acc, link) => { - const [style, linecap] = makeLinkStyle(link.ui?.style); + const [style, linecap] = makeLinkStyle(link.linkStyle); const id = makeLinkId(link.area1, link.area2); acc[id] = { id, - color: `rgb(${link.ui?.color}`, + color: tinycolor({ + r: link.colorr, + g: link.colorg, + b: link.colorb, + }).toRgbString(), strokeDasharray: style, strokeLinecap: linecap, - strokeWidth: link.ui?.width < 2 ? 2 : link.ui?.width, + strokeWidth: link.linkWidth < 2 ? 2 : link.linkWidth, }; return acc; }, @@ -398,7 +405,7 @@ export const createStudyMapLink = createAsyncThunk< ); try { - await studyDataApi.createLink(studyId, { area1, area2 }); + await linksApi.createLink({ studyId, area1, area2 }); } catch (err) { dispatch(deleteStudyLink({ studyId, area1, area2 })); dispatch(deleteStudyMapLinkTemp({ studyId, linkId })); @@ -425,7 +432,11 @@ export const deleteStudyMapLink = createAsyncThunk< dispatch(deleteStudyLink({ studyId, area1, area2 })); try { - await studyDataApi.deleteLink(studyId, area1, area2); + await linksApi.deleteLink({ + studyId, + areaFrom: area1, + areaTo: area2, + }); } catch (err) { dispatch(createStudyLink({ ...link, studyId, area1, area2 })); diff --git a/webapp/src/services/api/studies/config/thematicTrimming/index.ts b/webapp/src/services/api/studies/config/thematicTrimming/index.ts index c6a8bc8992..3444abeacc 100644 --- a/webapp/src/services/api/studies/config/thematicTrimming/index.ts +++ b/webapp/src/services/api/studies/config/thematicTrimming/index.ts @@ -26,8 +26,8 @@ export async function getThematicTrimmingConfig({ studyId, }: GetThematicTrimmingConfigParams) { const url = format(URL, { studyId }); - const res = await client.get(url); - return res.data; + const { data } = await client.get(url); + return data; } export async function setThematicTrimmingConfig({ diff --git a/webapp/src/services/api/studies/links/constants.ts b/webapp/src/services/api/studies/links/constants.ts new file mode 100644 index 0000000000..0bd9627ff7 --- /dev/null +++ b/webapp/src/services/api/studies/links/constants.ts @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +export const TransmissionCapacity = { + Infinite: "infinite", + Ignore: "ignore", + Enabled: "enabled", +} as const; + +export const AssetType = { + AC: "ac", + DC: "dc", + Gaz: "gaz", + Virt: "virt", + Other: "other", +} as const; + +export const LinkStyle = { + Dot: "dot", + Plain: "plain", + Dash: "dash", + DotDash: "dotdash", + Other: "other", +} as const; diff --git a/webapp/src/services/api/studies/links/index.ts b/webapp/src/services/api/studies/links/index.ts new file mode 100644 index 0000000000..0947827906 --- /dev/null +++ b/webapp/src/services/api/studies/links/index.ts @@ -0,0 +1,50 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { StudyMetadata } from "@/common/types"; +import client from "../../client"; +import type { CreateLinkParams, DeleteLinkParams, LinkDTO } from "./types"; + +export async function createLink(params: CreateLinkParams) { + const { studyId, ...body } = params; + const { data } = await client.post( + `/v1/studies/${params.studyId}/links`, + body, + ); + return data; +} + +export async function getLinks(params: { studyId: StudyMetadata["id"] }) { + const { data } = await client.get( + `/v1/studies/${params.studyId}/links`, + ); + return data; +} + +/** + * Deletes the link between the two specified areas. + * + * @param params - The parameters. + * @param params.studyId - The study ID. + * @param params.areaFrom - The from area name. + * @param params.areaTo - The to area name. + * @returns The deleted link id (format: `${areaFromId}%${areaToId}`) + */ +export async function deleteLink(params: DeleteLinkParams) { + const { studyId, areaFrom, areaTo } = params; + const { data } = await client.delete( + `/v1/studies/${studyId}/links/${areaFrom}/${areaTo}`, + ); + return data; +} diff --git a/webapp/src/services/api/studies/links/types.ts b/webapp/src/services/api/studies/links/types.ts new file mode 100644 index 0000000000..e6718eaa59 --- /dev/null +++ b/webapp/src/services/api/studies/links/types.ts @@ -0,0 +1,54 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { O } from "ts-toolbelt"; +import { AssetType, LinkStyle, TransmissionCapacity } from "./constants"; +import { StudyMetadata } from "@/common/types"; +import { PartialExceptFor } from "@/utils/tsUtils"; + +export type TTransmissionCapacity = O.UnionOf; + +export type TAssetType = O.UnionOf; + +export type TLinkStyle = O.UnionOf; + +export interface LinkDTO { + hurdlesCost: boolean; + loopFlow: boolean; + usePhaseShifter: boolean; + transmissionCapacities: TTransmissionCapacity; + assetType: TAssetType; + displayComments: boolean; + colorr: number; + colorb: number; + colorg: number; + linkWidth: number; + linkStyle: TLinkStyle; + area1: string; + area2: string; + // Since v8.2 + filterSynthesis?: string; + filterYearByYear?: string; +} + +export interface CreateLinkParams + extends PartialExceptFor { + studyId: StudyMetadata["id"]; +} + +export interface DeleteLinkParams { + studyId: StudyMetadata["id"]; + areaFrom: string; + areaTo: string; +} diff --git a/webapp/src/services/api/studies/raw/index.ts b/webapp/src/services/api/studies/raw/index.ts index 9a86d92164..85524560d5 100644 --- a/webapp/src/services/api/studies/raw/index.ts +++ b/webapp/src/services/api/studies/raw/index.ts @@ -21,19 +21,19 @@ import type { export async function downloadMatrix(params: DownloadMatrixParams) { const { studyId, ...queryParams } = params; - const url = `v1/studies/${studyId}/raw/download`; + const url = `/v1/studies/${studyId}/raw/download`; - const res = await client.get(url, { + const { data } = await client.get(url, { params: queryParams, responseType: "blob", }); - return res.data; + return data; } export async function importFile(params: ImportFileParams) { const { studyId, file, onUploadProgress, ...queryParams } = params; - const url = `v1/studies/${studyId}/raw`; + const url = `/v1/studies/${studyId}/raw`; const body = { file }; await client.putForm(url, body, { @@ -47,7 +47,7 @@ export async function importFile(params: ImportFileParams) { export async function deleteFile(params: DeleteFileParams) { const { studyId, path } = params; - const url = `v1/studies/${studyId}/raw`; + const url = `/v1/studies/${studyId}/raw`; await client.delete(url, { params: { path } }); } diff --git a/webapp/src/services/api/studies/tableMode/index.ts b/webapp/src/services/api/studies/tableMode/index.ts index c20d54dbeb..1fcb75ffa0 100644 --- a/webapp/src/services/api/studies/tableMode/index.ts +++ b/webapp/src/services/api/studies/tableMode/index.ts @@ -21,7 +21,7 @@ import type { TableModeType, } from "./types"; -const TABLE_MODE_API_URL = `v1/studies/{studyId}/table-mode/{tableType}`; +const TABLE_MODE_API_URL = `/v1/studies/{studyId}/table-mode/{tableType}`; export async function getTableMode( params: GetTableModeParams, @@ -29,11 +29,11 @@ export async function getTableMode( const { studyId, tableType, columns } = params; const url = format(TABLE_MODE_API_URL, { studyId, tableType }); - const res = await client.get(url, { + const { data } = await client.get(url, { params: columns.length > 0 ? { columns: columns.join(",") } : {}, }); - return res.data; + return data; } export async function setTableMode(params: SetTableModeParams) { diff --git a/webapp/src/services/api/studies/timeseries.ts b/webapp/src/services/api/studies/timeseries.ts index 0329c49761..e786f076ef 100644 --- a/webapp/src/services/api/studies/timeseries.ts +++ b/webapp/src/services/api/studies/timeseries.ts @@ -26,7 +26,7 @@ export async function generateTimeSeries(params: { studyId: StudyMetadata["id"]; }) { const { data } = await client.put( - `v1/studies/${params.studyId}/timeseries/generate`, + `/v1/studies/${params.studyId}/timeseries/generate`, ); return data; } diff --git a/webapp/src/services/api/studydata.ts b/webapp/src/services/api/studydata.ts index a230be85bf..a6a05d8030 100644 --- a/webapp/src/services/api/studydata.ts +++ b/webapp/src/services/api/studydata.ts @@ -12,11 +12,7 @@ * This file is part of the Antares project. */ -import { - LinkCreationInfoDTO, - LinkInfoWithUI, - UpdateAreaUi, -} from "../../common/types"; +import { UpdateAreaUi } from "../../common/types"; import { BindingConstraint, ConstraintTerm, @@ -36,14 +32,6 @@ export const createArea = async ( return res.data; }; -export const createLink = async ( - uuid: string, - linkCreationInfo: LinkCreationInfoDTO, -): Promise => { - const res = await client.post(`/v1/studies/${uuid}/links`, linkCreationInfo); - return res.data; -}; - export const updateAreaUI = async ( uuid: string, areaId: string, @@ -65,17 +53,6 @@ export const deleteArea = async ( return res.data; }; -export const deleteLink = async ( - uuid: string, - areaIdFrom: string, - areaIdTo: string, -): Promise => { - const res = await client.delete( - `/v1/studies/${uuid}/links/${areaIdFrom}/${areaIdTo}`, - ); - return res.data; -}; - export const updateConstraintTerm = async ( studyId: string, constraintId: string, @@ -163,21 +140,3 @@ export const createBindingConstraint = async ( ); return res.data; }; - -interface GetAllLinksParams { - uuid: string; - withUi?: boolean; -} - -type LinkTypeFromParams = T["withUi"] extends true - ? LinkInfoWithUI - : LinkCreationInfoDTO; - -export const getAllLinks = async ( - params: T, -): Promise>> => { - const { uuid, withUi } = params; - const withUiStr = withUi ? "with_ui=true" : ""; - const res = await client.get(`/v1/studies/${uuid}/links?${withUiStr}`); - return res.data; -}; diff --git a/webapp/src/services/api/tasks/index.ts b/webapp/src/services/api/tasks/index.ts index c9003eaae0..f1599fc97e 100644 --- a/webapp/src/services/api/tasks/index.ts +++ b/webapp/src/services/api/tasks/index.ts @@ -16,7 +16,7 @@ import client from "../client"; import type { GetTaskParams, GetTasksParams, TaskDTO } from "./types"; export async function getTasks(params: GetTasksParams) { - const res = await client.post("/v1/tasks", { + const { data } = await client.post("/v1/tasks", { status: params.status, type: params.type, name: params.name, @@ -27,13 +27,13 @@ export async function getTasks(params: GetTasksParams) { to_completion_date_utc: params.toCompletionDateUtc, }); - return res.data; + return data; } export async function getTask(params: GetTaskParams) { const { id, ...queryParams } = params; - const res = await client.get(`/v1/tasks/${id}`, { + const { data } = await client.get(`/v1/tasks/${id}`, { params: { wait_for_completion: queryParams.waitForCompletion, with_logs: queryParams.withLogs, @@ -41,5 +41,5 @@ export async function getTask(params: GetTaskParams) { }, }); - return res.data; + return data; } From d6b6d157c2ab15a1de42f68ae25527e52ce70713 Mon Sep 17 00:00:00 2001 From: MartinBelthle Date: Mon, 18 Nov 2024 14:22:19 +0100 Subject: [PATCH 03/86] feat(commands): add study_version information inside commands (#2202) --- ...9ceb38842_add_study_version_to_commands.py | 58 ++++++++ .../business/adequacy_patch_management.py | 1 + .../advanced_parameters_management.py | 1 + .../study/business/allocation_management.py | 4 +- antarest/study/business/area_management.py | 21 +++ .../study/business/areas/hydro_management.py | 4 +- .../business/areas/properties_management.py | 4 +- .../business/areas/renewable_management.py | 31 +++-- .../business/areas/st_storage_management.py | 26 +++- .../business/areas/thermal_management.py | 34 +++-- .../business/binding_constraint_management.py | 26 +++- antarest/study/business/config_management.py | 1 + .../study/business/correlation_management.py | 1 + antarest/study/business/district_manager.py | 3 + antarest/study/business/general_management.py | 15 ++- antarest/study/business/link_management.py | 3 + antarest/study/business/matrix_management.py | 1 + .../study/business/optimization_management.py | 2 + .../study/business/playlist_management.py | 1 + .../business/scenario_builder_management.py | 6 +- .../business/thematic_trimming_management.py | 1 + .../business/timeseries_config_management.py | 4 + antarest/study/model.py | 16 +-- antarest/study/service.py | 41 +++--- .../rawstudy/model/filesystem/config/model.py | 13 +- .../business/command_extractor.py | 49 ++++--- .../variantstudy/business/command_reverter.py | 19 ++- .../storage/variantstudy/business/utils.py | 9 +- .../storage/variantstudy/command_factory.py | 19 ++- .../variantstudy/model/command/create_area.py | 3 +- .../command/create_binding_constraint.py | 8 +- .../model/command/create_cluster.py | 4 + .../model/command/create_district.py | 2 + .../variantstudy/model/command/create_link.py | 7 +- .../command/create_renewables_cluster.py | 2 + .../model/command/create_st_storage.py | 3 + .../generate_thermal_cluster_timeseries.py | 2 +- .../variantstudy/model/command/icommand.py | 2 + .../variantstudy/model/command/remove_area.py | 1 + .../command/remove_binding_constraint.py | 1 + .../model/command/remove_cluster.py | 1 + .../model/command/remove_district.py | 1 + .../variantstudy/model/command/remove_link.py | 1 + .../command/remove_renewables_cluster.py | 1 + .../model/command/remove_st_storage.py | 1 + .../model/command/replace_matrix.py | 1 + .../command/update_binding_constraint.py | 6 +- .../model/command/update_comments.py | 1 + .../model/command/update_config.py | 1 + .../model/command/update_district.py | 1 + .../model/command/update_playlist.py | 1 + .../model/command/update_raw_file.py | 1 + .../model/command/update_scenario_builder.py | 3 +- .../storage/variantstudy/model/dbmodel.py | 10 +- .../study/storage/variantstudy/model/model.py | 26 +++- .../variantstudy/variant_study_service.py | 30 ++++- antarest/study/web/variant_blueprint.py | 31 +++-- antarest/tools/lib.py | 15 ++- .../test_integration_variantmanager_tool.py | 14 +- .../test_matrix_garbage_collector.py | 7 +- .../storage/business/test_arealink_manager.py | 18 +-- tests/storage/business/test_config_manager.py | 5 +- .../storage/business/test_xpansion_manager.py | 4 + tests/storage/test_service.py | 5 +- .../study/business/test_allocation_manager.py | 4 +- .../business/test_correlation_manager.py | 3 +- tests/study/business/test_district_manager.py | 5 +- .../rawstudy/test_raw_study_service.py | 6 +- .../variantstudy/model/test_dbmodel.py | 3 + .../variantstudy/test_snapshot_generator.py | 17 ++- .../test_variant_study_service.py | 8 +- .../model/command/test_create_area.py | 40 +++--- .../model/command/test_create_cluster.py | 60 +++++++-- .../model/command/test_create_link.py | 72 +++++----- .../command/test_create_renewables_cluster.py | 37 +++++- .../model/command/test_create_st_storage.py | 41 +++++- .../test_manage_binding_constraints.py | 124 ++++++++++++------ .../model/command/test_manage_district.py | 56 ++++---- .../model/command/test_remove_area.py | 57 ++++---- .../model/command/test_remove_cluster.py | 38 ++++-- .../model/command/test_remove_link.py | 42 ++++-- .../command/test_remove_renewables_cluster.py | 40 ++++-- .../model/command/test_remove_st_storage.py | 53 ++++---- .../model/command/test_replace_matrix.py | 43 +++--- .../model/command/test_update_comments.py | 28 ++-- .../model/command/test_update_config.py | 41 +++--- .../model/command/test_update_rawfile.py | 2 + .../variantstudy/model/test_variant_model.py | 19 ++- tests/variantstudy/test_command_factory.py | 87 ++++++------ tests/variantstudy/test_utils.py | 20 +-- 90 files changed, 1061 insertions(+), 519 deletions(-) create mode 100644 alembic/versions/00a9ceb38842_add_study_version_to_commands.py diff --git a/alembic/versions/00a9ceb38842_add_study_version_to_commands.py b/alembic/versions/00a9ceb38842_add_study_version_to_commands.py new file mode 100644 index 0000000000..d6f74a67b9 --- /dev/null +++ b/alembic/versions/00a9ceb38842_add_study_version_to_commands.py @@ -0,0 +1,58 @@ +"""add_study_version_to_commands + +Revision ID: 00a9ceb38842 +Revises: b33e1f57a60c +Create Date: 2024-10-28 10:30:15.877468 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.sql import table, column +from sqlalchemy.orm import Session + + +# revision identifiers, used by Alembic. +revision = '00a9ceb38842' +down_revision = 'b33e1f57a60c' +branch_labels = None +depends_on = None + + +def upgrade(): + # Add new column with empty data + with op.batch_alter_table("commandblock", schema=None) as batch_op: + batch_op.add_column(sa.Column('study_version', sa.String(length=36), server_default="fake_version", nullable=False)) + + # Create db connection + bind = op.get_bind() + session = Session(bind=bind) + + # Reference tables + commandblock_table = table('commandblock', column('id'), column('study_id')) + study_table = table('study', column('id'), column('version')) + + # Gathers commands by study_id + commands = session.query(commandblock_table).all() + mapping = {} + for cmd in commands: + cmd_id = cmd[0] + study_id = cmd[1] + mapping.setdefault(study_id, []).append(cmd_id) + + # Gets studies versions + study_info = session.query(study_table).filter(study_table.c.id.in_(mapping)).all() + + # Clean orphan commands + study_ids = {study_id for study_id, _ in study_info} + ids_to_remove = {cmd_id for study_id, cmd_ids in mapping.items() if study_id not in study_ids for cmd_id in cmd_ids} + bind.execute(commandblock_table.delete().where(commandblock_table.c.id.in_(ids_to_remove))) + + # Insert new values + alter_table = table("commandblock", column("id"), column("study_id"), column("study_version")) + scalar_subq = sa.select(study_table.c.version).where(study_table.c.id == alter_table.c.study_id).scalar_subquery() + bind.execute(sa.update(alter_table).values(study_version=scalar_subq)) + + +def downgrade(): + with op.batch_alter_table("commandblock", schema=None) as batch_op: + batch_op.drop_column('study_version') diff --git a/antarest/study/business/adequacy_patch_management.py b/antarest/study/business/adequacy_patch_management.py index 26dc1ec548..09ad034aed 100644 --- a/antarest/study/business/adequacy_patch_management.py +++ b/antarest/study/business/adequacy_patch_management.py @@ -134,6 +134,7 @@ def set_field_values(self, study: Study, field_values: AdequacyPatchFormFields) target=info["path"], data=value, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=study.version, ) ) diff --git a/antarest/study/business/advanced_parameters_management.py b/antarest/study/business/advanced_parameters_management.py index 87f6939a91..02e0da1134 100644 --- a/antarest/study/business/advanced_parameters_management.py +++ b/antarest/study/business/advanced_parameters_management.py @@ -265,6 +265,7 @@ def set_field_values(self, study: Study, field_values: AdvancedParamsFormFields) target=info["path"], data=value, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=study.version, ) ) diff --git a/antarest/study/business/allocation_management.py b/antarest/study/business/allocation_management.py index af53df762f..eb18ae9bd2 100644 --- a/antarest/study/business/allocation_management.py +++ b/antarest/study/business/allocation_management.py @@ -198,14 +198,14 @@ def set_allocation_form_fields( filtered_allocations = [f for f in data.allocation if f.coefficient > 0 and f.area_id in areas_ids] command_context = self.storage_service.variant_study_service.command_factory.command_context + file_study = self.storage_service.get_storage(study).get_raw(study) command = UpdateConfig( target=f"input/hydro/allocation/{area_id}/[allocation]", data={f.area_id: f.coefficient for f in filtered_allocations}, command_context=command_context, + study_version=file_study.config.version, ) - file_study = self.storage_service.get_storage(study).get_raw(study) - execute_or_add_commands(study, file_study, [command], self.storage_service) updated_allocations = self.get_allocation_data(study, area_id) diff --git a/antarest/study/business/area_management.py b/antarest/study/business/area_management.py index d90ec4c554..5220b0e8e1 100644 --- a/antarest/study/business/area_management.py +++ b/antarest/study/business/area_management.py @@ -376,6 +376,7 @@ def update_areas_props( target=f"input/areas/{area_id}/optimization", data=new_area_folder.optimization.to_config(), command_context=command_context, + study_version=study.version, ) ) if old_area_folder.adequacy_patch != new_area_folder.adequacy_patch and new_area_folder.adequacy_patch: @@ -384,6 +385,7 @@ def update_areas_props( target=f"input/areas/{area_id}/adequacy_patch", data=new_area_folder.adequacy_patch.to_config(), command_context=command_context, + study_version=study.version, ) ) if old_area.average_unsupplied_energy_cost != new_area.average_unsupplied_energy_cost: @@ -392,6 +394,7 @@ def update_areas_props( target=f"input/thermal/areas/unserverdenergycost/{area_id}", data=new_area.average_unsupplied_energy_cost, command_context=command_context, + study_version=study.version, ) ) if old_area.average_spilled_energy_cost != new_area.average_spilled_energy_cost: @@ -400,6 +403,7 @@ def update_areas_props( target=f"input/thermal/areas/spilledenergycost/{area_id}", data=new_area.average_spilled_energy_cost, command_context=command_context, + study_version=study.version, ) ) @@ -523,16 +527,19 @@ def create_update_commands(area_id: str) -> t.List[ICommand]: target=f"input/areas/{area_id}/ui/layerX", data=areas_ui[area_id]["layerX"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), UpdateConfig( target=f"input/areas/{area_id}/ui/layerY", data=areas_ui[area_id]["layerY"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), UpdateConfig( target=f"input/areas/{area_id}/ui/ui/layers", data=areas_ui[area_id]["ui"]["layers"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), ] @@ -569,6 +576,7 @@ def update_layer_name(self, study: RawStudy, layer_id: str, layer_name: str) -> target=f"layers/layers/layers/{layer_id}", data=layer_name, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) @@ -582,12 +590,14 @@ def create_layer(self, study: RawStudy, layer_name: str) -> str: target="layers/layers/layers", data={"0": "All", "1": layer_name}, command_context=command_context, + study_version=file_study.config.version, ) else: command = UpdateConfig( target=f"layers/layers/layers/{new_id}", data=layer_name, command_context=command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) return str(new_id) @@ -615,6 +625,7 @@ def remove_layer(self, study: RawStudy, layer_id: str) -> None: target="layers/layers/layers", data=layers, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) @@ -630,6 +641,7 @@ def create_area(self, study: Study, area_creation_info: AreaCreationDTO) -> Area command = CreateArea( area_name=area_creation_info.name, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) @@ -682,26 +694,31 @@ def update_area_ui(self, study: Study, area_id: str, area_ui: UpdateAreaUi, laye target=f"input/areas/{area_id}/ui/ui/x", data=obj["x"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), UpdateConfig( target=f"input/areas/{area_id}/ui/ui/y", data=obj["y"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), UpdateConfig( target=f"input/areas/{area_id}/ui/ui/color_r", data=obj["color_r"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), UpdateConfig( target=f"input/areas/{area_id}/ui/ui/color_g", data=obj["color_g"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), UpdateConfig( target=f"input/areas/{area_id}/ui/ui/color_b", data=obj["color_b"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), ] if layer == "0" @@ -713,16 +730,19 @@ def update_area_ui(self, study: Study, area_id: str, area_ui: UpdateAreaUi, laye target=f"input/areas/{area_id}/ui/layerX/{layer}", data=obj["x"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), UpdateConfig( target=f"input/areas/{area_id}/ui/layerY/{layer}", data=obj["y"], command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), UpdateConfig( target=f"input/areas/{area_id}/ui/layerColor/{layer}", data=f"{obj['color_r']},{obj['color_g']},{obj['color_b']}", command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ), ] ) @@ -754,6 +774,7 @@ def delete_area(self, study: Study, area_id: str) -> None: command = RemoveArea( id=area_id, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) diff --git a/antarest/study/business/areas/hydro_management.py b/antarest/study/business/areas/hydro_management.py index d464336d93..cba5ec626c 100644 --- a/antarest/study/business/areas/hydro_management.py +++ b/antarest/study/business/areas/hydro_management.py @@ -145,6 +145,7 @@ def set_field_values( target="/".join([info["path"], area_id]), data=value, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=study.version, ) ) @@ -181,10 +182,11 @@ def update_inflow_structure(self, study: Study, area_id: str, values: InflowStru """ # NOTE: Updates only "intermonthly-correlation" due to current model scope. path = INFLOW_PATH.format(area_id=area_id) + file_study = self.storage_service.get_storage(study).get_raw(study) command = UpdateConfig( target=path, data={"intermonthly-correlation": values.inter_monthly_correlation}, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) - file_study = self.storage_service.get_storage(study).get_raw(study) execute_or_add_commands(study, file_study, [command], self.storage_service) diff --git a/antarest/study/business/areas/properties_management.py b/antarest/study/business/areas/properties_management.py index ae11112a28..df5ab24663 100644 --- a/antarest/study/business/areas/properties_management.py +++ b/antarest/study/business/areas/properties_management.py @@ -173,9 +173,7 @@ def set_field_values( commands.append( UpdateConfig( - target=target, - data=data, - command_context=context, + target=target, data=data, command_context=context, study_version=file_study.config.version ) ) diff --git a/antarest/study/business/areas/renewable_management.py b/antarest/study/business/areas/renewable_management.py index b093aa325f..2063750ca3 100644 --- a/antarest/study/business/areas/renewable_management.py +++ b/antarest/study/business/areas/renewable_management.py @@ -207,7 +207,7 @@ def create_cluster( """ file_study = self._get_file_study(study) cluster = cluster_data.to_config(StudyVersion.parse(study.version)) - command = self._make_create_cluster_cmd(area_id, cluster) + command = self._make_create_cluster_cmd(area_id, cluster, file_study.config.version) execute_or_add_commands( study, file_study, @@ -217,12 +217,15 @@ def create_cluster( output = self.get_cluster(study, area_id, cluster.id) return output - def _make_create_cluster_cmd(self, area_id: str, cluster: RenewableConfigType) -> CreateRenewablesCluster: + def _make_create_cluster_cmd( + self, area_id: str, cluster: RenewableConfigType, study_version: StudyVersion + ) -> CreateRenewablesCluster: command = CreateRenewablesCluster( area_id=area_id, cluster_name=cluster.id, parameters=cluster.model_dump(mode="json", by_alias=True, exclude={"id"}), command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=study_version, ) return command @@ -298,7 +301,9 @@ def update_cluster( # create the update config commands with the modified data command_context = self.storage_service.variant_study_service.command_factory.command_context commands = [ - UpdateConfig(target=f"{path}/{key}", data=value, command_context=command_context) + UpdateConfig( + target=f"{path}/{key}", data=value, command_context=command_context, study_version=study_version + ) for key, value in data.items() ] execute_or_add_commands(study, file_study, commands, self.storage_service) @@ -319,7 +324,12 @@ def delete_clusters(self, study: Study, area_id: str, cluster_ids: t.Sequence[st command_context = self.storage_service.variant_study_service.command_factory.command_context commands = [ - RemoveRenewablesCluster(area_id=area_id, cluster_id=cluster_id, command_context=command_context) + RemoveRenewablesCluster( + area_id=area_id, + cluster_id=cluster_id, + command_context=command_context, + study_version=file_study.config.version, + ) for cluster_id in cluster_ids ] @@ -353,11 +363,12 @@ def duplicate_cluster( raise DuplicateRenewableCluster(area_id, new_id) # Cluster duplication + study_version = StudyVersion.parse(study.version) current_cluster = self.get_cluster(study, area_id, source_id) current_cluster.name = new_cluster_name creation_form = RenewableClusterCreation(**current_cluster.model_dump(by_alias=False, exclude={"id"})) - new_config = creation_form.to_config(StudyVersion.parse(study.version)) - create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config) + new_config = creation_form.to_config(study_version) + create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config, study_version) # Matrix edition lower_source_id = source_id.lower() @@ -368,7 +379,9 @@ def duplicate_cluster( storage_service = self.storage_service.get_storage(study) command_context = self.storage_service.variant_study_service.command_factory.command_context current_matrix = storage_service.get(study, source_path)["data"] - replace_matrix_cmd = ReplaceMatrix(target=new_path, matrix=current_matrix, command_context=command_context) + replace_matrix_cmd = ReplaceMatrix( + target=new_path, matrix=current_matrix, command_context=command_context, study_version=study_version + ) commands = [create_cluster_cmd, replace_matrix_cmd] execute_or_add_commands(study, self._get_file_study(study), commands, self.storage_service) @@ -385,6 +398,7 @@ def update_renewables_props( # Prepare the commands to update the renewable clusters. commands = [] + study_version = StudyVersion.parse(study.version) for area_id, update_renewables_by_ids in update_renewables_by_areas.items(): old_renewables_by_ids = old_renewables_by_areas[area_id] for renewable_id, update_cluster in update_renewables_by_ids.items(): @@ -395,13 +409,14 @@ def update_renewables_props( # Convert the DTO to a configuration object and update the configuration file. properties = create_renewable_config( - StudyVersion.parse(study.version), **new_cluster.model_dump(by_alias=False, exclude_none=True) + study_version, **new_cluster.model_dump(by_alias=False, exclude_none=True) ) path = _CLUSTER_PATH.format(area_id=area_id, cluster_id=renewable_id) cmd = UpdateConfig( target=path, data=properties.model_dump(mode="json", by_alias=True, exclude={"id"}), command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=study_version, ) commands.append(cmd) diff --git a/antarest/study/business/areas/st_storage_management.py b/antarest/study/business/areas/st_storage_management.py index 8c1a197861..b0ef5322ab 100644 --- a/antarest/study/business/areas/st_storage_management.py +++ b/antarest/study/business/areas/st_storage_management.py @@ -290,7 +290,7 @@ def create_storage( if values is not None: raise DuplicateSTStorage(area_id, storage.id) - command = self._make_create_cluster_cmd(area_id, storage) + command = self._make_create_cluster_cmd(area_id, storage, file_study.config.version) execute_or_add_commands( study, file_study, @@ -300,11 +300,14 @@ def create_storage( output = self.get_storage(study, area_id, storage_id=storage.id) return output - def _make_create_cluster_cmd(self, area_id: str, cluster: STStorageConfigType) -> CreateSTStorage: + def _make_create_cluster_cmd( + self, area_id: str, cluster: STStorageConfigType, study_version: StudyVersion + ) -> CreateSTStorage: command = CreateSTStorage( area_id=area_id, parameters=cluster, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=study_version, ) return command @@ -385,6 +388,7 @@ def update_storages_props( # Prepare the commands to update the storage clusters. commands = [] + study_version = StudyVersion.parse(study.version) for area_id, update_storages_by_ids in update_storages_by_areas.items(): old_storages_by_ids = old_storages_by_areas[area_id] for storage_id, update_cluster in update_storages_by_ids.items(): @@ -397,7 +401,7 @@ def update_storages_props( # Convert the DTO to a configuration object and update the configuration file. properties = create_st_storage_config( - StudyVersion.parse(study.version), + study_version, **new_cluster.model_dump(mode="json", by_alias=False, exclude_none=True), ) path = _STORAGE_LIST_PATH.format(area_id=area_id, storage_id=storage_id) @@ -405,6 +409,7 @@ def update_storages_props( target=path, data=properties.model_dump(mode="json", by_alias=True, exclude={"id"}), command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=study_version, ) commands.append(cmd) @@ -487,7 +492,9 @@ def update_storage( command_context = self.storage_service.variant_study_service.command_factory.command_context path = _STORAGE_LIST_PATH.format(area_id=area_id, storage_id=storage_id) commands = [ - UpdateConfig(target=f"{path}/{key}", data=value, command_context=command_context) + UpdateConfig( + target=f"{path}/{key}", data=value, command_context=command_context, study_version=study_version + ) for key, value in data.items() ] execute_or_add_commands(study, file_study, commands, self.storage_service) @@ -523,6 +530,7 @@ def delete_storages( area_id=area_id, storage_id=storage_id, command_context=command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) @@ -560,7 +568,7 @@ def duplicate_cluster(self, study: Study, area_id: str, source_id: str, new_clus ) new_config = creation_form.to_config(study_version) - create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config) + create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config, study_version) # Matrix edition lower_source_id = source_id.lower() @@ -581,7 +589,9 @@ def duplicate_cluster(self, study: Study, area_id: str, source_id: str, new_clus command_context = self.storage_service.variant_study_service.command_factory.command_context for source_path, new_path in zip(source_paths, new_paths): current_matrix = storage_service.get(study, source_path)["data"] - command = ReplaceMatrix(target=new_path, matrix=current_matrix, command_context=command_context) + command = ReplaceMatrix( + target=new_path, matrix=current_matrix, command_context=command_context, study_version=study_version + ) commands.append(command) execute_or_add_commands(study, self._get_file_study(study), commands, self.storage_service) @@ -656,7 +666,9 @@ def _save_matrix_obj( file_study = self._get_file_study(study) command_context = self.storage_service.variant_study_service.command_factory.command_context path = _STORAGE_SERIES_PATH.format(area_id=area_id, storage_id=storage_id, ts_name=ts_name) - command = ReplaceMatrix(target=path, matrix=matrix_data, command_context=command_context) + command = ReplaceMatrix( + target=path, matrix=matrix_data, command_context=command_context, study_version=file_study.config.version + ) execute_or_add_commands(study, file_study, [command], self.storage_service) def validate_matrices( diff --git a/antarest/study/business/areas/thermal_management.py b/antarest/study/business/areas/thermal_management.py index 2786617cc1..cbd0f7e997 100644 --- a/antarest/study/business/areas/thermal_management.py +++ b/antarest/study/business/areas/thermal_management.py @@ -250,6 +250,7 @@ def update_thermals_props( # Prepare the commands to update the thermal clusters. commands = [] + study_version = StudyVersion.parse(study.version) for area_id, update_thermals_by_ids in update_thermals_by_areas.items(): old_thermals_by_ids = old_thermals_by_areas[area_id] for thermal_id, update_cluster in update_thermals_by_ids.items(): @@ -262,7 +263,7 @@ def update_thermals_props( # Convert the DTO to a configuration object and update the configuration file. properties = create_thermal_config( - StudyVersion.parse(study.version), + study_version, **new_cluster.model_dump(mode="json", by_alias=False, exclude_none=True), ) path = _CLUSTER_PATH.format(area_id=area_id, cluster_id=thermal_id) @@ -270,6 +271,7 @@ def update_thermals_props( target=path, data=properties.model_dump(mode="json", by_alias=True, exclude={"id"}), command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=study_version, ) commands.append(cmd) @@ -297,7 +299,7 @@ def create_cluster(self, study: Study, area_id: str, cluster_data: ThermalCluste file_study = self._get_file_study(study) cluster = cluster_data.to_config(StudyVersion.parse(study.version)) - command = self._make_create_cluster_cmd(area_id, cluster) + command = self._make_create_cluster_cmd(area_id, cluster, file_study.config.version) execute_or_add_commands( study, file_study, @@ -307,7 +309,9 @@ def create_cluster(self, study: Study, area_id: str, cluster_data: ThermalCluste output = self.get_cluster(study, area_id, cluster.id) return output - def _make_create_cluster_cmd(self, area_id: str, cluster: ThermalConfigType) -> CreateCluster: + def _make_create_cluster_cmd( + self, area_id: str, cluster: ThermalConfigType, study_version: StudyVersion + ) -> CreateCluster: # NOTE: currently, in the `CreateCluster` class, there is a confusion # between the cluster name and the cluster ID (which is a section name). args = { @@ -315,6 +319,7 @@ def _make_create_cluster_cmd(self, area_id: str, cluster: ThermalConfigType) -> "cluster_name": cluster.id, "parameters": cluster.model_dump(mode="json", by_alias=True, exclude={"id"}), "command_context": self.storage_service.variant_study_service.command_factory.command_context, + "study_version": study_version, } command = CreateCluster.model_validate(args) return command @@ -369,7 +374,9 @@ def update_cluster( # create the update config commands with the modified data command_context = self.storage_service.variant_study_service.command_factory.command_context commands = [ - UpdateConfig(target=f"{path}/{key}", data=value, command_context=command_context) + UpdateConfig( + target=f"{path}/{key}", data=value, command_context=command_context, study_version=study_version + ) for key, value in data.items() ] execute_or_add_commands(study, file_study, commands, self.storage_service) @@ -391,7 +398,12 @@ def delete_clusters(self, study: Study, area_id: str, cluster_ids: t.Sequence[st command_context = self.storage_service.variant_study_service.command_factory.command_context commands = [ - RemoveCluster(area_id=area_id, cluster_id=cluster_id, command_context=command_context) + RemoveCluster( + area_id=area_id, + cluster_id=cluster_id, + command_context=command_context, + study_version=file_study.config.version, + ) for cluster_id in cluster_ids ] @@ -428,8 +440,9 @@ def duplicate_cluster( source_cluster = self.get_cluster(study, area_id, source_id) source_cluster.name = new_cluster_name creation_form = ThermalClusterCreation(**source_cluster.model_dump(mode="json", by_alias=False, exclude={"id"})) - new_config = creation_form.to_config(StudyVersion.parse(study.version)) - create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config) + study_version = StudyVersion.parse(study.version) + new_config = creation_form.to_config(study_version) + create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config, study_version) # Matrix edition lower_source_id = source_id.lower() @@ -443,7 +456,8 @@ def duplicate_cluster( f"input/thermal/prepro/{area_id}/{lower_new_id}/modulation", f"input/thermal/prepro/{area_id}/{lower_new_id}/data", ] - if StudyVersion.parse(study.version) >= STUDY_VERSION_8_7: + study_version = StudyVersion.parse(study.version) + if study_version >= STUDY_VERSION_8_7: source_paths.append(f"input/thermal/series/{area_id}/{lower_source_id}/CO2Cost") source_paths.append(f"input/thermal/series/{area_id}/{lower_source_id}/fuelCost") new_paths.append(f"input/thermal/series/{area_id}/{lower_new_id}/CO2Cost") @@ -455,7 +469,9 @@ def duplicate_cluster( command_context = self.storage_service.variant_study_service.command_factory.command_context for source_path, new_path in zip(source_paths, new_paths): current_matrix = storage_service.get(study, source_path)["data"] - command = ReplaceMatrix(target=new_path, matrix=current_matrix, command_context=command_context) + command = ReplaceMatrix( + target=new_path, matrix=current_matrix, command_context=command_context, study_version=study_version + ) commands.append(command) execute_or_add_commands(study, self._get_file_study(study), commands, self.storage_service) diff --git a/antarest/study/business/binding_constraint_management.py b/antarest/study/business/binding_constraint_management.py index e4b5125379..19e9c0f782 100644 --- a/antarest/study/business/binding_constraint_management.py +++ b/antarest/study/business/binding_constraint_management.py @@ -411,7 +411,10 @@ def _generate_replace_matrix_commands( BindingConstraintFrequency.WEEKLY.value: default_bc_weekly_daily_86, }[value.time_step].tolist() command = ReplaceMatrix( - target=f"input/bindingconstraints/{bc_id}", matrix=matrix, command_context=command_context + target=f"input/bindingconstraints/{bc_id}", + matrix=matrix, + command_context=command_context, + study_version=study_version, ) commands.append(command) else: @@ -424,7 +427,10 @@ def _generate_replace_matrix_commands( for matrix_name in matrices_to_replace: matrix_id = matrix_name.format(bc_id=bc_id) command = ReplaceMatrix( - target=f"input/bindingconstraints/{matrix_id}", matrix=matrix, command_context=command_context + target=f"input/bindingconstraints/{matrix_id}", + matrix=matrix, + command_context=command_context, + study_version=study_version, ) commands.append(command) return commands @@ -768,6 +774,7 @@ def create_binding_constraint( args = { **new_constraint, "command_context": self.storage_service.variant_study_service.command_factory.command_context, + "study_version": version, } if data.terms: args["coeffs"] = self.terms_to_coeffs(data.terms) @@ -808,6 +815,7 @@ def update_binding_constraint( args = { **upd_constraint, "command_context": self.storage_service.variant_study_service.command_factory.command_context, + "study_version": study_version, } if data.terms: args["coeffs"] = self.terms_to_coeffs(data.terms) @@ -915,6 +923,7 @@ def update_binding_constraints( target="input/bindingconstraints/bindingconstraints", data=config, command_context=command_context, + study_version=study_version, ) commands.append(command) execute_or_add_commands(study, file_study, commands, self.storage_service) @@ -935,7 +944,9 @@ def remove_binding_constraint(self, study: Study, binding_constraint_id: str) -> bc = self.get_binding_constraint(study, binding_constraint_id) command_context = self.storage_service.variant_study_service.command_factory.command_context file_study = self.storage_service.get_storage(study).get_raw(study) - command = RemoveBindingConstraint(id=bc.id, command_context=command_context) + command = RemoveBindingConstraint( + id=bc.id, command_context=command_context, study_version=file_study.config.version + ) execute_or_add_commands(study, file_study, [command], self.storage_service) def _update_constraint_with_terms( @@ -945,9 +956,14 @@ def _update_constraint_with_terms( term_id: [term.weight, term.offset] if term.offset else [term.weight] for term_id, term in terms.items() } command_context = self.storage_service.variant_study_service.command_factory.command_context - args = {"id": bc.id, "coeffs": coeffs, "command_context": command_context} - command = UpdateBindingConstraint.model_validate(args) file_study = self.storage_service.get_storage(study).get_raw(study) + args = { + "id": bc.id, + "coeffs": coeffs, + "command_context": command_context, + "study_version": file_study.config.version, + } + command = UpdateBindingConstraint.model_validate(args) execute_or_add_commands(study, file_study, [command], self.storage_service) def update_constraint_terms( diff --git a/antarest/study/business/config_management.py b/antarest/study/business/config_management.py index 856a48b535..19fdb4acc0 100644 --- a/antarest/study/business/config_management.py +++ b/antarest/study/business/config_management.py @@ -46,5 +46,6 @@ def set_playlist( reverse=reverse, active=active, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) diff --git a/antarest/study/business/correlation_management.py b/antarest/study/business/correlation_management.py index c05b293b3e..2b1a5b9430 100644 --- a/antarest/study/business/correlation_management.py +++ b/antarest/study/business/correlation_management.py @@ -224,6 +224,7 @@ def _set_array( target="/".join(self.url), data=correlation_cfg, command_context=command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) diff --git a/antarest/study/business/district_manager.py b/antarest/study/business/district_manager.py index 38a760b905..2cfec172d8 100644 --- a/antarest/study/business/district_manager.py +++ b/antarest/study/business/district_manager.py @@ -116,6 +116,7 @@ def create_district( base_filter=DistrictBaseFilter.remove_all, filter_items=list(areas), command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) return DistrictInfoDTO( @@ -161,6 +162,7 @@ def update_district( output=dto.output, comments=dto.comments, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) @@ -185,5 +187,6 @@ def remove_district( command = RemoveDistrict( id=district_id, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) diff --git a/antarest/study/business/general_management.py b/antarest/study/business/general_management.py index 2c1d80fdd6..e4b3730d53 100644 --- a/antarest/study/business/general_management.py +++ b/antarest/study/business/general_management.py @@ -268,7 +268,11 @@ def set_field_values(self, study: Study, field_values: GeneralFormFields) -> Non commands.extend(GeneralManager.__get_building_mode_update_cmds(value, file_study, cmd_cx)) continue - commands.append(UpdateConfig(target=info["path"], data=value, command_context=cmd_cx)) + commands.append( + UpdateConfig( + target=info["path"], data=value, command_context=cmd_cx, study_version=file_study.config.version + ) + ) if commands: execute_or_add_commands(study, file_study, commands, self.storage_service) @@ -290,26 +294,27 @@ def __get_building_mode_update_cmds( file_study: FileStudy, cmd_context: CommandContext, ) -> List[UpdateConfig]: + study_version = file_study.config.version if new_value == BuildingMode.DERATED: return [ UpdateConfig( target=f"{GENERAL_PATH}/derated", data=True, command_context=cmd_context, + study_version=study_version, ) ] return [ UpdateConfig( target=f"{GENERAL_PATH}/custom-scenario" - if file_study.config.version >= STUDY_VERSION_8 + if study_version >= STUDY_VERSION_8 else f"{GENERAL_PATH}/custom-ts-numbers", data=new_value == BuildingMode.CUSTOM, command_context=cmd_context, + study_version=study_version, ), UpdateConfig( - target=f"{GENERAL_PATH}/derated", - data=False, - command_context=cmd_context, + target=f"{GENERAL_PATH}/derated", data=False, command_context=cmd_context, study_version=study_version ), ] diff --git a/antarest/study/business/link_management.py b/antarest/study/business/link_management.py index 6715c20cff..0a303d49a7 100644 --- a/antarest/study/business/link_management.py +++ b/antarest/study/business/link_management.py @@ -69,6 +69,7 @@ def create_link(self, study: Study, link_creation_dto: LinkDTO) -> LinkDTO: area2=link.area2, parameters=link.model_dump(exclude_none=True), command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) @@ -81,6 +82,7 @@ def delete_link(self, study: RawStudy, area1_id: str, area2_id: str) -> None: area1=area1_id, area2=area2_id, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) execute_or_add_commands(study, file_study, [command], self.storage_service) @@ -140,6 +142,7 @@ def update_links_props( target=path, data=properties.to_config(), command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) commands.append(cmd) diff --git a/antarest/study/business/matrix_management.py b/antarest/study/business/matrix_management.py index 67f809b7e8..fcdfc07eb8 100644 --- a/antarest/study/business/matrix_management.py +++ b/antarest/study/business/matrix_management.py @@ -294,6 +294,7 @@ def update_matrix( target=path, matrix=strip_matrix_protocol(new_matrix_id), command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) ] diff --git a/antarest/study/business/optimization_management.py b/antarest/study/business/optimization_management.py index a33236997b..8156202f85 100644 --- a/antarest/study/business/optimization_management.py +++ b/antarest/study/business/optimization_management.py @@ -12,6 +12,7 @@ from typing import Any, Dict, List, Union, cast +from antares.study.version import StudyVersion from pydantic.types import StrictBool from antarest.study.business.all_optional_meta import all_optional_model @@ -155,6 +156,7 @@ def set_field_values(self, study: Study, field_values: OptimizationFormFields) - target=info["path"], data=value, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=study.version, ) ) diff --git a/antarest/study/business/playlist_management.py b/antarest/study/business/playlist_management.py index fef4a4d2a4..da70e87fa7 100644 --- a/antarest/study/business/playlist_management.py +++ b/antarest/study/business/playlist_management.py @@ -74,6 +74,7 @@ def set_table_data( weights=weights, active=True, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) ], self.storage_service, diff --git a/antarest/study/business/scenario_builder_management.py b/antarest/study/business/scenario_builder_management.py index ac5a6a2bb6..ce8834fbeb 100644 --- a/antarest/study/business/scenario_builder_management.py +++ b/antarest/study/business/scenario_builder_management.py @@ -212,7 +212,7 @@ def update_config(self, study: Study, rulesets: Rulesets) -> None: execute_or_add_commands( study, file_study, - [UpdateScenarioBuilder(data=sections, command_context=context)], + [UpdateScenarioBuilder(data=sections, command_context=context, study_version=file_study.config.version)], self.storage_service, ) @@ -236,7 +236,9 @@ def update_scenario_by_type(self, study: Study, table_form: TableForm, scenario_ ruleset_name = _get_active_ruleset_name(file_study) data = {ruleset_name: ruleset.get_rules(allow_nan=True)} command_context = self.storage_service.variant_study_service.command_factory.command_context - update_scenario = UpdateScenarioBuilder(data=data, command_context=command_context) + update_scenario = UpdateScenarioBuilder( + data=data, command_context=command_context, study_version=file_study.config.version + ) execute_or_add_commands(study, file_study, [update_scenario], self.storage_service) # Extract the updated table form for the given scenario type diff --git a/antarest/study/business/thematic_trimming_management.py b/antarest/study/business/thematic_trimming_management.py index d0ada30b65..d1db21c0e5 100644 --- a/antarest/study/business/thematic_trimming_management.py +++ b/antarest/study/business/thematic_trimming_management.py @@ -78,6 +78,7 @@ def set_field_values(self, study: Study, field_values: ThematicTrimmingFormField target="settings/generaldata/variables selection", data=config_data, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) ], self.storage_service, diff --git a/antarest/study/business/timeseries_config_management.py b/antarest/study/business/timeseries_config_management.py index 8b01bfe24e..226fc75bfb 100644 --- a/antarest/study/business/timeseries_config_management.py +++ b/antarest/study/business/timeseries_config_management.py @@ -146,6 +146,7 @@ def __set_field_values_for_type( target=f"{GENERAL_DATA_PATH}/general/nbtimeseries{ts_type}", data=field_values.number, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) ) @@ -155,6 +156,7 @@ def __set_field_values_for_type( target=f"{GENERAL_DATA_PATH}/general/refreshinterval{ts_type}", data=field_values.refresh_interval, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) ) @@ -164,6 +166,7 @@ def __set_field_values_for_type( target=f"input/{ts_type}/prepro/correlation/general/mode", data=field_values.season_correlation.value, command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) ) @@ -192,6 +195,7 @@ def __set_ts_types_str(self, file_study: FileStudy, path: str, values: t.Dict[TS target=path, data=", ".join([ts_type for ts_type in new_types if new_types[ts_type]]), command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, ) @staticmethod diff --git a/antarest/study/model.py b/antarest/study/model.py index aa24c26b09..b8378aa356 100644 --- a/antarest/study/model.py +++ b/antarest/study/model.py @@ -19,7 +19,7 @@ from pathlib import Path from antares.study.version import StudyVersion -from pydantic import field_serializer, field_validator +from pydantic import BeforeValidator, PlainSerializer, field_validator from sqlalchemy import ( # type: ignore Boolean, Column, @@ -65,6 +65,10 @@ STUDY_VERSION_9_1 = StudyVersion.parse("9.1") STUDY_VERSION_9_2 = StudyVersion.parse("9.2") +StudyVersionStr = t.Annotated[StudyVersion, BeforeValidator(StudyVersion.parse), PlainSerializer(str)] +StudyVersionInt = t.Annotated[StudyVersion, BeforeValidator(StudyVersion.parse), PlainSerializer(int)] + + STUDY_REFERENCE_TEMPLATES: t.Mapping[StudyVersion, str] = { STUDY_VERSION_6_0: "empty_study_613.zip", STUDY_VERSION_6_1: "empty_study_613.zip", @@ -380,7 +384,7 @@ class OwnerInfo(AntaresBaseModel): class StudyMetadataDTO(AntaresBaseModel): id: str name: str - version: StudyVersion + version: StudyVersionInt created: str updated: str type: str @@ -397,19 +401,11 @@ class StudyMetadataDTO(AntaresBaseModel): folder: t.Optional[str] = None tags: t.List[str] = [] - @field_serializer("version") - def serialize_version(self, version: StudyVersion) -> int: - return version.__int__() - @field_validator("horizon", mode="before") def transform_horizon_to_str(cls, val: t.Union[str, int, None]) -> t.Optional[str]: # horizon can be an int. return str(val) if val else val # type: ignore - @field_validator("version", mode="before") - def _validate_version(cls, v: t.Any) -> StudyVersion: - return StudyVersion.parse(v) - class StudyMetadataPatchDTO(AntaresBaseModel): name: t.Optional[str] = None diff --git a/antarest/study/service.py b/antarest/study/service.py index 3170e311d0..d8f708862d 100644 --- a/antarest/study/service.py +++ b/antarest/study/service.py @@ -26,6 +26,7 @@ import numpy as np import pandas as pd +from antares.study.version import StudyVersion from fastapi import HTTPException, UploadFile from markupsafe import escape from starlette.responses import FileResponse, Response @@ -212,11 +213,13 @@ def __init__( def _generate_timeseries(self, notifier: ITaskNotifier) -> None: """Run the task (lock the database).""" command_context = self.storage_service.variant_study_service.command_factory.command_context - command = GenerateThermalClusterTimeSeries.model_construct(command_context=command_context) listener = TaskProgressRecorder(notifier=notifier) with db(): study = self.repository.one(self._study_id) file_study = self.storage_service.get_storage(study).get_raw(study) + command = GenerateThermalClusterTimeSeries( + command_context=command_context, study_version=file_study.config.version + ) execute_or_add_commands(study, file_study, [command], self.storage_service, listener) if isinstance(file_study, VariantStudy): @@ -231,7 +234,6 @@ def _generate_timeseries(self, notifier: ITaskNotifier) -> None: result = task_service.status_task(generation_task_id, RequestParameters(DEFAULT_ADMIN_USER)) if not result.result or not result.result.success: raise ValueError(f"Failed to generate variant study {self._study_id}") - self.event_bus.push( Event( type=EventType.STUDY_EDITED, @@ -579,6 +581,7 @@ def edit_comments( target="settings/comments", b64Data=base64.b64encode(data.comments.encode("utf-8")).decode("utf-8"), command_context=variant_study_service.command_factory.command_context, + study_version=study.version, ) ] variant_study_service.append_commands( @@ -1510,10 +1513,7 @@ def import_output( return output_id def _create_edit_study_command( - self, - tree_node: INode[JSON, SUB_JSON, JSON], - url: str, - data: SUB_JSON, + self, tree_node: INode[JSON, SUB_JSON, JSON], url: str, data: SUB_JSON, study_version: StudyVersion ) -> ICommand: """ Create correct command to edit study @@ -1530,11 +1530,7 @@ def _create_edit_study_command( if isinstance(tree_node, IniFileNode): assert not isinstance(data, (bytes, list)) - return UpdateConfig( - target=url, - data=data, - command_context=context, - ) + return UpdateConfig(target=url, data=data, command_context=context, study_version=study_version) elif isinstance(tree_node, InputSeriesMatrix): if isinstance(data, bytes): # noinspection PyTypeChecker @@ -1550,30 +1546,22 @@ def _create_edit_study_command( matrix = pd.read_csv(io.BytesIO(data), delimiter=delimiter, header=None).to_numpy(dtype=np.float64) matrix = matrix.reshape((1, 0)) if matrix.size == 0 else matrix return ReplaceMatrix( - target=url, - matrix=matrix.tolist(), - command_context=context, + target=url, matrix=matrix.tolist(), command_context=context, study_version=study_version ) assert isinstance(data, (list, str)) - return ReplaceMatrix( - target=url, - matrix=data, - command_context=context, - ) + return ReplaceMatrix(target=url, matrix=data, command_context=context, study_version=study_version) elif isinstance(tree_node, RawFileNode): if url.split("/")[-1] == "comments": if isinstance(data, bytes): data = data.decode("utf-8") assert isinstance(data, str) - return UpdateComments( - comments=data, - command_context=context, - ) + return UpdateComments(comments=data, command_context=context, study_version=study_version) elif isinstance(data, bytes): return UpdateRawFile( target=url, b64Data=base64.b64encode(data).decode("utf-8"), command_context=context, + study_version=study_version, ) raise NotImplementedError() @@ -1619,7 +1607,8 @@ def _edit_study_using_command( # A 404 Not Found error is raised if the file does not exist. tree_node = file_study.tree.get_node(file_relpath.parts) # type: ignore - command = self._create_edit_study_command(tree_node=tree_node, url=url, data=data) + study_version = file_study.config.version + command = self._create_edit_study_command(tree_node=tree_node, url=url, data=data, study_version=study_version) if isinstance(study_service, RawStudyService): res = command.apply(study_data=file_study) @@ -1631,7 +1620,9 @@ def _edit_study_using_command( # noinspection SpellCheckingInspection url = "study/antares/lastsave" last_save_node = file_study.tree.get_node(url.split("/")) - cmd = self._create_edit_study_command(tree_node=last_save_node, url=url, data=int(time.time())) + cmd = self._create_edit_study_command( + tree_node=last_save_node, url=url, data=int(time.time()), study_version=study_version + ) cmd.apply(file_study) self.storage_service.variant_study_service.invalidate_cache(study) diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/model.py b/antarest/study/storage/rawstudy/model/filesystem/config/model.py index 64c5be0ee7..2f96b845a2 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/model.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/model.py @@ -15,11 +15,12 @@ from pathlib import Path from antares.study.version import StudyVersion -from pydantic import Field, field_serializer, field_validator, model_validator +from pydantic import Field, model_validator from antarest.core.serialization import AntaresBaseModel from antarest.core.utils.utils import DTO from antarest.study.business.enum_ignore_case import EnumIgnoreCase +from antarest.study.model import StudyVersionInt from .binding_constraint import ( DEFAULT_GROUP, @@ -308,7 +309,7 @@ class FileStudyTreeConfigDTO(AntaresBaseModel): study_path: Path path: Path study_id: str - version: StudyVersion + version: StudyVersionInt output_path: t.Optional[Path] = None areas: t.Dict[str, Area] = dict() sets: t.Dict[str, DistrictSet] = dict() @@ -319,14 +320,6 @@ class FileStudyTreeConfigDTO(AntaresBaseModel): enr_modelling: str = str(EnrModelling.AGGREGATED) archive_path: t.Optional[Path] = None - @field_serializer("version") - def serialize_version(self, version: StudyVersion) -> int: - return version.__int__() - - @field_validator("version", mode="before") - def _validate_version(cls, v: t.Any) -> StudyVersion: - return StudyVersion.parse(v) - @staticmethod def from_build_config( config: FileStudyTreeConfig, diff --git a/antarest/study/storage/variantstudy/business/command_extractor.py b/antarest/study/storage/variantstudy/business/command_extractor.py index e71027fcb9..2da4ac4271 100644 --- a/antarest/study/storage/variantstudy/business/command_extractor.py +++ b/antarest/study/storage/variantstudy/business/command_extractor.py @@ -76,19 +76,18 @@ def extract_area(self, study: FileStudy, area_id: str) -> t.Tuple[t.List[IComman ui_data = study_tree.get(["input", "areas", area_id, "ui"]) study_commands: t.List[ICommand] = [ - CreateArea( - area_name=area.name, - command_context=self.command_context, - ), + CreateArea(area_name=area.name, command_context=self.command_context, study_version=study_config.version), UpdateConfig( target=f"input/areas/{area_id}/optimization", data=optimization_data, command_context=self.command_context, + study_version=study_config.version, ), UpdateConfig( target=f"input/areas/{area_id}/ui", data=ui_data, command_context=self.command_context, + study_version=study_config.version, ), ] stopwatch.log_elapsed(lambda x: logger.info(f"Area command extraction done in {x}s")) @@ -156,11 +155,9 @@ def extract_link( links_data: t.Optional[JSON] = None, ) -> t.List[ICommand]: study_tree = study.tree + study_version = study.config.version link_command = CreateLink( - area1=area1, - area2=area2, - parameters={}, - command_context=self.command_context, + area1=area1, area2=area2, parameters={}, command_context=self.command_context, study_version=study_version ) link_data = ( links_data.get(area2) @@ -171,10 +168,11 @@ def extract_link( target=f"input/links/{area1}/properties/{area2}", data=link_data, command_context=self.command_context, + study_version=study_version, ) null_matrix_id = strip_matrix_protocol(self.generator_matrix_constants.get_null_matrix()) commands: t.List[ICommand] = [link_command, link_config_command] - if study.config.version < STUDY_VERSION_8_2: + if study_version < STUDY_VERSION_8_2: commands.append( self.generate_replace_matrix( study_tree, @@ -226,6 +224,7 @@ def _extract_cluster(self, study: FileStudy, area_id: str, cluster_id: str, rene cluster_name=cluster.id, parameters=cluster.model_dump(by_alias=True, exclude_defaults=True, exclude={"id"}), command_context=self.command_context, + study_version=study_tree.config.version, ), self.generate_replace_matrix( study_tree, @@ -333,6 +332,7 @@ def extract_district(self, study: FileStudy, district_id: str) -> t.List[IComman output=district_config.output, comments=district_fetched_config.get("comments", None), command_context=self.command_context, + study_version=study_config.version, ) ) return study_commands @@ -341,7 +341,11 @@ def extract_comments(self, study: FileStudy) -> t.List[ICommand]: study_tree = study.tree content = t.cast(bytes, study_tree.get(["settings", "comments"])) comments = content.decode("utf-8") - return [UpdateComments(comments=comments, command_context=self.command_context)] + return [ + UpdateComments( + comments=comments, command_context=self.command_context, study_version=study_tree.config.version + ) + ] def extract_binding_constraint( self, @@ -350,6 +354,7 @@ def extract_binding_constraint( bindings_data: t.Optional[JSON] = None, ) -> t.List[ICommand]: study_tree = study.tree + study_version = study.config.version # Retrieve binding constraint properties from the study tree, # so, field names follow the same convention as the INI file. @@ -368,7 +373,7 @@ def extract_binding_constraint( del binding[term_id] # Extract the matrices associated with the binding constraint - if study.config.version < STUDY_VERSION_8_7: + if study_version < STUDY_VERSION_8_7: urls = {"values": ["input", "bindingconstraints", bc_id]} else: urls = { @@ -384,14 +389,25 @@ def extract_binding_constraint( matrices[name] = matrix["data"] # Create the command to create the binding constraint - kwargs = {**binding, **matrices, "coeffs": terms, "command_context": self.command_context} + kwargs = { + **binding, + **matrices, + "coeffs": terms, + "command_context": self.command_context, + "study_version": study_version, + } create_cmd = CreateBindingConstraint.model_validate(kwargs) return [create_cmd] def generate_update_config(self, study_tree: FileStudyTree, url: t.List[str]) -> ICommand: data = study_tree.get(url) - return UpdateConfig(target="/".join(url), data=data, command_context=self.command_context) + return UpdateConfig( + target="/".join(url), + data=data, + command_context=self.command_context, + study_version=study_tree.config.version, + ) def generate_update_raw_file(self, study_tree: FileStudyTree, url: t.List[str]) -> ICommand: data = study_tree.get(url) @@ -399,6 +415,7 @@ def generate_update_raw_file(self, study_tree: FileStudyTree, url: t.List[str]) target="/".join(url), b64Data=base64.b64encode(t.cast(bytes, data)).decode("utf-8"), command_context=self.command_context, + study_version=study_tree.config.version, ) def generate_update_comments( @@ -408,8 +425,7 @@ def generate_update_comments( content = t.cast(bytes, study_tree.get(["settings", "comments"])) comments = content.decode("utf-8") return UpdateComments( - comments=comments, - command_context=self.command_context, + comments=comments, command_context=self.command_context, study_version=study_tree.config.version ) def generate_update_playlist( @@ -424,6 +440,7 @@ def generate_update_playlist( active=bool(playlist and len(playlist) > 0), reverse=False, command_context=self.command_context, + study_version=study_tree.config.version, ) def generate_replace_matrix( @@ -445,6 +462,7 @@ def generate_replace_matrix( target="/".join(url), matrix=matrix, command_context=self.command_context, + study_version=study_tree.config.version, ) def generate_update_district( @@ -464,4 +482,5 @@ def generate_update_district( output=district_config.output, comments=district_fetched_config.get("comments", None), command_context=self.command_context, + study_version=study_tree.config.version, ) diff --git a/antarest/study/storage/variantstudy/business/command_reverter.py b/antarest/study/storage/variantstudy/business/command_reverter.py index 5134a86bea..43dff3f981 100644 --- a/antarest/study/storage/variantstudy/business/command_reverter.py +++ b/antarest/study/storage/variantstudy/business/command_reverter.py @@ -61,7 +61,7 @@ def __init__(self) -> None: @staticmethod def _revert_create_area(base_command: CreateArea, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: area_id = transform_name_to_id(base_command.area_name) - return [RemoveArea(id=area_id, command_context=base_command.command_context)] + return [RemoveArea(id=area_id, command_context=base_command.command_context, study_version=base.config.version)] @staticmethod def _revert_remove_area(base_command: RemoveArea, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: @@ -74,7 +74,11 @@ def _revert_create_district( base: FileStudy, ) -> t.List[ICommand]: district_id = transform_name_to_id(base_command.name) - return [RemoveDistrict(id=district_id, command_context=base_command.command_context)] + return [ + RemoveDistrict( + id=district_id, command_context=base_command.command_context, study_version=base.config.version + ) + ] @staticmethod def _revert_remove_district( @@ -91,6 +95,7 @@ def _revert_create_link(base_command: CreateLink, history: t.List["ICommand"], b area1=base_command.area1, area2=base_command.area2, command_context=base_command.command_context, + study_version=base.config.version, ) ] @@ -105,7 +110,11 @@ def _revert_create_binding_constraint( base: FileStudy, ) -> t.List[ICommand]: bind_id = transform_name_to_id(base_command.name) - return [RemoveBindingConstraint(id=bind_id, command_context=base_command.command_context)] + return [ + RemoveBindingConstraint( + id=bind_id, command_context=base_command.command_context, study_version=base.config.version + ) + ] @staticmethod def _revert_update_binding_constraint( @@ -127,6 +136,7 @@ def _revert_update_binding_constraint( "filter_synthesis": command.filter_synthesis, "comments": command.comments, "command_context": command.command_context, + "study_version": base.config.version, } matrix_service = command.command_context.matrix_service @@ -166,6 +176,7 @@ def _revert_create_cluster( area_id=base_command.area_id, cluster_id=cluster_id, command_context=base_command.command_context, + study_version=base.config.version, ) ] @@ -187,6 +198,7 @@ def _revert_create_renewables_cluster( area_id=base_command.area_id, cluster_id=cluster_id, command_context=base_command.command_context, + study_version=base.config.version, ) ] @@ -210,6 +222,7 @@ def _revert_create_st_storage( area_id=base_command.area_id, storage_id=storage_id, command_context=base_command.command_context, + study_version=base.config.version, ) ] diff --git a/antarest/study/storage/variantstudy/business/utils.py b/antarest/study/storage/variantstudy/business/utils.py index e352466be2..c470d9ac03 100644 --- a/antarest/study/storage/variantstudy/business/utils.py +++ b/antarest/study/storage/variantstudy/business/utils.py @@ -124,6 +124,7 @@ def transform_command_to_dto( CommandDTO( action=prev_command.command_name.value, args=cur_command_args_batch, + study_version=prev_command.study_version, ) ) cur_command_args_batch = [command.to_dto().args] @@ -131,5 +132,11 @@ def transform_command_to_dto( cur_dto = ref_commands_dto[cur_dto_index] cur_dto_arg_count = 1 if isinstance(cur_dto.args, dict) else len(cur_dto.args) prev_command = command - commands_dto.append(CommandDTO(action=prev_command.command_name.value, args=cur_command_args_batch)) + commands_dto.append( + CommandDTO( + action=prev_command.command_name.value, + args=cur_command_args_batch, + study_version=prev_command.study_version, + ) + ) return commands_dto diff --git a/antarest/study/storage/variantstudy/command_factory.py b/antarest/study/storage/variantstudy/command_factory.py index 409cf81bb5..c22b2319f7 100644 --- a/antarest/study/storage/variantstudy/command_factory.py +++ b/antarest/study/storage/variantstudy/command_factory.py @@ -13,6 +13,8 @@ import copy import typing as t +from antares.study.version import StudyVersion + from antarest.core.model import JSON from antarest.matrixstore.service import ISimpleMatrixService from antarest.study.storage.patch_service import PatchService @@ -91,7 +93,9 @@ def __init__( patch_service=patch_service, ) - def _to_single_command(self, action: str, args: JSON, version: int, command_id: t.Optional[str]) -> ICommand: + def _to_single_command( + self, action: str, args: JSON, version: int, study_version: StudyVersion, command_id: t.Optional[str] + ) -> ICommand: """Convert a single CommandDTO to ICommand.""" if action in COMMAND_MAPPING: command_class = COMMAND_MAPPING[action] @@ -100,6 +104,7 @@ def _to_single_command(self, action: str, args: JSON, version: int, command_id: command_context=self.command_context, version=version, command_id=command_id, + study_version=study_version, ) raise NotImplementedError(action) @@ -121,11 +126,19 @@ def to_command(self, command_dto: CommandDTO) -> t.List[ICommand]: # In some cases, pydantic can modify inplace the given args. # We don't want that so before doing so we copy the dictionnary. new_args = copy.deepcopy(args) - return [self._to_single_command(command_dto.action, new_args, command_dto.version, command_dto.id)] + return [ + self._to_single_command( + command_dto.action, new_args, command_dto.version, command_dto.study_version, command_dto.id + ) + ] elif isinstance(args, list): return [ self._to_single_command( - command_dto.action, copy.deepcopy(argument), command_dto.version, command_dto.id + command_dto.action, + copy.deepcopy(argument), + command_dto.version, + command_dto.study_version, + command_dto.id, ) for argument in args ] diff --git a/antarest/study/storage/variantstudy/model/command/create_area.py b/antarest/study/storage/variantstudy/model/command/create_area.py index 5c7f76a8d1..8dfd782f43 100644 --- a/antarest/study/storage/variantstudy/model/command/create_area.py +++ b/antarest/study/storage/variantstudy/model/command/create_area.py @@ -293,8 +293,7 @@ def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = def to_dto(self) -> CommandDTO: return CommandDTO( - action=CommandName.CREATE_AREA.value, - args={"area_name": self.area_name}, + action=CommandName.CREATE_AREA.value, args={"area_name": self.area_name}, study_version=self.study_version ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py index 84a7c4ecee..7fe37187b6 100644 --- a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py @@ -240,7 +240,9 @@ def to_dto(self) -> CommandDTO: if matrix_attr is not None: args[matrix_name] = matrix_service.get_matrix_id(matrix_attr) - return CommandDTO(action=self.command_name.value, args=args, version=self.version) + return CommandDTO( + action=self.command_name.value, args=args, version=self.version, study_version=self.study_version + ) def get_inner_matrices(self) -> t.List[str]: matrix_service = self.command_context.matrix_service @@ -431,7 +433,7 @@ def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = bd_id = transform_name_to_id(self.name) study_version = study_data.config.version - props = create_binding_constraint_config(study_version, **self.model_dump()) + props = create_binding_constraint_config(**self.model_dump()) obj = props.model_dump(mode="json", by_alias=True) new_binding = {"id": bd_id, "name": self.name, **obj} @@ -456,7 +458,7 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: other = t.cast(CreateBindingConstraint, other) bd_id = transform_name_to_id(self.name) - args = {"id": bd_id, "command_context": other.command_context} + args = {"id": bd_id, "command_context": other.command_context, "study_version": other.study_version} excluded_fields = set(ICommand.model_fields) self_command = self.model_dump(mode="json", exclude=excluded_fields) diff --git a/antarest/study/storage/variantstudy/model/command/create_cluster.py b/antarest/study/storage/variantstudy/model/command/create_cluster.py index d45a223b39..ab76488049 100644 --- a/antarest/study/storage/variantstudy/model/command/create_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_cluster.py @@ -168,6 +168,7 @@ def to_dto(self) -> CommandDTO: "prepro": strip_matrix_protocol(self.prepro), "modulation": strip_matrix_protocol(self.modulation), }, + study_version=self.study_version, ) def match_signature(self) -> str: @@ -206,6 +207,7 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: target=f"input/thermal/prepro/{self.area_id}/{series_id}/data", matrix=strip_matrix_protocol(other.prepro), command_context=self.command_context, + study_version=self.study_version, ) ) if self.modulation != other.modulation: @@ -214,6 +216,7 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: target=f"input/thermal/prepro/{self.area_id}/{series_id}/modulation", matrix=strip_matrix_protocol(other.modulation), command_context=self.command_context, + study_version=self.study_version, ) ) if self.parameters != other.parameters: @@ -222,6 +225,7 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: target=f"input/thermal/clusters/{self.area_id}/list/{self.cluster_name}", data=other.parameters, command_context=self.command_context, + study_version=self.study_version, ) ) return commands diff --git a/antarest/study/storage/variantstudy/model/command/create_district.py b/antarest/study/storage/variantstudy/model/command/create_district.py index 9c5aff55f6..5ed1fc8469 100644 --- a/antarest/study/storage/variantstudy/model/command/create_district.py +++ b/antarest/study/storage/variantstudy/model/command/create_district.py @@ -113,6 +113,7 @@ def to_dto(self) -> CommandDTO: "output": self.output, "comments": self.comments, }, + study_version=self.study_version, ) def match_signature(self) -> str: @@ -151,6 +152,7 @@ def _create_diff(self, other: "ICommand") -> List["ICommand"]: "comments": other.comments, }, command_context=self.command_context, + study_version=self.study_version, ) ] diff --git a/antarest/study/storage/variantstudy/model/command/create_link.py b/antarest/study/storage/variantstudy/model/command/create_link.py index dd62fc349c..5090608820 100644 --- a/antarest/study/storage/variantstudy/model/command/create_link.py +++ b/antarest/study/storage/variantstudy/model/command/create_link.py @@ -208,10 +208,7 @@ def to_dto(self) -> CommandDTO: args["direct"] = strip_matrix_protocol(self.direct) if self.indirect: args["indirect"] = strip_matrix_protocol(self.indirect) - return CommandDTO( - action=CommandName.CREATE_LINK.value, - args=args, - ) + return CommandDTO(action=CommandName.CREATE_LINK.value, args=args, study_version=self.study_version) def match_signature(self) -> str: return str( @@ -247,6 +244,7 @@ def _create_diff(self, other: "ICommand") -> List["ICommand"]: target=f"input/links/{area_from}/properties/{area_to}", data=link_property, command_context=self.command_context, + study_version=self.study_version, ) ) if self.series != other.series: @@ -255,6 +253,7 @@ def _create_diff(self, other: "ICommand") -> List["ICommand"]: target=f"@links_series/{area_from}/{area_to}", matrix=strip_matrix_protocol(other.series), command_context=self.command_context, + study_version=self.study_version, ) ) return commands diff --git a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py index 5c0120f7a9..9a1413665b 100644 --- a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py @@ -141,6 +141,7 @@ def to_dto(self) -> CommandDTO: "cluster_name": self.cluster_name, "parameters": self.parameters, }, + study_version=self.study_version, ) def match_signature(self) -> str: @@ -171,6 +172,7 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: target=f"input/renewables/clusters/{self.area_id}/list/{self.cluster_name}", data=other.parameters, command_context=self.command_context, + study_version=self.study_version, ) ) return commands diff --git a/antarest/study/storage/variantstudy/model/command/create_st_storage.py b/antarest/study/storage/variantstudy/model/command/create_st_storage.py index ed68124bbb..ae39cf8c28 100644 --- a/antarest/study/storage/variantstudy/model/command/create_st_storage.py +++ b/antarest/study/storage/variantstudy/model/command/create_st_storage.py @@ -264,6 +264,7 @@ def to_dto(self) -> CommandDTO: "parameters": parameters, **{attr: strip_matrix_protocol(getattr(self, attr)) for attr in _MATRIX_NAMES}, }, + study_version=self.study_version, ) def match_signature(self) -> str: @@ -316,6 +317,7 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: target=f"input/st-storage/series/{self.area_id}/{self.storage_id}/{attr}", matrix=strip_matrix_protocol(getattr(other, attr)), command_context=self.command_context, + study_version=self.study_version, ) for attr in _MATRIX_NAMES if getattr(self, attr) != getattr(other, attr) @@ -327,6 +329,7 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: target=f"input/st-storage/clusters/{self.area_id}/list/{self.storage_id}", data=data, command_context=self.command_context, + study_version=self.study_version, ) ) return commands diff --git a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py index c6bff64114..ff2935d30e 100644 --- a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py +++ b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py @@ -139,7 +139,7 @@ def _build_timeseries( raise def to_dto(self) -> CommandDTO: - return CommandDTO(action=self.command_name.value, args={}) + return CommandDTO(action=self.command_name.value, args={}, study_version=self.study_version) def match_signature(self) -> str: return str(self.command_name.value) diff --git a/antarest/study/storage/variantstudy/model/command/icommand.py b/antarest/study/storage/variantstudy/model/command/icommand.py index 7ea0bd64ba..f3c998c67f 100644 --- a/antarest/study/storage/variantstudy/model/command/icommand.py +++ b/antarest/study/storage/variantstudy/model/command/icommand.py @@ -19,6 +19,7 @@ from antarest.core.serialization import AntaresBaseModel from antarest.core.utils.utils import assert_this +from antarest.study.model import StudyVersionStr from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput @@ -51,6 +52,7 @@ class ICommand(ABC, AntaresBaseModel, extra="forbid", arbitrary_types_allowed=Tr command_name: CommandName version: int command_context: CommandContext + study_version: StudyVersionStr @abstractmethod def _apply_config(self, study_data: FileStudyTreeConfig) -> OutputTuple: diff --git a/antarest/study/storage/variantstudy/model/command/remove_area.py b/antarest/study/storage/variantstudy/model/command/remove_area.py index 39162252e8..af536c37df 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_area.py +++ b/antarest/study/storage/variantstudy/model/command/remove_area.py @@ -287,6 +287,7 @@ def to_dto(self) -> CommandDTO: args={ "id": self.id, }, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py index ca77cad860..916ba5ea70 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py @@ -82,6 +82,7 @@ def to_dto(self) -> CommandDTO: args={ "id": self.id, }, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/remove_cluster.py b/antarest/study/storage/variantstudy/model/command/remove_cluster.py index 76aafc36c1..eba5aec285 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/remove_cluster.py @@ -143,6 +143,7 @@ def to_dto(self) -> CommandDTO: return CommandDTO( action=self.command_name.value, args={"area_id": self.area_id, "cluster_id": self.cluster_id}, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/remove_district.py b/antarest/study/storage/variantstudy/model/command/remove_district.py index 9176aa9ac4..9e842d9872 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_district.py +++ b/antarest/study/storage/variantstudy/model/command/remove_district.py @@ -51,6 +51,7 @@ def to_dto(self) -> CommandDTO: args={ "id": self.id, }, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/remove_link.py b/antarest/study/storage/variantstudy/model/command/remove_link.py index 154fd10ed1..e1cee3a518 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_link.py +++ b/antarest/study/storage/variantstudy/model/command/remove_link.py @@ -155,6 +155,7 @@ def to_dto(self) -> CommandDTO: return CommandDTO( action=CommandName.REMOVE_LINK.value, args={"area1": self.area1, "area2": self.area2}, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py b/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py index b80eb83219..bb378fc1d1 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py @@ -135,6 +135,7 @@ def to_dto(self) -> CommandDTO: return CommandDTO( action=self.command_name.value, args={"area_id": self.area_id, "cluster_id": self.cluster_id}, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/remove_st_storage.py b/antarest/study/storage/variantstudy/model/command/remove_st_storage.py index 15e6e1c1ae..b369612ace 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_st_storage.py +++ b/antarest/study/storage/variantstudy/model/command/remove_st_storage.py @@ -140,6 +140,7 @@ def to_dto(self) -> CommandDTO: return CommandDTO( action=self.command_name.value, args={"area_id": self.area_id, "storage_id": self.storage_id}, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/replace_matrix.py b/antarest/study/storage/variantstudy/model/command/replace_matrix.py index d74333cb2e..b26dd717f1 100644 --- a/antarest/study/storage/variantstudy/model/command/replace_matrix.py +++ b/antarest/study/storage/variantstudy/model/command/replace_matrix.py @@ -96,6 +96,7 @@ def to_dto(self) -> CommandDTO: "target": self.target, "matrix": strip_matrix_protocol(self.matrix), }, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py index d9b1620c2a..5f0f134494 100644 --- a/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py @@ -184,7 +184,7 @@ def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = time_step=time_step, specific_matrices=updated_matrices or None, version=study_version, create=False ) - props = create_binding_constraint_config(study_version, **self.model_dump()) + props = create_binding_constraint_config(**self.model_dump()) obj = props.model_dump(mode="json", by_alias=True, exclude_unset=True) updated_cfg = binding_constraints[index] @@ -210,7 +210,9 @@ def to_dto(self) -> CommandDTO: if key in matrices: json_command[key] = matrix_service.get_matrix_id(json_command[key]) - return CommandDTO(action=self.command_name.value, args=json_command, version=self.version) + return CommandDTO( + action=self.command_name.value, args=json_command, version=self.version, study_version=self.study_version + ) def match_signature(self) -> str: return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.id) diff --git a/antarest/study/storage/variantstudy/model/command/update_comments.py b/antarest/study/storage/variantstudy/model/command/update_comments.py index 7c77c920e8..108363a3a3 100644 --- a/antarest/study/storage/variantstudy/model/command/update_comments.py +++ b/antarest/study/storage/variantstudy/model/command/update_comments.py @@ -60,6 +60,7 @@ def to_dto(self) -> CommandDTO: args={ "comments": self.comments, }, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/update_config.py b/antarest/study/storage/variantstudy/model/command/update_config.py index 538d5c5923..258c64e80d 100644 --- a/antarest/study/storage/variantstudy/model/command/update_config.py +++ b/antarest/study/storage/variantstudy/model/command/update_config.py @@ -85,6 +85,7 @@ def to_dto(self) -> CommandDTO: "target": self.target, "data": self.data, }, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/update_district.py b/antarest/study/storage/variantstudy/model/command/update_district.py index e5ceffb2d2..2819e822a8 100644 --- a/antarest/study/storage/variantstudy/model/command/update_district.py +++ b/antarest/study/storage/variantstudy/model/command/update_district.py @@ -100,6 +100,7 @@ def to_dto(self) -> CommandDTO: "output": self.output, "comments": self.comments, }, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/update_playlist.py b/antarest/study/storage/variantstudy/model/command/update_playlist.py index 5dbb63a2a6..7840019672 100644 --- a/antarest/study/storage/variantstudy/model/command/update_playlist.py +++ b/antarest/study/storage/variantstudy/model/command/update_playlist.py @@ -62,6 +62,7 @@ def to_dto(self) -> CommandDTO: "weights": self.weights, "reverse": self.reverse, }, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/update_raw_file.py b/antarest/study/storage/variantstudy/model/command/update_raw_file.py index 5b6ed99296..4090b5ead1 100644 --- a/antarest/study/storage/variantstudy/model/command/update_raw_file.py +++ b/antarest/study/storage/variantstudy/model/command/update_raw_file.py @@ -67,6 +67,7 @@ def to_dto(self) -> CommandDTO: return CommandDTO( action=self.command_name.value, args={"target": self.target, "b64Data": self.b64Data}, + study_version=self.study_version, ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py b/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py index c660dc226b..89b12b5e51 100644 --- a/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py +++ b/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py @@ -100,8 +100,7 @@ def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutpu def to_dto(self) -> CommandDTO: return CommandDTO( - action=CommandName.UPDATE_SCENARIO_BUILDER.value, - args={"data": self.data}, + action=CommandName.UPDATE_SCENARIO_BUILDER.value, args={"data": self.data}, study_version=self.study_version ) def match_signature(self) -> str: diff --git a/antarest/study/storage/variantstudy/model/dbmodel.py b/antarest/study/storage/variantstudy/model/dbmodel.py index 421caf87d7..f09231cc86 100644 --- a/antarest/study/storage/variantstudy/model/dbmodel.py +++ b/antarest/study/storage/variantstudy/model/dbmodel.py @@ -65,11 +65,18 @@ class CommandBlock(Base): # type: ignore command: str = Column(String(255)) version: int = Column(Integer) args: str = Column(String()) + study_version: str = Column(String(36)) def to_dto(self) -> CommandDTO: # Database may lack a version number, defaulting to 1 if so. version = self.version or 1 - return CommandDTO(id=self.id, action=self.command, args=from_json(self.args), version=version) + return CommandDTO( + id=self.id, + action=self.command, + args=from_json(self.args), + version=version, + study_version=self.study_version, + ) def __str__(self) -> str: return ( @@ -79,6 +86,7 @@ def __str__(self) -> str: f" command={self.command!r}," f" version={self.version!r}," f" args={self.args!r})" + f" study_version={self.study_version!r}" ) diff --git a/antarest/study/storage/variantstudy/model/model.py b/antarest/study/storage/variantstudy/model/model.py index 3814b2519c..a303e39020 100644 --- a/antarest/study/storage/variantstudy/model/model.py +++ b/antarest/study/storage/variantstudy/model/model.py @@ -17,7 +17,7 @@ from antarest.core.model import JSON from antarest.core.serialization import AntaresBaseModel -from antarest.study.model import StudyMetadataDTO +from antarest.study.model import StudyMetadataDTO, StudyVersionStr LegacyDetailsDTO = t.Tuple[str, bool, str] """ @@ -58,21 +58,43 @@ class GenerationResultInfoDTO(AntaresBaseModel): details: t.MutableSequence[DetailsDTO] +class CommandDTOAPI(AntaresBaseModel): + """ + This class exposes a command inside the API. + + Attributes: + id: The unique identifier of the command. + action: The action to be performed by the command. + args: The arguments for the command action. + version: The version of the command. + """ + + id: t.Optional[str] = None + action: str + args: t.Union[t.MutableSequence[JSON], JSON] + version: int = 1 + + class CommandDTO(AntaresBaseModel): """ - This class represents a command. + This class represents a command internally. Attributes: id: The unique identifier of the command. action: The action to be performed by the command. args: The arguments for the command action. version: The version of the command. + study_version: The version of the study associated to the command. """ id: t.Optional[str] = None action: str args: t.Union[t.MutableSequence[JSON], JSON] version: int = 1 + study_version: StudyVersionStr + + def to_api(self) -> CommandDTOAPI: + return CommandDTOAPI.model_validate(self.model_dump(mode="json", exclude={"study_version"})) class CommandResultDTO(AntaresBaseModel): diff --git a/antarest/study/storage/variantstudy/variant_study_service.py b/antarest/study/storage/variantstudy/variant_study_service.py index 9d62589006..ea57a82d60 100644 --- a/antarest/study/storage/variantstudy/variant_study_service.py +++ b/antarest/study/storage/variantstudy/variant_study_service.py @@ -21,6 +21,7 @@ from uuid import uuid4 import humanize +from antares.study.version import StudyVersion from fastapi import HTTPException from filelock import FileLock @@ -64,6 +65,7 @@ from antarest.study.storage.variantstudy.model.dbmodel import CommandBlock, VariantStudy from antarest.study.storage.variantstudy.model.model import ( CommandDTO, + CommandDTOAPI, CommandResultDTO, GenerationResultInfoDTO, VariantTreeDTO, @@ -104,7 +106,7 @@ def __init__( self.command_factory = command_factory self.generator = VariantCommandGenerator(self.study_factory) - def get_command(self, study_id: str, command_id: str, params: RequestParameters) -> CommandDTO: + def get_command(self, study_id: str, command_id: str, params: RequestParameters) -> CommandDTOAPI: """ Get command lists Args: @@ -117,11 +119,11 @@ def get_command(self, study_id: str, command_id: str, params: RequestParameters) try: index = [command.id for command in study.commands].index(command_id) # Maybe add Try catch for this - return t.cast(CommandDTO, study.commands[index].to_dto()) + return t.cast(CommandDTOAPI, study.commands[index].to_dto().to_api()) except ValueError: raise CommandNotFoundError(f"Command with id {command_id} not found") from None - def get_commands(self, study_id: str, params: RequestParameters) -> t.List[CommandDTO]: + def get_commands(self, study_id: str, params: RequestParameters) -> t.List[CommandDTOAPI]: """ Get command lists Args: @@ -130,7 +132,17 @@ def get_commands(self, study_id: str, params: RequestParameters) -> t.List[Comma Returns: List of commands """ study = self._get_variant_study(study_id, params) - return [command.to_dto() for command in study.commands] + return [command.to_dto().to_api() for command in study.commands] + + def convert_commands( + self, study_id: str, api_commands: t.List[CommandDTOAPI], params: RequestParameters + ) -> t.List[CommandDTO]: + study = self._get_variant_study(study_id, params, raw_study_accepted=True) + study_version = StudyVersion.parse(study.version) + return [ + CommandDTO.model_validate({"study_version": study_version, **command.model_dump(mode="json")}) + for command in api_commands + ] def _check_commands_validity(self, study_id: str, commands: t.List[CommandDTO]) -> t.List[ICommand]: command_objects: t.List[ICommand] = [] @@ -196,6 +208,7 @@ def append_commands( args=to_json_string(command.args), index=(first_index + i), version=command.version, + study_version=str(command.study_version), ) for i, command in enumerate(validated_commands) ] @@ -230,7 +243,13 @@ def replace_commands( validated_commands = transform_command_to_dto(command_objs, commands) # noinspection PyArgumentList study.commands = [ - CommandBlock(command=command.action, args=to_json_string(command.args), index=i, version=command.version) + CommandBlock( + command=command.action, + args=to_json_string(command.args), + index=i, + version=command.version, + study_version=str(command.study_version), + ) for i, command in enumerate(validated_commands) ] self.invalidate_cache(study, invalidate_self_snapshot=True) @@ -873,6 +892,7 @@ def copy( args=command.args, index=command.index, version=command.version, + study_version=str(command.study_version), ) for command in src_meta.commands ] diff --git a/antarest/study/web/variant_blueprint.py b/antarest/study/web/variant_blueprint.py index 0011b3950d..4fa2459dde 100644 --- a/antarest/study/web/variant_blueprint.py +++ b/antarest/study/web/variant_blueprint.py @@ -27,7 +27,7 @@ from antarest.study.model import StudyMetadataDTO from antarest.study.service import StudyService from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig -from antarest.study.storage.variantstudy.model.model import CommandDTO, VariantTreeDTO +from antarest.study.storage.variantstudy.model.model import CommandDTOAPI, VariantTreeDTO logger = logging.getLogger(__name__) @@ -98,6 +98,7 @@ def create_variant( } }, command_context=command_context, + study_version=variant_study.version, ).to_dto() ], params, @@ -157,14 +158,14 @@ def get_parents( responses={ 200: { "description": "The detail of a command content", - "model": List[CommandDTO], + "model": List[CommandDTOAPI], } }, ) def list_commands( uuid: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> List[CommandDTO]: + ) -> List[CommandDTOAPI]: logger.info( f"Fetching command list of variant study {uuid}", extra={"user": current_user.id}, @@ -203,7 +204,7 @@ def export_matrices( ) def append_commands( uuid: str, - commands: List[CommandDTO] = Body(...), + commands: List[CommandDTOAPI] = Body(...), current_user: JWTUser = Depends(auth.get_current_user), ) -> Optional[List[str]]: logger.info( @@ -212,7 +213,8 @@ def append_commands( ) params = RequestParameters(user=current_user) sanitized_uuid = sanitize_uuid(uuid) - return study_service.apply_commands(sanitized_uuid, commands, params) + internal_commands = variant_study_service.convert_commands(sanitized_uuid, commands, params) + return study_service.apply_commands(sanitized_uuid, internal_commands, params) @bp.put( "/studies/{uuid}/commands", @@ -226,7 +228,7 @@ def append_commands( ) def replace_commands( uuid: str, - commands: List[CommandDTO] = Body(...), + commands: List[CommandDTOAPI] = Body(...), current_user: JWTUser = Depends(auth.get_current_user), ) -> str: logger.info( @@ -235,7 +237,8 @@ def replace_commands( ) params = RequestParameters(user=current_user) sanitized_uuid = sanitize_uuid(uuid) - return variant_study_service.replace_commands(sanitized_uuid, commands, params) + internal_commands = variant_study_service.convert_commands(sanitized_uuid, commands, params) + return variant_study_service.replace_commands(sanitized_uuid, internal_commands, params) @bp.post( "/studies/{uuid}/command", @@ -249,7 +252,7 @@ def replace_commands( ) def append_command( uuid: str, - command: CommandDTO, + command: CommandDTOAPI, current_user: JWTUser = Depends(auth.get_current_user), ) -> str: logger.info( @@ -258,7 +261,8 @@ def append_command( ) params = RequestParameters(user=current_user) sanitized_uuid = sanitize_uuid(uuid) - return variant_study_service.append_command(sanitized_uuid, command, params) + internal_command = variant_study_service.convert_commands(sanitized_uuid, [command], params)[0] + return variant_study_service.append_command(sanitized_uuid, internal_command, params) @bp.get( "/studies/{uuid}/commands/{cid}", @@ -267,7 +271,7 @@ def append_command( responses={ 200: { "description": "The detail of a command content", - "model": CommandDTO, + "model": CommandDTOAPI, } }, ) @@ -275,7 +279,7 @@ def get_command( uuid: str, cid: str, current_user: JWTUser = Depends(auth.get_current_user), - ) -> CommandDTO: + ) -> CommandDTOAPI: logger.info( f"Fetching command {cid} info of variant study {uuid}", extra={"user": current_user.id}, @@ -313,7 +317,7 @@ def move_command( def update_command( uuid: str, cid: str, - command: CommandDTO, + command: CommandDTOAPI, current_user: JWTUser = Depends(auth.get_current_user), ) -> None: logger.info( @@ -323,7 +327,8 @@ def update_command( params = RequestParameters(user=current_user) sanitized_uuid = sanitize_uuid(uuid) sanitized_cid = sanitize_string(cid) - variant_study_service.update_command(sanitized_uuid, sanitized_cid, command, params) + internal_command = variant_study_service.convert_commands(sanitized_uuid, [command], params)[0] + variant_study_service.update_command(sanitized_uuid, sanitized_cid, internal_command, params) @bp.delete( "/studies/{uuid}/commands/{cid}", diff --git a/antarest/tools/lib.py b/antarest/tools/lib.py index da6d4db43b..a8cef7e371 100644 --- a/antarest/tools/lib.py +++ b/antarest/tools/lib.py @@ -38,7 +38,7 @@ from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants from antarest.study.storage.variantstudy.command_factory import CommandFactory from antarest.study.storage.variantstudy.model.command.icommand import ICommand -from antarest.study.storage.variantstudy.model.model import CommandDTO, GenerationResultInfoDTO +from antarest.study.storage.variantstudy.model.model import CommandDTO, CommandDTOAPI, GenerationResultInfoDTO from antarest.study.storage.variantstudy.variant_command_extractor import VariantCommandsExtractor from antarest.study.storage.variantstudy.variant_command_generator import VariantCommandGenerator @@ -290,10 +290,11 @@ def generate_diff( ) stopwatch.log_elapsed(lambda x: logger.info(f"Variant input matrix copied in {x}s")) + study_version = empty_study.config.version extractor = VariantCommandsExtractor(local_matrix_service, patch_service=PatchService()) diff_commands = extractor.diff( - base=parse_commands(base_command_file), - variant=parse_commands(variant_command_file), + base=parse_commands(base_command_file, study_version), + variant=parse_commands(variant_command_file, study_version), empty_study=empty_study, ) @@ -310,14 +311,16 @@ def generate_diff( os.unlink(matrices_dir / matrix_file) -def parse_commands(file: Path) -> List[CommandDTO]: +def parse_commands(file: Path, study_version: StudyVersion) -> List[CommandDTO]: stopwatch = StopWatch() logger.info("Parsing commands script") with open(file, "r") as fh: json_commands = json.load(fh) stopwatch.log_elapsed(lambda x: logger.info(f"Script file read in {x}s")) - commands: List[CommandDTO] = [CommandDTO(**command) for command in json_commands] + commands: List[CommandDTO] = [ + CommandDTO.model_validate({"study_version": study_version, **command}) for command in json_commands + ] stopwatch.log_elapsed(lambda x: logger.info(f"Script commands parsed in {x}s")) return commands @@ -368,5 +371,5 @@ def generate_study( matrix_dir.mkdir() if not command_file.exists(): raise FileNotFoundError(f"Missing {COMMAND_FILE}") - commands = parse_commands(command_file) + commands = parse_commands(command_file, study_version) return generator.apply_commands(commands, matrix_dir) diff --git a/tests/integration/test_integration_variantmanager_tool.py b/tests/integration/test_integration_variantmanager_tool.py index a14a0f9a36..3303fa574a 100644 --- a/tests/integration/test_integration_variantmanager_tool.py +++ b/tests/integration/test_integration_variantmanager_tool.py @@ -18,9 +18,11 @@ import numpy as np import numpy.typing as npt +from antares.study.version import StudyVersion from fastapi import FastAPI from starlette.testclient import TestClient +from antarest.study.model import STUDY_VERSION_7_2 from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.variantstudy.model.command.common import CommandName from antarest.study.storage.variantstudy.model.model import CommandDTO, GenerationResultInfoDTO @@ -71,10 +73,11 @@ def generate_study_with_server( def test_variant_manager(app: FastAPI, tmp_path: str) -> None: client = TestClient(app, raise_server_exceptions=False) - commands = parse_commands(ASSETS_DIR / "commands1.json") + study_version = STUDY_VERSION_7_2 + commands = parse_commands(ASSETS_DIR / "commands1.json", study_version) matrix_dir = tmp_path / "empty_matrix_store" matrix_dir.mkdir(parents=True, exist_ok=True) - res, study_id = generate_study_with_server(client, "test", "720", commands, matrix_dir) + res, study_id = generate_study_with_server(client, "test", f"{study_version:ddd}", commands, matrix_dir) assert res is not None and res.success @@ -91,9 +94,10 @@ def test_parse_commands(tmp_path: str, app: FastAPI) -> None: client = TestClient(app, raise_server_exceptions=False) extract_commands(study_path, output_dir) - commands = [CommandDTO(action=CommandName.REMOVE_DISTRICT.value, args={"id": "all areas"})] + parse_commands( - output_dir / COMMAND_FILE - ) + study_version = StudyVersion.parse(version) + commands = [ + CommandDTO(action=CommandName.REMOVE_DISTRICT.value, args={"id": "all areas"}, study_version=study_version) + ] + parse_commands(output_dir / COMMAND_FILE, study_version) res, study_id = generate_study_with_server(client, name, version, commands, output_dir / MATRIX_STORE_DIR) assert res is not None and res.success generated_study_path = tmp_path / "internal_workspace" / study_id / "snapshot" diff --git a/tests/matrixstore/test_matrix_garbage_collector.py b/tests/matrixstore/test_matrix_garbage_collector.py index 865a6754ef..7cb909f59c 100644 --- a/tests/matrixstore/test_matrix_garbage_collector.py +++ b/tests/matrixstore/test_matrix_garbage_collector.py @@ -121,7 +121,8 @@ def test_get_matrices_used_in_variant_studies( with db(): study_id = "study_id" - variant_study_repository.save(VariantStudy(id=study_id)) + study_version = "880" + variant_study_repository.save(VariantStudy(id=study_id, version=study_version)) # TODO: add series to the command blocks command_block1 = CommandBlock( @@ -130,6 +131,7 @@ def test_get_matrices_used_in_variant_studies( args='{"area1": "area1", "area2": "area2"}', index=0, version=7, + study_version=study_version, ) command_block2 = CommandBlock( study_id=study_id, @@ -137,6 +139,7 @@ def test_get_matrices_used_in_variant_studies( args='{"area1": "area2", "area2": "area3"}', index=0, version=7, + study_version=study_version, ) db.session.add(command_block1) db.session.add(command_block2) @@ -149,6 +152,7 @@ def test_get_matrices_used_in_variant_studies( args='{"area1": "area1", "area2": "area2","series": "[[1,2,3]]"}', index=0, version=7, + study_version=study_version, ) command_block2 = CommandBlock( study_id=study_id, @@ -156,6 +160,7 @@ def test_get_matrices_used_in_variant_studies( args='{"area1": "area2", "area2": "area3","series": "[[1,2,4]]"}', index=0, version=7, + study_version=study_version, ) db.session.add(command_block1) db.session.add(command_block2) diff --git a/tests/storage/business/test_arealink_manager.py b/tests/storage/business/test_arealink_manager.py index 456be82a5b..adae212c4f 100644 --- a/tests/storage/business/test_arealink_manager.py +++ b/tests/storage/business/test_arealink_manager.py @@ -101,11 +101,12 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): # Check `AreaManager` behaviour with a RAW study study_id = str(uuid.uuid4()) # noinspection PyArgumentList + study_version = empty_study.config.version study = RawStudy( id=study_id, - version="820", path=str(empty_study.config.study_path), additional_data=StudyAdditionalData(), + version="820", ) db.session.add(study) db.session.commit() @@ -157,9 +158,9 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): # noinspection PyArgumentList study = VariantStudy( id=variant_id, - version="820", path=str(empty_study.config.study_path), additional_data=StudyAdditionalData(), + version="820", ) variant_study_service.get_raw.return_value = empty_study area_manager.create_area( @@ -168,12 +169,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): ) variant_study_service.append_commands.assert_called_with( variant_id, - [ - CommandDTO( - action=CommandName.CREATE_AREA.value, - args={"area_name": "test"}, - ) - ], + [CommandDTO(action=CommandName.CREATE_AREA.value, args={"area_name": "test"}, study_version=study_version)], RequestParameters(DEFAULT_ADMIN_USER), ) assert (empty_study.config.study_path / "patch.json").exists() @@ -220,6 +216,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): "data": "255,0,100", }, ], + study_version=study_version, ), ], RequestParameters(DEFAULT_ADMIN_USER), @@ -259,6 +256,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): "filter_year_by_year": "hourly, daily, weekly, monthly, annual", }, }, + study_version=study_version, ), ], RequestParameters(DEFAULT_ADMIN_USER), @@ -296,6 +294,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): "link_style": LinkStyle.PLAIN, }, }, + study_version=study_version, ), ], RequestParameters(DEFAULT_ADMIN_USER), @@ -307,6 +306,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): CommandDTO( action=CommandName.REMOVE_LINK.value, args={"area1": "test", "area2": "test2"}, + study_version=study_version, ), ], RequestParameters(DEFAULT_ADMIN_USER), @@ -315,7 +315,7 @@ def test_area_crud(empty_study: FileStudy, matrix_service: SimpleMatrixService): variant_study_service.append_commands.assert_called_with( variant_id, [ - CommandDTO(action=CommandName.REMOVE_AREA.value, args={"id": "test2"}), + CommandDTO(action=CommandName.REMOVE_AREA.value, args={"id": "test2"}, study_version=study_version), ], RequestParameters(DEFAULT_ADMIN_USER), ) diff --git a/tests/storage/business/test_config_manager.py b/tests/storage/business/test_config_manager.py index fa9e3b887a..d8a579bc40 100644 --- a/tests/storage/business/test_config_manager.py +++ b/tests/storage/business/test_config_manager.py @@ -95,8 +95,9 @@ def test_thematic_trimming_config() -> None: assert actual == expected study.version = config.version = 840 + study_version = StudyVersion.parse(study.version) actual = thematic_trimming_manager.get_field_values(study) - fields_info = get_fields_info(StudyVersion.parse(study.version)) + fields_info = get_fields_info(study_version) expected = ThematicTrimmingFormFields(**dict.fromkeys(fields_info, False)) expected.cong_fee_alg = True assert actual == expected @@ -109,6 +110,7 @@ def test_thematic_trimming_config() -> None: target="settings/generaldata/variables selection", data={"select_var -": [FIELDS_INFO["coal"]["path"]]}, command_context=command_context, + study_version=study_version, ) ) @@ -123,6 +125,7 @@ def test_thematic_trimming_config() -> None: "select_var +": [FIELDS_INFO["renw_1"]["path"]], }, command_context=command_context, + study_version=study_version, ) ) diff --git a/tests/storage/business/test_xpansion_manager.py b/tests/storage/business/test_xpansion_manager.py index 9c4cc56e07..5b1f8d1abd 100644 --- a/tests/storage/business/test_xpansion_manager.py +++ b/tests/storage/business/test_xpansion_manager.py @@ -70,13 +70,16 @@ def make_xpansion_manager(empty_study: FileStudy) -> XpansionManager: def make_areas(empty_study: FileStudy) -> None: + study_version = empty_study.config.version CreateArea( area_name="area1", command_context=Mock(spec=CommandContext, generator_matrix_constants=Mock()), + study_version=study_version, )._apply_config(empty_study.config) CreateArea( area_name="area2", command_context=Mock(spec=CommandContext, generator_matrix_constants=Mock()), + study_version=study_version, )._apply_config(empty_study.config) @@ -85,6 +88,7 @@ def make_link(empty_study: FileStudy) -> None: area1="area1", area2="area2", command_context=Mock(spec=CommandContext, generator_matrix_constants=Mock()), + study_version=empty_study.config.version, )._apply_config(empty_study.config) diff --git a/tests/storage/test_service.py b/tests/storage/test_service.py index d15e8f6d7a..526bdc679c 100644 --- a/tests/storage/test_service.py +++ b/tests/storage/test_service.py @@ -21,6 +21,7 @@ from unittest.mock import ANY, Mock, call, patch, seal import pytest +from antares.study.version import StudyVersion from sqlalchemy.orm import Session # type: ignore from starlette.responses import Response @@ -1344,7 +1345,9 @@ def test_create_command( ), ) - command = service._create_edit_study_command(tree_node=tree_node, url=url, data=data) + command = service._create_edit_study_command( + tree_node=tree_node, url=url, data=data, study_version=StudyVersion.parse("880") + ) assert command.command_name.value == expected_name diff --git a/tests/study/business/test_allocation_manager.py b/tests/study/business/test_allocation_manager.py index a7fec22f2e..18fc8d9aa5 100644 --- a/tests/study/business/test_allocation_manager.py +++ b/tests/study/business/test_allocation_manager.py @@ -27,7 +27,7 @@ AllocationMatrix, ) from antarest.study.business.area_management import AreaInfoDTO, AreaType -from antarest.study.model import RawStudy, Study, StudyContentStatus +from antarest.study.model import STUDY_VERSION_8_8, RawStudy, Study, StudyContentStatus from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.rawstudy.model.filesystem.root.filestudytree import FileStudyTree from antarest.study.storage.rawstudy.raw_study_service import RawStudyService @@ -348,6 +348,7 @@ def test_set_allocation_form_fields__nominal_case(self, db_session, study_storag ] area_id = "n" manager = AllocationManager(study_storage_service) + study_storage_service.get_storage(study).get_raw(study).config.version = STUDY_VERSION_8_8 with patch(EXECUTE_OR_ADD_COMMANDS) as exe: with patch( "antarest.study.business.allocation_management.AllocationManager.get_allocation_data", @@ -388,6 +389,7 @@ def test_set_allocation_form_fields__no_allocation_data(self, db_session, study_ area_id = "n" manager = AllocationManager(study_storage_service) + study_storage_service.get_storage(study).get_raw(study).config.version = STUDY_VERSION_8_8 with patch(EXECUTE_OR_ADD_COMMANDS) as exe: with patch( diff --git a/tests/study/business/test_correlation_manager.py b/tests/study/business/test_correlation_manager.py index 56d66c9e47..677b0fc62e 100644 --- a/tests/study/business/test_correlation_manager.py +++ b/tests/study/business/test_correlation_manager.py @@ -27,7 +27,7 @@ CorrelationManager, CorrelationMatrix, ) -from antarest.study.model import RawStudy, Study, StudyContentStatus +from antarest.study.model import STUDY_VERSION_8_8, RawStudy, Study, StudyContentStatus from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.rawstudy.model.filesystem.root.filestudytree import FileStudyTree from antarest.study.storage.rawstudy.raw_study_service import RawStudyService @@ -282,6 +282,7 @@ def test_set_field_values__nominal_case(self, db_session, study_storage_service, spec=FileStudyTree, get=Mock(return_value=correlation_cfg), ) + file_study.config.version = STUDY_VERSION_8_8 # Given the following arguments all_areas = [ diff --git a/tests/study/business/test_district_manager.py b/tests/study/business/test_district_manager.py index 51c040302d..2fb7a47068 100644 --- a/tests/study/business/test_district_manager.py +++ b/tests/study/business/test_district_manager.py @@ -21,7 +21,7 @@ DistrictManager, DistrictUpdateDTO, ) -from antarest.study.model import Study +from antarest.study.model import STUDY_VERSION_8_8, Study from antarest.study.storage.rawstudy.model.filesystem.config.model import DistrictSet from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.rawstudy.model.filesystem.root.filestudytree import FileStudyTree @@ -174,6 +174,7 @@ def test_create_district__nominal(self, study_storage_service: StudyStorageServi config=Mock(areas=areas, sets=sets), tree=Mock(spec=FileStudyTree), ) + file_study.config.version = STUDY_VERSION_8_8 raw_study_service = Mock(spec=RawStudyService) raw_study_service.get_raw.return_value = file_study study_storage_service.get_storage.return_value = raw_study_service @@ -263,6 +264,7 @@ def test_update_district__nominal(self, study_storage_service: StudyStorageServi config=Mock(areas=areas, sets=sets), tree=Mock(spec=FileStudyTree), ) + file_study.config.version = STUDY_VERSION_8_8 raw_study_service = Mock(spec=RawStudyService) raw_study_service.get_raw.return_value = file_study study_storage_service.get_storage.return_value = raw_study_service @@ -313,6 +315,7 @@ def test_remove_district__nominal(self, study_storage_service: StudyStorageServi config=Mock(areas=areas, sets=sets), tree=Mock(spec=FileStudyTree), ) + file_study.config.version = STUDY_VERSION_8_8 raw_study_service = Mock(spec=RawStudyService) raw_study_service.get_raw.return_value = file_study study_storage_service.get_storage.return_value = raw_study_service diff --git a/tests/study/storage/rawstudy/test_raw_study_service.py b/tests/study/storage/rawstudy/test_raw_study_service.py index acf6557bd4..a138da1735 100644 --- a/tests/study/storage/rawstudy/test_raw_study_service.py +++ b/tests/study/storage/rawstudy/test_raw_study_service.py @@ -121,10 +121,7 @@ def test_export_study_flat( patch_service=patch_service, ) - create_area_fr = CreateArea( - command_context=command_context, - area_name="fr", - ) + create_area_fr = CreateArea(command_context=command_context, area_name="fr", study_version=raw_study.version) # noinspection SpellCheckingInspection pmax_injection = np.random.rand(8760, 1) @@ -146,6 +143,7 @@ def test_export_study_flat( ), pmax_injection=pmax_injection.tolist(), inflows=inflows.tolist(), + study_version=raw_study.version, ) execute_or_add_commands( diff --git a/tests/study/storage/variantstudy/model/test_dbmodel.py b/tests/study/storage/variantstudy/model/test_dbmodel.py index aff5686dcb..e89ea48355 100644 --- a/tests/study/storage/variantstudy/model/test_dbmodel.py +++ b/tests/study/storage/variantstudy/model/test_dbmodel.py @@ -17,6 +17,7 @@ from pathlib import Path import pytest +from antares.study.version import StudyVersion from sqlalchemy.orm import Session # type: ignore from antarest.core.model import PublicMode @@ -144,6 +145,7 @@ def test_init(self, db_session: Session, variant_study_id: str) -> None: command=command, version=version, args=args, + study_version="860", ) db_session.add(block) db_session.commit() @@ -169,6 +171,7 @@ def test_init(self, db_session: Session, variant_study_id: str) -> None: "action": command, "args": json.loads(args), "version": 42, + "study_version": StudyVersion.parse("860"), } diff --git a/tests/study/storage/variantstudy/test_snapshot_generator.py b/tests/study/storage/variantstudy/test_snapshot_generator.py index 5fcd7c5dbd..62d173a57c 100644 --- a/tests/study/storage/variantstudy/test_snapshot_generator.py +++ b/tests/study/storage/variantstudy/test_snapshot_generator.py @@ -22,6 +22,7 @@ import numpy as np import pytest +from antares.study.version import StudyVersion from antarest.core.exceptions import VariantGenerationError from antarest.core.interfaces.cache import CacheConstants @@ -784,14 +785,17 @@ def variant_study_fixture( name = "my-variant" params = RequestParameters(user=jwt_user) variant_study = variant_study_service.create_variant_study(root_study_id, name, params=params) + study_version = StudyVersion.parse(variant_study.version) # Append some commands variant_study_service.append_commands( variant_study.id, [ - CommandDTO(action="create_area", args={"area_name": "North"}), - CommandDTO(action="create_area", args={"area_name": "South"}), - CommandDTO(action="create_link", args={"area1": "north", "area2": "south"}), + CommandDTO(action="create_area", args={"area_name": "North"}, study_version=study_version), + CommandDTO(action="create_area", args={"area_name": "South"}, study_version=study_version), + CommandDTO( + action="create_link", args={"area1": "north", "area2": "south"}, study_version=study_version + ), CommandDTO( action="create_cluster", args={ @@ -799,6 +803,7 @@ def variant_study_fixture( "cluster_name": "gas_cluster", "parameters": {"group": "Gas", "unitcount": 1, "nominalcapacity": 500}, }, + study_version=study_version, ), ], params=params, @@ -1119,10 +1124,11 @@ def test_generate__with_invalid_command( """ # Append an invalid command to the variant study. params = RequestParameters(user=jwt_user) + study_version = StudyVersion.parse(variant_study.version) variant_study_service.append_commands( variant_study.id, [ - CommandDTO(action="create_area", args={"area_name": "North"}), # duplicate + CommandDTO(action="create_area", args={"area_name": "North"}, study_version=study_version), # duplicate ], params=params, ) @@ -1253,10 +1259,11 @@ def test_generate__variant_of_variant( new_variant = variant_study_service.create_variant_study(variant_study.id, "my-variant", params=params) # Append some commands to the new variant. + study_version = StudyVersion.parse(new_variant.version) variant_study_service.append_commands( new_variant.id, [ - CommandDTO(action="create_area", args={"area_name": "East"}), + CommandDTO(action="create_area", args={"area_name": "East"}, study_version=study_version), ], params=params, ) diff --git a/tests/study/storage/variantstudy/test_variant_study_service.py b/tests/study/storage/variantstudy/test_variant_study_service.py index cd8f9100c0..dc6b4a47d3 100644 --- a/tests/study/storage/variantstudy/test_variant_study_service.py +++ b/tests/study/storage/variantstudy/test_variant_study_service.py @@ -18,6 +18,7 @@ import numpy as np import pytest +from antares.study.version import StudyVersion from antarest.core.jwt import DEFAULT_ADMIN_USER, JWTUser from antarest.core.model import PublicMode @@ -165,6 +166,7 @@ def test_generate_task( ## Prepare the RAW Study raw_study_service.create(raw_study) + study_version = StudyVersion.parse(raw_study.version) variant_study = variant_study_service.create_variant_study( raw_study.id, @@ -184,10 +186,7 @@ def test_generate_task( patch_service=patch_service, ) - create_area_fr = CreateArea( - command_context=command_context, - area_name="fr", - ) + create_area_fr = CreateArea(command_context=command_context, area_name="fr", study_version=study_version) ## Prepare the Variant Study Data # noinspection SpellCheckingInspection @@ -210,6 +209,7 @@ def test_generate_task( ), pmax_injection=pmax_injection.tolist(), inflows=inflows.tolist(), + study_version=study_version, ) execute_or_add_commands( diff --git a/tests/variantstudy/model/command/test_create_area.py b/tests/variantstudy/model/command/test_create_area.py index d6593a929b..87f8d1044c 100644 --- a/tests/variantstudy/model/command/test_create_area.py +++ b/tests/variantstudy/model/command/test_create_area.py @@ -14,7 +14,9 @@ from unittest.mock import Mock import pytest +from antares.study.version import StudyVersion +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy @@ -38,7 +40,8 @@ def test_apply( enr_modelling: EnrModelling, ) -> None: empty_study.config.enr_modelling = enr_modelling.value - empty_study.config.version = version + study_version = StudyVersion.parse(version) + empty_study.config.version = study_version study_path = empty_study.config.study_path area_name = "Area" @@ -47,17 +50,14 @@ def test_apply( # Reset the configuration to check that the "unserverdenergycost" and "spilledenergycost" sections # are dynamically created when the new area is added to the study. output = UpdateConfig( - target="input/thermal/areas", - data={}, - command_context=command_context, + target="input/thermal/areas", data={}, command_context=command_context, study_version=study_version ).apply(study_data=empty_study) assert output.status, output.message # When the CreateArea command is applied - output = CreateArea( - area_name=area_name, - command_context=command_context, - ).apply(study_data=empty_study) + output = CreateArea(area_name=area_name, command_context=command_context, study_version=study_version).apply( + study_data=empty_study + ) assert output.status, output.message # Then, check the study structure @@ -165,16 +165,18 @@ def test_apply( assert output.status, output.message - create_area_command: ICommand = CreateArea(area_name=area_name, command_context=command_context, metadata={}) + create_area_command: ICommand = CreateArea( + area_name=area_name, command_context=command_context, metadata={}, study_version=study_version + ) output = create_area_command.apply(study_data=empty_study) assert not output.status def test_match(command_context: CommandContext) -> None: - base = CreateArea(area_name="foo", command_context=command_context) - other_match = CreateArea(area_name="foo", command_context=command_context) - other_not_match = CreateArea(area_name="bar", command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + base = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_not_match = CreateArea(area_name="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) @@ -184,12 +186,14 @@ def test_match(command_context: CommandContext) -> None: def test_revert(command_context: CommandContext) -> None: - base = CreateArea(area_name="foo", command_context=command_context) - actual = CommandReverter().revert(base, [], Mock(spec=FileStudy)) - assert actual == [RemoveArea(id="foo", command_context=command_context)] + base = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + file_study = Mock(spec=FileStudy) + file_study.config.version = STUDY_VERSION_8_8 + actual = CommandReverter().revert(base, [], file_study) + assert actual == [RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8)] def test_create_diff(command_context: CommandContext) -> None: - base = CreateArea(area_name="foo", command_context=command_context) - other_match = CreateArea(area_name="foo", command_context=command_context) + base = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_create_cluster.py b/tests/variantstudy/model/command/test_create_cluster.py index 35c21e91ab..77c4d10f90 100644 --- a/tests/variantstudy/model/command/test_create_cluster.py +++ b/tests/variantstudy/model/command/test_create_cluster.py @@ -12,11 +12,13 @@ import configparser import re +from unittest.mock import Mock import numpy as np import pytest from pydantic import ValidationError +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter @@ -42,11 +44,13 @@ def test_init(self, command_context: CommandContext): command_context=command_context, prepro=prepro, modulation=modulation, + study_version=STUDY_VERSION_8_8, ) # Check the command metadata assert cl.command_name == CommandName.CREATE_THERMAL_CLUSTER assert cl.version == 1 + assert cl.study_version == STUDY_VERSION_8_8 assert cl.command_context is command_context # Check the command data @@ -60,14 +64,32 @@ def test_init(self, command_context: CommandContext): def test_validate_cluster_name(self, command_context: CommandContext): with pytest.raises(ValidationError, match="cluster_name"): - CreateCluster(area_id="fr", cluster_name="%", command_context=command_context, parameters={}) + CreateCluster( + area_id="fr", + cluster_name="%", + command_context=command_context, + parameters={}, + study_version=STUDY_VERSION_8_8, + ) def test_validate_prepro(self, command_context: CommandContext): - cl = CreateCluster(area_id="fr", cluster_name="C1", command_context=command_context, parameters={}) + cl = CreateCluster( + area_id="fr", + cluster_name="C1", + command_context=command_context, + parameters={}, + study_version=STUDY_VERSION_8_8, + ) assert cl.prepro == command_context.generator_matrix_constants.get_thermal_prepro_data() def test_validate_modulation(self, command_context: CommandContext): - cl = CreateCluster(area_id="fr", cluster_name="C1", command_context=command_context, parameters={}) + cl = CreateCluster( + area_id="fr", + cluster_name="C1", + command_context=command_context, + parameters={}, + study_version=STUDY_VERSION_8_8, + ) assert cl.modulation == command_context.generator_matrix_constants.get_thermal_prepro_modulation() def test_apply(self, empty_study: FileStudy, command_context: CommandContext): @@ -77,7 +99,9 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): cluster_name = "Cluster-1" cluster_id = transform_name_to_id(cluster_name, lower=True) - CreateArea(area_name=area_name, command_context=command_context).apply(empty_study) + CreateArea(area_name=area_name, command_context=command_context, study_version=STUDY_VERSION_8_8).apply( + empty_study + ) parameters = { "group": "Other", @@ -96,6 +120,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): prepro=prepro, modulation=modulation, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) output = command.apply(empty_study) @@ -125,6 +150,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): prepro=prepro, modulation=modulation, command_context=command_context, + study_version=STUDY_VERSION_8_8, ).apply(empty_study) assert output.status is False assert re.match( @@ -140,6 +166,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): prepro=prepro, modulation=modulation, command_context=command_context, + study_version=STUDY_VERSION_8_8, ).apply(empty_study) assert output.status is False assert re.match( @@ -158,6 +185,7 @@ def test_to_dto(self, command_context: CommandContext): command_context=command_context, prepro=prepro, modulation=modulation, + study_version=STUDY_VERSION_8_8, ) prepro_id = command_context.matrix_service.create(prepro) modulation_id = command_context.matrix_service.create(modulation) @@ -173,6 +201,7 @@ def test_to_dto(self, command_context: CommandContext): }, "id": None, "version": 1, + "study_version": STUDY_VERSION_8_8, } @@ -186,6 +215,7 @@ def test_match(command_context: CommandContext): prepro=prepro, modulation=modulation, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_match = CreateCluster( area_id="foo", @@ -194,6 +224,7 @@ def test_match(command_context: CommandContext): prepro=prepro, modulation=modulation, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_not_match = CreateCluster( area_id="foo", @@ -202,8 +233,11 @@ def test_match(command_context: CommandContext): prepro=prepro, modulation=modulation, command_context=command_context, + study_version=STUDY_VERSION_8_8, + ) + other_other = RemoveCluster( + area_id="id", cluster_id="id", command_context=command_context, study_version=STUDY_VERSION_8_8 ) - other_other = RemoveCluster(area_id="id", cluster_id="id", command_context=command_context) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -226,13 +260,12 @@ def test_revert(command_context: CommandContext): cluster_name="foo", parameters={}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) - assert CommandReverter().revert(base, [], None) == [ - RemoveCluster( - area_id="foo", - cluster_id="foo", - command_context=command_context, - ) + file_study = Mock(spec=FileStudy) + file_study.config.version = STUDY_VERSION_8_8 + assert CommandReverter().revert(base, [], file_study) == [ + RemoveCluster(area_id="foo", cluster_id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) ] @@ -246,6 +279,7 @@ def test_create_diff(command_context: CommandContext): prepro=prepro_a, modulation=modulation_a, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) prepro_b = GEN.random((365, 6)).tolist() @@ -257,6 +291,7 @@ def test_create_diff(command_context: CommandContext): prepro=prepro_b, modulation=modulation_b, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) assert base.create_diff(other_match) == [ @@ -264,15 +299,18 @@ def test_create_diff(command_context: CommandContext): target="input/thermal/prepro/foo/foo/data", matrix=prepro_b, command_context=command_context, + study_version=STUDY_VERSION_8_8, ), ReplaceMatrix( target="input/thermal/prepro/foo/foo/modulation", matrix=modulation_b, command_context=command_context, + study_version=STUDY_VERSION_8_8, ), UpdateConfig( target="input/thermal/clusters/foo/list/foo", data={"nominalcapacity": "2400"}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ), ] diff --git a/tests/variantstudy/model/command/test_create_link.py b/tests/variantstudy/model/command/test_create_link.py index 33a536b514..c2e49e6509 100644 --- a/tests/variantstudy/model/command/test_create_link.py +++ b/tests/variantstudy/model/command/test_create_link.py @@ -10,11 +10,15 @@ # # This file is part of the Antares project. +import configparser +from unittest.mock import Mock + import numpy as np import pytest from pydantic import ValidationError from antarest.study.business.link_management import LinkInternal +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy @@ -35,17 +39,11 @@ def test_validation(self, empty_study: FileStudy, command_context: CommandContex area2 = "Area2" CreateArea.model_validate( - { - "area_name": area1, - "command_context": command_context, - } + {"area_name": area1, "command_context": command_context, "study_version": STUDY_VERSION_8_8} ).apply(empty_study) CreateArea.model_validate( - { - "area_name": area2, - "command_context": command_context, - } + {"area_name": area2, "command_context": command_context, "study_version": STUDY_VERSION_8_8} ).apply(empty_study) with pytest.raises(ValidationError): @@ -55,9 +53,11 @@ def test_validation(self, empty_study: FileStudy, command_context: CommandContex parameters={}, command_context=command_context, series=[[0]], + study_version=STUDY_VERSION_8_8, ) def test_apply(self, empty_study: FileStudy, command_context: CommandContext): + study_version = empty_study.config.version study_path = empty_study.config.study_path area1 = "Area1" area1_id = transform_name_to_id(area1) @@ -69,24 +69,15 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): area3_id = transform_name_to_id(area3) CreateArea.model_validate( - { - "area_name": area1, - "command_context": command_context, - } + {"area_name": area1, "command_context": command_context, "study_version": study_version} ).apply(empty_study) CreateArea.model_validate( - { - "area_name": area2, - "command_context": command_context, - } + {"area_name": area2, "command_context": command_context, "study_version": study_version} ).apply(empty_study) CreateArea.model_validate( - { - "area_name": area3, - "command_context": command_context, - } + {"area_name": area3, "command_context": command_context, "study_version": study_version} ).apply(empty_study) create_link_command: ICommand = CreateLink( @@ -95,6 +86,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): parameters={}, command_context=command_context, series=[[0]], + study_version=study_version, ) output = create_link_command.apply( study_data=empty_study, @@ -125,6 +117,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): parameters={}, command_context=command_context, series=[[0]], + study_version=study_version, ) output = create_link_command.apply( study_data=empty_study, @@ -145,6 +138,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): "parameters": {}, "series": [[0]], "command_context": command_context, + "study_version": study_version, } ).apply(study_data=empty_study) @@ -173,6 +167,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): "parameters": parameters, "series": [[0]], "command_context": command_context, + "study_version": study_version, } ) output = create_link_command.apply( @@ -208,15 +203,22 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): parameters={}, series=[[0]], command_context=command_context, + study_version=study_version, ).apply(empty_study) assert not output.status def test_match(command_context: CommandContext): - base = CreateLink(area1="foo", area2="bar", series=[[0]], command_context=command_context) - other_match = CreateLink(area1="foo", area2="bar", series=[[0]], command_context=command_context) - other_not_match = CreateLink(area1="foo", area2="baz", command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + base = CreateLink( + area1="foo", area2="bar", series=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_match = CreateLink( + area1="foo", area2="bar", series=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_not_match = CreateLink( + area1="foo", area2="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -227,23 +229,20 @@ def test_match(command_context: CommandContext): def test_revert(command_context: CommandContext): - base = CreateLink(area1="foo", area2="bar", series=[[0]], command_context=command_context) - assert CommandReverter().revert(base, [], None) == [ - RemoveLink( - area1="foo", - area2="bar", - command_context=command_context, - ) + base = CreateLink( + area1="foo", area2="bar", series=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + file_study = Mock(spec=FileStudy) + file_study.config.version = STUDY_VERSION_8_8 + assert CommandReverter().revert(base, [], file_study) == [ + RemoveLink(area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) ] def test_create_diff(command_context: CommandContext): series_a = np.random.rand(8760, 8).tolist() base = CreateLink( - area1="foo", - area2="bar", - series=series_a, - command_context=command_context, + area1="foo", area2="bar", series=series_a, command_context=command_context, study_version=STUDY_VERSION_8_8 ) series_b = np.random.rand(8760, 8).tolist() @@ -253,6 +252,7 @@ def test_create_diff(command_context: CommandContext): parameters={"hurdles_cost": "true"}, series=series_b, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) assert base.create_diff(other_match) == [ @@ -262,10 +262,12 @@ def test_create_diff(command_context: CommandContext): by_alias=True, exclude_none=True, exclude={"area1", "area2"} ), command_context=command_context, + study_version=STUDY_VERSION_8_8, ), ReplaceMatrix( target="@links_series/bar/foo", matrix=series_b, command_context=command_context, + study_version=STUDY_VERSION_8_8, ), ] diff --git a/tests/variantstudy/model/command/test_create_renewables_cluster.py b/tests/variantstudy/model/command/test_create_renewables_cluster.py index b23d6ba553..c23cb83f4f 100644 --- a/tests/variantstudy/model/command/test_create_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_create_renewables_cluster.py @@ -17,6 +17,7 @@ import pytest from pydantic import ValidationError +from antarest.study.model import STUDY_VERSION_8_1, STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter @@ -36,6 +37,7 @@ def test_init(self, command_context: CommandContext) -> None: cluster_name="Cluster1", parameters={"group": "Solar Thermal", "unitcount": 2, "nominalcapacity": 2400}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) # Check the command metadata @@ -50,17 +52,24 @@ def test_init(self, command_context: CommandContext) -> None: def test_validate_cluster_name(self, command_context: CommandContext) -> None: with pytest.raises(ValidationError, match="cluster_name"): - CreateRenewablesCluster(area_id="fr", cluster_name="%", command_context=command_context, parameters={}) + CreateRenewablesCluster( + area_id="fr", + cluster_name="%", + command_context=command_context, + parameters={}, + study_version=STUDY_VERSION_8_8, + ) def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> None: empty_study.config.enr_modelling = str(EnrModelling.CLUSTERS) - empty_study.config.version = 810 + study_version = STUDY_VERSION_8_1 + empty_study.config.version = study_version study_path = empty_study.config.study_path area_name = "DE" area_id = transform_name_to_id(area_name, lower=True) cluster_name = "Cluster-1" - CreateArea(area_name=area_name, command_context=command_context).apply(empty_study) + CreateArea(area_name=area_name, command_context=command_context, study_version=study_version).apply(empty_study) parameters = { "name": cluster_name, @@ -72,6 +81,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> cluster_name=cluster_name, parameters=parameters, command_context=command_context, + study_version=study_version, ) output = command.apply(empty_study) @@ -92,6 +102,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> cluster_name=cluster_name, parameters=parameters, command_context=command_context, + study_version=study_version, ).apply(empty_study) assert not output.status @@ -100,6 +111,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> cluster_name=cluster_name, parameters=parameters, command_context=command_context, + study_version=study_version, ).apply(empty_study) assert output.status is False @@ -114,6 +126,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> cluster_name=cluster_name, parameters=parameters, command_context=command_context, + study_version=study_version, ).apply(empty_study) assert output.status is False assert re.match( @@ -129,6 +142,7 @@ def test_to_dto(self, command_context: CommandContext) -> None: cluster_name="Cluster1", parameters={"group": "Solar Thermal", "unitcount": 2, "nominalcapacity": 2400}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) dto = command.to_dto() assert dto.model_dump() == { @@ -140,6 +154,7 @@ def test_to_dto(self, command_context: CommandContext) -> None: }, "id": None, "version": 1, + "study_version": STUDY_VERSION_8_8, } @@ -149,20 +164,25 @@ def test_match(command_context: CommandContext) -> None: cluster_name="foo", parameters={}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_match = CreateRenewablesCluster( area_id="foo", cluster_name="foo", parameters={}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_not_match = CreateRenewablesCluster( area_id="foo", cluster_name="bar", parameters={}, command_context=command_context, + study_version=STUDY_VERSION_8_8, + ) + other_other = RemoveRenewablesCluster( + area_id="id", cluster_id="id", command_context=command_context, study_version=STUDY_VERSION_8_8 ) - other_other = RemoveRenewablesCluster(area_id="id", cluster_id="id", command_context=command_context) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -181,14 +201,14 @@ def test_revert(command_context: CommandContext) -> None: cluster_name="cl1", parameters={}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) file_study = mock.MagicMock(spec=FileStudy) + file_study.config.version = STUDY_VERSION_8_8 revert_cmd = CommandReverter().revert(base, [], file_study) assert revert_cmd == [ RemoveRenewablesCluster( - area_id="area_foo", - cluster_id="cl1", - command_context=command_context, + area_id="area_foo", cluster_id="cl1", command_context=command_context, study_version=STUDY_VERSION_8_8 ) ] @@ -199,17 +219,20 @@ def test_create_diff(command_context: CommandContext) -> None: cluster_name="foo", parameters={}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_match = CreateRenewablesCluster( area_id="foo", cluster_name="foo", parameters={"a": "b"}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) assert base.create_diff(other_match) == [ UpdateConfig( target="input/renewables/clusters/foo/list/foo", data={"a": "b"}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ), ] diff --git a/tests/variantstudy/model/command/test_create_st_storage.py b/tests/variantstudy/model/command/test_create_st_storage.py index 14fbef9b8b..81093faec8 100644 --- a/tests/variantstudy/model/command/test_create_st_storage.py +++ b/tests/variantstudy/model/command/test_create_st_storage.py @@ -16,6 +16,7 @@ import pytest from pydantic import ValidationError +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import STStorageConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy @@ -85,11 +86,13 @@ def test_init(self, command_context: CommandContext): parameters=STStorageConfig(**PARAMETERS), pmax_injection=pmax_injection.tolist(), # type: ignore inflows=inflows.tolist(), # type: ignore + study_version=STUDY_VERSION_8_8, ) # Check the attribues assert cmd.command_name == CommandName.CREATE_ST_STORAGE assert cmd.version == 1 + assert cmd.study_version == STUDY_VERSION_8_8 assert cmd.command_context == command_context assert cmd.area_id == "area_fr" expected_parameters = {k: str(v) for k, v in PARAMETERS.items()} @@ -112,6 +115,7 @@ def test_init__invalid_storage_name(self, recent_study: FileStudy, command_conte command_context=command_context, area_id="dummy", parameters=STStorageConfig(**parameters), + study_version=STUDY_VERSION_8_8, ) # We get 2 errors because the `storage_name` is duplicated in the `parameters`: assert ctx.value.error_count() == 1 @@ -137,6 +141,7 @@ def test_init__invalid_matrix_values(self, command_context: CommandContext): area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), pmax_injection=array.tolist(), # type: ignore + study_version=STUDY_VERSION_8_8, ) assert ctx.value.error_count() == 1 raised_error = ctx.value.errors()[0] @@ -153,6 +158,7 @@ def test_init__invalid_matrix_shape(self, command_context: CommandContext): area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), pmax_injection=array.tolist(), # type: ignore + study_version=STUDY_VERSION_8_8, ) assert ctx.value.error_count() == 1 raised_error = ctx.value.errors()[0] @@ -169,6 +175,7 @@ def test_init__invalid_nan_value(self, command_context: CommandContext): area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), pmax_injection=array.tolist(), # type: ignore + study_version=STUDY_VERSION_8_8, ) assert ctx.value.error_count() == 1 raised_error = ctx.value.errors()[0] @@ -183,6 +190,7 @@ def test_init__invalid_matrix_type(self, command_context: CommandContext): area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), pmax_injection=[1, 2, 3], + study_version=STUDY_VERSION_8_8, ) assert ctx.value.error_count() == 1 raised_error = ctx.value.errors()[0] @@ -197,6 +205,7 @@ def test_apply_config__invalid_version(self, empty_study: FileStudy, command_con command_context=command_context, area_id="foo", parameters=STStorageConfig(**PARAMETERS), + study_version=empty_study.config.version, ) command_output = create_st_storage.apply_config(empty_study.config) @@ -215,6 +224,7 @@ def test_apply_config__missing_area(self, recent_study: FileStudy, command_conte command_context=command_context, area_id="unknown area", # bad ID parameters=STStorageConfig(**PARAMETERS), + study_version=recent_study.config.version, ) command_output = create_st_storage.apply_config(recent_study.config) @@ -229,8 +239,7 @@ def test_apply_config__missing_area(self, recent_study: FileStudy, command_conte def test_apply_config__duplicate_storage(self, recent_study: FileStudy, command_context: CommandContext): # First, prepare a new Area create_area = CreateArea( - area_name="Area FR", - command_context=command_context, + area_name="Area FR", command_context=command_context, study_version=recent_study.config.version ) create_area.apply(recent_study) @@ -239,6 +248,7 @@ def test_apply_config__duplicate_storage(self, recent_study: FileStudy, command_ command_context=command_context, area_id=transform_name_to_id(create_area.area_name), parameters=STStorageConfig(**PARAMETERS), + study_version=recent_study.config.version, ) command_output = create_st_storage.apply_config(recent_study.config) assert command_output.status is True @@ -249,6 +259,7 @@ def test_apply_config__duplicate_storage(self, recent_study: FileStudy, command_ command_context=command_context, area_id=transform_name_to_id(create_area.area_name), parameters=STStorageConfig(**parameters), + study_version=recent_study.config.version, ) command_output = create_st_storage.apply_config(recent_study.config) @@ -263,8 +274,7 @@ def test_apply_config__duplicate_storage(self, recent_study: FileStudy, command_ def test_apply_config__nominal_case(self, recent_study: FileStudy, command_context: CommandContext): # First, prepare a new Area create_area = CreateArea( - area_name="Area FR", - command_context=command_context, + area_name="Area FR", command_context=command_context, study_version=recent_study.config.version ) create_area.apply(recent_study) @@ -273,6 +283,7 @@ def test_apply_config__nominal_case(self, recent_study: FileStudy, command_conte command_context=command_context, area_id=transform_name_to_id(create_area.area_name), parameters=STStorageConfig(**PARAMETERS), + study_version=recent_study.config.version, ) command_output = create_st_storage.apply_config(recent_study.config) @@ -288,8 +299,7 @@ def test_apply_config__nominal_case(self, recent_study: FileStudy, command_conte def test_apply__nominal_case(self, recent_study: FileStudy, command_context: CommandContext): # First, prepare a new Area create_area = CreateArea( - area_name="Area FR", - command_context=command_context, + area_name="Area FR", command_context=command_context, study_version=recent_study.config.version ) create_area.apply(recent_study) @@ -302,6 +312,7 @@ def test_apply__nominal_case(self, recent_study: FileStudy, command_context: Com parameters=STStorageConfig(**PARAMETERS), pmax_injection=pmax_injection.tolist(), # type: ignore inflows=inflows.tolist(), # type: ignore + study_version=recent_study.config.version, ) command_output = cmd.apply(recent_study) assert command_output.status @@ -341,7 +352,9 @@ def test_apply__nominal_case(self, recent_study: FileStudy, command_context: Com def test_apply__invalid_apply_config(self, empty_study: FileStudy, command_context: CommandContext): # First, prepare a new Area - create_area = CreateArea(area_name="Area FR", command_context=command_context) + create_area = CreateArea( + area_name="Area FR", command_context=command_context, study_version=empty_study.config.version + ) create_area.apply(empty_study) # Then, apply the command to create a new ST Storage @@ -349,6 +362,7 @@ def test_apply__invalid_apply_config(self, empty_study: FileStudy, command_conte command_context=command_context, area_id=transform_name_to_id(create_area.area_name), parameters=STStorageConfig(**PARAMETERS), + study_version=empty_study.config.version, ) command_output = cmd.apply(empty_study) assert not command_output.status # invalid study (too old) @@ -359,6 +373,7 @@ def test_to_dto(self, command_context: CommandContext): command_context=command_context, area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), + study_version=STUDY_VERSION_8_8, ) actual = cmd.to_dto() @@ -379,6 +394,7 @@ def test_to_dto(self, command_context: CommandContext): "upper_rule_curve": strip_matrix_protocol(constants.get_st_storage_upper_rule_curve()), "inflows": strip_matrix_protocol(constants.get_st_storage_inflows()), }, + study_version=STUDY_VERSION_8_8, ) def test_match_signature(self, command_context: CommandContext): @@ -386,6 +402,7 @@ def test_match_signature(self, command_context: CommandContext): command_context=command_context, area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), + study_version=STUDY_VERSION_8_8, ) assert cmd.match_signature() == "create_st_storage%area_fr%storage1" @@ -401,11 +418,13 @@ def test_match( command_context=command_context, area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), + study_version=STUDY_VERSION_8_8, ) cmd2 = CreateSTStorage( command_context=command_context, area_id=area_id, parameters=STStorageConfig(**parameters), + study_version=STUDY_VERSION_8_8, ) light_equal = area_id == cmd1.area_id and parameters["name"] == cmd1.storage_name assert cmd1.match(cmd2, equal=False) == light_equal @@ -417,6 +436,7 @@ def test_match__unknown_type(self, command_context: CommandContext): command_context=command_context, area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), + study_version=STUDY_VERSION_8_8, ) # Always `False` when compared to another object type assert cmd1.match(..., equal=False) is False @@ -427,6 +447,7 @@ def test_create_diff__not_equals(self, command_context: CommandContext): command_context=command_context, area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), + study_version=STUDY_VERSION_8_8, ) upper_rule_curve = GEN.random((8760, 1)) inflows = GEN.uniform(0, 1000, size=(8760, 1)) @@ -436,6 +457,7 @@ def test_create_diff__not_equals(self, command_context: CommandContext): parameters=STStorageConfig(**OTHER_PARAMETERS), upper_rule_curve=upper_rule_curve.tolist(), # type: ignore inflows=inflows.tolist(), # type: ignore + study_version=STUDY_VERSION_8_8, ) actual = cmd.create_diff(other) expected = [ @@ -443,16 +465,19 @@ def test_create_diff__not_equals(self, command_context: CommandContext): command_context=command_context, target="input/st-storage/series/area_fr/storage1/upper_rule_curve", matrix=strip_matrix_protocol(other.upper_rule_curve), + study_version=STUDY_VERSION_8_8, ), ReplaceMatrix( command_context=command_context, target="input/st-storage/series/area_fr/storage1/inflows", matrix=strip_matrix_protocol(other.inflows), + study_version=STUDY_VERSION_8_8, ), UpdateConfig( command_context=command_context, target="input/st-storage/clusters/area_fr/list/storage1", data=OTHER_PARAMETERS, + study_version=STUDY_VERSION_8_8, ), ] assert actual == expected @@ -462,6 +487,7 @@ def test_create_diff__equals(self, command_context: CommandContext): command_context=command_context, area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), + study_version=STUDY_VERSION_8_8, ) actual = cmd.create_diff(cmd) assert not actual @@ -471,6 +497,7 @@ def test_get_inner_matrices(self, command_context: CommandContext): command_context=command_context, area_id="area_fr", parameters=STStorageConfig(**PARAMETERS), + study_version=STUDY_VERSION_8_8, ) actual = cmd.get_inner_matrices() constants = command_context.generator_matrix_constants diff --git a/tests/variantstudy/model/command/test_manage_binding_constraints.py b/tests/variantstudy/model/command/test_manage_binding_constraints.py index c62cdc8e27..1f3cb55971 100644 --- a/tests/variantstudy/model/command/test_manage_binding_constraints.py +++ b/tests/variantstudy/model/command/test_manage_binding_constraints.py @@ -15,6 +15,7 @@ import numpy as np import pytest +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( BindingConstraintFrequency, @@ -50,16 +51,19 @@ @pytest.mark.parametrize("empty_study", ["empty_study_720.zip", "empty_study_870.zip"], indirect=True) def test_manage_binding_constraint(empty_study: FileStudy, command_context: CommandContext): study_path = empty_study.config.study_path + study_version = empty_study.config.version area1 = "area1" area2 = "area2" cluster = "cluster" - CreateArea(area_name=area1, command_context=command_context).apply(empty_study) - CreateArea(area_name=area2, command_context=command_context).apply(empty_study) - CreateLink(area1=area1, area2=area2, command_context=command_context).apply(empty_study) - CreateCluster(area_id=area1, cluster_name=cluster, parameters={}, command_context=command_context).apply( + CreateArea(area_name=area1, command_context=command_context, study_version=study_version).apply(empty_study) + CreateArea(area_name=area2, command_context=command_context, study_version=study_version).apply(empty_study) + CreateLink(area1=area1, area2=area2, command_context=command_context, study_version=study_version).apply( empty_study ) + CreateCluster( + area_id=area1, cluster_name=cluster, parameters={}, command_context=command_context, study_version=study_version + ).apply(empty_study) output = CreateBindingConstraint( name="BD 1", @@ -68,6 +72,7 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm coeffs={"area1%area2": [800, 30]}, comments="Hello", command_context=command_context, + study_version=study_version, ).apply(empty_study) assert output.status, output.message @@ -78,6 +83,7 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm operator=BindingConstraintOperator.BOTH, coeffs={"area1.cluster": [50]}, command_context=command_context, + study_version=study_version, ).apply(empty_study) assert output.status, output.message @@ -116,19 +122,19 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm "operator": "both", "type": "daily", } - if empty_study.config.version >= 830: + if study_version >= 830: expected_bd_1["filter-year-by-year"] = "" expected_bd_1["filter-synthesis"] = "" expected_bd_2["filter-year-by-year"] = "" expected_bd_2["filter-synthesis"] = "" - if empty_study.config.version >= 870: + if study_version >= 870: expected_bd_1["group"] = "default" expected_bd_2["group"] = "default" assert bd_config.get("0") == expected_bd_1 assert bd_config.get("1") == expected_bd_2 - if empty_study.config.version < 870: + if study_version < 870: weekly_values = default_bc_weekly_daily.tolist() values = weekly_values less_term_matrix = None @@ -149,6 +155,7 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm less_term_matrix=less_term_matrix, greater_term_matrix=greater_term_matrix, command_context=command_context, + study_version=study_version, ).apply(empty_study) assert output.status, output.message @@ -162,25 +169,26 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm "operator": "both", "type": "weekly", } - if empty_study.config.version >= 830: + if study_version >= 830: expected_bd_1["filter-year-by-year"] = "" expected_bd_1["filter-synthesis"] = "" - if empty_study.config.version >= 870: + if study_version >= 870: expected_bd_1["group"] = "default" assert bd_config.get("0") == expected_bd_1 - if empty_study.config.version >= 870: + if study_version >= 870: # Add scenario builder data output = UpdateScenarioBuilder( - data={"Default Ruleset": {"bc,default,0": 1}}, - command_context=command_context, + data={"Default Ruleset": {"bc,default,0": 1}}, command_context=command_context, study_version=study_version ).apply(study_data=empty_study) assert output.status, output.message - output = RemoveBindingConstraint(id="bd 1", command_context=command_context).apply(empty_study) + output = RemoveBindingConstraint(id="bd 1", command_context=command_context, study_version=study_version).apply( + empty_study + ) assert output.status, output.message - if empty_study.config.version >= 870: + if study_version >= 870: # Check that the scenario builder is not yet updated, because "BD 2" is still present rulesets = empty_study.tree.get(["settings", "scenariobuilder"]) assert rulesets == {"Default Ruleset": {"bc,default,0": 1}} @@ -205,17 +213,19 @@ def test_manage_binding_constraint(empty_study: FileStudy, command_context: Comm "operator": "both", "type": "daily", } - if empty_study.config.version >= 830: + if study_version >= 830: expected_bd_2["filter-year-by-year"] = "" expected_bd_2["filter-synthesis"] = "" - if empty_study.config.version >= 870: + if study_version >= 870: expected_bd_2["group"] = "default" assert bd_config.get("0") == expected_bd_2 - output = RemoveBindingConstraint(id="bd 2", command_context=command_context).apply(empty_study) + output = RemoveBindingConstraint(id="bd 2", command_context=command_context, study_version=study_version).apply( + empty_study + ) assert output.status, output.message - if empty_study.config.version >= 870: + if study_version >= 870: # Check that the scenario builder is updated rulesets = empty_study.tree.get(["settings", "scenariobuilder"]) assert rulesets == {"Default Ruleset": {}} @@ -227,16 +237,19 @@ def test_scenario_builder(empty_study: FileStudy, command_context: CommandContex Test that the scenario builder is updated when a binding constraint group is renamed or removed """ # This test requires a study with version >= 870, which support "scenarised" binding constraints. - assert empty_study.config.version >= 870 + study_version = empty_study.config.version + assert study_version >= 870 # Create two areas and a link between them: areas = {name: transform_name_to_id(name) for name in ["Area X", "Area Y"]} for area in areas.values(): - output = CreateArea(area_name=area, command_context=command_context).apply(empty_study) + output = CreateArea(area_name=area, command_context=command_context, study_version=study_version).apply( + empty_study + ) assert output.status, output.message - output = CreateLink(area1=areas["Area X"], area2=areas["Area Y"], command_context=command_context).apply( - empty_study - ) + output = CreateLink( + area1=areas["Area X"], area2=areas["Area Y"], command_context=command_context, study_version=study_version + ).apply(empty_study) assert output.status, output.message link_id = f"{areas['Area X']}%{areas['Area Y']}" @@ -250,6 +263,7 @@ def test_scenario_builder(empty_study: FileStudy, command_context: CommandContex coeffs={link_id: [0.3]}, group=bc_group, command_context=command_context, + study_version=study_version, ).apply(empty_study) assert output.status, output.message @@ -257,6 +271,7 @@ def test_scenario_builder(empty_study: FileStudy, command_context: CommandContex output = UpdateScenarioBuilder( data={"Default Ruleset": {f"bc,{bc_group.lower()},0": 1}}, # group name in lowercase command_context=command_context, + study_version=study_version, ).apply(study_data=empty_study) assert output.status, output.message @@ -264,9 +279,7 @@ def test_scenario_builder(empty_study: FileStudy, command_context: CommandContex # and a rule in the scenario builder for this group. # If we update the group name in the BC, the scenario builder should be updated output = UpdateBindingConstraint( - id="bd 1", - group="Group 2", - command_context=command_context, + id="bd 1", group="Group 2", command_context=command_context, study_version=study_version ).apply(empty_study) assert output.status, output.message @@ -285,6 +298,7 @@ def test_match(command_context: CommandContext): coeffs={"a": [0.3]}, values=values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_match = CreateBindingConstraint( name="foo", @@ -294,6 +308,7 @@ def test_match(command_context: CommandContext): coeffs={"a": [0.3]}, values=values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_not_match = CreateBindingConstraint( name="bar", @@ -302,8 +317,9 @@ def test_match(command_context: CommandContext): operator=BindingConstraintOperator.BOTH, coeffs={"a": [0.3]}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) - other_other = RemoveArea(id="id", command_context=command_context) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -320,6 +336,7 @@ def test_match(command_context: CommandContext): coeffs={"a": [0.3]}, values=values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_match = UpdateBindingConstraint( id="foo", @@ -329,6 +346,7 @@ def test_match(command_context: CommandContext): coeffs={"a": [0.3]}, values=values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_not_match = UpdateBindingConstraint( id="bar", @@ -337,8 +355,9 @@ def test_match(command_context: CommandContext): operator=BindingConstraintOperator.BOTH, coeffs={"a": [0.3]}, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) - other_other = RemoveArea(id="id", command_context=command_context) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -347,10 +366,12 @@ def test_match(command_context: CommandContext): matrix_id = command_context.matrix_service.create(values) assert base.get_inner_matrices() == [matrix_id] - base = RemoveBindingConstraint(id="foo", command_context=command_context) - other_match = RemoveBindingConstraint(id="foo", command_context=command_context) - other_not_match = RemoveBindingConstraint(id="bar", command_context=command_context) - other_other = RemoveLink(area1="id", area2="id2", command_context=command_context) + base = RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_not_match = RemoveBindingConstraint( + id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_other = RemoveLink(area1="id", area2="id2", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -362,6 +383,8 @@ def test_revert(command_context: CommandContext): hourly_values = default_bc_hourly.tolist() daily_values = default_bc_weekly_daily.tolist() weekly_values = default_bc_weekly_daily.tolist() + file_study = Mock(spec=FileStudy) + file_study.config.version = STUDY_VERSION_8_8 base = CreateBindingConstraint( name="foo", enabled=False, @@ -370,9 +393,10 @@ def test_revert(command_context: CommandContext): coeffs={"a": [0.3]}, values=daily_values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) - assert CommandReverter().revert(base, [], Mock(spec=FileStudy)) == [ - RemoveBindingConstraint(id="foo", command_context=command_context) + assert CommandReverter().revert(base, [], file_study) == [ + RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) ] base = UpdateBindingConstraint( @@ -383,6 +407,7 @@ def test_revert(command_context: CommandContext): coeffs={"a": [0.3]}, values=daily_values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) mock_command_extractor = Mock(spec=CommandExtractor) object.__setattr__( @@ -401,6 +426,7 @@ def test_revert(command_context: CommandContext): coeffs={"a": [0.3]}, values=weekly_values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ), UpdateBindingConstraint( id="foo", @@ -410,9 +436,10 @@ def test_revert(command_context: CommandContext): coeffs={"a": [0.3]}, values=hourly_values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ), ], - Mock(spec=FileStudy), + file_study, ) == [ UpdateBindingConstraint( id="foo", @@ -422,6 +449,7 @@ def test_revert(command_context: CommandContext): coeffs={"a": [0.3]}, values=hourly_values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) ] # check the matrices links @@ -437,6 +465,7 @@ def test_revert(command_context: CommandContext): coeffs={"a": [0.3]}, values=weekly_values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ), CreateBindingConstraint( name="foo", @@ -446,9 +475,10 @@ def test_revert(command_context: CommandContext): coeffs={"a": [0.3]}, values=hourly_values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ), ], - Mock(spec=FileStudy), + file_study, ) == [ UpdateBindingConstraint( id="foo", @@ -460,6 +490,7 @@ def test_revert(command_context: CommandContext): coeffs={"a": [0.3]}, values=hourly_matrix_id, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) ] study = FileStudy(config=Mock(), tree=Mock()) @@ -477,6 +508,7 @@ def test_create_diff(command_context: CommandContext): coeffs={"a": [0.3]}, values=values_a, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) values_b = np.random.rand(8784, 3).tolist() @@ -489,6 +521,7 @@ def test_create_diff(command_context: CommandContext): coeffs={"b": [0.3]}, values=matrix_b_id, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) assert base.create_diff(other_match) == [ UpdateBindingConstraint( @@ -499,6 +532,7 @@ def test_create_diff(command_context: CommandContext): coeffs={"b": [0.3]}, values=matrix_b_id, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) ] @@ -511,6 +545,7 @@ def test_create_diff(command_context: CommandContext): coeffs={"a": [0.3]}, values=values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_match = UpdateBindingConstraint( id="foo", @@ -520,11 +555,12 @@ def test_create_diff(command_context: CommandContext): coeffs={"a": [0.3]}, values=values, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) assert base.create_diff(other_match) == [other_match] - base = RemoveBindingConstraint(id="foo", command_context=command_context) - other_match = RemoveBindingConstraint(id="foo", command_context=command_context) + base = RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.create_diff(other_match) == [] @@ -557,6 +593,7 @@ def test__update_matrices_names( new_operator: BindingConstraintOperator, ): study_path = empty_study.config.study_path + study_version = empty_study.config.version all_file_templates = {"{bc_id}_eq.txt.link", "{bc_id}_gt.txt.link", "{bc_id}_lt.txt.link"} @@ -570,12 +607,14 @@ def test__update_matrices_names( area1 = "area1" area2 = "area2" cluster = "cluster" - CreateArea(area_name=area1, command_context=command_context).apply(empty_study) - CreateArea(area_name=area2, command_context=command_context).apply(empty_study) - CreateLink(area1=area1, area2=area2, command_context=command_context).apply(empty_study) - CreateCluster(area_id=area1, cluster_name=cluster, parameters={}, command_context=command_context).apply( + CreateArea(area_name=area1, command_context=command_context, study_version=study_version).apply(empty_study) + CreateArea(area_name=area2, command_context=command_context, study_version=study_version).apply(empty_study) + CreateLink(area1=area1, area2=area2, command_context=command_context, study_version=study_version).apply( empty_study ) + CreateCluster( + area_id=area1, cluster_name=cluster, parameters={}, command_context=command_context, study_version=study_version + ).apply(empty_study) # create a binding constraint _ = CreateBindingConstraint( @@ -584,6 +623,7 @@ def test__update_matrices_names( operator=existing_operator, coeffs={"area1%area2": [800, 30]}, command_context=command_context, + study_version=study_version, ).apply(empty_study) # check that the matrices are created diff --git a/tests/variantstudy/model/command/test_manage_district.py b/tests/variantstudy/model/command/test_manage_district.py index 47b6e55c42..532ec35c19 100644 --- a/tests/variantstudy/model/command/test_manage_district.py +++ b/tests/variantstudy/model/command/test_manage_district.py @@ -9,7 +9,9 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. +from unittest.mock import Mock +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.model.filesystem.config.files import build from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id @@ -34,25 +36,18 @@ def test_manage_district(empty_study: FileStudy, command_context: CommandContext area3 = "Area3" + study_version = empty_study.config.version + CreateArea.model_validate( - { - "area_name": area1, - "command_context": command_context, - } + {"area_name": area1, "command_context": command_context, "study_version": study_version} ).apply(empty_study) CreateArea.model_validate( - { - "area_name": area2, - "command_context": command_context, - } + {"area_name": area2, "command_context": command_context, "study_version": study_version} ).apply(empty_study) CreateArea.model_validate( - { - "area_name": area3, - "command_context": command_context, - } + {"area_name": area3, "command_context": command_context, "study_version": study_version} ).apply(empty_study) create_district1_command: ICommand = CreateDistrict( @@ -60,6 +55,7 @@ def test_manage_district(empty_study: FileStudy, command_context: CommandContext filter_items=[area1_id, area2_id], comments="First district", command_context=command_context, + study_version=study_version, ) output_d1 = create_district1_command.apply( study_data=empty_study, @@ -76,6 +72,7 @@ def test_manage_district(empty_study: FileStudy, command_context: CommandContext base_filter=DistrictBaseFilter.add_all, filter_items=[area1_id], command_context=command_context, + study_version=study_version, ) output_d2 = create_district2_command.apply( study_data=empty_study, @@ -91,6 +88,7 @@ def test_manage_district(empty_study: FileStudy, command_context: CommandContext base_filter=DistrictBaseFilter.remove_all, filter_items=[area2_id], command_context=command_context, + study_version=study_version, ) output_ud2 = update_district2_command.apply(study_data=empty_study) assert output_ud2.status @@ -101,9 +99,7 @@ def test_manage_district(empty_study: FileStudy, command_context: CommandContext assert set_config["apply-filter"] == "remove-all" create_district3_command: ICommand = CreateDistrict( - name="Empty district without output", - output=False, - command_context=command_context, + name="Empty district without output", output=False, command_context=command_context, study_version=study_version ) output_d3 = create_district3_command.apply( study_data=empty_study, @@ -123,7 +119,7 @@ def test_manage_district(empty_study: FileStudy, command_context: CommandContext assert len(read_config.sets.keys()) == 4 remove_district3_command: ICommand = RemoveDistrict( - id="empty district without output", command_context=command_context + id="empty district without output", command_context=command_context, study_version=study_version ) sets_config = IniReader(["+", "-"]).read(empty_study.config.study_path / "input/areas/sets.ini") assert len(sets_config.keys()) == 4 @@ -141,25 +137,27 @@ def test_match(command_context: CommandContext): base_filter=DistrictBaseFilter.add_all, filter_items=["a", "b"], command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_match = CreateDistrict( name="foo", base_filter=DistrictBaseFilter.add_all, filter_items=["a", "b"], command_context=command_context, + study_version=STUDY_VERSION_8_8, ) - other_not_match = CreateDistrict(name="foo2", command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + other_not_match = CreateDistrict(name="foo2", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match, True) assert not base.match(other_not_match) assert not base.match(other_other) assert base.match_signature() == "create_district%foo" assert base.get_inner_matrices() == [] - base = RemoveDistrict(id="id", command_context=command_context) - other_match = RemoveDistrict(id="id", command_context=command_context) - other_not_match = RemoveDistrict(id="id2", command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + base = RemoveDistrict(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = RemoveDistrict(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_not_match = RemoveDistrict(id="id2", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match, True) assert not base.match(other_not_match) assert not base.match(other_other) @@ -173,8 +171,13 @@ def test_revert(command_context: CommandContext): base_filter=DistrictBaseFilter.add_all, filter_items=["a", "b"], command_context=command_context, + study_version=STUDY_VERSION_8_8, ) - assert CommandReverter().revert(base, [], None) == [RemoveDistrict(id="foo", command_context=command_context)] + file_study = Mock(spec=FileStudy) + file_study.config.version = STUDY_VERSION_8_8 + assert CommandReverter().revert(base, [], file_study) == [ + RemoveDistrict(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + ] def test_create_diff(command_context: CommandContext): @@ -183,12 +186,14 @@ def test_create_diff(command_context: CommandContext): base_filter=DistrictBaseFilter.add_all, filter_items=["a", "b"], command_context=command_context, + study_version=STUDY_VERSION_8_8, ) other_match = CreateDistrict( name="foo", base_filter=DistrictBaseFilter.remove_all, filter_items=["c"], command_context=command_context, + study_version=STUDY_VERSION_8_8, ) assert base.create_diff(other_match) == [ UpdateConfig( @@ -201,9 +206,10 @@ def test_create_diff(command_context: CommandContext): "comments": "", }, command_context=command_context, + study_version=STUDY_VERSION_8_8, ) ] - base = RemoveDistrict(id="id", command_context=command_context) - other_match = RemoveDistrict(id="id", command_context=command_context) + base = RemoveDistrict(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = RemoveDistrict(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_area.py b/tests/variantstudy/model/command/test_remove_area.py index 474ce51a42..014d9f9e5f 100644 --- a/tests/variantstudy/model/command/test_remove_area.py +++ b/tests/variantstudy/model/command/test_remove_area.py @@ -13,6 +13,7 @@ import pytest from checksumdir import dirhash +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( BindingConstraintFrequency, BindingConstraintOperator, @@ -63,7 +64,9 @@ def _set_up(self, empty_study: FileStudy, command_context: CommandContext): area_name = "Area" area_id = transform_name_to_id(area_name) - create_area_command: ICommand = CreateArea(area_name=area_name, command_context=command_context) + create_area_command: ICommand = CreateArea( + area_name=area_name, command_context=command_context, study_version=empty_study.config.version + ) output = create_area_command.apply(study_data=empty_study) assert output.status, output.message return empty_study, area_id @@ -71,7 +74,7 @@ def _set_up(self, empty_study: FileStudy, command_context: CommandContext): @pytest.mark.parametrize("empty_study", ["empty_study_810.zip"], indirect=True) def test_remove_with_aggregated(self, empty_study: FileStudy, command_context: CommandContext): (empty_study, area_id) = self._set_up(empty_study, command_context) - remove_area_command = RemoveArea(id=area_id, command_context=command_context) + remove_area_command = RemoveArea(id=area_id, command_context=command_context, study_version=STUDY_VERSION_8_8) output = remove_area_command.apply(study_data=empty_study) assert output.status, output.message @@ -79,12 +82,14 @@ def test_remove_with_aggregated(self, empty_study: FileStudy, command_context: C def test_apply(self, empty_study: FileStudy, command_context: CommandContext): # noinspection SpellCheckingInspection (empty_study, area_id) = self._set_up(empty_study, command_context) + study_version = empty_study.config.version create_district_command = CreateDistrict( name="foo", base_filter=DistrictBaseFilter.add_all, filter_items=[area_id], command_context=command_context, + study_version=study_version, ) output = create_district_command.apply(study_data=empty_study) assert output.status, output.message @@ -98,6 +103,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): target="settings/generaldata/other preferences", data={"renewable-generation-modelling": "clusters"}, command_context=command_context, + study_version=study_version, ) output = update_config.apply(study_data=empty_study) assert output.status, output.message @@ -109,7 +115,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): hash_before_removal = dirhash(empty_study.config.study_path, "md5") empty_study_cfg = empty_study.tree.get(depth=999) - if empty_study.config.version >= 830: + if study_version >= 830: empty_study_cfg["input"]["areas"][area_id]["adequacy_patch"] = { "adequacy-patch": {"adequacy-patch-mode": "outside"} } @@ -118,7 +124,9 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): area_name2 = "Area2" area_id2 = transform_name_to_id(area_name2) - create_area_command: ICommand = CreateArea(area_name=area_name2, command_context=command_context) + create_area_command: ICommand = CreateArea( + area_name=area_name2, command_context=command_context, study_version=study_version + ) output = create_area_command.apply(study_data=empty_study) assert output.status, output.message @@ -127,6 +135,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): area2=area_id2, parameters={}, command_context=command_context, + study_version=study_version, series=[[0]], ) output = create_link_command.apply(study_data=empty_study) @@ -147,11 +156,12 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): prepro=[[0]], modulation=[[0]], command_context=command_context, + study_version=study_version, ).apply(study_data=empty_study) assert output.status, output.message renewable_id = None - if empty_study.config.version >= 810: + if study_version >= 810: renewable_name = "Renewable" renewable_id = transform_name_to_id(renewable_name) output = CreateRenewablesCluster( @@ -165,6 +175,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): "ts-interpretation": "power-generation", }, command_context=command_context, + study_version=study_version, ).apply(study_data=empty_study) assert output.status, output.message @@ -178,14 +189,12 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): }, comments="Hello", command_context=command_context, + study_version=study_version, ) output = bind1_cmd.apply(study_data=empty_study) assert output.status, output.message - remove_district_command = RemoveDistrict( - id="foo", - command_context=command_context, - ) + remove_district_command = RemoveDistrict(id="foo", command_context=command_context, study_version=study_version) output = remove_district_command.apply(study_data=empty_study) assert output.status, output.message @@ -194,6 +203,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): base_filter=DistrictBaseFilter.add_all, filter_items=[area_id, area_id2], command_context=command_context, + study_version=study_version, ) output = create_district_command.apply(study_data=empty_study) assert output.status, output.message @@ -207,24 +217,25 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): f"ntc,{area_id},{area_id2},0": 1, f"t,{area_id2},0,{thermal_id.lower()}": 1, } - if empty_study.config.version >= 800: + if study_version >= 800: default_ruleset[f"hl,{area_id2},0"] = 1 - if empty_study.config.version >= 810: + if study_version >= 810: default_ruleset[f"r,{area_id2},0,{renewable_id.lower()}"] = 1 - if empty_study.config.version >= 870: + if study_version >= 870: default_ruleset["bc,bd 2,0"] = 1 - if empty_study.config.version >= 920: + if study_version >= 920: default_ruleset[f"hfl,{area_id2},0"] = 1 - if empty_study.config.version >= 910: + if study_version >= 910: default_ruleset[f"hgp,{area_id2},0"] = 1 output = UpdateScenarioBuilder( - data={"Default Ruleset": default_ruleset}, - command_context=command_context, + data={"Default Ruleset": default_ruleset}, command_context=command_context, study_version=study_version ).apply(study_data=empty_study) assert output.status, output.message - remove_area_command: ICommand = RemoveArea(id=area_id2, command_context=command_context) + remove_area_command: ICommand = RemoveArea( + id=area_id2, command_context=command_context, study_version=study_version + ) output = remove_area_command.apply(study_data=empty_study) assert output.status, output.message assert dirhash(empty_study.config.study_path, "md5") == hash_before_removal @@ -234,10 +245,10 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): def test_match(command_context: CommandContext): - base = RemoveArea(id="foo", command_context=command_context) - other_match = RemoveArea(id="foo", command_context=command_context) - other_not_match = RemoveArea(id="bar", command_context=command_context) - other_other = RemoveLink(area1="id", area2="id2", command_context=command_context) + base = RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_not_match = RemoveArea(id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_other = RemoveLink(area1="id", area2="id2", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -246,6 +257,6 @@ def test_match(command_context: CommandContext): def test_create_diff(command_context: CommandContext): - base = RemoveArea(id="foo", command_context=command_context) - other_match = RemoveArea(id="foo", command_context=command_context) + base = RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_cluster.py b/tests/variantstudy/model/command/test_remove_cluster.py index 77f6ec36c2..bf8db68e03 100644 --- a/tests/variantstudy/model/command/test_remove_cluster.py +++ b/tests/variantstudy/model/command/test_remove_cluster.py @@ -14,6 +14,7 @@ import pytest from checksumdir import dirhash +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( BindingConstraintFrequency, BindingConstraintOperator, @@ -38,7 +39,11 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> cluster_name = "Cluster Name" cluster_id = transform_name_to_id(cluster_name, lower=False) - output = CreateArea(area_name=area_name, command_context=command_context).apply(empty_study) + study_version = empty_study.config.version + + output = CreateArea(area_name=area_name, command_context=command_context, study_version=study_version).apply( + empty_study + ) assert output.status, output.message ################################################################################################ @@ -60,6 +65,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> command_context=command_context, prepro=[[0]], modulation=[[0]], + study_version=study_version, ).apply(empty_study) # Binding constraint 2nd member: array of shape (8784, 3) @@ -82,6 +88,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> command_context=command_context, values=values, less_term_matrix=less_term_matrix, + study_version=study_version, ) output = bind1_cmd.apply(study_data=empty_study) assert output.status, output.message @@ -90,13 +97,12 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> output = UpdateScenarioBuilder( data={"Default Ruleset": {f"t,{area_id},0,{cluster_name.lower()}": 1}}, command_context=command_context, + study_version=study_version, ).apply(study_data=empty_study) assert output.status, output.message output = RemoveCluster( - area_id=area_id, - cluster_id=cluster_id, - command_context=command_context, + area_id=area_id, cluster_id=cluster_id, command_context=command_context, study_version=study_version ).apply(empty_study) assert output.status, output.message @@ -106,6 +112,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> area_id="non_existent_area", cluster_id=cluster_id, command_context=command_context, + study_version=study_version, ).apply(empty_study) assert not output.status @@ -113,15 +120,22 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> area_id=area_name, cluster_id="non_existent_cluster", command_context=command_context, + study_version=study_version, ).apply(empty_study) assert not output.status def test_match(command_context: CommandContext) -> None: - base = RemoveCluster(area_id="foo", cluster_id="bar", command_context=command_context) - other_match = RemoveCluster(area_id="foo", cluster_id="bar", command_context=command_context) - other_not_match = RemoveCluster(area_id="foo", cluster_id="baz", command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + base = RemoveCluster( + area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_match = RemoveCluster( + area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_not_match = RemoveCluster( + area_id="foo", cluster_id="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -130,6 +144,10 @@ def test_match(command_context: CommandContext) -> None: def test_create_diff(command_context: CommandContext) -> None: - base = RemoveCluster(area_id="foo", cluster_id="bar", command_context=command_context) - other_match = RemoveCluster(area_id="foo", cluster_id="bar", command_context=command_context) + base = RemoveCluster( + area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_match = RemoveCluster( + area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_link.py b/tests/variantstudy/model/command/test_remove_link.py index e7e46bb6af..305d2f976f 100644 --- a/tests/variantstudy/model/command/test_remove_link.py +++ b/tests/variantstudy/model/command/test_remove_link.py @@ -21,6 +21,7 @@ from checksumdir import dirhash from pydantic import ValidationError +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.files import build from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy @@ -69,7 +70,9 @@ def test_remove_link__validation(self, area1: str, area2: str, expected: t.Dict[ It checks that the area names are correctly converted to area ID (in lowercase) and that the areas are well-ordered in alphabetical order (Antares Solver convention). """ - command = RemoveLink(area1=area1, area2=area2, command_context=Mock(spec=CommandContext)) + command = RemoveLink( + area1=area1, area2=area2, command_context=Mock(spec=CommandContext), study_version=STUDY_VERSION_8_8 + ) actual = command.model_dump(include={"area1", "area2"}) assert actual == expected @@ -92,21 +95,27 @@ def make_study(tmpdir: Path, version: int) -> FileStudy: @pytest.mark.parametrize("version", [810, 820]) def test_apply(self, tmpdir: Path, command_context: CommandContext, version: int) -> None: empty_study = self.make_study(tmpdir, version) + study_version = empty_study.config.version # Create some areas areas = {transform_name_to_id(area, lower=True): area for area in ["Area_X", "Area_Y", "Area_Z"]} for area in areas.values(): - output = CreateArea(area_name=area, command_context=command_context).apply(empty_study) + output = CreateArea(area_name=area, command_context=command_context, study_version=study_version).apply( + empty_study + ) assert output.status, output.message # Create a link between Area_X and Area_Y - output = CreateLink(area1="area_x", area2="area_y", command_context=command_context).apply(empty_study) + output = CreateLink( + area1="area_x", area2="area_y", command_context=command_context, study_version=study_version + ).apply(empty_study) assert output.status, output.message # Create a ruleset in the Scenario Builder configuration for this link output = UpdateScenarioBuilder( data={"Default Ruleset": {"ntc,area_x,area_y,0": 1}}, command_context=command_context, + study_version=study_version, ).apply(study_data=empty_study) assert output.status, output.message @@ -117,26 +126,35 @@ def test_apply(self, tmpdir: Path, command_context: CommandContext, version: int hash_before_removal = dirhash(empty_study.config.study_path, "md5") # Create a link between Area_X and Area_Z - output = CreateLink(area1="area_x", area2="area_z", command_context=command_context).apply(empty_study) + output = CreateLink( + area1="area_x", area2="area_z", command_context=command_context, study_version=study_version + ).apply(empty_study) assert output.status, output.message # Create a ruleset in the Scenario Builder configuration for this link output = UpdateScenarioBuilder( data={"Default Ruleset": {"ntc,area_x,area_z,0": 1}}, command_context=command_context, + study_version=study_version, ).apply(study_data=empty_study) assert output.status, output.message - output = RemoveLink(area1="area_x", area2="area_z", command_context=command_context).apply(empty_study) + output = RemoveLink( + area1="area_x", area2="area_z", command_context=command_context, study_version=study_version + ).apply(empty_study) assert output.status, output.message assert dirhash(empty_study.config.study_path, "md5") == hash_before_removal def test_match(self, command_context: CommandContext) -> None: - base = RemoveLink(area1="foo", area2="bar", command_context=command_context) - other_match = RemoveLink(area1="foo", area2="bar", command_context=command_context) - other_not_match = RemoveLink(area1="foo", area2="baz", command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + base = RemoveLink(area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = RemoveLink( + area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_not_match = RemoveLink( + area1="foo", area2="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -144,6 +162,8 @@ def test_match(self, command_context: CommandContext) -> None: assert base.get_inner_matrices() == [] def test_create_diff(self, command_context: CommandContext) -> None: - base = RemoveLink(area1="foo", area2="bar", command_context=command_context) - other_match = RemoveLink(area1="foo", area2="bar", command_context=command_context) + base = RemoveLink(area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = RemoveLink( + area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_renewables_cluster.py b/tests/variantstudy/model/command/test_remove_renewables_cluster.py index d0fe02c54e..a03308e5b3 100644 --- a/tests/variantstudy/model/command/test_remove_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_remove_renewables_cluster.py @@ -9,9 +9,10 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. - +from antares.study.version import StudyVersion from checksumdir import dirhash +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.create_area import CreateArea @@ -26,13 +27,16 @@ class TestRemoveRenewablesCluster: def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> None: empty_study.config.enr_modelling = str(EnrModelling.CLUSTERS) - empty_study.config.version = 810 + study_version = StudyVersion.parse(810) + empty_study.config.version = study_version area_name = "Area_name" area_id = transform_name_to_id(area_name) cluster_name = "Cluster Name" cluster_id = transform_name_to_id(cluster_name, lower=False) - output = CreateArea(area_name=area_name, command_context=command_context).apply(empty_study) + output = CreateArea(area_name=area_name, command_context=command_context, study_version=study_version).apply( + empty_study + ) assert output.status, output.message ################################################################################################ @@ -49,19 +53,19 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> "ts-interpretation": "power-generation", }, command_context=command_context, + study_version=study_version, ).apply(empty_study) # Add scenario builder data output = UpdateScenarioBuilder( data={"Default Ruleset": {f"r,{area_id},0,{cluster_name.lower()}": 1}}, command_context=command_context, + study_version=study_version, ).apply(study_data=empty_study) assert output.status, output.message output = RemoveRenewablesCluster( - area_id=area_id, - cluster_id=cluster_id, - command_context=command_context, + area_id=area_id, cluster_id=cluster_id, command_context=command_context, study_version=study_version ).apply(empty_study) assert output.status, output.message @@ -71,6 +75,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> area_id="non_existent_area", cluster_id=cluster_id, command_context=command_context, + study_version=study_version, ).apply(empty_study) assert not output.status @@ -78,15 +83,22 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> area_id=area_name, cluster_id="non_existent_cluster", command_context=command_context, + study_version=study_version, ).apply(empty_study) assert not output.status def test_match(command_context: CommandContext) -> None: - base = RemoveRenewablesCluster(area_id="foo", cluster_id="bar", command_context=command_context) - other_match = RemoveRenewablesCluster(area_id="foo", cluster_id="bar", command_context=command_context) - other_not_match = RemoveRenewablesCluster(area_id="foo", cluster_id="baz", command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + base = RemoveRenewablesCluster( + area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_match = RemoveRenewablesCluster( + area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_not_match = RemoveRenewablesCluster( + area_id="foo", cluster_id="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -95,6 +107,10 @@ def test_match(command_context: CommandContext) -> None: def test_create_diff(command_context: CommandContext) -> None: - base = RemoveRenewablesCluster(area_id="foo", cluster_id="bar", command_context=command_context) - other_match = RemoveRenewablesCluster(area_id="foo", cluster_id="bar", command_context=command_context) + base = RemoveRenewablesCluster( + area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_match = RemoveRenewablesCluster( + area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_st_storage.py b/tests/variantstudy/model/command/test_remove_st_storage.py index 032a303650..e58db6db55 100644 --- a/tests/variantstudy/model/command/test_remove_st_storage.py +++ b/tests/variantstudy/model/command/test_remove_st_storage.py @@ -15,6 +15,7 @@ import pytest from pydantic import ValidationError +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.study_upgrader import StudyUpgrader @@ -60,14 +61,13 @@ class TestRemoveSTStorage: # noinspection SpellCheckingInspection def test_init(self, command_context: CommandContext): cmd = RemoveSTStorage( - command_context=command_context, - area_id="area_fr", - storage_id="storage_1", + command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 ) # Check the attribues assert cmd.command_name == CommandName.REMOVE_ST_STORAGE assert cmd.version == 1 + assert cmd.study_version == STUDY_VERSION_8_8 assert cmd.command_context == command_context assert cmd.area_id == "area_fr" assert cmd.storage_id == "storage_1" @@ -79,6 +79,7 @@ def test_init__invalid_storage_id(self, recent_study: FileStudy, command_context command_context=command_context, area_id="dummy", storage_id="?%$$", # bad name + study_version=STUDY_VERSION_8_8, ) assert ctx.value.errors() == [ { @@ -93,18 +94,17 @@ def test_init__invalid_storage_id(self, recent_study: FileStudy, command_context def test_apply_config__invalid_version(self, empty_study: FileStudy, command_context: CommandContext): # Given an old study in version 720 + study_version = empty_study.config.version # When we apply the config to add a new ST Storage remove_st_storage = RemoveSTStorage( - command_context=command_context, - area_id="foo", - storage_id="bar", + command_context=command_context, area_id="foo", storage_id="bar", study_version=study_version ) command_output = remove_st_storage.apply_config(empty_study.config) # Then, the output should be an error assert command_output.status is False assert re.search( - rf"Invalid.*version {empty_study.config.version}", + rf"Invalid.*version {study_version}", command_output.message, flags=re.IGNORECASE, ) @@ -116,6 +116,7 @@ def test_apply_config__missing_area(self, recent_study: FileStudy, command_conte command_context=command_context, area_id="unknown area", # bad ID storage_id="storage_1", + study_version=recent_study.config.version, ) command_output = remove_st_storage.apply_config(recent_study.config) @@ -130,8 +131,7 @@ def test_apply_config__missing_area(self, recent_study: FileStudy, command_conte def test_apply_config__missing_storage(self, recent_study: FileStudy, command_context: CommandContext): # First, prepare a new Area create_area = CreateArea( - command_context=command_context, - area_name="Area FR", + command_context=command_context, area_name="Area FR", study_version=recent_study.config.version ) create_area.apply(recent_study) @@ -140,6 +140,7 @@ def test_apply_config__missing_storage(self, recent_study: FileStudy, command_co command_context=command_context, area_id=transform_name_to_id(create_area.area_name), storage_id="storage 1", + study_version=recent_study.config.version, ) command_output = remove_st_storage.apply_config(recent_study.config) @@ -152,11 +153,9 @@ def test_apply_config__missing_storage(self, recent_study: FileStudy, command_co ) def test_apply_config__nominal_case(self, recent_study: FileStudy, command_context: CommandContext): + study_version = recent_study.config.version # First, prepare a new Area - create_area = CreateArea( - area_name="Area FR", - command_context=command_context, - ) + create_area = CreateArea(area_name="Area FR", command_context=command_context, study_version=study_version) create_area.apply(recent_study) # Then, prepare a new Storage @@ -164,6 +163,7 @@ def test_apply_config__nominal_case(self, recent_study: FileStudy, command_conte command_context=command_context, area_id=transform_name_to_id(create_area.area_name), parameters=PARAMETERS, # type: ignore + study_version=study_version, ) create_st_storage.apply(recent_study) @@ -172,6 +172,7 @@ def test_apply_config__nominal_case(self, recent_study: FileStudy, command_conte command_context=command_context, area_id=transform_name_to_id(create_area.area_name), storage_id=create_st_storage.storage_id, + study_version=study_version, ) command_output = remove_st_storage.apply_config(recent_study.config) @@ -185,9 +186,7 @@ def test_apply_config__nominal_case(self, recent_study: FileStudy, command_conte def test_to_dto(self, command_context: CommandContext): cmd = RemoveSTStorage( - command_context=command_context, - area_id="area_fr", - storage_id="storage_1", + command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 ) actual = cmd.to_dto() @@ -195,13 +194,12 @@ def test_to_dto(self, command_context: CommandContext): assert actual == CommandDTO( action=CommandName.REMOVE_ST_STORAGE.value, args={"area_id": "area_fr", "storage_id": "storage_1"}, + study_version=STUDY_VERSION_8_8, ) def test_match_signature(self, command_context: CommandContext): cmd = RemoveSTStorage( - command_context=command_context, - area_id="area_fr", - storage_id="storage_1", + command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 ) assert cmd.match_signature() == "remove_st_storage%area_fr%storage_1" @@ -214,14 +212,10 @@ def test_match( storage_id, ): cmd1 = RemoveSTStorage( - command_context=command_context, - area_id="area_fr", - storage_id="storage_1", + command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 ) cmd2 = RemoveSTStorage( - command_context=command_context, - area_id=area_id, - storage_id=storage_id, + command_context=command_context, area_id=area_id, storage_id=storage_id, study_version=STUDY_VERSION_8_8 ) is_equal = area_id == cmd1.area_id and storage_id == cmd1.storage_id assert cmd1.match(cmd2, equal=False) == is_equal @@ -229,23 +223,20 @@ def test_match( def test_create_diff(self, command_context: CommandContext): cmd = RemoveSTStorage( - command_context=command_context, - area_id="area_fr", - storage_id="storage_1", + command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 ) other = RemoveSTStorage( command_context=command_context, area_id=cmd.area_id, storage_id=cmd.storage_id, + study_version=STUDY_VERSION_8_8, ) actual = cmd.create_diff(other) assert not actual def test_get_inner_matrices(self, command_context: CommandContext): cmd = RemoveSTStorage( - command_context=command_context, - area_id="area_fr", - storage_id="storage_1", + command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 ) actual = cmd.get_inner_matrices() assert actual == [] diff --git a/tests/variantstudy/model/command/test_replace_matrix.py b/tests/variantstudy/model/command/test_replace_matrix.py index 8a215692f5..95c21eac94 100644 --- a/tests/variantstudy/model/command/test_replace_matrix.py +++ b/tests/variantstudy/model/command/test_replace_matrix.py @@ -14,6 +14,7 @@ import numpy as np +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter @@ -29,14 +30,12 @@ def test_validation(self, empty_study: FileStudy): def test_apply(self, empty_study: FileStudy, command_context: CommandContext): study_path = empty_study.config.study_path + study_version = empty_study.config.version area1 = "Area1" area1_id = transform_name_to_id(area1) CreateArea.model_validate( - { - "area_name": area1, - "command_context": command_context, - } + {"area_name": area1, "command_context": command_context, "study_version": study_version} ).apply(empty_study) target_element = f"input/hydro/common/capacity/maxpower_{area1_id}" @@ -45,6 +44,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): "target": target_element, "matrix": [[0]], "command_context": command_context, + "study_version": study_version, } ) output = replace_matrix.apply(empty_study) @@ -61,6 +61,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): "target": target_element, "matrix": [[0]], "command_context": command_context, + "study_version": study_version, } ) output = replace_matrix.apply(empty_study) @@ -68,10 +69,14 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): def test_match(command_context: CommandContext): - base = ReplaceMatrix(target="foo", matrix=[[0]], command_context=command_context) - other_match = ReplaceMatrix(target="foo", matrix=[[1]], command_context=command_context) - other_not_match = ReplaceMatrix(target="bar", matrix=[[0]], command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + base = ReplaceMatrix(target="foo", matrix=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = ReplaceMatrix( + target="foo", matrix=[[1]], command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_not_match = ReplaceMatrix( + target="bar", matrix=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -84,7 +89,9 @@ def test_match(command_context: CommandContext): @patch("antarest.study.storage.variantstudy.business.command_extractor.CommandExtractor.generate_replace_matrix") def test_revert(mock_generate_replace_matrix, command_context: CommandContext): matrix_a = np.random.rand(5, 2).tolist() - base = ReplaceMatrix(target="foo", matrix=matrix_a, command_context=command_context) + base = ReplaceMatrix( + target="foo", matrix=matrix_a, command_context=command_context, study_version=STUDY_VERSION_8_8 + ) study = FileStudy(config=Mock(), tree=Mock()) CommandReverter().revert(base, [], study) mock_generate_replace_matrix.assert_called_with(study.tree, ["foo"]) @@ -92,24 +99,22 @@ def test_revert(mock_generate_replace_matrix, command_context: CommandContext): base, [ ReplaceMatrix( - target="foo", - matrix=matrix_a, - command_context=command_context, + target="foo", matrix=matrix_a, command_context=command_context, study_version=STUDY_VERSION_8_8 ) ], study, ) == [ - ReplaceMatrix( - target="foo", - matrix=matrix_a, - command_context=command_context, - ) + ReplaceMatrix(target="foo", matrix=matrix_a, command_context=command_context, study_version=STUDY_VERSION_8_8) ] def test_create_diff(command_context: CommandContext): matrix_a = np.random.rand(5, 2).tolist() - base = ReplaceMatrix(target="foo", matrix=matrix_a, command_context=command_context) + base = ReplaceMatrix( + target="foo", matrix=matrix_a, command_context=command_context, study_version=STUDY_VERSION_8_8 + ) matrix_b = np.random.rand(5, 2).tolist() - other_match = ReplaceMatrix(target="foo", matrix=matrix_b, command_context=command_context) + other_match = ReplaceMatrix( + target="foo", matrix=matrix_b, command_context=command_context, study_version=STUDY_VERSION_8_8 + ) assert base.create_diff(other_match) == [other_match] diff --git a/tests/variantstudy/model/command/test_update_comments.py b/tests/variantstudy/model/command/test_update_comments.py index ec91a59bf6..1991e0f179 100644 --- a/tests/variantstudy/model/command/test_update_comments.py +++ b/tests/variantstudy/model/command/test_update_comments.py @@ -14,6 +14,7 @@ import pytest +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_extractor import CommandExtractor from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter @@ -25,11 +26,11 @@ @pytest.mark.unit_test def test_update_comments(empty_study: FileStudy, command_context: CommandContext): study_path = empty_study.config.study_path + study_version = empty_study.config.version comments = "comments" update_comments_command = UpdateComments( - comments=comments, - command_context=command_context, + comments=comments, command_context=command_context, study_version=study_version ) output = update_comments_command.apply(empty_study) assert output.status @@ -41,10 +42,12 @@ def test_update_comments(empty_study: FileStudy, command_context: CommandContext def test_match(command_context: CommandContext): - base = UpdateComments(comments="comments", command_context=command_context) - other_match = UpdateComments(comments="comments", command_context=command_context) - other_not_match = UpdateComments(comments="other_comments", command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + base = UpdateComments(comments="comments", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = UpdateComments(comments="comments", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_not_match = UpdateComments( + comments="other_comments", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match, equal=True) assert not base.match(other_other) @@ -60,8 +63,8 @@ def test_revert( mock_command_extractor.generate_update_comments.side_effect = lambda x: CommandExtractor.generate_update_comments( mock_command_extractor, x ) - - base_command = UpdateComments(comments="comments", command_context=command_context) + study_version = empty_study.config.version + base_command = UpdateComments(comments="comments", command_context=command_context, study_version=study_version) object.__setattr__( base_command, @@ -73,9 +76,9 @@ def test_revert( mock_command_extractor.generate_update_comments.assert_called_with(empty_study.tree) assert CommandReverter().revert( base_command, - [UpdateComments(comments="comments", command_context=command_context)], + [UpdateComments(comments="comments", command_context=command_context, study_version=study_version)], empty_study, - ) == [UpdateComments(comments="comments", command_context=command_context)] + ) == [UpdateComments(comments="comments", command_context=command_context, study_version=study_version)] assert CommandReverter().revert(base_command, [], base=empty_study) == [ UpdateComments( comments='\n\n \n ' "\n \n \n\n", command_context=command_context, + study_version=study_version, ) ] def test_create_diff(command_context: CommandContext): - base = UpdateComments(comments="comments", command_context=command_context) - other_match = UpdateComments(comments="comments", command_context=command_context) + base = UpdateComments(comments="comments", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = UpdateComments(comments="comments", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.create_diff(other_match) == [other_match] diff --git a/tests/variantstudy/model/command/test_update_config.py b/tests/variantstudy/model/command/test_update_config.py index bbce0a45c1..ceaff693c2 100644 --- a/tests/variantstudy/model/command/test_update_config.py +++ b/tests/variantstudy/model/command/test_update_config.py @@ -16,6 +16,7 @@ import pytest from antarest.core.exceptions import ChildNotFoundError +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy @@ -29,20 +30,19 @@ @pytest.mark.unit_test def test_update_config(empty_study: FileStudy, command_context: CommandContext): study_path = empty_study.config.study_path + study_version = empty_study.config.version area1 = "Area1" area1_id = transform_name_to_id(area1) CreateArea.model_validate( - { - "area_name": area1, - "command_context": command_context, - } + {"area_name": area1, "command_context": command_context, "study_version": study_version} ).apply(empty_study) update_settings_command = UpdateConfig( target="settings/generaldata/optimization/simplex-range", data="day", command_context=command_context, + study_version=study_version, ) output = update_settings_command.apply(empty_study) assert output.status @@ -54,6 +54,7 @@ def test_update_config(empty_study: FileStudy, command_context: CommandContext): target=f"input/areas/{area1_id}/optimization/nodal optimization/other-dispatchable-power", data=False, command_context=command_context, + study_version=study_version, ) output = update_settings_command.apply(empty_study) assert output.status @@ -63,18 +64,14 @@ def test_update_config(empty_study: FileStudy, command_context: CommandContext): # test UpdateConfig with byte object which is necessary with the API PUT /v1/studies/{uuid}/raw data = json.dumps({"first_layer": {"0": "Nothing"}}).encode("utf-8") command = UpdateConfig( - target="layers/layers", - data=data, - command_context=command_context, + target="layers/layers", data=data, command_context=command_context, study_version=study_version ) command.apply(empty_study) layers = IniReader().read(study_path / "layers/layers.ini") assert layers == {"first_layer": {"0": "Nothing"}} new_data = json.dumps({"1": False}).encode("utf-8") command = UpdateConfig( - target="layers/layers/first_layer", - data=new_data, - command_context=command_context, + target="layers/layers/first_layer", data=new_data, command_context=command_context, study_version=study_version ) command.apply(empty_study) layers = IniReader().read(study_path / "layers/layers.ini") @@ -82,10 +79,14 @@ def test_update_config(empty_study: FileStudy, command_context: CommandContext): def test_match(command_context: CommandContext): - base = UpdateConfig(target="foo", data="bar", command_context=command_context) - other_match = UpdateConfig(target="foo", data="bar", command_context=command_context) - other_not_match = UpdateConfig(target="hello", data="bar", command_context=command_context) - other_other = RemoveArea(id="id", command_context=command_context) + base = UpdateConfig(target="foo", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = UpdateConfig( + target="foo", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_not_match = UpdateConfig( + target="hello", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) + other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) assert base.match(other_match) assert not base.match(other_not_match) assert not base.match(other_other) @@ -94,7 +95,7 @@ def test_match(command_context: CommandContext): @patch("antarest.study.storage.variantstudy.business.command_extractor.CommandExtractor.generate_update_config") def test_revert(mock_generate_update_config, command_context: CommandContext): - base = UpdateConfig(target="foo", data="bar", command_context=command_context) + base = UpdateConfig(target="foo", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) study = FileStudy(config=Mock(), tree=Mock()) mock_generate_update_config.side_effect = ChildNotFoundError("") res = CommandReverter().revert(base, [], study) @@ -103,12 +104,14 @@ def test_revert(mock_generate_update_config, command_context: CommandContext): assert CommandReverter().revert( base, - [UpdateConfig(target="foo", data="baz", command_context=command_context)], + [UpdateConfig(target="foo", data="baz", command_context=command_context, study_version=STUDY_VERSION_8_8)], study, - ) == [UpdateConfig(target="foo", data="baz", command_context=command_context)] + ) == [UpdateConfig(target="foo", data="baz", command_context=command_context, study_version=STUDY_VERSION_8_8)] def test_create_diff(command_context: CommandContext): - base = UpdateConfig(target="foo", data="bar", command_context=command_context) - other_match = UpdateConfig(target="foo", data="baz", command_context=command_context) + base = UpdateConfig(target="foo", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) + other_match = UpdateConfig( + target="foo", data="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 + ) assert base.create_diff(other_match) == [other_match] diff --git a/tests/variantstudy/model/command/test_update_rawfile.py b/tests/variantstudy/model/command/test_update_rawfile.py index 61247d861e..8081698907 100644 --- a/tests/variantstudy/model/command/test_update_rawfile.py +++ b/tests/variantstudy/model/command/test_update_rawfile.py @@ -31,6 +31,7 @@ def test_update_rawfile(empty_study: FileStudy, command_context: CommandContext) target="settings/resources/study", b64Data=data, command_context=command_context, + study_version=empty_study.config.version, ) reverted_commands = CommandReverter().revert(command, [], empty_study) @@ -40,6 +41,7 @@ def test_update_rawfile(empty_study: FileStudy, command_context: CommandContext) target="settings/resources/study", b64Data="", command_context=command_context, + study_version=empty_study.config.version, ) reverted_commands = CommandReverter().revert(command, [alt_command], empty_study) assert cast(UpdateRawFile, reverted_commands[0]).b64Data == "" diff --git a/tests/variantstudy/model/test_variant_model.py b/tests/variantstudy/model/test_variant_model.py index b51dc8509d..2fd8a47881 100644 --- a/tests/variantstudy/model/test_variant_model.py +++ b/tests/variantstudy/model/test_variant_model.py @@ -15,6 +15,7 @@ from pathlib import Path import pytest +from antares.study.version import StudyVersion from antarest.core.jwt import JWTGroup, JWTUser from antarest.core.requests import RequestParameters @@ -24,7 +25,7 @@ from antarest.study.model import RawStudy, StudyAdditionalData from antarest.study.storage.rawstudy.raw_study_service import RawStudyService from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants -from antarest.study.storage.variantstudy.model.model import CommandDTO +from antarest.study.storage.variantstudy.model.model import CommandDTO, CommandDTOAPI from antarest.study.storage.variantstudy.snapshot_generator import SnapshotGenerator from antarest.study.storage.variantstudy.variant_study_service import VariantStudyService from tests.helpers import AnyUUID, with_db_context @@ -93,6 +94,7 @@ def test_commands_service( # Create un new variant variant_study = variant_study_service.create_variant_study(root_study_id, "my-variant", params=params) + study_version = StudyVersion.parse(variant_study.version) saved_id = variant_study.id study = variant_study_service.repository.get(saved_id) assert study is not None @@ -101,11 +103,11 @@ def test_commands_service( # Append command command_count = 0 - command_1 = CommandDTO(action="create_area", args={"area_name": "Yes"}) + command_1 = CommandDTO(action="create_area", args={"area_name": "Yes"}, study_version=study_version) variant_study_service.append_command(saved_id, command_1, params=params) command_count += 1 - command_2 = CommandDTO(action="create_area", args={"area_name": "No"}) + command_2 = CommandDTO(action="create_area", args={"area_name": "No"}, study_version=study_version) variant_study_service.append_command(saved_id, command_2, params=params) command_count += 1 @@ -113,8 +115,8 @@ def test_commands_service( assert len(commands) == command_count # Append multiple commands - command_3 = CommandDTO(action="create_area", args={"area_name": "Maybe"}) - command_4 = CommandDTO(action="create_link", args={"area1": "no", "area2": "yes"}) + command_3 = CommandDTO(action="create_area", args={"area_name": "Maybe"}, study_version=study_version) + command_4 = CommandDTO(action="create_link", args={"area1": "no", "area2": "yes"}, study_version=study_version) variant_study_service.append_commands(saved_id, [command_3, command_4], params=params) command_count += 2 @@ -122,7 +124,11 @@ def test_commands_service( assert len(commands) == command_count # Get command - assert commands[0] == variant_study_service.get_command(saved_id, commands[0].id, params=params) + assert commands[0] == CommandDTOAPI.model_validate( + variant_study_service.get_command(saved_id, commands[0].id, params=params).model_dump( + mode="json", exclude={"study_version"} + ) + ) # Remove command (area "Maybe") variant_study_service.remove_command(saved_id, commands[2].id, params=params) @@ -136,6 +142,7 @@ def test_commands_service( "cluster_name": "cl1", "parameters": {"group": "Gas", "unitcount": 1, "nominalcapacity": 500}, }, + study_version=study_version, ) variant_study_service.append_command(saved_id, command_5, params=params) command_count += 1 diff --git a/tests/variantstudy/test_command_factory.py b/tests/variantstudy/test_command_factory.py index dd47e0453c..10846b389a 100644 --- a/tests/variantstudy/test_command_factory.py +++ b/tests/variantstudy/test_command_factory.py @@ -17,8 +17,10 @@ from unittest.mock import Mock import pytest +from antares.study.version import StudyVersion from antarest.matrixstore.service import MatrixService +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.patch_service import PatchService from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants from antarest.study.storage.variantstudy.command_factory import CommandFactory @@ -27,25 +29,17 @@ from antarest.study.storage.variantstudy.model.model import CommandDTO COMMANDS: List[CommandDTO] = [ - CommandDTO( - action=CommandName.CREATE_AREA.value, - args={"area_name": "area_name"}, - ), + CommandDTO(action=CommandName.CREATE_AREA.value, args={"area_name": "area_name"}, study_version=STUDY_VERSION_8_8), CommandDTO( action=CommandName.CREATE_AREA.value, args=[ {"area_name": "area_name"}, {"area_name": "area2"}, ], + study_version=STUDY_VERSION_8_8, ), - CommandDTO( - action=CommandName.REMOVE_AREA.value, - args={"id": "id"}, - ), - CommandDTO( - action=CommandName.REMOVE_AREA.value, - args=[{"id": "id"}], - ), + CommandDTO(action=CommandName.REMOVE_AREA.value, args={"id": "id"}, study_version=STUDY_VERSION_8_8), + CommandDTO(action=CommandName.REMOVE_AREA.value, args=[{"id": "id"}], study_version=STUDY_VERSION_8_8), CommandDTO( action=CommandName.CREATE_DISTRICT.value, args={ @@ -54,6 +48,7 @@ "output": True, "comments": "", }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.CREATE_DISTRICT.value, @@ -65,15 +60,10 @@ "comments": "", } ], + study_version=STUDY_VERSION_8_8, ), - CommandDTO( - action=CommandName.REMOVE_DISTRICT.value, - args={"id": "id"}, - ), - CommandDTO( - action=CommandName.REMOVE_DISTRICT.value, - args=[{"id": "id"}], - ), + CommandDTO(action=CommandName.REMOVE_DISTRICT.value, args={"id": "id"}, study_version=STUDY_VERSION_8_8), + CommandDTO(action=CommandName.REMOVE_DISTRICT.value, args=[{"id": "id"}], study_version=STUDY_VERSION_8_8), CommandDTO( action=CommandName.CREATE_LINK.value, args={ @@ -82,6 +72,7 @@ "parameters": {}, "series": "series", }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.CREATE_LINK.value, @@ -93,6 +84,7 @@ "series": "series", } ], + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REMOVE_LINK.value, @@ -100,6 +92,7 @@ "area1": "area1", "area2": "area2", }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REMOVE_LINK.value, @@ -109,10 +102,10 @@ "area2": "area2", } ], + study_version=STUDY_VERSION_8_8, ), CommandDTO( - action=CommandName.CREATE_BINDING_CONSTRAINT.value, - args={"name": "name"}, + action=CommandName.CREATE_BINDING_CONSTRAINT.value, args={"name": "name"}, study_version=STUDY_VERSION_8_8 ), CommandDTO( action=CommandName.CREATE_BINDING_CONSTRAINT.value, @@ -126,6 +119,7 @@ "group": "group_1", }, ], + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.UPDATE_BINDING_CONSTRAINT.value, @@ -136,6 +130,7 @@ "operator": "equal", "values": "values", }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.UPDATE_BINDING_CONSTRAINT.value, @@ -147,14 +142,11 @@ "operator": "equal", } ], + study_version=STUDY_VERSION_8_8, ), + CommandDTO(action=CommandName.REMOVE_BINDING_CONSTRAINT.value, args={"id": "id"}, study_version=STUDY_VERSION_8_8), CommandDTO( - action=CommandName.REMOVE_BINDING_CONSTRAINT.value, - args={"id": "id"}, - ), - CommandDTO( - action=CommandName.REMOVE_BINDING_CONSTRAINT.value, - args=[{"id": "id"}], + action=CommandName.REMOVE_BINDING_CONSTRAINT.value, args=[{"id": "id"}], study_version=STUDY_VERSION_8_8 ), CommandDTO( action=CommandName.CREATE_THERMAL_CLUSTER.value, @@ -171,6 +163,7 @@ "prepro": "prepro", "modulation": "modulation", }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.CREATE_THERMAL_CLUSTER.value, @@ -189,14 +182,17 @@ "modulation": "modulation", } ], + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REMOVE_THERMAL_CLUSTER.value, args={"area_id": "area_name", "cluster_id": "cluster_name"}, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REMOVE_THERMAL_CLUSTER.value, args=[{"area_id": "area_name", "cluster_id": "cluster_name"}], + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.CREATE_RENEWABLES_CLUSTER.value, @@ -208,6 +204,7 @@ "ts-interpretation": "power-generation", }, }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.CREATE_RENEWABLES_CLUSTER.value, @@ -221,38 +218,39 @@ }, } ], + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REMOVE_RENEWABLES_CLUSTER.value, args={"area_id": "area_name", "cluster_id": "cluster_name"}, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REMOVE_RENEWABLES_CLUSTER.value, args=[{"area_id": "area_name", "cluster_id": "cluster_name"}], + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REPLACE_MATRIX.value, args={"target": "target_element", "matrix": "matrix"}, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REPLACE_MATRIX.value, args=[{"target": "target_element", "matrix": "matrix"}], + study_version=STUDY_VERSION_8_8, ), CommandDTO( - action=CommandName.UPDATE_CONFIG.value, - args={"target": "target", "data": {}}, + action=CommandName.UPDATE_CONFIG.value, args={"target": "target", "data": {}}, study_version=STUDY_VERSION_8_8 ), CommandDTO( - action=CommandName.UPDATE_CONFIG.value, - args=[{"target": "target", "data": {}}], + action=CommandName.UPDATE_CONFIG.value, args=[{"target": "target", "data": {}}], study_version=STUDY_VERSION_8_8 ), CommandDTO( - action=CommandName.UPDATE_COMMENTS.value, - args={"comments": "comments"}, + action=CommandName.UPDATE_COMMENTS.value, args={"comments": "comments"}, study_version=STUDY_VERSION_8_8 ), CommandDTO( - action=CommandName.UPDATE_COMMENTS.value, - args=[{"comments": "comments"}], + action=CommandName.UPDATE_COMMENTS.value, args=[{"comments": "comments"}], study_version=STUDY_VERSION_8_8 ), CommandDTO( action=CommandName.UPDATE_FILE.value, @@ -260,18 +258,22 @@ "target": "settings/resources/study", "b64Data": "", }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.UPDATE_DISTRICT.value, args={"id": "id", "filter_items": ["a"]}, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.UPDATE_DISTRICT.value, args=[{"id": "id", "base_filter": "add-all"}], + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.UPDATE_PLAYLIST.value, args=[{"active": True, "items": [1, 3], "reverse": False}], + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.UPDATE_PLAYLIST.value, @@ -281,6 +283,7 @@ "weights": {1: 5.0}, "reverse": False, }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.UPDATE_SCENARIO_BUILDER.value, @@ -293,6 +296,7 @@ }, } }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.CREATE_ST_STORAGE.value, @@ -314,6 +318,7 @@ "upper_rule_curve": "matrix://8ce614c8-c687-41af-8b24-df8a49cc52af", "inflows": "matrix://df9b25e1-e3f7-4a57-8182-0ff9791439e5", }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.CREATE_ST_STORAGE.value, @@ -355,6 +360,7 @@ "inflows": "matrix://e8923768-9bdd-40c2-a6ea-2da2523be727", }, ], + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REMOVE_ST_STORAGE.value, @@ -362,6 +368,7 @@ "area_id": "area 1", "storage_id": "storage 1", }, + study_version=STUDY_VERSION_8_8, ), CommandDTO( action=CommandName.REMOVE_ST_STORAGE.value, @@ -375,10 +382,10 @@ "storage_id": "storage 2", }, ], + study_version=STUDY_VERSION_8_8, ), CommandDTO( - action=CommandName.GENERATE_THERMAL_CLUSTER_TIMESERIES.value, - args=[{}], + action=CommandName.GENERATE_THERMAL_CLUSTER_TIMESERIES.value, args=[{}], study_version=STUDY_VERSION_8_8 ), ] @@ -451,4 +458,6 @@ def test_unknown_command(): matrix_service=Mock(spec=MatrixService), patch_service=Mock(spec=PatchService), ) - command_factory.to_command(command_dto=CommandDTO(action="unknown_command", args={})) + command_factory.to_command( + command_dto=CommandDTO(action="unknown_command", args={}, study_version=STUDY_VERSION_8_8) + ) diff --git a/tests/variantstudy/test_utils.py b/tests/variantstudy/test_utils.py index d97c3d65a5..c47c50aa25 100644 --- a/tests/variantstudy/test_utils.py +++ b/tests/variantstudy/test_utils.py @@ -10,6 +10,7 @@ # # This file is part of the Antares project. +from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.variantstudy.business.utils import transform_command_to_dto from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_link import CreateLink @@ -18,12 +19,13 @@ def test_aggregate_commands(command_context: CommandContext): + study_version = STUDY_VERSION_8_8 command_list = [ - CreateArea(area_name="a", command_context=command_context), - CreateArea(area_name="b", command_context=command_context), - CreateLink(area1="a", area2="b", command_context=command_context), - CreateArea(area_name="d", command_context=command_context), - CreateArea(area_name="e", command_context=command_context), + CreateArea(area_name="a", command_context=command_context, study_version=study_version), + CreateArea(area_name="b", command_context=command_context, study_version=study_version), + CreateLink(area1="a", area2="b", command_context=command_context, study_version=study_version), + CreateArea(area_name="d", command_context=command_context, study_version=study_version), + CreateArea(area_name="e", command_context=command_context, study_version=study_version), ] command_dto_list = transform_command_to_dto(command_list, force_aggregate=True) assert len(command_dto_list) == 3 @@ -32,10 +34,10 @@ def test_aggregate_commands(command_context: CommandContext): assert len(command_dto_list) == 5 command_ref_list = [ - CommandDTO(action="create_area", args=[{"area_name": "a"}, {"area_name": "b"}]), - CommandDTO(action="create_link", args={"area1": "a", "area2": "b"}), - CommandDTO(action="create_area", args={"area_name": "d"}), - CommandDTO(action="create_area", args={"area_name": "e"}), + CommandDTO(action="create_area", args=[{"area_name": "a"}, {"area_name": "b"}], study_version=study_version), + CommandDTO(action="create_link", args={"area1": "a", "area2": "b"}, study_version=study_version), + CommandDTO(action="create_area", args={"area_name": "d"}, study_version=study_version), + CommandDTO(action="create_area", args={"area_name": "e"}, study_version=study_version), ] command_dto_list = transform_command_to_dto(command_list, command_ref_list) From 5ce09c4e3ea939f1b59454fd72f0b12c18fbddf7 Mon Sep 17 00:00:00 2001 From: Theo Pascoli <48944759+TheoPascoli@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:04:12 +0100 Subject: [PATCH 04/86] fix(link): fix empty string handling in filter conversion (#2232) --- .../rawstudy/model/filesystem/config/links.py | 3 +++ .../study_data_blueprint/test_link.py | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/links.py b/antarest/study/storage/rawstudy/model/filesystem/config/links.py index 726fe72e93..9bfe12cd11 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/links.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/links.py @@ -108,6 +108,9 @@ def validate_filters( filter_value: t.Union[t.List[FilterOption], str], enum_cls: t.Type[FilterOption] ) -> t.List[FilterOption]: if isinstance(filter_value, str): + if not filter_value.strip(): + return [] + filter_accepted_values = [e for e in enum_cls] options = filter_value.replace(" ", "").split(",") diff --git a/tests/integration/study_data_blueprint/test_link.py b/tests/integration/study_data_blueprint/test_link.py index 9459426728..7e4d18bf2c 100644 --- a/tests/integration/study_data_blueprint/test_link.py +++ b/tests/integration/study_data_blueprint/test_link.py @@ -162,6 +162,33 @@ def test_link_820(self, client: TestClient, user_access_token: str, study_type: } assert expected == res.json() + # Test create link with empty filters + + res = client.post( + f"/v1/studies/{study_id}/links", + json={"area1": area1_id, "area2": area2_id, "filterSynthesis": ""}, + ) + + assert res.status_code == 200, res.json() + expected = { + "area1": "area 1", + "area2": "area 2", + "assetType": "ac", + "colorb": 112, + "colorg": 112, + "colorr": 112, + "displayComments": True, + "filterSynthesis": "", + "filterYearByYear": "hourly, daily, weekly, monthly, annual", + "hurdlesCost": False, + "linkStyle": "plain", + "linkWidth": 1.0, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": False, + } + assert expected == res.json() + def test_create_link_810(self, client: TestClient, user_access_token: str) -> None: client.headers = {"Authorization": f"Bearer {user_access_token}"} # type: ignore From 4ffdfdc24295e101bca509f71a4dbd64066d3920 Mon Sep 17 00:00:00 2001 From: MartinBelthle Date: Tue, 19 Nov 2024 16:02:52 +0100 Subject: [PATCH 05/86] chore(upgrader): remove duplicated tests (#2235) --- tests/storage/study_upgrader/conftest.py | 77 ------------------ .../study_upgrader/test_upgrade_710.py | 32 -------- .../study_upgrader/test_upgrade_720.py | 28 ------- .../study_upgrader/test_upgrade_800.py | 32 -------- .../study_upgrader/test_upgrade_810.py | 39 --------- .../study_upgrader/test_upgrade_820.py | 38 --------- .../study_upgrader/test_upgrade_830.py | 38 --------- .../study_upgrader/test_upgrade_840.py | 32 -------- .../study_upgrader/test_upgrade_850.py | 33 -------- .../study_upgrader/test_upgrade_860.py | 30 ------- .../study_upgrader/test_upgrade_870.py | 45 ---------- .../study_upgrader/test_upgrade_880.py | 30 ------- .../nominal_case/empty_study_700.expected.zip | Bin 62699 -> 0 bytes .../nominal_case/empty_study_700.zip | Bin 62679 -> 0 bytes .../nominal_case/empty_study_710.expected.zip | Bin 62699 -> 0 bytes .../nominal_case/empty_study_710.zip | Bin 62699 -> 0 bytes .../nominal_case/empty_study_720.expected.zip | Bin 62766 -> 0 bytes .../nominal_case/empty_study_720.zip | Bin 63723 -> 0 bytes .../nominal_case/empty_study_800.expected.zip | Bin 64628 -> 0 bytes .../nominal_case/empty_study_800.zip | Bin 62766 -> 0 bytes .../little_study_810.expected.zip | Bin 111554 -> 0 bytes .../nominal_case/little_study_810.zip | Bin 121244 -> 0 bytes .../little_study_820.expected.zip | Bin 104234 -> 0 bytes .../nominal_case/little_study_820.zip | Bin 104139 -> 0 bytes .../nominal_case/empty_study_830.expected.zip | Bin 67252 -> 0 bytes .../nominal_case/empty_study_830.zip | Bin 63805 -> 0 bytes .../nominal_case/empty_study_840.expected.zip | Bin 60085 -> 0 bytes .../nominal_case/empty_study_840.zip | Bin 63856 -> 0 bytes .../little_study_850.expected.zip | Bin 114653 -> 0 bytes .../nominal_case/little_study_850.zip | Bin 119899 -> 0 bytes .../little_study_860.expected.zip | Bin 128003 -> 0 bytes .../little_study_860.zip | Bin 123446 -> 0 bytes .../little_study_860.expected.zip | Bin 128576 -> 0 bytes .../nominal_case/little_study_860.zip | Bin 126416 -> 0 bytes .../little_study_870.expected.zip | Bin 135401 -> 0 bytes .../nominal_case/little_study_870.zip | Bin 135280 -> 0 bytes 36 files changed, 454 deletions(-) delete mode 100644 tests/storage/study_upgrader/conftest.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_710.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_720.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_800.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_810.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_820.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_830.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_840.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_850.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_860.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_870.py delete mode 100644 tests/storage/study_upgrader/test_upgrade_880.py delete mode 100644 tests/storage/study_upgrader/upgrade_710/nominal_case/empty_study_700.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_710/nominal_case/empty_study_700.zip delete mode 100644 tests/storage/study_upgrader/upgrade_720/nominal_case/empty_study_710.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_720/nominal_case/empty_study_710.zip delete mode 100644 tests/storage/study_upgrader/upgrade_800/nominal_case/empty_study_720.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_800/nominal_case/empty_study_720.zip delete mode 100644 tests/storage/study_upgrader/upgrade_810/nominal_case/empty_study_800.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_810/nominal_case/empty_study_800.zip delete mode 100644 tests/storage/study_upgrader/upgrade_820/nominal_case/little_study_810.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_820/nominal_case/little_study_810.zip delete mode 100644 tests/storage/study_upgrader/upgrade_830/nominal_case/little_study_820.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_830/nominal_case/little_study_820.zip delete mode 100644 tests/storage/study_upgrader/upgrade_840/nominal_case/empty_study_830.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_840/nominal_case/empty_study_830.zip delete mode 100644 tests/storage/study_upgrader/upgrade_850/nominal_case/empty_study_840.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_850/nominal_case/empty_study_840.zip delete mode 100644 tests/storage/study_upgrader/upgrade_860/nominal_case/little_study_850.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_860/nominal_case/little_study_850.zip delete mode 100644 tests/storage/study_upgrader/upgrade_870/empty_binding_constraints/little_study_860.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_870/empty_binding_constraints/little_study_860.zip delete mode 100644 tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.zip delete mode 100644 tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.expected.zip delete mode 100644 tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.zip diff --git a/tests/storage/study_upgrader/conftest.py b/tests/storage/study_upgrader/conftest.py deleted file mode 100644 index 4e17e64e22..0000000000 --- a/tests/storage/study_upgrader/conftest.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -import typing -import zipfile -from pathlib import Path - -import pytest - - -class AssetNotFoundError(FileNotFoundError): - def __init__(self, asset_dir: Path, reason: str): - msg = ( - f"Asset not found in '{asset_dir}': {reason}." - f"\nMake sure that the resource files are available in the unit tests" - f" and that you have named them correctly according to the module" - f" name and the test function name (without the `test_` prefix)." - ) - super().__init__(msg) - - -class StudyAssets(typing.NamedTuple): - study_dir: Path - expected_dir: Path - - -@pytest.fixture(name="study_assets", scope="function") -def study_assets( - request: pytest.FixtureRequest, - tmp_path: Path, -) -> StudyAssets: - """ - Fixture that provides study assets for a test function. - Extract `{study}.zip` and `{study}.expected.zip` assets in the temporary path. - - Args: - request: Fixture request object for the test function. - tmp_path: Path to a temporary directory for the test session. - - Returns: - StudyAssets: An object that contains the paths to directories - for the study and expected study assets. - - Raises: - AssetNotFoundError: If the study or expected study assets are not found - in the resource directory. - """ - module_path = Path(request.fspath) - assets_dir = module_path.parent.joinpath(module_path.stem.replace("test_", "")) - asset_dir = assets_dir.joinpath(request.node.name.replace("test_", "")) - zip_files = list(asset_dir.glob("*.zip")) - # find the study ZIP and uncompress it - try: - zip_path = next(iter(p for p in zip_files if p.suffixes == [".zip"])) - except StopIteration: - raise AssetNotFoundError(asset_dir, "no '{study}.zip' file") from None - study_dir = tmp_path.joinpath(zip_path.stem) - with zipfile.ZipFile(zip_path) as zf: - zf.extractall(study_dir) - # find the expected study ZIP and uncompress it - try: - zip_path = next(iter(p for p in zip_files if p.suffixes == [".expected", ".zip"])) - except StopIteration: - raise AssetNotFoundError(asset_dir, "no '{study}.expected.zip' file") from None - expected_dir = tmp_path.joinpath(zip_path.stem) - with zipfile.ZipFile(zip_path) as zf: - zf.extractall(expected_dir) - return StudyAssets(study_dir, expected_dir) diff --git a/tests/storage/study_upgrader/test_upgrade_710.py b/tests/storage/study_upgrader/test_upgrade_710.py deleted file mode 100644 index 33763594b8..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_710.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that `settings/generaldata.ini` is upgraded to version 710. - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "710") - study_upgrader.upgrade() - - # compare generaldata.ini - actual_path = study_assets.study_dir.joinpath("settings/generaldata.ini") - actual = IniReader().read(actual_path) - expected_path = study_assets.expected_dir.joinpath("settings/generaldata.ini") - expected = IniReader().read(expected_path) - assert actual == expected diff --git a/tests/storage/study_upgrader/test_upgrade_720.py b/tests/storage/study_upgrader/test_upgrade_720.py deleted file mode 100644 index 61f6cea7ea..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_720.py +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.business.test_study_version_upgrader import are_same_dir -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that `settings/generaldata.ini` is upgraded to version 720. - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "720") - study_upgrader.upgrade() - - # compare folder - assert are_same_dir(study_assets.study_dir, study_assets.expected_dir, ignore=["study.antares"]) diff --git a/tests/storage/study_upgrader/test_upgrade_800.py b/tests/storage/study_upgrader/test_upgrade_800.py deleted file mode 100644 index d03f483502..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_800.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that `settings/generaldata.ini` is upgraded to version 800. - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "800") - study_upgrader.upgrade() - - # compare generaldata.ini - actual_path = study_assets.study_dir.joinpath("settings/generaldata.ini") - actual = IniReader().read(actual_path) - expected_path = study_assets.expected_dir.joinpath("settings/generaldata.ini") - expected = IniReader().read(expected_path) - assert actual == expected diff --git a/tests/storage/study_upgrader/test_upgrade_810.py b/tests/storage/study_upgrader/test_upgrade_810.py deleted file mode 100644 index 9ba51de57f..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_810.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.business.test_study_version_upgrader import are_same_dir -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that `settings/generaldata.ini` is upgraded to version 810. - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "810") - study_upgrader.upgrade() - - # compare generaldata.ini - actual_path = study_assets.study_dir.joinpath("settings/generaldata.ini") - actual = IniReader().read(actual_path) - expected_path = study_assets.expected_dir.joinpath("settings/generaldata.ini") - expected = IniReader().read(expected_path) - assert actual == expected - - # compare folders (because the upgrade should create empty "renewables" folder) - assert are_same_dir( - study_assets.study_dir.joinpath("input"), - study_assets.expected_dir.joinpath("input"), - ) diff --git a/tests/storage/study_upgrader/test_upgrade_820.py b/tests/storage/study_upgrader/test_upgrade_820.py deleted file mode 100644 index 41cf4198d3..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_820.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.business.test_study_version_upgrader import are_same_dir -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that `settings/generaldata.ini` is upgraded to version 820. - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "820") - study_upgrader.upgrade() - - # compare generaldata.ini - actual_path = study_assets.study_dir.joinpath("settings/generaldata.ini") - actual = IniReader().read(actual_path) - expected_path = study_assets.expected_dir.joinpath("settings/generaldata.ini") - expected = IniReader().read(expected_path) - assert actual == expected - - # compare links - actual_link_path = study_assets.study_dir.joinpath("input/links") - expected_link_path = study_assets.expected_dir.joinpath("input/links") - assert are_same_dir(actual_link_path, expected_link_path) diff --git a/tests/storage/study_upgrader/test_upgrade_830.py b/tests/storage/study_upgrader/test_upgrade_830.py deleted file mode 100644 index 146029f17e..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_830.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.business.test_study_version_upgrader import are_same_dir -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that `settings/generaldata.ini` is upgraded to version 830. - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "830") - study_upgrader.upgrade() - - # compare generaldata.ini - actual_path = study_assets.study_dir.joinpath("settings/generaldata.ini") - actual = IniReader().read(actual_path) - expected_path = study_assets.expected_dir.joinpath("settings/generaldata.ini") - expected = IniReader().read(expected_path) - assert actual == expected - - # compare areas - actual_area_path = study_assets.study_dir.joinpath("input/areas") - expected_area_path = study_assets.expected_dir.joinpath("input/areas") - assert are_same_dir(actual_area_path, expected_area_path) diff --git a/tests/storage/study_upgrader/test_upgrade_840.py b/tests/storage/study_upgrader/test_upgrade_840.py deleted file mode 100644 index b5b99ddae5..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_840.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that `settings/generaldata.ini` is upgraded to version 840. - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "840") - study_upgrader.upgrade() - - # compare generaldata.ini - actual_path = study_assets.study_dir.joinpath("settings/generaldata.ini") - actual = IniReader().read(actual_path) - expected_path = study_assets.expected_dir.joinpath("settings/generaldata.ini") - expected = IniReader().read(expected_path) - assert actual == expected diff --git a/tests/storage/study_upgrader/test_upgrade_850.py b/tests/storage/study_upgrader/test_upgrade_850.py deleted file mode 100644 index c4c040b5cb..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_850.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.study_upgrader.conftest import StudyAssets - - -# noinspection SpellCheckingInspection -def test_nominal_case(study_assets: StudyAssets): - """ - Check that `settings/generaldata.ini` is upgraded to version 850. - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "850") - study_upgrader.upgrade() - - # compare generaldata.ini - actual_path = study_assets.study_dir.joinpath("settings/generaldata.ini") - actual = IniReader().read(actual_path) - expected_path = study_assets.expected_dir.joinpath("settings/generaldata.ini") - expected = IniReader().read(expected_path) - assert actual == expected diff --git a/tests/storage/study_upgrader/test_upgrade_860.py b/tests/storage/study_upgrader/test_upgrade_860.py deleted file mode 100644 index 704c4aaf44..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_860.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.business.test_study_version_upgrader import are_same_dir -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that 'st-storage' folder is created and filled. - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "860") - study_upgrader.upgrade() - - # compare input folder - actual_input_path = study_assets.study_dir.joinpath("input") - expected_input_path = study_assets.expected_dir.joinpath("input") - assert are_same_dir(actual_input_path, expected_input_path) diff --git a/tests/storage/study_upgrader/test_upgrade_870.py b/tests/storage/study_upgrader/test_upgrade_870.py deleted file mode 100644 index f4fb6721b6..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_870.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.business.test_study_version_upgrader import are_same_dir -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that binding constraints and thermal folders are correctly modified - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "870") - study_upgrader.upgrade() - - # compare input folders (bindings + thermals) - actual_input_path = study_assets.study_dir.joinpath("input") - expected_input_path = study_assets.expected_dir.joinpath("input") - assert are_same_dir(actual_input_path, expected_input_path) - - -def test_empty_binding_constraints(study_assets: StudyAssets): - """ - Check that binding constraints and thermal folders are correctly modified - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "870") - study_upgrader.upgrade() - - # compare input folders (bindings + thermals) - actual_input_path = study_assets.study_dir.joinpath("input") - expected_input_path = study_assets.expected_dir.joinpath("input") - assert are_same_dir(actual_input_path, expected_input_path) diff --git a/tests/storage/study_upgrader/test_upgrade_880.py b/tests/storage/study_upgrader/test_upgrade_880.py deleted file mode 100644 index 465092c4a8..0000000000 --- a/tests/storage/study_upgrader/test_upgrade_880.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -from antarest.study.storage.study_upgrader import StudyUpgrader -from tests.storage.business.test_study_version_upgrader import are_same_dir -from tests.storage.study_upgrader.conftest import StudyAssets - - -def test_nominal_case(study_assets: StudyAssets): - """ - Check that short term storages are correctly modified - """ - - # upgrade the study - study_upgrader = StudyUpgrader(study_assets.study_dir, "880") - study_upgrader.upgrade() - - # compare st-storage folders (st-storage) - actual_input_path = study_assets.study_dir / "input" / "st-storage" - expected_input_path = study_assets.expected_dir / "input" / "st-storage" - assert are_same_dir(actual_input_path, expected_input_path) diff --git a/tests/storage/study_upgrader/upgrade_710/nominal_case/empty_study_700.expected.zip b/tests/storage/study_upgrader/upgrade_710/nominal_case/empty_study_700.expected.zip deleted file mode 100644 index 6ee11415f433984103a7f0f73e476843be7758dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62699 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 y3hZfJ`f+TeIEd1B!EL-rF?VX?xg-AJ5e{U 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

r(UWX2HDY`b!HU^tG`=;7ey* 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 diff --git a/tests/storage/study_upgrader/upgrade_710/nominal_case/empty_study_700.zip b/tests/storage/study_upgrader/upgrade_710/nominal_case/empty_study_700.zip deleted file mode 100644 index 483bbcb1dba34c09bde2b3db77f1db2dd9513efb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62679 zcmcG!1yq~cwlK5Ndo<{M=N5DF&Xw-5B~Gu7X}{M!Q!Kmo9JaB_2H zQ&+))_U9i5%c?TlTm9UcD30apLf0lJpv z4(86rcKVq1j%MaGP#R+g2RCCoOw9jURev|A2U1mkQJQ}@!tWseXwZLI=6}NaM}z*a zu>Ny{{?6;aG3am5|2GE3{=%W%IpLyC@ySTEt zdb<9o5A9_)n9nc{~rnIZ+ref64F0`{r{VD2>)c?-TT&>KV?TzjJ=B58tw)jV7{@v~Wj$>-)=HhDZ{BJ@0Uk3d9KK~u?A07XH z0QZls|8L;_o?;AUcKjbB_sonO|8cv&C#*mG@EhQNk`mvs4luuBVNzg`mm5Gn$`l9L zSR>b#qgYvc`hUtvumA&2x4dLVEeD+#@Dw7(`HE0uE_CQ$s%R$V(aSY^at7B zBHVvM_DLTHCNd?yUD7{|?H`kCdP z%d^C;A#KYv*gvFNuFlTKz9|3d`Lm$IAMf9(5GbgqiuI?$mftVKD%J3WDyr$}TF`qi z2l@v4*oIb?AN)6#2P3K28GHS2wETCqybluP;YRM`xBcM%9pG;`f0+Ki(#fD)u_6mo z>>8(Xxw=#T&!wnWimX4ME1Ur_x}9m?2FDNc z`tNt2|5XIBp0=lT90CA7p8}Ck|0&qtByVl%_{Tl>H{?IbeOJ%RRZY6SMb1)*VQUu) z0|kGHqj#Hgn?FpN7avs{^&_R(OIZmT9|;Z66gu!hC`<7J;{}g5dSY)}Q(t#`z0NqH z7!o?*-$?V?7@&5UKi@8@cRTmFcF%uv=jHb*?deO+fOE~W@$Wa=MGsL#X_cMoP>$1C zpX1<#S_jkQ=2x}gei$nIFvQ6TU$~V)Z(sHlf5v7S5a)b}aW;y2)!uSo_b5~;@dD%a z=K|{u<&jI3=Af+cVf~1N=8?h!wU_vr{_HUKX z_%%sEiStq6wr6ts-@o`^8}Pl@WNK?x)n1r*8`Uh((OR%CKDced9c|Vnu4t~y(OSUy09ulIjgrdhAwF>kuu9no z-NBJ7cai2!osY-%=xolQ-0Z$8Jq-Db3ejIUQLj+uc=CvsEh4mIXJru^G56&Bwqpc1 z{OW4I4?8gU2y)zi=aijv2Gu45brMK!I+otK;c*Xnh|eb}UwI7lKl^n~eCW1eT7A$q zYov9SD%wxE3JyPc{8OvDwbu|;>~;tLGbhUb6sKC<2;7 z{h}P)8f8hDi`rUW(N=vR#PZFlN&sj6#vI^VS;ls=ZxnE`yk{uu*V1yq-{|2aw9+{7%=k;^h4YzTOF0M;r&>-zgxQn!#BQo5e&Dw68$Dcx-g=Y7U~r#X9#?Y9Camm7YD6!#GiA@-)2gH*X#pNXf5d^{->7{AridPL9f2r zRZlq%sP#GM7Jj4zTu+kpu&VTl7!pcOmR0O>KW!)>t~uMZ{IOe~+`o|Yvov`Q1RRedyPkv>$w9CY1Q=2X+8(Zd+1E=9{J8oP#M@n<_d^a)%$aiIS zbx}UdWhOMeWNg5lT{tP1M_7QSX3vkp?yB5h;JKQGcgS(B=lALLCqi&@e|VHeJig<3 zByWhp^C_kl&yRBY$ydA6s32nb%%{dxZ`D^CO|>IlA*Q0N;7x+>{TY0u;_1Jvh^VKd>=l`Q z!^yAoC^FB1^1W}e^#U|<3^&e7Y`A`asNV#)-ItU{>^R~mwj-tl4BlT z)hoUd7WEUd!ofD)QyP;~AGXj(N{ZrBWfBn(9okiw;8e_>08dpTn@sxoA|UtET*cFf z3u^(5oXU4G<_Eef!B3O~u_x&q9Ytc^U~T7o*z`60v|FYmocE!Lk4tM?SCj#!j5x|B zA>*q&>pC^N!wWc8WHjsdX#)%WTJm+ng=eIRnV&2)D9>Ou(;Q7{KKlZ*+I;t93ijEw zzsB4+{`B_dC`iiv(I>ys;L8L_FV_05*Zb>l6P$_!-WGo_BExc?A{njVI8d0F=}_in ze9+4v6R%a$^2~?k)9pZV8!Vu=5_jXR#7;Ke_{E;i(nnvC6XX;_n zEj|rj^W_naLR485O9wxbRA;+CRfe~EY=jq@nKsthW004v4e=Wt5!|U!b(JLAtZXIG zIefJnJLz+ST4glZE-#rrCO7@1WZ%=JrOHU|rzHcaVz3$&bbkEJH(K=EQf72WcQfhS zs4|izz)^_YB^sxSGx)4>fj2RRgXF~6*kl$DnBU`@qgb8KzwYaIRBP&0O;5hEiR*Ei zSHZnac6UEj$n7#^IbO-J|Izd_I->zoO6vq5R-g+m+xM1IB(#a8LcJlJp zGT;J4>eAnNCu=9LZpy!INI{O?P^GdcE3Tw4B|P-O%y#98bg_HobLsYKAGhFdc7hAU zVcM~EmC3!l5#vsNSvP~f)SiBUJAc}BN&mU-RVZKk#d9kM8Yg@A;V0EX`mX`E#lPUYGe&!4gg(x=xxkI7x$3_?AJt*GS9hQ2nFn>R!z z7VN4jB0T0kKsA#=1XH9ij|JtQA_a*9D`;{E^Eh)4=h=&TM)X*fTy+0+;$Eq#9#ymQ z7W<<|)05N0p|0;+EK8~BW@YxX52d?kKfW@fc+qLr^<+%Z)XQzoHhQSF5hQ>Ueb3R- z%};S+7ag8p+NuW-fb@goH{c2;QmcYickeh4iEF~NR^pjy$2W*ff47Y(>~)|Yr%Az2HivCLiUrF_Co<0w%cf_dH71?O|# zEt~0X)`Z2TN`^nY*71PT?HMy55{>fTK&B-gI&$NES#=KaV{e=9tRS|kP~z+|a0Fjt zhEbk8fHe>4?tV2ewiGZkbtbO(8Ag#Aam(-o@mQ&RsHUrVW&@sc2Dgo=STKSw5nbi1 zQ;8<<>++!0DQ+}W!xcWl4SBleF9cUU@ec8I%{xRvBaDY?f|_8I2!6@k$r?Cc)lC>I zt%pv*)|jRAe8hX#Tz*$|pyE3X;;qeYkM(pnl}&UL++~-q0xzSLk+mI1$Y0#`&oaexCiB%!-rTT{(j@+nX%Z!ZqP(A5UsR zZnGn9D@on64;;!(^}^r>s=EZI@FD?3@&r6#W>q+Y5n-oPAwz1C=-0piA030wkbD<+ z##7j>p}2nTSPo|2we=05JdyhjCx^Db5@3n)%RYyH{n3ST9cv!6$~SfQU_&%!I-B8U zE8T9+mbRR)@296+{}Qu_Zv<5TEu|Mx)GZ;@ef5BEz~uTVmFW;B%}$qb`jC|>~k+_llZhjd~Pd(`YV5TWzctC+!vxvt{M^px`m`);14`s>n9oAo$4OAYt%K4nA3 zs{Fh>hSDoBPMQi(K}W0%9Uu{kTZ^fmHbuIO>u~pJVjGpt6)m%fEmhBpb0iGp9s~VU+05*N#EAyI;C;$ZQeKi{VqmfoO0jrvsaZrFB;c?ml+Rnw1%^9dAJ} z+=+~lH9QU&Ag3(Yj&oB^?3_k>;{J8eG);9+F(32#`my_Li?Z>8X*A`zYGd1=ZA-My zNGO1#v?83+RIr(?LwD^XyTY#Te8qYp9bfG67ZYLIz*}S0-5x*hUd<({+T;L9zw@v% zK@F0U%9D-4W%b6lkcP*fyZt<88ODqk_NavRExmfjKPAB%j^%>pmbWhs#s)CI!%7ED zvDcgCuzf^HuZ_bfFAbG`)YpCmhQX_3`0EEW(_PgQH6)Ogn`t#ZTwFc*!_tPWx&6u_^ z4IikDVh&>o-zgP2)w~X7aeto>%lut;S4THZ@(bA zuWadd1JsPVp`t?Yb92-kf9jo6=vt9`X@pv59sIM%T43sH@xq~AhVY#VTTiU!`2|NG z^z8+wt@MM#t4H;Tu{;t#67N6#7>Yd8rV!fam|5EXSfkr$e7B8Z_;%yL$J<1_S*@1A zlS!6$*{gMigr>ck-|Y1bZFc6Zw^+ubjXJzzu6?daji?LSW3QXsf7IvIdEdZmpJR_2 z^DP%e@mv}3u%!B?7xd1RIlSLt=WQf&=+(5YFl8Z|h@Q3H1Nm?gSW`CZ?`n-^byF3u zFdjvRKVu5%Oqwqb`Odo*P2@W)5kw2 znd0Wugg6r1htcdfftQAHR;7Lo@u8OdGdlzdX~_ zhtYTKG~ug0MSq!WgW+FNGP>@B^m|^X!+_>lmRGd!M8aIFh+6n97+Pmcr z-NX4=j^`iCbVOevgnTCHr@CU@wiawFzKl70w`-=&<1wf8eM=?FD`BC#ikF&f&@TSr z?u!2N`h&fT+a$S9k#h>Jhsfh2qDR+^Jct8fSnR;)bY;mqy01J=Sx?1vbzcn09a--8 z#N_*aa;J!|63~vdjPm}#u_x|pNUe%I!S`M*y9u<1Q*FS9?$s{(CRC;ow^7$*297p; zl`?2@Z_;YJtTuW{w!Gp9pQxmDpO|#Ay-nUmT`$$-JL6m{I>df(zuz@AQcv+J{I(Lh z3*S9f@13s1;)&$WXmhV))mAqRt&J6BKK@8u{ZoJ zRuHiKMq2>{&kb}k z?}VSEU0XibYC_%b>L{3V*xKN6x0@?r>42kkXZooZ!!(x~Pc}NZUJA~eh_0}R(DA01 zdGwneQmlNfcl92$J!$6`+;~e+eECK=e3ixBuDPJB-9^na4EtcNRd{_^P{7|_`;lqS zl&?jXuGXQtAr-moF^j8ht+b>S74m9^3H+7iAuJe(WCaoy)E?@W{8PJo8e_H)t) zlMS_(^|ja)jwu9BmNsw>h_{Fg-3FhBpHK<$O74mju#A?fMw|P!XwmDPU1O zK7t<>*E&{s;PN?6z?;fggyO%@#{iK<-P$<3X{E?FlJZM!bMK=D;u`ZG^IvD@zRofLn3OJ=s;-zED|FxR zirAg%(YMVTsp(oo%~||yCYMepo-S^ix6sxbD;~r%LpW;$oBy z`0BwcI3+I%j8YG&->$s9@4QAm#D1J!)m`QJby*wce59xI)>EWNUN~QkE`74?&ADP+QJ_eI1NSms@xKM4H7fvVD*LuCj&#gBh!us*Q^uW#wCxM z$|T-cN`uQXmfTFEyfOVt(a}5aosG3)tV<#x zhYIw;LRprF%S6}h5+-=E zndZh4W4=MrCMGgqp@9`Kar0&gYbE=JE&u{0NqUTJcwFpM;z{x4{HEeK4FrRfH}Jw-;A&t4 ziw)-|l%C^y;BDB+)+~g(KVgIVVC}FMQXD_TUrDC@79x8xv~Aur5#+1kA+gi{NYE); zwp4o2=h!tPb~5D{%3K0b)7cbbS^2(YK()|Ezo%jP*mpPuJD-{0uG%WtMceF0z+%X7 zh-W??mrK&HMuf|&X~CoB7~dGkBke7~bP%J#cB`=AW}u`wcy?Q?^b;iX+n!iZ1?BK| ztDGcd1VRkF>?SC-!_WIvh3Zhl^x^E>=La(K%K;}v-4f}?U#Wyso(q5A(YvUO=;xak zF!>6)DP{ZwQAFs0$$WD`doSEumBGQnlR>`Zg38N-kc(H~c-*h4&#Vt>={tN%81Jhr zY{r-Z?)P_qk)S-{X#Be{q{eWPw*cp;d4e?a116f_O>O_9;+#28z)+WLMWBp(D*+{X zO&Q3+5BMeEyP)z)5QMwO65o;MNk>yHRk@ejtVQCe9{KE6+c3AW#vRELHUGK0tJntC zQ{C=R4Z-2nZ;R&UFrxX%M|)j##jo zV0q+DU=8J>kBslap}&uk7S~)&Z!A?P8YXRDI>A0+G{|&{7jmt3VP!egB6_X0 z$?oCJ?hvRPH5-@D{84qCxY|3Oh~<>_Zqae)g-0Q znAd)_uAuVzE3k>8+hXM)@sA3S+1=hIV86ul+Bd*a>q>s?As001EOb~y*dPbAtPc}y zfINTiW)wati1%#nyzjtYeUGqU88}6(wH>%+5EKN_f`t+nRtp4u7c}aCRQJ|=fbZ{b zqH2eT#@d@#i)ylgIV9$OI6^uy5U`Cio;$TK;mD6An?aC7{qho3TD)^ok zRGb@_@O7mpC0UtZoHuO@4svn{RdH1{z*cX=H;E9h&KT zL2Dy1lL03pr6yTkP@{kZ4))8}x+_G%G_(VzhqH%I0- z3)#sS9$2Uy+QqS?BAVy1WH7c>1em`9Kn=>>=;LH_^*0~*9(2aCJwkE8PtM)yzjz+$ zi~Y=JT*27LeJCn@A~eX!?;@z>12EFf6lWUfAbdzmve*Uk#SWafa&G1$o9{5D9}sWw zMytrAUNjfWrXFSnNp{wNB(Tx9WkgUwKgmdjKQc^M7}9(I4%4L@ZpCQ8H0NYphReQ+ z)4~AWx>&AeG`bH#ghzmY^rRBnV69B2V1e2i)LI@rc2!)%56>$~O4Nw$131u7YCw;# z@cr1Gl-+7G$qt&8F+pRg>Wh|uwL)gfy&lk&yRqE*G_1f7B>8CHG0=P5+|X&FSP3xx z1?XKR9`I_DLzJ(df+eo9{kbt~-jwl7`>gsJS!N#XdpulOv%oKOW4*WqB!?=NG!4sk zP(3C{lD`-jCxHy~DUTHlM+`es?v^mzqMNedSq6&A6i|Z3E>%-N z258k|5H((q7aX@ZGK8n~k-1b-CdOXO&nif5p8cSutv>5h^275aji*)y{IJjN@UB;@ zzqBP`T3A1@DTawb+S}Od0>j_^r68d9JW{Z`MJ&amc^HW_nCziXh+pfgtLlclcm6|o zhM>wpF~_?b4tIF-;OZ}RN!U0<_88RbsVoSZXF^-tg$x84@JMmGuBq@y6?H4y0{e$A zYm>9K>+T!u$|5nQWncl3=TA-d%Hup}Q=H$Rt-?aD%v!@c0UtmqL0dZPt>btj{$kW* z*^RHC^6zuCy#d$k?~LBL3X7F7ARnwZ#o+7XGB(##T9~8?u}fpVQ#-HQ6XB1&<9J{D z%*BjYdQ{@TuSWe`NH>U=vIUINScWBJJ`Wnve6SFc!NI=>TzmcW*?z#-blHd7oytki zi$+I38%Mm8ZyZtA?I=%N+ppi1TEMB9dOpocir&^LQ4dD~)th7=fcmVd#nMzKVSv=NTmd6%jI&JI_k)2*pBI_L9EsqWxNPRg zPrcHe8TCOc$A!D<2@!A$DF%IpRKRQn)g`AtnkgVcb@NyJj4Pqj9H1+bnGa23Y6_-= z0j(Xac`pjAvY~YvF!+1_c#O11R#sSr43F8xuAh4@yxAkPI#IK<8!Z&vkxAl_l(Pj= zgX$E~3jEa+A*Y>y5j>nli0W0l9A1! zfu3_9!CX^Tz*l@7fnUIx>OxMU;m<&fqd*&$!_TYWO_w=t@Rdnme=K=1B?vVq=4diG z(>Q~qa6-p^7q^Zk=_hKPL;<0leB}#r0_Ibg$|;?YrC?@%o5r(`M=q_llGK~flhko; zDLkzGw1cQU`ODkv$k+>8mJym=(dMJMQ5MYI8;7_EA#xEaI z@<>gWqPDhXi;p#O)a?N5@7peXEW^Y^Mjp;gV$P7+piWyy(8!>;U>e`%FM$0^*Ix5J z0+YF#;o*K>N?J4uBVX_Q1gE|VcRvdBV)zVSSLeVzb~Ur9d4L9D*qqnXxd7H@;0ypM z2?j?%puW}3om}WGKM7oKc5sA{b6>S61`ciAkLq4xLQsf1aBh zdLB$+ZrljfCdl3H=~bC4hZen`UmEq%dhcf9>*Lbin$>TUEy(F0oN2&}XH27+3f!EO zb;;DhI?bYeU&t7nwcJ*H*HtK7u7It zjhd&@y`pd86>obII@yW8F>QSjDNPH8Q`xcRG7uJ#?}Pw1broDP`B-Q({6oWoZeEXJ z_eOO6x&^?$TG|gQk>!lPAqoZhZTA?(0qz2K3B61n9bzngpHOm!)s7iRq98;ne+b5k z7LSZMKCeh)UIvJxeb%4?C6Z7S3?^=7Qfsp&01F7#x{~6jj#W%0j8G9KE**-I?x7ce zDX10qj$GC&HO?s@j+NcB&5XqjEuLPg87)2>d>C4HqE}`$y3ohivXwrlCr@WK_Td;N z3Te-ZCBQpygkp0W>`A&ff;S?NU19(A04Inr0+l$RNcj?QyVLtE<><3@tmgp7^4aTC z!Pg`Q5%&7hmXxFyZwcUc3Ss=24gZ60andOPnh>hW;9O zA(%Azg=UVC;J{w;zBV zFtpyQNL9`aW@0fmKg(?60K&pJGUVT3Sczs1 z2L8xP>TAtoOl<}|hFbNi=ndb9Xwb7MmVsNv+epCg$qTV@@P+TgIiZK=V>Gpix_m?y ztxBOm-nknB13@+{1@t)h#o#K5=qDV2AzB!SISd)ln~2Asii^?|)6INuMJ>}OD%5+- z#TwWcf2Bi%Ou2bagkN0)NU>7~%s0Y~?rb`BXkvhyxJb2~>99wOJ~i8xYr|c|=6f>D zQ6UVx34jxqn@A*xNO6P6$DBiTPIKufeq^sw*+CX9bwqzgI<@9gk9-2!b4yvC!T|mL znF8@0f%1~MM7W3N*~sJk=!rY;=W0D(H07$ad(F1G6*BJPx#V>CJ}g+6rTYces3Z3CEFjT(^PU1#aU{$Ch$8rX0OnDcPFZ=aI;l;@K}^6JxG}i?N-^2 z9MO#L+{+$PWtGiUTOu@qH|!-|KuD>tLOD|-SZj^*o+0!`xpVE?G*}F?u<`_-TOS%;CSw<-HiKJN7x~#KgQFqrdhn1Fkr{sWB=PvTR)?TWMw9_%6=JNI=1fl36vlQ`tDVCX zZaS2E^8EJM>J%&Mj|B1;y_hivMv+9PZerIeP313l*tez0ZUS`_Nm}~={i@jl!yb;k zHKv5m@(2UwVz;owl+XoLrfz%kFu7B}-E!vR z4gk&p55G!nUNpd6Yr-?E#T}{MZ#`Gu`I@lJv*af>O0@47I?<^qJ^60i1_632FRCmx z0DFS4?2pUYHRRy>ur6kc=IK2wb`V6^F%U5*ySbp)jhe}*FDj>ihT=19wJ(k8^|*l8 z0;fuK56dd8K@CkT?%_-q_Dh(ppL01+%0f4hId-+oyXLojK$a+1F)Z-RiX|K(y1+~S zGy;c{Zb+yRZ2-f|FumzfQ>@bgNMY$NjDNj2(q2z<3|H0|V1c}9^;ibB;NqX=Jx|RP zWAu9|?I+%@nI~_UsmsRX5TL>eI@JLTiLl3$+s3VktBxmo)-_Y4kL0p`Hd8{sO8B5n z#ou)fJ4z#tJ!o|D)gd#%dfW={$0beJF(0jpjOwVyUpG z7vw66Jj>o9*LP}~)wDk`L|fJiPojNA6O#-xujz`BO%nd$Tsonykq_zZ*Bzq*^P98s z)D$b1*$Vtb!tX>EGS(x{)6@?S`Z3QOpOp?|4$5iceF?d}B>C}l1Q!6(gU}-n4gAad zZShAlFD@29?j(rF1SY=Rl32w8C5}4_UOqjeuRO(nY_vwegxGThE+tb9UTaMTb@5vz{gB2++fuKy(nh z%lmb)T53Eaz!hEzmFcT$kc0@tKk>*gW!ZD#g)2*ZHtoY>kTT!w=iTV1?rMiudee7! zaRb}dZ%ti^vl&>UJ)YW%^5unWI5{|y+bJn!(>)Z`r7=|UZYqFG3pdrjfYdL!886W= zxcZm|I$+yr41O_pqRFLwKN^S4dWb5(u};P#<3yca*Z5jvH9Ct`kdqdT1_EdTSVdg; z=bxU47UlE!$1rX7JT82JeHPsD?wj6G}Xu9^be9vvuu5ZYfSu z*|%E5vBw9gByVA8hx3#JM?T_n=r)r3Hq*f2PY3C`pNgMUQwL3wjcSOGqmOM%n_$b1 z;* zah>AQ0V?|IT0vn}4s2XM$zV$*(Q@~|>AT>1XT~dhBbsRq`-7L~c_b&IsQxU4?u~{L zaXN6^e)I~966RKo*Aj#(%!SA@Q<_t$88W{!-cfrh^L=reMC`cz%3^W8_9+vDeyHYA zvOOk`WDmYP^b5cc+_af_9*Xb}?8Paeu$FOtu7|b=eea|7@Fi(6(0Pz(HQLE!kJ8BR z6}gejF=(0-S!bJV^>FWEc^<=3NUdNdiz4qpYdSPNfz<+&t-#YXygo{HQ}>>Y^|)Hv z4TTzG00OlWBbI)D!)Bmu16dV|hZCvzZS(B(PF>;iYnJ<2sB1Kn-s!*Lf5D$Dy@m=S zQ67bCDoEzG;m)dXDp#)g_QF`N^3vC*2F2aT~9(kskXko$qBtg?VBw5gtqLo|2 zmoa47qs~YjxtV3#0>gtE6wzuKN#UU}(FChM?Lh z^Q{gx*!Hj=&&7FOYdh7pUW5INeDIRaT(~^54CfmiCMS)!Dt6tnmuFdzub=1Mtd^y# z|ED-7>c@UtJ=I2mJ75@zXX~Pv5ZV||r!rd-Vd3Ih;5M6Cu=`-O41r)$<%GUqZ6BG1 zG>)~YO&Y?EgcIKSJYMreiY1HaYG;h+=;J!02Rqciw=P~DRAADnRH)sgjj7U+twKL9P(u1 zfY356E8@e@PbE*!)7)y;TTqyJ4L@f`HOlZpQ~+gB_=}| zcgfHop@$O>Qi7;GIQWO1=b@UCC=}1*DpyNbS_Rol8j!05?P9nOIKwJJ>vZOc?;y~3 zOS>E}pdMPLKX!^qgh28EXd#hfn21t)wKS(RHH|Jfg(FoQXYGQr=Qh~kFj@}{lYUbs zmpv0%z+M0`u!W!7=Pd_n^H~gWb0_kQ;%%dP<&-Ed0M4!+479Pf1KlP(g_>Uklr|5A zmZcHe$PJPO?^+0-q(l1@1A+5*x$6LuE538Be@&&i$-!OXP%q=n9PD`L-cQS##NFUG{>?^aXys{>1!I za8jj!@5y)K@k?RqkG!qvHI9L)0rH|gDqIs_P_Q7U0JhzlX&@zmGpT3w^$I3r%p$F5 zsP6MGp9kA0!$sV+F;`O-p6mIp>IHi^9z$*tsBhd096_~RO^KCk4(mqb%OEjTZ<;wA zme^|Zk|&2EbfR2z?upzB8b+mG7lkEggqC*&DlJB{`e{`;u6S% zCLdY@s^@H76|-+Hfw-`IXPC*#E#3B!@ooW7lygg6ObacL9*~aPf?P#ijg}hTI?%K6 z=anSuWQ?wjAadP{_v}p^B}t=flYNj=sH+vb;vdWug%bE{Cd~wF2@*T^&*Jw z0XD@3XXYwk@X@0uYUW2TZOk)L5>kM0gJ|UaWH^J53Yk__EHfkN(Wu^#csAzOMS=V- zfI153etnv8HMA)PdC+fKgD5j;zX)91%&PrSywzRYf)&&F6Y=4FWoe6w)l&8641^PS zX#-zR>F9_0jes|jZCZSGeS(~%cv@JN}2pAN29f&h7?FQb6p zv#q9C@`VfPI?I`c_hv;2V3HI^?mI7;Ano0R{#y+O&EWJCA&ntGrT}C;?;G3BI z)EcNYpd3PtXN(MSRQonhdjW}{sS|rIlFT!@#cR!&>a}sS5DUAw%2z$<9)=@d9$w*! z>;1@#tD%31HJ4+w`KJ8PU~JKnSxfE{3S-Ba4;U!fDuk;@7TF!A+Tq z6G=tUR%0VRQIH~J^)&n8mp9mMraCg{wje&-#OZ}7Sf~W{@NJKg2GFV}H=QSFa*%o@ zS5PzaKtu}Z4HLix#j@mQr9)mZg&e&I_X1}USijhI)%etozG{P!2KM2rk#=R?NG#_HmV z*ca^$6Tb)=qEJ2KfESd237_Hjk|ps1ebHqyEdAU%&_OvJ>izmLfwo|NOFJQXp#oju z%=z$$sYE;z@x$9p#`SfAMT*{-hxbu8@tac*+|c$9Ia&t@PP#&mNsXK{>xe(a^d!41 z2~4s#m~Hc|7tfnIl~5jtojsdiAH_TFh$luCofx(md5kYMbr&Kw!C9hP);bDIut1{# z6^>i<&bG7VdaDgP+(%s{$ye=l-?!nhXKugZHYt#ud9fG}lnZbzk)*G}Jra~kniZhA zDvUl)+@3CGm$$T}=ux?@kTwJM2dDoeX>=#<(##r6FD+nv2Q1A?iUZbLpnEUZHSPVJ zday1+bUa|`%otObTNCKgES2J($yj6|yN15Tg*^4e3~BC71*z&@?ce5@w)@Is`PL9R{c$C7w#60w1fyf4s)lBK=#9;Z^yaTJl&G9){)iA<`*`lA>+A#T)O*+06h zh@2L2*749q)~9}-Zc%wUQ(Vn{f2ESy1!T`GyQ9Nqq20yjdn%An$4mc8xdbPc(2r5t zf-Jo^tO{kjo`Bymi6j13k&7GlY290qJ174Eq88k-2tU~YSu)VC>d^1JS2@da<74yG zT0L<^QG1ihLbp8&Fk}OD3cAH@9p%L>r7RTIhYzKWOVd>CAsyTa(yAzmk#B?_{n3|!5m<}D4>JNXhZ^71u(1d5RJ`Mv z!tym#Tti_~7)uDcAEMmq(xF}qHsE#f7BHIOeG%uu*M<`Q~3G;MLgO8lM;^~5Y1AFhHZ}4D%!_*~E*rAP(qkN0hKpas_cheZJ)W8=c~|22=rB5%$kPy$XW^rgsD!P| zk6ZN2jJCUKGBXyu9dXHXTET?1kcnsy$%N=CMlu&w|6Zzsd9=a{6qAvWj4#L=ul;MC zP=ek_w~lBvnHdZ3rHxtgYc^2|W>3>FMU-n$(8AVsr1qx8y9}>hM1ZC+O%Je2rUV@WAsW2WOKS$o-89ZrPR zODVNa`k*0_jma)D&#H36pXL~1%;6^N7oq52_2fjoLAy_HVyqb+^&3D3-CQMD5b{Vu ze~V>};21H*fqrfc2FoUzA7lO+RX|$Jq64dgWGCi7nVSeHWCx)8(S6yOYSCIvo zA`z+4dfg&l?zyT*uA{C)XZ!NhH0rpLE|0$+aQd}fTdsI6UEal^@<@HEAUb@byoFtG z1u4j237i$1x3a8U2wo7_#mZ!Rf-Hmug7>&))mv=610YrJw_L(hHl|*aaWb)$+qe=w zy8lW@c9txVLTVEpV6YjYO>UpOAH><>_Ot?63_47AZOJw=&(KT3{l>e|P){%yOun8e z&=Onxp48|~YqCAlM7Zn+|4_%z$;$Wm-lc08yC9=j;274@d4qc+*4E43Vsc3e^o^)Y zkETLuU~-2;sNq6Ls_5sjcTpUZ548X#tu+!hqUb)ri|ez;Ofu*KLF7+>^fGFn*JF^~ ztd5F2F8OVnkQe?IuWryT?$TYcmn8S_8+}4pg>iqcwd7$@5szIthipW^9>ZVd*pWP_)104xCF#zjy9^j1P z@m-lG*FE z7bY6FTw`pdfJjz79031n`nVBQoo3IJFT)}!nk^@p+m8!v8@ft(;x>HKJZR+$W~Oj~ zXPWar{n1$32DS|B3-Twyiv;KP*XXIdW`>JYkwxLC#5b?{tgE`2ZVIro&BoU71}Y^@ z%%Sb2=t}amNLjJOmoO(f)r!eV!p0s3FN8NOb^MC!5y4vyV(<~YGeW*g1?zBS8rObH z6_JuS*`=|>_5ma*aAwDl_LA)v_Y!gqeII#_w(zjmZGbb6Z;N zxvb$;8R2GE(0V;bB9H?oLB#S)us`}uYunrO+*p3DF*N)1?bz%G<0nC`Y0sK-p7h;S zB17JmLcyol;^Q6ZdS{yOAZW0F1dI1@Pm(?6C4k=+(=9l+RD*1Yr#0m@_effbAze0Q zd=c~HSKNeh|J4qT)-^FU>`i#ci(Wg`0(|=Oa^v&f73aY7-IMk`xjC&w1GV2;LxU&J7Zqd+@KZR@r1cdqMV zD#A2vxU#X})oY-j3h(;KHB_rkr%}mJq+ea2qu`ii5o&mh>}!T1TaC02qcOgo zW~+>2^PJME?1*O9i85Yp^|bjxhJ=k5uTR4amw z_!pks$fv$7Xxkac25LorTF_KE5!YXfdBR0s0f1An9^yB#Q+IxtjVx9CE+Qp(n*A%2 z_A0*^)t6#7ZR4u?^#21#K)AneU_i7Fk%SpWbbjb+VI8z%mIs>J&6b=!9{#BUB?sH0 zJqx^ue)xki@Hgs5^mLW0&aq5!Ik9&hcP*$~2848EQW&6f#a9dKk~2l;p>B{*)egTe zuBR3caC^{P*MG~1TKE(p@fMf=8G%%o6GxSr|3#oXJ zch0rUxt4Mn5Y-TUcw6&cKkaXU&aZ2HmgXSrbE~j}aK=oK0S$hD)00lWv&`i5rqoj( zBAGpCK9q(?AJ@ynEm7f|IxA=nYS%EWwqv&I)3TJxWqG6%#y=e{%4Gj#^hBG~0&{-iqfAJMWW-G|Z;>3Tgc zYmR;_{rH7%4Rbe|1NaF2%&O<9rPAkE>7^Hyl$cP1hDdLHi1gH#@ZZ7!T)!UMh7eu zMuvPGINKRp@0wTj=HX199<@pa^tUh2G9J*AhDbOj6pIJ`-3&b4hvUPefhe@SOKaNh zTn^wP{0p1T=dx>Pp&`=U#xrCv7E=6oC& zV^=Xh+IiU-%z{4jBbw%1SI%6^O41PhL$w2Pu3rweK=*evyH&TQrGpp;@Zn@@Y_(;U z`-xM_wd_&L!+@+lM0(Z`3HgElOAJ8n5U&TXgTHWY$+fo-2k_C*SK(QfR{ho~x&28s z%{G<8fSMoBQbV*+Pa2|s@mc^3{C=e6`+?t73E{J~CJx}Ek*~t9EWP^8vn%NSr1CXH zLJV-{-B$(!V!HBwvxZ1M18%*A>@3CsVWF17Yx~^lM=!4O5@kU8d|M5*0v#FnzoZ`# zyI_C#%Xck*9`ub{S4}pS!U24^Iv880ji|EpN`6gprifWH6zxqZd#)uXCj3uBB>Q?+ z)&jjb@d>(6*yLEyM|KUx>?@T6_<$P3fR1+E4lMM%dbPkComo-QpHwS9AZ50xgqeo2 zbmjjaX^8mk-yFR<8i;;A(BfsrIG-eEdsA~Mww1#H{ZYly#3nYxG44R7=dJ5&ebJ?S zAL{I(4E>0%3{<|3?B5d)Kwjtt-VZ{a82f>j+cNx@wrXTsM~+Rk;eg3Q|Bm)y*%RE? zA6e@C_!8++3ONBfCX~Z~Ks@lDhDf9B@!Ai6|Mkq8#s^czc#mo1XXT}hEp_35`Qcwv z;W40-eOSh*s*Cq$);w_`uhtW6|8lAN5zR3n&wShe!wfvz*W%^99nCIoOZQ(lE5<9P zeV{`_M_Ut}>_>C(-}T>xSni+=+7EoZXWmm#_kLmCGo6wwe$QaP@)Eljgs-Ik?)`V~zkC1P`|sX=_x`*0 zkGQvA!oB?h_wI_{BQXPCyz!^_Jrb+%#WbAQhr~mi7^w}pm&Ce9#Zv4akS8`X=856# zsC%pzOjO=uf55%jT|2k8v2?e@pW1xcp=~$(YcPPz+zkH_K5Ff^1_oXRU$*_M$M~%0 zdnatIb##K~>!PPW-hTIb@N3hi#-|QeeeP!cI=N?uDXThk%>U|}Io_Xaj%eArbJn$% zCuR>i8o1r1R$yRY=Y$1u5ywMZ>o5BJ{8ry?28I#+%#+-Vn*MLtmI1H-`su~Ki6a_j zwkcd(`1I-1pC`VkW}O_`V#(FGch7!)5&CLUS>fBl(q(tuJ04nh;MT@hrQdI_Hg0#d zlCoXfho6m!9x|r=q>BsU<|P*y&NK2d2r_qQ@BrD@^7OQd92E9uYKM?BeishbH!%A3 z*ND~2inE$OEj*l=7wr=EMd%a1j1vFj3m?uJ++|zCtkzd|#Xh}uVV%#5W+`Rk`ro^? z<92j*;HXPEIRj3<`DORdrB)lt%H!)^Pubfp`szQ^xYP@m(RrlPbCW{ViDvf(Suf(&dMTZ?PY_4`Z(PetCq`^~?k~TH6?tS{n znM|vry&@NsHT&a?f5X#zUmc7-o!6$7$Jp;DP5QZ67lWVUc7JSpyZo0FJN%!;(Y?ps z>7=l*W>ixr0)y_^H{j^}jUx#nn^$q+!7gzyYAjoUheGCC$z)eWu2xc1vZ$~Tk&k`a;q0F z5+7dJfga!KGx>G3JFg?xypI_%@oNWzbxnO7ZojebX>es|WY)g2 zKF=TIRF6EK)~w~+-`7-$+_lU%w%N$_`70c2=57m|H8^il`K9tsUCMtgYl-IHL3w8m zH(g)2qqMep(ly%|o^RLrwQKX+=(2}>cl>7faNPbqwoTgA8nn57cROFNtPKwW3I>@T zbf;jXFkn)GZ`W&1 zJ!?)WN}u&p(iQh19uxm~a}kv{PyFd+(|(EDPQ`gvGdwqCK$G$x(Ob{?tzI`p&X?Q= z|5UKA>fOsehM(Oi8{q5pL%j=e$tES4ZKLDtquwoE@jfFl?*5(k7yG>kZ@ptk`i9R9 zwl;J(TH7b_;_FvsZxvk@wEESm>~zA2h1-_DH<^nX)wOGMujiSjjglIF8FHfI=DVBk zXCG?S$@9d*g!tvfF@pye-MjFt-rS~n!-j@;Y(3Zi^4G!5(=Oeu(_7)cF0t;g9rjyY zf4ZE5-k^IA?@WCCV{p!!-hcf5?DnLZN%z{9z0G(w`Nu!{j{SHz8n&~AmFtXx?8A?* zr5_G%8gzV9{MbcLeY+-aOs#3yv_V({MU@kGJI0+nyzO(NtL-AJ4;&1*8T@R-jW-R; zUqo(r_YOTTtGWH+Z^I{g8$^84^HnEwKhzJsZu2H(X4E;{ClB zrA1eE@4dMp+9-Eg-s{4C<);%r`Tdv0i9X@IOsw`?SRY-orOulk`4b%*joajMYwLu) z&o^fn44hM9x-&JUDA3|q=_(_OL#6BU2Y)s1K+f_b4}AK)eK)cEkFxjQ4*x6ehg-J` z{f#z;t{+kSSLU5}8B-?ZylMDda#)?eZVmHa_+aTT?FS~!4)Ai%Tw${0iotI+I&JRy z#n;&-tNKQD3Gxm2dhWXWg~df#iw7_D_IF&=IkZmciPE8826b0tnap__6mZnVvFFbZ z&Ytam_wA=SH~zYDXZ+^v<)zzh-OOuZcrD}Ev*_}BW#uz=Pk7X2=4sQlXT0BSdD`>f zh?ZvS!Uua9K5);yz3D-xP8kNB&MvN19MIs^o4u(?qXyQ_ENvHR+@Qx{moFdPPv6vN zWtA=Ii+mhRPPeoUFMCvStL(4&BQ9U*vttGdpWJS>qv5$Dse9j+{S}({c-WqMvo~%t z2znIo)lgF#UxNeVFNc_qYVFcEE$D4(!qJG9n*;lNy`a{R{1$CPcQ)C(w$L~CY3`G4 zz9~=qEY|MKw|ezzWBS`A5sugPj{D<9!VeoBKPa`h-Dq*A0*j;;4QiL4LGO2;dDy3) z#o`A;k3~eD$FI6&-;Jyn0oOy;T3S4w->ggM=x5739#{7t*CKah@zb4y`n+mt5#Q&V zG?Ouhme(?@)p_IRMxl-Izhr{-up3)m%)rk{n;JJuw}h0RNFRE??9W&IYQ#T2S?2KZ zqYG9)2G{!Ltk3SA1zoRf?P?m4GNaCpP}d^+Zj)D9I=KF7{wS{W+rhuZWeyrW@{6*# ze$hX1hzF`4dPtC3wtJpa5=Tn~Ve>(H7%Oj|j#?B(Iv z{r>d3W8HhM$-Luc=5;cQZ(ix2RJyo_4iwv*b zXB&2w6MZ9`EY_Bm-QJR-uq9#=k?Kx zC+M`_l)k;L7VdoTsLx#AbDrUIO8nPtnEj?k@$Em3<#qCFolr92`K^rFVFRs`E-BXk zTK3!7$tgSM2M7F;Xm^!91;7}pdoy;$q^L33!ew&9ajjfA+w({CX?Bj<=-e^;v-Dd5GJ(ExQM)@Y4Z&u1(e68M?*zTP)oPr1*Bfz{Qa?XNAGQ zt{so9xjuR9@}iXXi$@qQs2=82GWp5(ityy`rnJ7FUKBgHMQk(2-vZrkPB?k{_4OYb zHuPv68}64^V0Qmfqn8Ef>5ibsT`%1CuV41n?;X43c6(N@`ofsx-@6YD3(M{1f9R4& z=fbwDo2OnZJ+b5YxVhJjOR@sb{gD1!)T9UZFI)+Y?;Gjq|LK$;zb@W8{dD3Vp@~PA z_RO0U8Fa(gZO;pD0XUke+#&*>Qr^_X4>OQGUqrGQSXJJ%nVuCefdN;cG3N<}n zJv#wX=$;r-@;r!;ywku}*mc96;_VcH(XI z=hC;^i-IeQ4ssl*PQ%GHl>A!VnRvHAL%!1(IrBB2R7(Ro{@j1~8KNH72KQK_Eg(u= z7IZe*Tygd?I?6mGF>4s`kSV{3wLq3buMBS6PfTvn! zRtA(t$>v|UqC=YcnPqfRSs%5zxPc2lW1uf>hKM@}i8hD%91#|6-Og)&iA&rs1MWQ= zM^NCj$La;L?Iiq8hsoi=*E791bfTnYCoWo2yeKJ6eK!nT-8?v|2F*C`^wak-P+B(~ ztSJXUcI-Ypcg%OD?GcNg-hQ5YnC5!mIJrs%VDxrM8{JqCqfHPEE{86>n~qql1R30JGN>p@jci`a(-KRGEp)2Gc>*#Ry0 z(!otl8PG#_{zP3Sc$1e)2}HK6siw?wzG!W?Q0M4&)Z_W9g8{74vHQq1zSzku)xOek z>Q!5~aT?2-ltwC7onQV1)hBmwZ_wO|#fg2THyugtRMcFpu1Cv75U!|=S?-{KFz!{? zEJrEO|2#t!U0&^=`+Of!rM&Q=jluL2#XTM#B%ahSn%nNNUlPusEW*0a|DHY&AFq8M z0AwV9LtmwQbKvfz{vtb3H?LD$+0w~iT>?$dQ_g6Ng&WWEvz6>EvT^o`6RP#6mjLG! z_gGO68DbCpcd#zU3$bLt#uZD=qbs#%E8}N$RmE@^sfL6Ca!Y0+=us#p39N3=;`!W! zB=yQ_`h}Y5f+nBk+udA?JfqOwNFGtoQLv$_kVbGOHa+XuWO6-w=YT>7a%x!h;3~q! zpp#;-k!F2TEvn}3e-V{S3-K8=Gow{drKVLflPJCThw%}ItvdJM-eREz$1?`#}b-06#6yx~nZ0Dw~&fZxXWS#RY0 zVvCB@zt*J2KsNV3$?to=jzNibuyBTaB6B06dH)R@{gvTX_QZFcQ%Ao*WT#**XOK7% z@r{G%j~cs07?_n2O^QQpwegVAreetlD?2?+%NhBrDyyPVQBGqTQ-cl|QmzXf?>FSP zQZvpoCH&iZBF!kYE)c@}g;Hv1Nm6w}YEG@j{RFlrTi8@DwGN$s^6KK7wTo zGH^5UYU^=sr9mQky0k$yQ8(gydLAprDP1RrZ+;(U0AbkJ;85Ddq97V>;-dw;uf}T} z+CGWDLwQVcqj$Q`J=mA;gLt@|V|Y{rPBOKLjYIQ4>yo;qxy7976T_m)c_4{|8OV?z zNcBx4SVK*xtQ=4@gU8NpyncwHE#w0JI;7QjMu6$-g%LOMnaAai17Gri7Kat|786Qf&7k?GvaTj8jY|Ym9l4xC6PazmfwNF< zt}zu?NXg(oshelmsObJD)zqAxII{**G)%B%D2mc17ReZ+p)U#CFZzIt1)`49ZCXg* z;4=m3>rX@lBmx++(&J*3#o~4|41w&J^8zjeW{8p(o)5Zqw@u$A{U2^^Q@~jjC^wbO z-Xk zJ+HYhHii&wnq?X;23~);*1C-(Q1Qh7l^tjkxuxZ~V$#wNohram1b0}CX6YfM7`6-w z1KA>0CXquU=IS@_&a4V%1Gd!Dw@GH6N~Ai=gQRJ%u0{!U(&^due_;U6{Pn$e)0i{o zWHV|F`+j#xTT?$_@a+k!(>;fg*^PMjD}cacGZCTN(A&)D$*ce((@V}OPecs-v@Wmd zM1WjIh;h+>DyI9rey^HCRb-%Ah&JG2esg1}&}pZRwjfVps;4dDi=)J(42lmahteYd zn*3X%J?3h~Sk&sucW0;K?A7ss2eCF=Ds-~z<+p35L%i5&Q zSU3pJ+OcsZI-XV&S%#(meN#qBIX}Bq^+FC5tXh<&9|ay}DfLxiM+qa?FIg&CUlAkMgQ9Stq{tT#ExUphX~5SfmC_xC~I z>7^@0Q1=Mwcc;lgOPbRDg633u;N$(`C;ql8KrmpmAEPt~O`Ftm9|0FCt2vJxA|${Y zWs@cU%DPYz>yTTQklbu(ufX(KJdlB#85?-|YvEq#hDkhan;wPTaGaK01K)&DG`+Z_ z)H1$2dQrt`=SzMxFuEB!1gheg)-2n=3iRQrhjn(&mcimvOo@i{#~J>FqUnEZ1!hc$ zn}%&H5iO`08gqNwRlqy3tE&UPyFs%Sx)Wc$Es8yF9j$UvKn(n-wvlD2f%sG46gF>@ z!U!ygmIv2B07Xe#&fqXv{eZm>`qx8_U1T&z-vHfs=EeZ}h865>bWEK5VftkYeRh(J z_V#o4&YEZ@qGUuo2jtemZDu`~^)tptGf-0_GIlvoDhhc8$m<3~Q;EJN7M4TJ&q=;h zMBk(O8NrSM!5Ety#2kwmgqf-5urp*iypSx38yXW&An3RYG(9<1Exoz_Te)s)6voeu zy#9=prq&X7(sGsE9zZ3vI<~_)lR%syrxgZvvxQX$O@Fy%CC91!=f?3CB-{x7K+l;y zns(2`uz)=gL!dgYD7+a(>yMfW-0-c?7Z~ijU>J}SL~grpoMY$BMNLiN5h+^G?hKCM ze=Sv*+Z4v$-7hLG&3bbhF;GE30NQANE`Z_I3$ZtC=a_4EnO^5pq|3hO>>SBZV7?ybuwt|2A?HM` za-;cjBWv-=)5tpkfW0iwuT8N}TB}#h@>Nhc_f@}^kN})jk z9qpm27Y$6X{ZF;*RXN0{&iZbg`km7;T-n}hu$_Kp&A`JF(xw|mWEh4X$D`kB-+eX> zNc|SiRUnLZ`~(owZO}$;cJ({1s;%Md{kM$S5TMo(JZtdR1uPkm{5Lnx43fIoQZ6M} zMFU5IZ<$iSISoqD@&H6sbn%`x6oN2vX3T}|i-}wPHh6w;b?#0fWh#>FBeUBrE$*{D zTjQ5C*1!D-G$l^RR`wc1Bj0|T7tpmD%XZ(6y&+oT4i)2#P119a^#6m#SFexmYYfQ# zOH1`Wrny?4W3s~_MKJ}TTOQ@MFw6fVsegt@>TBAhMj;nD8zN`*qB&sFlSHv>QXZt* zm9i17$VMjrm1$p|42s9vq&SrG3mj{p`n3kJvt{kv`{Px8d{jmUNrjiHztzzCDbBG@M~v!D1qiM9WKO$kHQ@o^4*iBs9L@%Z!S(DVT@?U| zCg#|9m=L(cV48j~IQeY(-%AW)3w{nuIe~v$o1(Y9WSCs3|01#IOf2I0IgahiJvj)^huw(Su?8J;4FVz0I+?@4>i zWC+?MPBM#W%$tuL&jrO48n;IhGixIwW)4qFnG$~B!yzp^ zG+?29Zo3arxaYs0J8|EGU-JDN(AZt~Q&Z?1t@PxACq8B>fdJrK-Yc-rq8(vxJja04 z5xZs?n&Td3`Kt#5b}DgDDD7{1y{c^{aa_-fJ?l~$+ixogy2QlFUqU^16`MaNaNbap zw|I0?eFwyJjH(+WMf5GLislLMBDKp5%=W)c)WH~4lEJ**l3Jz^o)ZN{sdlIW%_LKcY0ixD+w35 zKfa28YI(xK>WeqopKHf7olt&ma!Ey}@fO%w5buwy>bX$+**75O56H!IR1vEnViHop zORv9QcS#Jp4{TSJ%)_r%f(H6%P%tFtPmr&yXbDYfqVf~OdC{MO0khYnXwT)aebdx9 zNyqWpL4Ht^0Vp44WW#m@f+Ba=RT-7F64_4}t5X3mN?agDw!Zk_nJuIv-bu;?Tj=uX zk*B~Y;038Qq3DmEE3?+~<-eT({iibtEaLEB9vSi?xN+x2?ze+!TclzcTg)R11p(p{ z*8x8>Jn@6UnHvW;;!yolaEuU6@GP{T{S5olQ9G`X0A4t0)05$wSLb+mU}KZSodQ?l zd176w(asiLd+MhdckQiTVwLBNz$#r22DE(48Y6Bxwgn7hak#BLMt&4g{Y>l<8eU5;TU4Lj~jINy|Uml ztmEzN=c?-Y{5hnf5~E{5rgC0p-huvD1VfZM^XQCN1l!xcH?UXT^=wFx3m>FSJSu)c z6}#$zRr*QqmFTfxD!5iD$h%%Y=3| zO{rwAEQowStyE}L%z@4sL2FuF3Hboc8+OcmvzkQF)TviRihXTA+mC69feDw%XA|R2owy78nSZ|+^ zhfRnnYXPR+C+?5A%kM8zj1L7?TRNt?`u(p=4}$LUQH5oJe2OfsMIYQajW~B6?+P6k zF?_8tvbjpno{7!Yg}}*H0g0y_kAgRtK~{t3WT!F&!s@n`lVSu)F&pc_@HuDyWw~0A z9}Z=Vi+EBi{TGCcrUSM@%5svgS8co~N6N<;l?v%M{>{#-B(e1MHG z86K$7$-VXZZ*eQH5m}hS*Jxc9-b>RSQ}m;~r{#0~i`pg9MPKw^)P8{MzOT91oZNu) zu-S#0XISvVNXj7PuC%AX4Ji8KCtJw`Mbr-$=}FJ;8vh$_8MuOcqr$hHb+Hzn zN^gP$cRY~kNxGoEuGHUqRQ9i8G22B`)?dXUMyClqFTEauEe!PDIVh&)xSv3~ukT{M zBcPGD>d`gK9M-diKdbk?ffIM5w?zfs7)(_608vSt4Td{h0aMC>8AH0n{)5>`ZpweQN6Bh5=OsUC?b5yE^u~8# z*DwDX#GZr*fS@sym_H&6K1RF{*sh7>A9@K)g->XF!b8mQZ4)_5 zj%)0izK2;ijEj4&+@C7rbs97fk6x1+-JtJKiM~vgywQ~3D>@0ZZVTUSxct){c&j9i zGq#(}{fqnT_H*XbF?Z%)T7B&`Cia-8z_Nw|3j!4OIUp^VmcYl*CIn=Cz@2VUy)6C8 z`;cjn6xyfsh2bU&@;4`4_DyUMi?@zuYo=(4lj|1mOmtS+3$NUowYDyu=Fhn0@t#D>Xgq2yoX&o_JdqbbajY zP35(MmcI$rPt1RIueb?o_kvHsxbAOy2&9moVvGZV0%Ni?|2!>SCfI3deeTAqn<mDZok1NgsY?8!_jS1L=fcq<|+|@*1Fy-{?Qz47y4bqMOSaqRuxLJwrzyts;U)OhaP)xmNM3J5=OXM@`Kz|h?v-?qz)?S50?_S{{X z8vl*o*%z%o%~wDIzG9IKa{$a>7b3s;OT3SZ*z}nhfhO8=6ff8*#e+vbzVr+K^XE;K zG&*q2`~K~K2ZeRr_0u8FDhcf(AWWOMa6fo4OKTnCZ1Y=7%5MAQ`wz+G;Ni20CN~8y5`&arz-6&UWyI?oqOc8)lC=%Y&3}Oimcl>C zFxvEY-+m77I~p#}>d(2n$D9|iE<-DsK#B=r*jnR_j^iChVmZzr=dGpaKcIOZ+;{ju0EwGeXq zHIr9Nvwo7#FC+}yjT9BFLw>^YH3$EjC;c7e+*rb>`Z*K%QUJ}@3*!=jGF^6Zb(Ndn z1(w-4=`G_>GF%kC`C;_>?%vz=K1W3hFv9Rg{2ZXU>Wdq!NfAY0YsdD{pEn7qhMv4E zO_0?Vp8S29u#;} zZTG4@VIBQnM2!cB5g>F!afAsNY#adWGM)O3VvPOo6aU10V6?CqlHEshKog@L#YSgG zzbW`8MB?Y~F6rl)-u#i9VSJmu!Rbfpl2baj{wB8P+3dt!?5h~H5dSOIaQY=@JVTKc zk0O=J|76mCh~(k^m7Gz$ks6ir9y3Pe%l%Y^*<+_<*2IpX<0|?qTmsycg#Gr*saEt~ zaa7*$L}LG_Z^&)2Pn+-Nm?86w$ldDx%ru3jZti5{N|mb-9n=RcKLRC+9azOaEdB&q z>`NG$(t1|DGfV7cAFM!pbRJF&qWq(kd@5of2}A1zNd!r=xsDSfQ*M)0(s<5CurrHO zR5`Od6%wy@^tlB;(ilIsUEz<8xKjCiV42yxo2X?*rJ_XGU$9OKI&^jxye%v&}zeJ0nqN9n7|G{&p== zJ-!S4(v9b4jnU)l_}6hg%H4zx2>3XY_?(njpzAZ&?dTWM^C2NwA}scSiG9zyVbRy!?^J+X&-+C_9UX3oB#RrNzJnmX$v-eJWaX#RPTivZQHRGo_f z|14TVvckEW8GtYrzqXpfP$1q?_W@f)r-Y~YKIONFF8@2@xCEx~iHCnuN$kMPBYJIZ zaAbBqrnGjCG}3~}V2hN*B{q5yCsKAo#1-vjMO#oWuEZPq+vRs*Y5eV$1oWPVJv$tN zKlbT=u4ttSwvo^ZE8Tk$K=9hJ#y>jVGu0}8LnFU1WtT+889lK6a%e-9bd55L@v)ff ztd1_1qRNYVS@xD@_=XBU-6up`2$j%rE%f4HNPhA7 zpwEt*F>jOeCenQK>T}eguu#~JTVo2T6#!ss%^dRHN)DDDz>3LR;uuT3p}x z%fArcfKC+C2|1=Lb!9qg-0Qf57J~iu;~Qq5?}V)g(1(@tf*;O8cw2u&D)-#={Vs)v z1D?uE|Dq#3C~O1oA*Jn4)ZmHw0}DY4{yo-2N-#_&!Cafo72>l^lm$c*388xLlBcV>%*{lJl9~BM&2)0@|Bho zPRRb0wOV95KM2JB_FzNvJb3Qf0OIh%3ZsMx(W@NyZS4D9vdY9D5u9f}QC+PCdgONf z-N`Ml<$GW$4?>QLXO+=Br_WGuMNO)*UyiKOp#b?(MPEV1y?U*^cCpp1Ul=&C zuB_Y#MCTg=2Vlg>0U?BZ+*)jq&%u~**yf!y=+id$YRU<1cc zispE{hDJ!+9z6K!?a-?1+ZQY;uK>olIHq1>)Ua}NscW}yM`v4Ad-t{m_o+lbI(qXm($e* zASK8OQYm9n2{6NFKCp)arMg7y*;^mwF2wN^2%Td*{a1gtEg4zr#e>1g17Med9*>aW#Z<3r_p zAvuS|5aSOlMstnBFW@TVBmnontYlic@e(#-LFO1)zC5pSe5}8qCdMkF9*a}xuiHm9$ybOOSUe#az<9w9}WqL03RZ=Gb{DgKbANC8V3`aL3ELV~sT6B72iu_)&qS0}4X>bFYn7 zRo&l`R)RS5!li^DVKGYE$?*={56f0Jso##eI-HXB_49Lb*QlKhun*f%ay<{F?MFWK zpX4g1Z3%mXgF|__Btgx7-)dl1We8R*?K+Wym3#5+6=9Ww`){~b7jS`x>5S_O@u9jh zQz#;*gqno686@*dLk1KHL5b#&^)#IKc9H<@$PG0erFL%q*zev2f;Sgi(3)r zB7d}8y`HKygVxa52%7EJaUp<Rp?P71CSHeScC{RH`|HJhF2$sx-~=GXNz$44B}9F}gHrg$ye-^5SIiyt z*?uqH-_{;~d0})*_a!PSawoAjj8czvJWcl9cV+E?1YS-8h&(xq2kwXyfsR3)#mZmv zeSn1m!s6#Yc|?X_G9q=13p;o_$a4~v*Txjv$zZzP0T`?@)e}{#OsyIO#y}K?Eo2z} z>ZV9K%UE{G-79I5>=cA9H{$=fT8#;!S^~&oD{CKdY{_u)oZSqEr>codM39f98 z8r4x43H1KCPr{E~b`=bFY)Ny3Z+Itef9-P4HfK|h2g8J7_Oy#@)aik`o;+78cbUsi zAsdD&ebW9z?%H=B`%)@ik~v?z0lDbq#~BqiM*D!smlX3{|L_)--#dBB!%ip-WIukD zef^)iAS7j10QLVS8TfrSi5uA8((8Tq`e!ia8`;o%@DTd8E)LLCf$5hz*t8mEk z)UI(nxd?R}p@bSA*Xwb6tol1KG2;19g?{xYF45)oE=vse(n%dVuuJ*F{xM5k78=<% z8mb0XQfj>ZY6VA`E8qq@+m$|T{LLM!@>Ea3!1>II z-3@R#5s;@D`ST_e4B+1ZGAl7N^rf?Ler0^4$6%^+%xNTdmz%ID_`thk*GM6F+Vqb! zF$(O`H%i9|s>C~UY#mU@|NhzGXQn8XknNo5eKtBzrJ1NUDV=r3d;<>R)zdc~))(b@ zZ`7d(4_b8>Yz%KI2x6bTs&uQl@qSrrT-?36asOGIPEY!{YahZ3_l?S9zA8C1HRc3@ zzx2ZKG{S9^R4h^`Fj$F`050xtG0K(U##YoSL14a-_IlqBhQvilVSsmZLCnf5x<`SX zo~a|Qov=`T5vcoi?59SE0F zN&{4OvfRn_L096stAdgceJJt(U>x}|Mq5CagwuF0O$+b?DI|tlH}bjaHYvhuh-M!( z>^Hz$j>#gl5PQ;(U%&fJ3NeXVu+ku`sE}F#W;Cas_LztuuZvy~6Ml2ns;}enrI`J1 z*Q7+ZBrC@zYEdbB3YcJ-6rd7q?2+zxVu4u@20WN4k+gM3cwHH`S5RlL4}o<6safv# zxy*E{9p$8?C{^~Qj~gW1C-b?m_>^JyA2!y5uU^l|=!*22F9hEv4JwtQ++@257dK;) z;16}@|22}~798skPRyW7Ho9vX>$c&`X}c@lXDzIbZ6v%)+(Q@{Y50Zmv^l()sT-2n z`s@B0)HJFFR%td6hQjLOF00IpV`9QoJ*}2SoD?l~-z#oFsad|jj3tqyy)i>Iy#i*H zeR5qOqXphKuMWb%IY#L*;7mg;G^7X)aRT+0>!WN?hX;k3=StAJK?`2(Vzqy2H^YAY z{bsr}2+!OX2HgE2o&wl1qb~?VaE+P*3SV~WLsgE$%7_fmK6_12ss-DJodsHKYk7d z%>D$=zPiPD5-Q0vC2~n|--l@7LztT_ATcasNAckEMnVHNM%KMt|4!aSr2aLwv&4@` z?q>@j>WkAgo%#{bjW;`vw{skM8YfXx9u_YP*!J$Nc<}h#jVD<`G!oG7o@k2ZmL6z#lA1 ztk@uJ!k^X6oK9xZmO{`rMUSdpKRPVo@A9AbN?0NCz0Z+NrL(JZ-pbbs1!%q7^D1;) zimnnpLX3aFN;n$TfgALSUVH>YtJK_8R$iC?azgF_266F>F>boMJCr^3s<9A(WZ7A*_rOu%|$D; zO#M23>&xBh+Hx$AyE0L{k<7;@G&DmGG-wBN%2u*-zRy{ViT)xBbfm<|#FTD~`UnPq zfvqV_syp7QfN^rNfq-|-cp0U(bRz&M4rExS|2CQ1yRUmkKk5PPvw_b&hMs<)IjpoC zlp1gWRuop61q>wuoT(n8s$KtL71&89`k<6h2jH2U_U1jV7jLkqg`+ehf4FJOY8C7Z z!uFeA!4m_h^-;LzbYz?cYKBCKhk&U{Al0kY4mYyOm{rQ$I`U_TB8>^*BXVLPLI+eb zXC9et7yX#HUF&%i4Lm>YTK*pGBj}BjMQ;0~fUq);vcrc&Hqe8+HlPJYfw?mKM<(a- zdaA39N$5H+n>m>{3k|;?Lb%iEmmHz;s2c7B3v|##brwdT?oSs>D}`4DU=x7uF@roH z9rdUimD>WH)ZX-dU-YMY{<4Eo3No1~HIU!ycK64GxEfvb^4rr_LKK2IRsNzFqRUh`A)7NniDRT1;b3^okO(m?#*+P;jvLLQ*}#MN zrS)>1l&_cX-HEC$s7R_ulWBt}b<)3cm6XIP&1lfu(g9I39K_y!nM_0aGXU$3N2=wJ z&qc*?qU@V-55=LP9B%J~uIjv36)`Z;!FWI>+$3;)KcmOszC8{pv|sr-M-sXB0h?Fj zz3GU&X0f}q-teY?m`IFUvcjko6*|^YAaZn}hC%nqB=)d{Ap3}DpY=b5zhq>A8P0>J$aCA@L)yGWymB$d{9Xn$Akob-qvK-!64aKAC!Meuahy_dKnl0FdC%qcN9g3l<+)Dm_!0s`X9rTYbe}}8f^Sad zJ1{vV^-vvz^^5n~5&`es(sDo#^gsqKg$y{5NUK?mF~h=b*o0d2IYI%HKTOd8#AwG{ z2CN1yLX9H@h#0CE651TWyBo2??};Sqi7YsZx2;q5-p&DQtswXdE9?-L7tN`cR? zj3rCI{sO#pSDDq3`Saf5BQu+LhaPlIDbwn*V}#^1bFcJ|$!7ZJwen9gJ6Nk9N<)># zHM=HA^wWGn)l);&A_hYninu-uK%$KCAG3tvZf)3{bA{8b*~eIr5S7Y&;^2h^m*v1; zjbHRa;x95Ull$c{0*(AnMvlyO$Fn!CX8ug?X4U(P{-O>f99`rm_1*!-`u~HlWc_$s zAD7<~fzQqkd-#O+-fbiqp@T9^ALOTlQLQgxhD3!U*s%`JNG4vn{A}Ih!j?os=dSnU zdQyp*(5`7#tWR}jm!wa>DH19FCf`XY!`_)@ZQGqs3q*bWt(<)if9il#>QEqNj){SK zRd)8R4>DK?Jxia?bp0g~8tUrmcU!S}{au?l(u@dwJntLed%X>{Na*(CL+ie7LC?hY zsKo7cE+F5S3U_@H`egv}On#?=tEbR>3`@pPf>M=wMJ%1x$$3LQtw&!ih7>{C0G zR)6h5Y^pj;^-BGf!M-=??KJ1~Yb!3``q=jv3ycq$X!AVIUsN1(xsd=WjA zmur1tA~qSUt1itcNjy@}I?+jUN}D3W(*lvVh>)kNvMOph@0w)5I{|?{Xd2LL!q7-A z;k~a6Ne%X1e@9K$do!+^sz(ERUXc19s6Iwjc=fH5BLC)kEE6YY)1E0w*T;?SzTEjD zhP5$YXsRB@6BH~`Cci^ zXAEkGY7*&hx##QjrH7gS_YVI6<ZLZ-s-ZCEkY%v*I>L^_1ddJB2hwMuoEwwwshTOxHeovV1-&g5IdYXVa7)I4EDK2O}VI4jplGNg}@q9qi+U-T!Jga|X~YV?khS zOSs*Gv))h66T`A{&_tj`T(Lw?(9c2<`_K`~x@Auc1;J?*XCB$nGw!GE7>vK$(W^Xw z#xuuxh9q+>ee?`bgvohzrUBhWG=wG2M) zqlA=N>0?hSb_U1fu&L?vR%!ehsSMp?|J02K2*v}CSe{V3G^b8z{F1dpS3<|le&~wW z(!9A5-#O-%qxQvib5bE~DbSv-#E?SMCPuqF(8M%Kp(H6Y>l+twmfAs;SxjdD5}26p z{pi#o)SrB>0fiAt)gKdXuxh zu;j~FNrk>XxxssV;pSpfu|z;-C6jSlj2l{EW&yr&Iya#XvJXH^5<@b*$@s#AM|^os z+#hqKVTJWd*AWjnZA0pPpgK=L;Mdk(SQg24BPjBWuJ+3y-;upwLjd3x_tW-g<92j! zoN7hoEMp;+4_`R+Kfr*dOV(dsy?7cVa>efb+tqPRu$}e=wYdDvgvO)<9>L zn}RcywZ+>|4Yj#VnQx`)ggW}_tqLEY$m5hMrbI$3w8SLt90`+}sFmb5+CQuDhR1Sm z21~wZE4J!lOL3pCg*eTY#fWpIZ;Wq11I@92I`cRUjgWrkG?E1K{qYl)gK_cqZ12)K}%*4y;EhiuVBTPaf zVf!`B$B;rvfUgTQu1xQydKKC@`I=;(m4*`q5_zE$1y#N*0;NN9=Jf8fq|IOprIsw?R>*{M;;VQ8u<5h3q zi6yqO`i0R$GTQ9;d;@Aa2?(-!4I;A51>z*=G?ezemE$jF=#m*78K(0CF)w%9RX zHP`54xuQvWAJGx~mD^v#b`6~~j@6=YRDk9%Ae;dY_|-XKZ}uf!DzJTWeZl^fmQ36{LTsW;AEh%z!lsnJ9P@`EHJ# zGo4K@3e4LGws%!PTIDH+FqHX1kYS;!G9dEYzNYX|3<- zy$`%*`?t_RbH86Y>iW9>o%zq&(?!dWn^S8%Z=Q7EOoq2G z08ex(Xk%>CO^3rnkwbTRIaU(ccU_5X;33227 z*KQ|Y-ITUFp8?M%`(jkI7vBb%aQFH(kJpuf6hh5WU4(A9pWG?z|GmKf?W5$3zynaC z$2?DV*u$M<&RfM(`A%!3cPP>KjA`{a#V!-oS}y%iiI?x?0de+vVUBzS&1v*OHt{n{ z;Vk!v^tf*oNr&i=ol_qJ4Sf*kN2;3S9RJ}uA z*`3;<6xMBBOyEJPVE=X%TzxCFS8U@Rx2cokkpW-3BmLcy(ZQr50}4IPT6<=2?;X5I zy%0C6d^HAC7pf9gNPiRw6lG0_biV$DN#Tu@D+82Sf|9$T9Fuc%zOC5S z$9}BcVi)IYExu3VJB%~o=KWR4JP-SM0KT9x<)^;vWGkRznqb@ zUeB6%7*zA&eTL}SpbxooFF)RC9k2&i3}e!o(2-6N1A$@r-IrSFr~}sq7W5A#gq3sm z*9SlXUg)=o*@5@lYeuA<)HHwZp5s_tW}`$7n%dQs2Q^ir>9b3Ge+|mV=m}N&QIf1R zQyR-AtWjDLz~V%POg!5SsgavWvok+WOR?yZ@GSQ-!vq}rYunD{1PpN~{FIoiPA&KL z7ULYi?DWIEEY=_mSPKeej%9JFUpNwv*={+KgX8sqGxd#-Pqc;koK-u-(j^f>=Jz|gz)e!VnsW^#swMXs72?(A+>yDK`{ z<%%jNHG)N()O5RL%=Dxah}SpZf3aY#{@lmdhZ@pgMX!SxClpHu_}O?5jFT3 z?7E-8)zyeoC5S;yqcNPFgR_6`Qd(=^2mj-nm&0AKm!?MYS@N2w^A>W$7+0m&@G?0_*-5 z1r)bt{_km$x{LkXe;s~p0s+8HAx&BR#b2-a1^fYJT2SMOK+A64wPHeoopA7`EB55y zE_aeNrXbT?Q_M~fw37JX4QnzfRScq=O=x}6*})7gb)~OLe}jM0tFox z_TZSeczrWFgU<-AI&O>%ReR2oV=K#%lQeFG{~xp!QOUwr!7PD;NeIo^QZ|Cq-7Vr}tp0mM#j&;tWA{$(;*j(`V#+57BC#kqLihB^4%B2NR6MtHsqej%O{qUHI z8zlLlxHEX_Rwf0SBx@Q5R>q^-x`n26?pO;$0f4zMiI*Wo9oI_3flnMOzSW1=<*#xl zlL2m{pxUwTf^!O_!8k9vbm|lzHG?`H+7|J~kalf_Rm z?Jil!u%goFh|f8bt{ra&kp6OcvV9daj$Vy)#OrTcFe=_8uFdo4H#q^NJy+wp zK3^WMib>Es+m~+^S*hJd+G|6BZ^50UHnwxY^B#Qah+wu~5WIE#4^+nzio)B|k}Nv! zKfZ2^EWk-D97v;^1~GRXh@$g6+)`+ZxTc%M{CS;<#KAUp+9!VV+Y>k3;~&6J!uy5( zB#{EGl{2mK9A=}-y>PWQgoM;MsU`4q&MY4+80!{=86qzsS3N1|(q76wq0jaxV@I)` z#)iRVz}n!S!NP;45*_6G4@gD+#*lXpC!^Rlh+QEs&+pSnx-bw415?>$)w{E`vc1Rn z@na|>#3JZMe6cUStHlZb@|yIZiYL*_Js+v}!?rluX|jI(YX`D71RV>6qzyl6Mfq2( zQ0es@fuB({oG;QT#KR)U=##mL?PwzVc0LD5PpWl9Y%$4Z6$6eW$W}TZ^g6H46o~DQWcfO=Z z;?A`)G4LgANJ;0vGxrh5=$`r8NA`Q^mL~aey+Nirwj@Mdw31(i(Q|Idw*ft`eq3Y8 z8LUUwauf?G2a$9MOP=jyeFe0hfqK&6qx86*3>`|U zqi*vC9U6d&bjP2u^EuibKsUEkN8)7K($hvv1q4H5H9Tuu1BxL9!{&CIGkEs4Jc+tx z_t?PBxJh?>PIl9OVIJ+vFQ&KLOxQs_R6pHg=Dz;T=LVCJ z2iKVS@*Xn%{M_8#8^_AU&HM+H1^(nk_G3(W=vBFpfl4&M@ALUPii@wJ#t8{#&-cIf zU1E%?+HOIcuu}he>SdW0Ps)u@n<9M+!b7n zwk`0`&qd!J%L>6lY4IIioR&4yrkeCO{OZ0+Z96QWl3#fk6YtCPsyUqTM51=(vjW z-x9Juf^w7nYfk=8lbWc@lRw%bK7?HxbUSOX(rlB*q9f0huJaV-t`1UElU%B(=zseL z?I2UpLdV~LUz=24V;fU>=N6KMxtR?LtGN9A^Am{wnJyjwuyWdM`pb}9{slvFT)%tX zz5yxsx#bd73$nz@fOSp0aMf!xCW26as+>N+fC{tqc!urRntT_j85qDt`|&Dg?UWRS zeMZ)bmz{fw|X_tWD3@9QChOi)O~>Ygv{x7LZEf`i4;MK{d?1=1P5%nAh>9kB2B* z?c`rGa@q*wE)T**1qLHr9=a{68P@#@^euG0J7&$2gZE4r;GJG`9qvlOR_W?zq< zoKRKA@cxhzxXt%vzrmvUb1NG;Q2>zhk!i_d=yUG&f;=~;NEHR~S1V`Pv@f~wF}Nmx zS%_-OqmPj7tntZ+VAc5}deM}o!o)3*7_9AcRLabJ>-Yw6Ax-+kw{(=T%eGKfXhNel(IVsk>P{ zRyGb}P+a!@Y zk%|IT4@L(Yxc}!G@d)rpus_Jd7?$L-g*dZButF8%6|$#*_I%u@yUMxs_7ub`UMXCZ z(Xq{H(T3c6!m5~|;sxIWfpstTO=k8doM1E=&CIN68u9@70hKz2pA9^T03b%bpJm7~ zmx`eB*Iyg!J=(8au)oHT+_1;|Ik)sw^TufI+oM%-u%ww-D}Dp&?_Zph4T~MlK`U$Q zEqw>#MF9LrmY;7`H!kp7$>%CkT0{xz(=b`1?&qonP@Z=08-wv)xvOOW9Ty~ zwvh8`X_li9UmF91S}d>_XDeQxjnne23U^AB>oUmCkC`uFl)o`~?39dM4x|}(V2kGf zqoL}n3{lcSWKKVc;OiUIGbjQSCE2k;Rk&9p1Vv*m7hJ6a+(1f9?@pKF{3PPs)ej}N z7=9u2NiN4>-PgU$z=%+#n&f&u2u9oRMkfrG-t@Ie-q_s#N^-`XOab<+K`+d`NJ}$_ zf>OIB+%ZSv4=G88dNjhoZel_GJTbbosW4#V4|Scd0w=>S2-R%FRUNe?AfWr zhv`o>ew{uj*2it%(HNT_QTbWIR@@clno**}ECydCh53nX@WKG7T=X_U+Nm@VwB7OO zj+VrSN*UwgzBpwst;U<&$V~2cZyJB7mt4>U;&p!f5-KV{?GL4@US@&=fE|%ai56=e zm^W^63iV~IJwd5^#j&(%L>b?~g{ZvZIQp&g1`L2#8)E!nYa0yn`*W}Nfo_fGVUGVG z%<*Nv%WR?JIOu>A$%SmJ@9n0CI0s24v9E4F@Od2l+E{YTeVBONn%443##rwe-p56} zF)ujgPRbiBUN5!L*8RDLp%I(BSvy7IAuupdF>;KVfLuSg!DoKghs42Qvez$b{ySYT zx;1pnX%r+V*!Ls3ha2K|X;Jt-)sIHH#pA#CarJshROYKy1K6&$@XoC*Pf((*p2fq0 zW?z;ITk6rgw`)^1JG3u+qAKU}PVv z7;yP4oL!RIAt+gKXx4ER7g^;fQf1b5)IE{sSfEO7nVlQsZ|JiQwAwbb)<K0_$AE z^!oat9rH5tHYe1|_f-8QyT_)Opz(E+*rO#ZVi{XHUa>EmeawdJSFANblAPZcGwk%D z5*Tt&;Q$kiEQX+I>2o;1;?<`lqSVmxrD7)FfKD*L+>J0#72Vd83>^Sil5+Y-8N5q2 zUZuKQW7dp#|E(PFD|beaFH=yhFVkFtgOKr_K+oS*1vf#v&=zNu)-#gv`}L>Qm5jdm zq%T(w#VxBmj+R2wE|!h@F1X3Qi9<6@x(aMd$s9_yI#-}a`k)|y0)PTy2X;aV$(wo~ z>WAYmIU7r&Q8I}Wb|u?;+4rTF_N>e_wWOx|o*$!#e~$nm^nw{92`ka;2aVV@sxQ`TjELtfb!8}PVegX083 zQwzYVA*I4V^)tg~r4AWg(lz9~F$$nK*9#_ToGmS;!0FR<11(ia}Nbhoe{Ub=pe?uy<73=8n`PeO1)!x0q`2YWN?m z<>hq0>#*{cIY(-G*DaHgLLEhLSbmxv8R{hVx)*v`%fIeybCO-6G>}>6el<(f|4H$UAfq7Qsi}Tql87Z396PD?6f?*F4)Lo`^0cTE2{%^!%sN`nXw9=SYXBkfg*@cvt| zes{#5%!}JNjFBdt+Ux01HOx;1@+}6L)T?M&oZ}+gY76O!Pj-w!rr~P}pi6uJ#!I0N zjI9@gKY7Cqt%cApR)`Mj2Y=(_jSviCJ|bwN6TkSQPJ9!?C@7eBy%2y_-pFRpvl7?a zCL=d&bTm5}Z0UnUe(L#Da}FUy%&b>^ac94IUml?YH$5pPW0fg@eB>BE>a+L-BQDDg ztdCa0W`DDHzl%t-{Z#!xS8}O5jAZ}Q6NvZ_Gjk+DXcKpVD!rt(m>h~l0AU`RN|gsN zbWqv?ZZufN-g+@20z29ok+IqlA@3^X8GcqfIaU*zyMVgt?d^D+GUXI8#*b*l11JwY zJ6amiOOgShuTSmSGK_jnsGw_GSl%LlB7GL7w{^qza2Su>M{pkR+&=Ob+_^JMJ#+)^|?)EIAu-3eDw~}LK8p; zsQ!c1CptC{L&nh+4cZ_n%_D;n`OfKdnZ^3>_X;5Wup}^H$0l!uK1w36EQD%n)j+JE zh}+zrxRN;y9}nE(LF;>=p*MAm8;3TDMUuGUP7?f8bYUaGL~;bj&ZAT-wZbT0Zp+v) z{d`sXXWgI5nF@AkA)crx&kiiX_S2c$3gV%l5a+!%iBMxZ?2}X8$r+8jl9K*e!Nd!n ztOs#D24yJlcg}tds@kiighVku!dhL7MSGb)ezpuW01|3ORZjx$ z1bnx!W9HhO-tUY76D~Bv0gXX#oBX$!RLY*^$HdxJKyTR=5RTe)FDM5;JxZiJhX+Xw zr+||QyM9ylUkmxxy3XItrsf20Vl39wbaRnZ)(uud!+#i62tuMC`I|q8(+3;k>PT>I&!wUe8Xv~+k;8z%C~{aF zTCinEU}|n$*7Aljz5u=q{!&=R@#!cp(lRSmjC_P}J899Zxq<3$a9Xu=G5~P36!Z-a zEB|Lv;tO7*1LlTQSJ2Y|G0>BMd1B#fmrF?jPj@{8h<*XeDCKYFj+n%__S4>TCPE#1 zDah1PT~a|4`1PdLTQ8F zp|4*z@-n~@MF>|uZrUfvcWm7)5xr+nlw^@jhr=M#_f4PfJ15Lov8+Y32{#0|HlyjN z62UM7rK%SeIwTO%#q=32Mf?qWnt)b5nwsAD)yRPMLUf&Xrbe_`ROGDhq7fMKC1D4X z`A{J=%uu9ZOZZy-(mdzSoBQM?y8B6cjysc#=RcoDd3V`zq11cI1!A*md%RAYe=Bjn z;)UTubMv;nRf0L(zXsWfBYS{gJi( z?_W`u&Sd!PI4J!>Z;jL?kB;1kYzr8y-WEA-aG$#0SVc`F(XexVw|OfZ@Fr;Ts21Mm z>!N`W%}Xx*ga*ii^ry3cT}Aio6YQ}h0gLVSL3Nflz05EVd|foI&mg$rgWk1foNsUI^lj+i4{4Q1?;Z1K$&vZ`G%;8eOfc|--u z$JqU30P}wD%ib)PEW4?gSp&~%b4m(|tN||P4;e;bk~mP6q2D_sL;*x|8B00n+ScVV zN%@~j^Ow(RO+Sxt^=jUHSxGNk;A$ddy?2QPIAO@WAxQjq2z&W5 zmkbqvAf*#`0WX|ZuM=y(fL8Lc=CZR_qg6&ux+23K0EZ+sr6drfzf{{aTLz(PQ)z*b z%ZTP({->fP);SnEE^`73BE6E?3lRoEeXe)C0VVRIxu=xy&z*YFEvbKw2N=pp0 zJ{e7~XN*gzK@&$?6ab&fRP6khlaLc!19W5c44?mXpus4tK&=A5&r$19X=mVxc^DoC z#<@synOr2ZRDC7#IzI#P)(FmeQO?Vs8h|pjMI-bfM@XZiJlP{hEZCLSDjq;7*uv}7ZkQP^|%Ev89jLCE{Uw}?z_=Zwk*lu-%c$~0m^*nFiUoMtASwg4U%{(QqaFQQ-PLx5^MtP|3p zXUXXe1w=_J^?pc`j0<2v*VlZj6)bC;xR>t^9j7qyo$vQP0b(L@h^ znBkhy+&@%S&73T%HY%vk(>D@vWOXHI+M4u$j@!>z)D`S2fe4e!RO~f4&6t8d(F2Th z3aN#$de*btRyJYGh$*o7k|x-5MYvfM1VDKhbU(+XGW7}RoG%P#0P=s10iVms#gLb$ z6Or(wAbT|x7w%W~P1r;#jR18hh?=_8X^ZvCAyne!=U6b5+^Et4W6F9tWLX@a*~ze@ zFfJ+CKKM5pDe$`A0S&TaI+^fca26y&btTQ_E}a{6Fi3R%-52MEzQhtb&h}3HoIXgc zS*REwz$%Zxr$T~@LHI{KA*m1Zl+gKM4Y!%+K|;XR3bX$*cnlW)y;cCd@u_S9M4#%( zf|^T(vOb{2y5p_*9$7;G#*Qz(iN##^k}RA7<)GY4tT-hKS(_w86Dn}y4^9DaL@$;= zIfCWsxS0F3_&g!h=|)!dbjTN2mU)RS2eMdb4*0kTow?5;epa-4UYcW0WTSRj>;1eO zXr?VO1e^@s92J$^-j-{DVN{BuFuj8b`=r|E9>RbU#tRBrqi%>kWIsP0G|RZ*iWLL7 zt>->u@eFG{$lfN#tO3oCFaV!f1xpBG!khtkW{^-_y2NEuo%YE-U*++|TM++ifOnY! z>U%*hiTW2YtX*oKD7K^s0g~69&mk`&-eHy^r3<*RfcGT?$-IyR_ZncaozCUf80gRvsPB9pSu>GdLxl;<`7AwYPsobQb zYFO+6TF`h8mD_pyffQOO3`*3^5cxLHyC zi>od4`X?mO51zG9o*I*0&M0VIo!rU=IX;upbTEGuV`KpL^SUX2EnbQGi1*v;bidJi zN2fl_R}wTmRPnohA{pt;_bXcFZHipzzc4IpyhDLaG3?Zmz52m+=Dyl`qp(|DILxdv z7`$1}bi=8 zM(xH$tRYzoGDqDEKZk~_|Fyn-WA(Hu6JXvl3OT6S>Q~_w=^N;U&Mb#3(@`TwPmB^Xg*E|7hfF)nVkY4rMD0P1a(+&ufmUCn%V&W*fA_<6fK+$%K zLZ_z0XGzd$cHi^t$Yl5LeK^W2zTwCP)o~vfJCD}9!~_Go8(L9GX=on42EF1V?@v!3 z_uXU3%cwx|eX=8J6M(3^)vORYd-ZNYKjIl*GRO^n)BO9xb~D=U7qM~+HwMIva4BkB z;B?662HBaRoCV(hfW`B*3Smns-}*sHwtVZpe5HiQ38mi$GYprh#{R$y@HT+i@piD8-R zR-^Q^84-ofDK1gSPW@!gaBQ`YKXdhlUy*;O9UJTjLmgs1qD{au%?LzU+xk|R49**L zNl$Pk z!gKre{8?b@zR^IZ3lgdJFh(sSzCFXre9Gm585r~)n0-f#JJfuQh{5)0Nl8^5DytK>BQ=9l2j)Z=>Kh0KQz5>3tz(`W`dlXB`&w%QwqVvb?V51 zR&kWZzP~;iU`jGymv%P(Hb_5o1XtA$kdH*S=$(F=7 zt6;iC^Co|(_*S)#3$ya`%Q9ktcVB;XlRT2{?y*`@-+{@O>Q5XIUcs`0ckXhao`bY3 zadZ_0Q1UP$Ypz_Qxn44zrlpH+RM@el7ZU7$C-7H6QjCv0tE6Nna9=MHmqw1bZwuXq zGC)JHn6-QDiLF!WZFOo+TVUXW7;!ar-tw>cAe5|+Wu9fHO7q2dK|tl`(hZWO;x96^ z4zKRmiN9aFKAW`qzzs9&!^QmJJKH2=+3?KEXrtoH&tS!v5Pk(jnPG!blUpRZ#I+Eh zC}L28H7hVN|QSC!T|N|Ytey8d#B!yHo{na;jVwTw_0665k_18a2+w;^dxTHMxDXdKr-_trmP&- zeWzYCwP{_NN@`KMzIs{f8Z{XHGla&gm3;g(jNuqZ78IQp;JqhW$e;QJ45&84*}0O; zNEf(roxjhfT|A^~^TJ&|@zSz>>_ak4RQp}tv36M7fKD==Hv$WbZIM)$m=T2l@UwJWsYkI$i((faN zrF}ot`U(6yfM_x#85vWl7~q|RfNliQ`2VJfZQ90EbK3I~OGGA)7?I};4FMpvAR6bj zTp%1$&8C%T*oMhRj!|!CQZadoAM|XcgcP3v6+Z2f2e1zR6;CCvrJ30#kh2M%ZU0N{ zK~cHsOH^6%kUY$G4^st0!Sh1yWsjEcZEY-ozq1| zCtKC2!RCnLwU7fyRSHv#L7)KtGhT!H%Z*+?iLOfW3P$|$zoPx!l=7BjGBhxqJbLV4 zd_(KxW!QBdAEq#E@|;#cbfD@it=g(gQtk+4 zpMNK75_-L-Q5taNyYo%lU|v%9?Hh?(NwR7V^2mZw&=H^B=Jmx_xqfaE%0yrJYSaHNDRYs1#Qt92`}Om!?V0g zLNcSkp5RTVQ7%zn6+YHFAXEjG|2$RB84%j62k}V?LA-a$HC@v7m8lPtkdRP(U;O<= z-dRI0e2PBh$|nCB;7^|5D2Uy|ctW=SU#fl|gY;DtcJ=SUyKq1qj`20SpBNMgwiAUA z*6k{QC|7a}6%P%oi4br$r#`iy0kMFs!mb=Fyv?L5LiheiK@kc_WDhHJO*I*LuoO|b zEO)yRbFdsVVo1`D61dA~komfqJHdEKK*skH_PY(Mi*$9TcHY&olKQ;^k`byxLB!;R zXDCb7ed3%b7vlKH!p|*iPL^ytH_^IZzQLsVllOx(Dwawu?K%mj-a<6TdJ8vjU;{dv zK-v3iASG*mACcSDxq3wZ>2uF4jW1!`N3w}CQQzTK`V3ky_ zs>(+RXms7DQ3~B>>Rw^$@>7nL?``~l*_}ADI9wtl{spn!-<-r?_HMXKT7L{p*;p8 z#NpM%Vgt$4QJ_Td366C~1f`H%hax?&_&V%?5f4w~hjkn+=i6QvwcdH}3`K9|E>6PQTIeZ$i z=<8{g(3dYG|23kl$5UZ2GHRo|dyn@?+gS9m%KP!fwjnC0|M4=8=uBb)sv3vLp@Mp?xEM%83U>UYf-}V0Jj5 zLP#SUE8j8!dDyo_hTil3>y=l4K}iZhe8X!QXX^2Ec0ZFp_Yt^9%HU|&f)-V#-+>_G z|6qRCCg#sxOVl-dtA%JE+K`QjGPufue3&;Z@-n%YlwbbzJkGhu;DyF=Pl5*q-G63OJjeXi z#T1 zqnxBLM<>VMOn)(drWK1(It6Uwri3H;P$3w>A?QK7AIx9J18&C8G|{D^_a_5r25!#e zN57+!QJC$cx{5yEbmdai2&3&ZpIN)*+LkCBq7v<7S?@xN_dvQk3C%fNTEGbV``mG4 zLXarpvh`I#o44-gM*c)6TWs>_>GOCrcs+i?Dwscc$QxGUIgWg}$VDv|=wQPET?Fg_ zoz#}oiE};NaDZ_lKX6_F5exX4*$T3gvU7s=pLM?jg~T$RY9ijo2w%tpU|D3S*^uDn z7DPcoVw)e>?QyTHNy8e8oGdScleWz(NlckrJl=R;Gjyqee!iKgYZDyoK>^=K#_eVk#HIG0GM}&pe9=MZ;v!IhNcNl23P zJL2u^<2ahpfNV>0J*A(9+^Bs-8L0!%gA0L+BS$B9ob^QkRe1n`wSPQkICfe5K_c)@ zeO5bJllDUT&qiUTxRAA~r~dmpNW^TUq$%Itfdcf93a~OZ6rj=qn*^{!|Nltko2PNh^*2b=Tcn5w;d~g7;sFi-__O z5^{W^Ap=*hg0~Gkg9;$NHyFB0!TMz~G1Gi!N*C`nek6an3!;r+S1m8E^UO~Zw$~^L z!)7j-Z2HvL54+yvDxwE)A#AHFgdwTG zjv{(s_f{@iWqbU=Ig9zh=7Ji$QnV1IyG<_=&w<_Q#ihxO7#LVtwT_$L74P}3S2^YTI4rp zQl@M1NxLXtm%x)O>(sg$m?!;pxtdUgz8Y%m5`1yn%a?QAm)!6PjP~^}g}uK)V&`*6 zs67(^sX`e=3Yc;RL~!nBOu83Pg94DuU?75oIPshKi{{2opPE2Y{6=YIH4Q4K!Lus1pyo2-1-;iG3NTHepQ{`|aplum1<_xTK~z0iY{eO2 z*3q}5rx%@u`ym9?V-RY-z(FDHI&GDM=QPPeMcy0 zR%Go5Yz`QMZ5*VJ$~zy9GTUhjN~=b>wWzDxe4fz0KxbqN;M)mIUv8eD?Ugp`)j*o=GCfJ5<1$+T zB(RjYlGLI%h)Y}1kE0kO-((?F`e^`{(a=(S_(jT}UH2M8u0us&D}+x{jN=`mbog_ErQI~qJKvi8AQ zTNbood=BrNjD}QDK#vpM@9HFvCzLfRfTTg@11~WF9kX!QSBiA7Has5!?8XRH8=v`{ zb#^9SVTju1@nX%fniiusf`65nHt-t~_m9Gl5NijVIME}7+241efBqb>%)aqU>GEca z`!Ula(%GH{&l+4=+(k-22q)>58LoG@rW>(TfZ7I@gm4wMit-*Q%z{jsJ3+)#m?Uu; z1#IBE|Jd`08sojP=2%!+a}_ltrjw}&*uir&w4~HxIE;*VBcpW94<39T!?dI{=orAQ zio;p7m{j5j_fB2_gqhI>zP1P7>u4aA*9w!-T1G|U=q2uOuRXmQUhzL4t zig|{=Y@Ofx9*MLV*p^IfkZKl$=7=Ce5;qIfg;U<0I@>Hk$KXq!4Kv2j!obf|Zj}Vx zfYn{ta}Ss}z|Q%o1D=|~Sma2L2x-?x8w}D#>&3-^j!$B0yDcQ8AUR8xbR)RkWRVw5 zAQA|3(vW7`Fc7>>*Y#S$oj7&n5UqOax4eATyKl{TD$+mX2p{2Dd=k>V0|J>88VUj! z*GeK_`IqAX32}H1zX1k1Km$D#10#~Wti#Sfa1pUh+=c$C`}+XAO2HRrBrydA&zws? zFA`^L3Y9ED1%u(aemu$nrStd3BL&GwlFA5LV2Dv2@-VS%BK=+-(V+2#UJ_|{xZQ-Y z&!#oL;L_l01n6mMz5}Hi9@Xuro1?{<9B0#|8-=;svF98?_kU~W;k|4Hu^ysoC6Dl; zF>*?gzfJr|X6%sOl%fjzSCf!X?uc|a?l8>Y;Qht31fy42Fbr-I&(}eg@rT}{W^G;V>OTflW{Tg7Vf@1C37pF0jj+uO~dMk z0d0~H---ZKzrE2GaA9Mbd_O;lq{>~8ry$vtUc#~`w=hs_YaqP*z5WdPOix4ApzBae zwWiHpY3V)b#hyn~76j{W-p`;fH4qIaW92*myKwffjYNP;#klVye+ox)?@r5GjjN(o zWOg-Bkq|{lSr9?8rrC5XUIuX75d5w#3#}9bp3*V}RT6pkBvHWULzHyT5~n#u0ov2{ zeX{g~|KvN%l|YI6N~yw0lOE8*mo|;=aD+F?*|N5bBbPWF(T#CZ@^=*6c(NChbx$?X zYVqD7?AvGsirCx3DmvR3Dv{Ktq92@F^Gpe}>G7@^L?1U)M3h`fW84A^&2y7WT{_>p zG{=`#rfrjK<^nFg>=|dVs$D%3uT+HowPA#PF|dMf@~;Fo=mFKowvsCL@5My9d7PCTz5TCT$R4NWYf zl@s;=rISyhQN084EJ)V9x^=htx#(CBO_0G7BKyuaM7CH+BR$=M*4!Pc62uSIPCZpW zr2bg})m98(iJztm5;11E0kIBN30akgNYxB+De_-LPleaZ@OKo-&i>0#i&r$SPb*;Y zsh|{t8oQsoYA&&gSr5T!hmzK<+EpDi*7aRY?@j}2a2ij2exgZLCL`0!;lPCG60{gU zxwj?NGxfS%Ir)OCTq6Rckr{i&Ny@nYGU)8<>f%e&s|GbK&I`6_Adr4mlwdc1_oBev z^AmuAMAzb}tDTV$76ul=3#7?2h$crm8Nc5{_?NAnc|4SR`^N{__kG_Zkv&@?Le}j2 zmSKh_V}>y!yQDSX9i!nTL^YT|}ONCOZ z{p$)XoLq#tYn`@1eAs6$M2wPJmgTP(rQwR0Z138sw_$T8>IQ{6-fR>ZH}y&tZV#v) zI`i5(lfy-R>XvOTDeB@@8&g?ULTHBg)aOA`?EvOSjWmYMqjGp!d~W5_E{4>&k+Fzj zv-1(g+veoAniL&N#k`fh9F09PFNsa4ejO{r<75W%raA76Q)C;E2^5(p`PMPPY zE%)+_pann?@7X;g_koKH#m>r$Ou12hBXX6=G3Z0a^&KpWk$-}ZM7 zf<5&Rk+ImmDDrmaEqH9CN2O<;$l_$IG8xRqHB2mf z;=}pSs#O!h|5{EsqK5?pmOkIc&~J}w7v%1Pe3A}6(apQ~Ci3jYSP;{Bk$m>E?Al8kb`Em&8SxLT|Q2IFf!gB95ooaKKO7f+u2Zh&^AvbETjyqSk z7szcqRsK>Nigh{peO{;rX%T%}FBTR=DH)$pGE{s*Nx5&@f<1#@&P}5x0ypYLG8->S zV-4OMP}gqoWPhD9!cWG9~(X+OlM4qAI09AA?)JR(OB4TXrZi*}pCjZ&K|( zQTMD~+-90tJ@NfU&^p8os*s6Cy1I(ho=2KQW?Y#^E;v_+rROG&rNU^2BCk?PW$U?g zZ4w2s;}57}lj0Tf#4h->kZ=;qn=k2;j%M{LD$w~e4Vwb{N%H7x=hjf_w)$ert&U*1 zZh$N@b51SFh~&-=d8K?K$bB%$)08R6Q#^mZ@jZh0zUOcVOX+O~q$lc<7s>5?lDfTp zx`2-}B_&8>9(616`AR=?9rHCTVO6k0oLOi+Oi&{Xn|>$8kS(k6tS@46{uIt?b;F11 zGJC#@#Q~2Y{wG&??#y2_PGeZ}wzUfab>ed(NcofT9=X}YVfCG~>gs6*acd^WiJ=;J zh_A~9Xb)HJM~ees^$b&RLD z(>+fPTwT54db@e zDNzO4K7M1aO+DzRNhyBH*NBTV`J#DkW00j8O)$Ci7FkQTtaOWlo@#*|ah4nnDU01~ zLr>|w#nY+Ftf)|E$jmE)nbu?}zFTiM!Uc;YA3bYTq{a!+3%-0YtK3v4L_BHXtbzuP zW%XvqgpC+!zP{GiWzdqmD)*=oUA(NT@2-w)pcqR#yuXeWe}o4+`*T=rfaK*JxX8GG z9sLgEWV08vI-E~ep7@2;^H}2YSiigUInTmAO>HtPl%z{?J4ubNrjSHm?yYn&3Dsz* zs;?oNEFK78T0kh6Z#K!w?UA*dw(*>1&%^b<@Vt)y5<+v%K=G+3#mi5_gIW!r)kkys z8+!^wf{BgMzqFDTXo6lwzjeG2^`TFX)tH%k_l!p5_Im^NZ$uff6FJi_v_fuPX$@E} z@}Ij~pAFiXs2&y;z)uAR!qo5QD|HTd_=u+nd&BiS98b;9WRh!?^Uipx58Vo!MhlJ0sGnz&MRmzBl}ebDCF;u@G;+=)x!h5h1Z zmGX@%B^QcE1B!8&tHn$N$Z*Ecmuy1p_pK}>Ggo&P=4BieKjp}V`98PqvgAI^Kh)tt zJ*w1E*gHF(_1V8XzQ97(B@2ReBN?$T}gS~B1YkI)oY+P;3NTLQrywj`5qXT)$EH^sB$ z{sYe~?~eGdJu*-CzHELAY$jeEpik#_vNOBAphYoD&(BWhgNQy|^nUGY&8tFvjWVS! z)jNSN>l?PRW9J%;(xOz_Gaw;c5!cZVM177!+Y3hW?4x!}zBrhO(r=urRbhU6!PgH_ zk?7YP3pUFp0ldSPkw#qPi$xwmAlI||uZO6kINnCb$v3#Pvv3eph^>yrA)y9f& zP_pXnCymX;AHK}>qEKG3n*xLa;~QLb&tEl%2lno)i!WQP^UPdAoXa2&kZ31==V{DH zYa7RG24ESkF6+#Tq1?1liSB#uIaR2A@AG@#byTK>sAIgzm(a(LhM~Pnxiz02Jwr*Y zH$2iA$LeiK2#1tmUV^$o}puhqmNSeBmPV46N*V?tbCx zpoJBRcy*_1>f;2K!77M*Rd0spU)`hJ81owa!oPHth&G#?HU3-=WofK}NLc31%n2=@ zGMiPAQ^?Ev%JmK*BuTx3y*+a%DZf`ZIN22=VMQ{Jt3PKqjfPSR_@N5g6IO_>+am5; z4e;fycJskN6};-!=6t*yH)k$lqNT3UOlocw^L*MC#A5Z4>)c-2E9v*=w|R0~q}Hy9 zGZ6PSgBQkDLOoTUU|%P3gWNTk^X#X)?bkF*k6(LYXfd#`Y;#ACO!^T}q(b{!zM*_z z2$Ky7`ewo4U7>A*Dj^q>i?DF)W}`y9MO|M)x!Y=OaB$QESjx+)U9FL8vCngSUI-+Y zsehQM>k(2;uI+!A?H#=#k8SxOwhk_hzkOD>@M>G}6QFg8s#sm?!$<4@QT{fObLE2N zJgq12?U3zta6bl*gcJh#^{#k^kI#hL2?p=KbzQ+qxIA~gx%ML}BF_o+VI@g+^Io?8 z>K+V$KPQQ>exp{%GeMU|o~T0K$>y8Vn!=x?8J>1pCJATow97atT>(#*fdbciiBU64 zv&!D~OAU7#M6+HS&do?LRYmtfFP(BFe??SmQ_0)%(4poPQ6ZfC#+0ZMMJ)rRV5u=# zfwo)i>`1uxhCThpd7F6dSOaW#DeDo3q$GAZtl_N-raZ~a>Jv525o7ljqxXVKB;ROx zqaKrS6>r{+QjoikdaK5++p>YsuAvSX;D{?vYTF3&=LI!N%U00PzO#&j#u(@6>Ez!q z)F8kU=+ohiH&ZCa#*PAbv?>fw48AE~Ewk9VguWtZ&N^8$Vl`xcB9D8##lv~XzJ4Tl zWJ+QIAV^t?+)^&z9Hv*KK;P1-G45&R{=qPl<05}t$0ETkUC#)!PVA@l!t%Wz z80Cj*pyzRI9PecLG)*LFIs*9vl8uVvtWuNL^!?>m^W}GO(l}C0ReZ@jr!!Py5>36g z(j(y+wNoJ4q6V*aUD5M4OC1>}(-d2*)FNky(;Tg>$SI$|THZ5it>|V{zh6Tes zCuX~zVe4Ogr*(mDU6vxH;T*T~sG2^TKb4(lz}%Gv}2-Cw~f14L;ovB)J_jamDN`3D1u8_v*W|hwnvjof z_u}sil&Ko$mN-rXk?-kFgrquFeF%P4-xZDi(pye(PU$UPYTI2|1${BK$BWGU+*apo zz=HYfkb(UZ30U@fpAd`NgVBJy4!G`KSWA(;Eg!m#Z`|Mj1aom*18_9KtYsf0Nw1DC z5bNx!?`Oj067ojWoQdo5xNn@#@EM(1%5quT?7kYhD+{fhogZ*}6Jh%;Wh1?MT(RVw ztm0;uvi!L;K%@u2RC_|~S@aETPqiX8W&IP({?fMo;hv+ymsp*n00Kk_B3dWY60XFb zsPZzQabpH+mg@VO0|`T(+6(ALrV0}R^6>*nik?vvzyz@SDx(1eT-JW4ufpv_tG8P^ zH(v+C8y&9f4Q=*}IdnOim@F~fw$K3}f~2-_87Y=iJBN!%4a!CW-mV7RPx1m#i+fQ% zcjLYWQ}se%r`e^QEQ$c=;(1`%#P|t^F{SyFxv{EbW5Zx6F@bv)VbY6FHsN#c0CZ`e zo+!42wBbQp{J0uq9!IMcJ-eByjLl<{-qm*#?=E7+ok{;H3nw8!Op*5Fnb;S~*r#u% zX;$XuP7k)Akp03Ln(zC~GGp^N8^< z=n2IcG0P(5I#I5DvHe30ulmS_%Z1g)Jxx|x)=F%I_nx;1%o|x)NOUDM#27{L2#;|l z(+AyUDFd-wpJ3*hqt}1ZIH32swV`wAYSvK5T<27x-`e}wsXP}`4YdM76~0Y{%Y5OB z95E7u5>pp@>6E9QIvP<9=khnc>yWgnqc;BH@-|Ul80jL>;`mvTE|+3$XESEuy3|yB z>7MT6b#_@waS5sOVUBXoRPe>Z&U8d=nVxS>hVaC5-hpf8@5iZLI8c}9K<+=(4YB>) zPL2M2&{&SE>uLvv0TB?mEeZk!fe}I=;17`xg#MGr7Rq3IAPS1)&__YR=nz>E5n+aL zzqWyt^2ZpN78Hc{>vId`m=5qDpL73NAWuEfaC)v zgT4-7aZ>sX6N=@VHt}vUw?r zE19V~NTaX*+DY4PODWO`&MFk>xk;}MJVsF##DYFB$L8RZ<(|LW=v6vP@2u6h^k5si zA>tefJw!B1_s$0uHlbw_8mf-AVua1OyQYXb`k}~qX8fifpVM-fcOx7^S~A-+KPFPh zx=ofasOd(SyH;m4=BQ-fsXwFURSc@P2}^X&m*c96=CdT$X_AR%-L6m`tQo`ti`F)cmzx=a1^8I(%LCk;6Yj96o`pLZH4BCN+-#VUt?R8bp^Y;UK!q0i&b1X|Nq zBYfkV!>IT zIgH-cH}f7adYWC_7iDV|qiVQ<+5HZ>;r9chxVb`{P*5Ne0*AQ@A9V?bzZN%LO)P9S zoFD!9JM7>c58crY4+_A%;=v~f%o&A5^KcJ~<)8ZSKd~4wSPDlhTL=t0t}_DcjDY{Lzg2?M&WvdN4jSiw{6z!N zq2xlB{9^+AhieB%Ai#&|{ky@#)H&|R%yo1^{#J%#>M?`~Jg)Ok2Bv>XZA|VdobP)4 z;plOle}Vh=I=lXq`!k(?!3;WbM+XT;`b{300V2S_|JFl(OyZ)`yIsuDOa!{oU?hm( ziSL3O647%9*Wb;F@8kpL=ly&CM213Kk%x1||8J?_#{KTI6U5a{5IuwW<(_ij+V=xf zTIdnf6%GX=ev3$r5v-y=5sxSFzbuuQ;Qc>=k7w~OfRAS}7e+E@p(lrj)#6Zt|6RGj z)cVztovR+8e^KYYNABPqQxbgq@17qL4;Clz-%AS?j365R9Bc{K?COYwJ0H3Dw;6nR{!h^RFM9bV zjml`47P^uCC(RCl%V?l05(V-Q0>Y5!Q+NGiVd4Al7Ag1`nd?IW06>8r|2?aI#3#!C zg2Y+0ZwEe7V)$3{19r$fI_-ZM8B8DLNC5yi3i-P$Da4(ZS>|D)aL51v6uKw=7K#wVtBYvV(azoPc!oKw+&+#&XC54du=~Ca`rF|C$Qj6> z6DPa_0Ek<~LT^QVUnL(@<*uKD57QiC2mfc+e^|iWwLG+N*lXg4k12tPiT?ANhdB%&KOduG?tuIq8W%m20{}$P Oe|r=FKph$Y0Q?`d9!*sM diff --git a/tests/storage/study_upgrader/upgrade_720/nominal_case/empty_study_710.expected.zip b/tests/storage/study_upgrader/upgrade_720/nominal_case/empty_study_710.expected.zip deleted file mode 100644 index 6ee11415f433984103a7f0f73e476843be7758dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62699 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 y3hZfJ`f+TeIEd1B!EL-rF?VX?xg-AJ5e{U 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

r(UWX2HDY`b!HU^tG`=;7ey* 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 diff --git a/tests/storage/study_upgrader/upgrade_720/nominal_case/empty_study_710.zip b/tests/storage/study_upgrader/upgrade_720/nominal_case/empty_study_710.zip deleted file mode 100644 index 6ee11415f433984103a7f0f73e476843be7758dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62699 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 y3hZfJ`f+TeIEd1B!EL-rF?VX?xg-AJ5e{U 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

r(UWX2HDY`b!HU^tG`=;7ey* zNgDCXt!g;i?>W>r;+H~6uD=&lAZ?%}ERL3O^~Icnz4YV2W1h3HESAH;oPw(_0O7+LANh;9{T?e=Y$W<5pV z2unhBYUg%D0H&ZvSE`Wa_=hWX2(4kC%_E627Zgy)#K8M~b|q zQ*F-6#N)MoE{i-*LeDDhO>M6zlV0>fdw!Y0*K{)D_23IwR*tvxd|T&J)g7&Q0@Do2 z6U;NxHgyAJHi~5qFfv&(jFtR|y*}h9#U&g2>}Ewna~j^;QI$1&cWDb=u=>=Kb2?M5 z-F!2gh$5q8RYJ{}vRzA9D@cpaHh^u}B32B&AfD5KR={lhE^C&0W8`%5pz@Nxg_MS- zx?I4F4s%JghXBWP9*N?^jSt4bCGYzkO=lJC(7sRi4`*SkdtT4X||exzm3&{6Gp^v$#Cs_A<)mbNY5x-JD#7q?FuFpQ4OpCLr1qV5~VW^eFZ^x|d4X zDMejOh5&J!fJm=t{!2{GF#ultBms@nnMsz3n6=(Ulx_?_^-5j8E7o{nh4#GK(HZ=B zfMT2=!m>xCB@kZpp_*6#E}Mlv_f@E^VBKDO@6PiOXp4j8;rPzLj6k9|5M^%|dZumW>9Qz*Hnu04Rh&P6 z1bt=zu^W?8J~{-F9v5_I8X>;=UmD?$6dNaX(h2?9q)}MRX3U ztiGWe*rBj>4|?6JjI4M7AvvnkXXBqJqI2KKRIe#0_%POvfDiNMs3%&gCKfYZ=FgB! zHj{Q|Gq3d+tW=&VBK|^>t~GhS$SPqCfIL){G!={Gt!`+mV_;Gu|HlPL-r~~BsdQo> zK?495kb?@q2yg|$;UI{EE59w&$q5L7yPku4zzy{A02n15;?_q4;XwdE!&F#r0)2e| z-jRa@3Xm#or#?@HFtF$ra8hyBsF_zuT*nA3wY$)&fxodK5}lLtm}bcTa9!k-!|kln zSpr{&R@IRfZd^E4dlA6 zVN1R5ll?bG9N`Qnkf_(yVoRX5D$O&107_0eGbQC(MCAjBF5g4!TJU^^h}oSpS| zkr)3gvZ*4_-Wmahv*;qgKxBx_@$pf^m{Oa&If4!V>|p}{v_Beh078H;YcP^;eGUWx zoka2%Mtt>a+{Oh6Cw8g!(B@BfWw*U5wXKB6&{>fujC?e>QIYNAE2mZop*1&{lt>Lr3~5xy$!WE{9zV2lLayYN*lm8dK&(%U71QP=&5i^J&BaJ&x&U$!3DdTr(bi_uMrMXhWFqZTTVm{S)SY6 zkYWb)N{`q^R#gqRa`z(dEq04It7{RMSIdAY=^>S_NXhWVwhj8cnl?F4oKg)UNI!a3 z<^E8jo?N5T<-)yykFPJNTod@LiXlU9LbX21xNA5;$LH6ISzqG&@R0m$>=}pPyKGd7 z+MHVSm12dTR)wNU*POJiOw@p3m)hRQ`P^NUyc6|GJEk%py(p{j^mx!2dq=?_jQb^c zWmioYydu^ppIt99rTLVs+A^81Fa5|eE&FP%L(L&Zq1s;=)u29;a%Ucg1ELzM;F*<>2}Jz06to+ge9AS(Eb;Z@a1E)fbJu`B~jM zlZWx~=(QKU;OCws-^NzyyfKi%!H(@X5bkO~Hj}0}bM}e*h1$`q9vV80&vHRb6xE^Z z^V%u1n2!7@JFd65m^|K>S~L|-2Jww6fMr($sCvzBViJ#Toh9ZnAkWt^OuQB6{4j5f z^86t;)mT~MBuA1~>N^E6u8!WB8l!s5x|b`%0Y+4uqQdO8{T|D$p5)BT>6QsI>-v`L zFCQFM26dNvH(*DVe|E-88(w%r&XukfKJ?LHBI1B6isDm6PN_(dxof>;tsoGAo{>2H zHlKZ??B=1ZY66fgv;lQW9!!Pb(?nYx4gD0x@f?>xR?u&- zqi1a7#Xd0zh=iw=b)d&05-LF|wf+7{_29A*tdmgr-A z(SO79pWp$2<$&0~!~fahaVbHb(|!m1mVN{Cde@n*-yBh9?6WWgE?hT48@J$?(0s>|n};QwzqsDg_s`2SlD#{U}pt5W(e za{b4Qp*oTMs6650p`O6kyg8|S{}D}mf<9_xOis}7t3a5OHTbsziJB!@e`4B#5w36` z?DyKF?^+x=y!I#f|BxrBXgOqWd|Xn#Y4NWz<@?fQF}~=>h72Pwa(t8IxVMS^6Z-2C z_Pa4eEm0T*-~0xHAddee@^^Qgl?+wwkgmd!<6Dn(?5--3s0eg*ghQQAT>Q%g_83@% zT)O3$^xrBXVH(Im^hcT<1J{s1S2)7X^PDvVjy!eOuNM|UoqyVu`Mb6Y2PJcT2>}4G zwdYAz{bjRq?B7uj7ZY$%1BOl37{Hy;CJ7%7o_FrPZZf2TFQC05yHTXEqLAKDp zcm2Bs)Sb*@3&*o2aq;Fed%91|2;ENxAA^NZ%+My{^h3L-&y$XJnH`4j}|PZ xf3WbU-Mqh}fA{}nS|MMc*6QFlKhRNkK>iAih3w=2072y6At?Ybj06Ax{|C;~T@U~O diff --git a/tests/storage/study_upgrader/upgrade_800/nominal_case/empty_study_720.expected.zip b/tests/storage/study_upgrader/upgrade_800/nominal_case/empty_study_720.expected.zip deleted file mode 100644 index 507d8a97f3dc803e9394acdb19e05222ee225588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62766 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 U)JzTlxQzNaBmn?uXOI5-KgF0h-T(jq diff --git a/tests/storage/study_upgrader/upgrade_800/nominal_case/empty_study_720.zip b/tests/storage/study_upgrader/upgrade_800/nominal_case/empty_study_720.zip deleted file mode 100644 index b1eb6ee06ff791481cbba62fe2bb6cbfd9a6fbf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63723 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 L0N~!-@w5K}S*=dl diff --git a/tests/storage/study_upgrader/upgrade_810/nominal_case/empty_study_800.expected.zip b/tests/storage/study_upgrader/upgrade_810/nominal_case/empty_study_800.expected.zip deleted file mode 100644 index 4b5f52b66f88dd49820151f9795efe46bb467c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64628 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 diff --git a/tests/storage/study_upgrader/upgrade_810/nominal_case/empty_study_800.zip b/tests/storage/study_upgrader/upgrade_810/nominal_case/empty_study_800.zip deleted file mode 100644 index 507d8a97f3dc803e9394acdb19e05222ee225588..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62766 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 U)JzTlxQzNaBmn?uXOI5-KgF0h-T(jq diff --git a/tests/storage/study_upgrader/upgrade_820/nominal_case/little_study_810.expected.zip b/tests/storage/study_upgrader/upgrade_820/nominal_case/little_study_810.expected.zip deleted file mode 100644 index b1aade240b6f01067ff8459762b2b09581470a00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111554 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 z 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 diff --git a/tests/storage/study_upgrader/upgrade_830/nominal_case/little_study_820.expected.zip b/tests/storage/study_upgrader/upgrade_830/nominal_case/little_study_820.expected.zip deleted file mode 100644 index 17a885d7a5d9e033eddaecfa87620a0c41661369..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104234 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

    cc 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 diff --git a/tests/storage/study_upgrader/upgrade_840/nominal_case/empty_study_830.expected.zip b/tests/storage/study_upgrader/upgrade_840/nominal_case/empty_study_830.expected.zip deleted file mode 100644 index b1e47107e13aa8b767ee4dc19a1d5a994142122b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67252 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 nV9q$u1DL&qfWJfmA8H(pJ9WBoV^sD~^6!C}F diff --git a/tests/storage/study_upgrader/upgrade_840/nominal_case/empty_study_830.zip b/tests/storage/study_upgrader/upgrade_840/nominal_case/empty_study_830.zip deleted file mode 100644 index ecced32a77410521b282444049db8658d1a26116..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63805 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 diff --git a/tests/storage/study_upgrader/upgrade_850/nominal_case/empty_study_840.expected.zip b/tests/storage/study_upgrader/upgrade_850/nominal_case/empty_study_840.expected.zip deleted file mode 100644 index a402011e16ecb50a3e6420d28238274e43f0b4d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60085 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 diff --git a/tests/storage/study_upgrader/upgrade_850/nominal_case/empty_study_840.zip b/tests/storage/study_upgrader/upgrade_850/nominal_case/empty_study_840.zip deleted file mode 100644 index c9e017d096146016eebd444d525e33d028ac347e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63856 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

    C1@h~wX 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 Px>24004}0F3;_HO?h}PR diff --git a/tests/storage/study_upgrader/upgrade_860/nominal_case/little_study_850.expected.zip b/tests/storage/study_upgrader/upgrade_860/nominal_case/little_study_850.expected.zip deleted file mode 100644 index 4cb3dc548d41c1b56e8e7c4b67cf156c16e5e51e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114653 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

      =v?l~(i=IrZdJ!wj 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

      5oxlTqkbh_RD3rLY~ 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%0AT#XkpzsROgSOD;u;(5tMB8R+?!yo(88+LG4we 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 Y`F;IRgrkn54)(E+&y}`t0*BB41AqhW$N&HU delta 61139 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 X^Tt&LC^(Kgk2`a}aX97yhQslH2yMnz diff --git a/tests/integration/assets/variant_study.zip b/tests/integration/assets/variant_study.zip index 4526fc900f0abdfa80347895cd8880f9fe986eb9..9cfb20f19e0c1b7a02be8955bbd64c1375535e64 100644 GIT binary patch literal 309622 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 literal 311282 zcmeEv1zeU%_cq-rodQaChk$fRhjcg6T?*2TfS`0EAV`S_A|)Y>w5X&sN{NE`-S>mR zt}Bba`|j)i`|<4FqV7I3XU<%6otQIoE1!df!-WDr&s2ESAiw$i3kDPgl)JIBwXwac zp^K}VnHQ^uIyw|0%z~V8lMs#hec*BPM1_KeI~USw4f#d+b6ZG|wqyt+!pwlSoPmev zyS60ET`ssfII>vVTYqgfq42`QTmPJi021wS`oK7ZWO4G8GM5sWFzQ&g1l^JptHq)7qqt;yubim>RjVqI=WX zkK%f~uYatn-if~a;fiJPMGbt`FQR|12HfvNx3+h5bN!}_=EIc%1vU34#S;IZMPp}k zW0(DQQ2{0YZM%P-u#<5_Fv}}?Cb~g8XYZ)(!z!%`G#K-(>&DQbUn%`z=0+h>AHE`W zyT}p~$BOz3I{GqYAA8m_SE+(GqS*@WsXZ)gRdWy?Dd<}D$hpm75E0^SLpp$uI&0dk zecp_*NsnU9LQ?t6u*XN%RDv&%*w=-toX(yupo?hWq5gYaxLF@X1CcDfQS-&hI)`%-omqQ&LjXh!DD+6Eha^6Ahlh@qhUW5u4-D3 zi@r0=pT$fb_J�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℞6=&5 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 860: for key in expected: @@ -640,12 +640,12 @@ def test_lifecycle__nominal( ) assert res.status_code == 200, res.json() expected = { - "fr / Dieppe": {"enabled": False, "group": "Wind Offshore", "nominalCapacity": 8, "unitCount": 62}, - "fr / La Rochelle": {"enabled": True, "group": "Solar PV", "nominalCapacity": 3.1, "unitCount": 2}, - "fr / Oleron": {"enabled": True, "group": "Wind Offshore", "nominalCapacity": 15, "unitCount": 70}, - "it / Pouilles": {"enabled": False, "group": "Wind Onshore", "nominalCapacity": 11, "unitCount": 40}, - "it / Sardaigne": {"enabled": True, "group": "Wind Offshore", "nominalCapacity": 12, "unitCount": 86}, - "it / Sicile": {"enabled": True, "group": "Solar PV", "nominalCapacity": 1.8, "unitCount": 1}, + "fr / dieppe": {"enabled": False, "group": "wind offshore", "nominalCapacity": 8, "unitCount": 62}, + "fr / la rochelle": {"enabled": True, "group": "solar pv", "nominalCapacity": 3.1, "unitCount": 2}, + "fr / oleron": {"enabled": True, "group": "wind offshore", "nominalCapacity": 15, "unitCount": 70}, + "it / pouilles": {"enabled": False, "group": "wind onshore", "nominalCapacity": 11, "unitCount": 40}, + "it / sardaigne": {"enabled": True, "group": "wind offshore", "nominalCapacity": 12, "unitCount": 86}, + "it / sicile": {"enabled": True, "group": "solar pv", "nominalCapacity": 1.8, "unitCount": 1}, } actual = res.json() assert actual == expected @@ -748,7 +748,7 @@ def test_lifecycle__nominal( # "name": "Siemens", "efficiency": 1, "enabled": None, - "group": "Battery", + "group": "battery", "initialLevel": 0.5, "initialLevelOptim": False, "injectionNominalCapacity": 1550, @@ -760,7 +760,7 @@ def test_lifecycle__nominal( # "name": "Tesla", "efficiency": 0.75, "enabled": None, - "group": "Battery", + "group": "battery", "initialLevel": 0.89, "initialLevelOptim": False, "injectionNominalCapacity": 1200, @@ -772,7 +772,7 @@ def test_lifecycle__nominal( # "name": "storage3", "efficiency": 1, "enabled": None, - "group": "Pondage", + "group": "pondage", "initialLevel": 1, "initialLevelOptim": False, "injectionNominalCapacity": 1234, @@ -784,7 +784,7 @@ def test_lifecycle__nominal( # "name": "storage4", "efficiency": 1, "enabled": None, - "group": "PSP_open", + "group": "psp_open", "initialLevel": 0.5, "initialLevelOptim": True, "injectionNominalCapacity": 567, @@ -817,25 +817,25 @@ def test_lifecycle__nominal( assert res.status_code == 200, res.json() expected = { "fr / siemens": { - "group": "Battery", + "group": "battery", "injectionNominalCapacity": 1550, "reservoirCapacity": 1500, "withdrawalNominalCapacity": 1550, }, "fr / tesla": { - "group": "Battery", + "group": "battery", "injectionNominalCapacity": 1200, "reservoirCapacity": 1200, "withdrawalNominalCapacity": 1200, }, "it / storage3": { - "group": "Pondage", + "group": "pondage", "injectionNominalCapacity": 1234, "reservoirCapacity": 1357, "withdrawalNominalCapacity": 1020, }, "it / storage4": { - "group": "PSP_open", + "group": "psp_open", "injectionNominalCapacity": 567, "reservoirCapacity": 500, "withdrawalNominalCapacity": 456, @@ -859,7 +859,7 @@ def test_lifecycle__nominal( ) assert res.status_code == 200, res.json() cluster_id = res.json()["id"] - assert cluster_id == "Cluster 1" + assert cluster_id == "cluster 1" # Create Binding Constraints res = client.post( @@ -945,7 +945,7 @@ def test_lifecycle__nominal( if study_version >= 870: expected_binding["binding constraint 1"]["group"] = "default" - expected_binding["binding constraint 2"]["group"] = "My BC Group" + expected_binding["binding constraint 2"]["group"] = "my bc group" assert actual == expected_binding diff --git a/tests/integration/study_data_blueprint/test_thermal.py b/tests/integration/study_data_blueprint/test_thermal.py index 6328606247..97ceda384b 100644 --- a/tests/integration/study_data_blueprint/test_thermal.py +++ b/tests/integration/study_data_blueprint/test_thermal.py @@ -49,7 +49,7 @@ from starlette.testclient import TestClient from antarest.core.utils.string import to_camel_case -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.thermal import ThermalProperties from tests.integration.utils import wait_task_completion @@ -63,7 +63,7 @@ "enabled": True, "fixedCost": 0.0, "genTs": "use global", - "group": "Other 1", + "group": "other 1", "id": "01_solar", "lawForced": "uniform", "lawPlanned": "uniform", @@ -87,7 +87,7 @@ "enabled": True, "fixedCost": 0.0, "genTs": "use global", - "group": "Other 1", + "group": "other 1", "id": "02_wind_on", "lawForced": "uniform", "lawPlanned": "uniform", @@ -111,7 +111,7 @@ "enabled": True, "fixedCost": 0.0, "genTs": "use global", - "group": "Other 1", + "group": "other 1", "id": "03_wind_off", "lawForced": "uniform", "lawPlanned": "uniform", @@ -135,7 +135,7 @@ "enabled": True, "fixedCost": 0.0, "genTs": "use global", - "group": "Other 1", + "group": "other 1", "id": "04_res", "lawForced": "uniform", "lawPlanned": "uniform", @@ -159,7 +159,7 @@ "enabled": True, "fixedCost": 0.0, "genTs": "use global", - "group": "Other 1", + "group": "other 1", "id": "05_nuclear", "lawForced": "uniform", "lawPlanned": "uniform", @@ -183,7 +183,7 @@ "enabled": True, "fixedCost": 0.0, "genTs": "use global", - "group": "Other 1", + "group": "other 1", "id": "06_coal", "lawForced": "uniform", "lawPlanned": "uniform", @@ -207,7 +207,7 @@ "enabled": True, "fixedCost": 0.0, "genTs": "use global", - "group": "Other 1", + "group": "other 1", "id": "07_gas", "lawForced": "uniform", "lawPlanned": "uniform", @@ -231,7 +231,7 @@ "enabled": True, "fixedCost": 0.0, "genTs": "use global", - "group": "Other 1", + "group": "other 1", "id": "08_non-res", "lawForced": "uniform", "lawPlanned": "uniform", @@ -255,7 +255,7 @@ "enabled": True, "fixedCost": 0.0, "genTs": "use global", - "group": "Other 1", + "group": "other 1", "id": "09_hydro_pump", "lawForced": "uniform", "lawPlanned": "uniform", @@ -374,12 +374,14 @@ def test_lifecycle(self, client: TestClient, user_access_token: str, internal_st ) assert res.status_code == 200, res.json() fr_gas_conventional_id = res.json()["id"] - assert fr_gas_conventional_id == transform_name_to_id(fr_gas_conventional, lower=False) + assert fr_gas_conventional_id == transform_name_to_id(fr_gas_conventional) # noinspection SpellCheckingInspection fr_gas_conventional_cfg = { **fr_gas_conventional_props, "id": fr_gas_conventional_id, **{p: pollutants_values for p in pollutants_names}, + "name": fr_gas_conventional_props["name"].lower(), + "group": fr_gas_conventional_props["group"].lower(), } fr_gas_conventional_cfg = { **fr_gas_conventional_cfg, @@ -426,17 +428,18 @@ def test_lifecycle(self, client: TestClient, user_access_token: str, internal_st assert res.json() == EXISTING_CLUSTERS + [fr_gas_conventional_cfg] # updating properties + name = "FR_Gas conventional old 1" res = client.patch( f"/v1/studies/{internal_study_id}/areas/{area_id}/clusters/thermal/{fr_gas_conventional_id}", json={ - "name": "FR_Gas conventional old 1", + "name": name, "nominalCapacity": 32.1, }, ) assert res.status_code == 200, res.json() fr_gas_conventional_cfg = { **fr_gas_conventional_cfg, - "name": "FR_Gas conventional old 1", + "name": name.lower(), "nominalCapacity": 32.1, } assert res.json() == fr_gas_conventional_cfg @@ -509,8 +512,8 @@ def test_lifecycle(self, client: TestClient, user_access_token: str, internal_st assert res.status_code in {200, 201}, res.json() # asserts the config is the same duplicated_config = dict(fr_gas_conventional_cfg) - duplicated_config["name"] = new_name - duplicated_id = transform_name_to_id(new_name, lower=False) + duplicated_config["name"] = new_name.lower() + duplicated_id = transform_name_to_id(new_name) duplicated_config["id"] = duplicated_id # takes the update into account if version >= 860: @@ -626,7 +629,7 @@ def test_lifecycle(self, client: TestClient, user_access_token: str, internal_st ) assert res.status_code == 403, res.json() description = res.json()["description"] - assert all([elm in description for elm in [fr_gas_conventional, "binding constraint"]]) + assert all([elm in description for elm in [fr_gas_conventional.lower(), "binding constraint"]]) assert res.json()["exception"] == "ReferencedObjectDeletionNotAllowed" # delete the binding constraint @@ -667,7 +670,7 @@ def test_lifecycle(self, client: TestClient, user_access_token: str, internal_st assert res.status_code == 200, res.json() deleted_clusters = [other_cluster_id1, other_cluster_id2, fr_gas_conventional_id] for cluster in res.json(): - assert transform_name_to_id(cluster["name"], lower=False) not in deleted_clusters + assert transform_name_to_id(cluster["name"]) not in deleted_clusters # =========================== # THERMAL CLUSTER ERRORS @@ -756,7 +759,7 @@ def test_lifecycle(self, client: TestClient, user_access_token: str, internal_st assert res.status_code == 200, res.json() obj = res.json() # If a group is not found, return the default group ('OTHER1' by default). - assert obj["group"] == "Other 1" + assert obj["group"] == "other 1" # Check PATCH with the wrong `area_id` res = client.patch( @@ -836,7 +839,7 @@ def test_lifecycle(self, client: TestClient, user_access_token: str, internal_st assert res.status_code == 409, res.json() obj = res.json() description = obj["description"] - assert new_name.upper() in description + assert new_name.lower() in description assert obj["exception"] == "DuplicateThermalCluster" @pytest.fixture(name="base_study_id") @@ -918,14 +921,14 @@ def test_variant_lifecycle(self, client: TestClient, user_access_token: str, var ) assert res.status_code in {200, 201}, res.json() cluster_cfg = res.json() - assert cluster_cfg["name"] == new_name + assert cluster_cfg["name"] == new_name.lower() new_id = cluster_cfg["id"] # Check that the duplicate has the right properties res = client.get(f"/v1/studies/{variant_id}/areas/{area_id}/clusters/thermal/{new_id}") assert res.status_code == 200, res.json() cluster_cfg = res.json() - assert cluster_cfg["group"] == "Nuclear" + assert cluster_cfg["group"] == "nuclear" assert cluster_cfg["unitCount"] == 13 assert cluster_cfg["nominalCapacity"] == 42500 assert cluster_cfg["marginalCost"] == 0.2 diff --git a/tests/integration/test_integration.py b/tests/integration/test_integration.py index 37f34f5273..27cb8cf78a 100644 --- a/tests/integration/test_integration.py +++ b/tests/integration/test_integration.py @@ -532,19 +532,19 @@ def test_area_management(client: TestClient, admin_access_token: str) -> None: { "code-oi": None, "enabled": True, - "group": None, + "group": "other 1", "id": "cluster 1", - "marginal-cost": None, - "market-bid-cost": None, - "min-down-time": None, - "min-stable-power": None, - "min-up-time": None, + "marginal-cost": 0.0, + "market-bid-cost": 0.0, + "min-down-time": 1, + "min-stable-power": 0.0, + "min-up-time": 1, "name": "cluster 1", - "nominalcapacity": 0, - "spinning": None, - "spread-cost": None, + "nominalcapacity": 0.0, + "spinning": 0.0, + "spread-cost": 0.0, "type": None, - "unitcount": 0, + "unitcount": 1, } ], "type": "AREA", @@ -558,19 +558,19 @@ def test_area_management(client: TestClient, admin_access_token: str) -> None: { "code-oi": None, "enabled": True, - "group": None, + "group": "other 1", "id": "cluster 2", - "marginal-cost": None, - "market-bid-cost": None, - "min-down-time": None, - "min-stable-power": None, - "min-up-time": None, + "marginal-cost": 0.0, + "market-bid-cost": 0.0, + "min-down-time": 1, + "min-stable-power": 0.0, + "min-up-time": 1, "name": "cluster 2", "nominalcapacity": 2.5, - "spinning": None, - "spread-cost": None, + "spinning": 0.0, + "spread-cost": 0.0, "type": None, - "unitcount": 0, + "unitcount": 1, } ], "type": "AREA", @@ -1336,7 +1336,7 @@ def test_area_management(client: TestClient, admin_access_token: str) -> None: ) expected = { "enabled": False, - "group": "Other RES 1", # Default group used when not specified. + "group": "other res 1", # Default group used when not specified. "id": "cluster renewable 1", "name": "cluster renewable 1 renamed", "nominalCapacity": 3.0, @@ -1398,6 +1398,7 @@ def test_area_management(client: TestClient, admin_access_token: str) -> None: f"/v1/studies/{study_id}/areas/area 1/clusters/thermal/cluster 1/form", ) assert res.status_code == 200, res.json() + obj["group"] = obj["group"].lower() assert res.json() == {"id": "cluster 1", **obj} # Links @@ -1470,19 +1471,19 @@ def test_area_management(client: TestClient, admin_access_token: str) -> None: { "code-oi": None, "enabled": True, - "group": None, + "group": "other 1", "id": "cluster 2", - "marginal-cost": None, - "market-bid-cost": None, - "min-down-time": None, - "min-stable-power": None, - "min-up-time": None, + "marginal-cost": 0.0, + "market-bid-cost": 0.0, + "min-down-time": 1, + "min-stable-power": 0.0, + "min-up-time": 1, "name": "cluster 2", "nominalcapacity": 2.5, - "spinning": None, - "spread-cost": None, + "spinning": 0.0, + "spread-cost": 0.0, "type": None, - "unitcount": 0, + "unitcount": 1, } ], "type": "AREA", diff --git a/tests/integration/test_integration_token_end_to_end.py b/tests/integration/test_integration_token_end_to_end.py index 6bfefe0d3b..01b92788d4 100644 --- a/tests/integration/test_integration_token_end_to_end.py +++ b/tests/integration/test_integration_token_end_to_end.py @@ -96,7 +96,7 @@ def test_nominal_case_of_an_api_user(client: TestClient, admin_access_token: str "cluster_name": "mycluster", "parameters": { "group": "Gas", - "unitCount": 1, + "unitcount": 1, "marginal_cost": 50, }, }, @@ -116,15 +116,15 @@ def test_nominal_case_of_an_api_user(client: TestClient, admin_access_token: str "parameters": { "group": "Gas", "marginal-cost": 98, - "unitCount": 1, - "nominalCapacity": 250, - "minStablePower": 0.0, - "minUpTime": 2, - "minDownTime": 2, + "unitcount": 1, + "nominalcapacity": 250, + "min-stable-power": 0.0, + "min-up-time": 2, + "min-down-time": 2, "spinning": 5, - "spreadCost": 0.0, - "startupCost": 2500, - "marketBidCost": 85, + "spread-cost": 0.0, + "startup-cost": 2500, + "market-bid-cost": 85, "co2": 0.3, }, }, diff --git a/tests/integration/variant_blueprint/test_renewable_cluster.py b/tests/integration/variant_blueprint/test_renewable_cluster.py index 18e6af0c56..74fc2c18f7 100644 --- a/tests/integration/variant_blueprint/test_renewable_cluster.py +++ b/tests/integration/variant_blueprint/test_renewable_cluster.py @@ -17,7 +17,7 @@ from starlette.testclient import TestClient from antarest.core.tasks.model import TaskStatus -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from tests.integration.utils import wait_task_completion @@ -76,7 +76,7 @@ def test_lifecycle( area_fr_id = transform_name_to_id("FR") cluster_fr1 = "Oleron" - cluster_fr1_id = transform_name_to_id(cluster_fr1, lower=False) + cluster_fr1_id = transform_name_to_id(cluster_fr1) args = { "area_id": area_fr_id, "cluster_name": cluster_fr1_id, @@ -95,7 +95,7 @@ def test_lifecycle( res.raise_for_status() cluster_fr2 = "La_Rochelle" - cluster_fr2_id = transform_name_to_id(cluster_fr2, lower=False) + cluster_fr2_id = transform_name_to_id(cluster_fr2) args = { "area_id": area_fr_id, "cluster_name": cluster_fr2_id, @@ -124,9 +124,9 @@ def test_lifecycle( properties = res.json() expected = { "enabled": True, - "group": "Wind Offshore", - "id": "Oleron", - "name": cluster_fr1, + "group": "wind offshore", + "id": "oleron", + "name": cluster_fr1.lower(), "nominalCapacity": 2500.0, "tsInterpretation": "power-generation", "unitCount": 1, @@ -141,9 +141,9 @@ def test_lifecycle( properties = res.json() expected = { "enabled": False, - "group": "Solar PV", - "id": "La_Rochelle", - "name": cluster_fr2, + "group": "solar pv", + "id": "la_rochelle", + "name": cluster_fr2.lower(), "nominalCapacity": 3500.0, "tsInterpretation": "power-generation", "unitCount": 4, @@ -201,10 +201,10 @@ def test_lifecycle( area_it_id = transform_name_to_id("IT") cluster_it1 = "Oléron" - cluster_it1_id = transform_name_to_id(cluster_it1, lower=False) + cluster_it1_id = transform_name_to_id(cluster_it1) args = { "area_id": area_it_id, - "cluster_name": cluster_it1_id, + "cluster_name": cluster_it1, "parameters": { "group": "wind offshore", "name": cluster_it1, @@ -228,9 +228,9 @@ def test_lifecycle( properties = res.json() expected = { "enabled": True, - "group": "Wind Offshore", - "id": "Ol ron", - "name": cluster_it1, + "group": "wind offshore", + "id": "ol ron", + "name": cluster_it1.lower(), "nominalCapacity": 1000.0, "tsInterpretation": "production-factor", "unitCount": 1, @@ -274,9 +274,11 @@ def test_lifecycle( "list": { cluster_fr1_id: { "group": "wind offshore", - "name": cluster_fr1, + "name": cluster_fr1.lower(), "nominalcapacity": 2500, "ts-interpretation": "power-generation", + "unitcount": 1, + "enabled": True, }, } }, @@ -284,10 +286,11 @@ def test_lifecycle( "list": { cluster_it1_id: { "group": "wind offshore", - "name": cluster_it1, + "name": cluster_it1.lower(), "nominalcapacity": 1000, "ts-interpretation": "production-factor", "unitcount": 1, + "enabled": True, } } }, @@ -317,10 +320,11 @@ def test_lifecycle( "list": { cluster_it1_id: { "group": "wind offshore", - "name": cluster_it1, + "name": cluster_it1.lower(), "nominalcapacity": 1000, "ts-interpretation": "production-factor", "unitcount": 1, + "enabled": True, } } }, diff --git a/tests/integration/variant_blueprint/test_st_storage.py b/tests/integration/variant_blueprint/test_st_storage.py index b4092f0acb..7d48aa2c94 100644 --- a/tests/integration/variant_blueprint/test_st_storage.py +++ b/tests/integration/variant_blueprint/test_st_storage.py @@ -18,7 +18,7 @@ from starlette.testclient import TestClient from antarest.core.tasks.model import TaskStatus -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from tests.integration.utils import wait_task_completion diff --git a/tests/integration/variant_blueprint/test_thermal_cluster.py b/tests/integration/variant_blueprint/test_thermal_cluster.py index 7e5ce92677..ef20d9d3ab 100644 --- a/tests/integration/variant_blueprint/test_thermal_cluster.py +++ b/tests/integration/variant_blueprint/test_thermal_cluster.py @@ -20,7 +20,7 @@ from starlette.testclient import TestClient from antarest.core.tasks.model import TaskDTO, TaskStatus -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id def _create_thermal_params(cluster_name: str) -> t.Mapping[str, t.Any]: @@ -97,7 +97,7 @@ def test_cascade_update( "action": "create_cluster", "args": { "area_id": area_id, - "cluster_name": transform_name_to_id(cluster_name, lower=False), + "cluster_name": transform_name_to_id(cluster_name), "parameters": _create_thermal_params(cluster_name), "prepro": np.random.rand(8760, 6).tolist(), "modulation": np.random.rand(8760, 4).tolist(), diff --git a/tests/storage/business/test_study_version_upgrader.py b/tests/storage/business/test_study_version_upgrader.py index 39ce1da653..4d248539f2 100644 --- a/tests/storage/business/test_study_version_upgrader.py +++ b/tests/storage/business/test_study_version_upgrader.py @@ -25,7 +25,7 @@ from antarest.core.exceptions import UnsupportedStudyVersion from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.root.settings.generaldata import DUPLICATE_KEYS from antarest.study.storage.study_upgrader import ( InvalidUpgrade, diff --git a/tests/storage/repository/filesystem/config/test_utils.py b/tests/storage/repository/filesystem/config/test_utils.py index cf470df38f..de31252956 100644 --- a/tests/storage/repository/filesystem/config/test_utils.py +++ b/tests/storage/repository/filesystem/config/test_utils.py @@ -14,7 +14,7 @@ import pytest -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id VALID_CHARS = "azAZ09_-(),&" @@ -29,8 +29,7 @@ def test_transform_name_to_id__nominal_case(name, expected): @pytest.mark.parametrize("name", VALID_CHARS) def test_transform_name_to_id__valid_chars(name): - assert transform_name_to_id(name, lower=True) == name.lower() - assert transform_name_to_id(name, lower=False) == name + assert transform_name_to_id(name) == name.lower() @pytest.mark.parametrize("name", sorted(set(string.punctuation) - set(VALID_CHARS))) diff --git a/tests/study/business/areas/test_st_storage_management.py b/tests/study/business/areas/test_st_storage_management.py index 56a42d88a0..7826113112 100644 --- a/tests/study/business/areas/test_st_storage_management.py +++ b/tests/study/business/areas/test_st_storage_management.py @@ -158,7 +158,7 @@ def test_get_all_storages__nominal_case( "id": "storage1", "enabled": None, "group": STStorageGroup.BATTERY, - "name": "Storage1", + "name": "storage1", "injectionNominalCapacity": 1500.0, "withdrawalNominalCapacity": 1500.0, "reservoirCapacity": 20000.0, @@ -170,7 +170,7 @@ def test_get_all_storages__nominal_case( "id": "storage2", "enabled": None, "group": STStorageGroup.PSP_CLOSED, - "name": "Storage2", + "name": "storage2", "injectionNominalCapacity": 2000.0, "withdrawalNominalCapacity": 1500.0, "reservoirCapacity": 20000.0, @@ -182,7 +182,7 @@ def test_get_all_storages__nominal_case( "id": "storage3", "enabled": None, "group": STStorageGroup.PSP_CLOSED, - "name": "Storage3", + "name": "storage3", "injectionNominalCapacity": 1500.0, "withdrawalNominalCapacity": 1500.0, "reservoirCapacity": 21000.0, @@ -264,7 +264,7 @@ def test_get_st_storages__nominal_case( "initialLevel": 0.5, "initialLevelOptim": True, "injectionNominalCapacity": 1500.0, - "name": "Storage1", + "name": "storage1", "reservoirCapacity": 20000.0, "withdrawalNominalCapacity": 1500.0, "enabled": None, @@ -276,7 +276,7 @@ def test_get_st_storages__nominal_case( "initialLevel": 0.5, "initialLevelOptim": False, "injectionNominalCapacity": 2000.0, - "name": "Storage2", + "name": "storage2", "reservoirCapacity": 20000.0, "withdrawalNominalCapacity": 1500.0, "enabled": None, @@ -288,7 +288,7 @@ def test_get_st_storages__nominal_case( "initialLevel": 1, "initialLevelOptim": False, "injectionNominalCapacity": 1500.0, - "name": "Storage3", + "name": "storage3", "reservoirCapacity": 21000.0, "withdrawalNominalCapacity": 1500.0, "enabled": None, @@ -375,7 +375,7 @@ def test_get_st_storage__nominal_case( "initialLevel": 0.5, "initialLevelOptim": True, "injectionNominalCapacity": 1500.0, - "name": "Storage1", + "name": "storage1", "reservoirCapacity": 20000.0, "withdrawalNominalCapacity": 1500.0, "enabled": None, diff --git a/tests/study/business/areas/test_thermal_management.py b/tests/study/business/areas/test_thermal_management.py index 6bb2e34d7e..a0a053599d 100644 --- a/tests/study/business/areas/test_thermal_management.py +++ b/tests/study/business/areas/test_thermal_management.py @@ -373,7 +373,7 @@ def test_create_cluster__study_legacy( "fixedCost": 0.0, "genTs": LocalTSGenerationBehavior.USE_GLOBAL, "group": ThermalClusterGroup.NUCLEAR, - "id": "New Cluster", + "id": "new cluster", "lawForced": LawOption.UNIFORM, "lawPlanned": LawOption.UNIFORM, "marginalCost": 0.0, @@ -382,7 +382,7 @@ def test_create_cluster__study_legacy( "minStablePower": 0.0, "minUpTime": 15, "mustRun": False, - "name": "New Cluster", + "name": "new cluster", "nh3": None, "nmvoc": None, "nominalCapacity": 1000.0, @@ -430,7 +430,7 @@ def test_update_cluster( expected = { "id": "2 avail and must 1", "group": ThermalClusterGroup.GAS, - "name": "New name", + "name": "new name", "enabled": False, "unitCount": 100, "nominalCapacity": 2000.0, diff --git a/tests/study/storage/rawstudy/test_raw_study_service.py b/tests/study/storage/rawstudy/test_raw_study_service.py index a138da1735..4a0f4ca5c2 100644 --- a/tests/study/storage/rawstudy/test_raw_study_service.py +++ b/tests/study/storage/rawstudy/test_raw_study_service.py @@ -25,7 +25,7 @@ from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import RawStudy, StudyAdditionalData from antarest.study.storage.patch_service import PatchService -from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import STStorageConfig, STStorageGroup +from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import STStorageGroup from antarest.study.storage.rawstudy.raw_study_service import RawStudyService from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants @@ -131,16 +131,15 @@ def test_export_study_flat( create_st_storage = CreateSTStorage( command_context=command_context, area_id="fr", - parameters=STStorageConfig( - id="", # will be calculated ;-) - name="Storage1", - group=STStorageGroup.BATTERY, - injection_nominal_capacity=1500, - withdrawal_nominal_capacity=1500, - reservoir_capacity=20000, - efficiency=0.94, - initial_level_optim=True, - ), + parameters={ + "name": "Storage1", + "group": STStorageGroup.BATTERY, + "injection_nominal_capacity": 1500, + "withdrawal_nominal_capacity": 1500, + "reservoir_capacity": 20000, + "efficiency": 0.94, + "initial_level_optim": True, + }, pmax_injection=pmax_injection.tolist(), inflows=inflows.tolist(), study_version=raw_study.version, diff --git a/tests/study/storage/variantstudy/test_snapshot_generator.py b/tests/study/storage/variantstudy/test_snapshot_generator.py index 70a05c391a..c2280d2b46 100644 --- a/tests/study/storage/variantstudy/test_snapshot_generator.py +++ b/tests/study/storage/variantstudy/test_snapshot_generator.py @@ -10,7 +10,6 @@ # # This file is part of the Antares project. -import configparser import datetime import json import logging @@ -33,6 +32,7 @@ from antarest.core.utils.fastapi_sqlalchemy import db from antarest.login.model import Group, Role, User from antarest.study.model import RawStudy, Study, StudyAdditionalData +from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.raw_study_service import RawStudyService from antarest.study.storage.variantstudy.model.dbmodel import CommandBlock, VariantStudy, VariantStudySnapshot from antarest.study.storage.variantstudy.model.model import CommandDTO @@ -920,18 +920,46 @@ def test_generate__nominal_case( assert snapshot_dir.exists() assert (snapshot_dir / "study.antares").exists() assert (snapshot_dir / "input/areas/list.txt").read_text().splitlines(keepends=False) == ["North", "South"] - config = configparser.RawConfigParser() - config.read(snapshot_dir / "input/links/north/properties.ini") - assert config.sections() == ["south"] - assert config["south"], "The 'south' section must exist in the 'properties.ini' file." - config = configparser.RawConfigParser() - config.read(snapshot_dir / "input/thermal/clusters/south/list.ini") - assert config.sections() == ["gas_cluster"] - assert config["gas_cluster"] == { # type: ignore - "group": "Gas", - "unitcount": "1", - "nominalcapacity": "500", + reader = IniReader() + properties = reader.read(snapshot_dir / "input/links/north/properties.ini") + assert list(properties.keys()) == ["south"] + reader = IniReader() + cluster_props = reader.read(snapshot_dir / "input/thermal/clusters/south/list.ini") + assert list(cluster_props.keys()) == ["gas_cluster"] + assert cluster_props["gas_cluster"] == { + "co2": 0.0, + "enabled": True, + "fixed-cost": 0.0, + "gen-ts": "use global", + "group": "gas", + "law.forced": "uniform", + "law.planned": "uniform", + "marginal-cost": 0.0, + "market-bid-cost": 0.0, + "min-down-time": 1, + "min-stable-power": 0.0, + "min-up-time": 1, + "must-run": False, "name": "gas_cluster", + "nh3": 0.0, + "nmvoc": 0.0, + "nominalcapacity": 500.0, + "nox": 0.0, + "op1": 0.0, + "op2": 0.0, + "op3": 0.0, + "op4": 0.0, + "op5": 0.0, + "pm10": 0.0, + "pm2_5": 0.0, + "pm5": 0.0, + "so2": 0.0, + "spinning": 0.0, + "spread-cost": 0.0, + "startup-cost": 0.0, + "unitcount": 1, + "volatility.forced": 0.0, + "volatility.planned": 0.0, } # Check: the matrices are not denormalized (we should have links to matrices). diff --git a/tests/study/storage/variantstudy/test_variant_study_service.py b/tests/study/storage/variantstudy/test_variant_study_service.py index dc6b4a47d3..ba0cb93277 100644 --- a/tests/study/storage/variantstudy/test_variant_study_service.py +++ b/tests/study/storage/variantstudy/test_variant_study_service.py @@ -12,7 +12,6 @@ import datetime import re -import typing from pathlib import Path from unittest.mock import Mock @@ -30,7 +29,7 @@ from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import RawStudy, StudyAdditionalData from antarest.study.storage.patch_service import PatchService -from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import STStorageConfig, STStorageGroup +from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import STStorageGroup from antarest.study.storage.rawstudy.raw_study_service import RawStudyService from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants @@ -197,16 +196,15 @@ def test_generate_task( create_st_storage = CreateSTStorage( command_context=command_context, area_id="fr", - parameters=STStorageConfig( - id="", # will be calculated ;-) - name="Storage1", - group=STStorageGroup.BATTERY, - injection_nominal_capacity=1500, - withdrawal_nominal_capacity=1500, - reservoir_capacity=20000, - efficiency=0.94, - initial_level_optim=True, - ), + parameters={ + "name": "Storage1", + "group": STStorageGroup.BATTERY, + "injection_nominal_capacity": 1500, + "withdrawal_nominal_capacity": 1500, + "reservoir_capacity": 20000, + "efficiency": 0.94, + "initial_level_optim": True, + }, pmax_injection=pmax_injection.tolist(), inflows=inflows.tolist(), study_version=study_version, diff --git a/tests/variantstudy/model/command/test_create_area.py b/tests/variantstudy/model/command/test_create_area.py index 87f8d1044c..08b3e7c451 100644 --- a/tests/variantstudy/model/command/test_create_area.py +++ b/tests/variantstudy/model/command/test_create_area.py @@ -18,7 +18,8 @@ from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea diff --git a/tests/variantstudy/model/command/test_create_cluster.py b/tests/variantstudy/model/command/test_create_cluster.py index 77c4d10f90..b6a03874f5 100644 --- a/tests/variantstudy/model/command/test_create_cluster.py +++ b/tests/variantstudy/model/command/test_create_cluster.py @@ -19,7 +19,8 @@ from pydantic import ValidationError from antarest.study.model import STUDY_VERSION_8_8 -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.thermal import Thermal870Properties from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.common import CommandName @@ -57,13 +58,15 @@ def test_init(self, command_context: CommandContext): prepro_id = command_context.matrix_service.create(prepro) modulation_id = command_context.matrix_service.create(modulation) assert cl.area_id == "foo" - assert cl.cluster_name == "Cluster1" - assert cl.parameters == {"group": "Nuclear", "nominalcapacity": 2400, "unitcount": 2} + assert cl.cluster_name == "cluster1" + assert cl.parameters.group == "nuclear" + assert cl.parameters.nominal_capacity == 2400 + assert cl.parameters.unit_count == 2 assert cl.prepro == f"matrix://{prepro_id}" assert cl.modulation == f"matrix://{modulation_id}" def test_validate_cluster_name(self, command_context: CommandContext): - with pytest.raises(ValidationError, match="cluster_name"): + with pytest.raises(ValidationError, match="name"): CreateCluster( area_id="fr", cluster_name="%", @@ -95,16 +98,16 @@ def test_validate_modulation(self, command_context: CommandContext): def test_apply(self, empty_study: FileStudy, command_context: CommandContext): study_path = empty_study.config.study_path area_name = "DE" - area_id = transform_name_to_id(area_name, lower=True) + area_id = transform_name_to_id(area_name) cluster_name = "Cluster-1" - cluster_id = transform_name_to_id(cluster_name, lower=True) + cluster_id = transform_name_to_id(cluster_name) CreateArea(area_name=area_name, command_context=command_context, study_version=STUDY_VERSION_8_8).apply( empty_study ) parameters = { - "group": "Other", + "group": "nuclear", "unitcount": "1", "nominalcapacity": "1000000", "marginal-cost": "30", @@ -113,6 +116,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): prepro = GEN.random((365, 6)).tolist() modulation = GEN.random((8760, 4)).tolist() + command = CreateCluster( area_id=area_id, cluster_name=cluster_name, @@ -133,12 +137,13 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): clusters = configparser.ConfigParser() clusters.read(study_path / "input" / "thermal" / "clusters" / area_id / "list.ini") - assert str(clusters[cluster_name]["name"]) == cluster_name - assert str(clusters[cluster_name]["group"]) == parameters["group"] - assert int(clusters[cluster_name]["unitcount"]) == int(parameters["unitcount"]) - assert float(clusters[cluster_name]["nominalcapacity"]) == float(parameters["nominalcapacity"]) - assert float(clusters[cluster_name]["marginal-cost"]) == float(parameters["marginal-cost"]) - assert float(clusters[cluster_name]["market-bid-cost"]) == float(parameters["market-bid-cost"]) + section = clusters[cluster_name.lower()] + assert str(section["name"]) == cluster_name.lower() + assert str(section["group"]) == parameters["group"] + assert int(section["unitcount"]) == int(parameters["unitcount"]) + assert float(section["nominalcapacity"]) == float(parameters["nominalcapacity"]) + assert float(section["marginal-cost"]) == float(parameters["marginal-cost"]) + assert float(section["market-bid-cost"]) == float(parameters["market-bid-cost"]) assert (study_path / "input" / "thermal" / "prepro" / area_id / cluster_id / "data.txt.link").exists() assert (study_path / "input" / "thermal" / "prepro" / area_id / cluster_id / "modulation.txt.link").exists() @@ -178,10 +183,11 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): def test_to_dto(self, command_context: CommandContext): prepro = GEN.random((365, 6)).tolist() modulation = GEN.random((8760, 4)).tolist() + parameters = {"group": "Nuclear", "unitcount": 2, "nominalcapacity": 2400} command = CreateCluster( area_id="foo", cluster_name="Cluster1", - parameters={"group": "Nuclear", "unitcount": 2, "nominalcapacity": 2400}, + parameters=parameters, command_context=command_context, prepro=prepro, modulation=modulation, @@ -194,8 +200,10 @@ def test_to_dto(self, command_context: CommandContext): "action": "create_cluster", "args": { "area_id": "foo", - "cluster_name": "Cluster1", - "parameters": {"group": "Nuclear", "nominalcapacity": 2400, "unitcount": 2}, + "cluster_name": "cluster1", + "parameters": Thermal870Properties.model_validate({"name": "cluster1", **parameters}).model_dump( + mode="json", by_alias=True + ), "prepro": prepro_id, "modulation": modulation_id, }, @@ -309,7 +317,9 @@ def test_create_diff(command_context: CommandContext): ), UpdateConfig( target="input/thermal/clusters/foo/list/foo", - data={"nominalcapacity": "2400"}, + data=Thermal870Properties.model_validate({"name": "foo", "nominalcapacity": "2400"}).model_dump( + mode="json", by_alias=True + ), command_context=command_context, study_version=STUDY_VERSION_8_8, ), diff --git a/tests/variantstudy/model/command/test_create_link.py b/tests/variantstudy/model/command/test_create_link.py index bd4bac60ef..611c2918e1 100644 --- a/tests/variantstudy/model/command/test_create_link.py +++ b/tests/variantstudy/model/command/test_create_link.py @@ -21,7 +21,7 @@ from antarest.study.business.link_management import LinkInternal from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea diff --git a/tests/variantstudy/model/command/test_create_renewables_cluster.py b/tests/variantstudy/model/command/test_create_renewables_cluster.py index c23cb83f4f..aa4eeff60e 100644 --- a/tests/variantstudy/model/command/test_create_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_create_renewables_cluster.py @@ -18,7 +18,9 @@ from pydantic import ValidationError from antarest.study.model import STUDY_VERSION_8_1, STUDY_VERSION_8_8 -from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling +from antarest.study.storage.rawstudy.model.filesystem.config.renewable import RenewableProperties from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.common import CommandName @@ -32,10 +34,11 @@ class TestCreateRenewablesCluster: # noinspection SpellCheckingInspection def test_init(self, command_context: CommandContext) -> None: + parameters = {"group": "Solar Thermal", "unitcount": 2, "nominalcapacity": 2400} cl = CreateRenewablesCluster( area_id="foo", cluster_name="Cluster1", - parameters={"group": "Solar Thermal", "unitcount": 2, "nominalcapacity": 2400}, + parameters=parameters, command_context=command_context, study_version=STUDY_VERSION_8_8, ) @@ -47,11 +50,13 @@ def test_init(self, command_context: CommandContext) -> None: # Check the command data assert cl.area_id == "foo" - assert cl.cluster_name == "Cluster1" - assert cl.parameters == {"group": "Solar Thermal", "nominalcapacity": 2400, "unitcount": 2} + assert cl.cluster_name == "cluster1" + assert cl.parameters.model_dump(by_alias=True) == RenewableProperties.model_validate( + {"name": "cluster1", **parameters} + ).model_dump(by_alias=True) def test_validate_cluster_name(self, command_context: CommandContext) -> None: - with pytest.raises(ValidationError, match="cluster_name"): + with pytest.raises(ValidationError, match="name"): CreateRenewablesCluster( area_id="fr", cluster_name="%", @@ -66,7 +71,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> empty_study.config.version = study_version study_path = empty_study.config.study_path area_name = "DE" - area_id = transform_name_to_id(area_name, lower=True) + area_id = transform_name_to_id(area_name) cluster_name = "Cluster-1" CreateArea(area_name=area_name, command_context=command_context, study_version=study_version).apply(empty_study) @@ -94,8 +99,8 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> clusters = configparser.ConfigParser() clusters.read(study_path / "input" / "renewables" / "clusters" / area_id / "list.ini") - assert str(clusters[cluster_name]["name"]) == cluster_name - assert str(clusters[cluster_name]["ts-interpretation"]) == parameters["ts-interpretation"] + assert str(clusters[cluster_name.lower()]["name"]) == cluster_name.lower() + assert str(clusters[cluster_name.lower()]["ts-interpretation"]) == parameters["ts-interpretation"] output = CreateRenewablesCluster( area_id=area_id, @@ -137,10 +142,11 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> # noinspection SpellCheckingInspection def test_to_dto(self, command_context: CommandContext) -> None: + parameters = {"group": "Solar Thermal", "unitcount": 2, "nominalcapacity": 2400} command = CreateRenewablesCluster( area_id="foo", cluster_name="Cluster1", - parameters={"group": "Solar Thermal", "unitcount": 2, "nominalcapacity": 2400}, + parameters=parameters, command_context=command_context, study_version=STUDY_VERSION_8_8, ) @@ -149,8 +155,10 @@ def test_to_dto(self, command_context: CommandContext) -> None: "action": "create_renewables_cluster", # "renewables" with a final "s". "args": { "area_id": "foo", - "cluster_name": "Cluster1", - "parameters": {"group": "Solar Thermal", "nominalcapacity": 2400, "unitcount": 2}, + "cluster_name": "cluster1", + "parameters": RenewableProperties.model_validate({"name": "cluster1", **parameters}).model_dump( + by_alias=True + ), }, "id": None, "version": 1, @@ -221,17 +229,20 @@ def test_create_diff(command_context: CommandContext) -> None: command_context=command_context, study_version=STUDY_VERSION_8_8, ) + parameters = {"nominal_capacity": 1.2} other_match = CreateRenewablesCluster( area_id="foo", cluster_name="foo", - parameters={"a": "b"}, + parameters=parameters, command_context=command_context, study_version=STUDY_VERSION_8_8, ) assert base.create_diff(other_match) == [ UpdateConfig( target="input/renewables/clusters/foo/list/foo", - data={"a": "b"}, + data=RenewableProperties.model_validate({"name": "foo", **parameters}).model_dump( + mode="json", by_alias=True + ), command_context=command_context, study_version=STUDY_VERSION_8_8, ), diff --git a/tests/variantstudy/model/command/test_create_st_storage.py b/tests/variantstudy/model/command/test_create_st_storage.py index 81093faec8..a0b13410f2 100644 --- a/tests/variantstudy/model/command/test_create_st_storage.py +++ b/tests/variantstudy/model/command/test_create_st_storage.py @@ -9,16 +9,19 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. - +import copy import re import numpy as np import pytest from pydantic import ValidationError -from antarest.study.model import STUDY_VERSION_8_8 -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id -from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import STStorageConfig +from antarest.study.model import STUDY_VERSION_8_6, STUDY_VERSION_8_8 +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import ( + STStorage880Properties, + STStorageProperties, +) from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.study_upgrader import StudyUpgrader from antarest.study.storage.variantstudy.business.utils import strip_matrix_protocol @@ -83,7 +86,7 @@ def test_init(self, command_context: CommandContext): cmd = CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, pmax_injection=pmax_injection.tolist(), # type: ignore inflows=inflows.tolist(), # type: ignore study_version=STUDY_VERSION_8_8, @@ -96,7 +99,7 @@ def test_init(self, command_context: CommandContext): assert cmd.command_context == command_context assert cmd.area_id == "area_fr" expected_parameters = {k: str(v) for k, v in PARAMETERS.items()} - assert cmd.parameters == STStorageConfig(**expected_parameters) + assert cmd.parameters == STStorage880Properties(**expected_parameters) # check the matrices links @@ -114,23 +117,15 @@ def test_init__invalid_storage_name(self, recent_study: FileStudy, command_conte CreateSTStorage( command_context=command_context, area_id="dummy", - parameters=STStorageConfig(**parameters), + parameters=parameters, study_version=STUDY_VERSION_8_8, ) # We get 2 errors because the `storage_name` is duplicated in the `parameters`: assert ctx.value.error_count() == 1 raised_error = ctx.value.errors()[0] - assert raised_error["type"] == "value_error" - assert raised_error["msg"] == "Value error, Invalid name '?%$$'." - assert raised_error["input"] == { - "efficiency": 0.94, - "group": "Battery", - "initialleveloptim": True, - "injectionnominalcapacity": 1500, - "name": "?%$$", - "reservoircapacity": 20000, - "withdrawalnominalcapacity": 1500, - } + assert raised_error["type"] == "string_pattern_mismatch" + assert raised_error["msg"] == "String should match pattern '[a-zA-Z0-9_(),& -]+'" + assert raised_error["input"] == "?%$$" def test_init__invalid_matrix_values(self, command_context: CommandContext): array = GEN.random((8760, 1)) @@ -139,7 +134,7 @@ def test_init__invalid_matrix_values(self, command_context: CommandContext): CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, pmax_injection=array.tolist(), # type: ignore study_version=STUDY_VERSION_8_8, ) @@ -156,7 +151,7 @@ def test_init__invalid_matrix_shape(self, command_context: CommandContext): CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, pmax_injection=array.tolist(), # type: ignore study_version=STUDY_VERSION_8_8, ) @@ -173,7 +168,7 @@ def test_init__invalid_nan_value(self, command_context: CommandContext): CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, pmax_injection=array.tolist(), # type: ignore study_version=STUDY_VERSION_8_8, ) @@ -188,7 +183,7 @@ def test_init__invalid_matrix_type(self, command_context: CommandContext): CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, pmax_injection=[1, 2, 3], study_version=STUDY_VERSION_8_8, ) @@ -198,24 +193,14 @@ def test_init__invalid_matrix_type(self, command_context: CommandContext): assert raised_error["msg"] == "Value error, Invalid matrix shape (3,), expected (8760, 1)" assert "pmax_injection" in raised_error["input"] - def test_apply_config__invalid_version(self, empty_study: FileStudy, command_context: CommandContext): - # Given an old study in version 720 - # When we apply the config to add a new ST Storage - create_st_storage = CreateSTStorage( - command_context=command_context, - area_id="foo", - parameters=STStorageConfig(**PARAMETERS), - study_version=empty_study.config.version, - ) - command_output = create_st_storage.apply_config(empty_study.config) - - # Then, the output should be an error - assert command_output.status is False - assert re.search( - rf"Invalid.*version {empty_study.config.version}", - command_output.message, - flags=re.IGNORECASE, - ) + def test_instantiate_with_invalid_version(self, empty_study: FileStudy, command_context: CommandContext): + with pytest.raises(ValidationError): + CreateSTStorage( + command_context=command_context, + area_id="foo", + parameters=PARAMETERS, + study_version=empty_study.config.version, + ) def test_apply_config__missing_area(self, recent_study: FileStudy, command_context: CommandContext): # Given a study without "unknown area" area @@ -223,7 +208,7 @@ def test_apply_config__missing_area(self, recent_study: FileStudy, command_conte create_st_storage = CreateSTStorage( command_context=command_context, area_id="unknown area", # bad ID - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, study_version=recent_study.config.version, ) command_output = create_st_storage.apply_config(recent_study.config) @@ -247,7 +232,7 @@ def test_apply_config__duplicate_storage(self, recent_study: FileStudy, command_ create_st_storage = CreateSTStorage( command_context=command_context, area_id=transform_name_to_id(create_area.area_name), - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, study_version=recent_study.config.version, ) command_output = create_st_storage.apply_config(recent_study.config) @@ -258,7 +243,7 @@ def test_apply_config__duplicate_storage(self, recent_study: FileStudy, command_ create_st_storage = CreateSTStorage( command_context=command_context, area_id=transform_name_to_id(create_area.area_name), - parameters=STStorageConfig(**parameters), + parameters=parameters, study_version=recent_study.config.version, ) command_output = create_st_storage.apply_config(recent_study.config) @@ -282,7 +267,7 @@ def test_apply_config__nominal_case(self, recent_study: FileStudy, command_conte create_st_storage = CreateSTStorage( command_context=command_context, area_id=transform_name_to_id(create_area.area_name), - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, study_version=recent_study.config.version, ) command_output = create_st_storage.apply_config(recent_study.config) @@ -309,7 +294,7 @@ def test_apply__nominal_case(self, recent_study: FileStudy, command_context: Com cmd = CreateSTStorage( command_context=command_context, area_id=transform_name_to_id(create_area.area_name), - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, pmax_injection=pmax_injection.tolist(), # type: ignore inflows=inflows.tolist(), # type: ignore study_version=recent_study.config.version, @@ -322,11 +307,11 @@ def test_apply__nominal_case(self, recent_study: FileStudy, command_context: Com expected = { "storage1": { "efficiency": 0.94, - "group": "Battery", + "group": "battery", "initiallevel": 0.5, "initialleveloptim": True, "injectionnominalcapacity": 1500, - "name": "Storage1", + "name": "storage1", "reservoircapacity": 20000, "withdrawalnominalcapacity": 1500, } @@ -350,29 +335,12 @@ def test_apply__nominal_case(self, recent_study: FileStudy, command_context: Com } assert config == expected - def test_apply__invalid_apply_config(self, empty_study: FileStudy, command_context: CommandContext): - # First, prepare a new Area - create_area = CreateArea( - area_name="Area FR", command_context=command_context, study_version=empty_study.config.version - ) - create_area.apply(empty_study) - - # Then, apply the command to create a new ST Storage - cmd = CreateSTStorage( - command_context=command_context, - area_id=transform_name_to_id(create_area.area_name), - parameters=STStorageConfig(**PARAMETERS), - study_version=empty_study.config.version, - ) - command_output = cmd.apply(empty_study) - assert not command_output.status # invalid study (too old) - # noinspection SpellCheckingInspection def test_to_dto(self, command_context: CommandContext): cmd = CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, study_version=STUDY_VERSION_8_8, ) @@ -381,6 +349,10 @@ def test_to_dto(self, command_context: CommandContext): expected_parameters = PARAMETERS.copy() # `initiallevel` = 0.5 (the default value) because `initialleveloptim` is True expected_parameters["initiallevel"] = 0.5 + expected_parameters["name"] = expected_parameters["name"].lower() + expected_parameters["group"] = expected_parameters["group"].lower() + # as we're using study version 8.8, we have the parameter `enabled` + expected_parameters["enabled"] = True constants = command_context.generator_matrix_constants assert actual == CommandDTO( @@ -401,7 +373,7 @@ def test_match_signature(self, command_context: CommandContext): cmd = CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, study_version=STUDY_VERSION_8_8, ) assert cmd.match_signature() == "create_st_storage%area_fr%storage1" @@ -417,16 +389,16 @@ def test_match( cmd1 = CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), - study_version=STUDY_VERSION_8_8, + parameters=PARAMETERS, + study_version=STUDY_VERSION_8_6, ) cmd2 = CreateSTStorage( command_context=command_context, area_id=area_id, - parameters=STStorageConfig(**parameters), - study_version=STUDY_VERSION_8_8, + parameters=parameters, + study_version=STUDY_VERSION_8_6, ) - light_equal = area_id == cmd1.area_id and parameters["name"] == cmd1.storage_name + light_equal = area_id == cmd1.area_id and parameters["name"].lower() == cmd1.storage_name assert cmd1.match(cmd2, equal=False) == light_equal deep_equal = area_id == cmd1.area_id and parameters == PARAMETERS assert cmd1.match(cmd2, equal=True) == deep_equal @@ -435,7 +407,7 @@ def test_match__unknown_type(self, command_context: CommandContext): cmd1 = CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, study_version=STUDY_VERSION_8_8, ) # Always `False` when compared to another object type @@ -446,38 +418,41 @@ def test_create_diff__not_equals(self, command_context: CommandContext): cmd = CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), - study_version=STUDY_VERSION_8_8, + parameters=PARAMETERS, + study_version=STUDY_VERSION_8_6, ) upper_rule_curve = GEN.random((8760, 1)) inflows = GEN.uniform(0, 1000, size=(8760, 1)) other = CreateSTStorage( command_context=command_context, area_id=cmd.area_id, - parameters=STStorageConfig(**OTHER_PARAMETERS), + parameters=OTHER_PARAMETERS, upper_rule_curve=upper_rule_curve.tolist(), # type: ignore inflows=inflows.tolist(), # type: ignore - study_version=STUDY_VERSION_8_8, + study_version=STUDY_VERSION_8_6, ) actual = cmd.create_diff(other) + expected_params = copy.deepcopy(OTHER_PARAMETERS) + expected_params["name"] = expected_params["name"].lower() + expected_params["group"] = expected_params["group"].lower() expected = [ ReplaceMatrix( command_context=command_context, target="input/st-storage/series/area_fr/storage1/upper_rule_curve", matrix=strip_matrix_protocol(other.upper_rule_curve), - study_version=STUDY_VERSION_8_8, + study_version=STUDY_VERSION_8_6, ), ReplaceMatrix( command_context=command_context, target="input/st-storage/series/area_fr/storage1/inflows", matrix=strip_matrix_protocol(other.inflows), - study_version=STUDY_VERSION_8_8, + study_version=STUDY_VERSION_8_6, ), UpdateConfig( command_context=command_context, target="input/st-storage/clusters/area_fr/list/storage1", - data=OTHER_PARAMETERS, - study_version=STUDY_VERSION_8_8, + data=expected_params, + study_version=STUDY_VERSION_8_6, ), ] assert actual == expected @@ -486,7 +461,7 @@ def test_create_diff__equals(self, command_context: CommandContext): cmd = CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, study_version=STUDY_VERSION_8_8, ) actual = cmd.create_diff(cmd) @@ -496,7 +471,7 @@ def test_get_inner_matrices(self, command_context: CommandContext): cmd = CreateSTStorage( command_context=command_context, area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), + parameters=PARAMETERS, study_version=STUDY_VERSION_8_8, ) actual = cmd.get_inner_matrices() diff --git a/tests/variantstudy/model/command/test_manage_binding_constraints.py b/tests/variantstudy/model/command/test_manage_binding_constraints.py index 1f3cb55971..fe3c3c697e 100644 --- a/tests/variantstudy/model/command/test_manage_binding_constraints.py +++ b/tests/variantstudy/model/command/test_manage_binding_constraints.py @@ -21,7 +21,7 @@ BindingConstraintFrequency, BindingConstraintOperator, ) -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_extractor import CommandExtractor from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter diff --git a/tests/variantstudy/model/command/test_manage_district.py b/tests/variantstudy/model/command/test_manage_district.py index 532ec35c19..d67b2f8be7 100644 --- a/tests/variantstudy/model/command/test_manage_district.py +++ b/tests/variantstudy/model/command/test_manage_district.py @@ -13,8 +13,8 @@ from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.files import build -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea diff --git a/tests/variantstudy/model/command/test_remove_area.py b/tests/variantstudy/model/command/test_remove_area.py index b3de1c3342..7e016f88cd 100644 --- a/tests/variantstudy/model/command/test_remove_area.py +++ b/tests/variantstudy/model/command/test_remove_area.py @@ -18,7 +18,7 @@ BindingConstraintFrequency, BindingConstraintOperator, ) -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint diff --git a/tests/variantstudy/model/command/test_remove_cluster.py b/tests/variantstudy/model/command/test_remove_cluster.py index bf8db68e03..6cb8cf2be2 100644 --- a/tests/variantstudy/model/command/test_remove_cluster.py +++ b/tests/variantstudy/model/command/test_remove_cluster.py @@ -19,7 +19,7 @@ BindingConstraintFrequency, BindingConstraintOperator, ) -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint @@ -37,7 +37,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> area_name = "Area_name" area_id = transform_name_to_id(area_name) cluster_name = "Cluster Name" - cluster_id = transform_name_to_id(cluster_name, lower=False) + cluster_id = transform_name_to_id(cluster_name) study_version = empty_study.config.version @@ -57,10 +57,10 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> cluster_name=cluster_name, parameters={ "group": "group", - "unitcount": "unitcount", - "nominalcapacity": "nominalcapacity", - "marginal-cost": "marginal-cost", - "market-bid-cost": "market-bid-cost", + "unitcount": 4, + "nominalcapacity": 1.2, + "marginal-cost": 1.2, + "market-bid-cost": 1.2, }, command_context=command_context, prepro=[[0]], diff --git a/tests/variantstudy/model/command/test_remove_link.py b/tests/variantstudy/model/command/test_remove_link.py index 305d2f976f..4032c32384 100644 --- a/tests/variantstudy/model/command/test_remove_link.py +++ b/tests/variantstudy/model/command/test_remove_link.py @@ -22,8 +22,8 @@ from pydantic import ValidationError from antarest.study.model import STUDY_VERSION_8_8 +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.files import build -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.rawstudy.model.filesystem.root.filestudytree import FileStudyTree from antarest.study.storage.variantstudy.model.command.create_area import CreateArea @@ -98,7 +98,7 @@ def test_apply(self, tmpdir: Path, command_context: CommandContext, version: int study_version = empty_study.config.version # Create some areas - areas = {transform_name_to_id(area, lower=True): area for area in ["Area_X", "Area_Y", "Area_Z"]} + areas = {transform_name_to_id(area): area for area in ["Area_X", "Area_Y", "Area_Z"]} for area in areas.values(): output = CreateArea(area_name=area, command_context=command_context, study_version=study_version).apply( empty_study diff --git a/tests/variantstudy/model/command/test_remove_renewables_cluster.py b/tests/variantstudy/model/command/test_remove_renewables_cluster.py index a03308e5b3..26a4daade1 100644 --- a/tests/variantstudy/model/command/test_remove_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_remove_renewables_cluster.py @@ -13,7 +13,8 @@ from checksumdir import dirhash from antarest.study.model import STUDY_VERSION_8_8 -from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_renewables_cluster import CreateRenewablesCluster @@ -32,7 +33,7 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> area_name = "Area_name" area_id = transform_name_to_id(area_name) cluster_name = "Cluster Name" - cluster_id = transform_name_to_id(cluster_name, lower=False) + cluster_id = transform_name_to_id(cluster_name) output = CreateArea(area_name=area_name, command_context=command_context, study_version=study_version).apply( empty_study diff --git a/tests/variantstudy/model/command/test_remove_st_storage.py b/tests/variantstudy/model/command/test_remove_st_storage.py index e58db6db55..63b3d76c3b 100644 --- a/tests/variantstudy/model/command/test_remove_st_storage.py +++ b/tests/variantstudy/model/command/test_remove_st_storage.py @@ -16,7 +16,7 @@ from pydantic import ValidationError from antarest.study.model import STUDY_VERSION_8_8 -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.study_upgrader import StudyUpgrader from antarest.study.storage.variantstudy.model.command.common import CommandName @@ -72,7 +72,7 @@ def test_init(self, command_context: CommandContext): assert cmd.area_id == "area_fr" assert cmd.storage_id == "storage_1" - def test_init__invalid_storage_id(self, recent_study: FileStudy, command_context: CommandContext): + def test_init__invalid_storage_id(self, command_context: CommandContext): # When we apply the config for a new ST Storage with a bad name with pytest.raises(ValidationError) as ctx: RemoveSTStorage( @@ -81,16 +81,11 @@ def test_init__invalid_storage_id(self, recent_study: FileStudy, command_context storage_id="?%$$", # bad name study_version=STUDY_VERSION_8_8, ) - assert ctx.value.errors() == [ - { - "ctx": {"pattern": "[a-z0-9_(),& -]+"}, - "input": "?%$$", - "loc": ("storage_id",), - "msg": "String should match pattern '[a-z0-9_(),& -]+'", - "type": "string_pattern_mismatch", - "url": "https://errors.pydantic.dev/2.8/v/string_pattern_mismatch", - } - ] + assert len(ctx.value.errors()) == 1 + error = ctx.value.errors()[0] + assert error["type"] == "string_pattern_mismatch" + assert error["loc"] == ("storage_id",) + assert error["msg"] == "String should match pattern '[a-z0-9_(),& -]+'" def test_apply_config__invalid_version(self, empty_study: FileStudy, command_context: CommandContext): # Given an old study in version 720 diff --git a/tests/variantstudy/model/command/test_replace_matrix.py b/tests/variantstudy/model/command/test_replace_matrix.py index 95c21eac94..5e38031b40 100644 --- a/tests/variantstudy/model/command/test_replace_matrix.py +++ b/tests/variantstudy/model/command/test_replace_matrix.py @@ -15,7 +15,7 @@ import numpy as np from antarest.study.model import STUDY_VERSION_8_8 -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea diff --git a/tests/variantstudy/model/command/test_update_config.py b/tests/variantstudy/model/command/test_update_config.py index ceaff693c2..b4bd739b63 100644 --- a/tests/variantstudy/model/command/test_update_config.py +++ b/tests/variantstudy/model/command/test_update_config.py @@ -18,7 +18,7 @@ from antarest.core.exceptions import ChildNotFoundError from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea diff --git a/tests/variantstudy/test_command_factory.py b/tests/variantstudy/test_command_factory.py index e031d07e1e..7efdddd4e5 100644 --- a/tests/variantstudy/test_command_factory.py +++ b/tests/variantstudy/test_command_factory.py @@ -19,7 +19,7 @@ import pytest from antarest.matrixstore.service import MatrixService -from antarest.study.model import STUDY_VERSION_8_8 +from antarest.study.model import STUDY_VERSION_8_2, STUDY_VERSION_8_6, STUDY_VERSION_8_8 from antarest.study.storage.patch_service import PatchService from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants from antarest.study.storage.variantstudy.command_factory import CommandFactory @@ -156,26 +156,6 @@ study_version=STUDY_VERSION_8_8, ), CommandDTO(action=CommandName.REMOVE_BINDING_CONSTRAINT.value, args={"id": "id"}, study_version=STUDY_VERSION_8_8), - CommandDTO( - action=CommandName.REMOVE_BINDING_CONSTRAINT.value, args=[{"id": "id"}], study_version=STUDY_VERSION_8_8 - ), - CommandDTO( - action=CommandName.CREATE_THERMAL_CLUSTER.value, - args={ - "area_id": "area_name", - "cluster_name": "cluster_name", - "parameters": { - "group": "group", - "unitcount": "unitcount", - "nominalcapacity": "nominalcapacity", - "marginal-cost": "marginal-cost", - "market-bid-cost": "market-bid-cost", - }, - "prepro": "prepro", - "modulation": "modulation", - }, - study_version=STUDY_VERSION_8_8, - ), CommandDTO( action=CommandName.CREATE_THERMAL_CLUSTER.value, args=[ @@ -183,17 +163,33 @@ "area_id": "area_name", "cluster_name": "cluster_name", "parameters": { - "group": "group", - "unitcount": "unitcount", - "nominalcapacity": "nominalcapacity", - "marginal-cost": "marginal-cost", - "market-bid-cost": "market-bid-cost", + "co2": 0.0, + "enabled": True, + "fixed-cost": 0.0, + "gen-ts": "use global", + "group": "other 1", + "law.forced": "uniform", + "law.planned": "uniform", + "marginal-cost": 2.0, + "market-bid-cost": 2.0, + "min-down-time": 1, + "min-stable-power": 0.0, + "min-up-time": 1, + "must-run": False, + "name": "cluster_name", + "nominalcapacity": 2.0, + "spinning": 0.0, + "spread-cost": 0.0, + "startup-cost": 0.0, + "unitcount": 2, + "volatility.forced": 0.0, + "volatility.planned": 0.0, }, "prepro": "prepro", "modulation": "modulation", } ], - study_version=STUDY_VERSION_8_8, + study_version=STUDY_VERSION_8_2, ), CommandDTO( action=CommandName.REMOVE_THERMAL_CLUSTER.value, @@ -211,26 +207,16 @@ "area_id": "area_name", "cluster_name": "cluster_name", "parameters": { + "enabled": True, + "group": "other res 1", "name": "name", + "nominalcapacity": 0.0, "ts-interpretation": "power-generation", + "unitcount": 1, }, }, study_version=STUDY_VERSION_8_8, ), - CommandDTO( - action=CommandName.CREATE_RENEWABLES_CLUSTER.value, - args=[ - { - "area_id": "area_name", - "cluster_name": "cluster_name", - "parameters": { - "name": "name", - "ts-interpretation": "power-generation", - }, - } - ], - study_version=STUDY_VERSION_8_8, - ), CommandDTO( action=CommandName.REMOVE_RENEWABLES_CLUSTER.value, args={"area_id": "area_name", "cluster_id": "cluster_name"}, @@ -314,8 +300,8 @@ args={ "area_id": "area 1", "parameters": { - "name": "Storage 1", - "group": "Battery", + "name": "storage 1", + "group": "battery", "injectionnominalcapacity": 0, "withdrawalnominalcapacity": 0, "reservoircapacity": 0, @@ -329,7 +315,7 @@ "upper_rule_curve": "matrix://8ce614c8-c687-41af-8b24-df8a49cc52af", "inflows": "matrix://df9b25e1-e3f7-4a57-8182-0ff9791439e5", }, - study_version=STUDY_VERSION_8_8, + study_version=STUDY_VERSION_8_6, ), CommandDTO( action=CommandName.CREATE_ST_STORAGE.value, @@ -338,11 +324,11 @@ "area_id": "area 1", "parameters": { "efficiency": 1, - "group": "Battery", + "group": "battery", "initiallevel": 0, "initialleveloptim": False, "injectionnominalcapacity": 0, - "name": "Storage 1", + "name": "storage 1", "reservoircapacity": 0, "withdrawalnominalcapacity": 0, }, @@ -356,11 +342,11 @@ "area_id": "area 1", "parameters": { "efficiency": 0.94, - "group": "Battery", + "group": "battery", "initiallevel": 0, "initialleveloptim": False, "injectionnominalcapacity": 0, - "name": "Storage 2", + "name": "storage 2", "reservoircapacity": 0, "withdrawalnominalcapacity": 0, }, @@ -371,7 +357,7 @@ "inflows": "matrix://e8923768-9bdd-40c2-a6ea-2da2523be727", }, ], - study_version=STUDY_VERSION_8_8, + study_version=STUDY_VERSION_8_6, ), CommandDTO( action=CommandName.REMOVE_ST_STORAGE.value, From 93884de3810444e2e30ad57d4c1efb74dbfa1830 Mon Sep 17 00:00:00 2001 From: maugde <167874615+maugde@users.noreply.github.com> Date: Wed, 11 Dec 2024 10:10:23 +0100 Subject: [PATCH 14/86] feat(commands): add creation timestamp and user name inside commands (#2252) --- ...dd_user_name_and_updated_at_to_commands.py | 36 +++++ .../storage/variantstudy/model/dbmodel.py | 6 + .../study/storage/variantstudy/model/model.py | 14 +- .../variantstudy/variant_study_service.py | 39 +++++- .../test_hydro_inflow_structure.py | 3 +- .../study_data_blueprint/test_st_storage.py | 6 + .../test_integration_token_end_to_end.py | 16 +++ .../variantstudy/model/test_dbmodel.py | 7 +- .../test_variant_study_service.py | 2 +- .../model/command/test_create_cluster.py | 2 + .../command/test_create_renewables_cluster.py | 2 + .../variantstudy/model/test_variant_model.py | 131 +++++++++++++++++- 12 files changed, 251 insertions(+), 13 deletions(-) create mode 100644 alembic/versions/bae9c99bc42d_add_user_name_and_updated_at_to_commands.py diff --git a/alembic/versions/bae9c99bc42d_add_user_name_and_updated_at_to_commands.py b/alembic/versions/bae9c99bc42d_add_user_name_and_updated_at_to_commands.py new file mode 100644 index 0000000000..cd91acb203 --- /dev/null +++ b/alembic/versions/bae9c99bc42d_add_user_name_and_updated_at_to_commands.py @@ -0,0 +1,36 @@ +"""add_user_name_and_updated_at_to_commands + +Revision ID: bae9c99bc42d +Revises: 00a9ceb38842 +Create Date: 2024-11-29 09:13:04.292874 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'bae9c99bc42d' +down_revision = '00a9ceb38842' +branch_labels = None +depends_on = None + +USER_ID_FKEY = 'commandblock_user_id_fk' + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('commandblock', schema=None) as batch_op: + batch_op.add_column(sa.Column('user_id', sa.Integer(), nullable=True)) + batch_op.add_column(sa.Column('updated_at', sa.DateTime(), nullable=True)) + batch_op.create_foreign_key(USER_ID_FKEY, 'identities', ['user_id'], ['id'], ondelete='SET NULL') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('commandblock', schema=None) as batch_op: + batch_op.drop_constraint(USER_ID_FKEY, type_='foreignkey') + batch_op.drop_column('updated_at') + batch_op.drop_column('user_id') + # ### end Alembic commands ### diff --git a/antarest/study/storage/variantstudy/model/dbmodel.py b/antarest/study/storage/variantstudy/model/dbmodel.py index f09231cc86..180b7105ef 100644 --- a/antarest/study/storage/variantstudy/model/dbmodel.py +++ b/antarest/study/storage/variantstudy/model/dbmodel.py @@ -66,6 +66,8 @@ class CommandBlock(Base): # type: ignore version: int = Column(Integer) args: str = Column(String()) study_version: str = Column(String(36)) + user_id: int = Column(Integer, ForeignKey("identities.id", ondelete="SET NULL"), nullable=True) + updated_at: datetime.datetime = Column(DateTime, nullable=True) def to_dto(self) -> CommandDTO: # Database may lack a version number, defaulting to 1 if so. @@ -76,6 +78,8 @@ def to_dto(self) -> CommandDTO: args=from_json(self.args), version=version, study_version=self.study_version, + user_id=self.user_id, + updated_at=self.updated_at, ) def __str__(self) -> str: @@ -87,6 +91,8 @@ def __str__(self) -> str: f" version={self.version!r}," f" args={self.args!r})" f" study_version={self.study_version!r}" + f" user_id={self.user_id!r}" + f" updated_at={self.updated_at!r}" ) diff --git a/antarest/study/storage/variantstudy/model/model.py b/antarest/study/storage/variantstudy/model/model.py index a303e39020..0d0c308581 100644 --- a/antarest/study/storage/variantstudy/model/model.py +++ b/antarest/study/storage/variantstudy/model/model.py @@ -9,7 +9,7 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. - +import datetime import typing as t import uuid @@ -73,6 +73,8 @@ class CommandDTOAPI(AntaresBaseModel): action: str args: t.Union[t.MutableSequence[JSON], JSON] version: int = 1 + user_name: t.Optional[str] = None + updated_at: t.Optional[datetime.datetime] = None class CommandDTO(AntaresBaseModel): @@ -85,6 +87,8 @@ class CommandDTO(AntaresBaseModel): args: The arguments for the command action. version: The version of the command. study_version: The version of the study associated to the command. + user_id: id of the author of the command. + updated_at: The time the command was last updated. """ id: t.Optional[str] = None @@ -92,9 +96,13 @@ class CommandDTO(AntaresBaseModel): args: t.Union[t.MutableSequence[JSON], JSON] version: int = 1 study_version: StudyVersionStr + user_id: t.Optional[int] = None + updated_at: t.Optional[datetime.datetime] = None - def to_api(self) -> CommandDTOAPI: - return CommandDTOAPI.model_validate(self.model_dump(mode="json", exclude={"study_version"})) + def to_api(self, user_name: t.Optional[str] = None) -> CommandDTOAPI: + data = self.model_dump(mode="json", exclude={"study_version", "user_id"}) + data["user_name"] = user_name + return CommandDTOAPI.model_validate(data) class CommandResultDTO(AntaresBaseModel): diff --git a/antarest/study/storage/variantstudy/variant_study_service.py b/antarest/study/storage/variantstudy/variant_study_service.py index ea57a82d60..a57b7f1b2f 100644 --- a/antarest/study/storage/variantstudy/variant_study_service.py +++ b/antarest/study/storage/variantstudy/variant_study_service.py @@ -41,7 +41,7 @@ from antarest.core.filetransfer.model import FileDownloadTaskDTO from antarest.core.interfaces.cache import ICache from antarest.core.interfaces.eventbus import Event, EventChannelDirectory, EventType, IEventBus -from antarest.core.jwt import DEFAULT_ADMIN_USER +from antarest.core.jwt import DEFAULT_ADMIN_USER, JWTUser from antarest.core.model import JSON, PermissionInfo, PublicMode, StudyPermissionType from antarest.core.requests import RequestParameters, UserHasNotPermissionError from antarest.core.serialization import to_json_string @@ -49,6 +49,7 @@ from antarest.core.tasks.service import DEFAULT_AWAIT_MAX_TIMEOUT, ITaskNotifier, ITaskService, NoopNotifier from antarest.core.utils.fastapi_sqlalchemy import db from antarest.core.utils.utils import assert_this, suppress_exception +from antarest.login.model import Identity from antarest.matrixstore.service import MatrixService from antarest.study.model import RawStudy, Study, StudyAdditionalData, StudyMetadataDTO, StudySimResultDTO from antarest.study.repository import AccessPermissions, StudyFilter @@ -106,6 +107,17 @@ def __init__( self.command_factory = command_factory self.generator = VariantCommandGenerator(self.study_factory) + @staticmethod + def _get_user_name_from_id(user_id: int) -> str: + """ + Utility method that retrieves a user's name based on their id. + Args: + user_id: user id (user must exist) + Returns: String representing the user's name + """ + user_obj: Identity = db.session.query(Identity).get(user_id) + return user_obj.name # type: ignore # `name` attribute is always a string + def get_command(self, study_id: str, command_id: str, params: RequestParameters) -> CommandDTOAPI: """ Get command lists @@ -118,8 +130,10 @@ def get_command(self, study_id: str, command_id: str, params: RequestParameters) study = self._get_variant_study(study_id, params) try: - index = [command.id for command in study.commands].index(command_id) # Maybe add Try catch for this - return t.cast(CommandDTOAPI, study.commands[index].to_dto().to_api()) + index = [command.id for command in study.commands].index(command_id) + command: CommandBlock = study.commands[index] + user_name = self._get_user_name_from_id(command.user_id) if command.user_id else None + return command.to_dto().to_api(user_name) except ValueError: raise CommandNotFoundError(f"Command with id {command_id} not found") from None @@ -132,7 +146,16 @@ def get_commands(self, study_id: str, params: RequestParameters) -> t.List[Comma Returns: List of commands """ study = self._get_variant_study(study_id, params) - return [command.to_dto().to_api() for command in study.commands] + + id_to_name: t.Dict[int, str] = {} + command_list = [] + + for command in study.commands: + if command.user_id and command.user_id not in id_to_name.keys(): + user_name: str = self._get_user_name_from_id(command.user_id) + id_to_name[command.user_id] = user_name + command_list.append(command.to_dto().to_api(id_to_name.get(command.user_id))) + return command_list def convert_commands( self, study_id: str, api_commands: t.List[CommandDTOAPI], params: RequestParameters @@ -201,6 +224,7 @@ def append_commands( command_objs = self._check_commands_validity(study_id, commands) validated_commands = transform_command_to_dto(command_objs, commands) first_index = len(study.commands) + # noinspection PyArgumentList new_commands = [ CommandBlock( @@ -209,6 +233,9 @@ def append_commands( index=(first_index + i), version=command.version, study_version=str(command.study_version), + # params.user cannot be None, since previous checks were successful + user_id=params.user.id, # type: ignore + updated_at=datetime.utcnow(), ) for i, command in enumerate(validated_commands) ] @@ -249,6 +276,8 @@ def replace_commands( index=i, version=command.version, study_version=str(command.study_version), + user_id=params.user.id, # type: ignore + updated_at=datetime.utcnow(), ) for i, command in enumerate(validated_commands) ] @@ -893,6 +922,8 @@ def copy( index=command.index, version=command.version, study_version=str(command.study_version), + user_id=command.user_id, + updated_at=command.updated_at, ) for command in src_meta.commands ] diff --git a/tests/integration/study_data_blueprint/test_hydro_inflow_structure.py b/tests/integration/study_data_blueprint/test_hydro_inflow_structure.py index ec1327093d..79965cc81e 100644 --- a/tests/integration/study_data_blueprint/test_hydro_inflow_structure.py +++ b/tests/integration/study_data_blueprint/test_hydro_inflow_structure.py @@ -9,7 +9,6 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. - from http import HTTPStatus from unittest.mock import ANY @@ -137,6 +136,8 @@ def test_get_inflow_structure( "data": {"intermonthly-correlation": 0.9}, }, "version": 1, + "updated_at": ANY, + "user_name": ANY, } assert actual[1] == expected diff --git a/tests/integration/study_data_blueprint/test_st_storage.py b/tests/integration/study_data_blueprint/test_st_storage.py index 2780e098cf..ae5a25dacd 100644 --- a/tests/integration/study_data_blueprint/test_st_storage.py +++ b/tests/integration/study_data_blueprint/test_st_storage.py @@ -669,6 +669,8 @@ def test__default_values( "inflows": ANY, }, "version": 1, + "updated_at": ANY, + "user_name": ANY, } assert actual == expected @@ -693,6 +695,8 @@ def test__default_values( "target": "input/st-storage/clusters/fr/list/siemens battery/initiallevel", }, "version": 1, + "updated_at": ANY, + "user_name": ANY, } assert actual == expected @@ -723,6 +727,8 @@ def test__default_values( }, ], "version": 1, + "updated_at": ANY, + "user_name": ANY, } assert actual == expected diff --git a/tests/integration/test_integration_token_end_to_end.py b/tests/integration/test_integration_token_end_to_end.py index 01b92788d4..5b78d0ac58 100644 --- a/tests/integration/test_integration_token_end_to_end.py +++ b/tests/integration/test_integration_token_end_to_end.py @@ -10,6 +10,7 @@ # # This file is part of the Antares project. +import datetime import io import typing as t from unittest.mock import ANY @@ -173,6 +174,21 @@ def test_nominal_case_of_an_api_user(client: TestClient, admin_access_token: str res = client.post(f"/v1/studies/{variant_id}/commands", headers=bot_headers, json=commands) assert res.status_code == 200 + # Check if the author's name and date of update are retrieved with commands created by a bot + commands_res = client.get(f"/v1/studies/{variant_id}/commands", headers=bot_headers) + + for command in commands_res.json(): + # FIXME: Some commands, such as those that modify study configurations, are run by admin user + # Thus the `user_name` for such type of command will be the admin's name + # Here we detect those commands by their `action` and their `target` values + if command["action"] == "update_playlist" or ( + command["action"] == "update_config" and "settings/generaldata" in command["args"]["target"] + ): + assert command["user_name"] == "admin" + else: + assert command["user_name"] == "admin_bot" + assert command["updated_at"] + # generate variant before running a simulation res = client.put(f"/v1/studies/{variant_id}/generate", headers=bot_headers) assert res.status_code == 200 diff --git a/tests/study/storage/variantstudy/model/test_dbmodel.py b/tests/study/storage/variantstudy/model/test_dbmodel.py index e89ea48355..529c9f04b3 100644 --- a/tests/study/storage/variantstudy/model/test_dbmodel.py +++ b/tests/study/storage/variantstudy/model/test_dbmodel.py @@ -127,7 +127,7 @@ def test_init__with_command(self, db_session: Session, variant_study_id: str) -> class TestCommandBlock: - def test_init(self, db_session: Session, variant_study_id: str) -> None: + def test_init(self, db_session: Session, variant_study_id: str, user_id: int) -> None: """ Check the creation of an instance of CommandBlock """ @@ -136,6 +136,7 @@ def test_init(self, db_session: Session, variant_study_id: str) -> None: command = "dummy command" version = 42 args = '{"foo": "bar"}' + updated_at = datetime.datetime.utcnow() with db_session: block = CommandBlock( @@ -146,6 +147,8 @@ def test_init(self, db_session: Session, variant_study_id: str) -> None: version=version, args=args, study_version="860", + updated_at=updated_at, + user_id=user_id, ) db_session.add(block) db_session.commit() @@ -172,6 +175,8 @@ def test_init(self, db_session: Session, variant_study_id: str) -> None: "args": json.loads(args), "version": 42, "study_version": StudyVersion.parse("860"), + "updated_at": updated_at, + "user_id": user_id, } diff --git a/tests/study/storage/variantstudy/test_variant_study_service.py b/tests/study/storage/variantstudy/test_variant_study_service.py index ba0cb93277..6375dcc546 100644 --- a/tests/study/storage/variantstudy/test_variant_study_service.py +++ b/tests/study/storage/variantstudy/test_variant_study_service.py @@ -134,7 +134,7 @@ def test_generate_task( ) -> None: ## Prepare database objects # noinspection PyArgumentList - user = User(id=0, name="admin") + user = User(id=1, name="admin") db.session.add(user) db.session.commit() diff --git a/tests/variantstudy/model/command/test_create_cluster.py b/tests/variantstudy/model/command/test_create_cluster.py index b6a03874f5..adf9f221f6 100644 --- a/tests/variantstudy/model/command/test_create_cluster.py +++ b/tests/variantstudy/model/command/test_create_cluster.py @@ -210,6 +210,8 @@ def test_to_dto(self, command_context: CommandContext): "id": None, "version": 1, "study_version": STUDY_VERSION_8_8, + "user_id": None, + "updated_at": None, } diff --git a/tests/variantstudy/model/command/test_create_renewables_cluster.py b/tests/variantstudy/model/command/test_create_renewables_cluster.py index aa4eeff60e..78b73e0208 100644 --- a/tests/variantstudy/model/command/test_create_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_create_renewables_cluster.py @@ -163,6 +163,8 @@ def test_to_dto(self, command_context: CommandContext) -> None: "id": None, "version": 1, "study_version": STUDY_VERSION_8_8, + "updated_at": None, + "user_id": None, } diff --git a/tests/variantstudy/model/test_variant_model.py b/tests/variantstudy/model/test_variant_model.py index 2fd8a47881..e2b607a30e 100644 --- a/tests/variantstudy/model/test_variant_model.py +++ b/tests/variantstudy/model/test_variant_model.py @@ -11,13 +11,17 @@ # This file is part of the Antares project. import datetime +import typing as t import uuid from pathlib import Path +from unittest.mock import patch import pytest from antares.study.version import StudyVersion +from sqlalchemy import event from antarest.core.jwt import JWTGroup, JWTUser +from antarest.core.model import PublicMode from antarest.core.requests import RequestParameters from antarest.core.roles import RoleType from antarest.core.utils.fastapi_sqlalchemy import db @@ -59,7 +63,11 @@ def root_study_id_fixture( raw_study_service: RawStudyService, variant_study_service: VariantStudyService, jwt_user: JWTUser, + request: t.Any, ) -> str: + # Get public mode argument + public_mode = request.param + # Prepare a RAW study in the temporary folder study_dir = tmp_path / "my-study" root_study_id = str(uuid.uuid4()) @@ -72,6 +80,7 @@ def root_study_id_fixture( updated_at=datetime.datetime.utcnow(), additional_data=StudyAdditionalData(author="john.doe"), owner_id=jwt_user.id, + public_mode=PublicMode.EDIT if public_mode else PublicMode.NONE, ) root_study = raw_study_service.create(root_study) with db(): @@ -79,6 +88,7 @@ def root_study_id_fixture( variant_study_service.repository.save(root_study) return root_study_id + @pytest.mark.parametrize("root_study_id", [False], indirect=True) @with_db_context def test_commands_service( self, @@ -89,10 +99,9 @@ def test_commands_service( ) -> None: # Initialize the default matrix constants generator_matrix_constants.init_constant_matrices() - params = RequestParameters(user=jwt_user) - # Create un new variant + # Create a new variant variant_study = variant_study_service.create_variant_study(root_study_id, "my-variant", params=params) study_version = StudyVersion.parse(variant_study.version) saved_id = variant_study.id @@ -101,7 +110,7 @@ def test_commands_service( assert study.id == saved_id assert study.parent_id == root_study_id - # Append command + # Append commands one at the time command_count = 0 command_1 = CommandDTO(action="create_area", args={"area_name": "Yes"}, study_version=study_version) variant_study_service.append_command(saved_id, command_1, params=params) @@ -190,3 +199,119 @@ def test_commands_service( ], } assert study.snapshot.id == study.id + + @pytest.mark.parametrize("root_study_id", [True], indirect=True) + @with_db_context + def test_command_several_authors( + self, + jwt_user: JWTUser, + variant_study_service: VariantStudyService, + root_study_id: str, + ): + """ + Test two different users that are authors on two different commands of the same variant + Set up: + Retrieve the user that will be the owner of the study and variant + Create a second user + Create a study and a variant study + Each user creates a command + + Tests: + Test whether the commands have the `user_name` and `updated_at` attributes + Test authors of the commands + """ + # Get the owner request parameters + owner_params = RequestParameters(user=jwt_user) + + # create another user that has the write privilege + user2 = User(id=3, name="jane.doe", type="users") + db.session.add(user2) + db.session.commit() + + user2_params = RequestParameters( + user=JWTUser( + id=user2.id, + impersonator=user2.id, + type="users", + groups=[JWTGroup(id="writers", name="writers", role=RoleType.WRITER)], + ) + ) + + # Generate a variant on a study that allow other user to edit it + variant_study = variant_study_service.create_variant_study(root_study_id, "new variant", params=owner_params) + study_version = StudyVersion.parse(variant_study.version) + variant_id = variant_study.id + + # Create two new commands on the existing variant + command_6 = CommandDTO(action="update_comments", args={"comments": "new comment"}, study_version=study_version) + command_7 = CommandDTO( + action="update_comments", args={"comments": "another new comment"}, study_version=study_version + ) + + variant_study_service.append_command(variant_id, command_6, params=owner_params) + variant_study_service.append_command(variant_id, command_7, params=user2_params) + + # Make sure there are commands generated by both users + commands = variant_study_service.get_commands(variant_id, params=owner_params) + assert len(commands) == 2 + + # Make sure their `user_name` and `updated_at` attributes are not None + for command in commands: + assert command.user_name and command.updated_at + + # Make sure commands has not the same author + assert commands[0] != commands[1] + assert commands[0].user_name == "john.doe" + assert commands[1].user_name == "jane.doe" + + @pytest.mark.parametrize("root_study_id", [False], indirect=True) + @with_db_context + def test_command_same_author( + self, + jwt_user: JWTUser, + variant_study_service: VariantStudyService, + root_study_id: str, + ): + """ + Test the case of multiple commands was created by the same user. + Set up: + Initialize a counter of queries to database + Define a watcher on the orm queries to database that updates the counter + Create a user + Create a variant study + Make the user generates five commands on the newly created variant + Test: + Each time a command is retrieved, the database must be accessed only if + the author of the currently retrieved command is not already known during + the process + """ + nb_queries = 0 # Store number of orm queries to database + + # Watch orm events and update `nb_queries` + @event.listens_for(db.session, "do_orm_execute") + def check_orm_operations(orm_execute_state): + if orm_execute_state.is_select: + nonlocal nb_queries + nb_queries += 1 + + owner_params = RequestParameters(user=jwt_user) + + # Generate a variant on a study that allow other user to edit it + variant_study = variant_study_service.create_variant_study(root_study_id, "new_variant", params=owner_params) + + commands = [] + + # Create two new commands on the existing variant + for index in range(5): + commands.append( + CommandDTO( + action="update_comments", + args={"comments": f"new comment {index}"}, + study_version=StudyVersion.parse(variant_study.version), + ) + ) + variant_study_service.append_commands(variant_study.id, commands, params=owner_params) + + nb_queries_before = nb_queries # store initial state + variant_study_service.get_commands(variant_study.id, params=owner_params) # execute database query + assert nb_queries_before + 1 == nb_queries # compare with initial state to make sure database was queried once From a951ca17fa3b850ceb4c57e8fa62e3703d346e66 Mon Sep 17 00:00:00 2001 From: Hatim Dinia <33469289+hdinia@users.noreply.github.com> Date: Fri, 13 Dec 2024 08:43:33 +0100 Subject: [PATCH 15/86] fix(ui-bc): use `matrixindex` timesteps for row display (#2262) --- webapp/src/components/common/Matrix/hooks/useMatrix/index.ts | 4 ++++ webapp/src/components/common/Matrix/index.tsx | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/webapp/src/components/common/Matrix/hooks/useMatrix/index.ts b/webapp/src/components/common/Matrix/hooks/useMatrix/index.ts index 286b732405..6558e764e8 100644 --- a/webapp/src/components/common/Matrix/hooks/useMatrix/index.ts +++ b/webapp/src/components/common/Matrix/hooks/useMatrix/index.ts @@ -320,5 +320,9 @@ export function useMatrix( canUndo: canUndoChanges, canRedo, reload: fetchMatrix, + // Use the matrix index 'steps' field to determine the number of rows + // This ensures consistent row display (8760 for hourly, 365 for daily/weekly) + // rather than using data.length which can vary for Binding Constraints (8784/366) + rowCount: index?.steps, }; } diff --git a/webapp/src/components/common/Matrix/index.tsx b/webapp/src/components/common/Matrix/index.tsx index 1316d2d7f2..4bb07202dd 100644 --- a/webapp/src/components/common/Matrix/index.tsx +++ b/webapp/src/components/common/Matrix/index.tsx @@ -83,6 +83,7 @@ function Matrix({ canUndo, canRedo, reload, + rowCount, } = useMatrix( study.id, url, @@ -136,7 +137,7 @@ function Matrix({ data={data} aggregates={aggregates} columns={columns} - rows={data.length} + rows={rowCount ?? data.length} rowHeaders={customRowHeaders} dateTime={dateTime} onCellEdit={handleCellEdit} From 25420972990c704d42cae2fa6afffeac26592a41 Mon Sep 17 00:00:00 2001 From: Hatim Dinia <33469289+hdinia@users.noreply.github.com> Date: Fri, 13 Dec 2024 11:18:33 +0100 Subject: [PATCH 16/86] feat(ui-cmd): add command details on variants commands panel (#2265) --- webapp/src/common/types.ts | 3 + .../CommandListItem/CommandDetails.tsx | 83 +++++++++++++++++++ .../CommandListItem/index.tsx | 9 +- .../CommandListItem/style.ts | 9 +- .../DraggableCommands/CommandListView.tsx | 6 +- .../Commands/Edition/commandTypes.ts | 22 ++++- .../Singlestudy/Commands/Edition/index.tsx | 24 +++--- .../App/Singlestudy/Commands/Edition/style.ts | 16 ++-- .../App/Singlestudy/Commands/Edition/utils.ts | 6 +- 9 files changed, 141 insertions(+), 37 deletions(-) create mode 100644 webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/CommandDetails.tsx diff --git a/webapp/src/common/types.ts b/webapp/src/common/types.ts index 0674b5031a..ece13fa1ea 100644 --- a/webapp/src/common/types.ts +++ b/webapp/src/common/types.ts @@ -306,6 +306,9 @@ export interface CommandDTO { id?: string; action: string; args: object; + version?: number; + user_name?: string; + updated_at?: string; } export type Components = Record React.ReactNode>; diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/CommandDetails.tsx b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/CommandDetails.tsx new file mode 100644 index 0000000000..a3b73ce62b --- /dev/null +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/CommandDetails.tsx @@ -0,0 +1,83 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { Fragment } from "react"; +import { Box, Typography, Divider, Tooltip } from "@mui/material"; +import { CommandItem } from "../../commandTypes"; +import { PersonOutlineOutlined, UpdateOutlined } from "@mui/icons-material"; +import { format, formatDistanceToNow, parseISO } from "date-fns"; +import { enUS, fr } from "date-fns/locale"; +import { useTranslation } from "react-i18next"; +import { getCurrentLanguage } from "@/utils/i18nUtils"; + +interface Props { + item: CommandItem; +} + +const formatDate = (dateStr: string) => { + const utcDate = parseISO(dateStr + "Z"); + return format(utcDate, "dd/MM/yyyy HH:mm"); +}; + +const formatDateWithLocale = (dateStr: string) => { + const date = parseISO(dateStr); + const lang = getCurrentLanguage(); + const locale = lang.startsWith("fr") ? fr : enUS; + + return formatDistanceToNow(date, { + addSuffix: true, + locale, + }); +}; + +function CommandDetails({ item }: Props) { + const [t] = useTranslation(); + const details = [ + { + icon: , + text: item.user || t("global.unknown"), + }, + { + icon: , + text: item.updatedAt ? formatDate(item.updatedAt) : t("global.unknown"), + tooltip: item.updatedAt + ? formatDateWithLocale(item.updatedAt) + : t("global.unknown"), + }, + ]; + + return ( + + {details.map((detail, index) => ( + + {index > 0 && ( + + )} + + {detail.icon} + {detail.tooltip ? ( + + {detail.text} + + ) : ( + {detail.text} + )} + + + ))} + + ); +} + +export default CommandDetails; diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/index.tsx b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/index.tsx index c53d7b7ef1..c8b3bf92d9 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/index.tsx +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/index.tsx @@ -43,6 +43,7 @@ import { StyledDeleteIcon, } from "./style"; import CommandMatrixViewer from "./CommandMatrixViewer"; +import CommandDetails from "./CommandDetails"; export const Item = styled(Box)(({ theme }) => ({ boxSizing: "border-box", @@ -51,9 +52,6 @@ export const Item = styled(Box)(({ theme }) => ({ justifyContent: "space-between", alignItems: "flex-start", width: "100%", - height: "auto", - userSelect: "none", - maxWidth: "800px", })); interface StyleType { @@ -189,9 +187,8 @@ function CommandListItem({ onClick={() => onExpanded(index, !(expandedIndex === index))} > - - {item.action} - + {item.action} + diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/style.ts b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/style.ts index e0d056e66c..ea27e92815 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/style.ts +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/style.ts @@ -22,6 +22,8 @@ export const ItemContainer = styled(Box, { display: "flex", justifyContent: "center", zIndex: onTopVisible ? 10000 : 9999, + width: "100%", + boxSizing: "border-box", })); export const DraggableAccorderon = styled(Accordion, { @@ -30,6 +32,9 @@ export const DraggableAccorderon = styled(Accordion, { flex: 1, boxSizing: "border-box", backgroundColor: PAPER_BACKGROUND_NO_TRANSPARENCY, + maxWidth: "800px", + width: "100%", + margin: "0 auto", ...(isDragging ? { borderColor: theme.palette.secondary.main, @@ -43,9 +48,9 @@ export const DraggableAccorderon = styled(Accordion, { export const StyledDeleteIcon = styled(DeleteIcon)(({ theme }) => ({ flex: "0 0 24px", color: theme.palette.error.light, - marginLeft: theme.spacing(1), - marginRight: theme.spacing(1), + margin: theme.spacing(0, 2), cursor: "pointer", + alignSelf: "center", "&:hover": { color: theme.palette.error.main, }, diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListView.tsx b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListView.tsx index 5ba09ec873..37dc79fb06 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListView.tsx +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListView.tsx @@ -129,9 +129,9 @@ function CommandListView({ > {(provided) => ( {Row} diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/commandTypes.ts b/webapp/src/components/App/Singlestudy/Commands/Edition/commandTypes.ts index 76d63180d0..e43f205696 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/commandTypes.ts +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/commandTypes.ts @@ -14,12 +14,32 @@ import { CommandResultDTO } from "../../../../../common/types"; +interface AntaresConfig { + version: string; + caption: string; + created: number; + lastsave: number; + author: string; +} + +interface CommandArgsData { + antares: AntaresConfig; +} + +export interface CommandArgsDTO { + data: CommandArgsData; + target: string; +} + export interface CommandItem { id?: string; action: string; updated: boolean; - args: object; + args: CommandArgsDTO | object; results?: CommandResultDTO; + version?: number; + user?: string; + updatedAt?: string; } export interface JsonCommandItem { diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/index.tsx b/webapp/src/components/App/Singlestudy/Commands/Edition/index.tsx index e8cafa7d4e..2ef264dc63 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/index.tsx +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/index.tsx @@ -23,7 +23,7 @@ import BoltIcon from "@mui/icons-material/Bolt"; import debug from "debug"; import { AxiosError } from "axios"; import HelpIcon from "@mui/icons-material/Help"; -import { Box, Button, Tooltip, Typography } from "@mui/material"; +import { Box, Button, Skeleton, Tooltip, Typography } from "@mui/material"; import { useMountedState } from "react-use"; import { CommandItem, JsonCommandItem } from "./commandTypes"; import CommandListView from "./DraggableCommands/CommandListView"; @@ -50,7 +50,6 @@ import { CommandResultDTO } from "../../../../../common/types"; import CommandImportButton from "./DraggableCommands/CommandImportButton"; import { getTask } from "../../../../../services/api/tasks"; import { Body, EditHeader, Header, headerIconStyle, Root } from "./style"; -import SimpleLoader from "../../../../common/loaders/SimpleLoader"; import useEnqueueErrorSnackbar from "../../../../../hooks/useEnqueueErrorSnackbar"; import { addWsEventListener, @@ -500,7 +499,7 @@ function EditionView(props: Props) { )} - {loaded && commands.length > 0 ? ( + {commands.length > 0 ? ( - ) : ( - loaded && ( - - - - - - ) - )} - {!loaded && ( + ) : !loaded ? ( - + + + ) : ( + + + + )} {openClearCommandsDialog && ( diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/style.ts b/webapp/src/components/App/Singlestudy/Commands/Edition/style.ts index 50163125c0..0702c1cb23 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/style.ts +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/style.ts @@ -14,18 +14,18 @@ import { Box, styled } from "@mui/material"; -export const Root = styled(Box)(({ theme }) => ({ - flex: 1, +export const Root = styled(Box)(() => ({ + width: "100%", height: "98%", display: "flex", flexFlow: "column nowrap", justifyContent: "flex-start", alignItems: "center", - overflowY: "hidden", + overflowY: "auto", })); -export const Header = styled(Box)(({ theme }) => ({ - width: "90%", +export const Header = styled(Box)(() => ({ + width: "95%", height: "80px", display: "flex", flexFlow: "row nowrap", @@ -33,7 +33,7 @@ export const Header = styled(Box)(({ theme }) => ({ alignItems: "center", })); -export const EditHeader = styled(Box)(({ theme }) => ({ +export const EditHeader = styled(Box)(() => ({ flex: 1, display: "flex", flexFlow: "row nowrap", @@ -43,10 +43,8 @@ export const EditHeader = styled(Box)(({ theme }) => ({ export const Body = styled(Box)(({ theme }) => ({ width: "100%", - maxHeight: "90%", - minHeight: "90%", + height: "100%", display: "flex", - flexFlow: "column nowrap", justifyContent: "flex-start", alignItems: "center", overflow: "auto", diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/utils.ts b/webapp/src/components/App/Singlestudy/Commands/Edition/utils.ts index e86abf59c0..bcb4a3ed47 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/utils.ts +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/utils.ts @@ -49,13 +49,15 @@ export const reorder = ( export const fromCommandDTOToCommandItem = ( commands: CommandDTO[], ): CommandItem[] => { - const dtoItems: CommandItem[] = commands.map((elm) => ({ + return commands.map((elm) => ({ id: elm?.id, action: elm.action, args: elm.args, updated: false, + version: elm.version, + user: elm.user_name, + updatedAt: elm.updated_at, })); - return dtoItems; }; export const fromCommandDTOToJsonCommand = ( From 3dd23884ec338a37c9061453d0f6fc11369c92ca Mon Sep 17 00:00:00 2001 From: hatim dinia Date: Mon, 2 Dec 2024 15:52:05 +0100 Subject: [PATCH 17/86] feat(ui-debug): add unsupported files handling --- webapp/public/locales/en/main.json | 1 + webapp/public/locales/fr/main.json | 1 + .../Singlestudy/explore/Debug/Data/Image.tsx | 34 --------- .../Singlestudy/explore/Debug/Data/Matrix.tsx | 2 +- .../explore/Debug/Data/Unsupported.tsx | 75 +++++++++++++++++++ .../Singlestudy/explore/Debug/Data/index.tsx | 20 ++--- .../App/Singlestudy/explore/Debug/utils.ts | 35 +++++++-- 7 files changed, 115 insertions(+), 53 deletions(-) delete mode 100644 webapp/src/components/App/Singlestudy/explore/Debug/Data/Image.tsx create mode 100644 webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx diff --git a/webapp/public/locales/en/main.json b/webapp/public/locales/en/main.json index 952091b0d4..d6bbea522e 100644 --- a/webapp/public/locales/en/main.json +++ b/webapp/public/locales/en/main.json @@ -252,6 +252,7 @@ "study.bindingconstraints": "Binding Constraints", "study.debug": "Debug", "study.debug.file.image": "Image file", + "study.debug.file.unsupported": "Unsupported file type", "study.debug.file.deleteConfirm.title": "Delete File?", "study.debug.file.deleteConfirm.message": "Are you sure you want to delete the file?", "study.debug.folder.empty": "Folder is empty", diff --git a/webapp/public/locales/fr/main.json b/webapp/public/locales/fr/main.json index 81ffca6679..9ddb68910e 100644 --- a/webapp/public/locales/fr/main.json +++ b/webapp/public/locales/fr/main.json @@ -253,6 +253,7 @@ "study.debug": "Debug", "study.debug.file.image": "Fichier image", "study.debug.folder.empty": "Le dossier est vide", + "study.debug.file.unsupported": "Type de fichier non supporté", "study.debug.file.deleteConfirm.title": "Supprimer le fichier ?", "study.debug.file.deleteConfirm.message": "Êtes-vous sûr de vouloir supprimer le fichier ?", "study.debug.folder.upload.replaceFileConfirm.title": "Remplacer le fichier ?", diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Image.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Image.tsx deleted file mode 100644 index 23aa34e993..0000000000 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Image.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright (c) 2024, RTE (https://www.rte-france.com) - * - * See AUTHORS.txt - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * SPDX-License-Identifier: MPL-2.0 - * - * This file is part of the Antares project. - */ - -import { useTranslation } from "react-i18next"; -import EmptyView from "../../../../../common/page/SimpleContent"; -import ImageIcon from "@mui/icons-material/Image"; -import { Filename, Flex, Menubar } from "./styles"; -import type { DataCompProps } from "../utils"; - -function Image({ filename }: DataCompProps) { - const { t } = useTranslation(); - - return ( - - - {filename} - - - - ); -} - -export default Image; diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Matrix.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Matrix.tsx index a140fe71e8..26a211251d 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Matrix.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Matrix.tsx @@ -15,7 +15,7 @@ import Matrix from "../../../../../common/Matrix"; import type { DataCompProps } from "../utils"; -function DebugMatrix({ studyId, filename, filePath, canEdit }: DataCompProps) { +function DebugMatrix({ filename, filePath, canEdit }: DataCompProps) { return ; } diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx new file mode 100644 index 0000000000..59c4f48950 --- /dev/null +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx @@ -0,0 +1,75 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { useTranslation } from "react-i18next"; +import EmptyView from "../../../../../common/page/SimpleContent"; +import BlockIcon from "@mui/icons-material/Block"; +import { Filename, Flex, Menubar } from "./styles"; +import type { DataCompProps } from "../utils"; +import DownloadButton from "@/components/common/buttons/DownloadButton"; +import UploadFileButton from "@/components/common/buttons/UploadFileButton"; +import usePromiseWithSnackbarError from "@/hooks/usePromiseWithSnackbarError"; +import { getStudyData } from "@/services/api/study"; +import { downloadFile } from "@/utils/fileUtils"; + +function Unsupported({ studyId, filePath, filename }: DataCompProps) { + const { t } = useTranslation(); + + const res = usePromiseWithSnackbarError( + () => getStudyData(studyId, filePath), + { + errorMessage: t("studies.error.retrieveData"), + deps: [studyId, filePath], + }, + ); + + //////////////////////////////////////////////////////////////// + // Event Handlers + //////////////////////////////////////////////////////////////// + + const handleDownload = () => { + if (res.data) { + downloadFile( + res.data, + filename.endsWith(".txt") ? filename : `${filename}.txt`, + ); + } + }; + + const handleUploadSuccessful = () => { + res.reload(); + }; + + //////////////////////////////////////////////////////////////// + // JSX + //////////////////////////////////////////////////////////////// + + return ( + + + {filename} + + + + + + ); +} + +export default Unsupported; diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx index f387b7ef9c..de7e0ca24e 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx @@ -12,15 +12,16 @@ * This file is part of the Antares project. */ +import { ComponentType } from "react"; import Text from "./Text"; -import Image from "./Image"; -import Json from "./Json"; +import Unsupported from "./Unsupported"; import Matrix from "./Matrix"; import Folder from "./Folder"; import { canEditFile, type FileInfo, type FileType } from "../utils"; import type { DataCompProps } from "../utils"; import ViewWrapper from "../../../../../common/page/ViewWrapper"; import type { StudyMetadata } from "../../../../../../common/types"; +import Json from "./Json"; interface Props extends FileInfo { study: StudyMetadata; @@ -28,28 +29,23 @@ interface Props extends FileInfo { reloadTreeData: () => void; } -type DataComponent = React.ComponentType; - -const componentByFileType: Record = { +const componentByFileType: Record> = { matrix: Matrix, json: Json, text: Text, - image: Image, + unsupported: Unsupported, folder: Folder, } as const; -function Data(props: Props) { - const { study, setSelectedFile, reloadTreeData, ...fileInfo } = props; - const { fileType, filePath } = fileInfo; - const canEdit = canEditFile(study, filePath); - const DataViewer = componentByFileType[fileType]; +function Data({ study, setSelectedFile, reloadTreeData, ...fileInfo }: Props) { + const DataViewer = componentByFileType[fileInfo.fileType]; return ( diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts b/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts index b1d8653f07..d192aad6d9 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts @@ -14,7 +14,7 @@ import DataObjectIcon from "@mui/icons-material/DataObject"; import TextSnippetIcon from "@mui/icons-material/TextSnippet"; -import ImageIcon from "@mui/icons-material/Image"; +import BlockIcon from "@mui/icons-material/Block"; import FolderIcon from "@mui/icons-material/Folder"; import DatasetIcon from "@mui/icons-material/Dataset"; import { SvgIconComponent } from "@mui/icons-material"; @@ -33,7 +33,7 @@ export interface TreeFolder { export type TreeData = TreeFolder | TreeFile; -export type FileType = "json" | "matrix" | "text" | "image" | "folder"; +export type FileType = "json" | "matrix" | "text" | "folder" | "unsupported"; export interface FileInfo { fileType: FileType; @@ -58,8 +58,8 @@ const iconByFileType: Record = { matrix: DatasetIcon, json: DataObjectIcon, text: TextSnippetIcon, - image: ImageIcon, folder: FolderIcon, + unsupported: BlockIcon, } as const; /** @@ -83,21 +83,44 @@ export function isFolder(treeData: TreeData): treeData is TreeFolder { * @returns The corresponding file type. */ export function getFileType(treeData: TreeData): FileType { + if (isFolder(treeData)) { + return "folder"; + } + if (typeof treeData === "string") { + // Handle matrix files if ( treeData.startsWith("matrix://") || treeData.startsWith("matrixfile://") ) { return "matrix"; } + + // Handle files displayed as JSON by the API even though they are .ini files in the filesystem. + // The json:// prefix or .json extension indicates the content should be viewed as JSON. if (treeData.startsWith("json://") || treeData.endsWith(".json")) { return "json"; } - if (treeData.startsWith("file://") && treeData.endsWith(".ico")) { - return "image"; + + // Handle regular files with file:// prefix + // All files except matrices and json-formatted content use this prefix + // We filter to only allow extensions that can be properly displayed (.txt, .log, .csv, .tsv, .ini) + // Other extensions (like .RDS or .xlsx) are marked as unsupported since they can't be shown in the UI + if (treeData.startsWith("file://")) { + const supportedTextExtensions = [".txt", ".log", ".csv", ".tsv", ".ini"]; + + // Check if the file ends with any of the supported extensions + if (supportedTextExtensions.some((ext) => treeData.endsWith(ext))) { + return "text"; + } + + // Any other extension with file:// prefix is unsupported + return "unsupported"; } } - return isFolder(treeData) ? "folder" : "text"; + + // Default to text for any other string content + return "text"; } //////////////////////////////////////////////////////////////// From aa373d5f0fb326d8621613853191fca897f33a41 Mon Sep 17 00:00:00 2001 From: hatim dinia Date: Mon, 2 Dec 2024 15:52:28 +0100 Subject: [PATCH 18/86] fix(ui-debug): prevent empty text files display --- webapp/public/locales/en/main.json | 1 - webapp/public/locales/fr/main.json | 1 - .../Singlestudy/explore/Debug/Data/Text.tsx | 53 +++++++++++++------ .../explore/Debug/Data/Unsupported.tsx | 6 +-- .../App/Singlestudy/explore/Debug/utils.ts | 42 ++++++--------- 5 files changed, 54 insertions(+), 49 deletions(-) diff --git a/webapp/public/locales/en/main.json b/webapp/public/locales/en/main.json index d6bbea522e..df948d3920 100644 --- a/webapp/public/locales/en/main.json +++ b/webapp/public/locales/en/main.json @@ -251,7 +251,6 @@ "study.district": "District", "study.bindingconstraints": "Binding Constraints", "study.debug": "Debug", - "study.debug.file.image": "Image file", "study.debug.file.unsupported": "Unsupported file type", "study.debug.file.deleteConfirm.title": "Delete File?", "study.debug.file.deleteConfirm.message": "Are you sure you want to delete the file?", diff --git a/webapp/public/locales/fr/main.json b/webapp/public/locales/fr/main.json index 9ddb68910e..3dacacb6e0 100644 --- a/webapp/public/locales/fr/main.json +++ b/webapp/public/locales/fr/main.json @@ -251,7 +251,6 @@ "study.district": "District", "study.bindingconstraints": "Contraintes Couplantes", "study.debug": "Debug", - "study.debug.file.image": "Fichier image", "study.debug.folder.empty": "Le dossier est vide", "study.debug.file.unsupported": "Type de fichier non supporté", "study.debug.file.deleteConfirm.title": "Supprimer le fichier ?", diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx index 7380186bc3..f2ac0a31e1 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx @@ -31,6 +31,8 @@ import DownloadButton from "../../../../../common/buttons/DownloadButton"; import { downloadFile } from "../../../../../../utils/fileUtils"; import { Filename, Flex, Menubar } from "./styles"; import UploadFileButton from "../../../../../common/buttons/UploadFileButton"; +import EmptyView from "@/components/common/page/SimpleContent"; +import GridOffIcon from "@mui/icons-material/GridOff"; SyntaxHighlighter.registerLanguage("xml", xml); SyntaxHighlighter.registerLanguage("plaintext", plaintext); @@ -42,6 +44,16 @@ const logsRegex = /^(\[[^\]]*\]){3}/; // Ex: "EXP : 0" const propertiesRegex = /^[^:]+ : [^:]+/; +function isEmptyContent(text: string | string[]): boolean { + if (Array.isArray(text)) { + return ( + !text || text.every((line) => typeof line === "string" && !line.trim()) + ); + } + + return typeof text !== "string" || !text.trim(); +} + function getSyntaxProps(data: string | string[]): SyntaxHighlighterProps { const isArray = Array.isArray(data); const text = isArray ? data.join("\n") : data; @@ -111,24 +123,31 @@ function Text({ studyId, filePath, filename, canEdit }: DataCompProps) { onUploadSuccessful={handleUploadSuccessful} /> )} - - - - - + + {isEmptyContent(text) ? ( + + ) : ( + + + + )} )} /> diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx index 59c4f48950..163235ba6f 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx @@ -40,10 +40,7 @@ function Unsupported({ studyId, filePath, filename }: DataCompProps) { const handleDownload = () => { if (res.data) { - downloadFile( - res.data, - filename.endsWith(".txt") ? filename : `${filename}.txt`, - ); + downloadFile(res.data, filename); } }; @@ -62,7 +59,6 @@ function Unsupported({ studyId, filePath, filename }: DataCompProps) { diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts b/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts index d192aad6d9..f0e9c428b8 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts @@ -50,9 +50,17 @@ export interface DataCompProps extends FileInfo { } //////////////////////////////////////////////////////////////// -// File Info +// Utils //////////////////////////////////////////////////////////////// +const URL_SCHEMES = { + MATRIX: ["matrix://", "matrixfile://"], + JSON: "json://", + FILE: "file://", +} as const; + +const SUPPORTED_EXTENSIONS = [".txt", ".log", ".csv", ".tsv", ".ini"] as const; + // Maps file types to their corresponding icon components. const iconByFileType: Record = { matrix: DatasetIcon, @@ -88,17 +96,11 @@ export function getFileType(treeData: TreeData): FileType { } if (typeof treeData === "string") { - // Handle matrix files - if ( - treeData.startsWith("matrix://") || - treeData.startsWith("matrixfile://") - ) { + if (URL_SCHEMES.MATRIX.some((scheme) => treeData.startsWith(scheme))) { return "matrix"; } - // Handle files displayed as JSON by the API even though they are .ini files in the filesystem. - // The json:// prefix or .json extension indicates the content should be viewed as JSON. - if (treeData.startsWith("json://") || treeData.endsWith(".json")) { + if (treeData.startsWith(URL_SCHEMES.JSON)) { return "json"; } @@ -106,27 +108,17 @@ export function getFileType(treeData: TreeData): FileType { // All files except matrices and json-formatted content use this prefix // We filter to only allow extensions that can be properly displayed (.txt, .log, .csv, .tsv, .ini) // Other extensions (like .RDS or .xlsx) are marked as unsupported since they can't be shown in the UI - if (treeData.startsWith("file://")) { - const supportedTextExtensions = [".txt", ".log", ".csv", ".tsv", ".ini"]; - - // Check if the file ends with any of the supported extensions - if (supportedTextExtensions.some((ext) => treeData.endsWith(ext))) { - return "text"; - } - - // Any other extension with file:// prefix is unsupported - return "unsupported"; + if ( + treeData.startsWith(URL_SCHEMES.FILE) && + SUPPORTED_EXTENSIONS.some((ext) => treeData.endsWith(ext)) + ) { + return "text"; } } - // Default to text for any other string content - return "text"; + return "unsupported"; } -//////////////////////////////////////////////////////////////// -// Rights -//////////////////////////////////////////////////////////////// - /** * Checks if a study's file can be edited. * From 2c7eeac5d9fda9aefad0d502ba068979257efba1 Mon Sep 17 00:00:00 2001 From: hatim dinia Date: Wed, 11 Dec 2024 15:32:07 +0100 Subject: [PATCH 19/86] feat(ui-debug): display output matrices as raw text --- .../Singlestudy/explore/Debug/Data/Text.tsx | 44 ++--- .../explore/Debug/Data/Unsupported.tsx | 14 +- .../Singlestudy/explore/Debug/Data/index.tsx | 10 +- .../App/Singlestudy/explore/Debug/utils.ts | 168 ++++++++++++++++-- 4 files changed, 198 insertions(+), 38 deletions(-) diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx index f2ac0a31e1..1f7a7f4909 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx @@ -26,7 +26,7 @@ import plaintext from "react-syntax-highlighter/dist/esm/languages/hljs/plaintex import ini from "react-syntax-highlighter/dist/esm/languages/hljs/ini"; import properties from "react-syntax-highlighter/dist/esm/languages/hljs/properties"; import { atomOneDark } from "react-syntax-highlighter/dist/esm/styles/hljs"; -import type { DataCompProps } from "../utils"; +import { isEmptyContent, parseContent, type DataCompProps } from "../utils"; import DownloadButton from "../../../../../common/buttons/DownloadButton"; import { downloadFile } from "../../../../../../utils/fileUtils"; import { Filename, Flex, Menubar } from "./styles"; @@ -44,16 +44,6 @@ const logsRegex = /^(\[[^\]]*\]){3}/; // Ex: "EXP : 0" const propertiesRegex = /^[^:]+ : [^:]+/; -function isEmptyContent(text: string | string[]): boolean { - if (Array.isArray(text)) { - return ( - !text || text.every((line) => typeof line === "string" && !line.trim()) - ); - } - - return typeof text !== "string" || !text.trim(); -} - function getSyntaxProps(data: string | string[]): SyntaxHighlighterProps { const isArray = Array.isArray(data); const text = isArray ? data.join("\n") : data; @@ -75,15 +65,24 @@ function getSyntaxProps(data: string | string[]): SyntaxHighlighterProps { }; } -function Text({ studyId, filePath, filename, canEdit }: DataCompProps) { +function Text({ + studyId, + filePath, + filename, + fileType, + canEdit, +}: DataCompProps) { const { t } = useTranslation(); const theme = useTheme(); const res = usePromiseWithSnackbarError( - () => getStudyData(studyId, filePath), + () => + getStudyData(studyId, filePath).then((text) => + parseContent(text, { filePath, fileType }), + ), { errorMessage: t("studies.error.retrieveData"), - deps: [studyId, filePath], + deps: [studyId, filePath, fileType], }, ); @@ -123,15 +122,19 @@ function Text({ studyId, filePath, filename, canEdit }: DataCompProps) { onUploadSuccessful={handleUploadSuccessful} /> )} - + - {isEmptyContent(text) ? ( + {isEmptyContent(text) ? ( // TODO remove when files become editable ) : ( - + diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx index 163235ba6f..e4bcfccc5c 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Unsupported.tsx @@ -23,7 +23,7 @@ import usePromiseWithSnackbarError from "@/hooks/usePromiseWithSnackbarError"; import { getStudyData } from "@/services/api/study"; import { downloadFile } from "@/utils/fileUtils"; -function Unsupported({ studyId, filePath, filename }: DataCompProps) { +function Unsupported({ studyId, filePath, filename, canEdit }: DataCompProps) { const { t } = useTranslation(); const res = usePromiseWithSnackbarError( @@ -56,11 +56,13 @@ function Unsupported({ studyId, filePath, filename }: DataCompProps) { {filename} - + {canEdit && ( + + )} diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx index de7e0ca24e..9d09c246a5 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx @@ -17,7 +17,12 @@ import Text from "./Text"; import Unsupported from "./Unsupported"; import Matrix from "./Matrix"; import Folder from "./Folder"; -import { canEditFile, type FileInfo, type FileType } from "../utils"; +import { + canEditFile, + getEffectiveFileType, + type FileInfo, + type FileType, +} from "../utils"; import type { DataCompProps } from "../utils"; import ViewWrapper from "../../../../../common/page/ViewWrapper"; import type { StudyMetadata } from "../../../../../../common/types"; @@ -38,7 +43,8 @@ const componentByFileType: Record> = { } as const; function Data({ study, setSelectedFile, reloadTreeData, ...fileInfo }: Props) { - const DataViewer = componentByFileType[fileInfo.fileType]; + const fileType = getEffectiveFileType(fileInfo.filePath, fileInfo.fileType); + const DataViewer = componentByFileType[fileType]; return ( diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts b/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts index f0e9c428b8..d546a1e4dc 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts @@ -20,6 +20,7 @@ import DatasetIcon from "@mui/icons-material/Dataset"; import { SvgIconComponent } from "@mui/icons-material"; import * as RA from "ramda-adjunct"; import type { StudyMetadata } from "../../../../../common/types"; +import { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; //////////////////////////////////////////////////////////////// // Types @@ -49,8 +50,13 @@ export interface DataCompProps extends FileInfo { reloadTreeData: () => void; } +interface ContentParsingOptions { + filePath: string; + fileType: string; +} + //////////////////////////////////////////////////////////////// -// Utils +// Constants //////////////////////////////////////////////////////////////// const URL_SCHEMES = { @@ -59,7 +65,14 @@ const URL_SCHEMES = { FILE: "file://", } as const; -const SUPPORTED_EXTENSIONS = [".txt", ".log", ".csv", ".tsv", ".ini"] as const; +const SUPPORTED_EXTENSIONS = [ + ".txt", + ".log", + ".csv", + ".tsv", + ".ini", + ".yml", +] as const; // Maps file types to their corresponding icon components. const iconByFileType: Record = { @@ -70,6 +83,10 @@ const iconByFileType: Record = { unsupported: BlockIcon, } as const; +//////////////////////////////////////////////////////////////// +// Functions +//////////////////////////////////////////////////////////////// + /** * Gets the icon component for a given file type. * @@ -108,15 +125,15 @@ export function getFileType(treeData: TreeData): FileType { // All files except matrices and json-formatted content use this prefix // We filter to only allow extensions that can be properly displayed (.txt, .log, .csv, .tsv, .ini) // Other extensions (like .RDS or .xlsx) are marked as unsupported since they can't be shown in the UI - if ( - treeData.startsWith(URL_SCHEMES.FILE) && - SUPPORTED_EXTENSIONS.some((ext) => treeData.endsWith(ext)) - ) { - return "text"; - } + return treeData.startsWith(URL_SCHEMES.FILE) && + SUPPORTED_EXTENSIONS.some((ext) => + treeData.toLowerCase().endsWith(ext.toLowerCase()), + ) + ? "text" + : "unsupported"; } - return "unsupported"; + return "text"; } /** @@ -130,7 +147,138 @@ export function canEditFile(study: StudyMetadata, filePath: string): boolean { return ( !study.archived && (filePath === "user" || filePath.startsWith("user/")) && - // To remove when Xpansion tool configuration will be moved to "input/expansion" directory + // TODO: remove when Xpansion tool configuration will be moved to "input/expansion" directory !(filePath === "user/expansion" || filePath.startsWith("user/expansion/")) ); } + +/** + * Checks if a file path is within the output folder + * + * @param path - The file path to check + * @returns Whether the path is in the output folder + */ +export function isInOutputFolder(path: string): boolean { + return path.startsWith("output/"); +} + +/** + * Determines if .txt files content is empty + * + * @param text - Content of .txt to check + * @returns boolean indicating if content is effectively empty + */ +export function isEmptyContent(text: string | string[]): boolean { + if (Array.isArray(text)) { + return ( + !text || text.every((line) => typeof line === "string" && !line.trim()) + ); + } + + return typeof text === "string" && !text.trim(); +} + +/** + * !Temporary workaround for matrix data display in output folders. + * + * Context: + * In output folders, matrix data can be returned by the API in two different formats: + * 1. As an unparsed JSON string containing the matrix data + * 2. As an already parsed MatrixDataDTO object + * + * This inconsistency exists because the API's matrix parsing behavior differs between + * output folders and other locations. Additionally, there's a UI requirement to display + * matrices from output folders as raw text rather than formatted tables. + * + * The workaround consists of three functions: + * 1. getEffectiveFileType: Forces matrix files in output folders to use text display + * 2. parseResponse: Handles the dual format nature of the API response + * 3. parseContent: Orchestrates the parsing logic based on file location and type + * + * TODO: This temporary solution will be removed once: + * - The API provides consistent matrix parsing across all folders + * - UI requirements for matrix display are finalized + */ + +/** + * Forces matrix files in output folders to be displayed as text + * This is necessary because matrices in output folders need to be shown + * in their raw format rather than as formatted tables + * + * @param filePath - Path to the file being displayed + * @param originalType - Original file type as determined by the system + * @returns Modified file type (forces 'text' for matrices in output folders) + */ +export function getEffectiveFileType( + filePath: string, + originalType: FileType, +): FileType { + if (isInOutputFolder(filePath) && originalType === "matrix") { + return "text"; + } + + return originalType; +} + +/** + * Formats a 2D number array into a string representation + * + * @param matrix - 2D array of numbers to format + * @returns String representation of the matrix + */ +function formatMatrixToString(matrix: number[][]): string { + return matrix + .map((row) => row.map((val) => val.toString()).join("\t")) + .join("\n"); +} + +/** + * Handles parsing of matrix data from the API, dealing with both + * string and pre-parsed object formats + * + * @param res - API response containing matrix data (either MatrixDataDTO or string) + * @returns Extracted matrix data as a string + */ +function parseResponse(res: string | MatrixDataDTO): string { + if (typeof res === "object") { + // Handle case where API has already parsed the JSON into MatrixDataDTO + return formatMatrixToString(res.data); + } + + try { + // Handle case where API returns unparsed JSON string + // Replace special numeric values with their string representations + const sanitizedJson = res + .replace(/NaN/g, '"NaN"') + .replace(/Infinity/g, '"Infinity"'); + + const parsed = JSON.parse(sanitizedJson); + return formatMatrixToString(parsed.data); + } catch (e) { + // If JSON parsing fails, assume it's plain text + return res; + } +} + +/** + * Main content parsing function that orchestrates the matrix display workaround + * + * @param content - Raw content from the API (either string or parsed object) + * @param options - Configuration options including file path and type + * @returns Processed content ready for display + */ +export function parseContent( + content: string, + options: ContentParsingOptions, +): string { + const { filePath, fileType } = options; + + if (isInOutputFolder(filePath) && fileType === "matrix") { + // Apply special handling for matrices in output folders + return parseResponse(content); + } + + return content || ""; +} + +// !End of Matrix Display Workaround From d51e88c1a0f20b95e959b1d67e401d9f3fb11192 Mon Sep 17 00:00:00 2001 From: mabw-rte <41002227+mabw-rte@users.noreply.github.com> Date: Fri, 13 Dec 2024 17:10:18 +0100 Subject: [PATCH 20/86] feat(aggregation-apis): rename aggregation cols (#2250) --- .../study/business/aggregator_management.py | 46 +- .../details-STstorage-annual.txt | 8 + .../expected_result_sts.csv | 2 + .../test-02-all.result.tsv | 20 +- .../test-02.result.tsv | 9398 +++--- .../test-07.result.tsv | 25058 ++++++++-------- .../test-08-all.result.tsv | 38 +- .../test_aggregate_raw_data.py | 135 +- 8 files changed, 17372 insertions(+), 17333 deletions(-) create mode 100644 tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/details-STstorage-annual.txt create mode 100644 tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/expected_result_sts.csv diff --git a/antarest/study/business/aggregator_management.py b/antarest/study/business/aggregator_management.py index cf7f59ab81..da2bdf846f 100644 --- a/antarest/study/business/aggregator_management.py +++ b/antarest/study/business/aggregator_management.py @@ -41,8 +41,20 @@ """Index in path parts starting from the Monte Carlo year to determine the Monte Carlo year.""" AREA_OR_LINK_INDEX__IND, AREA_OR_LINK_INDEX__ALL = 2, 1 """Indexes in path parts starting from the output root `economy//mc-(ind/all)` to determine the area/link name.""" -PRODUCTION_COLUMN_NAME = "production" +PRODUCTION_COLUMN_NAME_GENERAL = "production" +PRODUCTION_COLUMN_NAME_ST = "levels" PRODUCTION_COLUMN_REGEX = "mwh" +RENAME_MAPPING = { + "NP Cost - Euro": "NP Cost", + "NODU": "NODU", + "P-injection - MW": "P.injection", + "P-withdrawal - MW": "P.withdrawal", + "CashFlow - Euro": "CashFlow", +} +""" +Dictionary to rename columns in a table. +keys are the regexes to fetch for columns to rename, values are the new column names. +""" CLUSTER_ID_COMPONENT = 0 ACTUAL_COLUMN_COMPONENT = 1 DUMMY_COMPONENT = 2 @@ -104,8 +116,9 @@ def _columns_ordering(df_cols: t.List[str], column_name: str, is_details: bool, return new_column_order -def _infer_production_column(cols: t.Sequence[str]) -> t.Optional[str]: - return next((c for c in cols if PRODUCTION_COLUMN_REGEX in c.lower().strip()), None) +def _infer_column_from_regex(cols: t.Sequence[str], col_regex: str) -> t.Optional[str]: + stripped_lower_col_regex = col_regex.lower().strip() + return next((c for c in cols if stripped_lower_col_regex in c.lower().strip()), None) def _infer_time_id(df: pd.DataFrame, is_details: bool) -> t.List[int]: @@ -309,16 +322,31 @@ def _process_df(self, file_path: Path, is_details: bool) -> pd.DataFrame: new_obj[CLUSTER_ID_COL] += [cluster_id for _ in range(df_len)] new_obj[TIME_ID_COL] += list(range(1, df_len + 1)) + # rename the columns + renamed_cols = [] # check if there is a production column to rename it to `PRODUCTION_COLUMN_NAME` - prod_col = _infer_production_column(actual_cols) - if prod_col is not None: - new_obj[PRODUCTION_COLUMN_NAME] = new_obj.pop(prod_col) + prod_col = _infer_column_from_regex(actual_cols, PRODUCTION_COLUMN_REGEX) + if prod_col: + prod_col_name = ( + PRODUCTION_COLUMN_NAME_ST + if ( + self.query_file == MCIndAreasQueryFile.DETAILS_ST_STORAGE + or self.query_file == MCAllAreasQueryFile.DETAILS_ST_STORAGE + ) + else PRODUCTION_COLUMN_NAME_GENERAL + ) + new_obj[prod_col_name] = new_obj.pop(prod_col) actual_cols.remove(prod_col) + renamed_cols.append(prod_col_name) + for col_regex, new_col_name in RENAME_MAPPING.items(): + col_name = _infer_column_from_regex(actual_cols, col_regex) + if col_name: + new_obj[new_col_name] = new_obj.pop(col_name) + actual_cols.remove(col_name) + renamed_cols.append(new_col_name) # reorganize the data frame - # first the production column if it exists - add_prod = [PRODUCTION_COLUMN_NAME] if prod_col is not None else [] - columns_order = [CLUSTER_ID_COL, TIME_ID_COL] + add_prod + list(actual_cols) + columns_order = [CLUSTER_ID_COL, TIME_ID_COL] + renamed_cols + list(actual_cols) df = pd.DataFrame(new_obj).reindex(columns=columns_order).sort_values(by=[TIME_ID_COL, CLUSTER_ID_COL]) df.index = pd.Index(list(range(1, len(df) + 1))) diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/details-STstorage-annual.txt b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/details-STstorage-annual.txt new file mode 100644 index 0000000000..89ae122d47 --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/details-STstorage-annual.txt @@ -0,0 +1,8 @@ +area_1 area sts annual + VARIABLES BEGIN END + 4 1 1 + +area_1 annual storage_1 storage_1 storage_1 storage_1 + P-injection - MW P-withdrawal - MW Levels - MWh CashFlow - Euro + EXP EXP EXP EXP + Annual 0 0 0 0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/expected_result_sts.csv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/expected_result_sts.csv new file mode 100644 index 0000000000..522a83355a --- /dev/null +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/expected_result_sts.csv @@ -0,0 +1,2 @@ +area,cluster,timeId,levels,P.injection,P.withdrawal,CashFlow +de,storage_1,1,0.000000,0.000000,0.000000,0.000000 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02-all.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02-all.result.tsv index c0fdcaf9ce..e1c32d55fa 100644 --- a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02-all.result.tsv +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02-all.result.tsv @@ -1,10 +1,10 @@ -area cluster timeId production NODU NP Cost - Euro -de 01_solar 1 315000.0 167.0 0.0 -de 02_wind_on 1 275000.0 147.0 0.0 -de 03_wind_off 1 235000.0 127.0 0.0 -de 04_res 1 195000.0 107.0 0.0 -de 05_nuclear 1 155000.0 87.0 0.0 -de 06_coal 1 115000.0 67.0 0.0 -de 07_gas 1 75000.0 47.0 0.0 -de 08_non-res 1 35000.0 27.0 0.0 -de 09_hydro_pump 1 2800.0 7.0 0.0 +area cluster timeId production NP Cost NODU +de 01_solar 1 315000.0 0.0 167.0 +de 02_wind_on 1 275000.0 0.0 147.0 +de 03_wind_off 1 235000.0 0.0 127.0 +de 04_res 1 195000.0 0.0 107.0 +de 05_nuclear 1 155000.0 0.0 87.0 +de 06_coal 1 115000.0 0.0 67.0 +de 07_gas 1 75000.0 0.0 47.0 +de 08_non-res 1 35000.0 0.0 27.0 +de 09_hydro_pump 1 2800.0 0.0 7.0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02.result.tsv index 3ae4e16777..f10a5ebc0e 100644 --- a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02.result.tsv +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-02.result.tsv @@ -1,4 +1,4 @@ -area cluster mcYear timeId production NODU NP Cost - Euro +area cluster mcYear timeId production NP Cost NODU de 01_solar 1 1 0.0 0.0 0.0 de 02_wind_on 1 1 0.0 0.0 0.0 de 03_wind_off 1 1 0.0 0.0 0.0 @@ -8,7 +8,7 @@ de 06_coal 1 1 0.0 0.0 0.0 de 07_gas 1 1 0.0 0.0 0.0 de 08_non-res 1 1 0.0 0.0 0.0 de 09_hydro_pump 1 1 0.0 0.0 0.0 -de 01_solar 1 2 100.0 1.0 0.0 +de 01_solar 1 2 100.0 0.0 1.0 de 02_wind_on 1 2 0.0 0.0 0.0 de 03_wind_off 1 2 0.0 0.0 0.0 de 04_res 1 2 0.0 0.0 0.0 @@ -17,7 +17,7 @@ de 06_coal 1 2 0.0 0.0 0.0 de 07_gas 1 2 0.0 0.0 0.0 de 08_non-res 1 2 0.0 0.0 0.0 de 09_hydro_pump 1 2 0.0 0.0 0.0 -de 01_solar 1 3 200.0 1.0 0.0 +de 01_solar 1 3 200.0 0.0 1.0 de 02_wind_on 1 3 0.0 0.0 0.0 de 03_wind_off 1 3 0.0 0.0 0.0 de 04_res 1 3 0.0 0.0 0.0 @@ -26,7 +26,7 @@ de 06_coal 1 3 0.0 0.0 0.0 de 07_gas 1 3 0.0 0.0 0.0 de 08_non-res 1 3 0.0 0.0 0.0 de 09_hydro_pump 1 3 0.0 0.0 0.0 -de 01_solar 1 4 300.0 1.0 0.0 +de 01_solar 1 4 300.0 0.0 1.0 de 02_wind_on 1 4 0.0 0.0 0.0 de 03_wind_off 1 4 0.0 0.0 0.0 de 04_res 1 4 0.0 0.0 0.0 @@ -35,7 +35,7 @@ de 06_coal 1 4 0.0 0.0 0.0 de 07_gas 1 4 0.0 0.0 0.0 de 08_non-res 1 4 0.0 0.0 0.0 de 09_hydro_pump 1 4 0.0 0.0 0.0 -de 01_solar 1 5 400.0 1.0 0.0 +de 01_solar 1 5 400.0 0.0 1.0 de 02_wind_on 1 5 0.0 0.0 0.0 de 03_wind_off 1 5 0.0 0.0 0.0 de 04_res 1 5 0.0 0.0 0.0 @@ -44,7 +44,7 @@ de 06_coal 1 5 0.0 0.0 0.0 de 07_gas 1 5 0.0 0.0 0.0 de 08_non-res 1 5 0.0 0.0 0.0 de 09_hydro_pump 1 5 0.0 0.0 0.0 -de 01_solar 1 6 500.0 1.0 0.0 +de 01_solar 1 6 500.0 0.0 1.0 de 02_wind_on 1 6 0.0 0.0 0.0 de 03_wind_off 1 6 0.0 0.0 0.0 de 04_res 1 6 0.0 0.0 0.0 @@ -53,7 +53,7 @@ de 06_coal 1 6 0.0 0.0 0.0 de 07_gas 1 6 0.0 0.0 0.0 de 08_non-res 1 6 0.0 0.0 0.0 de 09_hydro_pump 1 6 0.0 0.0 0.0 -de 01_solar 1 7 600.0 1.0 0.0 +de 01_solar 1 7 600.0 0.0 1.0 de 02_wind_on 1 7 0.0 0.0 0.0 de 03_wind_off 1 7 0.0 0.0 0.0 de 04_res 1 7 0.0 0.0 0.0 @@ -62,7 +62,7 @@ de 06_coal 1 7 0.0 0.0 0.0 de 07_gas 1 7 0.0 0.0 0.0 de 08_non-res 1 7 0.0 0.0 0.0 de 09_hydro_pump 1 7 0.0 0.0 0.0 -de 01_solar 1 8 700.0 1.0 0.0 +de 01_solar 1 8 700.0 0.0 1.0 de 02_wind_on 1 8 0.0 0.0 0.0 de 03_wind_off 1 8 0.0 0.0 0.0 de 04_res 1 8 0.0 0.0 0.0 @@ -71,7 +71,7 @@ de 06_coal 1 8 0.0 0.0 0.0 de 07_gas 1 8 0.0 0.0 0.0 de 08_non-res 1 8 0.0 0.0 0.0 de 09_hydro_pump 1 8 0.0 0.0 0.0 -de 01_solar 1 9 800.0 1.0 0.0 +de 01_solar 1 9 800.0 0.0 1.0 de 02_wind_on 1 9 0.0 0.0 0.0 de 03_wind_off 1 9 0.0 0.0 0.0 de 04_res 1 9 0.0 0.0 0.0 @@ -80,7 +80,7 @@ de 06_coal 1 9 0.0 0.0 0.0 de 07_gas 1 9 0.0 0.0 0.0 de 08_non-res 1 9 0.0 0.0 0.0 de 09_hydro_pump 1 9 0.0 0.0 0.0 -de 01_solar 1 10 900.0 1.0 0.0 +de 01_solar 1 10 900.0 0.0 1.0 de 02_wind_on 1 10 0.0 0.0 0.0 de 03_wind_off 1 10 0.0 0.0 0.0 de 04_res 1 10 0.0 0.0 0.0 @@ -89,7 +89,7 @@ de 06_coal 1 10 0.0 0.0 0.0 de 07_gas 1 10 0.0 0.0 0.0 de 08_non-res 1 10 0.0 0.0 0.0 de 09_hydro_pump 1 10 0.0 0.0 0.0 -de 01_solar 1 11 1000.0 1.0 0.0 +de 01_solar 1 11 1000.0 0.0 1.0 de 02_wind_on 1 11 0.0 0.0 0.0 de 03_wind_off 1 11 0.0 0.0 0.0 de 04_res 1 11 0.0 0.0 0.0 @@ -98,7 +98,7 @@ de 06_coal 1 11 0.0 0.0 0.0 de 07_gas 1 11 0.0 0.0 0.0 de 08_non-res 1 11 0.0 0.0 0.0 de 09_hydro_pump 1 11 0.0 0.0 0.0 -de 01_solar 1 12 1100.0 1.0 0.0 +de 01_solar 1 12 1100.0 0.0 1.0 de 02_wind_on 1 12 0.0 0.0 0.0 de 03_wind_off 1 12 0.0 0.0 0.0 de 04_res 1 12 0.0 0.0 0.0 @@ -107,7 +107,7 @@ de 06_coal 1 12 0.0 0.0 0.0 de 07_gas 1 12 0.0 0.0 0.0 de 08_non-res 1 12 0.0 0.0 0.0 de 09_hydro_pump 1 12 0.0 0.0 0.0 -de 01_solar 1 13 1200.0 1.0 0.0 +de 01_solar 1 13 1200.0 0.0 1.0 de 02_wind_on 1 13 0.0 0.0 0.0 de 03_wind_off 1 13 0.0 0.0 0.0 de 04_res 1 13 0.0 0.0 0.0 @@ -116,7 +116,7 @@ de 06_coal 1 13 0.0 0.0 0.0 de 07_gas 1 13 0.0 0.0 0.0 de 08_non-res 1 13 0.0 0.0 0.0 de 09_hydro_pump 1 13 0.0 0.0 0.0 -de 01_solar 1 14 1300.0 1.0 0.0 +de 01_solar 1 14 1300.0 0.0 1.0 de 02_wind_on 1 14 0.0 0.0 0.0 de 03_wind_off 1 14 0.0 0.0 0.0 de 04_res 1 14 0.0 0.0 0.0 @@ -125,7 +125,7 @@ de 06_coal 1 14 0.0 0.0 0.0 de 07_gas 1 14 0.0 0.0 0.0 de 08_non-res 1 14 0.0 0.0 0.0 de 09_hydro_pump 1 14 0.0 0.0 0.0 -de 01_solar 1 15 1400.0 1.0 0.0 +de 01_solar 1 15 1400.0 0.0 1.0 de 02_wind_on 1 15 0.0 0.0 0.0 de 03_wind_off 1 15 0.0 0.0 0.0 de 04_res 1 15 0.0 0.0 0.0 @@ -134,7 +134,7 @@ de 06_coal 1 15 0.0 0.0 0.0 de 07_gas 1 15 0.0 0.0 0.0 de 08_non-res 1 15 0.0 0.0 0.0 de 09_hydro_pump 1 15 0.0 0.0 0.0 -de 01_solar 1 16 1500.0 1.0 0.0 +de 01_solar 1 16 1500.0 0.0 1.0 de 02_wind_on 1 16 0.0 0.0 0.0 de 03_wind_off 1 16 0.0 0.0 0.0 de 04_res 1 16 0.0 0.0 0.0 @@ -143,7 +143,7 @@ de 06_coal 1 16 0.0 0.0 0.0 de 07_gas 1 16 0.0 0.0 0.0 de 08_non-res 1 16 0.0 0.0 0.0 de 09_hydro_pump 1 16 0.0 0.0 0.0 -de 01_solar 1 17 1600.0 1.0 0.0 +de 01_solar 1 17 1600.0 0.0 1.0 de 02_wind_on 1 17 0.0 0.0 0.0 de 03_wind_off 1 17 0.0 0.0 0.0 de 04_res 1 17 0.0 0.0 0.0 @@ -152,7 +152,7 @@ de 06_coal 1 17 0.0 0.0 0.0 de 07_gas 1 17 0.0 0.0 0.0 de 08_non-res 1 17 0.0 0.0 0.0 de 09_hydro_pump 1 17 0.0 0.0 0.0 -de 01_solar 1 18 1700.0 1.0 0.0 +de 01_solar 1 18 1700.0 0.0 1.0 de 02_wind_on 1 18 0.0 0.0 0.0 de 03_wind_off 1 18 0.0 0.0 0.0 de 04_res 1 18 0.0 0.0 0.0 @@ -161,7 +161,7 @@ de 06_coal 1 18 0.0 0.0 0.0 de 07_gas 1 18 0.0 0.0 0.0 de 08_non-res 1 18 0.0 0.0 0.0 de 09_hydro_pump 1 18 0.0 0.0 0.0 -de 01_solar 1 19 1800.0 1.0 0.0 +de 01_solar 1 19 1800.0 0.0 1.0 de 02_wind_on 1 19 0.0 0.0 0.0 de 03_wind_off 1 19 0.0 0.0 0.0 de 04_res 1 19 0.0 0.0 0.0 @@ -170,7 +170,7 @@ de 06_coal 1 19 0.0 0.0 0.0 de 07_gas 1 19 0.0 0.0 0.0 de 08_non-res 1 19 0.0 0.0 0.0 de 09_hydro_pump 1 19 0.0 0.0 0.0 -de 01_solar 1 20 1900.0 1.0 0.0 +de 01_solar 1 20 1900.0 0.0 1.0 de 02_wind_on 1 20 0.0 0.0 0.0 de 03_wind_off 1 20 0.0 0.0 0.0 de 04_res 1 20 0.0 0.0 0.0 @@ -179,7 +179,7 @@ de 06_coal 1 20 0.0 0.0 0.0 de 07_gas 1 20 0.0 0.0 0.0 de 08_non-res 1 20 0.0 0.0 0.0 de 09_hydro_pump 1 20 0.0 0.0 0.0 -de 01_solar 1 21 2000.0 1.0 0.0 +de 01_solar 1 21 2000.0 0.0 1.0 de 02_wind_on 1 21 0.0 0.0 0.0 de 03_wind_off 1 21 0.0 0.0 0.0 de 04_res 1 21 0.0 0.0 0.0 @@ -188,8 +188,8 @@ de 06_coal 1 21 0.0 0.0 0.0 de 07_gas 1 21 0.0 0.0 0.0 de 08_non-res 1 21 0.0 0.0 0.0 de 09_hydro_pump 1 21 0.0 0.0 0.0 -de 01_solar 1 22 2000.0 1.0 0.0 -de 02_wind_on 1 22 100.0 1.0 0.0 +de 01_solar 1 22 2000.0 0.0 1.0 +de 02_wind_on 1 22 100.0 0.0 1.0 de 03_wind_off 1 22 0.0 0.0 0.0 de 04_res 1 22 0.0 0.0 0.0 de 05_nuclear 1 22 0.0 0.0 0.0 @@ -197,8 +197,8 @@ de 06_coal 1 22 0.0 0.0 0.0 de 07_gas 1 22 0.0 0.0 0.0 de 08_non-res 1 22 0.0 0.0 0.0 de 09_hydro_pump 1 22 0.0 0.0 0.0 -de 01_solar 1 23 2000.0 1.0 0.0 -de 02_wind_on 1 23 200.0 1.0 0.0 +de 01_solar 1 23 2000.0 0.0 1.0 +de 02_wind_on 1 23 200.0 0.0 1.0 de 03_wind_off 1 23 0.0 0.0 0.0 de 04_res 1 23 0.0 0.0 0.0 de 05_nuclear 1 23 0.0 0.0 0.0 @@ -206,8 +206,8 @@ de 06_coal 1 23 0.0 0.0 0.0 de 07_gas 1 23 0.0 0.0 0.0 de 08_non-res 1 23 0.0 0.0 0.0 de 09_hydro_pump 1 23 0.0 0.0 0.0 -de 01_solar 1 24 2000.0 1.0 0.0 -de 02_wind_on 1 24 300.0 1.0 0.0 +de 01_solar 1 24 2000.0 0.0 1.0 +de 02_wind_on 1 24 300.0 0.0 1.0 de 03_wind_off 1 24 0.0 0.0 0.0 de 04_res 1 24 0.0 0.0 0.0 de 05_nuclear 1 24 0.0 0.0 0.0 @@ -215,8 +215,8 @@ de 06_coal 1 24 0.0 0.0 0.0 de 07_gas 1 24 0.0 0.0 0.0 de 08_non-res 1 24 0.0 0.0 0.0 de 09_hydro_pump 1 24 0.0 0.0 0.0 -de 01_solar 1 25 2000.0 1.0 0.0 -de 02_wind_on 1 25 400.0 1.0 0.0 +de 01_solar 1 25 2000.0 0.0 1.0 +de 02_wind_on 1 25 400.0 0.0 1.0 de 03_wind_off 1 25 0.0 0.0 0.0 de 04_res 1 25 0.0 0.0 0.0 de 05_nuclear 1 25 0.0 0.0 0.0 @@ -224,8 +224,8 @@ de 06_coal 1 25 0.0 0.0 0.0 de 07_gas 1 25 0.0 0.0 0.0 de 08_non-res 1 25 0.0 0.0 0.0 de 09_hydro_pump 1 25 0.0 0.0 0.0 -de 01_solar 1 26 2000.0 1.0 0.0 -de 02_wind_on 1 26 500.0 1.0 0.0 +de 01_solar 1 26 2000.0 0.0 1.0 +de 02_wind_on 1 26 500.0 0.0 1.0 de 03_wind_off 1 26 0.0 0.0 0.0 de 04_res 1 26 0.0 0.0 0.0 de 05_nuclear 1 26 0.0 0.0 0.0 @@ -233,8 +233,8 @@ de 06_coal 1 26 0.0 0.0 0.0 de 07_gas 1 26 0.0 0.0 0.0 de 08_non-res 1 26 0.0 0.0 0.0 de 09_hydro_pump 1 26 0.0 0.0 0.0 -de 01_solar 1 27 2000.0 1.0 0.0 -de 02_wind_on 1 27 600.0 1.0 0.0 +de 01_solar 1 27 2000.0 0.0 1.0 +de 02_wind_on 1 27 600.0 0.0 1.0 de 03_wind_off 1 27 0.0 0.0 0.0 de 04_res 1 27 0.0 0.0 0.0 de 05_nuclear 1 27 0.0 0.0 0.0 @@ -242,8 +242,8 @@ de 06_coal 1 27 0.0 0.0 0.0 de 07_gas 1 27 0.0 0.0 0.0 de 08_non-res 1 27 0.0 0.0 0.0 de 09_hydro_pump 1 27 0.0 0.0 0.0 -de 01_solar 1 28 2000.0 1.0 0.0 -de 02_wind_on 1 28 700.0 1.0 0.0 +de 01_solar 1 28 2000.0 0.0 1.0 +de 02_wind_on 1 28 700.0 0.0 1.0 de 03_wind_off 1 28 0.0 0.0 0.0 de 04_res 1 28 0.0 0.0 0.0 de 05_nuclear 1 28 0.0 0.0 0.0 @@ -251,8 +251,8 @@ de 06_coal 1 28 0.0 0.0 0.0 de 07_gas 1 28 0.0 0.0 0.0 de 08_non-res 1 28 0.0 0.0 0.0 de 09_hydro_pump 1 28 0.0 0.0 0.0 -de 01_solar 1 29 2000.0 1.0 0.0 -de 02_wind_on 1 29 800.0 1.0 0.0 +de 01_solar 1 29 2000.0 0.0 1.0 +de 02_wind_on 1 29 800.0 0.0 1.0 de 03_wind_off 1 29 0.0 0.0 0.0 de 04_res 1 29 0.0 0.0 0.0 de 05_nuclear 1 29 0.0 0.0 0.0 @@ -260,8 +260,8 @@ de 06_coal 1 29 0.0 0.0 0.0 de 07_gas 1 29 0.0 0.0 0.0 de 08_non-res 1 29 0.0 0.0 0.0 de 09_hydro_pump 1 29 0.0 0.0 0.0 -de 01_solar 1 30 2000.0 1.0 0.0 -de 02_wind_on 1 30 900.0 1.0 0.0 +de 01_solar 1 30 2000.0 0.0 1.0 +de 02_wind_on 1 30 900.0 0.0 1.0 de 03_wind_off 1 30 0.0 0.0 0.0 de 04_res 1 30 0.0 0.0 0.0 de 05_nuclear 1 30 0.0 0.0 0.0 @@ -269,8 +269,8 @@ de 06_coal 1 30 0.0 0.0 0.0 de 07_gas 1 30 0.0 0.0 0.0 de 08_non-res 1 30 0.0 0.0 0.0 de 09_hydro_pump 1 30 0.0 0.0 0.0 -de 01_solar 1 31 2000.0 1.0 0.0 -de 02_wind_on 1 31 1000.0 1.0 0.0 +de 01_solar 1 31 2000.0 0.0 1.0 +de 02_wind_on 1 31 1000.0 0.0 1.0 de 03_wind_off 1 31 0.0 0.0 0.0 de 04_res 1 31 0.0 0.0 0.0 de 05_nuclear 1 31 0.0 0.0 0.0 @@ -278,8 +278,8 @@ de 06_coal 1 31 0.0 0.0 0.0 de 07_gas 1 31 0.0 0.0 0.0 de 08_non-res 1 31 0.0 0.0 0.0 de 09_hydro_pump 1 31 0.0 0.0 0.0 -de 01_solar 1 32 2000.0 1.0 0.0 -de 02_wind_on 1 32 1100.0 1.0 0.0 +de 01_solar 1 32 2000.0 0.0 1.0 +de 02_wind_on 1 32 1100.0 0.0 1.0 de 03_wind_off 1 32 0.0 0.0 0.0 de 04_res 1 32 0.0 0.0 0.0 de 05_nuclear 1 32 0.0 0.0 0.0 @@ -287,8 +287,8 @@ de 06_coal 1 32 0.0 0.0 0.0 de 07_gas 1 32 0.0 0.0 0.0 de 08_non-res 1 32 0.0 0.0 0.0 de 09_hydro_pump 1 32 0.0 0.0 0.0 -de 01_solar 1 33 2000.0 1.0 0.0 -de 02_wind_on 1 33 1200.0 1.0 0.0 +de 01_solar 1 33 2000.0 0.0 1.0 +de 02_wind_on 1 33 1200.0 0.0 1.0 de 03_wind_off 1 33 0.0 0.0 0.0 de 04_res 1 33 0.0 0.0 0.0 de 05_nuclear 1 33 0.0 0.0 0.0 @@ -296,8 +296,8 @@ de 06_coal 1 33 0.0 0.0 0.0 de 07_gas 1 33 0.0 0.0 0.0 de 08_non-res 1 33 0.0 0.0 0.0 de 09_hydro_pump 1 33 0.0 0.0 0.0 -de 01_solar 1 34 2000.0 1.0 0.0 -de 02_wind_on 1 34 1300.0 1.0 0.0 +de 01_solar 1 34 2000.0 0.0 1.0 +de 02_wind_on 1 34 1300.0 0.0 1.0 de 03_wind_off 1 34 0.0 0.0 0.0 de 04_res 1 34 0.0 0.0 0.0 de 05_nuclear 1 34 0.0 0.0 0.0 @@ -305,8 +305,8 @@ de 06_coal 1 34 0.0 0.0 0.0 de 07_gas 1 34 0.0 0.0 0.0 de 08_non-res 1 34 0.0 0.0 0.0 de 09_hydro_pump 1 34 0.0 0.0 0.0 -de 01_solar 1 35 2000.0 1.0 0.0 -de 02_wind_on 1 35 1400.0 1.0 0.0 +de 01_solar 1 35 2000.0 0.0 1.0 +de 02_wind_on 1 35 1400.0 0.0 1.0 de 03_wind_off 1 35 0.0 0.0 0.0 de 04_res 1 35 0.0 0.0 0.0 de 05_nuclear 1 35 0.0 0.0 0.0 @@ -314,8 +314,8 @@ de 06_coal 1 35 0.0 0.0 0.0 de 07_gas 1 35 0.0 0.0 0.0 de 08_non-res 1 35 0.0 0.0 0.0 de 09_hydro_pump 1 35 0.0 0.0 0.0 -de 01_solar 1 36 2000.0 1.0 0.0 -de 02_wind_on 1 36 1500.0 1.0 0.0 +de 01_solar 1 36 2000.0 0.0 1.0 +de 02_wind_on 1 36 1500.0 0.0 1.0 de 03_wind_off 1 36 0.0 0.0 0.0 de 04_res 1 36 0.0 0.0 0.0 de 05_nuclear 1 36 0.0 0.0 0.0 @@ -323,8 +323,8 @@ de 06_coal 1 36 0.0 0.0 0.0 de 07_gas 1 36 0.0 0.0 0.0 de 08_non-res 1 36 0.0 0.0 0.0 de 09_hydro_pump 1 36 0.0 0.0 0.0 -de 01_solar 1 37 2000.0 1.0 0.0 -de 02_wind_on 1 37 1600.0 1.0 0.0 +de 01_solar 1 37 2000.0 0.0 1.0 +de 02_wind_on 1 37 1600.0 0.0 1.0 de 03_wind_off 1 37 0.0 0.0 0.0 de 04_res 1 37 0.0 0.0 0.0 de 05_nuclear 1 37 0.0 0.0 0.0 @@ -332,8 +332,8 @@ de 06_coal 1 37 0.0 0.0 0.0 de 07_gas 1 37 0.0 0.0 0.0 de 08_non-res 1 37 0.0 0.0 0.0 de 09_hydro_pump 1 37 0.0 0.0 0.0 -de 01_solar 1 38 2000.0 1.0 0.0 -de 02_wind_on 1 38 1700.0 1.0 0.0 +de 01_solar 1 38 2000.0 0.0 1.0 +de 02_wind_on 1 38 1700.0 0.0 1.0 de 03_wind_off 1 38 0.0 0.0 0.0 de 04_res 1 38 0.0 0.0 0.0 de 05_nuclear 1 38 0.0 0.0 0.0 @@ -341,8 +341,8 @@ de 06_coal 1 38 0.0 0.0 0.0 de 07_gas 1 38 0.0 0.0 0.0 de 08_non-res 1 38 0.0 0.0 0.0 de 09_hydro_pump 1 38 0.0 0.0 0.0 -de 01_solar 1 39 2000.0 1.0 0.0 -de 02_wind_on 1 39 1800.0 1.0 0.0 +de 01_solar 1 39 2000.0 0.0 1.0 +de 02_wind_on 1 39 1800.0 0.0 1.0 de 03_wind_off 1 39 0.0 0.0 0.0 de 04_res 1 39 0.0 0.0 0.0 de 05_nuclear 1 39 0.0 0.0 0.0 @@ -350,8 +350,8 @@ de 06_coal 1 39 0.0 0.0 0.0 de 07_gas 1 39 0.0 0.0 0.0 de 08_non-res 1 39 0.0 0.0 0.0 de 09_hydro_pump 1 39 0.0 0.0 0.0 -de 01_solar 1 40 2000.0 1.0 0.0 -de 02_wind_on 1 40 1900.0 1.0 0.0 +de 01_solar 1 40 2000.0 0.0 1.0 +de 02_wind_on 1 40 1900.0 0.0 1.0 de 03_wind_off 1 40 0.0 0.0 0.0 de 04_res 1 40 0.0 0.0 0.0 de 05_nuclear 1 40 0.0 0.0 0.0 @@ -359,8 +359,8 @@ de 06_coal 1 40 0.0 0.0 0.0 de 07_gas 1 40 0.0 0.0 0.0 de 08_non-res 1 40 0.0 0.0 0.0 de 09_hydro_pump 1 40 0.0 0.0 0.0 -de 01_solar 1 41 2000.0 1.0 0.0 -de 02_wind_on 1 41 2000.0 1.0 0.0 +de 01_solar 1 41 2000.0 0.0 1.0 +de 02_wind_on 1 41 2000.0 0.0 1.0 de 03_wind_off 1 41 0.0 0.0 0.0 de 04_res 1 41 0.0 0.0 0.0 de 05_nuclear 1 41 0.0 0.0 0.0 @@ -368,1149 +368,1149 @@ de 06_coal 1 41 0.0 0.0 0.0 de 07_gas 1 41 0.0 0.0 0.0 de 08_non-res 1 41 0.0 0.0 0.0 de 09_hydro_pump 1 41 0.0 0.0 0.0 -de 01_solar 1 42 2000.0 1.0 0.0 -de 02_wind_on 1 42 2000.0 1.0 0.0 -de 03_wind_off 1 42 100.0 1.0 0.0 +de 01_solar 1 42 2000.0 0.0 1.0 +de 02_wind_on 1 42 2000.0 0.0 1.0 +de 03_wind_off 1 42 100.0 0.0 1.0 de 04_res 1 42 0.0 0.0 0.0 de 05_nuclear 1 42 0.0 0.0 0.0 de 06_coal 1 42 0.0 0.0 0.0 de 07_gas 1 42 0.0 0.0 0.0 de 08_non-res 1 42 0.0 0.0 0.0 de 09_hydro_pump 1 42 0.0 0.0 0.0 -de 01_solar 1 43 2000.0 1.0 0.0 -de 02_wind_on 1 43 2000.0 1.0 0.0 -de 03_wind_off 1 43 200.0 1.0 0.0 +de 01_solar 1 43 2000.0 0.0 1.0 +de 02_wind_on 1 43 2000.0 0.0 1.0 +de 03_wind_off 1 43 200.0 0.0 1.0 de 04_res 1 43 0.0 0.0 0.0 de 05_nuclear 1 43 0.0 0.0 0.0 de 06_coal 1 43 0.0 0.0 0.0 de 07_gas 1 43 0.0 0.0 0.0 de 08_non-res 1 43 0.0 0.0 0.0 de 09_hydro_pump 1 43 0.0 0.0 0.0 -de 01_solar 1 44 2000.0 1.0 0.0 -de 02_wind_on 1 44 2000.0 1.0 0.0 -de 03_wind_off 1 44 300.0 1.0 0.0 +de 01_solar 1 44 2000.0 0.0 1.0 +de 02_wind_on 1 44 2000.0 0.0 1.0 +de 03_wind_off 1 44 300.0 0.0 1.0 de 04_res 1 44 0.0 0.0 0.0 de 05_nuclear 1 44 0.0 0.0 0.0 de 06_coal 1 44 0.0 0.0 0.0 de 07_gas 1 44 0.0 0.0 0.0 de 08_non-res 1 44 0.0 0.0 0.0 de 09_hydro_pump 1 44 0.0 0.0 0.0 -de 01_solar 1 45 2000.0 1.0 0.0 -de 02_wind_on 1 45 2000.0 1.0 0.0 -de 03_wind_off 1 45 400.0 1.0 0.0 +de 01_solar 1 45 2000.0 0.0 1.0 +de 02_wind_on 1 45 2000.0 0.0 1.0 +de 03_wind_off 1 45 400.0 0.0 1.0 de 04_res 1 45 0.0 0.0 0.0 de 05_nuclear 1 45 0.0 0.0 0.0 de 06_coal 1 45 0.0 0.0 0.0 de 07_gas 1 45 0.0 0.0 0.0 de 08_non-res 1 45 0.0 0.0 0.0 de 09_hydro_pump 1 45 0.0 0.0 0.0 -de 01_solar 1 46 2000.0 1.0 0.0 -de 02_wind_on 1 46 2000.0 1.0 0.0 -de 03_wind_off 1 46 500.0 1.0 0.0 +de 01_solar 1 46 2000.0 0.0 1.0 +de 02_wind_on 1 46 2000.0 0.0 1.0 +de 03_wind_off 1 46 500.0 0.0 1.0 de 04_res 1 46 0.0 0.0 0.0 de 05_nuclear 1 46 0.0 0.0 0.0 de 06_coal 1 46 0.0 0.0 0.0 de 07_gas 1 46 0.0 0.0 0.0 de 08_non-res 1 46 0.0 0.0 0.0 de 09_hydro_pump 1 46 0.0 0.0 0.0 -de 01_solar 1 47 2000.0 1.0 0.0 -de 02_wind_on 1 47 2000.0 1.0 0.0 -de 03_wind_off 1 47 600.0 1.0 0.0 +de 01_solar 1 47 2000.0 0.0 1.0 +de 02_wind_on 1 47 2000.0 0.0 1.0 +de 03_wind_off 1 47 600.0 0.0 1.0 de 04_res 1 47 0.0 0.0 0.0 de 05_nuclear 1 47 0.0 0.0 0.0 de 06_coal 1 47 0.0 0.0 0.0 de 07_gas 1 47 0.0 0.0 0.0 de 08_non-res 1 47 0.0 0.0 0.0 de 09_hydro_pump 1 47 0.0 0.0 0.0 -de 01_solar 1 48 2000.0 1.0 0.0 -de 02_wind_on 1 48 2000.0 1.0 0.0 -de 03_wind_off 1 48 700.0 1.0 0.0 +de 01_solar 1 48 2000.0 0.0 1.0 +de 02_wind_on 1 48 2000.0 0.0 1.0 +de 03_wind_off 1 48 700.0 0.0 1.0 de 04_res 1 48 0.0 0.0 0.0 de 05_nuclear 1 48 0.0 0.0 0.0 de 06_coal 1 48 0.0 0.0 0.0 de 07_gas 1 48 0.0 0.0 0.0 de 08_non-res 1 48 0.0 0.0 0.0 de 09_hydro_pump 1 48 0.0 0.0 0.0 -de 01_solar 1 49 2000.0 1.0 0.0 -de 02_wind_on 1 49 2000.0 1.0 0.0 -de 03_wind_off 1 49 800.0 1.0 0.0 +de 01_solar 1 49 2000.0 0.0 1.0 +de 02_wind_on 1 49 2000.0 0.0 1.0 +de 03_wind_off 1 49 800.0 0.0 1.0 de 04_res 1 49 0.0 0.0 0.0 de 05_nuclear 1 49 0.0 0.0 0.0 de 06_coal 1 49 0.0 0.0 0.0 de 07_gas 1 49 0.0 0.0 0.0 de 08_non-res 1 49 0.0 0.0 0.0 de 09_hydro_pump 1 49 0.0 0.0 0.0 -de 01_solar 1 50 2000.0 1.0 0.0 -de 02_wind_on 1 50 2000.0 1.0 0.0 -de 03_wind_off 1 50 900.0 1.0 0.0 +de 01_solar 1 50 2000.0 0.0 1.0 +de 02_wind_on 1 50 2000.0 0.0 1.0 +de 03_wind_off 1 50 900.0 0.0 1.0 de 04_res 1 50 0.0 0.0 0.0 de 05_nuclear 1 50 0.0 0.0 0.0 de 06_coal 1 50 0.0 0.0 0.0 de 07_gas 1 50 0.0 0.0 0.0 de 08_non-res 1 50 0.0 0.0 0.0 de 09_hydro_pump 1 50 0.0 0.0 0.0 -de 01_solar 1 51 2000.0 1.0 0.0 -de 02_wind_on 1 51 2000.0 1.0 0.0 -de 03_wind_off 1 51 1000.0 1.0 0.0 +de 01_solar 1 51 2000.0 0.0 1.0 +de 02_wind_on 1 51 2000.0 0.0 1.0 +de 03_wind_off 1 51 1000.0 0.0 1.0 de 04_res 1 51 0.0 0.0 0.0 de 05_nuclear 1 51 0.0 0.0 0.0 de 06_coal 1 51 0.0 0.0 0.0 de 07_gas 1 51 0.0 0.0 0.0 de 08_non-res 1 51 0.0 0.0 0.0 de 09_hydro_pump 1 51 0.0 0.0 0.0 -de 01_solar 1 52 2000.0 1.0 0.0 -de 02_wind_on 1 52 2000.0 1.0 0.0 -de 03_wind_off 1 52 1100.0 1.0 0.0 +de 01_solar 1 52 2000.0 0.0 1.0 +de 02_wind_on 1 52 2000.0 0.0 1.0 +de 03_wind_off 1 52 1100.0 0.0 1.0 de 04_res 1 52 0.0 0.0 0.0 de 05_nuclear 1 52 0.0 0.0 0.0 de 06_coal 1 52 0.0 0.0 0.0 de 07_gas 1 52 0.0 0.0 0.0 de 08_non-res 1 52 0.0 0.0 0.0 de 09_hydro_pump 1 52 0.0 0.0 0.0 -de 01_solar 1 53 2000.0 1.0 0.0 -de 02_wind_on 1 53 2000.0 1.0 0.0 -de 03_wind_off 1 53 1200.0 1.0 0.0 +de 01_solar 1 53 2000.0 0.0 1.0 +de 02_wind_on 1 53 2000.0 0.0 1.0 +de 03_wind_off 1 53 1200.0 0.0 1.0 de 04_res 1 53 0.0 0.0 0.0 de 05_nuclear 1 53 0.0 0.0 0.0 de 06_coal 1 53 0.0 0.0 0.0 de 07_gas 1 53 0.0 0.0 0.0 de 08_non-res 1 53 0.0 0.0 0.0 de 09_hydro_pump 1 53 0.0 0.0 0.0 -de 01_solar 1 54 2000.0 1.0 0.0 -de 02_wind_on 1 54 2000.0 1.0 0.0 -de 03_wind_off 1 54 1300.0 1.0 0.0 +de 01_solar 1 54 2000.0 0.0 1.0 +de 02_wind_on 1 54 2000.0 0.0 1.0 +de 03_wind_off 1 54 1300.0 0.0 1.0 de 04_res 1 54 0.0 0.0 0.0 de 05_nuclear 1 54 0.0 0.0 0.0 de 06_coal 1 54 0.0 0.0 0.0 de 07_gas 1 54 0.0 0.0 0.0 de 08_non-res 1 54 0.0 0.0 0.0 de 09_hydro_pump 1 54 0.0 0.0 0.0 -de 01_solar 1 55 2000.0 1.0 0.0 -de 02_wind_on 1 55 2000.0 1.0 0.0 -de 03_wind_off 1 55 1400.0 1.0 0.0 +de 01_solar 1 55 2000.0 0.0 1.0 +de 02_wind_on 1 55 2000.0 0.0 1.0 +de 03_wind_off 1 55 1400.0 0.0 1.0 de 04_res 1 55 0.0 0.0 0.0 de 05_nuclear 1 55 0.0 0.0 0.0 de 06_coal 1 55 0.0 0.0 0.0 de 07_gas 1 55 0.0 0.0 0.0 de 08_non-res 1 55 0.0 0.0 0.0 de 09_hydro_pump 1 55 0.0 0.0 0.0 -de 01_solar 1 56 2000.0 1.0 0.0 -de 02_wind_on 1 56 2000.0 1.0 0.0 -de 03_wind_off 1 56 1500.0 1.0 0.0 +de 01_solar 1 56 2000.0 0.0 1.0 +de 02_wind_on 1 56 2000.0 0.0 1.0 +de 03_wind_off 1 56 1500.0 0.0 1.0 de 04_res 1 56 0.0 0.0 0.0 de 05_nuclear 1 56 0.0 0.0 0.0 de 06_coal 1 56 0.0 0.0 0.0 de 07_gas 1 56 0.0 0.0 0.0 de 08_non-res 1 56 0.0 0.0 0.0 de 09_hydro_pump 1 56 0.0 0.0 0.0 -de 01_solar 1 57 2000.0 1.0 0.0 -de 02_wind_on 1 57 2000.0 1.0 0.0 -de 03_wind_off 1 57 1600.0 1.0 0.0 +de 01_solar 1 57 2000.0 0.0 1.0 +de 02_wind_on 1 57 2000.0 0.0 1.0 +de 03_wind_off 1 57 1600.0 0.0 1.0 de 04_res 1 57 0.0 0.0 0.0 de 05_nuclear 1 57 0.0 0.0 0.0 de 06_coal 1 57 0.0 0.0 0.0 de 07_gas 1 57 0.0 0.0 0.0 de 08_non-res 1 57 0.0 0.0 0.0 de 09_hydro_pump 1 57 0.0 0.0 0.0 -de 01_solar 1 58 2000.0 1.0 0.0 -de 02_wind_on 1 58 2000.0 1.0 0.0 -de 03_wind_off 1 58 1700.0 1.0 0.0 +de 01_solar 1 58 2000.0 0.0 1.0 +de 02_wind_on 1 58 2000.0 0.0 1.0 +de 03_wind_off 1 58 1700.0 0.0 1.0 de 04_res 1 58 0.0 0.0 0.0 de 05_nuclear 1 58 0.0 0.0 0.0 de 06_coal 1 58 0.0 0.0 0.0 de 07_gas 1 58 0.0 0.0 0.0 de 08_non-res 1 58 0.0 0.0 0.0 de 09_hydro_pump 1 58 0.0 0.0 0.0 -de 01_solar 1 59 2000.0 1.0 0.0 -de 02_wind_on 1 59 2000.0 1.0 0.0 -de 03_wind_off 1 59 1800.0 1.0 0.0 +de 01_solar 1 59 2000.0 0.0 1.0 +de 02_wind_on 1 59 2000.0 0.0 1.0 +de 03_wind_off 1 59 1800.0 0.0 1.0 de 04_res 1 59 0.0 0.0 0.0 de 05_nuclear 1 59 0.0 0.0 0.0 de 06_coal 1 59 0.0 0.0 0.0 de 07_gas 1 59 0.0 0.0 0.0 de 08_non-res 1 59 0.0 0.0 0.0 de 09_hydro_pump 1 59 0.0 0.0 0.0 -de 01_solar 1 60 2000.0 1.0 0.0 -de 02_wind_on 1 60 2000.0 1.0 0.0 -de 03_wind_off 1 60 1900.0 1.0 0.0 +de 01_solar 1 60 2000.0 0.0 1.0 +de 02_wind_on 1 60 2000.0 0.0 1.0 +de 03_wind_off 1 60 1900.0 0.0 1.0 de 04_res 1 60 0.0 0.0 0.0 de 05_nuclear 1 60 0.0 0.0 0.0 de 06_coal 1 60 0.0 0.0 0.0 de 07_gas 1 60 0.0 0.0 0.0 de 08_non-res 1 60 0.0 0.0 0.0 de 09_hydro_pump 1 60 0.0 0.0 0.0 -de 01_solar 1 61 2000.0 1.0 0.0 -de 02_wind_on 1 61 2000.0 1.0 0.0 -de 03_wind_off 1 61 2000.0 1.0 0.0 +de 01_solar 1 61 2000.0 0.0 1.0 +de 02_wind_on 1 61 2000.0 0.0 1.0 +de 03_wind_off 1 61 2000.0 0.0 1.0 de 04_res 1 61 0.0 0.0 0.0 de 05_nuclear 1 61 0.0 0.0 0.0 de 06_coal 1 61 0.0 0.0 0.0 de 07_gas 1 61 0.0 0.0 0.0 de 08_non-res 1 61 0.0 0.0 0.0 de 09_hydro_pump 1 61 0.0 0.0 0.0 -de 01_solar 1 62 2000.0 1.0 0.0 -de 02_wind_on 1 62 2000.0 1.0 0.0 -de 03_wind_off 1 62 2000.0 1.0 0.0 -de 04_res 1 62 100.0 1.0 0.0 +de 01_solar 1 62 2000.0 0.0 1.0 +de 02_wind_on 1 62 2000.0 0.0 1.0 +de 03_wind_off 1 62 2000.0 0.0 1.0 +de 04_res 1 62 100.0 0.0 1.0 de 05_nuclear 1 62 0.0 0.0 0.0 de 06_coal 1 62 0.0 0.0 0.0 de 07_gas 1 62 0.0 0.0 0.0 de 08_non-res 1 62 0.0 0.0 0.0 de 09_hydro_pump 1 62 0.0 0.0 0.0 -de 01_solar 1 63 2000.0 1.0 0.0 -de 02_wind_on 1 63 2000.0 1.0 0.0 -de 03_wind_off 1 63 2000.0 1.0 0.0 -de 04_res 1 63 200.0 1.0 0.0 +de 01_solar 1 63 2000.0 0.0 1.0 +de 02_wind_on 1 63 2000.0 0.0 1.0 +de 03_wind_off 1 63 2000.0 0.0 1.0 +de 04_res 1 63 200.0 0.0 1.0 de 05_nuclear 1 63 0.0 0.0 0.0 de 06_coal 1 63 0.0 0.0 0.0 de 07_gas 1 63 0.0 0.0 0.0 de 08_non-res 1 63 0.0 0.0 0.0 de 09_hydro_pump 1 63 0.0 0.0 0.0 -de 01_solar 1 64 2000.0 1.0 0.0 -de 02_wind_on 1 64 2000.0 1.0 0.0 -de 03_wind_off 1 64 2000.0 1.0 0.0 -de 04_res 1 64 300.0 1.0 0.0 +de 01_solar 1 64 2000.0 0.0 1.0 +de 02_wind_on 1 64 2000.0 0.0 1.0 +de 03_wind_off 1 64 2000.0 0.0 1.0 +de 04_res 1 64 300.0 0.0 1.0 de 05_nuclear 1 64 0.0 0.0 0.0 de 06_coal 1 64 0.0 0.0 0.0 de 07_gas 1 64 0.0 0.0 0.0 de 08_non-res 1 64 0.0 0.0 0.0 de 09_hydro_pump 1 64 0.0 0.0 0.0 -de 01_solar 1 65 2000.0 1.0 0.0 -de 02_wind_on 1 65 2000.0 1.0 0.0 -de 03_wind_off 1 65 2000.0 1.0 0.0 -de 04_res 1 65 400.0 1.0 0.0 +de 01_solar 1 65 2000.0 0.0 1.0 +de 02_wind_on 1 65 2000.0 0.0 1.0 +de 03_wind_off 1 65 2000.0 0.0 1.0 +de 04_res 1 65 400.0 0.0 1.0 de 05_nuclear 1 65 0.0 0.0 0.0 de 06_coal 1 65 0.0 0.0 0.0 de 07_gas 1 65 0.0 0.0 0.0 de 08_non-res 1 65 0.0 0.0 0.0 de 09_hydro_pump 1 65 0.0 0.0 0.0 -de 01_solar 1 66 2000.0 1.0 0.0 -de 02_wind_on 1 66 2000.0 1.0 0.0 -de 03_wind_off 1 66 2000.0 1.0 0.0 -de 04_res 1 66 500.0 1.0 0.0 +de 01_solar 1 66 2000.0 0.0 1.0 +de 02_wind_on 1 66 2000.0 0.0 1.0 +de 03_wind_off 1 66 2000.0 0.0 1.0 +de 04_res 1 66 500.0 0.0 1.0 de 05_nuclear 1 66 0.0 0.0 0.0 de 06_coal 1 66 0.0 0.0 0.0 de 07_gas 1 66 0.0 0.0 0.0 de 08_non-res 1 66 0.0 0.0 0.0 de 09_hydro_pump 1 66 0.0 0.0 0.0 -de 01_solar 1 67 2000.0 1.0 0.0 -de 02_wind_on 1 67 2000.0 1.0 0.0 -de 03_wind_off 1 67 2000.0 1.0 0.0 -de 04_res 1 67 600.0 1.0 0.0 +de 01_solar 1 67 2000.0 0.0 1.0 +de 02_wind_on 1 67 2000.0 0.0 1.0 +de 03_wind_off 1 67 2000.0 0.0 1.0 +de 04_res 1 67 600.0 0.0 1.0 de 05_nuclear 1 67 0.0 0.0 0.0 de 06_coal 1 67 0.0 0.0 0.0 de 07_gas 1 67 0.0 0.0 0.0 de 08_non-res 1 67 0.0 0.0 0.0 de 09_hydro_pump 1 67 0.0 0.0 0.0 -de 01_solar 1 68 2000.0 1.0 0.0 -de 02_wind_on 1 68 2000.0 1.0 0.0 -de 03_wind_off 1 68 2000.0 1.0 0.0 -de 04_res 1 68 700.0 1.0 0.0 +de 01_solar 1 68 2000.0 0.0 1.0 +de 02_wind_on 1 68 2000.0 0.0 1.0 +de 03_wind_off 1 68 2000.0 0.0 1.0 +de 04_res 1 68 700.0 0.0 1.0 de 05_nuclear 1 68 0.0 0.0 0.0 de 06_coal 1 68 0.0 0.0 0.0 de 07_gas 1 68 0.0 0.0 0.0 de 08_non-res 1 68 0.0 0.0 0.0 de 09_hydro_pump 1 68 0.0 0.0 0.0 -de 01_solar 1 69 2000.0 1.0 0.0 -de 02_wind_on 1 69 2000.0 1.0 0.0 -de 03_wind_off 1 69 2000.0 1.0 0.0 -de 04_res 1 69 800.0 1.0 0.0 +de 01_solar 1 69 2000.0 0.0 1.0 +de 02_wind_on 1 69 2000.0 0.0 1.0 +de 03_wind_off 1 69 2000.0 0.0 1.0 +de 04_res 1 69 800.0 0.0 1.0 de 05_nuclear 1 69 0.0 0.0 0.0 de 06_coal 1 69 0.0 0.0 0.0 de 07_gas 1 69 0.0 0.0 0.0 de 08_non-res 1 69 0.0 0.0 0.0 de 09_hydro_pump 1 69 0.0 0.0 0.0 -de 01_solar 1 70 2000.0 1.0 0.0 -de 02_wind_on 1 70 2000.0 1.0 0.0 -de 03_wind_off 1 70 2000.0 1.0 0.0 -de 04_res 1 70 900.0 1.0 0.0 +de 01_solar 1 70 2000.0 0.0 1.0 +de 02_wind_on 1 70 2000.0 0.0 1.0 +de 03_wind_off 1 70 2000.0 0.0 1.0 +de 04_res 1 70 900.0 0.0 1.0 de 05_nuclear 1 70 0.0 0.0 0.0 de 06_coal 1 70 0.0 0.0 0.0 de 07_gas 1 70 0.0 0.0 0.0 de 08_non-res 1 70 0.0 0.0 0.0 de 09_hydro_pump 1 70 0.0 0.0 0.0 -de 01_solar 1 71 2000.0 1.0 0.0 -de 02_wind_on 1 71 2000.0 1.0 0.0 -de 03_wind_off 1 71 2000.0 1.0 0.0 -de 04_res 1 71 1000.0 1.0 0.0 +de 01_solar 1 71 2000.0 0.0 1.0 +de 02_wind_on 1 71 2000.0 0.0 1.0 +de 03_wind_off 1 71 2000.0 0.0 1.0 +de 04_res 1 71 1000.0 0.0 1.0 de 05_nuclear 1 71 0.0 0.0 0.0 de 06_coal 1 71 0.0 0.0 0.0 de 07_gas 1 71 0.0 0.0 0.0 de 08_non-res 1 71 0.0 0.0 0.0 de 09_hydro_pump 1 71 0.0 0.0 0.0 -de 01_solar 1 72 2000.0 1.0 0.0 -de 02_wind_on 1 72 2000.0 1.0 0.0 -de 03_wind_off 1 72 2000.0 1.0 0.0 -de 04_res 1 72 1100.0 1.0 0.0 +de 01_solar 1 72 2000.0 0.0 1.0 +de 02_wind_on 1 72 2000.0 0.0 1.0 +de 03_wind_off 1 72 2000.0 0.0 1.0 +de 04_res 1 72 1100.0 0.0 1.0 de 05_nuclear 1 72 0.0 0.0 0.0 de 06_coal 1 72 0.0 0.0 0.0 de 07_gas 1 72 0.0 0.0 0.0 de 08_non-res 1 72 0.0 0.0 0.0 de 09_hydro_pump 1 72 0.0 0.0 0.0 -de 01_solar 1 73 2000.0 1.0 0.0 -de 02_wind_on 1 73 2000.0 1.0 0.0 -de 03_wind_off 1 73 2000.0 1.0 0.0 -de 04_res 1 73 1200.0 1.0 0.0 +de 01_solar 1 73 2000.0 0.0 1.0 +de 02_wind_on 1 73 2000.0 0.0 1.0 +de 03_wind_off 1 73 2000.0 0.0 1.0 +de 04_res 1 73 1200.0 0.0 1.0 de 05_nuclear 1 73 0.0 0.0 0.0 de 06_coal 1 73 0.0 0.0 0.0 de 07_gas 1 73 0.0 0.0 0.0 de 08_non-res 1 73 0.0 0.0 0.0 de 09_hydro_pump 1 73 0.0 0.0 0.0 -de 01_solar 1 74 2000.0 1.0 0.0 -de 02_wind_on 1 74 2000.0 1.0 0.0 -de 03_wind_off 1 74 2000.0 1.0 0.0 -de 04_res 1 74 1300.0 1.0 0.0 +de 01_solar 1 74 2000.0 0.0 1.0 +de 02_wind_on 1 74 2000.0 0.0 1.0 +de 03_wind_off 1 74 2000.0 0.0 1.0 +de 04_res 1 74 1300.0 0.0 1.0 de 05_nuclear 1 74 0.0 0.0 0.0 de 06_coal 1 74 0.0 0.0 0.0 de 07_gas 1 74 0.0 0.0 0.0 de 08_non-res 1 74 0.0 0.0 0.0 de 09_hydro_pump 1 74 0.0 0.0 0.0 -de 01_solar 1 75 2000.0 1.0 0.0 -de 02_wind_on 1 75 2000.0 1.0 0.0 -de 03_wind_off 1 75 2000.0 1.0 0.0 -de 04_res 1 75 1400.0 1.0 0.0 +de 01_solar 1 75 2000.0 0.0 1.0 +de 02_wind_on 1 75 2000.0 0.0 1.0 +de 03_wind_off 1 75 2000.0 0.0 1.0 +de 04_res 1 75 1400.0 0.0 1.0 de 05_nuclear 1 75 0.0 0.0 0.0 de 06_coal 1 75 0.0 0.0 0.0 de 07_gas 1 75 0.0 0.0 0.0 de 08_non-res 1 75 0.0 0.0 0.0 de 09_hydro_pump 1 75 0.0 0.0 0.0 -de 01_solar 1 76 2000.0 1.0 0.0 -de 02_wind_on 1 76 2000.0 1.0 0.0 -de 03_wind_off 1 76 2000.0 1.0 0.0 -de 04_res 1 76 1500.0 1.0 0.0 +de 01_solar 1 76 2000.0 0.0 1.0 +de 02_wind_on 1 76 2000.0 0.0 1.0 +de 03_wind_off 1 76 2000.0 0.0 1.0 +de 04_res 1 76 1500.0 0.0 1.0 de 05_nuclear 1 76 0.0 0.0 0.0 de 06_coal 1 76 0.0 0.0 0.0 de 07_gas 1 76 0.0 0.0 0.0 de 08_non-res 1 76 0.0 0.0 0.0 de 09_hydro_pump 1 76 0.0 0.0 0.0 -de 01_solar 1 77 2000.0 1.0 0.0 -de 02_wind_on 1 77 2000.0 1.0 0.0 -de 03_wind_off 1 77 2000.0 1.0 0.0 -de 04_res 1 77 1600.0 1.0 0.0 +de 01_solar 1 77 2000.0 0.0 1.0 +de 02_wind_on 1 77 2000.0 0.0 1.0 +de 03_wind_off 1 77 2000.0 0.0 1.0 +de 04_res 1 77 1600.0 0.0 1.0 de 05_nuclear 1 77 0.0 0.0 0.0 de 06_coal 1 77 0.0 0.0 0.0 de 07_gas 1 77 0.0 0.0 0.0 de 08_non-res 1 77 0.0 0.0 0.0 de 09_hydro_pump 1 77 0.0 0.0 0.0 -de 01_solar 1 78 2000.0 1.0 0.0 -de 02_wind_on 1 78 2000.0 1.0 0.0 -de 03_wind_off 1 78 2000.0 1.0 0.0 -de 04_res 1 78 1700.0 1.0 0.0 +de 01_solar 1 78 2000.0 0.0 1.0 +de 02_wind_on 1 78 2000.0 0.0 1.0 +de 03_wind_off 1 78 2000.0 0.0 1.0 +de 04_res 1 78 1700.0 0.0 1.0 de 05_nuclear 1 78 0.0 0.0 0.0 de 06_coal 1 78 0.0 0.0 0.0 de 07_gas 1 78 0.0 0.0 0.0 de 08_non-res 1 78 0.0 0.0 0.0 de 09_hydro_pump 1 78 0.0 0.0 0.0 -de 01_solar 1 79 2000.0 1.0 0.0 -de 02_wind_on 1 79 2000.0 1.0 0.0 -de 03_wind_off 1 79 2000.0 1.0 0.0 -de 04_res 1 79 1800.0 1.0 0.0 +de 01_solar 1 79 2000.0 0.0 1.0 +de 02_wind_on 1 79 2000.0 0.0 1.0 +de 03_wind_off 1 79 2000.0 0.0 1.0 +de 04_res 1 79 1800.0 0.0 1.0 de 05_nuclear 1 79 0.0 0.0 0.0 de 06_coal 1 79 0.0 0.0 0.0 de 07_gas 1 79 0.0 0.0 0.0 de 08_non-res 1 79 0.0 0.0 0.0 de 09_hydro_pump 1 79 0.0 0.0 0.0 -de 01_solar 1 80 2000.0 1.0 0.0 -de 02_wind_on 1 80 2000.0 1.0 0.0 -de 03_wind_off 1 80 2000.0 1.0 0.0 -de 04_res 1 80 1900.0 1.0 0.0 +de 01_solar 1 80 2000.0 0.0 1.0 +de 02_wind_on 1 80 2000.0 0.0 1.0 +de 03_wind_off 1 80 2000.0 0.0 1.0 +de 04_res 1 80 1900.0 0.0 1.0 de 05_nuclear 1 80 0.0 0.0 0.0 de 06_coal 1 80 0.0 0.0 0.0 de 07_gas 1 80 0.0 0.0 0.0 de 08_non-res 1 80 0.0 0.0 0.0 de 09_hydro_pump 1 80 0.0 0.0 0.0 -de 01_solar 1 81 2000.0 1.0 0.0 -de 02_wind_on 1 81 2000.0 1.0 0.0 -de 03_wind_off 1 81 2000.0 1.0 0.0 -de 04_res 1 81 2000.0 1.0 0.0 +de 01_solar 1 81 2000.0 0.0 1.0 +de 02_wind_on 1 81 2000.0 0.0 1.0 +de 03_wind_off 1 81 2000.0 0.0 1.0 +de 04_res 1 81 2000.0 0.0 1.0 de 05_nuclear 1 81 0.0 0.0 0.0 de 06_coal 1 81 0.0 0.0 0.0 de 07_gas 1 81 0.0 0.0 0.0 de 08_non-res 1 81 0.0 0.0 0.0 de 09_hydro_pump 1 81 0.0 0.0 0.0 -de 01_solar 1 82 2000.0 1.0 0.0 -de 02_wind_on 1 82 2000.0 1.0 0.0 -de 03_wind_off 1 82 2000.0 1.0 0.0 -de 04_res 1 82 2000.0 1.0 0.0 -de 05_nuclear 1 82 100.0 1.0 0.0 +de 01_solar 1 82 2000.0 0.0 1.0 +de 02_wind_on 1 82 2000.0 0.0 1.0 +de 03_wind_off 1 82 2000.0 0.0 1.0 +de 04_res 1 82 2000.0 0.0 1.0 +de 05_nuclear 1 82 100.0 0.0 1.0 de 06_coal 1 82 0.0 0.0 0.0 de 07_gas 1 82 0.0 0.0 0.0 de 08_non-res 1 82 0.0 0.0 0.0 de 09_hydro_pump 1 82 0.0 0.0 0.0 -de 01_solar 1 83 2000.0 1.0 0.0 -de 02_wind_on 1 83 2000.0 1.0 0.0 -de 03_wind_off 1 83 2000.0 1.0 0.0 -de 04_res 1 83 2000.0 1.0 0.0 -de 05_nuclear 1 83 200.0 1.0 0.0 +de 01_solar 1 83 2000.0 0.0 1.0 +de 02_wind_on 1 83 2000.0 0.0 1.0 +de 03_wind_off 1 83 2000.0 0.0 1.0 +de 04_res 1 83 2000.0 0.0 1.0 +de 05_nuclear 1 83 200.0 0.0 1.0 de 06_coal 1 83 0.0 0.0 0.0 de 07_gas 1 83 0.0 0.0 0.0 de 08_non-res 1 83 0.0 0.0 0.0 de 09_hydro_pump 1 83 0.0 0.0 0.0 -de 01_solar 1 84 2000.0 1.0 0.0 -de 02_wind_on 1 84 2000.0 1.0 0.0 -de 03_wind_off 1 84 2000.0 1.0 0.0 -de 04_res 1 84 2000.0 1.0 0.0 -de 05_nuclear 1 84 300.0 1.0 0.0 +de 01_solar 1 84 2000.0 0.0 1.0 +de 02_wind_on 1 84 2000.0 0.0 1.0 +de 03_wind_off 1 84 2000.0 0.0 1.0 +de 04_res 1 84 2000.0 0.0 1.0 +de 05_nuclear 1 84 300.0 0.0 1.0 de 06_coal 1 84 0.0 0.0 0.0 de 07_gas 1 84 0.0 0.0 0.0 de 08_non-res 1 84 0.0 0.0 0.0 de 09_hydro_pump 1 84 0.0 0.0 0.0 -de 01_solar 1 85 2000.0 1.0 0.0 -de 02_wind_on 1 85 2000.0 1.0 0.0 -de 03_wind_off 1 85 2000.0 1.0 0.0 -de 04_res 1 85 2000.0 1.0 0.0 -de 05_nuclear 1 85 400.0 1.0 0.0 +de 01_solar 1 85 2000.0 0.0 1.0 +de 02_wind_on 1 85 2000.0 0.0 1.0 +de 03_wind_off 1 85 2000.0 0.0 1.0 +de 04_res 1 85 2000.0 0.0 1.0 +de 05_nuclear 1 85 400.0 0.0 1.0 de 06_coal 1 85 0.0 0.0 0.0 de 07_gas 1 85 0.0 0.0 0.0 de 08_non-res 1 85 0.0 0.0 0.0 de 09_hydro_pump 1 85 0.0 0.0 0.0 -de 01_solar 1 86 2000.0 1.0 0.0 -de 02_wind_on 1 86 2000.0 1.0 0.0 -de 03_wind_off 1 86 2000.0 1.0 0.0 -de 04_res 1 86 2000.0 1.0 0.0 -de 05_nuclear 1 86 500.0 1.0 0.0 +de 01_solar 1 86 2000.0 0.0 1.0 +de 02_wind_on 1 86 2000.0 0.0 1.0 +de 03_wind_off 1 86 2000.0 0.0 1.0 +de 04_res 1 86 2000.0 0.0 1.0 +de 05_nuclear 1 86 500.0 0.0 1.0 de 06_coal 1 86 0.0 0.0 0.0 de 07_gas 1 86 0.0 0.0 0.0 de 08_non-res 1 86 0.0 0.0 0.0 de 09_hydro_pump 1 86 0.0 0.0 0.0 -de 01_solar 1 87 2000.0 1.0 0.0 -de 02_wind_on 1 87 2000.0 1.0 0.0 -de 03_wind_off 1 87 2000.0 1.0 0.0 -de 04_res 1 87 2000.0 1.0 0.0 -de 05_nuclear 1 87 600.0 1.0 0.0 +de 01_solar 1 87 2000.0 0.0 1.0 +de 02_wind_on 1 87 2000.0 0.0 1.0 +de 03_wind_off 1 87 2000.0 0.0 1.0 +de 04_res 1 87 2000.0 0.0 1.0 +de 05_nuclear 1 87 600.0 0.0 1.0 de 06_coal 1 87 0.0 0.0 0.0 de 07_gas 1 87 0.0 0.0 0.0 de 08_non-res 1 87 0.0 0.0 0.0 de 09_hydro_pump 1 87 0.0 0.0 0.0 -de 01_solar 1 88 2000.0 1.0 0.0 -de 02_wind_on 1 88 2000.0 1.0 0.0 -de 03_wind_off 1 88 2000.0 1.0 0.0 -de 04_res 1 88 2000.0 1.0 0.0 -de 05_nuclear 1 88 700.0 1.0 0.0 +de 01_solar 1 88 2000.0 0.0 1.0 +de 02_wind_on 1 88 2000.0 0.0 1.0 +de 03_wind_off 1 88 2000.0 0.0 1.0 +de 04_res 1 88 2000.0 0.0 1.0 +de 05_nuclear 1 88 700.0 0.0 1.0 de 06_coal 1 88 0.0 0.0 0.0 de 07_gas 1 88 0.0 0.0 0.0 de 08_non-res 1 88 0.0 0.0 0.0 de 09_hydro_pump 1 88 0.0 0.0 0.0 -de 01_solar 1 89 2000.0 1.0 0.0 -de 02_wind_on 1 89 2000.0 1.0 0.0 -de 03_wind_off 1 89 2000.0 1.0 0.0 -de 04_res 1 89 2000.0 1.0 0.0 -de 05_nuclear 1 89 800.0 1.0 0.0 +de 01_solar 1 89 2000.0 0.0 1.0 +de 02_wind_on 1 89 2000.0 0.0 1.0 +de 03_wind_off 1 89 2000.0 0.0 1.0 +de 04_res 1 89 2000.0 0.0 1.0 +de 05_nuclear 1 89 800.0 0.0 1.0 de 06_coal 1 89 0.0 0.0 0.0 de 07_gas 1 89 0.0 0.0 0.0 de 08_non-res 1 89 0.0 0.0 0.0 de 09_hydro_pump 1 89 0.0 0.0 0.0 -de 01_solar 1 90 2000.0 1.0 0.0 -de 02_wind_on 1 90 2000.0 1.0 0.0 -de 03_wind_off 1 90 2000.0 1.0 0.0 -de 04_res 1 90 2000.0 1.0 0.0 -de 05_nuclear 1 90 900.0 1.0 0.0 +de 01_solar 1 90 2000.0 0.0 1.0 +de 02_wind_on 1 90 2000.0 0.0 1.0 +de 03_wind_off 1 90 2000.0 0.0 1.0 +de 04_res 1 90 2000.0 0.0 1.0 +de 05_nuclear 1 90 900.0 0.0 1.0 de 06_coal 1 90 0.0 0.0 0.0 de 07_gas 1 90 0.0 0.0 0.0 de 08_non-res 1 90 0.0 0.0 0.0 de 09_hydro_pump 1 90 0.0 0.0 0.0 -de 01_solar 1 91 2000.0 1.0 0.0 -de 02_wind_on 1 91 2000.0 1.0 0.0 -de 03_wind_off 1 91 2000.0 1.0 0.0 -de 04_res 1 91 2000.0 1.0 0.0 -de 05_nuclear 1 91 1000.0 1.0 0.0 +de 01_solar 1 91 2000.0 0.0 1.0 +de 02_wind_on 1 91 2000.0 0.0 1.0 +de 03_wind_off 1 91 2000.0 0.0 1.0 +de 04_res 1 91 2000.0 0.0 1.0 +de 05_nuclear 1 91 1000.0 0.0 1.0 de 06_coal 1 91 0.0 0.0 0.0 de 07_gas 1 91 0.0 0.0 0.0 de 08_non-res 1 91 0.0 0.0 0.0 de 09_hydro_pump 1 91 0.0 0.0 0.0 -de 01_solar 1 92 2000.0 1.0 0.0 -de 02_wind_on 1 92 2000.0 1.0 0.0 -de 03_wind_off 1 92 2000.0 1.0 0.0 -de 04_res 1 92 2000.0 1.0 0.0 -de 05_nuclear 1 92 1100.0 1.0 0.0 +de 01_solar 1 92 2000.0 0.0 1.0 +de 02_wind_on 1 92 2000.0 0.0 1.0 +de 03_wind_off 1 92 2000.0 0.0 1.0 +de 04_res 1 92 2000.0 0.0 1.0 +de 05_nuclear 1 92 1100.0 0.0 1.0 de 06_coal 1 92 0.0 0.0 0.0 de 07_gas 1 92 0.0 0.0 0.0 de 08_non-res 1 92 0.0 0.0 0.0 de 09_hydro_pump 1 92 0.0 0.0 0.0 -de 01_solar 1 93 2000.0 1.0 0.0 -de 02_wind_on 1 93 2000.0 1.0 0.0 -de 03_wind_off 1 93 2000.0 1.0 0.0 -de 04_res 1 93 2000.0 1.0 0.0 -de 05_nuclear 1 93 1200.0 1.0 0.0 +de 01_solar 1 93 2000.0 0.0 1.0 +de 02_wind_on 1 93 2000.0 0.0 1.0 +de 03_wind_off 1 93 2000.0 0.0 1.0 +de 04_res 1 93 2000.0 0.0 1.0 +de 05_nuclear 1 93 1200.0 0.0 1.0 de 06_coal 1 93 0.0 0.0 0.0 de 07_gas 1 93 0.0 0.0 0.0 de 08_non-res 1 93 0.0 0.0 0.0 de 09_hydro_pump 1 93 0.0 0.0 0.0 -de 01_solar 1 94 2000.0 1.0 0.0 -de 02_wind_on 1 94 2000.0 1.0 0.0 -de 03_wind_off 1 94 2000.0 1.0 0.0 -de 04_res 1 94 2000.0 1.0 0.0 -de 05_nuclear 1 94 1300.0 1.0 0.0 +de 01_solar 1 94 2000.0 0.0 1.0 +de 02_wind_on 1 94 2000.0 0.0 1.0 +de 03_wind_off 1 94 2000.0 0.0 1.0 +de 04_res 1 94 2000.0 0.0 1.0 +de 05_nuclear 1 94 1300.0 0.0 1.0 de 06_coal 1 94 0.0 0.0 0.0 de 07_gas 1 94 0.0 0.0 0.0 de 08_non-res 1 94 0.0 0.0 0.0 de 09_hydro_pump 1 94 0.0 0.0 0.0 -de 01_solar 1 95 2000.0 1.0 0.0 -de 02_wind_on 1 95 2000.0 1.0 0.0 -de 03_wind_off 1 95 2000.0 1.0 0.0 -de 04_res 1 95 2000.0 1.0 0.0 -de 05_nuclear 1 95 1400.0 1.0 0.0 +de 01_solar 1 95 2000.0 0.0 1.0 +de 02_wind_on 1 95 2000.0 0.0 1.0 +de 03_wind_off 1 95 2000.0 0.0 1.0 +de 04_res 1 95 2000.0 0.0 1.0 +de 05_nuclear 1 95 1400.0 0.0 1.0 de 06_coal 1 95 0.0 0.0 0.0 de 07_gas 1 95 0.0 0.0 0.0 de 08_non-res 1 95 0.0 0.0 0.0 de 09_hydro_pump 1 95 0.0 0.0 0.0 -de 01_solar 1 96 2000.0 1.0 0.0 -de 02_wind_on 1 96 2000.0 1.0 0.0 -de 03_wind_off 1 96 2000.0 1.0 0.0 -de 04_res 1 96 2000.0 1.0 0.0 -de 05_nuclear 1 96 1500.0 1.0 0.0 +de 01_solar 1 96 2000.0 0.0 1.0 +de 02_wind_on 1 96 2000.0 0.0 1.0 +de 03_wind_off 1 96 2000.0 0.0 1.0 +de 04_res 1 96 2000.0 0.0 1.0 +de 05_nuclear 1 96 1500.0 0.0 1.0 de 06_coal 1 96 0.0 0.0 0.0 de 07_gas 1 96 0.0 0.0 0.0 de 08_non-res 1 96 0.0 0.0 0.0 de 09_hydro_pump 1 96 0.0 0.0 0.0 -de 01_solar 1 97 2000.0 1.0 0.0 -de 02_wind_on 1 97 2000.0 1.0 0.0 -de 03_wind_off 1 97 2000.0 1.0 0.0 -de 04_res 1 97 2000.0 1.0 0.0 -de 05_nuclear 1 97 1600.0 1.0 0.0 +de 01_solar 1 97 2000.0 0.0 1.0 +de 02_wind_on 1 97 2000.0 0.0 1.0 +de 03_wind_off 1 97 2000.0 0.0 1.0 +de 04_res 1 97 2000.0 0.0 1.0 +de 05_nuclear 1 97 1600.0 0.0 1.0 de 06_coal 1 97 0.0 0.0 0.0 de 07_gas 1 97 0.0 0.0 0.0 de 08_non-res 1 97 0.0 0.0 0.0 de 09_hydro_pump 1 97 0.0 0.0 0.0 -de 01_solar 1 98 2000.0 1.0 0.0 -de 02_wind_on 1 98 2000.0 1.0 0.0 -de 03_wind_off 1 98 2000.0 1.0 0.0 -de 04_res 1 98 2000.0 1.0 0.0 -de 05_nuclear 1 98 1700.0 1.0 0.0 +de 01_solar 1 98 2000.0 0.0 1.0 +de 02_wind_on 1 98 2000.0 0.0 1.0 +de 03_wind_off 1 98 2000.0 0.0 1.0 +de 04_res 1 98 2000.0 0.0 1.0 +de 05_nuclear 1 98 1700.0 0.0 1.0 de 06_coal 1 98 0.0 0.0 0.0 de 07_gas 1 98 0.0 0.0 0.0 de 08_non-res 1 98 0.0 0.0 0.0 de 09_hydro_pump 1 98 0.0 0.0 0.0 -de 01_solar 1 99 2000.0 1.0 0.0 -de 02_wind_on 1 99 2000.0 1.0 0.0 -de 03_wind_off 1 99 2000.0 1.0 0.0 -de 04_res 1 99 2000.0 1.0 0.0 -de 05_nuclear 1 99 1800.0 1.0 0.0 +de 01_solar 1 99 2000.0 0.0 1.0 +de 02_wind_on 1 99 2000.0 0.0 1.0 +de 03_wind_off 1 99 2000.0 0.0 1.0 +de 04_res 1 99 2000.0 0.0 1.0 +de 05_nuclear 1 99 1800.0 0.0 1.0 de 06_coal 1 99 0.0 0.0 0.0 de 07_gas 1 99 0.0 0.0 0.0 de 08_non-res 1 99 0.0 0.0 0.0 de 09_hydro_pump 1 99 0.0 0.0 0.0 -de 01_solar 1 100 2000.0 1.0 0.0 -de 02_wind_on 1 100 2000.0 1.0 0.0 -de 03_wind_off 1 100 2000.0 1.0 0.0 -de 04_res 1 100 2000.0 1.0 0.0 -de 05_nuclear 1 100 1900.0 1.0 0.0 +de 01_solar 1 100 2000.0 0.0 1.0 +de 02_wind_on 1 100 2000.0 0.0 1.0 +de 03_wind_off 1 100 2000.0 0.0 1.0 +de 04_res 1 100 2000.0 0.0 1.0 +de 05_nuclear 1 100 1900.0 0.0 1.0 de 06_coal 1 100 0.0 0.0 0.0 de 07_gas 1 100 0.0 0.0 0.0 de 08_non-res 1 100 0.0 0.0 0.0 de 09_hydro_pump 1 100 0.0 0.0 0.0 -de 01_solar 1 101 2000.0 1.0 0.0 -de 02_wind_on 1 101 2000.0 1.0 0.0 -de 03_wind_off 1 101 2000.0 1.0 0.0 -de 04_res 1 101 2000.0 1.0 0.0 -de 05_nuclear 1 101 2000.0 1.0 0.0 +de 01_solar 1 101 2000.0 0.0 1.0 +de 02_wind_on 1 101 2000.0 0.0 1.0 +de 03_wind_off 1 101 2000.0 0.0 1.0 +de 04_res 1 101 2000.0 0.0 1.0 +de 05_nuclear 1 101 2000.0 0.0 1.0 de 06_coal 1 101 0.0 0.0 0.0 de 07_gas 1 101 0.0 0.0 0.0 de 08_non-res 1 101 0.0 0.0 0.0 de 09_hydro_pump 1 101 0.0 0.0 0.0 -de 01_solar 1 102 2000.0 1.0 0.0 -de 02_wind_on 1 102 2000.0 1.0 0.0 -de 03_wind_off 1 102 2000.0 1.0 0.0 -de 04_res 1 102 2000.0 1.0 0.0 -de 05_nuclear 1 102 2000.0 1.0 0.0 -de 06_coal 1 102 100.0 1.0 0.0 +de 01_solar 1 102 2000.0 0.0 1.0 +de 02_wind_on 1 102 2000.0 0.0 1.0 +de 03_wind_off 1 102 2000.0 0.0 1.0 +de 04_res 1 102 2000.0 0.0 1.0 +de 05_nuclear 1 102 2000.0 0.0 1.0 +de 06_coal 1 102 100.0 0.0 1.0 de 07_gas 1 102 0.0 0.0 0.0 de 08_non-res 1 102 0.0 0.0 0.0 de 09_hydro_pump 1 102 0.0 0.0 0.0 -de 01_solar 1 103 2000.0 1.0 0.0 -de 02_wind_on 1 103 2000.0 1.0 0.0 -de 03_wind_off 1 103 2000.0 1.0 0.0 -de 04_res 1 103 2000.0 1.0 0.0 -de 05_nuclear 1 103 2000.0 1.0 0.0 -de 06_coal 1 103 200.0 1.0 0.0 +de 01_solar 1 103 2000.0 0.0 1.0 +de 02_wind_on 1 103 2000.0 0.0 1.0 +de 03_wind_off 1 103 2000.0 0.0 1.0 +de 04_res 1 103 2000.0 0.0 1.0 +de 05_nuclear 1 103 2000.0 0.0 1.0 +de 06_coal 1 103 200.0 0.0 1.0 de 07_gas 1 103 0.0 0.0 0.0 de 08_non-res 1 103 0.0 0.0 0.0 de 09_hydro_pump 1 103 0.0 0.0 0.0 -de 01_solar 1 104 2000.0 1.0 0.0 -de 02_wind_on 1 104 2000.0 1.0 0.0 -de 03_wind_off 1 104 2000.0 1.0 0.0 -de 04_res 1 104 2000.0 1.0 0.0 -de 05_nuclear 1 104 2000.0 1.0 0.0 -de 06_coal 1 104 300.0 1.0 0.0 +de 01_solar 1 104 2000.0 0.0 1.0 +de 02_wind_on 1 104 2000.0 0.0 1.0 +de 03_wind_off 1 104 2000.0 0.0 1.0 +de 04_res 1 104 2000.0 0.0 1.0 +de 05_nuclear 1 104 2000.0 0.0 1.0 +de 06_coal 1 104 300.0 0.0 1.0 de 07_gas 1 104 0.0 0.0 0.0 de 08_non-res 1 104 0.0 0.0 0.0 de 09_hydro_pump 1 104 0.0 0.0 0.0 -de 01_solar 1 105 2000.0 1.0 0.0 -de 02_wind_on 1 105 2000.0 1.0 0.0 -de 03_wind_off 1 105 2000.0 1.0 0.0 -de 04_res 1 105 2000.0 1.0 0.0 -de 05_nuclear 1 105 2000.0 1.0 0.0 -de 06_coal 1 105 400.0 1.0 0.0 +de 01_solar 1 105 2000.0 0.0 1.0 +de 02_wind_on 1 105 2000.0 0.0 1.0 +de 03_wind_off 1 105 2000.0 0.0 1.0 +de 04_res 1 105 2000.0 0.0 1.0 +de 05_nuclear 1 105 2000.0 0.0 1.0 +de 06_coal 1 105 400.0 0.0 1.0 de 07_gas 1 105 0.0 0.0 0.0 de 08_non-res 1 105 0.0 0.0 0.0 de 09_hydro_pump 1 105 0.0 0.0 0.0 -de 01_solar 1 106 2000.0 1.0 0.0 -de 02_wind_on 1 106 2000.0 1.0 0.0 -de 03_wind_off 1 106 2000.0 1.0 0.0 -de 04_res 1 106 2000.0 1.0 0.0 -de 05_nuclear 1 106 2000.0 1.0 0.0 -de 06_coal 1 106 500.0 1.0 0.0 +de 01_solar 1 106 2000.0 0.0 1.0 +de 02_wind_on 1 106 2000.0 0.0 1.0 +de 03_wind_off 1 106 2000.0 0.0 1.0 +de 04_res 1 106 2000.0 0.0 1.0 +de 05_nuclear 1 106 2000.0 0.0 1.0 +de 06_coal 1 106 500.0 0.0 1.0 de 07_gas 1 106 0.0 0.0 0.0 de 08_non-res 1 106 0.0 0.0 0.0 de 09_hydro_pump 1 106 0.0 0.0 0.0 -de 01_solar 1 107 2000.0 1.0 0.0 -de 02_wind_on 1 107 2000.0 1.0 0.0 -de 03_wind_off 1 107 2000.0 1.0 0.0 -de 04_res 1 107 2000.0 1.0 0.0 -de 05_nuclear 1 107 2000.0 1.0 0.0 -de 06_coal 1 107 600.0 1.0 0.0 +de 01_solar 1 107 2000.0 0.0 1.0 +de 02_wind_on 1 107 2000.0 0.0 1.0 +de 03_wind_off 1 107 2000.0 0.0 1.0 +de 04_res 1 107 2000.0 0.0 1.0 +de 05_nuclear 1 107 2000.0 0.0 1.0 +de 06_coal 1 107 600.0 0.0 1.0 de 07_gas 1 107 0.0 0.0 0.0 de 08_non-res 1 107 0.0 0.0 0.0 de 09_hydro_pump 1 107 0.0 0.0 0.0 -de 01_solar 1 108 2000.0 1.0 0.0 -de 02_wind_on 1 108 2000.0 1.0 0.0 -de 03_wind_off 1 108 2000.0 1.0 0.0 -de 04_res 1 108 2000.0 1.0 0.0 -de 05_nuclear 1 108 2000.0 1.0 0.0 -de 06_coal 1 108 700.0 1.0 0.0 +de 01_solar 1 108 2000.0 0.0 1.0 +de 02_wind_on 1 108 2000.0 0.0 1.0 +de 03_wind_off 1 108 2000.0 0.0 1.0 +de 04_res 1 108 2000.0 0.0 1.0 +de 05_nuclear 1 108 2000.0 0.0 1.0 +de 06_coal 1 108 700.0 0.0 1.0 de 07_gas 1 108 0.0 0.0 0.0 de 08_non-res 1 108 0.0 0.0 0.0 de 09_hydro_pump 1 108 0.0 0.0 0.0 -de 01_solar 1 109 2000.0 1.0 0.0 -de 02_wind_on 1 109 2000.0 1.0 0.0 -de 03_wind_off 1 109 2000.0 1.0 0.0 -de 04_res 1 109 2000.0 1.0 0.0 -de 05_nuclear 1 109 2000.0 1.0 0.0 -de 06_coal 1 109 800.0 1.0 0.0 +de 01_solar 1 109 2000.0 0.0 1.0 +de 02_wind_on 1 109 2000.0 0.0 1.0 +de 03_wind_off 1 109 2000.0 0.0 1.0 +de 04_res 1 109 2000.0 0.0 1.0 +de 05_nuclear 1 109 2000.0 0.0 1.0 +de 06_coal 1 109 800.0 0.0 1.0 de 07_gas 1 109 0.0 0.0 0.0 de 08_non-res 1 109 0.0 0.0 0.0 de 09_hydro_pump 1 109 0.0 0.0 0.0 -de 01_solar 1 110 2000.0 1.0 0.0 -de 02_wind_on 1 110 2000.0 1.0 0.0 -de 03_wind_off 1 110 2000.0 1.0 0.0 -de 04_res 1 110 2000.0 1.0 0.0 -de 05_nuclear 1 110 2000.0 1.0 0.0 -de 06_coal 1 110 900.0 1.0 0.0 +de 01_solar 1 110 2000.0 0.0 1.0 +de 02_wind_on 1 110 2000.0 0.0 1.0 +de 03_wind_off 1 110 2000.0 0.0 1.0 +de 04_res 1 110 2000.0 0.0 1.0 +de 05_nuclear 1 110 2000.0 0.0 1.0 +de 06_coal 1 110 900.0 0.0 1.0 de 07_gas 1 110 0.0 0.0 0.0 de 08_non-res 1 110 0.0 0.0 0.0 de 09_hydro_pump 1 110 0.0 0.0 0.0 -de 01_solar 1 111 2000.0 1.0 0.0 -de 02_wind_on 1 111 2000.0 1.0 0.0 -de 03_wind_off 1 111 2000.0 1.0 0.0 -de 04_res 1 111 2000.0 1.0 0.0 -de 05_nuclear 1 111 2000.0 1.0 0.0 -de 06_coal 1 111 1000.0 1.0 0.0 +de 01_solar 1 111 2000.0 0.0 1.0 +de 02_wind_on 1 111 2000.0 0.0 1.0 +de 03_wind_off 1 111 2000.0 0.0 1.0 +de 04_res 1 111 2000.0 0.0 1.0 +de 05_nuclear 1 111 2000.0 0.0 1.0 +de 06_coal 1 111 1000.0 0.0 1.0 de 07_gas 1 111 0.0 0.0 0.0 de 08_non-res 1 111 0.0 0.0 0.0 de 09_hydro_pump 1 111 0.0 0.0 0.0 -de 01_solar 1 112 2000.0 1.0 0.0 -de 02_wind_on 1 112 2000.0 1.0 0.0 -de 03_wind_off 1 112 2000.0 1.0 0.0 -de 04_res 1 112 2000.0 1.0 0.0 -de 05_nuclear 1 112 2000.0 1.0 0.0 -de 06_coal 1 112 1100.0 1.0 0.0 +de 01_solar 1 112 2000.0 0.0 1.0 +de 02_wind_on 1 112 2000.0 0.0 1.0 +de 03_wind_off 1 112 2000.0 0.0 1.0 +de 04_res 1 112 2000.0 0.0 1.0 +de 05_nuclear 1 112 2000.0 0.0 1.0 +de 06_coal 1 112 1100.0 0.0 1.0 de 07_gas 1 112 0.0 0.0 0.0 de 08_non-res 1 112 0.0 0.0 0.0 de 09_hydro_pump 1 112 0.0 0.0 0.0 -de 01_solar 1 113 2000.0 1.0 0.0 -de 02_wind_on 1 113 2000.0 1.0 0.0 -de 03_wind_off 1 113 2000.0 1.0 0.0 -de 04_res 1 113 2000.0 1.0 0.0 -de 05_nuclear 1 113 2000.0 1.0 0.0 -de 06_coal 1 113 1200.0 1.0 0.0 +de 01_solar 1 113 2000.0 0.0 1.0 +de 02_wind_on 1 113 2000.0 0.0 1.0 +de 03_wind_off 1 113 2000.0 0.0 1.0 +de 04_res 1 113 2000.0 0.0 1.0 +de 05_nuclear 1 113 2000.0 0.0 1.0 +de 06_coal 1 113 1200.0 0.0 1.0 de 07_gas 1 113 0.0 0.0 0.0 de 08_non-res 1 113 0.0 0.0 0.0 de 09_hydro_pump 1 113 0.0 0.0 0.0 -de 01_solar 1 114 2000.0 1.0 0.0 -de 02_wind_on 1 114 2000.0 1.0 0.0 -de 03_wind_off 1 114 2000.0 1.0 0.0 -de 04_res 1 114 2000.0 1.0 0.0 -de 05_nuclear 1 114 2000.0 1.0 0.0 -de 06_coal 1 114 1300.0 1.0 0.0 +de 01_solar 1 114 2000.0 0.0 1.0 +de 02_wind_on 1 114 2000.0 0.0 1.0 +de 03_wind_off 1 114 2000.0 0.0 1.0 +de 04_res 1 114 2000.0 0.0 1.0 +de 05_nuclear 1 114 2000.0 0.0 1.0 +de 06_coal 1 114 1300.0 0.0 1.0 de 07_gas 1 114 0.0 0.0 0.0 de 08_non-res 1 114 0.0 0.0 0.0 de 09_hydro_pump 1 114 0.0 0.0 0.0 -de 01_solar 1 115 2000.0 1.0 0.0 -de 02_wind_on 1 115 2000.0 1.0 0.0 -de 03_wind_off 1 115 2000.0 1.0 0.0 -de 04_res 1 115 2000.0 1.0 0.0 -de 05_nuclear 1 115 2000.0 1.0 0.0 -de 06_coal 1 115 1400.0 1.0 0.0 +de 01_solar 1 115 2000.0 0.0 1.0 +de 02_wind_on 1 115 2000.0 0.0 1.0 +de 03_wind_off 1 115 2000.0 0.0 1.0 +de 04_res 1 115 2000.0 0.0 1.0 +de 05_nuclear 1 115 2000.0 0.0 1.0 +de 06_coal 1 115 1400.0 0.0 1.0 de 07_gas 1 115 0.0 0.0 0.0 de 08_non-res 1 115 0.0 0.0 0.0 de 09_hydro_pump 1 115 0.0 0.0 0.0 -de 01_solar 1 116 2000.0 1.0 0.0 -de 02_wind_on 1 116 2000.0 1.0 0.0 -de 03_wind_off 1 116 2000.0 1.0 0.0 -de 04_res 1 116 2000.0 1.0 0.0 -de 05_nuclear 1 116 2000.0 1.0 0.0 -de 06_coal 1 116 1500.0 1.0 0.0 +de 01_solar 1 116 2000.0 0.0 1.0 +de 02_wind_on 1 116 2000.0 0.0 1.0 +de 03_wind_off 1 116 2000.0 0.0 1.0 +de 04_res 1 116 2000.0 0.0 1.0 +de 05_nuclear 1 116 2000.0 0.0 1.0 +de 06_coal 1 116 1500.0 0.0 1.0 de 07_gas 1 116 0.0 0.0 0.0 de 08_non-res 1 116 0.0 0.0 0.0 de 09_hydro_pump 1 116 0.0 0.0 0.0 -de 01_solar 1 117 2000.0 1.0 0.0 -de 02_wind_on 1 117 2000.0 1.0 0.0 -de 03_wind_off 1 117 2000.0 1.0 0.0 -de 04_res 1 117 2000.0 1.0 0.0 -de 05_nuclear 1 117 2000.0 1.0 0.0 -de 06_coal 1 117 1600.0 1.0 0.0 +de 01_solar 1 117 2000.0 0.0 1.0 +de 02_wind_on 1 117 2000.0 0.0 1.0 +de 03_wind_off 1 117 2000.0 0.0 1.0 +de 04_res 1 117 2000.0 0.0 1.0 +de 05_nuclear 1 117 2000.0 0.0 1.0 +de 06_coal 1 117 1600.0 0.0 1.0 de 07_gas 1 117 0.0 0.0 0.0 de 08_non-res 1 117 0.0 0.0 0.0 de 09_hydro_pump 1 117 0.0 0.0 0.0 -de 01_solar 1 118 2000.0 1.0 0.0 -de 02_wind_on 1 118 2000.0 1.0 0.0 -de 03_wind_off 1 118 2000.0 1.0 0.0 -de 04_res 1 118 2000.0 1.0 0.0 -de 05_nuclear 1 118 2000.0 1.0 0.0 -de 06_coal 1 118 1700.0 1.0 0.0 +de 01_solar 1 118 2000.0 0.0 1.0 +de 02_wind_on 1 118 2000.0 0.0 1.0 +de 03_wind_off 1 118 2000.0 0.0 1.0 +de 04_res 1 118 2000.0 0.0 1.0 +de 05_nuclear 1 118 2000.0 0.0 1.0 +de 06_coal 1 118 1700.0 0.0 1.0 de 07_gas 1 118 0.0 0.0 0.0 de 08_non-res 1 118 0.0 0.0 0.0 de 09_hydro_pump 1 118 0.0 0.0 0.0 -de 01_solar 1 119 2000.0 1.0 0.0 -de 02_wind_on 1 119 2000.0 1.0 0.0 -de 03_wind_off 1 119 2000.0 1.0 0.0 -de 04_res 1 119 2000.0 1.0 0.0 -de 05_nuclear 1 119 2000.0 1.0 0.0 -de 06_coal 1 119 1800.0 1.0 0.0 +de 01_solar 1 119 2000.0 0.0 1.0 +de 02_wind_on 1 119 2000.0 0.0 1.0 +de 03_wind_off 1 119 2000.0 0.0 1.0 +de 04_res 1 119 2000.0 0.0 1.0 +de 05_nuclear 1 119 2000.0 0.0 1.0 +de 06_coal 1 119 1800.0 0.0 1.0 de 07_gas 1 119 0.0 0.0 0.0 de 08_non-res 1 119 0.0 0.0 0.0 de 09_hydro_pump 1 119 0.0 0.0 0.0 -de 01_solar 1 120 2000.0 1.0 0.0 -de 02_wind_on 1 120 2000.0 1.0 0.0 -de 03_wind_off 1 120 2000.0 1.0 0.0 -de 04_res 1 120 2000.0 1.0 0.0 -de 05_nuclear 1 120 2000.0 1.0 0.0 -de 06_coal 1 120 1900.0 1.0 0.0 +de 01_solar 1 120 2000.0 0.0 1.0 +de 02_wind_on 1 120 2000.0 0.0 1.0 +de 03_wind_off 1 120 2000.0 0.0 1.0 +de 04_res 1 120 2000.0 0.0 1.0 +de 05_nuclear 1 120 2000.0 0.0 1.0 +de 06_coal 1 120 1900.0 0.0 1.0 de 07_gas 1 120 0.0 0.0 0.0 de 08_non-res 1 120 0.0 0.0 0.0 de 09_hydro_pump 1 120 0.0 0.0 0.0 -de 01_solar 1 121 2000.0 1.0 0.0 -de 02_wind_on 1 121 2000.0 1.0 0.0 -de 03_wind_off 1 121 2000.0 1.0 0.0 -de 04_res 1 121 2000.0 1.0 0.0 -de 05_nuclear 1 121 2000.0 1.0 0.0 -de 06_coal 1 121 2000.0 1.0 0.0 +de 01_solar 1 121 2000.0 0.0 1.0 +de 02_wind_on 1 121 2000.0 0.0 1.0 +de 03_wind_off 1 121 2000.0 0.0 1.0 +de 04_res 1 121 2000.0 0.0 1.0 +de 05_nuclear 1 121 2000.0 0.0 1.0 +de 06_coal 1 121 2000.0 0.0 1.0 de 07_gas 1 121 0.0 0.0 0.0 de 08_non-res 1 121 0.0 0.0 0.0 de 09_hydro_pump 1 121 0.0 0.0 0.0 -de 01_solar 1 122 2000.0 1.0 0.0 -de 02_wind_on 1 122 2000.0 1.0 0.0 -de 03_wind_off 1 122 2000.0 1.0 0.0 -de 04_res 1 122 2000.0 1.0 0.0 -de 05_nuclear 1 122 2000.0 1.0 0.0 -de 06_coal 1 122 2000.0 1.0 0.0 -de 07_gas 1 122 100.0 1.0 0.0 +de 01_solar 1 122 2000.0 0.0 1.0 +de 02_wind_on 1 122 2000.0 0.0 1.0 +de 03_wind_off 1 122 2000.0 0.0 1.0 +de 04_res 1 122 2000.0 0.0 1.0 +de 05_nuclear 1 122 2000.0 0.0 1.0 +de 06_coal 1 122 2000.0 0.0 1.0 +de 07_gas 1 122 100.0 0.0 1.0 de 08_non-res 1 122 0.0 0.0 0.0 de 09_hydro_pump 1 122 0.0 0.0 0.0 -de 01_solar 1 123 2000.0 1.0 0.0 -de 02_wind_on 1 123 2000.0 1.0 0.0 -de 03_wind_off 1 123 2000.0 1.0 0.0 -de 04_res 1 123 2000.0 1.0 0.0 -de 05_nuclear 1 123 2000.0 1.0 0.0 -de 06_coal 1 123 2000.0 1.0 0.0 -de 07_gas 1 123 200.0 1.0 0.0 +de 01_solar 1 123 2000.0 0.0 1.0 +de 02_wind_on 1 123 2000.0 0.0 1.0 +de 03_wind_off 1 123 2000.0 0.0 1.0 +de 04_res 1 123 2000.0 0.0 1.0 +de 05_nuclear 1 123 2000.0 0.0 1.0 +de 06_coal 1 123 2000.0 0.0 1.0 +de 07_gas 1 123 200.0 0.0 1.0 de 08_non-res 1 123 0.0 0.0 0.0 de 09_hydro_pump 1 123 0.0 0.0 0.0 -de 01_solar 1 124 2000.0 1.0 0.0 -de 02_wind_on 1 124 2000.0 1.0 0.0 -de 03_wind_off 1 124 2000.0 1.0 0.0 -de 04_res 1 124 2000.0 1.0 0.0 -de 05_nuclear 1 124 2000.0 1.0 0.0 -de 06_coal 1 124 2000.0 1.0 0.0 -de 07_gas 1 124 300.0 1.0 0.0 +de 01_solar 1 124 2000.0 0.0 1.0 +de 02_wind_on 1 124 2000.0 0.0 1.0 +de 03_wind_off 1 124 2000.0 0.0 1.0 +de 04_res 1 124 2000.0 0.0 1.0 +de 05_nuclear 1 124 2000.0 0.0 1.0 +de 06_coal 1 124 2000.0 0.0 1.0 +de 07_gas 1 124 300.0 0.0 1.0 de 08_non-res 1 124 0.0 0.0 0.0 de 09_hydro_pump 1 124 0.0 0.0 0.0 -de 01_solar 1 125 2000.0 1.0 0.0 -de 02_wind_on 1 125 2000.0 1.0 0.0 -de 03_wind_off 1 125 2000.0 1.0 0.0 -de 04_res 1 125 2000.0 1.0 0.0 -de 05_nuclear 1 125 2000.0 1.0 0.0 -de 06_coal 1 125 2000.0 1.0 0.0 -de 07_gas 1 125 400.0 1.0 0.0 +de 01_solar 1 125 2000.0 0.0 1.0 +de 02_wind_on 1 125 2000.0 0.0 1.0 +de 03_wind_off 1 125 2000.0 0.0 1.0 +de 04_res 1 125 2000.0 0.0 1.0 +de 05_nuclear 1 125 2000.0 0.0 1.0 +de 06_coal 1 125 2000.0 0.0 1.0 +de 07_gas 1 125 400.0 0.0 1.0 de 08_non-res 1 125 0.0 0.0 0.0 de 09_hydro_pump 1 125 0.0 0.0 0.0 -de 01_solar 1 126 2000.0 1.0 0.0 -de 02_wind_on 1 126 2000.0 1.0 0.0 -de 03_wind_off 1 126 2000.0 1.0 0.0 -de 04_res 1 126 2000.0 1.0 0.0 -de 05_nuclear 1 126 2000.0 1.0 0.0 -de 06_coal 1 126 2000.0 1.0 0.0 -de 07_gas 1 126 500.0 1.0 0.0 +de 01_solar 1 126 2000.0 0.0 1.0 +de 02_wind_on 1 126 2000.0 0.0 1.0 +de 03_wind_off 1 126 2000.0 0.0 1.0 +de 04_res 1 126 2000.0 0.0 1.0 +de 05_nuclear 1 126 2000.0 0.0 1.0 +de 06_coal 1 126 2000.0 0.0 1.0 +de 07_gas 1 126 500.0 0.0 1.0 de 08_non-res 1 126 0.0 0.0 0.0 de 09_hydro_pump 1 126 0.0 0.0 0.0 -de 01_solar 1 127 2000.0 1.0 0.0 -de 02_wind_on 1 127 2000.0 1.0 0.0 -de 03_wind_off 1 127 2000.0 1.0 0.0 -de 04_res 1 127 2000.0 1.0 0.0 -de 05_nuclear 1 127 2000.0 1.0 0.0 -de 06_coal 1 127 2000.0 1.0 0.0 -de 07_gas 1 127 600.0 1.0 0.0 +de 01_solar 1 127 2000.0 0.0 1.0 +de 02_wind_on 1 127 2000.0 0.0 1.0 +de 03_wind_off 1 127 2000.0 0.0 1.0 +de 04_res 1 127 2000.0 0.0 1.0 +de 05_nuclear 1 127 2000.0 0.0 1.0 +de 06_coal 1 127 2000.0 0.0 1.0 +de 07_gas 1 127 600.0 0.0 1.0 de 08_non-res 1 127 0.0 0.0 0.0 de 09_hydro_pump 1 127 0.0 0.0 0.0 -de 01_solar 1 128 2000.0 1.0 0.0 -de 02_wind_on 1 128 2000.0 1.0 0.0 -de 03_wind_off 1 128 2000.0 1.0 0.0 -de 04_res 1 128 2000.0 1.0 0.0 -de 05_nuclear 1 128 2000.0 1.0 0.0 -de 06_coal 1 128 2000.0 1.0 0.0 -de 07_gas 1 128 700.0 1.0 0.0 +de 01_solar 1 128 2000.0 0.0 1.0 +de 02_wind_on 1 128 2000.0 0.0 1.0 +de 03_wind_off 1 128 2000.0 0.0 1.0 +de 04_res 1 128 2000.0 0.0 1.0 +de 05_nuclear 1 128 2000.0 0.0 1.0 +de 06_coal 1 128 2000.0 0.0 1.0 +de 07_gas 1 128 700.0 0.0 1.0 de 08_non-res 1 128 0.0 0.0 0.0 de 09_hydro_pump 1 128 0.0 0.0 0.0 -de 01_solar 1 129 2000.0 1.0 0.0 -de 02_wind_on 1 129 2000.0 1.0 0.0 -de 03_wind_off 1 129 2000.0 1.0 0.0 -de 04_res 1 129 2000.0 1.0 0.0 -de 05_nuclear 1 129 2000.0 1.0 0.0 -de 06_coal 1 129 2000.0 1.0 0.0 -de 07_gas 1 129 800.0 1.0 0.0 +de 01_solar 1 129 2000.0 0.0 1.0 +de 02_wind_on 1 129 2000.0 0.0 1.0 +de 03_wind_off 1 129 2000.0 0.0 1.0 +de 04_res 1 129 2000.0 0.0 1.0 +de 05_nuclear 1 129 2000.0 0.0 1.0 +de 06_coal 1 129 2000.0 0.0 1.0 +de 07_gas 1 129 800.0 0.0 1.0 de 08_non-res 1 129 0.0 0.0 0.0 de 09_hydro_pump 1 129 0.0 0.0 0.0 -de 01_solar 1 130 2000.0 1.0 0.0 -de 02_wind_on 1 130 2000.0 1.0 0.0 -de 03_wind_off 1 130 2000.0 1.0 0.0 -de 04_res 1 130 2000.0 1.0 0.0 -de 05_nuclear 1 130 2000.0 1.0 0.0 -de 06_coal 1 130 2000.0 1.0 0.0 -de 07_gas 1 130 900.0 1.0 0.0 +de 01_solar 1 130 2000.0 0.0 1.0 +de 02_wind_on 1 130 2000.0 0.0 1.0 +de 03_wind_off 1 130 2000.0 0.0 1.0 +de 04_res 1 130 2000.0 0.0 1.0 +de 05_nuclear 1 130 2000.0 0.0 1.0 +de 06_coal 1 130 2000.0 0.0 1.0 +de 07_gas 1 130 900.0 0.0 1.0 de 08_non-res 1 130 0.0 0.0 0.0 de 09_hydro_pump 1 130 0.0 0.0 0.0 -de 01_solar 1 131 2000.0 1.0 0.0 -de 02_wind_on 1 131 2000.0 1.0 0.0 -de 03_wind_off 1 131 2000.0 1.0 0.0 -de 04_res 1 131 2000.0 1.0 0.0 -de 05_nuclear 1 131 2000.0 1.0 0.0 -de 06_coal 1 131 2000.0 1.0 0.0 -de 07_gas 1 131 1000.0 1.0 0.0 +de 01_solar 1 131 2000.0 0.0 1.0 +de 02_wind_on 1 131 2000.0 0.0 1.0 +de 03_wind_off 1 131 2000.0 0.0 1.0 +de 04_res 1 131 2000.0 0.0 1.0 +de 05_nuclear 1 131 2000.0 0.0 1.0 +de 06_coal 1 131 2000.0 0.0 1.0 +de 07_gas 1 131 1000.0 0.0 1.0 de 08_non-res 1 131 0.0 0.0 0.0 de 09_hydro_pump 1 131 0.0 0.0 0.0 -de 01_solar 1 132 2000.0 1.0 0.0 -de 02_wind_on 1 132 2000.0 1.0 0.0 -de 03_wind_off 1 132 2000.0 1.0 0.0 -de 04_res 1 132 2000.0 1.0 0.0 -de 05_nuclear 1 132 2000.0 1.0 0.0 -de 06_coal 1 132 2000.0 1.0 0.0 -de 07_gas 1 132 1100.0 1.0 0.0 +de 01_solar 1 132 2000.0 0.0 1.0 +de 02_wind_on 1 132 2000.0 0.0 1.0 +de 03_wind_off 1 132 2000.0 0.0 1.0 +de 04_res 1 132 2000.0 0.0 1.0 +de 05_nuclear 1 132 2000.0 0.0 1.0 +de 06_coal 1 132 2000.0 0.0 1.0 +de 07_gas 1 132 1100.0 0.0 1.0 de 08_non-res 1 132 0.0 0.0 0.0 de 09_hydro_pump 1 132 0.0 0.0 0.0 -de 01_solar 1 133 2000.0 1.0 0.0 -de 02_wind_on 1 133 2000.0 1.0 0.0 -de 03_wind_off 1 133 2000.0 1.0 0.0 -de 04_res 1 133 2000.0 1.0 0.0 -de 05_nuclear 1 133 2000.0 1.0 0.0 -de 06_coal 1 133 2000.0 1.0 0.0 -de 07_gas 1 133 1200.0 1.0 0.0 +de 01_solar 1 133 2000.0 0.0 1.0 +de 02_wind_on 1 133 2000.0 0.0 1.0 +de 03_wind_off 1 133 2000.0 0.0 1.0 +de 04_res 1 133 2000.0 0.0 1.0 +de 05_nuclear 1 133 2000.0 0.0 1.0 +de 06_coal 1 133 2000.0 0.0 1.0 +de 07_gas 1 133 1200.0 0.0 1.0 de 08_non-res 1 133 0.0 0.0 0.0 de 09_hydro_pump 1 133 0.0 0.0 0.0 -de 01_solar 1 134 2000.0 1.0 0.0 -de 02_wind_on 1 134 2000.0 1.0 0.0 -de 03_wind_off 1 134 2000.0 1.0 0.0 -de 04_res 1 134 2000.0 1.0 0.0 -de 05_nuclear 1 134 2000.0 1.0 0.0 -de 06_coal 1 134 2000.0 1.0 0.0 -de 07_gas 1 134 1300.0 1.0 0.0 +de 01_solar 1 134 2000.0 0.0 1.0 +de 02_wind_on 1 134 2000.0 0.0 1.0 +de 03_wind_off 1 134 2000.0 0.0 1.0 +de 04_res 1 134 2000.0 0.0 1.0 +de 05_nuclear 1 134 2000.0 0.0 1.0 +de 06_coal 1 134 2000.0 0.0 1.0 +de 07_gas 1 134 1300.0 0.0 1.0 de 08_non-res 1 134 0.0 0.0 0.0 de 09_hydro_pump 1 134 0.0 0.0 0.0 -de 01_solar 1 135 2000.0 1.0 0.0 -de 02_wind_on 1 135 2000.0 1.0 0.0 -de 03_wind_off 1 135 2000.0 1.0 0.0 -de 04_res 1 135 2000.0 1.0 0.0 -de 05_nuclear 1 135 2000.0 1.0 0.0 -de 06_coal 1 135 2000.0 1.0 0.0 -de 07_gas 1 135 1400.0 1.0 0.0 +de 01_solar 1 135 2000.0 0.0 1.0 +de 02_wind_on 1 135 2000.0 0.0 1.0 +de 03_wind_off 1 135 2000.0 0.0 1.0 +de 04_res 1 135 2000.0 0.0 1.0 +de 05_nuclear 1 135 2000.0 0.0 1.0 +de 06_coal 1 135 2000.0 0.0 1.0 +de 07_gas 1 135 1400.0 0.0 1.0 de 08_non-res 1 135 0.0 0.0 0.0 de 09_hydro_pump 1 135 0.0 0.0 0.0 -de 01_solar 1 136 2000.0 1.0 0.0 -de 02_wind_on 1 136 2000.0 1.0 0.0 -de 03_wind_off 1 136 2000.0 1.0 0.0 -de 04_res 1 136 2000.0 1.0 0.0 -de 05_nuclear 1 136 2000.0 1.0 0.0 -de 06_coal 1 136 2000.0 1.0 0.0 -de 07_gas 1 136 1500.0 1.0 0.0 +de 01_solar 1 136 2000.0 0.0 1.0 +de 02_wind_on 1 136 2000.0 0.0 1.0 +de 03_wind_off 1 136 2000.0 0.0 1.0 +de 04_res 1 136 2000.0 0.0 1.0 +de 05_nuclear 1 136 2000.0 0.0 1.0 +de 06_coal 1 136 2000.0 0.0 1.0 +de 07_gas 1 136 1500.0 0.0 1.0 de 08_non-res 1 136 0.0 0.0 0.0 de 09_hydro_pump 1 136 0.0 0.0 0.0 -de 01_solar 1 137 2000.0 1.0 0.0 -de 02_wind_on 1 137 2000.0 1.0 0.0 -de 03_wind_off 1 137 2000.0 1.0 0.0 -de 04_res 1 137 2000.0 1.0 0.0 -de 05_nuclear 1 137 2000.0 1.0 0.0 -de 06_coal 1 137 2000.0 1.0 0.0 -de 07_gas 1 137 1600.0 1.0 0.0 +de 01_solar 1 137 2000.0 0.0 1.0 +de 02_wind_on 1 137 2000.0 0.0 1.0 +de 03_wind_off 1 137 2000.0 0.0 1.0 +de 04_res 1 137 2000.0 0.0 1.0 +de 05_nuclear 1 137 2000.0 0.0 1.0 +de 06_coal 1 137 2000.0 0.0 1.0 +de 07_gas 1 137 1600.0 0.0 1.0 de 08_non-res 1 137 0.0 0.0 0.0 de 09_hydro_pump 1 137 0.0 0.0 0.0 -de 01_solar 1 138 2000.0 1.0 0.0 -de 02_wind_on 1 138 2000.0 1.0 0.0 -de 03_wind_off 1 138 2000.0 1.0 0.0 -de 04_res 1 138 2000.0 1.0 0.0 -de 05_nuclear 1 138 2000.0 1.0 0.0 -de 06_coal 1 138 2000.0 1.0 0.0 -de 07_gas 1 138 1700.0 1.0 0.0 +de 01_solar 1 138 2000.0 0.0 1.0 +de 02_wind_on 1 138 2000.0 0.0 1.0 +de 03_wind_off 1 138 2000.0 0.0 1.0 +de 04_res 1 138 2000.0 0.0 1.0 +de 05_nuclear 1 138 2000.0 0.0 1.0 +de 06_coal 1 138 2000.0 0.0 1.0 +de 07_gas 1 138 1700.0 0.0 1.0 de 08_non-res 1 138 0.0 0.0 0.0 de 09_hydro_pump 1 138 0.0 0.0 0.0 -de 01_solar 1 139 2000.0 1.0 0.0 -de 02_wind_on 1 139 2000.0 1.0 0.0 -de 03_wind_off 1 139 2000.0 1.0 0.0 -de 04_res 1 139 2000.0 1.0 0.0 -de 05_nuclear 1 139 2000.0 1.0 0.0 -de 06_coal 1 139 2000.0 1.0 0.0 -de 07_gas 1 139 1800.0 1.0 0.0 +de 01_solar 1 139 2000.0 0.0 1.0 +de 02_wind_on 1 139 2000.0 0.0 1.0 +de 03_wind_off 1 139 2000.0 0.0 1.0 +de 04_res 1 139 2000.0 0.0 1.0 +de 05_nuclear 1 139 2000.0 0.0 1.0 +de 06_coal 1 139 2000.0 0.0 1.0 +de 07_gas 1 139 1800.0 0.0 1.0 de 08_non-res 1 139 0.0 0.0 0.0 de 09_hydro_pump 1 139 0.0 0.0 0.0 -de 01_solar 1 140 2000.0 1.0 0.0 -de 02_wind_on 1 140 2000.0 1.0 0.0 -de 03_wind_off 1 140 2000.0 1.0 0.0 -de 04_res 1 140 2000.0 1.0 0.0 -de 05_nuclear 1 140 2000.0 1.0 0.0 -de 06_coal 1 140 2000.0 1.0 0.0 -de 07_gas 1 140 1900.0 1.0 0.0 +de 01_solar 1 140 2000.0 0.0 1.0 +de 02_wind_on 1 140 2000.0 0.0 1.0 +de 03_wind_off 1 140 2000.0 0.0 1.0 +de 04_res 1 140 2000.0 0.0 1.0 +de 05_nuclear 1 140 2000.0 0.0 1.0 +de 06_coal 1 140 2000.0 0.0 1.0 +de 07_gas 1 140 1900.0 0.0 1.0 de 08_non-res 1 140 0.0 0.0 0.0 de 09_hydro_pump 1 140 0.0 0.0 0.0 -de 01_solar 1 141 2000.0 1.0 0.0 -de 02_wind_on 1 141 2000.0 1.0 0.0 -de 03_wind_off 1 141 2000.0 1.0 0.0 -de 04_res 1 141 2000.0 1.0 0.0 -de 05_nuclear 1 141 2000.0 1.0 0.0 -de 06_coal 1 141 2000.0 1.0 0.0 -de 07_gas 1 141 2000.0 1.0 0.0 +de 01_solar 1 141 2000.0 0.0 1.0 +de 02_wind_on 1 141 2000.0 0.0 1.0 +de 03_wind_off 1 141 2000.0 0.0 1.0 +de 04_res 1 141 2000.0 0.0 1.0 +de 05_nuclear 1 141 2000.0 0.0 1.0 +de 06_coal 1 141 2000.0 0.0 1.0 +de 07_gas 1 141 2000.0 0.0 1.0 de 08_non-res 1 141 0.0 0.0 0.0 de 09_hydro_pump 1 141 0.0 0.0 0.0 -de 01_solar 1 142 2000.0 1.0 0.0 -de 02_wind_on 1 142 2000.0 1.0 0.0 -de 03_wind_off 1 142 2000.0 1.0 0.0 -de 04_res 1 142 2000.0 1.0 0.0 -de 05_nuclear 1 142 2000.0 1.0 0.0 -de 06_coal 1 142 2000.0 1.0 0.0 -de 07_gas 1 142 2000.0 1.0 0.0 -de 08_non-res 1 142 100.0 1.0 0.0 +de 01_solar 1 142 2000.0 0.0 1.0 +de 02_wind_on 1 142 2000.0 0.0 1.0 +de 03_wind_off 1 142 2000.0 0.0 1.0 +de 04_res 1 142 2000.0 0.0 1.0 +de 05_nuclear 1 142 2000.0 0.0 1.0 +de 06_coal 1 142 2000.0 0.0 1.0 +de 07_gas 1 142 2000.0 0.0 1.0 +de 08_non-res 1 142 100.0 0.0 1.0 de 09_hydro_pump 1 142 0.0 0.0 0.0 -de 01_solar 1 143 2000.0 1.0 0.0 -de 02_wind_on 1 143 2000.0 1.0 0.0 -de 03_wind_off 1 143 2000.0 1.0 0.0 -de 04_res 1 143 2000.0 1.0 0.0 -de 05_nuclear 1 143 2000.0 1.0 0.0 -de 06_coal 1 143 2000.0 1.0 0.0 -de 07_gas 1 143 2000.0 1.0 0.0 -de 08_non-res 1 143 200.0 1.0 0.0 +de 01_solar 1 143 2000.0 0.0 1.0 +de 02_wind_on 1 143 2000.0 0.0 1.0 +de 03_wind_off 1 143 2000.0 0.0 1.0 +de 04_res 1 143 2000.0 0.0 1.0 +de 05_nuclear 1 143 2000.0 0.0 1.0 +de 06_coal 1 143 2000.0 0.0 1.0 +de 07_gas 1 143 2000.0 0.0 1.0 +de 08_non-res 1 143 200.0 0.0 1.0 de 09_hydro_pump 1 143 0.0 0.0 0.0 -de 01_solar 1 144 2000.0 1.0 0.0 -de 02_wind_on 1 144 2000.0 1.0 0.0 -de 03_wind_off 1 144 2000.0 1.0 0.0 -de 04_res 1 144 2000.0 1.0 0.0 -de 05_nuclear 1 144 2000.0 1.0 0.0 -de 06_coal 1 144 2000.0 1.0 0.0 -de 07_gas 1 144 2000.0 1.0 0.0 -de 08_non-res 1 144 300.0 1.0 0.0 +de 01_solar 1 144 2000.0 0.0 1.0 +de 02_wind_on 1 144 2000.0 0.0 1.0 +de 03_wind_off 1 144 2000.0 0.0 1.0 +de 04_res 1 144 2000.0 0.0 1.0 +de 05_nuclear 1 144 2000.0 0.0 1.0 +de 06_coal 1 144 2000.0 0.0 1.0 +de 07_gas 1 144 2000.0 0.0 1.0 +de 08_non-res 1 144 300.0 0.0 1.0 de 09_hydro_pump 1 144 0.0 0.0 0.0 -de 01_solar 1 145 2000.0 1.0 0.0 -de 02_wind_on 1 145 2000.0 1.0 0.0 -de 03_wind_off 1 145 2000.0 1.0 0.0 -de 04_res 1 145 2000.0 1.0 0.0 -de 05_nuclear 1 145 2000.0 1.0 0.0 -de 06_coal 1 145 2000.0 1.0 0.0 -de 07_gas 1 145 2000.0 1.0 0.0 -de 08_non-res 1 145 400.0 1.0 0.0 +de 01_solar 1 145 2000.0 0.0 1.0 +de 02_wind_on 1 145 2000.0 0.0 1.0 +de 03_wind_off 1 145 2000.0 0.0 1.0 +de 04_res 1 145 2000.0 0.0 1.0 +de 05_nuclear 1 145 2000.0 0.0 1.0 +de 06_coal 1 145 2000.0 0.0 1.0 +de 07_gas 1 145 2000.0 0.0 1.0 +de 08_non-res 1 145 400.0 0.0 1.0 de 09_hydro_pump 1 145 0.0 0.0 0.0 -de 01_solar 1 146 2000.0 1.0 0.0 -de 02_wind_on 1 146 2000.0 1.0 0.0 -de 03_wind_off 1 146 2000.0 1.0 0.0 -de 04_res 1 146 2000.0 1.0 0.0 -de 05_nuclear 1 146 2000.0 1.0 0.0 -de 06_coal 1 146 2000.0 1.0 0.0 -de 07_gas 1 146 2000.0 1.0 0.0 -de 08_non-res 1 146 500.0 1.0 0.0 +de 01_solar 1 146 2000.0 0.0 1.0 +de 02_wind_on 1 146 2000.0 0.0 1.0 +de 03_wind_off 1 146 2000.0 0.0 1.0 +de 04_res 1 146 2000.0 0.0 1.0 +de 05_nuclear 1 146 2000.0 0.0 1.0 +de 06_coal 1 146 2000.0 0.0 1.0 +de 07_gas 1 146 2000.0 0.0 1.0 +de 08_non-res 1 146 500.0 0.0 1.0 de 09_hydro_pump 1 146 0.0 0.0 0.0 -de 01_solar 1 147 2000.0 1.0 0.0 -de 02_wind_on 1 147 2000.0 1.0 0.0 -de 03_wind_off 1 147 2000.0 1.0 0.0 -de 04_res 1 147 2000.0 1.0 0.0 -de 05_nuclear 1 147 2000.0 1.0 0.0 -de 06_coal 1 147 2000.0 1.0 0.0 -de 07_gas 1 147 2000.0 1.0 0.0 -de 08_non-res 1 147 600.0 1.0 0.0 +de 01_solar 1 147 2000.0 0.0 1.0 +de 02_wind_on 1 147 2000.0 0.0 1.0 +de 03_wind_off 1 147 2000.0 0.0 1.0 +de 04_res 1 147 2000.0 0.0 1.0 +de 05_nuclear 1 147 2000.0 0.0 1.0 +de 06_coal 1 147 2000.0 0.0 1.0 +de 07_gas 1 147 2000.0 0.0 1.0 +de 08_non-res 1 147 600.0 0.0 1.0 de 09_hydro_pump 1 147 0.0 0.0 0.0 -de 01_solar 1 148 2000.0 1.0 0.0 -de 02_wind_on 1 148 2000.0 1.0 0.0 -de 03_wind_off 1 148 2000.0 1.0 0.0 -de 04_res 1 148 2000.0 1.0 0.0 -de 05_nuclear 1 148 2000.0 1.0 0.0 -de 06_coal 1 148 2000.0 1.0 0.0 -de 07_gas 1 148 2000.0 1.0 0.0 -de 08_non-res 1 148 700.0 1.0 0.0 +de 01_solar 1 148 2000.0 0.0 1.0 +de 02_wind_on 1 148 2000.0 0.0 1.0 +de 03_wind_off 1 148 2000.0 0.0 1.0 +de 04_res 1 148 2000.0 0.0 1.0 +de 05_nuclear 1 148 2000.0 0.0 1.0 +de 06_coal 1 148 2000.0 0.0 1.0 +de 07_gas 1 148 2000.0 0.0 1.0 +de 08_non-res 1 148 700.0 0.0 1.0 de 09_hydro_pump 1 148 0.0 0.0 0.0 -de 01_solar 1 149 2000.0 1.0 0.0 -de 02_wind_on 1 149 2000.0 1.0 0.0 -de 03_wind_off 1 149 2000.0 1.0 0.0 -de 04_res 1 149 2000.0 1.0 0.0 -de 05_nuclear 1 149 2000.0 1.0 0.0 -de 06_coal 1 149 2000.0 1.0 0.0 -de 07_gas 1 149 2000.0 1.0 0.0 -de 08_non-res 1 149 800.0 1.0 0.0 +de 01_solar 1 149 2000.0 0.0 1.0 +de 02_wind_on 1 149 2000.0 0.0 1.0 +de 03_wind_off 1 149 2000.0 0.0 1.0 +de 04_res 1 149 2000.0 0.0 1.0 +de 05_nuclear 1 149 2000.0 0.0 1.0 +de 06_coal 1 149 2000.0 0.0 1.0 +de 07_gas 1 149 2000.0 0.0 1.0 +de 08_non-res 1 149 800.0 0.0 1.0 de 09_hydro_pump 1 149 0.0 0.0 0.0 -de 01_solar 1 150 2000.0 1.0 0.0 -de 02_wind_on 1 150 2000.0 1.0 0.0 -de 03_wind_off 1 150 2000.0 1.0 0.0 -de 04_res 1 150 2000.0 1.0 0.0 -de 05_nuclear 1 150 2000.0 1.0 0.0 -de 06_coal 1 150 2000.0 1.0 0.0 -de 07_gas 1 150 2000.0 1.0 0.0 -de 08_non-res 1 150 900.0 1.0 0.0 +de 01_solar 1 150 2000.0 0.0 1.0 +de 02_wind_on 1 150 2000.0 0.0 1.0 +de 03_wind_off 1 150 2000.0 0.0 1.0 +de 04_res 1 150 2000.0 0.0 1.0 +de 05_nuclear 1 150 2000.0 0.0 1.0 +de 06_coal 1 150 2000.0 0.0 1.0 +de 07_gas 1 150 2000.0 0.0 1.0 +de 08_non-res 1 150 900.0 0.0 1.0 de 09_hydro_pump 1 150 0.0 0.0 0.0 -de 01_solar 1 151 2000.0 1.0 0.0 -de 02_wind_on 1 151 2000.0 1.0 0.0 -de 03_wind_off 1 151 2000.0 1.0 0.0 -de 04_res 1 151 2000.0 1.0 0.0 -de 05_nuclear 1 151 2000.0 1.0 0.0 -de 06_coal 1 151 2000.0 1.0 0.0 -de 07_gas 1 151 2000.0 1.0 0.0 -de 08_non-res 1 151 1000.0 1.0 0.0 +de 01_solar 1 151 2000.0 0.0 1.0 +de 02_wind_on 1 151 2000.0 0.0 1.0 +de 03_wind_off 1 151 2000.0 0.0 1.0 +de 04_res 1 151 2000.0 0.0 1.0 +de 05_nuclear 1 151 2000.0 0.0 1.0 +de 06_coal 1 151 2000.0 0.0 1.0 +de 07_gas 1 151 2000.0 0.0 1.0 +de 08_non-res 1 151 1000.0 0.0 1.0 de 09_hydro_pump 1 151 0.0 0.0 0.0 -de 01_solar 1 152 2000.0 1.0 0.0 -de 02_wind_on 1 152 2000.0 1.0 0.0 -de 03_wind_off 1 152 2000.0 1.0 0.0 -de 04_res 1 152 2000.0 1.0 0.0 -de 05_nuclear 1 152 2000.0 1.0 0.0 -de 06_coal 1 152 2000.0 1.0 0.0 -de 07_gas 1 152 2000.0 1.0 0.0 -de 08_non-res 1 152 1100.0 1.0 0.0 +de 01_solar 1 152 2000.0 0.0 1.0 +de 02_wind_on 1 152 2000.0 0.0 1.0 +de 03_wind_off 1 152 2000.0 0.0 1.0 +de 04_res 1 152 2000.0 0.0 1.0 +de 05_nuclear 1 152 2000.0 0.0 1.0 +de 06_coal 1 152 2000.0 0.0 1.0 +de 07_gas 1 152 2000.0 0.0 1.0 +de 08_non-res 1 152 1100.0 0.0 1.0 de 09_hydro_pump 1 152 0.0 0.0 0.0 -de 01_solar 1 153 2000.0 1.0 0.0 -de 02_wind_on 1 153 2000.0 1.0 0.0 -de 03_wind_off 1 153 2000.0 1.0 0.0 -de 04_res 1 153 2000.0 1.0 0.0 -de 05_nuclear 1 153 2000.0 1.0 0.0 -de 06_coal 1 153 2000.0 1.0 0.0 -de 07_gas 1 153 2000.0 1.0 0.0 -de 08_non-res 1 153 1200.0 1.0 0.0 +de 01_solar 1 153 2000.0 0.0 1.0 +de 02_wind_on 1 153 2000.0 0.0 1.0 +de 03_wind_off 1 153 2000.0 0.0 1.0 +de 04_res 1 153 2000.0 0.0 1.0 +de 05_nuclear 1 153 2000.0 0.0 1.0 +de 06_coal 1 153 2000.0 0.0 1.0 +de 07_gas 1 153 2000.0 0.0 1.0 +de 08_non-res 1 153 1200.0 0.0 1.0 de 09_hydro_pump 1 153 0.0 0.0 0.0 -de 01_solar 1 154 2000.0 1.0 0.0 -de 02_wind_on 1 154 2000.0 1.0 0.0 -de 03_wind_off 1 154 2000.0 1.0 0.0 -de 04_res 1 154 2000.0 1.0 0.0 -de 05_nuclear 1 154 2000.0 1.0 0.0 -de 06_coal 1 154 2000.0 1.0 0.0 -de 07_gas 1 154 2000.0 1.0 0.0 -de 08_non-res 1 154 1300.0 1.0 0.0 +de 01_solar 1 154 2000.0 0.0 1.0 +de 02_wind_on 1 154 2000.0 0.0 1.0 +de 03_wind_off 1 154 2000.0 0.0 1.0 +de 04_res 1 154 2000.0 0.0 1.0 +de 05_nuclear 1 154 2000.0 0.0 1.0 +de 06_coal 1 154 2000.0 0.0 1.0 +de 07_gas 1 154 2000.0 0.0 1.0 +de 08_non-res 1 154 1300.0 0.0 1.0 de 09_hydro_pump 1 154 0.0 0.0 0.0 -de 01_solar 1 155 2000.0 1.0 0.0 -de 02_wind_on 1 155 2000.0 1.0 0.0 -de 03_wind_off 1 155 2000.0 1.0 0.0 -de 04_res 1 155 2000.0 1.0 0.0 -de 05_nuclear 1 155 2000.0 1.0 0.0 -de 06_coal 1 155 2000.0 1.0 0.0 -de 07_gas 1 155 2000.0 1.0 0.0 -de 08_non-res 1 155 1400.0 1.0 0.0 +de 01_solar 1 155 2000.0 0.0 1.0 +de 02_wind_on 1 155 2000.0 0.0 1.0 +de 03_wind_off 1 155 2000.0 0.0 1.0 +de 04_res 1 155 2000.0 0.0 1.0 +de 05_nuclear 1 155 2000.0 0.0 1.0 +de 06_coal 1 155 2000.0 0.0 1.0 +de 07_gas 1 155 2000.0 0.0 1.0 +de 08_non-res 1 155 1400.0 0.0 1.0 de 09_hydro_pump 1 155 0.0 0.0 0.0 -de 01_solar 1 156 2000.0 1.0 0.0 -de 02_wind_on 1 156 2000.0 1.0 0.0 -de 03_wind_off 1 156 2000.0 1.0 0.0 -de 04_res 1 156 2000.0 1.0 0.0 -de 05_nuclear 1 156 2000.0 1.0 0.0 -de 06_coal 1 156 2000.0 1.0 0.0 -de 07_gas 1 156 2000.0 1.0 0.0 -de 08_non-res 1 156 1500.0 1.0 0.0 +de 01_solar 1 156 2000.0 0.0 1.0 +de 02_wind_on 1 156 2000.0 0.0 1.0 +de 03_wind_off 1 156 2000.0 0.0 1.0 +de 04_res 1 156 2000.0 0.0 1.0 +de 05_nuclear 1 156 2000.0 0.0 1.0 +de 06_coal 1 156 2000.0 0.0 1.0 +de 07_gas 1 156 2000.0 0.0 1.0 +de 08_non-res 1 156 1500.0 0.0 1.0 de 09_hydro_pump 1 156 0.0 0.0 0.0 -de 01_solar 1 157 2000.0 1.0 0.0 -de 02_wind_on 1 157 2000.0 1.0 0.0 -de 03_wind_off 1 157 2000.0 1.0 0.0 -de 04_res 1 157 2000.0 1.0 0.0 -de 05_nuclear 1 157 2000.0 1.0 0.0 -de 06_coal 1 157 2000.0 1.0 0.0 -de 07_gas 1 157 2000.0 1.0 0.0 -de 08_non-res 1 157 1600.0 1.0 0.0 +de 01_solar 1 157 2000.0 0.0 1.0 +de 02_wind_on 1 157 2000.0 0.0 1.0 +de 03_wind_off 1 157 2000.0 0.0 1.0 +de 04_res 1 157 2000.0 0.0 1.0 +de 05_nuclear 1 157 2000.0 0.0 1.0 +de 06_coal 1 157 2000.0 0.0 1.0 +de 07_gas 1 157 2000.0 0.0 1.0 +de 08_non-res 1 157 1600.0 0.0 1.0 de 09_hydro_pump 1 157 0.0 0.0 0.0 -de 01_solar 1 158 2000.0 1.0 0.0 -de 02_wind_on 1 158 2000.0 1.0 0.0 -de 03_wind_off 1 158 2000.0 1.0 0.0 -de 04_res 1 158 2000.0 1.0 0.0 -de 05_nuclear 1 158 2000.0 1.0 0.0 -de 06_coal 1 158 2000.0 1.0 0.0 -de 07_gas 1 158 2000.0 1.0 0.0 -de 08_non-res 1 158 1700.0 1.0 0.0 +de 01_solar 1 158 2000.0 0.0 1.0 +de 02_wind_on 1 158 2000.0 0.0 1.0 +de 03_wind_off 1 158 2000.0 0.0 1.0 +de 04_res 1 158 2000.0 0.0 1.0 +de 05_nuclear 1 158 2000.0 0.0 1.0 +de 06_coal 1 158 2000.0 0.0 1.0 +de 07_gas 1 158 2000.0 0.0 1.0 +de 08_non-res 1 158 1700.0 0.0 1.0 de 09_hydro_pump 1 158 0.0 0.0 0.0 -de 01_solar 1 159 2000.0 1.0 0.0 -de 02_wind_on 1 159 2000.0 1.0 0.0 -de 03_wind_off 1 159 2000.0 1.0 0.0 -de 04_res 1 159 2000.0 1.0 0.0 -de 05_nuclear 1 159 2000.0 1.0 0.0 -de 06_coal 1 159 2000.0 1.0 0.0 -de 07_gas 1 159 2000.0 1.0 0.0 -de 08_non-res 1 159 1800.0 1.0 0.0 +de 01_solar 1 159 2000.0 0.0 1.0 +de 02_wind_on 1 159 2000.0 0.0 1.0 +de 03_wind_off 1 159 2000.0 0.0 1.0 +de 04_res 1 159 2000.0 0.0 1.0 +de 05_nuclear 1 159 2000.0 0.0 1.0 +de 06_coal 1 159 2000.0 0.0 1.0 +de 07_gas 1 159 2000.0 0.0 1.0 +de 08_non-res 1 159 1800.0 0.0 1.0 de 09_hydro_pump 1 159 0.0 0.0 0.0 -de 01_solar 1 160 2000.0 1.0 0.0 -de 02_wind_on 1 160 2000.0 1.0 0.0 -de 03_wind_off 1 160 2000.0 1.0 0.0 -de 04_res 1 160 2000.0 1.0 0.0 -de 05_nuclear 1 160 2000.0 1.0 0.0 -de 06_coal 1 160 2000.0 1.0 0.0 -de 07_gas 1 160 2000.0 1.0 0.0 -de 08_non-res 1 160 1900.0 1.0 0.0 +de 01_solar 1 160 2000.0 0.0 1.0 +de 02_wind_on 1 160 2000.0 0.0 1.0 +de 03_wind_off 1 160 2000.0 0.0 1.0 +de 04_res 1 160 2000.0 0.0 1.0 +de 05_nuclear 1 160 2000.0 0.0 1.0 +de 06_coal 1 160 2000.0 0.0 1.0 +de 07_gas 1 160 2000.0 0.0 1.0 +de 08_non-res 1 160 1900.0 0.0 1.0 de 09_hydro_pump 1 160 0.0 0.0 0.0 -de 01_solar 1 161 2000.0 1.0 0.0 -de 02_wind_on 1 161 2000.0 1.0 0.0 -de 03_wind_off 1 161 2000.0 1.0 0.0 -de 04_res 1 161 2000.0 1.0 0.0 -de 05_nuclear 1 161 2000.0 1.0 0.0 -de 06_coal 1 161 2000.0 1.0 0.0 -de 07_gas 1 161 2000.0 1.0 0.0 -de 08_non-res 1 161 2000.0 1.0 0.0 +de 01_solar 1 161 2000.0 0.0 1.0 +de 02_wind_on 1 161 2000.0 0.0 1.0 +de 03_wind_off 1 161 2000.0 0.0 1.0 +de 04_res 1 161 2000.0 0.0 1.0 +de 05_nuclear 1 161 2000.0 0.0 1.0 +de 06_coal 1 161 2000.0 0.0 1.0 +de 07_gas 1 161 2000.0 0.0 1.0 +de 08_non-res 1 161 2000.0 0.0 1.0 de 09_hydro_pump 1 161 0.0 0.0 0.0 -de 01_solar 1 162 2000.0 1.0 0.0 -de 02_wind_on 1 162 2000.0 1.0 0.0 -de 03_wind_off 1 162 2000.0 1.0 0.0 -de 04_res 1 162 2000.0 1.0 0.0 -de 05_nuclear 1 162 2000.0 1.0 0.0 -de 06_coal 1 162 2000.0 1.0 0.0 -de 07_gas 1 162 2000.0 1.0 0.0 -de 08_non-res 1 162 2000.0 1.0 0.0 -de 09_hydro_pump 1 162 100.0 1.0 0.0 -de 01_solar 1 163 2000.0 1.0 0.0 -de 02_wind_on 1 163 2000.0 1.0 0.0 -de 03_wind_off 1 163 2000.0 1.0 0.0 -de 04_res 1 163 2000.0 1.0 0.0 -de 05_nuclear 1 163 2000.0 1.0 0.0 -de 06_coal 1 163 2000.0 1.0 0.0 -de 07_gas 1 163 2000.0 1.0 0.0 -de 08_non-res 1 163 2000.0 1.0 0.0 -de 09_hydro_pump 1 163 200.0 1.0 0.0 -de 01_solar 1 164 2000.0 1.0 0.0 -de 02_wind_on 1 164 2000.0 1.0 0.0 -de 03_wind_off 1 164 2000.0 1.0 0.0 -de 04_res 1 164 2000.0 1.0 0.0 -de 05_nuclear 1 164 2000.0 1.0 0.0 -de 06_coal 1 164 2000.0 1.0 0.0 -de 07_gas 1 164 2000.0 1.0 0.0 -de 08_non-res 1 164 2000.0 1.0 0.0 -de 09_hydro_pump 1 164 300.0 1.0 0.0 -de 01_solar 1 165 2000.0 1.0 0.0 -de 02_wind_on 1 165 2000.0 1.0 0.0 -de 03_wind_off 1 165 2000.0 1.0 0.0 -de 04_res 1 165 2000.0 1.0 0.0 -de 05_nuclear 1 165 2000.0 1.0 0.0 -de 06_coal 1 165 2000.0 1.0 0.0 -de 07_gas 1 165 2000.0 1.0 0.0 -de 08_non-res 1 165 2000.0 1.0 0.0 -de 09_hydro_pump 1 165 400.0 1.0 0.0 -de 01_solar 1 166 2000.0 1.0 0.0 -de 02_wind_on 1 166 2000.0 1.0 0.0 -de 03_wind_off 1 166 2000.0 1.0 0.0 -de 04_res 1 166 2000.0 1.0 0.0 -de 05_nuclear 1 166 2000.0 1.0 0.0 -de 06_coal 1 166 2000.0 1.0 0.0 -de 07_gas 1 166 2000.0 1.0 0.0 -de 08_non-res 1 166 2000.0 1.0 0.0 -de 09_hydro_pump 1 166 500.0 1.0 0.0 -de 01_solar 1 167 2000.0 1.0 0.0 -de 02_wind_on 1 167 2000.0 1.0 0.0 -de 03_wind_off 1 167 2000.0 1.0 0.0 -de 04_res 1 167 2000.0 1.0 0.0 -de 05_nuclear 1 167 2000.0 1.0 0.0 -de 06_coal 1 167 2000.0 1.0 0.0 -de 07_gas 1 167 2000.0 1.0 0.0 -de 08_non-res 1 167 2000.0 1.0 0.0 -de 09_hydro_pump 1 167 600.0 1.0 0.0 -de 01_solar 1 168 2000.0 1.0 0.0 -de 02_wind_on 1 168 2000.0 1.0 0.0 -de 03_wind_off 1 168 2000.0 1.0 0.0 -de 04_res 1 168 2000.0 1.0 0.0 -de 05_nuclear 1 168 2000.0 1.0 0.0 -de 06_coal 1 168 2000.0 1.0 0.0 -de 07_gas 1 168 2000.0 1.0 0.0 -de 08_non-res 1 168 2000.0 1.0 0.0 -de 09_hydro_pump 1 168 700.0 1.0 0.0 +de 01_solar 1 162 2000.0 0.0 1.0 +de 02_wind_on 1 162 2000.0 0.0 1.0 +de 03_wind_off 1 162 2000.0 0.0 1.0 +de 04_res 1 162 2000.0 0.0 1.0 +de 05_nuclear 1 162 2000.0 0.0 1.0 +de 06_coal 1 162 2000.0 0.0 1.0 +de 07_gas 1 162 2000.0 0.0 1.0 +de 08_non-res 1 162 2000.0 0.0 1.0 +de 09_hydro_pump 1 162 100.0 0.0 1.0 +de 01_solar 1 163 2000.0 0.0 1.0 +de 02_wind_on 1 163 2000.0 0.0 1.0 +de 03_wind_off 1 163 2000.0 0.0 1.0 +de 04_res 1 163 2000.0 0.0 1.0 +de 05_nuclear 1 163 2000.0 0.0 1.0 +de 06_coal 1 163 2000.0 0.0 1.0 +de 07_gas 1 163 2000.0 0.0 1.0 +de 08_non-res 1 163 2000.0 0.0 1.0 +de 09_hydro_pump 1 163 200.0 0.0 1.0 +de 01_solar 1 164 2000.0 0.0 1.0 +de 02_wind_on 1 164 2000.0 0.0 1.0 +de 03_wind_off 1 164 2000.0 0.0 1.0 +de 04_res 1 164 2000.0 0.0 1.0 +de 05_nuclear 1 164 2000.0 0.0 1.0 +de 06_coal 1 164 2000.0 0.0 1.0 +de 07_gas 1 164 2000.0 0.0 1.0 +de 08_non-res 1 164 2000.0 0.0 1.0 +de 09_hydro_pump 1 164 300.0 0.0 1.0 +de 01_solar 1 165 2000.0 0.0 1.0 +de 02_wind_on 1 165 2000.0 0.0 1.0 +de 03_wind_off 1 165 2000.0 0.0 1.0 +de 04_res 1 165 2000.0 0.0 1.0 +de 05_nuclear 1 165 2000.0 0.0 1.0 +de 06_coal 1 165 2000.0 0.0 1.0 +de 07_gas 1 165 2000.0 0.0 1.0 +de 08_non-res 1 165 2000.0 0.0 1.0 +de 09_hydro_pump 1 165 400.0 0.0 1.0 +de 01_solar 1 166 2000.0 0.0 1.0 +de 02_wind_on 1 166 2000.0 0.0 1.0 +de 03_wind_off 1 166 2000.0 0.0 1.0 +de 04_res 1 166 2000.0 0.0 1.0 +de 05_nuclear 1 166 2000.0 0.0 1.0 +de 06_coal 1 166 2000.0 0.0 1.0 +de 07_gas 1 166 2000.0 0.0 1.0 +de 08_non-res 1 166 2000.0 0.0 1.0 +de 09_hydro_pump 1 166 500.0 0.0 1.0 +de 01_solar 1 167 2000.0 0.0 1.0 +de 02_wind_on 1 167 2000.0 0.0 1.0 +de 03_wind_off 1 167 2000.0 0.0 1.0 +de 04_res 1 167 2000.0 0.0 1.0 +de 05_nuclear 1 167 2000.0 0.0 1.0 +de 06_coal 1 167 2000.0 0.0 1.0 +de 07_gas 1 167 2000.0 0.0 1.0 +de 08_non-res 1 167 2000.0 0.0 1.0 +de 09_hydro_pump 1 167 600.0 0.0 1.0 +de 01_solar 1 168 2000.0 0.0 1.0 +de 02_wind_on 1 168 2000.0 0.0 1.0 +de 03_wind_off 1 168 2000.0 0.0 1.0 +de 04_res 1 168 2000.0 0.0 1.0 +de 05_nuclear 1 168 2000.0 0.0 1.0 +de 06_coal 1 168 2000.0 0.0 1.0 +de 07_gas 1 168 2000.0 0.0 1.0 +de 08_non-res 1 168 2000.0 0.0 1.0 +de 09_hydro_pump 1 168 700.0 0.0 1.0 de 01_solar 1 169 0.0 0.0 0.0 de 02_wind_on 1 169 0.0 0.0 0.0 de 03_wind_off 1 169 0.0 0.0 0.0 @@ -1520,7 +1520,7 @@ de 06_coal 1 169 0.0 0.0 0.0 de 07_gas 1 169 0.0 0.0 0.0 de 08_non-res 1 169 0.0 0.0 0.0 de 09_hydro_pump 1 169 0.0 0.0 0.0 -de 01_solar 1 170 100.0 1.0 0.0 +de 01_solar 1 170 100.0 0.0 1.0 de 02_wind_on 1 170 0.0 0.0 0.0 de 03_wind_off 1 170 0.0 0.0 0.0 de 04_res 1 170 0.0 0.0 0.0 @@ -1529,7 +1529,7 @@ de 06_coal 1 170 0.0 0.0 0.0 de 07_gas 1 170 0.0 0.0 0.0 de 08_non-res 1 170 0.0 0.0 0.0 de 09_hydro_pump 1 170 0.0 0.0 0.0 -de 01_solar 1 171 200.0 1.0 0.0 +de 01_solar 1 171 200.0 0.0 1.0 de 02_wind_on 1 171 0.0 0.0 0.0 de 03_wind_off 1 171 0.0 0.0 0.0 de 04_res 1 171 0.0 0.0 0.0 @@ -1538,7 +1538,7 @@ de 06_coal 1 171 0.0 0.0 0.0 de 07_gas 1 171 0.0 0.0 0.0 de 08_non-res 1 171 0.0 0.0 0.0 de 09_hydro_pump 1 171 0.0 0.0 0.0 -de 01_solar 1 172 300.0 1.0 0.0 +de 01_solar 1 172 300.0 0.0 1.0 de 02_wind_on 1 172 0.0 0.0 0.0 de 03_wind_off 1 172 0.0 0.0 0.0 de 04_res 1 172 0.0 0.0 0.0 @@ -1547,7 +1547,7 @@ de 06_coal 1 172 0.0 0.0 0.0 de 07_gas 1 172 0.0 0.0 0.0 de 08_non-res 1 172 0.0 0.0 0.0 de 09_hydro_pump 1 172 0.0 0.0 0.0 -de 01_solar 1 173 400.0 1.0 0.0 +de 01_solar 1 173 400.0 0.0 1.0 de 02_wind_on 1 173 0.0 0.0 0.0 de 03_wind_off 1 173 0.0 0.0 0.0 de 04_res 1 173 0.0 0.0 0.0 @@ -1556,7 +1556,7 @@ de 06_coal 1 173 0.0 0.0 0.0 de 07_gas 1 173 0.0 0.0 0.0 de 08_non-res 1 173 0.0 0.0 0.0 de 09_hydro_pump 1 173 0.0 0.0 0.0 -de 01_solar 1 174 500.0 1.0 0.0 +de 01_solar 1 174 500.0 0.0 1.0 de 02_wind_on 1 174 0.0 0.0 0.0 de 03_wind_off 1 174 0.0 0.0 0.0 de 04_res 1 174 0.0 0.0 0.0 @@ -1565,7 +1565,7 @@ de 06_coal 1 174 0.0 0.0 0.0 de 07_gas 1 174 0.0 0.0 0.0 de 08_non-res 1 174 0.0 0.0 0.0 de 09_hydro_pump 1 174 0.0 0.0 0.0 -de 01_solar 1 175 600.0 1.0 0.0 +de 01_solar 1 175 600.0 0.0 1.0 de 02_wind_on 1 175 0.0 0.0 0.0 de 03_wind_off 1 175 0.0 0.0 0.0 de 04_res 1 175 0.0 0.0 0.0 @@ -1574,7 +1574,7 @@ de 06_coal 1 175 0.0 0.0 0.0 de 07_gas 1 175 0.0 0.0 0.0 de 08_non-res 1 175 0.0 0.0 0.0 de 09_hydro_pump 1 175 0.0 0.0 0.0 -de 01_solar 1 176 700.0 1.0 0.0 +de 01_solar 1 176 700.0 0.0 1.0 de 02_wind_on 1 176 0.0 0.0 0.0 de 03_wind_off 1 176 0.0 0.0 0.0 de 04_res 1 176 0.0 0.0 0.0 @@ -1583,7 +1583,7 @@ de 06_coal 1 176 0.0 0.0 0.0 de 07_gas 1 176 0.0 0.0 0.0 de 08_non-res 1 176 0.0 0.0 0.0 de 09_hydro_pump 1 176 0.0 0.0 0.0 -de 01_solar 1 177 800.0 1.0 0.0 +de 01_solar 1 177 800.0 0.0 1.0 de 02_wind_on 1 177 0.0 0.0 0.0 de 03_wind_off 1 177 0.0 0.0 0.0 de 04_res 1 177 0.0 0.0 0.0 @@ -1592,7 +1592,7 @@ de 06_coal 1 177 0.0 0.0 0.0 de 07_gas 1 177 0.0 0.0 0.0 de 08_non-res 1 177 0.0 0.0 0.0 de 09_hydro_pump 1 177 0.0 0.0 0.0 -de 01_solar 1 178 900.0 1.0 0.0 +de 01_solar 1 178 900.0 0.0 1.0 de 02_wind_on 1 178 0.0 0.0 0.0 de 03_wind_off 1 178 0.0 0.0 0.0 de 04_res 1 178 0.0 0.0 0.0 @@ -1601,7 +1601,7 @@ de 06_coal 1 178 0.0 0.0 0.0 de 07_gas 1 178 0.0 0.0 0.0 de 08_non-res 1 178 0.0 0.0 0.0 de 09_hydro_pump 1 178 0.0 0.0 0.0 -de 01_solar 1 179 1000.0 1.0 0.0 +de 01_solar 1 179 1000.0 0.0 1.0 de 02_wind_on 1 179 0.0 0.0 0.0 de 03_wind_off 1 179 0.0 0.0 0.0 de 04_res 1 179 0.0 0.0 0.0 @@ -1610,7 +1610,7 @@ de 06_coal 1 179 0.0 0.0 0.0 de 07_gas 1 179 0.0 0.0 0.0 de 08_non-res 1 179 0.0 0.0 0.0 de 09_hydro_pump 1 179 0.0 0.0 0.0 -de 01_solar 1 180 1100.0 1.0 0.0 +de 01_solar 1 180 1100.0 0.0 1.0 de 02_wind_on 1 180 0.0 0.0 0.0 de 03_wind_off 1 180 0.0 0.0 0.0 de 04_res 1 180 0.0 0.0 0.0 @@ -1619,7 +1619,7 @@ de 06_coal 1 180 0.0 0.0 0.0 de 07_gas 1 180 0.0 0.0 0.0 de 08_non-res 1 180 0.0 0.0 0.0 de 09_hydro_pump 1 180 0.0 0.0 0.0 -de 01_solar 1 181 1200.0 1.0 0.0 +de 01_solar 1 181 1200.0 0.0 1.0 de 02_wind_on 1 181 0.0 0.0 0.0 de 03_wind_off 1 181 0.0 0.0 0.0 de 04_res 1 181 0.0 0.0 0.0 @@ -1628,7 +1628,7 @@ de 06_coal 1 181 0.0 0.0 0.0 de 07_gas 1 181 0.0 0.0 0.0 de 08_non-res 1 181 0.0 0.0 0.0 de 09_hydro_pump 1 181 0.0 0.0 0.0 -de 01_solar 1 182 1300.0 1.0 0.0 +de 01_solar 1 182 1300.0 0.0 1.0 de 02_wind_on 1 182 0.0 0.0 0.0 de 03_wind_off 1 182 0.0 0.0 0.0 de 04_res 1 182 0.0 0.0 0.0 @@ -1637,7 +1637,7 @@ de 06_coal 1 182 0.0 0.0 0.0 de 07_gas 1 182 0.0 0.0 0.0 de 08_non-res 1 182 0.0 0.0 0.0 de 09_hydro_pump 1 182 0.0 0.0 0.0 -de 01_solar 1 183 1400.0 1.0 0.0 +de 01_solar 1 183 1400.0 0.0 1.0 de 02_wind_on 1 183 0.0 0.0 0.0 de 03_wind_off 1 183 0.0 0.0 0.0 de 04_res 1 183 0.0 0.0 0.0 @@ -1646,7 +1646,7 @@ de 06_coal 1 183 0.0 0.0 0.0 de 07_gas 1 183 0.0 0.0 0.0 de 08_non-res 1 183 0.0 0.0 0.0 de 09_hydro_pump 1 183 0.0 0.0 0.0 -de 01_solar 1 184 1500.0 1.0 0.0 +de 01_solar 1 184 1500.0 0.0 1.0 de 02_wind_on 1 184 0.0 0.0 0.0 de 03_wind_off 1 184 0.0 0.0 0.0 de 04_res 1 184 0.0 0.0 0.0 @@ -1655,7 +1655,7 @@ de 06_coal 1 184 0.0 0.0 0.0 de 07_gas 1 184 0.0 0.0 0.0 de 08_non-res 1 184 0.0 0.0 0.0 de 09_hydro_pump 1 184 0.0 0.0 0.0 -de 01_solar 1 185 1600.0 1.0 0.0 +de 01_solar 1 185 1600.0 0.0 1.0 de 02_wind_on 1 185 0.0 0.0 0.0 de 03_wind_off 1 185 0.0 0.0 0.0 de 04_res 1 185 0.0 0.0 0.0 @@ -1664,7 +1664,7 @@ de 06_coal 1 185 0.0 0.0 0.0 de 07_gas 1 185 0.0 0.0 0.0 de 08_non-res 1 185 0.0 0.0 0.0 de 09_hydro_pump 1 185 0.0 0.0 0.0 -de 01_solar 1 186 1700.0 1.0 0.0 +de 01_solar 1 186 1700.0 0.0 1.0 de 02_wind_on 1 186 0.0 0.0 0.0 de 03_wind_off 1 186 0.0 0.0 0.0 de 04_res 1 186 0.0 0.0 0.0 @@ -1673,7 +1673,7 @@ de 06_coal 1 186 0.0 0.0 0.0 de 07_gas 1 186 0.0 0.0 0.0 de 08_non-res 1 186 0.0 0.0 0.0 de 09_hydro_pump 1 186 0.0 0.0 0.0 -de 01_solar 1 187 1800.0 1.0 0.0 +de 01_solar 1 187 1800.0 0.0 1.0 de 02_wind_on 1 187 0.0 0.0 0.0 de 03_wind_off 1 187 0.0 0.0 0.0 de 04_res 1 187 0.0 0.0 0.0 @@ -1682,7 +1682,7 @@ de 06_coal 1 187 0.0 0.0 0.0 de 07_gas 1 187 0.0 0.0 0.0 de 08_non-res 1 187 0.0 0.0 0.0 de 09_hydro_pump 1 187 0.0 0.0 0.0 -de 01_solar 1 188 1900.0 1.0 0.0 +de 01_solar 1 188 1900.0 0.0 1.0 de 02_wind_on 1 188 0.0 0.0 0.0 de 03_wind_off 1 188 0.0 0.0 0.0 de 04_res 1 188 0.0 0.0 0.0 @@ -1691,7 +1691,7 @@ de 06_coal 1 188 0.0 0.0 0.0 de 07_gas 1 188 0.0 0.0 0.0 de 08_non-res 1 188 0.0 0.0 0.0 de 09_hydro_pump 1 188 0.0 0.0 0.0 -de 01_solar 1 189 2000.0 1.0 0.0 +de 01_solar 1 189 2000.0 0.0 1.0 de 02_wind_on 1 189 0.0 0.0 0.0 de 03_wind_off 1 189 0.0 0.0 0.0 de 04_res 1 189 0.0 0.0 0.0 @@ -1700,8 +1700,8 @@ de 06_coal 1 189 0.0 0.0 0.0 de 07_gas 1 189 0.0 0.0 0.0 de 08_non-res 1 189 0.0 0.0 0.0 de 09_hydro_pump 1 189 0.0 0.0 0.0 -de 01_solar 1 190 2000.0 1.0 0.0 -de 02_wind_on 1 190 100.0 1.0 0.0 +de 01_solar 1 190 2000.0 0.0 1.0 +de 02_wind_on 1 190 100.0 0.0 1.0 de 03_wind_off 1 190 0.0 0.0 0.0 de 04_res 1 190 0.0 0.0 0.0 de 05_nuclear 1 190 0.0 0.0 0.0 @@ -1709,8 +1709,8 @@ de 06_coal 1 190 0.0 0.0 0.0 de 07_gas 1 190 0.0 0.0 0.0 de 08_non-res 1 190 0.0 0.0 0.0 de 09_hydro_pump 1 190 0.0 0.0 0.0 -de 01_solar 1 191 2000.0 1.0 0.0 -de 02_wind_on 1 191 200.0 1.0 0.0 +de 01_solar 1 191 2000.0 0.0 1.0 +de 02_wind_on 1 191 200.0 0.0 1.0 de 03_wind_off 1 191 0.0 0.0 0.0 de 04_res 1 191 0.0 0.0 0.0 de 05_nuclear 1 191 0.0 0.0 0.0 @@ -1718,8 +1718,8 @@ de 06_coal 1 191 0.0 0.0 0.0 de 07_gas 1 191 0.0 0.0 0.0 de 08_non-res 1 191 0.0 0.0 0.0 de 09_hydro_pump 1 191 0.0 0.0 0.0 -de 01_solar 1 192 2000.0 1.0 0.0 -de 02_wind_on 1 192 300.0 1.0 0.0 +de 01_solar 1 192 2000.0 0.0 1.0 +de 02_wind_on 1 192 300.0 0.0 1.0 de 03_wind_off 1 192 0.0 0.0 0.0 de 04_res 1 192 0.0 0.0 0.0 de 05_nuclear 1 192 0.0 0.0 0.0 @@ -1727,8 +1727,8 @@ de 06_coal 1 192 0.0 0.0 0.0 de 07_gas 1 192 0.0 0.0 0.0 de 08_non-res 1 192 0.0 0.0 0.0 de 09_hydro_pump 1 192 0.0 0.0 0.0 -de 01_solar 1 193 2000.0 1.0 0.0 -de 02_wind_on 1 193 400.0 1.0 0.0 +de 01_solar 1 193 2000.0 0.0 1.0 +de 02_wind_on 1 193 400.0 0.0 1.0 de 03_wind_off 1 193 0.0 0.0 0.0 de 04_res 1 193 0.0 0.0 0.0 de 05_nuclear 1 193 0.0 0.0 0.0 @@ -1736,8 +1736,8 @@ de 06_coal 1 193 0.0 0.0 0.0 de 07_gas 1 193 0.0 0.0 0.0 de 08_non-res 1 193 0.0 0.0 0.0 de 09_hydro_pump 1 193 0.0 0.0 0.0 -de 01_solar 1 194 2000.0 1.0 0.0 -de 02_wind_on 1 194 500.0 1.0 0.0 +de 01_solar 1 194 2000.0 0.0 1.0 +de 02_wind_on 1 194 500.0 0.0 1.0 de 03_wind_off 1 194 0.0 0.0 0.0 de 04_res 1 194 0.0 0.0 0.0 de 05_nuclear 1 194 0.0 0.0 0.0 @@ -1745,8 +1745,8 @@ de 06_coal 1 194 0.0 0.0 0.0 de 07_gas 1 194 0.0 0.0 0.0 de 08_non-res 1 194 0.0 0.0 0.0 de 09_hydro_pump 1 194 0.0 0.0 0.0 -de 01_solar 1 195 2000.0 1.0 0.0 -de 02_wind_on 1 195 600.0 1.0 0.0 +de 01_solar 1 195 2000.0 0.0 1.0 +de 02_wind_on 1 195 600.0 0.0 1.0 de 03_wind_off 1 195 0.0 0.0 0.0 de 04_res 1 195 0.0 0.0 0.0 de 05_nuclear 1 195 0.0 0.0 0.0 @@ -1754,8 +1754,8 @@ de 06_coal 1 195 0.0 0.0 0.0 de 07_gas 1 195 0.0 0.0 0.0 de 08_non-res 1 195 0.0 0.0 0.0 de 09_hydro_pump 1 195 0.0 0.0 0.0 -de 01_solar 1 196 2000.0 1.0 0.0 -de 02_wind_on 1 196 700.0 1.0 0.0 +de 01_solar 1 196 2000.0 0.0 1.0 +de 02_wind_on 1 196 700.0 0.0 1.0 de 03_wind_off 1 196 0.0 0.0 0.0 de 04_res 1 196 0.0 0.0 0.0 de 05_nuclear 1 196 0.0 0.0 0.0 @@ -1763,8 +1763,8 @@ de 06_coal 1 196 0.0 0.0 0.0 de 07_gas 1 196 0.0 0.0 0.0 de 08_non-res 1 196 0.0 0.0 0.0 de 09_hydro_pump 1 196 0.0 0.0 0.0 -de 01_solar 1 197 2000.0 1.0 0.0 -de 02_wind_on 1 197 800.0 1.0 0.0 +de 01_solar 1 197 2000.0 0.0 1.0 +de 02_wind_on 1 197 800.0 0.0 1.0 de 03_wind_off 1 197 0.0 0.0 0.0 de 04_res 1 197 0.0 0.0 0.0 de 05_nuclear 1 197 0.0 0.0 0.0 @@ -1772,8 +1772,8 @@ de 06_coal 1 197 0.0 0.0 0.0 de 07_gas 1 197 0.0 0.0 0.0 de 08_non-res 1 197 0.0 0.0 0.0 de 09_hydro_pump 1 197 0.0 0.0 0.0 -de 01_solar 1 198 2000.0 1.0 0.0 -de 02_wind_on 1 198 900.0 1.0 0.0 +de 01_solar 1 198 2000.0 0.0 1.0 +de 02_wind_on 1 198 900.0 0.0 1.0 de 03_wind_off 1 198 0.0 0.0 0.0 de 04_res 1 198 0.0 0.0 0.0 de 05_nuclear 1 198 0.0 0.0 0.0 @@ -1781,8 +1781,8 @@ de 06_coal 1 198 0.0 0.0 0.0 de 07_gas 1 198 0.0 0.0 0.0 de 08_non-res 1 198 0.0 0.0 0.0 de 09_hydro_pump 1 198 0.0 0.0 0.0 -de 01_solar 1 199 2000.0 1.0 0.0 -de 02_wind_on 1 199 1000.0 1.0 0.0 +de 01_solar 1 199 2000.0 0.0 1.0 +de 02_wind_on 1 199 1000.0 0.0 1.0 de 03_wind_off 1 199 0.0 0.0 0.0 de 04_res 1 199 0.0 0.0 0.0 de 05_nuclear 1 199 0.0 0.0 0.0 @@ -1790,8 +1790,8 @@ de 06_coal 1 199 0.0 0.0 0.0 de 07_gas 1 199 0.0 0.0 0.0 de 08_non-res 1 199 0.0 0.0 0.0 de 09_hydro_pump 1 199 0.0 0.0 0.0 -de 01_solar 1 200 2000.0 1.0 0.0 -de 02_wind_on 1 200 1100.0 1.0 0.0 +de 01_solar 1 200 2000.0 0.0 1.0 +de 02_wind_on 1 200 1100.0 0.0 1.0 de 03_wind_off 1 200 0.0 0.0 0.0 de 04_res 1 200 0.0 0.0 0.0 de 05_nuclear 1 200 0.0 0.0 0.0 @@ -1799,8 +1799,8 @@ de 06_coal 1 200 0.0 0.0 0.0 de 07_gas 1 200 0.0 0.0 0.0 de 08_non-res 1 200 0.0 0.0 0.0 de 09_hydro_pump 1 200 0.0 0.0 0.0 -de 01_solar 1 201 2000.0 1.0 0.0 -de 02_wind_on 1 201 1200.0 1.0 0.0 +de 01_solar 1 201 2000.0 0.0 1.0 +de 02_wind_on 1 201 1200.0 0.0 1.0 de 03_wind_off 1 201 0.0 0.0 0.0 de 04_res 1 201 0.0 0.0 0.0 de 05_nuclear 1 201 0.0 0.0 0.0 @@ -1808,8 +1808,8 @@ de 06_coal 1 201 0.0 0.0 0.0 de 07_gas 1 201 0.0 0.0 0.0 de 08_non-res 1 201 0.0 0.0 0.0 de 09_hydro_pump 1 201 0.0 0.0 0.0 -de 01_solar 1 202 2000.0 1.0 0.0 -de 02_wind_on 1 202 1300.0 1.0 0.0 +de 01_solar 1 202 2000.0 0.0 1.0 +de 02_wind_on 1 202 1300.0 0.0 1.0 de 03_wind_off 1 202 0.0 0.0 0.0 de 04_res 1 202 0.0 0.0 0.0 de 05_nuclear 1 202 0.0 0.0 0.0 @@ -1817,8 +1817,8 @@ de 06_coal 1 202 0.0 0.0 0.0 de 07_gas 1 202 0.0 0.0 0.0 de 08_non-res 1 202 0.0 0.0 0.0 de 09_hydro_pump 1 202 0.0 0.0 0.0 -de 01_solar 1 203 2000.0 1.0 0.0 -de 02_wind_on 1 203 1400.0 1.0 0.0 +de 01_solar 1 203 2000.0 0.0 1.0 +de 02_wind_on 1 203 1400.0 0.0 1.0 de 03_wind_off 1 203 0.0 0.0 0.0 de 04_res 1 203 0.0 0.0 0.0 de 05_nuclear 1 203 0.0 0.0 0.0 @@ -1826,8 +1826,8 @@ de 06_coal 1 203 0.0 0.0 0.0 de 07_gas 1 203 0.0 0.0 0.0 de 08_non-res 1 203 0.0 0.0 0.0 de 09_hydro_pump 1 203 0.0 0.0 0.0 -de 01_solar 1 204 2000.0 1.0 0.0 -de 02_wind_on 1 204 1500.0 1.0 0.0 +de 01_solar 1 204 2000.0 0.0 1.0 +de 02_wind_on 1 204 1500.0 0.0 1.0 de 03_wind_off 1 204 0.0 0.0 0.0 de 04_res 1 204 0.0 0.0 0.0 de 05_nuclear 1 204 0.0 0.0 0.0 @@ -1835,8 +1835,8 @@ de 06_coal 1 204 0.0 0.0 0.0 de 07_gas 1 204 0.0 0.0 0.0 de 08_non-res 1 204 0.0 0.0 0.0 de 09_hydro_pump 1 204 0.0 0.0 0.0 -de 01_solar 1 205 2000.0 1.0 0.0 -de 02_wind_on 1 205 1600.0 1.0 0.0 +de 01_solar 1 205 2000.0 0.0 1.0 +de 02_wind_on 1 205 1600.0 0.0 1.0 de 03_wind_off 1 205 0.0 0.0 0.0 de 04_res 1 205 0.0 0.0 0.0 de 05_nuclear 1 205 0.0 0.0 0.0 @@ -1844,8 +1844,8 @@ de 06_coal 1 205 0.0 0.0 0.0 de 07_gas 1 205 0.0 0.0 0.0 de 08_non-res 1 205 0.0 0.0 0.0 de 09_hydro_pump 1 205 0.0 0.0 0.0 -de 01_solar 1 206 2000.0 1.0 0.0 -de 02_wind_on 1 206 1700.0 1.0 0.0 +de 01_solar 1 206 2000.0 0.0 1.0 +de 02_wind_on 1 206 1700.0 0.0 1.0 de 03_wind_off 1 206 0.0 0.0 0.0 de 04_res 1 206 0.0 0.0 0.0 de 05_nuclear 1 206 0.0 0.0 0.0 @@ -1853,8 +1853,8 @@ de 06_coal 1 206 0.0 0.0 0.0 de 07_gas 1 206 0.0 0.0 0.0 de 08_non-res 1 206 0.0 0.0 0.0 de 09_hydro_pump 1 206 0.0 0.0 0.0 -de 01_solar 1 207 2000.0 1.0 0.0 -de 02_wind_on 1 207 1800.0 1.0 0.0 +de 01_solar 1 207 2000.0 0.0 1.0 +de 02_wind_on 1 207 1800.0 0.0 1.0 de 03_wind_off 1 207 0.0 0.0 0.0 de 04_res 1 207 0.0 0.0 0.0 de 05_nuclear 1 207 0.0 0.0 0.0 @@ -1862,8 +1862,8 @@ de 06_coal 1 207 0.0 0.0 0.0 de 07_gas 1 207 0.0 0.0 0.0 de 08_non-res 1 207 0.0 0.0 0.0 de 09_hydro_pump 1 207 0.0 0.0 0.0 -de 01_solar 1 208 2000.0 1.0 0.0 -de 02_wind_on 1 208 1900.0 1.0 0.0 +de 01_solar 1 208 2000.0 0.0 1.0 +de 02_wind_on 1 208 1900.0 0.0 1.0 de 03_wind_off 1 208 0.0 0.0 0.0 de 04_res 1 208 0.0 0.0 0.0 de 05_nuclear 1 208 0.0 0.0 0.0 @@ -1871,8 +1871,8 @@ de 06_coal 1 208 0.0 0.0 0.0 de 07_gas 1 208 0.0 0.0 0.0 de 08_non-res 1 208 0.0 0.0 0.0 de 09_hydro_pump 1 208 0.0 0.0 0.0 -de 01_solar 1 209 2000.0 1.0 0.0 -de 02_wind_on 1 209 2000.0 1.0 0.0 +de 01_solar 1 209 2000.0 0.0 1.0 +de 02_wind_on 1 209 2000.0 0.0 1.0 de 03_wind_off 1 209 0.0 0.0 0.0 de 04_res 1 209 0.0 0.0 0.0 de 05_nuclear 1 209 0.0 0.0 0.0 @@ -1880,1149 +1880,1149 @@ de 06_coal 1 209 0.0 0.0 0.0 de 07_gas 1 209 0.0 0.0 0.0 de 08_non-res 1 209 0.0 0.0 0.0 de 09_hydro_pump 1 209 0.0 0.0 0.0 -de 01_solar 1 210 2000.0 1.0 0.0 -de 02_wind_on 1 210 2000.0 1.0 0.0 -de 03_wind_off 1 210 100.0 1.0 0.0 +de 01_solar 1 210 2000.0 0.0 1.0 +de 02_wind_on 1 210 2000.0 0.0 1.0 +de 03_wind_off 1 210 100.0 0.0 1.0 de 04_res 1 210 0.0 0.0 0.0 de 05_nuclear 1 210 0.0 0.0 0.0 de 06_coal 1 210 0.0 0.0 0.0 de 07_gas 1 210 0.0 0.0 0.0 de 08_non-res 1 210 0.0 0.0 0.0 de 09_hydro_pump 1 210 0.0 0.0 0.0 -de 01_solar 1 211 2000.0 1.0 0.0 -de 02_wind_on 1 211 2000.0 1.0 0.0 -de 03_wind_off 1 211 200.0 1.0 0.0 +de 01_solar 1 211 2000.0 0.0 1.0 +de 02_wind_on 1 211 2000.0 0.0 1.0 +de 03_wind_off 1 211 200.0 0.0 1.0 de 04_res 1 211 0.0 0.0 0.0 de 05_nuclear 1 211 0.0 0.0 0.0 de 06_coal 1 211 0.0 0.0 0.0 de 07_gas 1 211 0.0 0.0 0.0 de 08_non-res 1 211 0.0 0.0 0.0 de 09_hydro_pump 1 211 0.0 0.0 0.0 -de 01_solar 1 212 2000.0 1.0 0.0 -de 02_wind_on 1 212 2000.0 1.0 0.0 -de 03_wind_off 1 212 300.0 1.0 0.0 +de 01_solar 1 212 2000.0 0.0 1.0 +de 02_wind_on 1 212 2000.0 0.0 1.0 +de 03_wind_off 1 212 300.0 0.0 1.0 de 04_res 1 212 0.0 0.0 0.0 de 05_nuclear 1 212 0.0 0.0 0.0 de 06_coal 1 212 0.0 0.0 0.0 de 07_gas 1 212 0.0 0.0 0.0 de 08_non-res 1 212 0.0 0.0 0.0 de 09_hydro_pump 1 212 0.0 0.0 0.0 -de 01_solar 1 213 2000.0 1.0 0.0 -de 02_wind_on 1 213 2000.0 1.0 0.0 -de 03_wind_off 1 213 400.0 1.0 0.0 +de 01_solar 1 213 2000.0 0.0 1.0 +de 02_wind_on 1 213 2000.0 0.0 1.0 +de 03_wind_off 1 213 400.0 0.0 1.0 de 04_res 1 213 0.0 0.0 0.0 de 05_nuclear 1 213 0.0 0.0 0.0 de 06_coal 1 213 0.0 0.0 0.0 de 07_gas 1 213 0.0 0.0 0.0 de 08_non-res 1 213 0.0 0.0 0.0 de 09_hydro_pump 1 213 0.0 0.0 0.0 -de 01_solar 1 214 2000.0 1.0 0.0 -de 02_wind_on 1 214 2000.0 1.0 0.0 -de 03_wind_off 1 214 500.0 1.0 0.0 +de 01_solar 1 214 2000.0 0.0 1.0 +de 02_wind_on 1 214 2000.0 0.0 1.0 +de 03_wind_off 1 214 500.0 0.0 1.0 de 04_res 1 214 0.0 0.0 0.0 de 05_nuclear 1 214 0.0 0.0 0.0 de 06_coal 1 214 0.0 0.0 0.0 de 07_gas 1 214 0.0 0.0 0.0 de 08_non-res 1 214 0.0 0.0 0.0 de 09_hydro_pump 1 214 0.0 0.0 0.0 -de 01_solar 1 215 2000.0 1.0 0.0 -de 02_wind_on 1 215 2000.0 1.0 0.0 -de 03_wind_off 1 215 600.0 1.0 0.0 +de 01_solar 1 215 2000.0 0.0 1.0 +de 02_wind_on 1 215 2000.0 0.0 1.0 +de 03_wind_off 1 215 600.0 0.0 1.0 de 04_res 1 215 0.0 0.0 0.0 de 05_nuclear 1 215 0.0 0.0 0.0 de 06_coal 1 215 0.0 0.0 0.0 de 07_gas 1 215 0.0 0.0 0.0 de 08_non-res 1 215 0.0 0.0 0.0 de 09_hydro_pump 1 215 0.0 0.0 0.0 -de 01_solar 1 216 2000.0 1.0 0.0 -de 02_wind_on 1 216 2000.0 1.0 0.0 -de 03_wind_off 1 216 700.0 1.0 0.0 +de 01_solar 1 216 2000.0 0.0 1.0 +de 02_wind_on 1 216 2000.0 0.0 1.0 +de 03_wind_off 1 216 700.0 0.0 1.0 de 04_res 1 216 0.0 0.0 0.0 de 05_nuclear 1 216 0.0 0.0 0.0 de 06_coal 1 216 0.0 0.0 0.0 de 07_gas 1 216 0.0 0.0 0.0 de 08_non-res 1 216 0.0 0.0 0.0 de 09_hydro_pump 1 216 0.0 0.0 0.0 -de 01_solar 1 217 2000.0 1.0 0.0 -de 02_wind_on 1 217 2000.0 1.0 0.0 -de 03_wind_off 1 217 800.0 1.0 0.0 +de 01_solar 1 217 2000.0 0.0 1.0 +de 02_wind_on 1 217 2000.0 0.0 1.0 +de 03_wind_off 1 217 800.0 0.0 1.0 de 04_res 1 217 0.0 0.0 0.0 de 05_nuclear 1 217 0.0 0.0 0.0 de 06_coal 1 217 0.0 0.0 0.0 de 07_gas 1 217 0.0 0.0 0.0 de 08_non-res 1 217 0.0 0.0 0.0 de 09_hydro_pump 1 217 0.0 0.0 0.0 -de 01_solar 1 218 2000.0 1.0 0.0 -de 02_wind_on 1 218 2000.0 1.0 0.0 -de 03_wind_off 1 218 900.0 1.0 0.0 +de 01_solar 1 218 2000.0 0.0 1.0 +de 02_wind_on 1 218 2000.0 0.0 1.0 +de 03_wind_off 1 218 900.0 0.0 1.0 de 04_res 1 218 0.0 0.0 0.0 de 05_nuclear 1 218 0.0 0.0 0.0 de 06_coal 1 218 0.0 0.0 0.0 de 07_gas 1 218 0.0 0.0 0.0 de 08_non-res 1 218 0.0 0.0 0.0 de 09_hydro_pump 1 218 0.0 0.0 0.0 -de 01_solar 1 219 2000.0 1.0 0.0 -de 02_wind_on 1 219 2000.0 1.0 0.0 -de 03_wind_off 1 219 1000.0 1.0 0.0 +de 01_solar 1 219 2000.0 0.0 1.0 +de 02_wind_on 1 219 2000.0 0.0 1.0 +de 03_wind_off 1 219 1000.0 0.0 1.0 de 04_res 1 219 0.0 0.0 0.0 de 05_nuclear 1 219 0.0 0.0 0.0 de 06_coal 1 219 0.0 0.0 0.0 de 07_gas 1 219 0.0 0.0 0.0 de 08_non-res 1 219 0.0 0.0 0.0 de 09_hydro_pump 1 219 0.0 0.0 0.0 -de 01_solar 1 220 2000.0 1.0 0.0 -de 02_wind_on 1 220 2000.0 1.0 0.0 -de 03_wind_off 1 220 1100.0 1.0 0.0 +de 01_solar 1 220 2000.0 0.0 1.0 +de 02_wind_on 1 220 2000.0 0.0 1.0 +de 03_wind_off 1 220 1100.0 0.0 1.0 de 04_res 1 220 0.0 0.0 0.0 de 05_nuclear 1 220 0.0 0.0 0.0 de 06_coal 1 220 0.0 0.0 0.0 de 07_gas 1 220 0.0 0.0 0.0 de 08_non-res 1 220 0.0 0.0 0.0 de 09_hydro_pump 1 220 0.0 0.0 0.0 -de 01_solar 1 221 2000.0 1.0 0.0 -de 02_wind_on 1 221 2000.0 1.0 0.0 -de 03_wind_off 1 221 1200.0 1.0 0.0 +de 01_solar 1 221 2000.0 0.0 1.0 +de 02_wind_on 1 221 2000.0 0.0 1.0 +de 03_wind_off 1 221 1200.0 0.0 1.0 de 04_res 1 221 0.0 0.0 0.0 de 05_nuclear 1 221 0.0 0.0 0.0 de 06_coal 1 221 0.0 0.0 0.0 de 07_gas 1 221 0.0 0.0 0.0 de 08_non-res 1 221 0.0 0.0 0.0 de 09_hydro_pump 1 221 0.0 0.0 0.0 -de 01_solar 1 222 2000.0 1.0 0.0 -de 02_wind_on 1 222 2000.0 1.0 0.0 -de 03_wind_off 1 222 1300.0 1.0 0.0 +de 01_solar 1 222 2000.0 0.0 1.0 +de 02_wind_on 1 222 2000.0 0.0 1.0 +de 03_wind_off 1 222 1300.0 0.0 1.0 de 04_res 1 222 0.0 0.0 0.0 de 05_nuclear 1 222 0.0 0.0 0.0 de 06_coal 1 222 0.0 0.0 0.0 de 07_gas 1 222 0.0 0.0 0.0 de 08_non-res 1 222 0.0 0.0 0.0 de 09_hydro_pump 1 222 0.0 0.0 0.0 -de 01_solar 1 223 2000.0 1.0 0.0 -de 02_wind_on 1 223 2000.0 1.0 0.0 -de 03_wind_off 1 223 1400.0 1.0 0.0 +de 01_solar 1 223 2000.0 0.0 1.0 +de 02_wind_on 1 223 2000.0 0.0 1.0 +de 03_wind_off 1 223 1400.0 0.0 1.0 de 04_res 1 223 0.0 0.0 0.0 de 05_nuclear 1 223 0.0 0.0 0.0 de 06_coal 1 223 0.0 0.0 0.0 de 07_gas 1 223 0.0 0.0 0.0 de 08_non-res 1 223 0.0 0.0 0.0 de 09_hydro_pump 1 223 0.0 0.0 0.0 -de 01_solar 1 224 2000.0 1.0 0.0 -de 02_wind_on 1 224 2000.0 1.0 0.0 -de 03_wind_off 1 224 1500.0 1.0 0.0 +de 01_solar 1 224 2000.0 0.0 1.0 +de 02_wind_on 1 224 2000.0 0.0 1.0 +de 03_wind_off 1 224 1500.0 0.0 1.0 de 04_res 1 224 0.0 0.0 0.0 de 05_nuclear 1 224 0.0 0.0 0.0 de 06_coal 1 224 0.0 0.0 0.0 de 07_gas 1 224 0.0 0.0 0.0 de 08_non-res 1 224 0.0 0.0 0.0 de 09_hydro_pump 1 224 0.0 0.0 0.0 -de 01_solar 1 225 2000.0 1.0 0.0 -de 02_wind_on 1 225 2000.0 1.0 0.0 -de 03_wind_off 1 225 1600.0 1.0 0.0 +de 01_solar 1 225 2000.0 0.0 1.0 +de 02_wind_on 1 225 2000.0 0.0 1.0 +de 03_wind_off 1 225 1600.0 0.0 1.0 de 04_res 1 225 0.0 0.0 0.0 de 05_nuclear 1 225 0.0 0.0 0.0 de 06_coal 1 225 0.0 0.0 0.0 de 07_gas 1 225 0.0 0.0 0.0 de 08_non-res 1 225 0.0 0.0 0.0 de 09_hydro_pump 1 225 0.0 0.0 0.0 -de 01_solar 1 226 2000.0 1.0 0.0 -de 02_wind_on 1 226 2000.0 1.0 0.0 -de 03_wind_off 1 226 1700.0 1.0 0.0 +de 01_solar 1 226 2000.0 0.0 1.0 +de 02_wind_on 1 226 2000.0 0.0 1.0 +de 03_wind_off 1 226 1700.0 0.0 1.0 de 04_res 1 226 0.0 0.0 0.0 de 05_nuclear 1 226 0.0 0.0 0.0 de 06_coal 1 226 0.0 0.0 0.0 de 07_gas 1 226 0.0 0.0 0.0 de 08_non-res 1 226 0.0 0.0 0.0 de 09_hydro_pump 1 226 0.0 0.0 0.0 -de 01_solar 1 227 2000.0 1.0 0.0 -de 02_wind_on 1 227 2000.0 1.0 0.0 -de 03_wind_off 1 227 1800.0 1.0 0.0 +de 01_solar 1 227 2000.0 0.0 1.0 +de 02_wind_on 1 227 2000.0 0.0 1.0 +de 03_wind_off 1 227 1800.0 0.0 1.0 de 04_res 1 227 0.0 0.0 0.0 de 05_nuclear 1 227 0.0 0.0 0.0 de 06_coal 1 227 0.0 0.0 0.0 de 07_gas 1 227 0.0 0.0 0.0 de 08_non-res 1 227 0.0 0.0 0.0 de 09_hydro_pump 1 227 0.0 0.0 0.0 -de 01_solar 1 228 2000.0 1.0 0.0 -de 02_wind_on 1 228 2000.0 1.0 0.0 -de 03_wind_off 1 228 1900.0 1.0 0.0 +de 01_solar 1 228 2000.0 0.0 1.0 +de 02_wind_on 1 228 2000.0 0.0 1.0 +de 03_wind_off 1 228 1900.0 0.0 1.0 de 04_res 1 228 0.0 0.0 0.0 de 05_nuclear 1 228 0.0 0.0 0.0 de 06_coal 1 228 0.0 0.0 0.0 de 07_gas 1 228 0.0 0.0 0.0 de 08_non-res 1 228 0.0 0.0 0.0 de 09_hydro_pump 1 228 0.0 0.0 0.0 -de 01_solar 1 229 2000.0 1.0 0.0 -de 02_wind_on 1 229 2000.0 1.0 0.0 -de 03_wind_off 1 229 2000.0 1.0 0.0 +de 01_solar 1 229 2000.0 0.0 1.0 +de 02_wind_on 1 229 2000.0 0.0 1.0 +de 03_wind_off 1 229 2000.0 0.0 1.0 de 04_res 1 229 0.0 0.0 0.0 de 05_nuclear 1 229 0.0 0.0 0.0 de 06_coal 1 229 0.0 0.0 0.0 de 07_gas 1 229 0.0 0.0 0.0 de 08_non-res 1 229 0.0 0.0 0.0 de 09_hydro_pump 1 229 0.0 0.0 0.0 -de 01_solar 1 230 2000.0 1.0 0.0 -de 02_wind_on 1 230 2000.0 1.0 0.0 -de 03_wind_off 1 230 2000.0 1.0 0.0 -de 04_res 1 230 100.0 1.0 0.0 +de 01_solar 1 230 2000.0 0.0 1.0 +de 02_wind_on 1 230 2000.0 0.0 1.0 +de 03_wind_off 1 230 2000.0 0.0 1.0 +de 04_res 1 230 100.0 0.0 1.0 de 05_nuclear 1 230 0.0 0.0 0.0 de 06_coal 1 230 0.0 0.0 0.0 de 07_gas 1 230 0.0 0.0 0.0 de 08_non-res 1 230 0.0 0.0 0.0 de 09_hydro_pump 1 230 0.0 0.0 0.0 -de 01_solar 1 231 2000.0 1.0 0.0 -de 02_wind_on 1 231 2000.0 1.0 0.0 -de 03_wind_off 1 231 2000.0 1.0 0.0 -de 04_res 1 231 200.0 1.0 0.0 +de 01_solar 1 231 2000.0 0.0 1.0 +de 02_wind_on 1 231 2000.0 0.0 1.0 +de 03_wind_off 1 231 2000.0 0.0 1.0 +de 04_res 1 231 200.0 0.0 1.0 de 05_nuclear 1 231 0.0 0.0 0.0 de 06_coal 1 231 0.0 0.0 0.0 de 07_gas 1 231 0.0 0.0 0.0 de 08_non-res 1 231 0.0 0.0 0.0 de 09_hydro_pump 1 231 0.0 0.0 0.0 -de 01_solar 1 232 2000.0 1.0 0.0 -de 02_wind_on 1 232 2000.0 1.0 0.0 -de 03_wind_off 1 232 2000.0 1.0 0.0 -de 04_res 1 232 300.0 1.0 0.0 +de 01_solar 1 232 2000.0 0.0 1.0 +de 02_wind_on 1 232 2000.0 0.0 1.0 +de 03_wind_off 1 232 2000.0 0.0 1.0 +de 04_res 1 232 300.0 0.0 1.0 de 05_nuclear 1 232 0.0 0.0 0.0 de 06_coal 1 232 0.0 0.0 0.0 de 07_gas 1 232 0.0 0.0 0.0 de 08_non-res 1 232 0.0 0.0 0.0 de 09_hydro_pump 1 232 0.0 0.0 0.0 -de 01_solar 1 233 2000.0 1.0 0.0 -de 02_wind_on 1 233 2000.0 1.0 0.0 -de 03_wind_off 1 233 2000.0 1.0 0.0 -de 04_res 1 233 400.0 1.0 0.0 +de 01_solar 1 233 2000.0 0.0 1.0 +de 02_wind_on 1 233 2000.0 0.0 1.0 +de 03_wind_off 1 233 2000.0 0.0 1.0 +de 04_res 1 233 400.0 0.0 1.0 de 05_nuclear 1 233 0.0 0.0 0.0 de 06_coal 1 233 0.0 0.0 0.0 de 07_gas 1 233 0.0 0.0 0.0 de 08_non-res 1 233 0.0 0.0 0.0 de 09_hydro_pump 1 233 0.0 0.0 0.0 -de 01_solar 1 234 2000.0 1.0 0.0 -de 02_wind_on 1 234 2000.0 1.0 0.0 -de 03_wind_off 1 234 2000.0 1.0 0.0 -de 04_res 1 234 500.0 1.0 0.0 +de 01_solar 1 234 2000.0 0.0 1.0 +de 02_wind_on 1 234 2000.0 0.0 1.0 +de 03_wind_off 1 234 2000.0 0.0 1.0 +de 04_res 1 234 500.0 0.0 1.0 de 05_nuclear 1 234 0.0 0.0 0.0 de 06_coal 1 234 0.0 0.0 0.0 de 07_gas 1 234 0.0 0.0 0.0 de 08_non-res 1 234 0.0 0.0 0.0 de 09_hydro_pump 1 234 0.0 0.0 0.0 -de 01_solar 1 235 2000.0 1.0 0.0 -de 02_wind_on 1 235 2000.0 1.0 0.0 -de 03_wind_off 1 235 2000.0 1.0 0.0 -de 04_res 1 235 600.0 1.0 0.0 +de 01_solar 1 235 2000.0 0.0 1.0 +de 02_wind_on 1 235 2000.0 0.0 1.0 +de 03_wind_off 1 235 2000.0 0.0 1.0 +de 04_res 1 235 600.0 0.0 1.0 de 05_nuclear 1 235 0.0 0.0 0.0 de 06_coal 1 235 0.0 0.0 0.0 de 07_gas 1 235 0.0 0.0 0.0 de 08_non-res 1 235 0.0 0.0 0.0 de 09_hydro_pump 1 235 0.0 0.0 0.0 -de 01_solar 1 236 2000.0 1.0 0.0 -de 02_wind_on 1 236 2000.0 1.0 0.0 -de 03_wind_off 1 236 2000.0 1.0 0.0 -de 04_res 1 236 700.0 1.0 0.0 +de 01_solar 1 236 2000.0 0.0 1.0 +de 02_wind_on 1 236 2000.0 0.0 1.0 +de 03_wind_off 1 236 2000.0 0.0 1.0 +de 04_res 1 236 700.0 0.0 1.0 de 05_nuclear 1 236 0.0 0.0 0.0 de 06_coal 1 236 0.0 0.0 0.0 de 07_gas 1 236 0.0 0.0 0.0 de 08_non-res 1 236 0.0 0.0 0.0 de 09_hydro_pump 1 236 0.0 0.0 0.0 -de 01_solar 1 237 2000.0 1.0 0.0 -de 02_wind_on 1 237 2000.0 1.0 0.0 -de 03_wind_off 1 237 2000.0 1.0 0.0 -de 04_res 1 237 800.0 1.0 0.0 +de 01_solar 1 237 2000.0 0.0 1.0 +de 02_wind_on 1 237 2000.0 0.0 1.0 +de 03_wind_off 1 237 2000.0 0.0 1.0 +de 04_res 1 237 800.0 0.0 1.0 de 05_nuclear 1 237 0.0 0.0 0.0 de 06_coal 1 237 0.0 0.0 0.0 de 07_gas 1 237 0.0 0.0 0.0 de 08_non-res 1 237 0.0 0.0 0.0 de 09_hydro_pump 1 237 0.0 0.0 0.0 -de 01_solar 1 238 2000.0 1.0 0.0 -de 02_wind_on 1 238 2000.0 1.0 0.0 -de 03_wind_off 1 238 2000.0 1.0 0.0 -de 04_res 1 238 900.0 1.0 0.0 +de 01_solar 1 238 2000.0 0.0 1.0 +de 02_wind_on 1 238 2000.0 0.0 1.0 +de 03_wind_off 1 238 2000.0 0.0 1.0 +de 04_res 1 238 900.0 0.0 1.0 de 05_nuclear 1 238 0.0 0.0 0.0 de 06_coal 1 238 0.0 0.0 0.0 de 07_gas 1 238 0.0 0.0 0.0 de 08_non-res 1 238 0.0 0.0 0.0 de 09_hydro_pump 1 238 0.0 0.0 0.0 -de 01_solar 1 239 2000.0 1.0 0.0 -de 02_wind_on 1 239 2000.0 1.0 0.0 -de 03_wind_off 1 239 2000.0 1.0 0.0 -de 04_res 1 239 1000.0 1.0 0.0 +de 01_solar 1 239 2000.0 0.0 1.0 +de 02_wind_on 1 239 2000.0 0.0 1.0 +de 03_wind_off 1 239 2000.0 0.0 1.0 +de 04_res 1 239 1000.0 0.0 1.0 de 05_nuclear 1 239 0.0 0.0 0.0 de 06_coal 1 239 0.0 0.0 0.0 de 07_gas 1 239 0.0 0.0 0.0 de 08_non-res 1 239 0.0 0.0 0.0 de 09_hydro_pump 1 239 0.0 0.0 0.0 -de 01_solar 1 240 2000.0 1.0 0.0 -de 02_wind_on 1 240 2000.0 1.0 0.0 -de 03_wind_off 1 240 2000.0 1.0 0.0 -de 04_res 1 240 1100.0 1.0 0.0 +de 01_solar 1 240 2000.0 0.0 1.0 +de 02_wind_on 1 240 2000.0 0.0 1.0 +de 03_wind_off 1 240 2000.0 0.0 1.0 +de 04_res 1 240 1100.0 0.0 1.0 de 05_nuclear 1 240 0.0 0.0 0.0 de 06_coal 1 240 0.0 0.0 0.0 de 07_gas 1 240 0.0 0.0 0.0 de 08_non-res 1 240 0.0 0.0 0.0 de 09_hydro_pump 1 240 0.0 0.0 0.0 -de 01_solar 1 241 2000.0 1.0 0.0 -de 02_wind_on 1 241 2000.0 1.0 0.0 -de 03_wind_off 1 241 2000.0 1.0 0.0 -de 04_res 1 241 1200.0 1.0 0.0 +de 01_solar 1 241 2000.0 0.0 1.0 +de 02_wind_on 1 241 2000.0 0.0 1.0 +de 03_wind_off 1 241 2000.0 0.0 1.0 +de 04_res 1 241 1200.0 0.0 1.0 de 05_nuclear 1 241 0.0 0.0 0.0 de 06_coal 1 241 0.0 0.0 0.0 de 07_gas 1 241 0.0 0.0 0.0 de 08_non-res 1 241 0.0 0.0 0.0 de 09_hydro_pump 1 241 0.0 0.0 0.0 -de 01_solar 1 242 2000.0 1.0 0.0 -de 02_wind_on 1 242 2000.0 1.0 0.0 -de 03_wind_off 1 242 2000.0 1.0 0.0 -de 04_res 1 242 1300.0 1.0 0.0 +de 01_solar 1 242 2000.0 0.0 1.0 +de 02_wind_on 1 242 2000.0 0.0 1.0 +de 03_wind_off 1 242 2000.0 0.0 1.0 +de 04_res 1 242 1300.0 0.0 1.0 de 05_nuclear 1 242 0.0 0.0 0.0 de 06_coal 1 242 0.0 0.0 0.0 de 07_gas 1 242 0.0 0.0 0.0 de 08_non-res 1 242 0.0 0.0 0.0 de 09_hydro_pump 1 242 0.0 0.0 0.0 -de 01_solar 1 243 2000.0 1.0 0.0 -de 02_wind_on 1 243 2000.0 1.0 0.0 -de 03_wind_off 1 243 2000.0 1.0 0.0 -de 04_res 1 243 1400.0 1.0 0.0 +de 01_solar 1 243 2000.0 0.0 1.0 +de 02_wind_on 1 243 2000.0 0.0 1.0 +de 03_wind_off 1 243 2000.0 0.0 1.0 +de 04_res 1 243 1400.0 0.0 1.0 de 05_nuclear 1 243 0.0 0.0 0.0 de 06_coal 1 243 0.0 0.0 0.0 de 07_gas 1 243 0.0 0.0 0.0 de 08_non-res 1 243 0.0 0.0 0.0 de 09_hydro_pump 1 243 0.0 0.0 0.0 -de 01_solar 1 244 2000.0 1.0 0.0 -de 02_wind_on 1 244 2000.0 1.0 0.0 -de 03_wind_off 1 244 2000.0 1.0 0.0 -de 04_res 1 244 1500.0 1.0 0.0 +de 01_solar 1 244 2000.0 0.0 1.0 +de 02_wind_on 1 244 2000.0 0.0 1.0 +de 03_wind_off 1 244 2000.0 0.0 1.0 +de 04_res 1 244 1500.0 0.0 1.0 de 05_nuclear 1 244 0.0 0.0 0.0 de 06_coal 1 244 0.0 0.0 0.0 de 07_gas 1 244 0.0 0.0 0.0 de 08_non-res 1 244 0.0 0.0 0.0 de 09_hydro_pump 1 244 0.0 0.0 0.0 -de 01_solar 1 245 2000.0 1.0 0.0 -de 02_wind_on 1 245 2000.0 1.0 0.0 -de 03_wind_off 1 245 2000.0 1.0 0.0 -de 04_res 1 245 1600.0 1.0 0.0 +de 01_solar 1 245 2000.0 0.0 1.0 +de 02_wind_on 1 245 2000.0 0.0 1.0 +de 03_wind_off 1 245 2000.0 0.0 1.0 +de 04_res 1 245 1600.0 0.0 1.0 de 05_nuclear 1 245 0.0 0.0 0.0 de 06_coal 1 245 0.0 0.0 0.0 de 07_gas 1 245 0.0 0.0 0.0 de 08_non-res 1 245 0.0 0.0 0.0 de 09_hydro_pump 1 245 0.0 0.0 0.0 -de 01_solar 1 246 2000.0 1.0 0.0 -de 02_wind_on 1 246 2000.0 1.0 0.0 -de 03_wind_off 1 246 2000.0 1.0 0.0 -de 04_res 1 246 1700.0 1.0 0.0 +de 01_solar 1 246 2000.0 0.0 1.0 +de 02_wind_on 1 246 2000.0 0.0 1.0 +de 03_wind_off 1 246 2000.0 0.0 1.0 +de 04_res 1 246 1700.0 0.0 1.0 de 05_nuclear 1 246 0.0 0.0 0.0 de 06_coal 1 246 0.0 0.0 0.0 de 07_gas 1 246 0.0 0.0 0.0 de 08_non-res 1 246 0.0 0.0 0.0 de 09_hydro_pump 1 246 0.0 0.0 0.0 -de 01_solar 1 247 2000.0 1.0 0.0 -de 02_wind_on 1 247 2000.0 1.0 0.0 -de 03_wind_off 1 247 2000.0 1.0 0.0 -de 04_res 1 247 1800.0 1.0 0.0 +de 01_solar 1 247 2000.0 0.0 1.0 +de 02_wind_on 1 247 2000.0 0.0 1.0 +de 03_wind_off 1 247 2000.0 0.0 1.0 +de 04_res 1 247 1800.0 0.0 1.0 de 05_nuclear 1 247 0.0 0.0 0.0 de 06_coal 1 247 0.0 0.0 0.0 de 07_gas 1 247 0.0 0.0 0.0 de 08_non-res 1 247 0.0 0.0 0.0 de 09_hydro_pump 1 247 0.0 0.0 0.0 -de 01_solar 1 248 2000.0 1.0 0.0 -de 02_wind_on 1 248 2000.0 1.0 0.0 -de 03_wind_off 1 248 2000.0 1.0 0.0 -de 04_res 1 248 1900.0 1.0 0.0 +de 01_solar 1 248 2000.0 0.0 1.0 +de 02_wind_on 1 248 2000.0 0.0 1.0 +de 03_wind_off 1 248 2000.0 0.0 1.0 +de 04_res 1 248 1900.0 0.0 1.0 de 05_nuclear 1 248 0.0 0.0 0.0 de 06_coal 1 248 0.0 0.0 0.0 de 07_gas 1 248 0.0 0.0 0.0 de 08_non-res 1 248 0.0 0.0 0.0 de 09_hydro_pump 1 248 0.0 0.0 0.0 -de 01_solar 1 249 2000.0 1.0 0.0 -de 02_wind_on 1 249 2000.0 1.0 0.0 -de 03_wind_off 1 249 2000.0 1.0 0.0 -de 04_res 1 249 2000.0 1.0 0.0 +de 01_solar 1 249 2000.0 0.0 1.0 +de 02_wind_on 1 249 2000.0 0.0 1.0 +de 03_wind_off 1 249 2000.0 0.0 1.0 +de 04_res 1 249 2000.0 0.0 1.0 de 05_nuclear 1 249 0.0 0.0 0.0 de 06_coal 1 249 0.0 0.0 0.0 de 07_gas 1 249 0.0 0.0 0.0 de 08_non-res 1 249 0.0 0.0 0.0 de 09_hydro_pump 1 249 0.0 0.0 0.0 -de 01_solar 1 250 2000.0 1.0 0.0 -de 02_wind_on 1 250 2000.0 1.0 0.0 -de 03_wind_off 1 250 2000.0 1.0 0.0 -de 04_res 1 250 2000.0 1.0 0.0 -de 05_nuclear 1 250 100.0 1.0 0.0 +de 01_solar 1 250 2000.0 0.0 1.0 +de 02_wind_on 1 250 2000.0 0.0 1.0 +de 03_wind_off 1 250 2000.0 0.0 1.0 +de 04_res 1 250 2000.0 0.0 1.0 +de 05_nuclear 1 250 100.0 0.0 1.0 de 06_coal 1 250 0.0 0.0 0.0 de 07_gas 1 250 0.0 0.0 0.0 de 08_non-res 1 250 0.0 0.0 0.0 de 09_hydro_pump 1 250 0.0 0.0 0.0 -de 01_solar 1 251 2000.0 1.0 0.0 -de 02_wind_on 1 251 2000.0 1.0 0.0 -de 03_wind_off 1 251 2000.0 1.0 0.0 -de 04_res 1 251 2000.0 1.0 0.0 -de 05_nuclear 1 251 200.0 1.0 0.0 +de 01_solar 1 251 2000.0 0.0 1.0 +de 02_wind_on 1 251 2000.0 0.0 1.0 +de 03_wind_off 1 251 2000.0 0.0 1.0 +de 04_res 1 251 2000.0 0.0 1.0 +de 05_nuclear 1 251 200.0 0.0 1.0 de 06_coal 1 251 0.0 0.0 0.0 de 07_gas 1 251 0.0 0.0 0.0 de 08_non-res 1 251 0.0 0.0 0.0 de 09_hydro_pump 1 251 0.0 0.0 0.0 -de 01_solar 1 252 2000.0 1.0 0.0 -de 02_wind_on 1 252 2000.0 1.0 0.0 -de 03_wind_off 1 252 2000.0 1.0 0.0 -de 04_res 1 252 2000.0 1.0 0.0 -de 05_nuclear 1 252 300.0 1.0 0.0 +de 01_solar 1 252 2000.0 0.0 1.0 +de 02_wind_on 1 252 2000.0 0.0 1.0 +de 03_wind_off 1 252 2000.0 0.0 1.0 +de 04_res 1 252 2000.0 0.0 1.0 +de 05_nuclear 1 252 300.0 0.0 1.0 de 06_coal 1 252 0.0 0.0 0.0 de 07_gas 1 252 0.0 0.0 0.0 de 08_non-res 1 252 0.0 0.0 0.0 de 09_hydro_pump 1 252 0.0 0.0 0.0 -de 01_solar 1 253 2000.0 1.0 0.0 -de 02_wind_on 1 253 2000.0 1.0 0.0 -de 03_wind_off 1 253 2000.0 1.0 0.0 -de 04_res 1 253 2000.0 1.0 0.0 -de 05_nuclear 1 253 400.0 1.0 0.0 +de 01_solar 1 253 2000.0 0.0 1.0 +de 02_wind_on 1 253 2000.0 0.0 1.0 +de 03_wind_off 1 253 2000.0 0.0 1.0 +de 04_res 1 253 2000.0 0.0 1.0 +de 05_nuclear 1 253 400.0 0.0 1.0 de 06_coal 1 253 0.0 0.0 0.0 de 07_gas 1 253 0.0 0.0 0.0 de 08_non-res 1 253 0.0 0.0 0.0 de 09_hydro_pump 1 253 0.0 0.0 0.0 -de 01_solar 1 254 2000.0 1.0 0.0 -de 02_wind_on 1 254 2000.0 1.0 0.0 -de 03_wind_off 1 254 2000.0 1.0 0.0 -de 04_res 1 254 2000.0 1.0 0.0 -de 05_nuclear 1 254 500.0 1.0 0.0 +de 01_solar 1 254 2000.0 0.0 1.0 +de 02_wind_on 1 254 2000.0 0.0 1.0 +de 03_wind_off 1 254 2000.0 0.0 1.0 +de 04_res 1 254 2000.0 0.0 1.0 +de 05_nuclear 1 254 500.0 0.0 1.0 de 06_coal 1 254 0.0 0.0 0.0 de 07_gas 1 254 0.0 0.0 0.0 de 08_non-res 1 254 0.0 0.0 0.0 de 09_hydro_pump 1 254 0.0 0.0 0.0 -de 01_solar 1 255 2000.0 1.0 0.0 -de 02_wind_on 1 255 2000.0 1.0 0.0 -de 03_wind_off 1 255 2000.0 1.0 0.0 -de 04_res 1 255 2000.0 1.0 0.0 -de 05_nuclear 1 255 600.0 1.0 0.0 +de 01_solar 1 255 2000.0 0.0 1.0 +de 02_wind_on 1 255 2000.0 0.0 1.0 +de 03_wind_off 1 255 2000.0 0.0 1.0 +de 04_res 1 255 2000.0 0.0 1.0 +de 05_nuclear 1 255 600.0 0.0 1.0 de 06_coal 1 255 0.0 0.0 0.0 de 07_gas 1 255 0.0 0.0 0.0 de 08_non-res 1 255 0.0 0.0 0.0 de 09_hydro_pump 1 255 0.0 0.0 0.0 -de 01_solar 1 256 2000.0 1.0 0.0 -de 02_wind_on 1 256 2000.0 1.0 0.0 -de 03_wind_off 1 256 2000.0 1.0 0.0 -de 04_res 1 256 2000.0 1.0 0.0 -de 05_nuclear 1 256 700.0 1.0 0.0 +de 01_solar 1 256 2000.0 0.0 1.0 +de 02_wind_on 1 256 2000.0 0.0 1.0 +de 03_wind_off 1 256 2000.0 0.0 1.0 +de 04_res 1 256 2000.0 0.0 1.0 +de 05_nuclear 1 256 700.0 0.0 1.0 de 06_coal 1 256 0.0 0.0 0.0 de 07_gas 1 256 0.0 0.0 0.0 de 08_non-res 1 256 0.0 0.0 0.0 de 09_hydro_pump 1 256 0.0 0.0 0.0 -de 01_solar 1 257 2000.0 1.0 0.0 -de 02_wind_on 1 257 2000.0 1.0 0.0 -de 03_wind_off 1 257 2000.0 1.0 0.0 -de 04_res 1 257 2000.0 1.0 0.0 -de 05_nuclear 1 257 800.0 1.0 0.0 +de 01_solar 1 257 2000.0 0.0 1.0 +de 02_wind_on 1 257 2000.0 0.0 1.0 +de 03_wind_off 1 257 2000.0 0.0 1.0 +de 04_res 1 257 2000.0 0.0 1.0 +de 05_nuclear 1 257 800.0 0.0 1.0 de 06_coal 1 257 0.0 0.0 0.0 de 07_gas 1 257 0.0 0.0 0.0 de 08_non-res 1 257 0.0 0.0 0.0 de 09_hydro_pump 1 257 0.0 0.0 0.0 -de 01_solar 1 258 2000.0 1.0 0.0 -de 02_wind_on 1 258 2000.0 1.0 0.0 -de 03_wind_off 1 258 2000.0 1.0 0.0 -de 04_res 1 258 2000.0 1.0 0.0 -de 05_nuclear 1 258 900.0 1.0 0.0 +de 01_solar 1 258 2000.0 0.0 1.0 +de 02_wind_on 1 258 2000.0 0.0 1.0 +de 03_wind_off 1 258 2000.0 0.0 1.0 +de 04_res 1 258 2000.0 0.0 1.0 +de 05_nuclear 1 258 900.0 0.0 1.0 de 06_coal 1 258 0.0 0.0 0.0 de 07_gas 1 258 0.0 0.0 0.0 de 08_non-res 1 258 0.0 0.0 0.0 de 09_hydro_pump 1 258 0.0 0.0 0.0 -de 01_solar 1 259 2000.0 1.0 0.0 -de 02_wind_on 1 259 2000.0 1.0 0.0 -de 03_wind_off 1 259 2000.0 1.0 0.0 -de 04_res 1 259 2000.0 1.0 0.0 -de 05_nuclear 1 259 1000.0 1.0 0.0 +de 01_solar 1 259 2000.0 0.0 1.0 +de 02_wind_on 1 259 2000.0 0.0 1.0 +de 03_wind_off 1 259 2000.0 0.0 1.0 +de 04_res 1 259 2000.0 0.0 1.0 +de 05_nuclear 1 259 1000.0 0.0 1.0 de 06_coal 1 259 0.0 0.0 0.0 de 07_gas 1 259 0.0 0.0 0.0 de 08_non-res 1 259 0.0 0.0 0.0 de 09_hydro_pump 1 259 0.0 0.0 0.0 -de 01_solar 1 260 2000.0 1.0 0.0 -de 02_wind_on 1 260 2000.0 1.0 0.0 -de 03_wind_off 1 260 2000.0 1.0 0.0 -de 04_res 1 260 2000.0 1.0 0.0 -de 05_nuclear 1 260 1100.0 1.0 0.0 +de 01_solar 1 260 2000.0 0.0 1.0 +de 02_wind_on 1 260 2000.0 0.0 1.0 +de 03_wind_off 1 260 2000.0 0.0 1.0 +de 04_res 1 260 2000.0 0.0 1.0 +de 05_nuclear 1 260 1100.0 0.0 1.0 de 06_coal 1 260 0.0 0.0 0.0 de 07_gas 1 260 0.0 0.0 0.0 de 08_non-res 1 260 0.0 0.0 0.0 de 09_hydro_pump 1 260 0.0 0.0 0.0 -de 01_solar 1 261 2000.0 1.0 0.0 -de 02_wind_on 1 261 2000.0 1.0 0.0 -de 03_wind_off 1 261 2000.0 1.0 0.0 -de 04_res 1 261 2000.0 1.0 0.0 -de 05_nuclear 1 261 1200.0 1.0 0.0 +de 01_solar 1 261 2000.0 0.0 1.0 +de 02_wind_on 1 261 2000.0 0.0 1.0 +de 03_wind_off 1 261 2000.0 0.0 1.0 +de 04_res 1 261 2000.0 0.0 1.0 +de 05_nuclear 1 261 1200.0 0.0 1.0 de 06_coal 1 261 0.0 0.0 0.0 de 07_gas 1 261 0.0 0.0 0.0 de 08_non-res 1 261 0.0 0.0 0.0 de 09_hydro_pump 1 261 0.0 0.0 0.0 -de 01_solar 1 262 2000.0 1.0 0.0 -de 02_wind_on 1 262 2000.0 1.0 0.0 -de 03_wind_off 1 262 2000.0 1.0 0.0 -de 04_res 1 262 2000.0 1.0 0.0 -de 05_nuclear 1 262 1300.0 1.0 0.0 +de 01_solar 1 262 2000.0 0.0 1.0 +de 02_wind_on 1 262 2000.0 0.0 1.0 +de 03_wind_off 1 262 2000.0 0.0 1.0 +de 04_res 1 262 2000.0 0.0 1.0 +de 05_nuclear 1 262 1300.0 0.0 1.0 de 06_coal 1 262 0.0 0.0 0.0 de 07_gas 1 262 0.0 0.0 0.0 de 08_non-res 1 262 0.0 0.0 0.0 de 09_hydro_pump 1 262 0.0 0.0 0.0 -de 01_solar 1 263 2000.0 1.0 0.0 -de 02_wind_on 1 263 2000.0 1.0 0.0 -de 03_wind_off 1 263 2000.0 1.0 0.0 -de 04_res 1 263 2000.0 1.0 0.0 -de 05_nuclear 1 263 1400.0 1.0 0.0 +de 01_solar 1 263 2000.0 0.0 1.0 +de 02_wind_on 1 263 2000.0 0.0 1.0 +de 03_wind_off 1 263 2000.0 0.0 1.0 +de 04_res 1 263 2000.0 0.0 1.0 +de 05_nuclear 1 263 1400.0 0.0 1.0 de 06_coal 1 263 0.0 0.0 0.0 de 07_gas 1 263 0.0 0.0 0.0 de 08_non-res 1 263 0.0 0.0 0.0 de 09_hydro_pump 1 263 0.0 0.0 0.0 -de 01_solar 1 264 2000.0 1.0 0.0 -de 02_wind_on 1 264 2000.0 1.0 0.0 -de 03_wind_off 1 264 2000.0 1.0 0.0 -de 04_res 1 264 2000.0 1.0 0.0 -de 05_nuclear 1 264 1500.0 1.0 0.0 +de 01_solar 1 264 2000.0 0.0 1.0 +de 02_wind_on 1 264 2000.0 0.0 1.0 +de 03_wind_off 1 264 2000.0 0.0 1.0 +de 04_res 1 264 2000.0 0.0 1.0 +de 05_nuclear 1 264 1500.0 0.0 1.0 de 06_coal 1 264 0.0 0.0 0.0 de 07_gas 1 264 0.0 0.0 0.0 de 08_non-res 1 264 0.0 0.0 0.0 de 09_hydro_pump 1 264 0.0 0.0 0.0 -de 01_solar 1 265 2000.0 1.0 0.0 -de 02_wind_on 1 265 2000.0 1.0 0.0 -de 03_wind_off 1 265 2000.0 1.0 0.0 -de 04_res 1 265 2000.0 1.0 0.0 -de 05_nuclear 1 265 1600.0 1.0 0.0 +de 01_solar 1 265 2000.0 0.0 1.0 +de 02_wind_on 1 265 2000.0 0.0 1.0 +de 03_wind_off 1 265 2000.0 0.0 1.0 +de 04_res 1 265 2000.0 0.0 1.0 +de 05_nuclear 1 265 1600.0 0.0 1.0 de 06_coal 1 265 0.0 0.0 0.0 de 07_gas 1 265 0.0 0.0 0.0 de 08_non-res 1 265 0.0 0.0 0.0 de 09_hydro_pump 1 265 0.0 0.0 0.0 -de 01_solar 1 266 2000.0 1.0 0.0 -de 02_wind_on 1 266 2000.0 1.0 0.0 -de 03_wind_off 1 266 2000.0 1.0 0.0 -de 04_res 1 266 2000.0 1.0 0.0 -de 05_nuclear 1 266 1700.0 1.0 0.0 +de 01_solar 1 266 2000.0 0.0 1.0 +de 02_wind_on 1 266 2000.0 0.0 1.0 +de 03_wind_off 1 266 2000.0 0.0 1.0 +de 04_res 1 266 2000.0 0.0 1.0 +de 05_nuclear 1 266 1700.0 0.0 1.0 de 06_coal 1 266 0.0 0.0 0.0 de 07_gas 1 266 0.0 0.0 0.0 de 08_non-res 1 266 0.0 0.0 0.0 de 09_hydro_pump 1 266 0.0 0.0 0.0 -de 01_solar 1 267 2000.0 1.0 0.0 -de 02_wind_on 1 267 2000.0 1.0 0.0 -de 03_wind_off 1 267 2000.0 1.0 0.0 -de 04_res 1 267 2000.0 1.0 0.0 -de 05_nuclear 1 267 1800.0 1.0 0.0 +de 01_solar 1 267 2000.0 0.0 1.0 +de 02_wind_on 1 267 2000.0 0.0 1.0 +de 03_wind_off 1 267 2000.0 0.0 1.0 +de 04_res 1 267 2000.0 0.0 1.0 +de 05_nuclear 1 267 1800.0 0.0 1.0 de 06_coal 1 267 0.0 0.0 0.0 de 07_gas 1 267 0.0 0.0 0.0 de 08_non-res 1 267 0.0 0.0 0.0 de 09_hydro_pump 1 267 0.0 0.0 0.0 -de 01_solar 1 268 2000.0 1.0 0.0 -de 02_wind_on 1 268 2000.0 1.0 0.0 -de 03_wind_off 1 268 2000.0 1.0 0.0 -de 04_res 1 268 2000.0 1.0 0.0 -de 05_nuclear 1 268 1900.0 1.0 0.0 +de 01_solar 1 268 2000.0 0.0 1.0 +de 02_wind_on 1 268 2000.0 0.0 1.0 +de 03_wind_off 1 268 2000.0 0.0 1.0 +de 04_res 1 268 2000.0 0.0 1.0 +de 05_nuclear 1 268 1900.0 0.0 1.0 de 06_coal 1 268 0.0 0.0 0.0 de 07_gas 1 268 0.0 0.0 0.0 de 08_non-res 1 268 0.0 0.0 0.0 de 09_hydro_pump 1 268 0.0 0.0 0.0 -de 01_solar 1 269 2000.0 1.0 0.0 -de 02_wind_on 1 269 2000.0 1.0 0.0 -de 03_wind_off 1 269 2000.0 1.0 0.0 -de 04_res 1 269 2000.0 1.0 0.0 -de 05_nuclear 1 269 2000.0 1.0 0.0 +de 01_solar 1 269 2000.0 0.0 1.0 +de 02_wind_on 1 269 2000.0 0.0 1.0 +de 03_wind_off 1 269 2000.0 0.0 1.0 +de 04_res 1 269 2000.0 0.0 1.0 +de 05_nuclear 1 269 2000.0 0.0 1.0 de 06_coal 1 269 0.0 0.0 0.0 de 07_gas 1 269 0.0 0.0 0.0 de 08_non-res 1 269 0.0 0.0 0.0 de 09_hydro_pump 1 269 0.0 0.0 0.0 -de 01_solar 1 270 2000.0 1.0 0.0 -de 02_wind_on 1 270 2000.0 1.0 0.0 -de 03_wind_off 1 270 2000.0 1.0 0.0 -de 04_res 1 270 2000.0 1.0 0.0 -de 05_nuclear 1 270 2000.0 1.0 0.0 -de 06_coal 1 270 100.0 1.0 0.0 +de 01_solar 1 270 2000.0 0.0 1.0 +de 02_wind_on 1 270 2000.0 0.0 1.0 +de 03_wind_off 1 270 2000.0 0.0 1.0 +de 04_res 1 270 2000.0 0.0 1.0 +de 05_nuclear 1 270 2000.0 0.0 1.0 +de 06_coal 1 270 100.0 0.0 1.0 de 07_gas 1 270 0.0 0.0 0.0 de 08_non-res 1 270 0.0 0.0 0.0 de 09_hydro_pump 1 270 0.0 0.0 0.0 -de 01_solar 1 271 2000.0 1.0 0.0 -de 02_wind_on 1 271 2000.0 1.0 0.0 -de 03_wind_off 1 271 2000.0 1.0 0.0 -de 04_res 1 271 2000.0 1.0 0.0 -de 05_nuclear 1 271 2000.0 1.0 0.0 -de 06_coal 1 271 200.0 1.0 0.0 +de 01_solar 1 271 2000.0 0.0 1.0 +de 02_wind_on 1 271 2000.0 0.0 1.0 +de 03_wind_off 1 271 2000.0 0.0 1.0 +de 04_res 1 271 2000.0 0.0 1.0 +de 05_nuclear 1 271 2000.0 0.0 1.0 +de 06_coal 1 271 200.0 0.0 1.0 de 07_gas 1 271 0.0 0.0 0.0 de 08_non-res 1 271 0.0 0.0 0.0 de 09_hydro_pump 1 271 0.0 0.0 0.0 -de 01_solar 1 272 2000.0 1.0 0.0 -de 02_wind_on 1 272 2000.0 1.0 0.0 -de 03_wind_off 1 272 2000.0 1.0 0.0 -de 04_res 1 272 2000.0 1.0 0.0 -de 05_nuclear 1 272 2000.0 1.0 0.0 -de 06_coal 1 272 300.0 1.0 0.0 +de 01_solar 1 272 2000.0 0.0 1.0 +de 02_wind_on 1 272 2000.0 0.0 1.0 +de 03_wind_off 1 272 2000.0 0.0 1.0 +de 04_res 1 272 2000.0 0.0 1.0 +de 05_nuclear 1 272 2000.0 0.0 1.0 +de 06_coal 1 272 300.0 0.0 1.0 de 07_gas 1 272 0.0 0.0 0.0 de 08_non-res 1 272 0.0 0.0 0.0 de 09_hydro_pump 1 272 0.0 0.0 0.0 -de 01_solar 1 273 2000.0 1.0 0.0 -de 02_wind_on 1 273 2000.0 1.0 0.0 -de 03_wind_off 1 273 2000.0 1.0 0.0 -de 04_res 1 273 2000.0 1.0 0.0 -de 05_nuclear 1 273 2000.0 1.0 0.0 -de 06_coal 1 273 400.0 1.0 0.0 +de 01_solar 1 273 2000.0 0.0 1.0 +de 02_wind_on 1 273 2000.0 0.0 1.0 +de 03_wind_off 1 273 2000.0 0.0 1.0 +de 04_res 1 273 2000.0 0.0 1.0 +de 05_nuclear 1 273 2000.0 0.0 1.0 +de 06_coal 1 273 400.0 0.0 1.0 de 07_gas 1 273 0.0 0.0 0.0 de 08_non-res 1 273 0.0 0.0 0.0 de 09_hydro_pump 1 273 0.0 0.0 0.0 -de 01_solar 1 274 2000.0 1.0 0.0 -de 02_wind_on 1 274 2000.0 1.0 0.0 -de 03_wind_off 1 274 2000.0 1.0 0.0 -de 04_res 1 274 2000.0 1.0 0.0 -de 05_nuclear 1 274 2000.0 1.0 0.0 -de 06_coal 1 274 500.0 1.0 0.0 +de 01_solar 1 274 2000.0 0.0 1.0 +de 02_wind_on 1 274 2000.0 0.0 1.0 +de 03_wind_off 1 274 2000.0 0.0 1.0 +de 04_res 1 274 2000.0 0.0 1.0 +de 05_nuclear 1 274 2000.0 0.0 1.0 +de 06_coal 1 274 500.0 0.0 1.0 de 07_gas 1 274 0.0 0.0 0.0 de 08_non-res 1 274 0.0 0.0 0.0 de 09_hydro_pump 1 274 0.0 0.0 0.0 -de 01_solar 1 275 2000.0 1.0 0.0 -de 02_wind_on 1 275 2000.0 1.0 0.0 -de 03_wind_off 1 275 2000.0 1.0 0.0 -de 04_res 1 275 2000.0 1.0 0.0 -de 05_nuclear 1 275 2000.0 1.0 0.0 -de 06_coal 1 275 600.0 1.0 0.0 +de 01_solar 1 275 2000.0 0.0 1.0 +de 02_wind_on 1 275 2000.0 0.0 1.0 +de 03_wind_off 1 275 2000.0 0.0 1.0 +de 04_res 1 275 2000.0 0.0 1.0 +de 05_nuclear 1 275 2000.0 0.0 1.0 +de 06_coal 1 275 600.0 0.0 1.0 de 07_gas 1 275 0.0 0.0 0.0 de 08_non-res 1 275 0.0 0.0 0.0 de 09_hydro_pump 1 275 0.0 0.0 0.0 -de 01_solar 1 276 2000.0 1.0 0.0 -de 02_wind_on 1 276 2000.0 1.0 0.0 -de 03_wind_off 1 276 2000.0 1.0 0.0 -de 04_res 1 276 2000.0 1.0 0.0 -de 05_nuclear 1 276 2000.0 1.0 0.0 -de 06_coal 1 276 700.0 1.0 0.0 +de 01_solar 1 276 2000.0 0.0 1.0 +de 02_wind_on 1 276 2000.0 0.0 1.0 +de 03_wind_off 1 276 2000.0 0.0 1.0 +de 04_res 1 276 2000.0 0.0 1.0 +de 05_nuclear 1 276 2000.0 0.0 1.0 +de 06_coal 1 276 700.0 0.0 1.0 de 07_gas 1 276 0.0 0.0 0.0 de 08_non-res 1 276 0.0 0.0 0.0 de 09_hydro_pump 1 276 0.0 0.0 0.0 -de 01_solar 1 277 2000.0 1.0 0.0 -de 02_wind_on 1 277 2000.0 1.0 0.0 -de 03_wind_off 1 277 2000.0 1.0 0.0 -de 04_res 1 277 2000.0 1.0 0.0 -de 05_nuclear 1 277 2000.0 1.0 0.0 -de 06_coal 1 277 800.0 1.0 0.0 +de 01_solar 1 277 2000.0 0.0 1.0 +de 02_wind_on 1 277 2000.0 0.0 1.0 +de 03_wind_off 1 277 2000.0 0.0 1.0 +de 04_res 1 277 2000.0 0.0 1.0 +de 05_nuclear 1 277 2000.0 0.0 1.0 +de 06_coal 1 277 800.0 0.0 1.0 de 07_gas 1 277 0.0 0.0 0.0 de 08_non-res 1 277 0.0 0.0 0.0 de 09_hydro_pump 1 277 0.0 0.0 0.0 -de 01_solar 1 278 2000.0 1.0 0.0 -de 02_wind_on 1 278 2000.0 1.0 0.0 -de 03_wind_off 1 278 2000.0 1.0 0.0 -de 04_res 1 278 2000.0 1.0 0.0 -de 05_nuclear 1 278 2000.0 1.0 0.0 -de 06_coal 1 278 900.0 1.0 0.0 +de 01_solar 1 278 2000.0 0.0 1.0 +de 02_wind_on 1 278 2000.0 0.0 1.0 +de 03_wind_off 1 278 2000.0 0.0 1.0 +de 04_res 1 278 2000.0 0.0 1.0 +de 05_nuclear 1 278 2000.0 0.0 1.0 +de 06_coal 1 278 900.0 0.0 1.0 de 07_gas 1 278 0.0 0.0 0.0 de 08_non-res 1 278 0.0 0.0 0.0 de 09_hydro_pump 1 278 0.0 0.0 0.0 -de 01_solar 1 279 2000.0 1.0 0.0 -de 02_wind_on 1 279 2000.0 1.0 0.0 -de 03_wind_off 1 279 2000.0 1.0 0.0 -de 04_res 1 279 2000.0 1.0 0.0 -de 05_nuclear 1 279 2000.0 1.0 0.0 -de 06_coal 1 279 1000.0 1.0 0.0 +de 01_solar 1 279 2000.0 0.0 1.0 +de 02_wind_on 1 279 2000.0 0.0 1.0 +de 03_wind_off 1 279 2000.0 0.0 1.0 +de 04_res 1 279 2000.0 0.0 1.0 +de 05_nuclear 1 279 2000.0 0.0 1.0 +de 06_coal 1 279 1000.0 0.0 1.0 de 07_gas 1 279 0.0 0.0 0.0 de 08_non-res 1 279 0.0 0.0 0.0 de 09_hydro_pump 1 279 0.0 0.0 0.0 -de 01_solar 1 280 2000.0 1.0 0.0 -de 02_wind_on 1 280 2000.0 1.0 0.0 -de 03_wind_off 1 280 2000.0 1.0 0.0 -de 04_res 1 280 2000.0 1.0 0.0 -de 05_nuclear 1 280 2000.0 1.0 0.0 -de 06_coal 1 280 1100.0 1.0 0.0 +de 01_solar 1 280 2000.0 0.0 1.0 +de 02_wind_on 1 280 2000.0 0.0 1.0 +de 03_wind_off 1 280 2000.0 0.0 1.0 +de 04_res 1 280 2000.0 0.0 1.0 +de 05_nuclear 1 280 2000.0 0.0 1.0 +de 06_coal 1 280 1100.0 0.0 1.0 de 07_gas 1 280 0.0 0.0 0.0 de 08_non-res 1 280 0.0 0.0 0.0 de 09_hydro_pump 1 280 0.0 0.0 0.0 -de 01_solar 1 281 2000.0 1.0 0.0 -de 02_wind_on 1 281 2000.0 1.0 0.0 -de 03_wind_off 1 281 2000.0 1.0 0.0 -de 04_res 1 281 2000.0 1.0 0.0 -de 05_nuclear 1 281 2000.0 1.0 0.0 -de 06_coal 1 281 1200.0 1.0 0.0 +de 01_solar 1 281 2000.0 0.0 1.0 +de 02_wind_on 1 281 2000.0 0.0 1.0 +de 03_wind_off 1 281 2000.0 0.0 1.0 +de 04_res 1 281 2000.0 0.0 1.0 +de 05_nuclear 1 281 2000.0 0.0 1.0 +de 06_coal 1 281 1200.0 0.0 1.0 de 07_gas 1 281 0.0 0.0 0.0 de 08_non-res 1 281 0.0 0.0 0.0 de 09_hydro_pump 1 281 0.0 0.0 0.0 -de 01_solar 1 282 2000.0 1.0 0.0 -de 02_wind_on 1 282 2000.0 1.0 0.0 -de 03_wind_off 1 282 2000.0 1.0 0.0 -de 04_res 1 282 2000.0 1.0 0.0 -de 05_nuclear 1 282 2000.0 1.0 0.0 -de 06_coal 1 282 1300.0 1.0 0.0 +de 01_solar 1 282 2000.0 0.0 1.0 +de 02_wind_on 1 282 2000.0 0.0 1.0 +de 03_wind_off 1 282 2000.0 0.0 1.0 +de 04_res 1 282 2000.0 0.0 1.0 +de 05_nuclear 1 282 2000.0 0.0 1.0 +de 06_coal 1 282 1300.0 0.0 1.0 de 07_gas 1 282 0.0 0.0 0.0 de 08_non-res 1 282 0.0 0.0 0.0 de 09_hydro_pump 1 282 0.0 0.0 0.0 -de 01_solar 1 283 2000.0 1.0 0.0 -de 02_wind_on 1 283 2000.0 1.0 0.0 -de 03_wind_off 1 283 2000.0 1.0 0.0 -de 04_res 1 283 2000.0 1.0 0.0 -de 05_nuclear 1 283 2000.0 1.0 0.0 -de 06_coal 1 283 1400.0 1.0 0.0 +de 01_solar 1 283 2000.0 0.0 1.0 +de 02_wind_on 1 283 2000.0 0.0 1.0 +de 03_wind_off 1 283 2000.0 0.0 1.0 +de 04_res 1 283 2000.0 0.0 1.0 +de 05_nuclear 1 283 2000.0 0.0 1.0 +de 06_coal 1 283 1400.0 0.0 1.0 de 07_gas 1 283 0.0 0.0 0.0 de 08_non-res 1 283 0.0 0.0 0.0 de 09_hydro_pump 1 283 0.0 0.0 0.0 -de 01_solar 1 284 2000.0 1.0 0.0 -de 02_wind_on 1 284 2000.0 1.0 0.0 -de 03_wind_off 1 284 2000.0 1.0 0.0 -de 04_res 1 284 2000.0 1.0 0.0 -de 05_nuclear 1 284 2000.0 1.0 0.0 -de 06_coal 1 284 1500.0 1.0 0.0 +de 01_solar 1 284 2000.0 0.0 1.0 +de 02_wind_on 1 284 2000.0 0.0 1.0 +de 03_wind_off 1 284 2000.0 0.0 1.0 +de 04_res 1 284 2000.0 0.0 1.0 +de 05_nuclear 1 284 2000.0 0.0 1.0 +de 06_coal 1 284 1500.0 0.0 1.0 de 07_gas 1 284 0.0 0.0 0.0 de 08_non-res 1 284 0.0 0.0 0.0 de 09_hydro_pump 1 284 0.0 0.0 0.0 -de 01_solar 1 285 2000.0 1.0 0.0 -de 02_wind_on 1 285 2000.0 1.0 0.0 -de 03_wind_off 1 285 2000.0 1.0 0.0 -de 04_res 1 285 2000.0 1.0 0.0 -de 05_nuclear 1 285 2000.0 1.0 0.0 -de 06_coal 1 285 1600.0 1.0 0.0 +de 01_solar 1 285 2000.0 0.0 1.0 +de 02_wind_on 1 285 2000.0 0.0 1.0 +de 03_wind_off 1 285 2000.0 0.0 1.0 +de 04_res 1 285 2000.0 0.0 1.0 +de 05_nuclear 1 285 2000.0 0.0 1.0 +de 06_coal 1 285 1600.0 0.0 1.0 de 07_gas 1 285 0.0 0.0 0.0 de 08_non-res 1 285 0.0 0.0 0.0 de 09_hydro_pump 1 285 0.0 0.0 0.0 -de 01_solar 1 286 2000.0 1.0 0.0 -de 02_wind_on 1 286 2000.0 1.0 0.0 -de 03_wind_off 1 286 2000.0 1.0 0.0 -de 04_res 1 286 2000.0 1.0 0.0 -de 05_nuclear 1 286 2000.0 1.0 0.0 -de 06_coal 1 286 1700.0 1.0 0.0 +de 01_solar 1 286 2000.0 0.0 1.0 +de 02_wind_on 1 286 2000.0 0.0 1.0 +de 03_wind_off 1 286 2000.0 0.0 1.0 +de 04_res 1 286 2000.0 0.0 1.0 +de 05_nuclear 1 286 2000.0 0.0 1.0 +de 06_coal 1 286 1700.0 0.0 1.0 de 07_gas 1 286 0.0 0.0 0.0 de 08_non-res 1 286 0.0 0.0 0.0 de 09_hydro_pump 1 286 0.0 0.0 0.0 -de 01_solar 1 287 2000.0 1.0 0.0 -de 02_wind_on 1 287 2000.0 1.0 0.0 -de 03_wind_off 1 287 2000.0 1.0 0.0 -de 04_res 1 287 2000.0 1.0 0.0 -de 05_nuclear 1 287 2000.0 1.0 0.0 -de 06_coal 1 287 1800.0 1.0 0.0 +de 01_solar 1 287 2000.0 0.0 1.0 +de 02_wind_on 1 287 2000.0 0.0 1.0 +de 03_wind_off 1 287 2000.0 0.0 1.0 +de 04_res 1 287 2000.0 0.0 1.0 +de 05_nuclear 1 287 2000.0 0.0 1.0 +de 06_coal 1 287 1800.0 0.0 1.0 de 07_gas 1 287 0.0 0.0 0.0 de 08_non-res 1 287 0.0 0.0 0.0 de 09_hydro_pump 1 287 0.0 0.0 0.0 -de 01_solar 1 288 2000.0 1.0 0.0 -de 02_wind_on 1 288 2000.0 1.0 0.0 -de 03_wind_off 1 288 2000.0 1.0 0.0 -de 04_res 1 288 2000.0 1.0 0.0 -de 05_nuclear 1 288 2000.0 1.0 0.0 -de 06_coal 1 288 1900.0 1.0 0.0 +de 01_solar 1 288 2000.0 0.0 1.0 +de 02_wind_on 1 288 2000.0 0.0 1.0 +de 03_wind_off 1 288 2000.0 0.0 1.0 +de 04_res 1 288 2000.0 0.0 1.0 +de 05_nuclear 1 288 2000.0 0.0 1.0 +de 06_coal 1 288 1900.0 0.0 1.0 de 07_gas 1 288 0.0 0.0 0.0 de 08_non-res 1 288 0.0 0.0 0.0 de 09_hydro_pump 1 288 0.0 0.0 0.0 -de 01_solar 1 289 2000.0 1.0 0.0 -de 02_wind_on 1 289 2000.0 1.0 0.0 -de 03_wind_off 1 289 2000.0 1.0 0.0 -de 04_res 1 289 2000.0 1.0 0.0 -de 05_nuclear 1 289 2000.0 1.0 0.0 -de 06_coal 1 289 2000.0 1.0 0.0 +de 01_solar 1 289 2000.0 0.0 1.0 +de 02_wind_on 1 289 2000.0 0.0 1.0 +de 03_wind_off 1 289 2000.0 0.0 1.0 +de 04_res 1 289 2000.0 0.0 1.0 +de 05_nuclear 1 289 2000.0 0.0 1.0 +de 06_coal 1 289 2000.0 0.0 1.0 de 07_gas 1 289 0.0 0.0 0.0 de 08_non-res 1 289 0.0 0.0 0.0 de 09_hydro_pump 1 289 0.0 0.0 0.0 -de 01_solar 1 290 2000.0 1.0 0.0 -de 02_wind_on 1 290 2000.0 1.0 0.0 -de 03_wind_off 1 290 2000.0 1.0 0.0 -de 04_res 1 290 2000.0 1.0 0.0 -de 05_nuclear 1 290 2000.0 1.0 0.0 -de 06_coal 1 290 2000.0 1.0 0.0 -de 07_gas 1 290 100.0 1.0 0.0 +de 01_solar 1 290 2000.0 0.0 1.0 +de 02_wind_on 1 290 2000.0 0.0 1.0 +de 03_wind_off 1 290 2000.0 0.0 1.0 +de 04_res 1 290 2000.0 0.0 1.0 +de 05_nuclear 1 290 2000.0 0.0 1.0 +de 06_coal 1 290 2000.0 0.0 1.0 +de 07_gas 1 290 100.0 0.0 1.0 de 08_non-res 1 290 0.0 0.0 0.0 de 09_hydro_pump 1 290 0.0 0.0 0.0 -de 01_solar 1 291 2000.0 1.0 0.0 -de 02_wind_on 1 291 2000.0 1.0 0.0 -de 03_wind_off 1 291 2000.0 1.0 0.0 -de 04_res 1 291 2000.0 1.0 0.0 -de 05_nuclear 1 291 2000.0 1.0 0.0 -de 06_coal 1 291 2000.0 1.0 0.0 -de 07_gas 1 291 200.0 1.0 0.0 +de 01_solar 1 291 2000.0 0.0 1.0 +de 02_wind_on 1 291 2000.0 0.0 1.0 +de 03_wind_off 1 291 2000.0 0.0 1.0 +de 04_res 1 291 2000.0 0.0 1.0 +de 05_nuclear 1 291 2000.0 0.0 1.0 +de 06_coal 1 291 2000.0 0.0 1.0 +de 07_gas 1 291 200.0 0.0 1.0 de 08_non-res 1 291 0.0 0.0 0.0 de 09_hydro_pump 1 291 0.0 0.0 0.0 -de 01_solar 1 292 2000.0 1.0 0.0 -de 02_wind_on 1 292 2000.0 1.0 0.0 -de 03_wind_off 1 292 2000.0 1.0 0.0 -de 04_res 1 292 2000.0 1.0 0.0 -de 05_nuclear 1 292 2000.0 1.0 0.0 -de 06_coal 1 292 2000.0 1.0 0.0 -de 07_gas 1 292 300.0 1.0 0.0 +de 01_solar 1 292 2000.0 0.0 1.0 +de 02_wind_on 1 292 2000.0 0.0 1.0 +de 03_wind_off 1 292 2000.0 0.0 1.0 +de 04_res 1 292 2000.0 0.0 1.0 +de 05_nuclear 1 292 2000.0 0.0 1.0 +de 06_coal 1 292 2000.0 0.0 1.0 +de 07_gas 1 292 300.0 0.0 1.0 de 08_non-res 1 292 0.0 0.0 0.0 de 09_hydro_pump 1 292 0.0 0.0 0.0 -de 01_solar 1 293 2000.0 1.0 0.0 -de 02_wind_on 1 293 2000.0 1.0 0.0 -de 03_wind_off 1 293 2000.0 1.0 0.0 -de 04_res 1 293 2000.0 1.0 0.0 -de 05_nuclear 1 293 2000.0 1.0 0.0 -de 06_coal 1 293 2000.0 1.0 0.0 -de 07_gas 1 293 400.0 1.0 0.0 +de 01_solar 1 293 2000.0 0.0 1.0 +de 02_wind_on 1 293 2000.0 0.0 1.0 +de 03_wind_off 1 293 2000.0 0.0 1.0 +de 04_res 1 293 2000.0 0.0 1.0 +de 05_nuclear 1 293 2000.0 0.0 1.0 +de 06_coal 1 293 2000.0 0.0 1.0 +de 07_gas 1 293 400.0 0.0 1.0 de 08_non-res 1 293 0.0 0.0 0.0 de 09_hydro_pump 1 293 0.0 0.0 0.0 -de 01_solar 1 294 2000.0 1.0 0.0 -de 02_wind_on 1 294 2000.0 1.0 0.0 -de 03_wind_off 1 294 2000.0 1.0 0.0 -de 04_res 1 294 2000.0 1.0 0.0 -de 05_nuclear 1 294 2000.0 1.0 0.0 -de 06_coal 1 294 2000.0 1.0 0.0 -de 07_gas 1 294 500.0 1.0 0.0 +de 01_solar 1 294 2000.0 0.0 1.0 +de 02_wind_on 1 294 2000.0 0.0 1.0 +de 03_wind_off 1 294 2000.0 0.0 1.0 +de 04_res 1 294 2000.0 0.0 1.0 +de 05_nuclear 1 294 2000.0 0.0 1.0 +de 06_coal 1 294 2000.0 0.0 1.0 +de 07_gas 1 294 500.0 0.0 1.0 de 08_non-res 1 294 0.0 0.0 0.0 de 09_hydro_pump 1 294 0.0 0.0 0.0 -de 01_solar 1 295 2000.0 1.0 0.0 -de 02_wind_on 1 295 2000.0 1.0 0.0 -de 03_wind_off 1 295 2000.0 1.0 0.0 -de 04_res 1 295 2000.0 1.0 0.0 -de 05_nuclear 1 295 2000.0 1.0 0.0 -de 06_coal 1 295 2000.0 1.0 0.0 -de 07_gas 1 295 600.0 1.0 0.0 +de 01_solar 1 295 2000.0 0.0 1.0 +de 02_wind_on 1 295 2000.0 0.0 1.0 +de 03_wind_off 1 295 2000.0 0.0 1.0 +de 04_res 1 295 2000.0 0.0 1.0 +de 05_nuclear 1 295 2000.0 0.0 1.0 +de 06_coal 1 295 2000.0 0.0 1.0 +de 07_gas 1 295 600.0 0.0 1.0 de 08_non-res 1 295 0.0 0.0 0.0 de 09_hydro_pump 1 295 0.0 0.0 0.0 -de 01_solar 1 296 2000.0 1.0 0.0 -de 02_wind_on 1 296 2000.0 1.0 0.0 -de 03_wind_off 1 296 2000.0 1.0 0.0 -de 04_res 1 296 2000.0 1.0 0.0 -de 05_nuclear 1 296 2000.0 1.0 0.0 -de 06_coal 1 296 2000.0 1.0 0.0 -de 07_gas 1 296 700.0 1.0 0.0 +de 01_solar 1 296 2000.0 0.0 1.0 +de 02_wind_on 1 296 2000.0 0.0 1.0 +de 03_wind_off 1 296 2000.0 0.0 1.0 +de 04_res 1 296 2000.0 0.0 1.0 +de 05_nuclear 1 296 2000.0 0.0 1.0 +de 06_coal 1 296 2000.0 0.0 1.0 +de 07_gas 1 296 700.0 0.0 1.0 de 08_non-res 1 296 0.0 0.0 0.0 de 09_hydro_pump 1 296 0.0 0.0 0.0 -de 01_solar 1 297 2000.0 1.0 0.0 -de 02_wind_on 1 297 2000.0 1.0 0.0 -de 03_wind_off 1 297 2000.0 1.0 0.0 -de 04_res 1 297 2000.0 1.0 0.0 -de 05_nuclear 1 297 2000.0 1.0 0.0 -de 06_coal 1 297 2000.0 1.0 0.0 -de 07_gas 1 297 800.0 1.0 0.0 +de 01_solar 1 297 2000.0 0.0 1.0 +de 02_wind_on 1 297 2000.0 0.0 1.0 +de 03_wind_off 1 297 2000.0 0.0 1.0 +de 04_res 1 297 2000.0 0.0 1.0 +de 05_nuclear 1 297 2000.0 0.0 1.0 +de 06_coal 1 297 2000.0 0.0 1.0 +de 07_gas 1 297 800.0 0.0 1.0 de 08_non-res 1 297 0.0 0.0 0.0 de 09_hydro_pump 1 297 0.0 0.0 0.0 -de 01_solar 1 298 2000.0 1.0 0.0 -de 02_wind_on 1 298 2000.0 1.0 0.0 -de 03_wind_off 1 298 2000.0 1.0 0.0 -de 04_res 1 298 2000.0 1.0 0.0 -de 05_nuclear 1 298 2000.0 1.0 0.0 -de 06_coal 1 298 2000.0 1.0 0.0 -de 07_gas 1 298 900.0 1.0 0.0 +de 01_solar 1 298 2000.0 0.0 1.0 +de 02_wind_on 1 298 2000.0 0.0 1.0 +de 03_wind_off 1 298 2000.0 0.0 1.0 +de 04_res 1 298 2000.0 0.0 1.0 +de 05_nuclear 1 298 2000.0 0.0 1.0 +de 06_coal 1 298 2000.0 0.0 1.0 +de 07_gas 1 298 900.0 0.0 1.0 de 08_non-res 1 298 0.0 0.0 0.0 de 09_hydro_pump 1 298 0.0 0.0 0.0 -de 01_solar 1 299 2000.0 1.0 0.0 -de 02_wind_on 1 299 2000.0 1.0 0.0 -de 03_wind_off 1 299 2000.0 1.0 0.0 -de 04_res 1 299 2000.0 1.0 0.0 -de 05_nuclear 1 299 2000.0 1.0 0.0 -de 06_coal 1 299 2000.0 1.0 0.0 -de 07_gas 1 299 1000.0 1.0 0.0 +de 01_solar 1 299 2000.0 0.0 1.0 +de 02_wind_on 1 299 2000.0 0.0 1.0 +de 03_wind_off 1 299 2000.0 0.0 1.0 +de 04_res 1 299 2000.0 0.0 1.0 +de 05_nuclear 1 299 2000.0 0.0 1.0 +de 06_coal 1 299 2000.0 0.0 1.0 +de 07_gas 1 299 1000.0 0.0 1.0 de 08_non-res 1 299 0.0 0.0 0.0 de 09_hydro_pump 1 299 0.0 0.0 0.0 -de 01_solar 1 300 2000.0 1.0 0.0 -de 02_wind_on 1 300 2000.0 1.0 0.0 -de 03_wind_off 1 300 2000.0 1.0 0.0 -de 04_res 1 300 2000.0 1.0 0.0 -de 05_nuclear 1 300 2000.0 1.0 0.0 -de 06_coal 1 300 2000.0 1.0 0.0 -de 07_gas 1 300 1100.0 1.0 0.0 +de 01_solar 1 300 2000.0 0.0 1.0 +de 02_wind_on 1 300 2000.0 0.0 1.0 +de 03_wind_off 1 300 2000.0 0.0 1.0 +de 04_res 1 300 2000.0 0.0 1.0 +de 05_nuclear 1 300 2000.0 0.0 1.0 +de 06_coal 1 300 2000.0 0.0 1.0 +de 07_gas 1 300 1100.0 0.0 1.0 de 08_non-res 1 300 0.0 0.0 0.0 de 09_hydro_pump 1 300 0.0 0.0 0.0 -de 01_solar 1 301 2000.0 1.0 0.0 -de 02_wind_on 1 301 2000.0 1.0 0.0 -de 03_wind_off 1 301 2000.0 1.0 0.0 -de 04_res 1 301 2000.0 1.0 0.0 -de 05_nuclear 1 301 2000.0 1.0 0.0 -de 06_coal 1 301 2000.0 1.0 0.0 -de 07_gas 1 301 1200.0 1.0 0.0 +de 01_solar 1 301 2000.0 0.0 1.0 +de 02_wind_on 1 301 2000.0 0.0 1.0 +de 03_wind_off 1 301 2000.0 0.0 1.0 +de 04_res 1 301 2000.0 0.0 1.0 +de 05_nuclear 1 301 2000.0 0.0 1.0 +de 06_coal 1 301 2000.0 0.0 1.0 +de 07_gas 1 301 1200.0 0.0 1.0 de 08_non-res 1 301 0.0 0.0 0.0 de 09_hydro_pump 1 301 0.0 0.0 0.0 -de 01_solar 1 302 2000.0 1.0 0.0 -de 02_wind_on 1 302 2000.0 1.0 0.0 -de 03_wind_off 1 302 2000.0 1.0 0.0 -de 04_res 1 302 2000.0 1.0 0.0 -de 05_nuclear 1 302 2000.0 1.0 0.0 -de 06_coal 1 302 2000.0 1.0 0.0 -de 07_gas 1 302 1300.0 1.0 0.0 +de 01_solar 1 302 2000.0 0.0 1.0 +de 02_wind_on 1 302 2000.0 0.0 1.0 +de 03_wind_off 1 302 2000.0 0.0 1.0 +de 04_res 1 302 2000.0 0.0 1.0 +de 05_nuclear 1 302 2000.0 0.0 1.0 +de 06_coal 1 302 2000.0 0.0 1.0 +de 07_gas 1 302 1300.0 0.0 1.0 de 08_non-res 1 302 0.0 0.0 0.0 de 09_hydro_pump 1 302 0.0 0.0 0.0 -de 01_solar 1 303 2000.0 1.0 0.0 -de 02_wind_on 1 303 2000.0 1.0 0.0 -de 03_wind_off 1 303 2000.0 1.0 0.0 -de 04_res 1 303 2000.0 1.0 0.0 -de 05_nuclear 1 303 2000.0 1.0 0.0 -de 06_coal 1 303 2000.0 1.0 0.0 -de 07_gas 1 303 1400.0 1.0 0.0 +de 01_solar 1 303 2000.0 0.0 1.0 +de 02_wind_on 1 303 2000.0 0.0 1.0 +de 03_wind_off 1 303 2000.0 0.0 1.0 +de 04_res 1 303 2000.0 0.0 1.0 +de 05_nuclear 1 303 2000.0 0.0 1.0 +de 06_coal 1 303 2000.0 0.0 1.0 +de 07_gas 1 303 1400.0 0.0 1.0 de 08_non-res 1 303 0.0 0.0 0.0 de 09_hydro_pump 1 303 0.0 0.0 0.0 -de 01_solar 1 304 2000.0 1.0 0.0 -de 02_wind_on 1 304 2000.0 1.0 0.0 -de 03_wind_off 1 304 2000.0 1.0 0.0 -de 04_res 1 304 2000.0 1.0 0.0 -de 05_nuclear 1 304 2000.0 1.0 0.0 -de 06_coal 1 304 2000.0 1.0 0.0 -de 07_gas 1 304 1500.0 1.0 0.0 +de 01_solar 1 304 2000.0 0.0 1.0 +de 02_wind_on 1 304 2000.0 0.0 1.0 +de 03_wind_off 1 304 2000.0 0.0 1.0 +de 04_res 1 304 2000.0 0.0 1.0 +de 05_nuclear 1 304 2000.0 0.0 1.0 +de 06_coal 1 304 2000.0 0.0 1.0 +de 07_gas 1 304 1500.0 0.0 1.0 de 08_non-res 1 304 0.0 0.0 0.0 de 09_hydro_pump 1 304 0.0 0.0 0.0 -de 01_solar 1 305 2000.0 1.0 0.0 -de 02_wind_on 1 305 2000.0 1.0 0.0 -de 03_wind_off 1 305 2000.0 1.0 0.0 -de 04_res 1 305 2000.0 1.0 0.0 -de 05_nuclear 1 305 2000.0 1.0 0.0 -de 06_coal 1 305 2000.0 1.0 0.0 -de 07_gas 1 305 1600.0 1.0 0.0 +de 01_solar 1 305 2000.0 0.0 1.0 +de 02_wind_on 1 305 2000.0 0.0 1.0 +de 03_wind_off 1 305 2000.0 0.0 1.0 +de 04_res 1 305 2000.0 0.0 1.0 +de 05_nuclear 1 305 2000.0 0.0 1.0 +de 06_coal 1 305 2000.0 0.0 1.0 +de 07_gas 1 305 1600.0 0.0 1.0 de 08_non-res 1 305 0.0 0.0 0.0 de 09_hydro_pump 1 305 0.0 0.0 0.0 -de 01_solar 1 306 2000.0 1.0 0.0 -de 02_wind_on 1 306 2000.0 1.0 0.0 -de 03_wind_off 1 306 2000.0 1.0 0.0 -de 04_res 1 306 2000.0 1.0 0.0 -de 05_nuclear 1 306 2000.0 1.0 0.0 -de 06_coal 1 306 2000.0 1.0 0.0 -de 07_gas 1 306 1700.0 1.0 0.0 +de 01_solar 1 306 2000.0 0.0 1.0 +de 02_wind_on 1 306 2000.0 0.0 1.0 +de 03_wind_off 1 306 2000.0 0.0 1.0 +de 04_res 1 306 2000.0 0.0 1.0 +de 05_nuclear 1 306 2000.0 0.0 1.0 +de 06_coal 1 306 2000.0 0.0 1.0 +de 07_gas 1 306 1700.0 0.0 1.0 de 08_non-res 1 306 0.0 0.0 0.0 de 09_hydro_pump 1 306 0.0 0.0 0.0 -de 01_solar 1 307 2000.0 1.0 0.0 -de 02_wind_on 1 307 2000.0 1.0 0.0 -de 03_wind_off 1 307 2000.0 1.0 0.0 -de 04_res 1 307 2000.0 1.0 0.0 -de 05_nuclear 1 307 2000.0 1.0 0.0 -de 06_coal 1 307 2000.0 1.0 0.0 -de 07_gas 1 307 1800.0 1.0 0.0 +de 01_solar 1 307 2000.0 0.0 1.0 +de 02_wind_on 1 307 2000.0 0.0 1.0 +de 03_wind_off 1 307 2000.0 0.0 1.0 +de 04_res 1 307 2000.0 0.0 1.0 +de 05_nuclear 1 307 2000.0 0.0 1.0 +de 06_coal 1 307 2000.0 0.0 1.0 +de 07_gas 1 307 1800.0 0.0 1.0 de 08_non-res 1 307 0.0 0.0 0.0 de 09_hydro_pump 1 307 0.0 0.0 0.0 -de 01_solar 1 308 2000.0 1.0 0.0 -de 02_wind_on 1 308 2000.0 1.0 0.0 -de 03_wind_off 1 308 2000.0 1.0 0.0 -de 04_res 1 308 2000.0 1.0 0.0 -de 05_nuclear 1 308 2000.0 1.0 0.0 -de 06_coal 1 308 2000.0 1.0 0.0 -de 07_gas 1 308 1900.0 1.0 0.0 +de 01_solar 1 308 2000.0 0.0 1.0 +de 02_wind_on 1 308 2000.0 0.0 1.0 +de 03_wind_off 1 308 2000.0 0.0 1.0 +de 04_res 1 308 2000.0 0.0 1.0 +de 05_nuclear 1 308 2000.0 0.0 1.0 +de 06_coal 1 308 2000.0 0.0 1.0 +de 07_gas 1 308 1900.0 0.0 1.0 de 08_non-res 1 308 0.0 0.0 0.0 de 09_hydro_pump 1 308 0.0 0.0 0.0 -de 01_solar 1 309 2000.0 1.0 0.0 -de 02_wind_on 1 309 2000.0 1.0 0.0 -de 03_wind_off 1 309 2000.0 1.0 0.0 -de 04_res 1 309 2000.0 1.0 0.0 -de 05_nuclear 1 309 2000.0 1.0 0.0 -de 06_coal 1 309 2000.0 1.0 0.0 -de 07_gas 1 309 2000.0 1.0 0.0 +de 01_solar 1 309 2000.0 0.0 1.0 +de 02_wind_on 1 309 2000.0 0.0 1.0 +de 03_wind_off 1 309 2000.0 0.0 1.0 +de 04_res 1 309 2000.0 0.0 1.0 +de 05_nuclear 1 309 2000.0 0.0 1.0 +de 06_coal 1 309 2000.0 0.0 1.0 +de 07_gas 1 309 2000.0 0.0 1.0 de 08_non-res 1 309 0.0 0.0 0.0 de 09_hydro_pump 1 309 0.0 0.0 0.0 -de 01_solar 1 310 2000.0 1.0 0.0 -de 02_wind_on 1 310 2000.0 1.0 0.0 -de 03_wind_off 1 310 2000.0 1.0 0.0 -de 04_res 1 310 2000.0 1.0 0.0 -de 05_nuclear 1 310 2000.0 1.0 0.0 -de 06_coal 1 310 2000.0 1.0 0.0 -de 07_gas 1 310 2000.0 1.0 0.0 -de 08_non-res 1 310 100.0 1.0 0.0 +de 01_solar 1 310 2000.0 0.0 1.0 +de 02_wind_on 1 310 2000.0 0.0 1.0 +de 03_wind_off 1 310 2000.0 0.0 1.0 +de 04_res 1 310 2000.0 0.0 1.0 +de 05_nuclear 1 310 2000.0 0.0 1.0 +de 06_coal 1 310 2000.0 0.0 1.0 +de 07_gas 1 310 2000.0 0.0 1.0 +de 08_non-res 1 310 100.0 0.0 1.0 de 09_hydro_pump 1 310 0.0 0.0 0.0 -de 01_solar 1 311 2000.0 1.0 0.0 -de 02_wind_on 1 311 2000.0 1.0 0.0 -de 03_wind_off 1 311 2000.0 1.0 0.0 -de 04_res 1 311 2000.0 1.0 0.0 -de 05_nuclear 1 311 2000.0 1.0 0.0 -de 06_coal 1 311 2000.0 1.0 0.0 -de 07_gas 1 311 2000.0 1.0 0.0 -de 08_non-res 1 311 200.0 1.0 0.0 +de 01_solar 1 311 2000.0 0.0 1.0 +de 02_wind_on 1 311 2000.0 0.0 1.0 +de 03_wind_off 1 311 2000.0 0.0 1.0 +de 04_res 1 311 2000.0 0.0 1.0 +de 05_nuclear 1 311 2000.0 0.0 1.0 +de 06_coal 1 311 2000.0 0.0 1.0 +de 07_gas 1 311 2000.0 0.0 1.0 +de 08_non-res 1 311 200.0 0.0 1.0 de 09_hydro_pump 1 311 0.0 0.0 0.0 -de 01_solar 1 312 2000.0 1.0 0.0 -de 02_wind_on 1 312 2000.0 1.0 0.0 -de 03_wind_off 1 312 2000.0 1.0 0.0 -de 04_res 1 312 2000.0 1.0 0.0 -de 05_nuclear 1 312 2000.0 1.0 0.0 -de 06_coal 1 312 2000.0 1.0 0.0 -de 07_gas 1 312 2000.0 1.0 0.0 -de 08_non-res 1 312 300.0 1.0 0.0 +de 01_solar 1 312 2000.0 0.0 1.0 +de 02_wind_on 1 312 2000.0 0.0 1.0 +de 03_wind_off 1 312 2000.0 0.0 1.0 +de 04_res 1 312 2000.0 0.0 1.0 +de 05_nuclear 1 312 2000.0 0.0 1.0 +de 06_coal 1 312 2000.0 0.0 1.0 +de 07_gas 1 312 2000.0 0.0 1.0 +de 08_non-res 1 312 300.0 0.0 1.0 de 09_hydro_pump 1 312 0.0 0.0 0.0 -de 01_solar 1 313 2000.0 1.0 0.0 -de 02_wind_on 1 313 2000.0 1.0 0.0 -de 03_wind_off 1 313 2000.0 1.0 0.0 -de 04_res 1 313 2000.0 1.0 0.0 -de 05_nuclear 1 313 2000.0 1.0 0.0 -de 06_coal 1 313 2000.0 1.0 0.0 -de 07_gas 1 313 2000.0 1.0 0.0 -de 08_non-res 1 313 400.0 1.0 0.0 +de 01_solar 1 313 2000.0 0.0 1.0 +de 02_wind_on 1 313 2000.0 0.0 1.0 +de 03_wind_off 1 313 2000.0 0.0 1.0 +de 04_res 1 313 2000.0 0.0 1.0 +de 05_nuclear 1 313 2000.0 0.0 1.0 +de 06_coal 1 313 2000.0 0.0 1.0 +de 07_gas 1 313 2000.0 0.0 1.0 +de 08_non-res 1 313 400.0 0.0 1.0 de 09_hydro_pump 1 313 0.0 0.0 0.0 -de 01_solar 1 314 2000.0 1.0 0.0 -de 02_wind_on 1 314 2000.0 1.0 0.0 -de 03_wind_off 1 314 2000.0 1.0 0.0 -de 04_res 1 314 2000.0 1.0 0.0 -de 05_nuclear 1 314 2000.0 1.0 0.0 -de 06_coal 1 314 2000.0 1.0 0.0 -de 07_gas 1 314 2000.0 1.0 0.0 -de 08_non-res 1 314 500.0 1.0 0.0 +de 01_solar 1 314 2000.0 0.0 1.0 +de 02_wind_on 1 314 2000.0 0.0 1.0 +de 03_wind_off 1 314 2000.0 0.0 1.0 +de 04_res 1 314 2000.0 0.0 1.0 +de 05_nuclear 1 314 2000.0 0.0 1.0 +de 06_coal 1 314 2000.0 0.0 1.0 +de 07_gas 1 314 2000.0 0.0 1.0 +de 08_non-res 1 314 500.0 0.0 1.0 de 09_hydro_pump 1 314 0.0 0.0 0.0 -de 01_solar 1 315 2000.0 1.0 0.0 -de 02_wind_on 1 315 2000.0 1.0 0.0 -de 03_wind_off 1 315 2000.0 1.0 0.0 -de 04_res 1 315 2000.0 1.0 0.0 -de 05_nuclear 1 315 2000.0 1.0 0.0 -de 06_coal 1 315 2000.0 1.0 0.0 -de 07_gas 1 315 2000.0 1.0 0.0 -de 08_non-res 1 315 600.0 1.0 0.0 +de 01_solar 1 315 2000.0 0.0 1.0 +de 02_wind_on 1 315 2000.0 0.0 1.0 +de 03_wind_off 1 315 2000.0 0.0 1.0 +de 04_res 1 315 2000.0 0.0 1.0 +de 05_nuclear 1 315 2000.0 0.0 1.0 +de 06_coal 1 315 2000.0 0.0 1.0 +de 07_gas 1 315 2000.0 0.0 1.0 +de 08_non-res 1 315 600.0 0.0 1.0 de 09_hydro_pump 1 315 0.0 0.0 0.0 -de 01_solar 1 316 2000.0 1.0 0.0 -de 02_wind_on 1 316 2000.0 1.0 0.0 -de 03_wind_off 1 316 2000.0 1.0 0.0 -de 04_res 1 316 2000.0 1.0 0.0 -de 05_nuclear 1 316 2000.0 1.0 0.0 -de 06_coal 1 316 2000.0 1.0 0.0 -de 07_gas 1 316 2000.0 1.0 0.0 -de 08_non-res 1 316 700.0 1.0 0.0 +de 01_solar 1 316 2000.0 0.0 1.0 +de 02_wind_on 1 316 2000.0 0.0 1.0 +de 03_wind_off 1 316 2000.0 0.0 1.0 +de 04_res 1 316 2000.0 0.0 1.0 +de 05_nuclear 1 316 2000.0 0.0 1.0 +de 06_coal 1 316 2000.0 0.0 1.0 +de 07_gas 1 316 2000.0 0.0 1.0 +de 08_non-res 1 316 700.0 0.0 1.0 de 09_hydro_pump 1 316 0.0 0.0 0.0 -de 01_solar 1 317 2000.0 1.0 0.0 -de 02_wind_on 1 317 2000.0 1.0 0.0 -de 03_wind_off 1 317 2000.0 1.0 0.0 -de 04_res 1 317 2000.0 1.0 0.0 -de 05_nuclear 1 317 2000.0 1.0 0.0 -de 06_coal 1 317 2000.0 1.0 0.0 -de 07_gas 1 317 2000.0 1.0 0.0 -de 08_non-res 1 317 800.0 1.0 0.0 +de 01_solar 1 317 2000.0 0.0 1.0 +de 02_wind_on 1 317 2000.0 0.0 1.0 +de 03_wind_off 1 317 2000.0 0.0 1.0 +de 04_res 1 317 2000.0 0.0 1.0 +de 05_nuclear 1 317 2000.0 0.0 1.0 +de 06_coal 1 317 2000.0 0.0 1.0 +de 07_gas 1 317 2000.0 0.0 1.0 +de 08_non-res 1 317 800.0 0.0 1.0 de 09_hydro_pump 1 317 0.0 0.0 0.0 -de 01_solar 1 318 2000.0 1.0 0.0 -de 02_wind_on 1 318 2000.0 1.0 0.0 -de 03_wind_off 1 318 2000.0 1.0 0.0 -de 04_res 1 318 2000.0 1.0 0.0 -de 05_nuclear 1 318 2000.0 1.0 0.0 -de 06_coal 1 318 2000.0 1.0 0.0 -de 07_gas 1 318 2000.0 1.0 0.0 -de 08_non-res 1 318 900.0 1.0 0.0 +de 01_solar 1 318 2000.0 0.0 1.0 +de 02_wind_on 1 318 2000.0 0.0 1.0 +de 03_wind_off 1 318 2000.0 0.0 1.0 +de 04_res 1 318 2000.0 0.0 1.0 +de 05_nuclear 1 318 2000.0 0.0 1.0 +de 06_coal 1 318 2000.0 0.0 1.0 +de 07_gas 1 318 2000.0 0.0 1.0 +de 08_non-res 1 318 900.0 0.0 1.0 de 09_hydro_pump 1 318 0.0 0.0 0.0 -de 01_solar 1 319 2000.0 1.0 0.0 -de 02_wind_on 1 319 2000.0 1.0 0.0 -de 03_wind_off 1 319 2000.0 1.0 0.0 -de 04_res 1 319 2000.0 1.0 0.0 -de 05_nuclear 1 319 2000.0 1.0 0.0 -de 06_coal 1 319 2000.0 1.0 0.0 -de 07_gas 1 319 2000.0 1.0 0.0 -de 08_non-res 1 319 1000.0 1.0 0.0 +de 01_solar 1 319 2000.0 0.0 1.0 +de 02_wind_on 1 319 2000.0 0.0 1.0 +de 03_wind_off 1 319 2000.0 0.0 1.0 +de 04_res 1 319 2000.0 0.0 1.0 +de 05_nuclear 1 319 2000.0 0.0 1.0 +de 06_coal 1 319 2000.0 0.0 1.0 +de 07_gas 1 319 2000.0 0.0 1.0 +de 08_non-res 1 319 1000.0 0.0 1.0 de 09_hydro_pump 1 319 0.0 0.0 0.0 -de 01_solar 1 320 2000.0 1.0 0.0 -de 02_wind_on 1 320 2000.0 1.0 0.0 -de 03_wind_off 1 320 2000.0 1.0 0.0 -de 04_res 1 320 2000.0 1.0 0.0 -de 05_nuclear 1 320 2000.0 1.0 0.0 -de 06_coal 1 320 2000.0 1.0 0.0 -de 07_gas 1 320 2000.0 1.0 0.0 -de 08_non-res 1 320 1100.0 1.0 0.0 +de 01_solar 1 320 2000.0 0.0 1.0 +de 02_wind_on 1 320 2000.0 0.0 1.0 +de 03_wind_off 1 320 2000.0 0.0 1.0 +de 04_res 1 320 2000.0 0.0 1.0 +de 05_nuclear 1 320 2000.0 0.0 1.0 +de 06_coal 1 320 2000.0 0.0 1.0 +de 07_gas 1 320 2000.0 0.0 1.0 +de 08_non-res 1 320 1100.0 0.0 1.0 de 09_hydro_pump 1 320 0.0 0.0 0.0 -de 01_solar 1 321 2000.0 1.0 0.0 -de 02_wind_on 1 321 2000.0 1.0 0.0 -de 03_wind_off 1 321 2000.0 1.0 0.0 -de 04_res 1 321 2000.0 1.0 0.0 -de 05_nuclear 1 321 2000.0 1.0 0.0 -de 06_coal 1 321 2000.0 1.0 0.0 -de 07_gas 1 321 2000.0 1.0 0.0 -de 08_non-res 1 321 1200.0 1.0 0.0 +de 01_solar 1 321 2000.0 0.0 1.0 +de 02_wind_on 1 321 2000.0 0.0 1.0 +de 03_wind_off 1 321 2000.0 0.0 1.0 +de 04_res 1 321 2000.0 0.0 1.0 +de 05_nuclear 1 321 2000.0 0.0 1.0 +de 06_coal 1 321 2000.0 0.0 1.0 +de 07_gas 1 321 2000.0 0.0 1.0 +de 08_non-res 1 321 1200.0 0.0 1.0 de 09_hydro_pump 1 321 0.0 0.0 0.0 -de 01_solar 1 322 2000.0 1.0 0.0 -de 02_wind_on 1 322 2000.0 1.0 0.0 -de 03_wind_off 1 322 2000.0 1.0 0.0 -de 04_res 1 322 2000.0 1.0 0.0 -de 05_nuclear 1 322 2000.0 1.0 0.0 -de 06_coal 1 322 2000.0 1.0 0.0 -de 07_gas 1 322 2000.0 1.0 0.0 -de 08_non-res 1 322 1300.0 1.0 0.0 +de 01_solar 1 322 2000.0 0.0 1.0 +de 02_wind_on 1 322 2000.0 0.0 1.0 +de 03_wind_off 1 322 2000.0 0.0 1.0 +de 04_res 1 322 2000.0 0.0 1.0 +de 05_nuclear 1 322 2000.0 0.0 1.0 +de 06_coal 1 322 2000.0 0.0 1.0 +de 07_gas 1 322 2000.0 0.0 1.0 +de 08_non-res 1 322 1300.0 0.0 1.0 de 09_hydro_pump 1 322 0.0 0.0 0.0 -de 01_solar 1 323 2000.0 1.0 0.0 -de 02_wind_on 1 323 2000.0 1.0 0.0 -de 03_wind_off 1 323 2000.0 1.0 0.0 -de 04_res 1 323 2000.0 1.0 0.0 -de 05_nuclear 1 323 2000.0 1.0 0.0 -de 06_coal 1 323 2000.0 1.0 0.0 -de 07_gas 1 323 2000.0 1.0 0.0 -de 08_non-res 1 323 1400.0 1.0 0.0 +de 01_solar 1 323 2000.0 0.0 1.0 +de 02_wind_on 1 323 2000.0 0.0 1.0 +de 03_wind_off 1 323 2000.0 0.0 1.0 +de 04_res 1 323 2000.0 0.0 1.0 +de 05_nuclear 1 323 2000.0 0.0 1.0 +de 06_coal 1 323 2000.0 0.0 1.0 +de 07_gas 1 323 2000.0 0.0 1.0 +de 08_non-res 1 323 1400.0 0.0 1.0 de 09_hydro_pump 1 323 0.0 0.0 0.0 -de 01_solar 1 324 2000.0 1.0 0.0 -de 02_wind_on 1 324 2000.0 1.0 0.0 -de 03_wind_off 1 324 2000.0 1.0 0.0 -de 04_res 1 324 2000.0 1.0 0.0 -de 05_nuclear 1 324 2000.0 1.0 0.0 -de 06_coal 1 324 2000.0 1.0 0.0 -de 07_gas 1 324 2000.0 1.0 0.0 -de 08_non-res 1 324 1500.0 1.0 0.0 +de 01_solar 1 324 2000.0 0.0 1.0 +de 02_wind_on 1 324 2000.0 0.0 1.0 +de 03_wind_off 1 324 2000.0 0.0 1.0 +de 04_res 1 324 2000.0 0.0 1.0 +de 05_nuclear 1 324 2000.0 0.0 1.0 +de 06_coal 1 324 2000.0 0.0 1.0 +de 07_gas 1 324 2000.0 0.0 1.0 +de 08_non-res 1 324 1500.0 0.0 1.0 de 09_hydro_pump 1 324 0.0 0.0 0.0 -de 01_solar 1 325 2000.0 1.0 0.0 -de 02_wind_on 1 325 2000.0 1.0 0.0 -de 03_wind_off 1 325 2000.0 1.0 0.0 -de 04_res 1 325 2000.0 1.0 0.0 -de 05_nuclear 1 325 2000.0 1.0 0.0 -de 06_coal 1 325 2000.0 1.0 0.0 -de 07_gas 1 325 2000.0 1.0 0.0 -de 08_non-res 1 325 1600.0 1.0 0.0 +de 01_solar 1 325 2000.0 0.0 1.0 +de 02_wind_on 1 325 2000.0 0.0 1.0 +de 03_wind_off 1 325 2000.0 0.0 1.0 +de 04_res 1 325 2000.0 0.0 1.0 +de 05_nuclear 1 325 2000.0 0.0 1.0 +de 06_coal 1 325 2000.0 0.0 1.0 +de 07_gas 1 325 2000.0 0.0 1.0 +de 08_non-res 1 325 1600.0 0.0 1.0 de 09_hydro_pump 1 325 0.0 0.0 0.0 -de 01_solar 1 326 2000.0 1.0 0.0 -de 02_wind_on 1 326 2000.0 1.0 0.0 -de 03_wind_off 1 326 2000.0 1.0 0.0 -de 04_res 1 326 2000.0 1.0 0.0 -de 05_nuclear 1 326 2000.0 1.0 0.0 -de 06_coal 1 326 2000.0 1.0 0.0 -de 07_gas 1 326 2000.0 1.0 0.0 -de 08_non-res 1 326 1700.0 1.0 0.0 +de 01_solar 1 326 2000.0 0.0 1.0 +de 02_wind_on 1 326 2000.0 0.0 1.0 +de 03_wind_off 1 326 2000.0 0.0 1.0 +de 04_res 1 326 2000.0 0.0 1.0 +de 05_nuclear 1 326 2000.0 0.0 1.0 +de 06_coal 1 326 2000.0 0.0 1.0 +de 07_gas 1 326 2000.0 0.0 1.0 +de 08_non-res 1 326 1700.0 0.0 1.0 de 09_hydro_pump 1 326 0.0 0.0 0.0 -de 01_solar 1 327 2000.0 1.0 0.0 -de 02_wind_on 1 327 2000.0 1.0 0.0 -de 03_wind_off 1 327 2000.0 1.0 0.0 -de 04_res 1 327 2000.0 1.0 0.0 -de 05_nuclear 1 327 2000.0 1.0 0.0 -de 06_coal 1 327 2000.0 1.0 0.0 -de 07_gas 1 327 2000.0 1.0 0.0 -de 08_non-res 1 327 1800.0 1.0 0.0 +de 01_solar 1 327 2000.0 0.0 1.0 +de 02_wind_on 1 327 2000.0 0.0 1.0 +de 03_wind_off 1 327 2000.0 0.0 1.0 +de 04_res 1 327 2000.0 0.0 1.0 +de 05_nuclear 1 327 2000.0 0.0 1.0 +de 06_coal 1 327 2000.0 0.0 1.0 +de 07_gas 1 327 2000.0 0.0 1.0 +de 08_non-res 1 327 1800.0 0.0 1.0 de 09_hydro_pump 1 327 0.0 0.0 0.0 -de 01_solar 1 328 2000.0 1.0 0.0 -de 02_wind_on 1 328 2000.0 1.0 0.0 -de 03_wind_off 1 328 2000.0 1.0 0.0 -de 04_res 1 328 2000.0 1.0 0.0 -de 05_nuclear 1 328 2000.0 1.0 0.0 -de 06_coal 1 328 2000.0 1.0 0.0 -de 07_gas 1 328 2000.0 1.0 0.0 -de 08_non-res 1 328 1900.0 1.0 0.0 +de 01_solar 1 328 2000.0 0.0 1.0 +de 02_wind_on 1 328 2000.0 0.0 1.0 +de 03_wind_off 1 328 2000.0 0.0 1.0 +de 04_res 1 328 2000.0 0.0 1.0 +de 05_nuclear 1 328 2000.0 0.0 1.0 +de 06_coal 1 328 2000.0 0.0 1.0 +de 07_gas 1 328 2000.0 0.0 1.0 +de 08_non-res 1 328 1900.0 0.0 1.0 de 09_hydro_pump 1 328 0.0 0.0 0.0 -de 01_solar 1 329 2000.0 1.0 0.0 -de 02_wind_on 1 329 2000.0 1.0 0.0 -de 03_wind_off 1 329 2000.0 1.0 0.0 -de 04_res 1 329 2000.0 1.0 0.0 -de 05_nuclear 1 329 2000.0 1.0 0.0 -de 06_coal 1 329 2000.0 1.0 0.0 -de 07_gas 1 329 2000.0 1.0 0.0 -de 08_non-res 1 329 2000.0 1.0 0.0 +de 01_solar 1 329 2000.0 0.0 1.0 +de 02_wind_on 1 329 2000.0 0.0 1.0 +de 03_wind_off 1 329 2000.0 0.0 1.0 +de 04_res 1 329 2000.0 0.0 1.0 +de 05_nuclear 1 329 2000.0 0.0 1.0 +de 06_coal 1 329 2000.0 0.0 1.0 +de 07_gas 1 329 2000.0 0.0 1.0 +de 08_non-res 1 329 2000.0 0.0 1.0 de 09_hydro_pump 1 329 0.0 0.0 0.0 -de 01_solar 1 330 2000.0 1.0 0.0 -de 02_wind_on 1 330 2000.0 1.0 0.0 -de 03_wind_off 1 330 2000.0 1.0 0.0 -de 04_res 1 330 2000.0 1.0 0.0 -de 05_nuclear 1 330 2000.0 1.0 0.0 -de 06_coal 1 330 2000.0 1.0 0.0 -de 07_gas 1 330 2000.0 1.0 0.0 -de 08_non-res 1 330 2000.0 1.0 0.0 -de 09_hydro_pump 1 330 100.0 1.0 0.0 -de 01_solar 1 331 2000.0 1.0 0.0 -de 02_wind_on 1 331 2000.0 1.0 0.0 -de 03_wind_off 1 331 2000.0 1.0 0.0 -de 04_res 1 331 2000.0 1.0 0.0 -de 05_nuclear 1 331 2000.0 1.0 0.0 -de 06_coal 1 331 2000.0 1.0 0.0 -de 07_gas 1 331 2000.0 1.0 0.0 -de 08_non-res 1 331 2000.0 1.0 0.0 -de 09_hydro_pump 1 331 200.0 1.0 0.0 -de 01_solar 1 332 2000.0 1.0 0.0 -de 02_wind_on 1 332 2000.0 1.0 0.0 -de 03_wind_off 1 332 2000.0 1.0 0.0 -de 04_res 1 332 2000.0 1.0 0.0 -de 05_nuclear 1 332 2000.0 1.0 0.0 -de 06_coal 1 332 2000.0 1.0 0.0 -de 07_gas 1 332 2000.0 1.0 0.0 -de 08_non-res 1 332 2000.0 1.0 0.0 -de 09_hydro_pump 1 332 300.0 1.0 0.0 -de 01_solar 1 333 2000.0 1.0 0.0 -de 02_wind_on 1 333 2000.0 1.0 0.0 -de 03_wind_off 1 333 2000.0 1.0 0.0 -de 04_res 1 333 2000.0 1.0 0.0 -de 05_nuclear 1 333 2000.0 1.0 0.0 -de 06_coal 1 333 2000.0 1.0 0.0 -de 07_gas 1 333 2000.0 1.0 0.0 -de 08_non-res 1 333 2000.0 1.0 0.0 -de 09_hydro_pump 1 333 400.0 1.0 0.0 -de 01_solar 1 334 2000.0 1.0 0.0 -de 02_wind_on 1 334 2000.0 1.0 0.0 -de 03_wind_off 1 334 2000.0 1.0 0.0 -de 04_res 1 334 2000.0 1.0 0.0 -de 05_nuclear 1 334 2000.0 1.0 0.0 -de 06_coal 1 334 2000.0 1.0 0.0 -de 07_gas 1 334 2000.0 1.0 0.0 -de 08_non-res 1 334 2000.0 1.0 0.0 -de 09_hydro_pump 1 334 500.0 1.0 0.0 -de 01_solar 1 335 2000.0 1.0 0.0 -de 02_wind_on 1 335 2000.0 1.0 0.0 -de 03_wind_off 1 335 2000.0 1.0 0.0 -de 04_res 1 335 2000.0 1.0 0.0 -de 05_nuclear 1 335 2000.0 1.0 0.0 -de 06_coal 1 335 2000.0 1.0 0.0 -de 07_gas 1 335 2000.0 1.0 0.0 -de 08_non-res 1 335 2000.0 1.0 0.0 -de 09_hydro_pump 1 335 600.0 1.0 0.0 -de 01_solar 1 336 2000.0 1.0 0.0 -de 02_wind_on 1 336 2000.0 1.0 0.0 -de 03_wind_off 1 336 2000.0 1.0 0.0 -de 04_res 1 336 2000.0 1.0 0.0 -de 05_nuclear 1 336 2000.0 1.0 0.0 -de 06_coal 1 336 2000.0 1.0 0.0 -de 07_gas 1 336 2000.0 1.0 0.0 -de 08_non-res 1 336 2000.0 1.0 0.0 -de 09_hydro_pump 1 336 700.0 1.0 0.0 +de 01_solar 1 330 2000.0 0.0 1.0 +de 02_wind_on 1 330 2000.0 0.0 1.0 +de 03_wind_off 1 330 2000.0 0.0 1.0 +de 04_res 1 330 2000.0 0.0 1.0 +de 05_nuclear 1 330 2000.0 0.0 1.0 +de 06_coal 1 330 2000.0 0.0 1.0 +de 07_gas 1 330 2000.0 0.0 1.0 +de 08_non-res 1 330 2000.0 0.0 1.0 +de 09_hydro_pump 1 330 100.0 0.0 1.0 +de 01_solar 1 331 2000.0 0.0 1.0 +de 02_wind_on 1 331 2000.0 0.0 1.0 +de 03_wind_off 1 331 2000.0 0.0 1.0 +de 04_res 1 331 2000.0 0.0 1.0 +de 05_nuclear 1 331 2000.0 0.0 1.0 +de 06_coal 1 331 2000.0 0.0 1.0 +de 07_gas 1 331 2000.0 0.0 1.0 +de 08_non-res 1 331 2000.0 0.0 1.0 +de 09_hydro_pump 1 331 200.0 0.0 1.0 +de 01_solar 1 332 2000.0 0.0 1.0 +de 02_wind_on 1 332 2000.0 0.0 1.0 +de 03_wind_off 1 332 2000.0 0.0 1.0 +de 04_res 1 332 2000.0 0.0 1.0 +de 05_nuclear 1 332 2000.0 0.0 1.0 +de 06_coal 1 332 2000.0 0.0 1.0 +de 07_gas 1 332 2000.0 0.0 1.0 +de 08_non-res 1 332 2000.0 0.0 1.0 +de 09_hydro_pump 1 332 300.0 0.0 1.0 +de 01_solar 1 333 2000.0 0.0 1.0 +de 02_wind_on 1 333 2000.0 0.0 1.0 +de 03_wind_off 1 333 2000.0 0.0 1.0 +de 04_res 1 333 2000.0 0.0 1.0 +de 05_nuclear 1 333 2000.0 0.0 1.0 +de 06_coal 1 333 2000.0 0.0 1.0 +de 07_gas 1 333 2000.0 0.0 1.0 +de 08_non-res 1 333 2000.0 0.0 1.0 +de 09_hydro_pump 1 333 400.0 0.0 1.0 +de 01_solar 1 334 2000.0 0.0 1.0 +de 02_wind_on 1 334 2000.0 0.0 1.0 +de 03_wind_off 1 334 2000.0 0.0 1.0 +de 04_res 1 334 2000.0 0.0 1.0 +de 05_nuclear 1 334 2000.0 0.0 1.0 +de 06_coal 1 334 2000.0 0.0 1.0 +de 07_gas 1 334 2000.0 0.0 1.0 +de 08_non-res 1 334 2000.0 0.0 1.0 +de 09_hydro_pump 1 334 500.0 0.0 1.0 +de 01_solar 1 335 2000.0 0.0 1.0 +de 02_wind_on 1 335 2000.0 0.0 1.0 +de 03_wind_off 1 335 2000.0 0.0 1.0 +de 04_res 1 335 2000.0 0.0 1.0 +de 05_nuclear 1 335 2000.0 0.0 1.0 +de 06_coal 1 335 2000.0 0.0 1.0 +de 07_gas 1 335 2000.0 0.0 1.0 +de 08_non-res 1 335 2000.0 0.0 1.0 +de 09_hydro_pump 1 335 600.0 0.0 1.0 +de 01_solar 1 336 2000.0 0.0 1.0 +de 02_wind_on 1 336 2000.0 0.0 1.0 +de 03_wind_off 1 336 2000.0 0.0 1.0 +de 04_res 1 336 2000.0 0.0 1.0 +de 05_nuclear 1 336 2000.0 0.0 1.0 +de 06_coal 1 336 2000.0 0.0 1.0 +de 07_gas 1 336 2000.0 0.0 1.0 +de 08_non-res 1 336 2000.0 0.0 1.0 +de 09_hydro_pump 1 336 700.0 0.0 1.0 fr 01_solar 1 1 0.0 0.0 0.0 fr 02_wind_on 1 1 0.0 0.0 0.0 fr 03_wind_off 1 1 0.0 0.0 0.0 @@ -3032,7 +3032,7 @@ fr 06_coal 1 1 0.0 0.0 0.0 fr 07_gas 1 1 0.0 0.0 0.0 fr 08_non-res 1 1 0.0 0.0 0.0 fr 09_hydro_pump 1 1 0.0 0.0 0.0 -fr 01_solar 1 2 100.0 1.0 0.0 +fr 01_solar 1 2 100.0 0.0 1.0 fr 02_wind_on 1 2 0.0 0.0 0.0 fr 03_wind_off 1 2 0.0 0.0 0.0 fr 04_res 1 2 0.0 0.0 0.0 @@ -3041,7 +3041,7 @@ fr 06_coal 1 2 0.0 0.0 0.0 fr 07_gas 1 2 0.0 0.0 0.0 fr 08_non-res 1 2 0.0 0.0 0.0 fr 09_hydro_pump 1 2 0.0 0.0 0.0 -fr 01_solar 1 3 200.0 1.0 0.0 +fr 01_solar 1 3 200.0 0.0 1.0 fr 02_wind_on 1 3 0.0 0.0 0.0 fr 03_wind_off 1 3 0.0 0.0 0.0 fr 04_res 1 3 0.0 0.0 0.0 @@ -3050,7 +3050,7 @@ fr 06_coal 1 3 0.0 0.0 0.0 fr 07_gas 1 3 0.0 0.0 0.0 fr 08_non-res 1 3 0.0 0.0 0.0 fr 09_hydro_pump 1 3 0.0 0.0 0.0 -fr 01_solar 1 4 300.0 1.0 0.0 +fr 01_solar 1 4 300.0 0.0 1.0 fr 02_wind_on 1 4 0.0 0.0 0.0 fr 03_wind_off 1 4 0.0 0.0 0.0 fr 04_res 1 4 0.0 0.0 0.0 @@ -3059,7 +3059,7 @@ fr 06_coal 1 4 0.0 0.0 0.0 fr 07_gas 1 4 0.0 0.0 0.0 fr 08_non-res 1 4 0.0 0.0 0.0 fr 09_hydro_pump 1 4 0.0 0.0 0.0 -fr 01_solar 1 5 400.0 1.0 0.0 +fr 01_solar 1 5 400.0 0.0 1.0 fr 02_wind_on 1 5 0.0 0.0 0.0 fr 03_wind_off 1 5 0.0 0.0 0.0 fr 04_res 1 5 0.0 0.0 0.0 @@ -3068,7 +3068,7 @@ fr 06_coal 1 5 0.0 0.0 0.0 fr 07_gas 1 5 0.0 0.0 0.0 fr 08_non-res 1 5 0.0 0.0 0.0 fr 09_hydro_pump 1 5 0.0 0.0 0.0 -fr 01_solar 1 6 500.0 1.0 0.0 +fr 01_solar 1 6 500.0 0.0 1.0 fr 02_wind_on 1 6 0.0 0.0 0.0 fr 03_wind_off 1 6 0.0 0.0 0.0 fr 04_res 1 6 0.0 0.0 0.0 @@ -3077,7 +3077,7 @@ fr 06_coal 1 6 0.0 0.0 0.0 fr 07_gas 1 6 0.0 0.0 0.0 fr 08_non-res 1 6 0.0 0.0 0.0 fr 09_hydro_pump 1 6 0.0 0.0 0.0 -fr 01_solar 1 7 600.0 1.0 0.0 +fr 01_solar 1 7 600.0 0.0 1.0 fr 02_wind_on 1 7 0.0 0.0 0.0 fr 03_wind_off 1 7 0.0 0.0 0.0 fr 04_res 1 7 0.0 0.0 0.0 @@ -3086,7 +3086,7 @@ fr 06_coal 1 7 0.0 0.0 0.0 fr 07_gas 1 7 0.0 0.0 0.0 fr 08_non-res 1 7 0.0 0.0 0.0 fr 09_hydro_pump 1 7 0.0 0.0 0.0 -fr 01_solar 1 8 700.0 1.0 0.0 +fr 01_solar 1 8 700.0 0.0 1.0 fr 02_wind_on 1 8 0.0 0.0 0.0 fr 03_wind_off 1 8 0.0 0.0 0.0 fr 04_res 1 8 0.0 0.0 0.0 @@ -3095,7 +3095,7 @@ fr 06_coal 1 8 0.0 0.0 0.0 fr 07_gas 1 8 0.0 0.0 0.0 fr 08_non-res 1 8 0.0 0.0 0.0 fr 09_hydro_pump 1 8 0.0 0.0 0.0 -fr 01_solar 1 9 800.0 1.0 0.0 +fr 01_solar 1 9 800.0 0.0 1.0 fr 02_wind_on 1 9 0.0 0.0 0.0 fr 03_wind_off 1 9 0.0 0.0 0.0 fr 04_res 1 9 0.0 0.0 0.0 @@ -3104,7 +3104,7 @@ fr 06_coal 1 9 0.0 0.0 0.0 fr 07_gas 1 9 0.0 0.0 0.0 fr 08_non-res 1 9 0.0 0.0 0.0 fr 09_hydro_pump 1 9 0.0 0.0 0.0 -fr 01_solar 1 10 900.0 1.0 0.0 +fr 01_solar 1 10 900.0 0.0 1.0 fr 02_wind_on 1 10 0.0 0.0 0.0 fr 03_wind_off 1 10 0.0 0.0 0.0 fr 04_res 1 10 0.0 0.0 0.0 @@ -3113,7 +3113,7 @@ fr 06_coal 1 10 0.0 0.0 0.0 fr 07_gas 1 10 0.0 0.0 0.0 fr 08_non-res 1 10 0.0 0.0 0.0 fr 09_hydro_pump 1 10 0.0 0.0 0.0 -fr 01_solar 1 11 1000.0 1.0 0.0 +fr 01_solar 1 11 1000.0 0.0 1.0 fr 02_wind_on 1 11 0.0 0.0 0.0 fr 03_wind_off 1 11 0.0 0.0 0.0 fr 04_res 1 11 0.0 0.0 0.0 @@ -3122,7 +3122,7 @@ fr 06_coal 1 11 0.0 0.0 0.0 fr 07_gas 1 11 0.0 0.0 0.0 fr 08_non-res 1 11 0.0 0.0 0.0 fr 09_hydro_pump 1 11 0.0 0.0 0.0 -fr 01_solar 1 12 1100.0 1.0 0.0 +fr 01_solar 1 12 1100.0 0.0 1.0 fr 02_wind_on 1 12 0.0 0.0 0.0 fr 03_wind_off 1 12 0.0 0.0 0.0 fr 04_res 1 12 0.0 0.0 0.0 @@ -3131,7 +3131,7 @@ fr 06_coal 1 12 0.0 0.0 0.0 fr 07_gas 1 12 0.0 0.0 0.0 fr 08_non-res 1 12 0.0 0.0 0.0 fr 09_hydro_pump 1 12 0.0 0.0 0.0 -fr 01_solar 1 13 1200.0 1.0 0.0 +fr 01_solar 1 13 1200.0 0.0 1.0 fr 02_wind_on 1 13 0.0 0.0 0.0 fr 03_wind_off 1 13 0.0 0.0 0.0 fr 04_res 1 13 0.0 0.0 0.0 @@ -3140,7 +3140,7 @@ fr 06_coal 1 13 0.0 0.0 0.0 fr 07_gas 1 13 0.0 0.0 0.0 fr 08_non-res 1 13 0.0 0.0 0.0 fr 09_hydro_pump 1 13 0.0 0.0 0.0 -fr 01_solar 1 14 1300.0 1.0 0.0 +fr 01_solar 1 14 1300.0 0.0 1.0 fr 02_wind_on 1 14 0.0 0.0 0.0 fr 03_wind_off 1 14 0.0 0.0 0.0 fr 04_res 1 14 0.0 0.0 0.0 @@ -3149,7 +3149,7 @@ fr 06_coal 1 14 0.0 0.0 0.0 fr 07_gas 1 14 0.0 0.0 0.0 fr 08_non-res 1 14 0.0 0.0 0.0 fr 09_hydro_pump 1 14 0.0 0.0 0.0 -fr 01_solar 1 15 1400.0 1.0 0.0 +fr 01_solar 1 15 1400.0 0.0 1.0 fr 02_wind_on 1 15 0.0 0.0 0.0 fr 03_wind_off 1 15 0.0 0.0 0.0 fr 04_res 1 15 0.0 0.0 0.0 @@ -3158,7 +3158,7 @@ fr 06_coal 1 15 0.0 0.0 0.0 fr 07_gas 1 15 0.0 0.0 0.0 fr 08_non-res 1 15 0.0 0.0 0.0 fr 09_hydro_pump 1 15 0.0 0.0 0.0 -fr 01_solar 1 16 1500.0 1.0 0.0 +fr 01_solar 1 16 1500.0 0.0 1.0 fr 02_wind_on 1 16 0.0 0.0 0.0 fr 03_wind_off 1 16 0.0 0.0 0.0 fr 04_res 1 16 0.0 0.0 0.0 @@ -3167,7 +3167,7 @@ fr 06_coal 1 16 0.0 0.0 0.0 fr 07_gas 1 16 0.0 0.0 0.0 fr 08_non-res 1 16 0.0 0.0 0.0 fr 09_hydro_pump 1 16 0.0 0.0 0.0 -fr 01_solar 1 17 1600.0 1.0 0.0 +fr 01_solar 1 17 1600.0 0.0 1.0 fr 02_wind_on 1 17 0.0 0.0 0.0 fr 03_wind_off 1 17 0.0 0.0 0.0 fr 04_res 1 17 0.0 0.0 0.0 @@ -3176,7 +3176,7 @@ fr 06_coal 1 17 0.0 0.0 0.0 fr 07_gas 1 17 0.0 0.0 0.0 fr 08_non-res 1 17 0.0 0.0 0.0 fr 09_hydro_pump 1 17 0.0 0.0 0.0 -fr 01_solar 1 18 1700.0 1.0 0.0 +fr 01_solar 1 18 1700.0 0.0 1.0 fr 02_wind_on 1 18 0.0 0.0 0.0 fr 03_wind_off 1 18 0.0 0.0 0.0 fr 04_res 1 18 0.0 0.0 0.0 @@ -3185,7 +3185,7 @@ fr 06_coal 1 18 0.0 0.0 0.0 fr 07_gas 1 18 0.0 0.0 0.0 fr 08_non-res 1 18 0.0 0.0 0.0 fr 09_hydro_pump 1 18 0.0 0.0 0.0 -fr 01_solar 1 19 1800.0 1.0 0.0 +fr 01_solar 1 19 1800.0 0.0 1.0 fr 02_wind_on 1 19 0.0 0.0 0.0 fr 03_wind_off 1 19 0.0 0.0 0.0 fr 04_res 1 19 0.0 0.0 0.0 @@ -3194,7 +3194,7 @@ fr 06_coal 1 19 0.0 0.0 0.0 fr 07_gas 1 19 0.0 0.0 0.0 fr 08_non-res 1 19 0.0 0.0 0.0 fr 09_hydro_pump 1 19 0.0 0.0 0.0 -fr 01_solar 1 20 1900.0 1.0 0.0 +fr 01_solar 1 20 1900.0 0.0 1.0 fr 02_wind_on 1 20 0.0 0.0 0.0 fr 03_wind_off 1 20 0.0 0.0 0.0 fr 04_res 1 20 0.0 0.0 0.0 @@ -3203,7 +3203,7 @@ fr 06_coal 1 20 0.0 0.0 0.0 fr 07_gas 1 20 0.0 0.0 0.0 fr 08_non-res 1 20 0.0 0.0 0.0 fr 09_hydro_pump 1 20 0.0 0.0 0.0 -fr 01_solar 1 21 2000.0 1.0 0.0 +fr 01_solar 1 21 2000.0 0.0 1.0 fr 02_wind_on 1 21 0.0 0.0 0.0 fr 03_wind_off 1 21 0.0 0.0 0.0 fr 04_res 1 21 0.0 0.0 0.0 @@ -3212,8 +3212,8 @@ fr 06_coal 1 21 0.0 0.0 0.0 fr 07_gas 1 21 0.0 0.0 0.0 fr 08_non-res 1 21 0.0 0.0 0.0 fr 09_hydro_pump 1 21 0.0 0.0 0.0 -fr 01_solar 1 22 2000.0 1.0 0.0 -fr 02_wind_on 1 22 100.0 1.0 0.0 +fr 01_solar 1 22 2000.0 0.0 1.0 +fr 02_wind_on 1 22 100.0 0.0 1.0 fr 03_wind_off 1 22 0.0 0.0 0.0 fr 04_res 1 22 0.0 0.0 0.0 fr 05_nuclear 1 22 0.0 0.0 0.0 @@ -3221,8 +3221,8 @@ fr 06_coal 1 22 0.0 0.0 0.0 fr 07_gas 1 22 0.0 0.0 0.0 fr 08_non-res 1 22 0.0 0.0 0.0 fr 09_hydro_pump 1 22 0.0 0.0 0.0 -fr 01_solar 1 23 2000.0 1.0 0.0 -fr 02_wind_on 1 23 200.0 1.0 0.0 +fr 01_solar 1 23 2000.0 0.0 1.0 +fr 02_wind_on 1 23 200.0 0.0 1.0 fr 03_wind_off 1 23 0.0 0.0 0.0 fr 04_res 1 23 0.0 0.0 0.0 fr 05_nuclear 1 23 0.0 0.0 0.0 @@ -3230,8 +3230,8 @@ fr 06_coal 1 23 0.0 0.0 0.0 fr 07_gas 1 23 0.0 0.0 0.0 fr 08_non-res 1 23 0.0 0.0 0.0 fr 09_hydro_pump 1 23 0.0 0.0 0.0 -fr 01_solar 1 24 2000.0 1.0 0.0 -fr 02_wind_on 1 24 300.0 1.0 0.0 +fr 01_solar 1 24 2000.0 0.0 1.0 +fr 02_wind_on 1 24 300.0 0.0 1.0 fr 03_wind_off 1 24 0.0 0.0 0.0 fr 04_res 1 24 0.0 0.0 0.0 fr 05_nuclear 1 24 0.0 0.0 0.0 @@ -3239,8 +3239,8 @@ fr 06_coal 1 24 0.0 0.0 0.0 fr 07_gas 1 24 0.0 0.0 0.0 fr 08_non-res 1 24 0.0 0.0 0.0 fr 09_hydro_pump 1 24 0.0 0.0 0.0 -fr 01_solar 1 25 2000.0 1.0 0.0 -fr 02_wind_on 1 25 400.0 1.0 0.0 +fr 01_solar 1 25 2000.0 0.0 1.0 +fr 02_wind_on 1 25 400.0 0.0 1.0 fr 03_wind_off 1 25 0.0 0.0 0.0 fr 04_res 1 25 0.0 0.0 0.0 fr 05_nuclear 1 25 0.0 0.0 0.0 @@ -3248,8 +3248,8 @@ fr 06_coal 1 25 0.0 0.0 0.0 fr 07_gas 1 25 0.0 0.0 0.0 fr 08_non-res 1 25 0.0 0.0 0.0 fr 09_hydro_pump 1 25 0.0 0.0 0.0 -fr 01_solar 1 26 2000.0 1.0 0.0 -fr 02_wind_on 1 26 500.0 1.0 0.0 +fr 01_solar 1 26 2000.0 0.0 1.0 +fr 02_wind_on 1 26 500.0 0.0 1.0 fr 03_wind_off 1 26 0.0 0.0 0.0 fr 04_res 1 26 0.0 0.0 0.0 fr 05_nuclear 1 26 0.0 0.0 0.0 @@ -3257,8 +3257,8 @@ fr 06_coal 1 26 0.0 0.0 0.0 fr 07_gas 1 26 0.0 0.0 0.0 fr 08_non-res 1 26 0.0 0.0 0.0 fr 09_hydro_pump 1 26 0.0 0.0 0.0 -fr 01_solar 1 27 2000.0 1.0 0.0 -fr 02_wind_on 1 27 600.0 1.0 0.0 +fr 01_solar 1 27 2000.0 0.0 1.0 +fr 02_wind_on 1 27 600.0 0.0 1.0 fr 03_wind_off 1 27 0.0 0.0 0.0 fr 04_res 1 27 0.0 0.0 0.0 fr 05_nuclear 1 27 0.0 0.0 0.0 @@ -3266,8 +3266,8 @@ fr 06_coal 1 27 0.0 0.0 0.0 fr 07_gas 1 27 0.0 0.0 0.0 fr 08_non-res 1 27 0.0 0.0 0.0 fr 09_hydro_pump 1 27 0.0 0.0 0.0 -fr 01_solar 1 28 2000.0 1.0 0.0 -fr 02_wind_on 1 28 700.0 1.0 0.0 +fr 01_solar 1 28 2000.0 0.0 1.0 +fr 02_wind_on 1 28 700.0 0.0 1.0 fr 03_wind_off 1 28 0.0 0.0 0.0 fr 04_res 1 28 0.0 0.0 0.0 fr 05_nuclear 1 28 0.0 0.0 0.0 @@ -3275,8 +3275,8 @@ fr 06_coal 1 28 0.0 0.0 0.0 fr 07_gas 1 28 0.0 0.0 0.0 fr 08_non-res 1 28 0.0 0.0 0.0 fr 09_hydro_pump 1 28 0.0 0.0 0.0 -fr 01_solar 1 29 2000.0 1.0 0.0 -fr 02_wind_on 1 29 800.0 1.0 0.0 +fr 01_solar 1 29 2000.0 0.0 1.0 +fr 02_wind_on 1 29 800.0 0.0 1.0 fr 03_wind_off 1 29 0.0 0.0 0.0 fr 04_res 1 29 0.0 0.0 0.0 fr 05_nuclear 1 29 0.0 0.0 0.0 @@ -3284,8 +3284,8 @@ fr 06_coal 1 29 0.0 0.0 0.0 fr 07_gas 1 29 0.0 0.0 0.0 fr 08_non-res 1 29 0.0 0.0 0.0 fr 09_hydro_pump 1 29 0.0 0.0 0.0 -fr 01_solar 1 30 2000.0 1.0 0.0 -fr 02_wind_on 1 30 900.0 1.0 0.0 +fr 01_solar 1 30 2000.0 0.0 1.0 +fr 02_wind_on 1 30 900.0 0.0 1.0 fr 03_wind_off 1 30 0.0 0.0 0.0 fr 04_res 1 30 0.0 0.0 0.0 fr 05_nuclear 1 30 0.0 0.0 0.0 @@ -3293,8 +3293,8 @@ fr 06_coal 1 30 0.0 0.0 0.0 fr 07_gas 1 30 0.0 0.0 0.0 fr 08_non-res 1 30 0.0 0.0 0.0 fr 09_hydro_pump 1 30 0.0 0.0 0.0 -fr 01_solar 1 31 2000.0 1.0 0.0 -fr 02_wind_on 1 31 1000.0 1.0 0.0 +fr 01_solar 1 31 2000.0 0.0 1.0 +fr 02_wind_on 1 31 1000.0 0.0 1.0 fr 03_wind_off 1 31 0.0 0.0 0.0 fr 04_res 1 31 0.0 0.0 0.0 fr 05_nuclear 1 31 0.0 0.0 0.0 @@ -3302,8 +3302,8 @@ fr 06_coal 1 31 0.0 0.0 0.0 fr 07_gas 1 31 0.0 0.0 0.0 fr 08_non-res 1 31 0.0 0.0 0.0 fr 09_hydro_pump 1 31 0.0 0.0 0.0 -fr 01_solar 1 32 2000.0 1.0 0.0 -fr 02_wind_on 1 32 1100.0 1.0 0.0 +fr 01_solar 1 32 2000.0 0.0 1.0 +fr 02_wind_on 1 32 1100.0 0.0 1.0 fr 03_wind_off 1 32 0.0 0.0 0.0 fr 04_res 1 32 0.0 0.0 0.0 fr 05_nuclear 1 32 0.0 0.0 0.0 @@ -3311,8 +3311,8 @@ fr 06_coal 1 32 0.0 0.0 0.0 fr 07_gas 1 32 0.0 0.0 0.0 fr 08_non-res 1 32 0.0 0.0 0.0 fr 09_hydro_pump 1 32 0.0 0.0 0.0 -fr 01_solar 1 33 2000.0 1.0 0.0 -fr 02_wind_on 1 33 1200.0 1.0 0.0 +fr 01_solar 1 33 2000.0 0.0 1.0 +fr 02_wind_on 1 33 1200.0 0.0 1.0 fr 03_wind_off 1 33 0.0 0.0 0.0 fr 04_res 1 33 0.0 0.0 0.0 fr 05_nuclear 1 33 0.0 0.0 0.0 @@ -3320,8 +3320,8 @@ fr 06_coal 1 33 0.0 0.0 0.0 fr 07_gas 1 33 0.0 0.0 0.0 fr 08_non-res 1 33 0.0 0.0 0.0 fr 09_hydro_pump 1 33 0.0 0.0 0.0 -fr 01_solar 1 34 2000.0 1.0 0.0 -fr 02_wind_on 1 34 1300.0 1.0 0.0 +fr 01_solar 1 34 2000.0 0.0 1.0 +fr 02_wind_on 1 34 1300.0 0.0 1.0 fr 03_wind_off 1 34 0.0 0.0 0.0 fr 04_res 1 34 0.0 0.0 0.0 fr 05_nuclear 1 34 0.0 0.0 0.0 @@ -3329,8 +3329,8 @@ fr 06_coal 1 34 0.0 0.0 0.0 fr 07_gas 1 34 0.0 0.0 0.0 fr 08_non-res 1 34 0.0 0.0 0.0 fr 09_hydro_pump 1 34 0.0 0.0 0.0 -fr 01_solar 1 35 2000.0 1.0 0.0 -fr 02_wind_on 1 35 1400.0 1.0 0.0 +fr 01_solar 1 35 2000.0 0.0 1.0 +fr 02_wind_on 1 35 1400.0 0.0 1.0 fr 03_wind_off 1 35 0.0 0.0 0.0 fr 04_res 1 35 0.0 0.0 0.0 fr 05_nuclear 1 35 0.0 0.0 0.0 @@ -3338,8 +3338,8 @@ fr 06_coal 1 35 0.0 0.0 0.0 fr 07_gas 1 35 0.0 0.0 0.0 fr 08_non-res 1 35 0.0 0.0 0.0 fr 09_hydro_pump 1 35 0.0 0.0 0.0 -fr 01_solar 1 36 2000.0 1.0 0.0 -fr 02_wind_on 1 36 1500.0 1.0 0.0 +fr 01_solar 1 36 2000.0 0.0 1.0 +fr 02_wind_on 1 36 1500.0 0.0 1.0 fr 03_wind_off 1 36 0.0 0.0 0.0 fr 04_res 1 36 0.0 0.0 0.0 fr 05_nuclear 1 36 0.0 0.0 0.0 @@ -3347,8 +3347,8 @@ fr 06_coal 1 36 0.0 0.0 0.0 fr 07_gas 1 36 0.0 0.0 0.0 fr 08_non-res 1 36 0.0 0.0 0.0 fr 09_hydro_pump 1 36 0.0 0.0 0.0 -fr 01_solar 1 37 2000.0 1.0 0.0 -fr 02_wind_on 1 37 1600.0 1.0 0.0 +fr 01_solar 1 37 2000.0 0.0 1.0 +fr 02_wind_on 1 37 1600.0 0.0 1.0 fr 03_wind_off 1 37 0.0 0.0 0.0 fr 04_res 1 37 0.0 0.0 0.0 fr 05_nuclear 1 37 0.0 0.0 0.0 @@ -3356,8 +3356,8 @@ fr 06_coal 1 37 0.0 0.0 0.0 fr 07_gas 1 37 0.0 0.0 0.0 fr 08_non-res 1 37 0.0 0.0 0.0 fr 09_hydro_pump 1 37 0.0 0.0 0.0 -fr 01_solar 1 38 2000.0 1.0 0.0 -fr 02_wind_on 1 38 1700.0 1.0 0.0 +fr 01_solar 1 38 2000.0 0.0 1.0 +fr 02_wind_on 1 38 1700.0 0.0 1.0 fr 03_wind_off 1 38 0.0 0.0 0.0 fr 04_res 1 38 0.0 0.0 0.0 fr 05_nuclear 1 38 0.0 0.0 0.0 @@ -3365,8 +3365,8 @@ fr 06_coal 1 38 0.0 0.0 0.0 fr 07_gas 1 38 0.0 0.0 0.0 fr 08_non-res 1 38 0.0 0.0 0.0 fr 09_hydro_pump 1 38 0.0 0.0 0.0 -fr 01_solar 1 39 2000.0 1.0 0.0 -fr 02_wind_on 1 39 1800.0 1.0 0.0 +fr 01_solar 1 39 2000.0 0.0 1.0 +fr 02_wind_on 1 39 1800.0 0.0 1.0 fr 03_wind_off 1 39 0.0 0.0 0.0 fr 04_res 1 39 0.0 0.0 0.0 fr 05_nuclear 1 39 0.0 0.0 0.0 @@ -3374,8 +3374,8 @@ fr 06_coal 1 39 0.0 0.0 0.0 fr 07_gas 1 39 0.0 0.0 0.0 fr 08_non-res 1 39 0.0 0.0 0.0 fr 09_hydro_pump 1 39 0.0 0.0 0.0 -fr 01_solar 1 40 2000.0 1.0 0.0 -fr 02_wind_on 1 40 1900.0 1.0 0.0 +fr 01_solar 1 40 2000.0 0.0 1.0 +fr 02_wind_on 1 40 1900.0 0.0 1.0 fr 03_wind_off 1 40 0.0 0.0 0.0 fr 04_res 1 40 0.0 0.0 0.0 fr 05_nuclear 1 40 0.0 0.0 0.0 @@ -3383,8 +3383,8 @@ fr 06_coal 1 40 0.0 0.0 0.0 fr 07_gas 1 40 0.0 0.0 0.0 fr 08_non-res 1 40 0.0 0.0 0.0 fr 09_hydro_pump 1 40 0.0 0.0 0.0 -fr 01_solar 1 41 2000.0 1.0 0.0 -fr 02_wind_on 1 41 2000.0 1.0 0.0 +fr 01_solar 1 41 2000.0 0.0 1.0 +fr 02_wind_on 1 41 2000.0 0.0 1.0 fr 03_wind_off 1 41 0.0 0.0 0.0 fr 04_res 1 41 0.0 0.0 0.0 fr 05_nuclear 1 41 0.0 0.0 0.0 @@ -3392,1149 +3392,1149 @@ fr 06_coal 1 41 0.0 0.0 0.0 fr 07_gas 1 41 0.0 0.0 0.0 fr 08_non-res 1 41 0.0 0.0 0.0 fr 09_hydro_pump 1 41 0.0 0.0 0.0 -fr 01_solar 1 42 2000.0 1.0 0.0 -fr 02_wind_on 1 42 2000.0 1.0 0.0 -fr 03_wind_off 1 42 100.0 1.0 0.0 +fr 01_solar 1 42 2000.0 0.0 1.0 +fr 02_wind_on 1 42 2000.0 0.0 1.0 +fr 03_wind_off 1 42 100.0 0.0 1.0 fr 04_res 1 42 0.0 0.0 0.0 fr 05_nuclear 1 42 0.0 0.0 0.0 fr 06_coal 1 42 0.0 0.0 0.0 fr 07_gas 1 42 0.0 0.0 0.0 fr 08_non-res 1 42 0.0 0.0 0.0 fr 09_hydro_pump 1 42 0.0 0.0 0.0 -fr 01_solar 1 43 2000.0 1.0 0.0 -fr 02_wind_on 1 43 2000.0 1.0 0.0 -fr 03_wind_off 1 43 200.0 1.0 0.0 +fr 01_solar 1 43 2000.0 0.0 1.0 +fr 02_wind_on 1 43 2000.0 0.0 1.0 +fr 03_wind_off 1 43 200.0 0.0 1.0 fr 04_res 1 43 0.0 0.0 0.0 fr 05_nuclear 1 43 0.0 0.0 0.0 fr 06_coal 1 43 0.0 0.0 0.0 fr 07_gas 1 43 0.0 0.0 0.0 fr 08_non-res 1 43 0.0 0.0 0.0 fr 09_hydro_pump 1 43 0.0 0.0 0.0 -fr 01_solar 1 44 2000.0 1.0 0.0 -fr 02_wind_on 1 44 2000.0 1.0 0.0 -fr 03_wind_off 1 44 300.0 1.0 0.0 +fr 01_solar 1 44 2000.0 0.0 1.0 +fr 02_wind_on 1 44 2000.0 0.0 1.0 +fr 03_wind_off 1 44 300.0 0.0 1.0 fr 04_res 1 44 0.0 0.0 0.0 fr 05_nuclear 1 44 0.0 0.0 0.0 fr 06_coal 1 44 0.0 0.0 0.0 fr 07_gas 1 44 0.0 0.0 0.0 fr 08_non-res 1 44 0.0 0.0 0.0 fr 09_hydro_pump 1 44 0.0 0.0 0.0 -fr 01_solar 1 45 2000.0 1.0 0.0 -fr 02_wind_on 1 45 2000.0 1.0 0.0 -fr 03_wind_off 1 45 400.0 1.0 0.0 +fr 01_solar 1 45 2000.0 0.0 1.0 +fr 02_wind_on 1 45 2000.0 0.0 1.0 +fr 03_wind_off 1 45 400.0 0.0 1.0 fr 04_res 1 45 0.0 0.0 0.0 fr 05_nuclear 1 45 0.0 0.0 0.0 fr 06_coal 1 45 0.0 0.0 0.0 fr 07_gas 1 45 0.0 0.0 0.0 fr 08_non-res 1 45 0.0 0.0 0.0 fr 09_hydro_pump 1 45 0.0 0.0 0.0 -fr 01_solar 1 46 2000.0 1.0 0.0 -fr 02_wind_on 1 46 2000.0 1.0 0.0 -fr 03_wind_off 1 46 500.0 1.0 0.0 +fr 01_solar 1 46 2000.0 0.0 1.0 +fr 02_wind_on 1 46 2000.0 0.0 1.0 +fr 03_wind_off 1 46 500.0 0.0 1.0 fr 04_res 1 46 0.0 0.0 0.0 fr 05_nuclear 1 46 0.0 0.0 0.0 fr 06_coal 1 46 0.0 0.0 0.0 fr 07_gas 1 46 0.0 0.0 0.0 fr 08_non-res 1 46 0.0 0.0 0.0 fr 09_hydro_pump 1 46 0.0 0.0 0.0 -fr 01_solar 1 47 2000.0 1.0 0.0 -fr 02_wind_on 1 47 2000.0 1.0 0.0 -fr 03_wind_off 1 47 600.0 1.0 0.0 +fr 01_solar 1 47 2000.0 0.0 1.0 +fr 02_wind_on 1 47 2000.0 0.0 1.0 +fr 03_wind_off 1 47 600.0 0.0 1.0 fr 04_res 1 47 0.0 0.0 0.0 fr 05_nuclear 1 47 0.0 0.0 0.0 fr 06_coal 1 47 0.0 0.0 0.0 fr 07_gas 1 47 0.0 0.0 0.0 fr 08_non-res 1 47 0.0 0.0 0.0 fr 09_hydro_pump 1 47 0.0 0.0 0.0 -fr 01_solar 1 48 2000.0 1.0 0.0 -fr 02_wind_on 1 48 2000.0 1.0 0.0 -fr 03_wind_off 1 48 700.0 1.0 0.0 +fr 01_solar 1 48 2000.0 0.0 1.0 +fr 02_wind_on 1 48 2000.0 0.0 1.0 +fr 03_wind_off 1 48 700.0 0.0 1.0 fr 04_res 1 48 0.0 0.0 0.0 fr 05_nuclear 1 48 0.0 0.0 0.0 fr 06_coal 1 48 0.0 0.0 0.0 fr 07_gas 1 48 0.0 0.0 0.0 fr 08_non-res 1 48 0.0 0.0 0.0 fr 09_hydro_pump 1 48 0.0 0.0 0.0 -fr 01_solar 1 49 2000.0 1.0 0.0 -fr 02_wind_on 1 49 2000.0 1.0 0.0 -fr 03_wind_off 1 49 800.0 1.0 0.0 +fr 01_solar 1 49 2000.0 0.0 1.0 +fr 02_wind_on 1 49 2000.0 0.0 1.0 +fr 03_wind_off 1 49 800.0 0.0 1.0 fr 04_res 1 49 0.0 0.0 0.0 fr 05_nuclear 1 49 0.0 0.0 0.0 fr 06_coal 1 49 0.0 0.0 0.0 fr 07_gas 1 49 0.0 0.0 0.0 fr 08_non-res 1 49 0.0 0.0 0.0 fr 09_hydro_pump 1 49 0.0 0.0 0.0 -fr 01_solar 1 50 2000.0 1.0 0.0 -fr 02_wind_on 1 50 2000.0 1.0 0.0 -fr 03_wind_off 1 50 900.0 1.0 0.0 +fr 01_solar 1 50 2000.0 0.0 1.0 +fr 02_wind_on 1 50 2000.0 0.0 1.0 +fr 03_wind_off 1 50 900.0 0.0 1.0 fr 04_res 1 50 0.0 0.0 0.0 fr 05_nuclear 1 50 0.0 0.0 0.0 fr 06_coal 1 50 0.0 0.0 0.0 fr 07_gas 1 50 0.0 0.0 0.0 fr 08_non-res 1 50 0.0 0.0 0.0 fr 09_hydro_pump 1 50 0.0 0.0 0.0 -fr 01_solar 1 51 2000.0 1.0 0.0 -fr 02_wind_on 1 51 2000.0 1.0 0.0 -fr 03_wind_off 1 51 1000.0 1.0 0.0 +fr 01_solar 1 51 2000.0 0.0 1.0 +fr 02_wind_on 1 51 2000.0 0.0 1.0 +fr 03_wind_off 1 51 1000.0 0.0 1.0 fr 04_res 1 51 0.0 0.0 0.0 fr 05_nuclear 1 51 0.0 0.0 0.0 fr 06_coal 1 51 0.0 0.0 0.0 fr 07_gas 1 51 0.0 0.0 0.0 fr 08_non-res 1 51 0.0 0.0 0.0 fr 09_hydro_pump 1 51 0.0 0.0 0.0 -fr 01_solar 1 52 2000.0 1.0 0.0 -fr 02_wind_on 1 52 2000.0 1.0 0.0 -fr 03_wind_off 1 52 1100.0 1.0 0.0 +fr 01_solar 1 52 2000.0 0.0 1.0 +fr 02_wind_on 1 52 2000.0 0.0 1.0 +fr 03_wind_off 1 52 1100.0 0.0 1.0 fr 04_res 1 52 0.0 0.0 0.0 fr 05_nuclear 1 52 0.0 0.0 0.0 fr 06_coal 1 52 0.0 0.0 0.0 fr 07_gas 1 52 0.0 0.0 0.0 fr 08_non-res 1 52 0.0 0.0 0.0 fr 09_hydro_pump 1 52 0.0 0.0 0.0 -fr 01_solar 1 53 2000.0 1.0 0.0 -fr 02_wind_on 1 53 2000.0 1.0 0.0 -fr 03_wind_off 1 53 1200.0 1.0 0.0 +fr 01_solar 1 53 2000.0 0.0 1.0 +fr 02_wind_on 1 53 2000.0 0.0 1.0 +fr 03_wind_off 1 53 1200.0 0.0 1.0 fr 04_res 1 53 0.0 0.0 0.0 fr 05_nuclear 1 53 0.0 0.0 0.0 fr 06_coal 1 53 0.0 0.0 0.0 fr 07_gas 1 53 0.0 0.0 0.0 fr 08_non-res 1 53 0.0 0.0 0.0 fr 09_hydro_pump 1 53 0.0 0.0 0.0 -fr 01_solar 1 54 2000.0 1.0 0.0 -fr 02_wind_on 1 54 2000.0 1.0 0.0 -fr 03_wind_off 1 54 1300.0 1.0 0.0 +fr 01_solar 1 54 2000.0 0.0 1.0 +fr 02_wind_on 1 54 2000.0 0.0 1.0 +fr 03_wind_off 1 54 1300.0 0.0 1.0 fr 04_res 1 54 0.0 0.0 0.0 fr 05_nuclear 1 54 0.0 0.0 0.0 fr 06_coal 1 54 0.0 0.0 0.0 fr 07_gas 1 54 0.0 0.0 0.0 fr 08_non-res 1 54 0.0 0.0 0.0 fr 09_hydro_pump 1 54 0.0 0.0 0.0 -fr 01_solar 1 55 2000.0 1.0 0.0 -fr 02_wind_on 1 55 2000.0 1.0 0.0 -fr 03_wind_off 1 55 1400.0 1.0 0.0 +fr 01_solar 1 55 2000.0 0.0 1.0 +fr 02_wind_on 1 55 2000.0 0.0 1.0 +fr 03_wind_off 1 55 1400.0 0.0 1.0 fr 04_res 1 55 0.0 0.0 0.0 fr 05_nuclear 1 55 0.0 0.0 0.0 fr 06_coal 1 55 0.0 0.0 0.0 fr 07_gas 1 55 0.0 0.0 0.0 fr 08_non-res 1 55 0.0 0.0 0.0 fr 09_hydro_pump 1 55 0.0 0.0 0.0 -fr 01_solar 1 56 2000.0 1.0 0.0 -fr 02_wind_on 1 56 2000.0 1.0 0.0 -fr 03_wind_off 1 56 1500.0 1.0 0.0 +fr 01_solar 1 56 2000.0 0.0 1.0 +fr 02_wind_on 1 56 2000.0 0.0 1.0 +fr 03_wind_off 1 56 1500.0 0.0 1.0 fr 04_res 1 56 0.0 0.0 0.0 fr 05_nuclear 1 56 0.0 0.0 0.0 fr 06_coal 1 56 0.0 0.0 0.0 fr 07_gas 1 56 0.0 0.0 0.0 fr 08_non-res 1 56 0.0 0.0 0.0 fr 09_hydro_pump 1 56 0.0 0.0 0.0 -fr 01_solar 1 57 2000.0 1.0 0.0 -fr 02_wind_on 1 57 2000.0 1.0 0.0 -fr 03_wind_off 1 57 1600.0 1.0 0.0 +fr 01_solar 1 57 2000.0 0.0 1.0 +fr 02_wind_on 1 57 2000.0 0.0 1.0 +fr 03_wind_off 1 57 1600.0 0.0 1.0 fr 04_res 1 57 0.0 0.0 0.0 fr 05_nuclear 1 57 0.0 0.0 0.0 fr 06_coal 1 57 0.0 0.0 0.0 fr 07_gas 1 57 0.0 0.0 0.0 fr 08_non-res 1 57 0.0 0.0 0.0 fr 09_hydro_pump 1 57 0.0 0.0 0.0 -fr 01_solar 1 58 2000.0 1.0 0.0 -fr 02_wind_on 1 58 2000.0 1.0 0.0 -fr 03_wind_off 1 58 1700.0 1.0 0.0 +fr 01_solar 1 58 2000.0 0.0 1.0 +fr 02_wind_on 1 58 2000.0 0.0 1.0 +fr 03_wind_off 1 58 1700.0 0.0 1.0 fr 04_res 1 58 0.0 0.0 0.0 fr 05_nuclear 1 58 0.0 0.0 0.0 fr 06_coal 1 58 0.0 0.0 0.0 fr 07_gas 1 58 0.0 0.0 0.0 fr 08_non-res 1 58 0.0 0.0 0.0 fr 09_hydro_pump 1 58 0.0 0.0 0.0 -fr 01_solar 1 59 2000.0 1.0 0.0 -fr 02_wind_on 1 59 2000.0 1.0 0.0 -fr 03_wind_off 1 59 1800.0 1.0 0.0 +fr 01_solar 1 59 2000.0 0.0 1.0 +fr 02_wind_on 1 59 2000.0 0.0 1.0 +fr 03_wind_off 1 59 1800.0 0.0 1.0 fr 04_res 1 59 0.0 0.0 0.0 fr 05_nuclear 1 59 0.0 0.0 0.0 fr 06_coal 1 59 0.0 0.0 0.0 fr 07_gas 1 59 0.0 0.0 0.0 fr 08_non-res 1 59 0.0 0.0 0.0 fr 09_hydro_pump 1 59 0.0 0.0 0.0 -fr 01_solar 1 60 2000.0 1.0 0.0 -fr 02_wind_on 1 60 2000.0 1.0 0.0 -fr 03_wind_off 1 60 1900.0 1.0 0.0 +fr 01_solar 1 60 2000.0 0.0 1.0 +fr 02_wind_on 1 60 2000.0 0.0 1.0 +fr 03_wind_off 1 60 1900.0 0.0 1.0 fr 04_res 1 60 0.0 0.0 0.0 fr 05_nuclear 1 60 0.0 0.0 0.0 fr 06_coal 1 60 0.0 0.0 0.0 fr 07_gas 1 60 0.0 0.0 0.0 fr 08_non-res 1 60 0.0 0.0 0.0 fr 09_hydro_pump 1 60 0.0 0.0 0.0 -fr 01_solar 1 61 2000.0 1.0 0.0 -fr 02_wind_on 1 61 2000.0 1.0 0.0 -fr 03_wind_off 1 61 2000.0 1.0 0.0 +fr 01_solar 1 61 2000.0 0.0 1.0 +fr 02_wind_on 1 61 2000.0 0.0 1.0 +fr 03_wind_off 1 61 2000.0 0.0 1.0 fr 04_res 1 61 0.0 0.0 0.0 fr 05_nuclear 1 61 0.0 0.0 0.0 fr 06_coal 1 61 0.0 0.0 0.0 fr 07_gas 1 61 0.0 0.0 0.0 fr 08_non-res 1 61 0.0 0.0 0.0 fr 09_hydro_pump 1 61 0.0 0.0 0.0 -fr 01_solar 1 62 2000.0 1.0 0.0 -fr 02_wind_on 1 62 2000.0 1.0 0.0 -fr 03_wind_off 1 62 2000.0 1.0 0.0 -fr 04_res 1 62 100.0 1.0 0.0 +fr 01_solar 1 62 2000.0 0.0 1.0 +fr 02_wind_on 1 62 2000.0 0.0 1.0 +fr 03_wind_off 1 62 2000.0 0.0 1.0 +fr 04_res 1 62 100.0 0.0 1.0 fr 05_nuclear 1 62 0.0 0.0 0.0 fr 06_coal 1 62 0.0 0.0 0.0 fr 07_gas 1 62 0.0 0.0 0.0 fr 08_non-res 1 62 0.0 0.0 0.0 fr 09_hydro_pump 1 62 0.0 0.0 0.0 -fr 01_solar 1 63 2000.0 1.0 0.0 -fr 02_wind_on 1 63 2000.0 1.0 0.0 -fr 03_wind_off 1 63 2000.0 1.0 0.0 -fr 04_res 1 63 200.0 1.0 0.0 +fr 01_solar 1 63 2000.0 0.0 1.0 +fr 02_wind_on 1 63 2000.0 0.0 1.0 +fr 03_wind_off 1 63 2000.0 0.0 1.0 +fr 04_res 1 63 200.0 0.0 1.0 fr 05_nuclear 1 63 0.0 0.0 0.0 fr 06_coal 1 63 0.0 0.0 0.0 fr 07_gas 1 63 0.0 0.0 0.0 fr 08_non-res 1 63 0.0 0.0 0.0 fr 09_hydro_pump 1 63 0.0 0.0 0.0 -fr 01_solar 1 64 2000.0 1.0 0.0 -fr 02_wind_on 1 64 2000.0 1.0 0.0 -fr 03_wind_off 1 64 2000.0 1.0 0.0 -fr 04_res 1 64 300.0 1.0 0.0 +fr 01_solar 1 64 2000.0 0.0 1.0 +fr 02_wind_on 1 64 2000.0 0.0 1.0 +fr 03_wind_off 1 64 2000.0 0.0 1.0 +fr 04_res 1 64 300.0 0.0 1.0 fr 05_nuclear 1 64 0.0 0.0 0.0 fr 06_coal 1 64 0.0 0.0 0.0 fr 07_gas 1 64 0.0 0.0 0.0 fr 08_non-res 1 64 0.0 0.0 0.0 fr 09_hydro_pump 1 64 0.0 0.0 0.0 -fr 01_solar 1 65 2000.0 1.0 0.0 -fr 02_wind_on 1 65 2000.0 1.0 0.0 -fr 03_wind_off 1 65 2000.0 1.0 0.0 -fr 04_res 1 65 400.0 1.0 0.0 +fr 01_solar 1 65 2000.0 0.0 1.0 +fr 02_wind_on 1 65 2000.0 0.0 1.0 +fr 03_wind_off 1 65 2000.0 0.0 1.0 +fr 04_res 1 65 400.0 0.0 1.0 fr 05_nuclear 1 65 0.0 0.0 0.0 fr 06_coal 1 65 0.0 0.0 0.0 fr 07_gas 1 65 0.0 0.0 0.0 fr 08_non-res 1 65 0.0 0.0 0.0 fr 09_hydro_pump 1 65 0.0 0.0 0.0 -fr 01_solar 1 66 2000.0 1.0 0.0 -fr 02_wind_on 1 66 2000.0 1.0 0.0 -fr 03_wind_off 1 66 2000.0 1.0 0.0 -fr 04_res 1 66 500.0 1.0 0.0 +fr 01_solar 1 66 2000.0 0.0 1.0 +fr 02_wind_on 1 66 2000.0 0.0 1.0 +fr 03_wind_off 1 66 2000.0 0.0 1.0 +fr 04_res 1 66 500.0 0.0 1.0 fr 05_nuclear 1 66 0.0 0.0 0.0 fr 06_coal 1 66 0.0 0.0 0.0 fr 07_gas 1 66 0.0 0.0 0.0 fr 08_non-res 1 66 0.0 0.0 0.0 fr 09_hydro_pump 1 66 0.0 0.0 0.0 -fr 01_solar 1 67 2000.0 1.0 0.0 -fr 02_wind_on 1 67 2000.0 1.0 0.0 -fr 03_wind_off 1 67 2000.0 1.0 0.0 -fr 04_res 1 67 600.0 1.0 0.0 +fr 01_solar 1 67 2000.0 0.0 1.0 +fr 02_wind_on 1 67 2000.0 0.0 1.0 +fr 03_wind_off 1 67 2000.0 0.0 1.0 +fr 04_res 1 67 600.0 0.0 1.0 fr 05_nuclear 1 67 0.0 0.0 0.0 fr 06_coal 1 67 0.0 0.0 0.0 fr 07_gas 1 67 0.0 0.0 0.0 fr 08_non-res 1 67 0.0 0.0 0.0 fr 09_hydro_pump 1 67 0.0 0.0 0.0 -fr 01_solar 1 68 2000.0 1.0 0.0 -fr 02_wind_on 1 68 2000.0 1.0 0.0 -fr 03_wind_off 1 68 2000.0 1.0 0.0 -fr 04_res 1 68 700.0 1.0 0.0 +fr 01_solar 1 68 2000.0 0.0 1.0 +fr 02_wind_on 1 68 2000.0 0.0 1.0 +fr 03_wind_off 1 68 2000.0 0.0 1.0 +fr 04_res 1 68 700.0 0.0 1.0 fr 05_nuclear 1 68 0.0 0.0 0.0 fr 06_coal 1 68 0.0 0.0 0.0 fr 07_gas 1 68 0.0 0.0 0.0 fr 08_non-res 1 68 0.0 0.0 0.0 fr 09_hydro_pump 1 68 0.0 0.0 0.0 -fr 01_solar 1 69 2000.0 1.0 0.0 -fr 02_wind_on 1 69 2000.0 1.0 0.0 -fr 03_wind_off 1 69 2000.0 1.0 0.0 -fr 04_res 1 69 800.0 1.0 0.0 +fr 01_solar 1 69 2000.0 0.0 1.0 +fr 02_wind_on 1 69 2000.0 0.0 1.0 +fr 03_wind_off 1 69 2000.0 0.0 1.0 +fr 04_res 1 69 800.0 0.0 1.0 fr 05_nuclear 1 69 0.0 0.0 0.0 fr 06_coal 1 69 0.0 0.0 0.0 fr 07_gas 1 69 0.0 0.0 0.0 fr 08_non-res 1 69 0.0 0.0 0.0 fr 09_hydro_pump 1 69 0.0 0.0 0.0 -fr 01_solar 1 70 2000.0 1.0 0.0 -fr 02_wind_on 1 70 2000.0 1.0 0.0 -fr 03_wind_off 1 70 2000.0 1.0 0.0 -fr 04_res 1 70 900.0 1.0 0.0 +fr 01_solar 1 70 2000.0 0.0 1.0 +fr 02_wind_on 1 70 2000.0 0.0 1.0 +fr 03_wind_off 1 70 2000.0 0.0 1.0 +fr 04_res 1 70 900.0 0.0 1.0 fr 05_nuclear 1 70 0.0 0.0 0.0 fr 06_coal 1 70 0.0 0.0 0.0 fr 07_gas 1 70 0.0 0.0 0.0 fr 08_non-res 1 70 0.0 0.0 0.0 fr 09_hydro_pump 1 70 0.0 0.0 0.0 -fr 01_solar 1 71 2000.0 1.0 0.0 -fr 02_wind_on 1 71 2000.0 1.0 0.0 -fr 03_wind_off 1 71 2000.0 1.0 0.0 -fr 04_res 1 71 1000.0 1.0 0.0 +fr 01_solar 1 71 2000.0 0.0 1.0 +fr 02_wind_on 1 71 2000.0 0.0 1.0 +fr 03_wind_off 1 71 2000.0 0.0 1.0 +fr 04_res 1 71 1000.0 0.0 1.0 fr 05_nuclear 1 71 0.0 0.0 0.0 fr 06_coal 1 71 0.0 0.0 0.0 fr 07_gas 1 71 0.0 0.0 0.0 fr 08_non-res 1 71 0.0 0.0 0.0 fr 09_hydro_pump 1 71 0.0 0.0 0.0 -fr 01_solar 1 72 2000.0 1.0 0.0 -fr 02_wind_on 1 72 2000.0 1.0 0.0 -fr 03_wind_off 1 72 2000.0 1.0 0.0 -fr 04_res 1 72 1100.0 1.0 0.0 +fr 01_solar 1 72 2000.0 0.0 1.0 +fr 02_wind_on 1 72 2000.0 0.0 1.0 +fr 03_wind_off 1 72 2000.0 0.0 1.0 +fr 04_res 1 72 1100.0 0.0 1.0 fr 05_nuclear 1 72 0.0 0.0 0.0 fr 06_coal 1 72 0.0 0.0 0.0 fr 07_gas 1 72 0.0 0.0 0.0 fr 08_non-res 1 72 0.0 0.0 0.0 fr 09_hydro_pump 1 72 0.0 0.0 0.0 -fr 01_solar 1 73 2000.0 1.0 0.0 -fr 02_wind_on 1 73 2000.0 1.0 0.0 -fr 03_wind_off 1 73 2000.0 1.0 0.0 -fr 04_res 1 73 1200.0 1.0 0.0 +fr 01_solar 1 73 2000.0 0.0 1.0 +fr 02_wind_on 1 73 2000.0 0.0 1.0 +fr 03_wind_off 1 73 2000.0 0.0 1.0 +fr 04_res 1 73 1200.0 0.0 1.0 fr 05_nuclear 1 73 0.0 0.0 0.0 fr 06_coal 1 73 0.0 0.0 0.0 fr 07_gas 1 73 0.0 0.0 0.0 fr 08_non-res 1 73 0.0 0.0 0.0 fr 09_hydro_pump 1 73 0.0 0.0 0.0 -fr 01_solar 1 74 2000.0 1.0 0.0 -fr 02_wind_on 1 74 2000.0 1.0 0.0 -fr 03_wind_off 1 74 2000.0 1.0 0.0 -fr 04_res 1 74 1300.0 1.0 0.0 +fr 01_solar 1 74 2000.0 0.0 1.0 +fr 02_wind_on 1 74 2000.0 0.0 1.0 +fr 03_wind_off 1 74 2000.0 0.0 1.0 +fr 04_res 1 74 1300.0 0.0 1.0 fr 05_nuclear 1 74 0.0 0.0 0.0 fr 06_coal 1 74 0.0 0.0 0.0 fr 07_gas 1 74 0.0 0.0 0.0 fr 08_non-res 1 74 0.0 0.0 0.0 fr 09_hydro_pump 1 74 0.0 0.0 0.0 -fr 01_solar 1 75 2000.0 1.0 0.0 -fr 02_wind_on 1 75 2000.0 1.0 0.0 -fr 03_wind_off 1 75 2000.0 1.0 0.0 -fr 04_res 1 75 1400.0 1.0 0.0 +fr 01_solar 1 75 2000.0 0.0 1.0 +fr 02_wind_on 1 75 2000.0 0.0 1.0 +fr 03_wind_off 1 75 2000.0 0.0 1.0 +fr 04_res 1 75 1400.0 0.0 1.0 fr 05_nuclear 1 75 0.0 0.0 0.0 fr 06_coal 1 75 0.0 0.0 0.0 fr 07_gas 1 75 0.0 0.0 0.0 fr 08_non-res 1 75 0.0 0.0 0.0 fr 09_hydro_pump 1 75 0.0 0.0 0.0 -fr 01_solar 1 76 2000.0 1.0 0.0 -fr 02_wind_on 1 76 2000.0 1.0 0.0 -fr 03_wind_off 1 76 2000.0 1.0 0.0 -fr 04_res 1 76 1500.0 1.0 0.0 +fr 01_solar 1 76 2000.0 0.0 1.0 +fr 02_wind_on 1 76 2000.0 0.0 1.0 +fr 03_wind_off 1 76 2000.0 0.0 1.0 +fr 04_res 1 76 1500.0 0.0 1.0 fr 05_nuclear 1 76 0.0 0.0 0.0 fr 06_coal 1 76 0.0 0.0 0.0 fr 07_gas 1 76 0.0 0.0 0.0 fr 08_non-res 1 76 0.0 0.0 0.0 fr 09_hydro_pump 1 76 0.0 0.0 0.0 -fr 01_solar 1 77 2000.0 1.0 0.0 -fr 02_wind_on 1 77 2000.0 1.0 0.0 -fr 03_wind_off 1 77 2000.0 1.0 0.0 -fr 04_res 1 77 1600.0 1.0 0.0 +fr 01_solar 1 77 2000.0 0.0 1.0 +fr 02_wind_on 1 77 2000.0 0.0 1.0 +fr 03_wind_off 1 77 2000.0 0.0 1.0 +fr 04_res 1 77 1600.0 0.0 1.0 fr 05_nuclear 1 77 0.0 0.0 0.0 fr 06_coal 1 77 0.0 0.0 0.0 fr 07_gas 1 77 0.0 0.0 0.0 fr 08_non-res 1 77 0.0 0.0 0.0 fr 09_hydro_pump 1 77 0.0 0.0 0.0 -fr 01_solar 1 78 2000.0 1.0 0.0 -fr 02_wind_on 1 78 2000.0 1.0 0.0 -fr 03_wind_off 1 78 2000.0 1.0 0.0 -fr 04_res 1 78 1700.0 1.0 0.0 +fr 01_solar 1 78 2000.0 0.0 1.0 +fr 02_wind_on 1 78 2000.0 0.0 1.0 +fr 03_wind_off 1 78 2000.0 0.0 1.0 +fr 04_res 1 78 1700.0 0.0 1.0 fr 05_nuclear 1 78 0.0 0.0 0.0 fr 06_coal 1 78 0.0 0.0 0.0 fr 07_gas 1 78 0.0 0.0 0.0 fr 08_non-res 1 78 0.0 0.0 0.0 fr 09_hydro_pump 1 78 0.0 0.0 0.0 -fr 01_solar 1 79 2000.0 1.0 0.0 -fr 02_wind_on 1 79 2000.0 1.0 0.0 -fr 03_wind_off 1 79 2000.0 1.0 0.0 -fr 04_res 1 79 1800.0 1.0 0.0 +fr 01_solar 1 79 2000.0 0.0 1.0 +fr 02_wind_on 1 79 2000.0 0.0 1.0 +fr 03_wind_off 1 79 2000.0 0.0 1.0 +fr 04_res 1 79 1800.0 0.0 1.0 fr 05_nuclear 1 79 0.0 0.0 0.0 fr 06_coal 1 79 0.0 0.0 0.0 fr 07_gas 1 79 0.0 0.0 0.0 fr 08_non-res 1 79 0.0 0.0 0.0 fr 09_hydro_pump 1 79 0.0 0.0 0.0 -fr 01_solar 1 80 2000.0 1.0 0.0 -fr 02_wind_on 1 80 2000.0 1.0 0.0 -fr 03_wind_off 1 80 2000.0 1.0 0.0 -fr 04_res 1 80 1900.0 1.0 0.0 +fr 01_solar 1 80 2000.0 0.0 1.0 +fr 02_wind_on 1 80 2000.0 0.0 1.0 +fr 03_wind_off 1 80 2000.0 0.0 1.0 +fr 04_res 1 80 1900.0 0.0 1.0 fr 05_nuclear 1 80 0.0 0.0 0.0 fr 06_coal 1 80 0.0 0.0 0.0 fr 07_gas 1 80 0.0 0.0 0.0 fr 08_non-res 1 80 0.0 0.0 0.0 fr 09_hydro_pump 1 80 0.0 0.0 0.0 -fr 01_solar 1 81 2000.0 1.0 0.0 -fr 02_wind_on 1 81 2000.0 1.0 0.0 -fr 03_wind_off 1 81 2000.0 1.0 0.0 -fr 04_res 1 81 2000.0 1.0 0.0 +fr 01_solar 1 81 2000.0 0.0 1.0 +fr 02_wind_on 1 81 2000.0 0.0 1.0 +fr 03_wind_off 1 81 2000.0 0.0 1.0 +fr 04_res 1 81 2000.0 0.0 1.0 fr 05_nuclear 1 81 0.0 0.0 0.0 fr 06_coal 1 81 0.0 0.0 0.0 fr 07_gas 1 81 0.0 0.0 0.0 fr 08_non-res 1 81 0.0 0.0 0.0 fr 09_hydro_pump 1 81 0.0 0.0 0.0 -fr 01_solar 1 82 2000.0 1.0 0.0 -fr 02_wind_on 1 82 2000.0 1.0 0.0 -fr 03_wind_off 1 82 2000.0 1.0 0.0 -fr 04_res 1 82 2000.0 1.0 0.0 -fr 05_nuclear 1 82 100.0 1.0 0.0 +fr 01_solar 1 82 2000.0 0.0 1.0 +fr 02_wind_on 1 82 2000.0 0.0 1.0 +fr 03_wind_off 1 82 2000.0 0.0 1.0 +fr 04_res 1 82 2000.0 0.0 1.0 +fr 05_nuclear 1 82 100.0 0.0 1.0 fr 06_coal 1 82 0.0 0.0 0.0 fr 07_gas 1 82 0.0 0.0 0.0 fr 08_non-res 1 82 0.0 0.0 0.0 fr 09_hydro_pump 1 82 0.0 0.0 0.0 -fr 01_solar 1 83 2000.0 1.0 0.0 -fr 02_wind_on 1 83 2000.0 1.0 0.0 -fr 03_wind_off 1 83 2000.0 1.0 0.0 -fr 04_res 1 83 2000.0 1.0 0.0 -fr 05_nuclear 1 83 200.0 1.0 0.0 +fr 01_solar 1 83 2000.0 0.0 1.0 +fr 02_wind_on 1 83 2000.0 0.0 1.0 +fr 03_wind_off 1 83 2000.0 0.0 1.0 +fr 04_res 1 83 2000.0 0.0 1.0 +fr 05_nuclear 1 83 200.0 0.0 1.0 fr 06_coal 1 83 0.0 0.0 0.0 fr 07_gas 1 83 0.0 0.0 0.0 fr 08_non-res 1 83 0.0 0.0 0.0 fr 09_hydro_pump 1 83 0.0 0.0 0.0 -fr 01_solar 1 84 2000.0 1.0 0.0 -fr 02_wind_on 1 84 2000.0 1.0 0.0 -fr 03_wind_off 1 84 2000.0 1.0 0.0 -fr 04_res 1 84 2000.0 1.0 0.0 -fr 05_nuclear 1 84 300.0 1.0 0.0 +fr 01_solar 1 84 2000.0 0.0 1.0 +fr 02_wind_on 1 84 2000.0 0.0 1.0 +fr 03_wind_off 1 84 2000.0 0.0 1.0 +fr 04_res 1 84 2000.0 0.0 1.0 +fr 05_nuclear 1 84 300.0 0.0 1.0 fr 06_coal 1 84 0.0 0.0 0.0 fr 07_gas 1 84 0.0 0.0 0.0 fr 08_non-res 1 84 0.0 0.0 0.0 fr 09_hydro_pump 1 84 0.0 0.0 0.0 -fr 01_solar 1 85 2000.0 1.0 0.0 -fr 02_wind_on 1 85 2000.0 1.0 0.0 -fr 03_wind_off 1 85 2000.0 1.0 0.0 -fr 04_res 1 85 2000.0 1.0 0.0 -fr 05_nuclear 1 85 400.0 1.0 0.0 +fr 01_solar 1 85 2000.0 0.0 1.0 +fr 02_wind_on 1 85 2000.0 0.0 1.0 +fr 03_wind_off 1 85 2000.0 0.0 1.0 +fr 04_res 1 85 2000.0 0.0 1.0 +fr 05_nuclear 1 85 400.0 0.0 1.0 fr 06_coal 1 85 0.0 0.0 0.0 fr 07_gas 1 85 0.0 0.0 0.0 fr 08_non-res 1 85 0.0 0.0 0.0 fr 09_hydro_pump 1 85 0.0 0.0 0.0 -fr 01_solar 1 86 2000.0 1.0 0.0 -fr 02_wind_on 1 86 2000.0 1.0 0.0 -fr 03_wind_off 1 86 2000.0 1.0 0.0 -fr 04_res 1 86 2000.0 1.0 0.0 -fr 05_nuclear 1 86 500.0 1.0 0.0 +fr 01_solar 1 86 2000.0 0.0 1.0 +fr 02_wind_on 1 86 2000.0 0.0 1.0 +fr 03_wind_off 1 86 2000.0 0.0 1.0 +fr 04_res 1 86 2000.0 0.0 1.0 +fr 05_nuclear 1 86 500.0 0.0 1.0 fr 06_coal 1 86 0.0 0.0 0.0 fr 07_gas 1 86 0.0 0.0 0.0 fr 08_non-res 1 86 0.0 0.0 0.0 fr 09_hydro_pump 1 86 0.0 0.0 0.0 -fr 01_solar 1 87 2000.0 1.0 0.0 -fr 02_wind_on 1 87 2000.0 1.0 0.0 -fr 03_wind_off 1 87 2000.0 1.0 0.0 -fr 04_res 1 87 2000.0 1.0 0.0 -fr 05_nuclear 1 87 600.0 1.0 0.0 +fr 01_solar 1 87 2000.0 0.0 1.0 +fr 02_wind_on 1 87 2000.0 0.0 1.0 +fr 03_wind_off 1 87 2000.0 0.0 1.0 +fr 04_res 1 87 2000.0 0.0 1.0 +fr 05_nuclear 1 87 600.0 0.0 1.0 fr 06_coal 1 87 0.0 0.0 0.0 fr 07_gas 1 87 0.0 0.0 0.0 fr 08_non-res 1 87 0.0 0.0 0.0 fr 09_hydro_pump 1 87 0.0 0.0 0.0 -fr 01_solar 1 88 2000.0 1.0 0.0 -fr 02_wind_on 1 88 2000.0 1.0 0.0 -fr 03_wind_off 1 88 2000.0 1.0 0.0 -fr 04_res 1 88 2000.0 1.0 0.0 -fr 05_nuclear 1 88 700.0 1.0 0.0 +fr 01_solar 1 88 2000.0 0.0 1.0 +fr 02_wind_on 1 88 2000.0 0.0 1.0 +fr 03_wind_off 1 88 2000.0 0.0 1.0 +fr 04_res 1 88 2000.0 0.0 1.0 +fr 05_nuclear 1 88 700.0 0.0 1.0 fr 06_coal 1 88 0.0 0.0 0.0 fr 07_gas 1 88 0.0 0.0 0.0 fr 08_non-res 1 88 0.0 0.0 0.0 fr 09_hydro_pump 1 88 0.0 0.0 0.0 -fr 01_solar 1 89 2000.0 1.0 0.0 -fr 02_wind_on 1 89 2000.0 1.0 0.0 -fr 03_wind_off 1 89 2000.0 1.0 0.0 -fr 04_res 1 89 2000.0 1.0 0.0 -fr 05_nuclear 1 89 800.0 1.0 0.0 +fr 01_solar 1 89 2000.0 0.0 1.0 +fr 02_wind_on 1 89 2000.0 0.0 1.0 +fr 03_wind_off 1 89 2000.0 0.0 1.0 +fr 04_res 1 89 2000.0 0.0 1.0 +fr 05_nuclear 1 89 800.0 0.0 1.0 fr 06_coal 1 89 0.0 0.0 0.0 fr 07_gas 1 89 0.0 0.0 0.0 fr 08_non-res 1 89 0.0 0.0 0.0 fr 09_hydro_pump 1 89 0.0 0.0 0.0 -fr 01_solar 1 90 2000.0 1.0 0.0 -fr 02_wind_on 1 90 2000.0 1.0 0.0 -fr 03_wind_off 1 90 2000.0 1.0 0.0 -fr 04_res 1 90 2000.0 1.0 0.0 -fr 05_nuclear 1 90 900.0 1.0 0.0 +fr 01_solar 1 90 2000.0 0.0 1.0 +fr 02_wind_on 1 90 2000.0 0.0 1.0 +fr 03_wind_off 1 90 2000.0 0.0 1.0 +fr 04_res 1 90 2000.0 0.0 1.0 +fr 05_nuclear 1 90 900.0 0.0 1.0 fr 06_coal 1 90 0.0 0.0 0.0 fr 07_gas 1 90 0.0 0.0 0.0 fr 08_non-res 1 90 0.0 0.0 0.0 fr 09_hydro_pump 1 90 0.0 0.0 0.0 -fr 01_solar 1 91 2000.0 1.0 0.0 -fr 02_wind_on 1 91 2000.0 1.0 0.0 -fr 03_wind_off 1 91 2000.0 1.0 0.0 -fr 04_res 1 91 2000.0 1.0 0.0 -fr 05_nuclear 1 91 1000.0 1.0 0.0 +fr 01_solar 1 91 2000.0 0.0 1.0 +fr 02_wind_on 1 91 2000.0 0.0 1.0 +fr 03_wind_off 1 91 2000.0 0.0 1.0 +fr 04_res 1 91 2000.0 0.0 1.0 +fr 05_nuclear 1 91 1000.0 0.0 1.0 fr 06_coal 1 91 0.0 0.0 0.0 fr 07_gas 1 91 0.0 0.0 0.0 fr 08_non-res 1 91 0.0 0.0 0.0 fr 09_hydro_pump 1 91 0.0 0.0 0.0 -fr 01_solar 1 92 2000.0 1.0 0.0 -fr 02_wind_on 1 92 2000.0 1.0 0.0 -fr 03_wind_off 1 92 2000.0 1.0 0.0 -fr 04_res 1 92 2000.0 1.0 0.0 -fr 05_nuclear 1 92 1100.0 1.0 0.0 +fr 01_solar 1 92 2000.0 0.0 1.0 +fr 02_wind_on 1 92 2000.0 0.0 1.0 +fr 03_wind_off 1 92 2000.0 0.0 1.0 +fr 04_res 1 92 2000.0 0.0 1.0 +fr 05_nuclear 1 92 1100.0 0.0 1.0 fr 06_coal 1 92 0.0 0.0 0.0 fr 07_gas 1 92 0.0 0.0 0.0 fr 08_non-res 1 92 0.0 0.0 0.0 fr 09_hydro_pump 1 92 0.0 0.0 0.0 -fr 01_solar 1 93 2000.0 1.0 0.0 -fr 02_wind_on 1 93 2000.0 1.0 0.0 -fr 03_wind_off 1 93 2000.0 1.0 0.0 -fr 04_res 1 93 2000.0 1.0 0.0 -fr 05_nuclear 1 93 1200.0 1.0 0.0 +fr 01_solar 1 93 2000.0 0.0 1.0 +fr 02_wind_on 1 93 2000.0 0.0 1.0 +fr 03_wind_off 1 93 2000.0 0.0 1.0 +fr 04_res 1 93 2000.0 0.0 1.0 +fr 05_nuclear 1 93 1200.0 0.0 1.0 fr 06_coal 1 93 0.0 0.0 0.0 fr 07_gas 1 93 0.0 0.0 0.0 fr 08_non-res 1 93 0.0 0.0 0.0 fr 09_hydro_pump 1 93 0.0 0.0 0.0 -fr 01_solar 1 94 2000.0 1.0 0.0 -fr 02_wind_on 1 94 2000.0 1.0 0.0 -fr 03_wind_off 1 94 2000.0 1.0 0.0 -fr 04_res 1 94 2000.0 1.0 0.0 -fr 05_nuclear 1 94 1300.0 1.0 0.0 +fr 01_solar 1 94 2000.0 0.0 1.0 +fr 02_wind_on 1 94 2000.0 0.0 1.0 +fr 03_wind_off 1 94 2000.0 0.0 1.0 +fr 04_res 1 94 2000.0 0.0 1.0 +fr 05_nuclear 1 94 1300.0 0.0 1.0 fr 06_coal 1 94 0.0 0.0 0.0 fr 07_gas 1 94 0.0 0.0 0.0 fr 08_non-res 1 94 0.0 0.0 0.0 fr 09_hydro_pump 1 94 0.0 0.0 0.0 -fr 01_solar 1 95 2000.0 1.0 0.0 -fr 02_wind_on 1 95 2000.0 1.0 0.0 -fr 03_wind_off 1 95 2000.0 1.0 0.0 -fr 04_res 1 95 2000.0 1.0 0.0 -fr 05_nuclear 1 95 1400.0 1.0 0.0 +fr 01_solar 1 95 2000.0 0.0 1.0 +fr 02_wind_on 1 95 2000.0 0.0 1.0 +fr 03_wind_off 1 95 2000.0 0.0 1.0 +fr 04_res 1 95 2000.0 0.0 1.0 +fr 05_nuclear 1 95 1400.0 0.0 1.0 fr 06_coal 1 95 0.0 0.0 0.0 fr 07_gas 1 95 0.0 0.0 0.0 fr 08_non-res 1 95 0.0 0.0 0.0 fr 09_hydro_pump 1 95 0.0 0.0 0.0 -fr 01_solar 1 96 2000.0 1.0 0.0 -fr 02_wind_on 1 96 2000.0 1.0 0.0 -fr 03_wind_off 1 96 2000.0 1.0 0.0 -fr 04_res 1 96 2000.0 1.0 0.0 -fr 05_nuclear 1 96 1500.0 1.0 0.0 +fr 01_solar 1 96 2000.0 0.0 1.0 +fr 02_wind_on 1 96 2000.0 0.0 1.0 +fr 03_wind_off 1 96 2000.0 0.0 1.0 +fr 04_res 1 96 2000.0 0.0 1.0 +fr 05_nuclear 1 96 1500.0 0.0 1.0 fr 06_coal 1 96 0.0 0.0 0.0 fr 07_gas 1 96 0.0 0.0 0.0 fr 08_non-res 1 96 0.0 0.0 0.0 fr 09_hydro_pump 1 96 0.0 0.0 0.0 -fr 01_solar 1 97 2000.0 1.0 0.0 -fr 02_wind_on 1 97 2000.0 1.0 0.0 -fr 03_wind_off 1 97 2000.0 1.0 0.0 -fr 04_res 1 97 2000.0 1.0 0.0 -fr 05_nuclear 1 97 1600.0 1.0 0.0 +fr 01_solar 1 97 2000.0 0.0 1.0 +fr 02_wind_on 1 97 2000.0 0.0 1.0 +fr 03_wind_off 1 97 2000.0 0.0 1.0 +fr 04_res 1 97 2000.0 0.0 1.0 +fr 05_nuclear 1 97 1600.0 0.0 1.0 fr 06_coal 1 97 0.0 0.0 0.0 fr 07_gas 1 97 0.0 0.0 0.0 fr 08_non-res 1 97 0.0 0.0 0.0 fr 09_hydro_pump 1 97 0.0 0.0 0.0 -fr 01_solar 1 98 2000.0 1.0 0.0 -fr 02_wind_on 1 98 2000.0 1.0 0.0 -fr 03_wind_off 1 98 2000.0 1.0 0.0 -fr 04_res 1 98 2000.0 1.0 0.0 -fr 05_nuclear 1 98 1700.0 1.0 0.0 +fr 01_solar 1 98 2000.0 0.0 1.0 +fr 02_wind_on 1 98 2000.0 0.0 1.0 +fr 03_wind_off 1 98 2000.0 0.0 1.0 +fr 04_res 1 98 2000.0 0.0 1.0 +fr 05_nuclear 1 98 1700.0 0.0 1.0 fr 06_coal 1 98 0.0 0.0 0.0 fr 07_gas 1 98 0.0 0.0 0.0 fr 08_non-res 1 98 0.0 0.0 0.0 fr 09_hydro_pump 1 98 0.0 0.0 0.0 -fr 01_solar 1 99 2000.0 1.0 0.0 -fr 02_wind_on 1 99 2000.0 1.0 0.0 -fr 03_wind_off 1 99 2000.0 1.0 0.0 -fr 04_res 1 99 2000.0 1.0 0.0 -fr 05_nuclear 1 99 1800.0 1.0 0.0 +fr 01_solar 1 99 2000.0 0.0 1.0 +fr 02_wind_on 1 99 2000.0 0.0 1.0 +fr 03_wind_off 1 99 2000.0 0.0 1.0 +fr 04_res 1 99 2000.0 0.0 1.0 +fr 05_nuclear 1 99 1800.0 0.0 1.0 fr 06_coal 1 99 0.0 0.0 0.0 fr 07_gas 1 99 0.0 0.0 0.0 fr 08_non-res 1 99 0.0 0.0 0.0 fr 09_hydro_pump 1 99 0.0 0.0 0.0 -fr 01_solar 1 100 2000.0 1.0 0.0 -fr 02_wind_on 1 100 2000.0 1.0 0.0 -fr 03_wind_off 1 100 2000.0 1.0 0.0 -fr 04_res 1 100 2000.0 1.0 0.0 -fr 05_nuclear 1 100 1900.0 1.0 0.0 +fr 01_solar 1 100 2000.0 0.0 1.0 +fr 02_wind_on 1 100 2000.0 0.0 1.0 +fr 03_wind_off 1 100 2000.0 0.0 1.0 +fr 04_res 1 100 2000.0 0.0 1.0 +fr 05_nuclear 1 100 1900.0 0.0 1.0 fr 06_coal 1 100 0.0 0.0 0.0 fr 07_gas 1 100 0.0 0.0 0.0 fr 08_non-res 1 100 0.0 0.0 0.0 fr 09_hydro_pump 1 100 0.0 0.0 0.0 -fr 01_solar 1 101 2000.0 1.0 0.0 -fr 02_wind_on 1 101 2000.0 1.0 0.0 -fr 03_wind_off 1 101 2000.0 1.0 0.0 -fr 04_res 1 101 2000.0 1.0 0.0 -fr 05_nuclear 1 101 2000.0 1.0 0.0 +fr 01_solar 1 101 2000.0 0.0 1.0 +fr 02_wind_on 1 101 2000.0 0.0 1.0 +fr 03_wind_off 1 101 2000.0 0.0 1.0 +fr 04_res 1 101 2000.0 0.0 1.0 +fr 05_nuclear 1 101 2000.0 0.0 1.0 fr 06_coal 1 101 0.0 0.0 0.0 fr 07_gas 1 101 0.0 0.0 0.0 fr 08_non-res 1 101 0.0 0.0 0.0 fr 09_hydro_pump 1 101 0.0 0.0 0.0 -fr 01_solar 1 102 2000.0 1.0 0.0 -fr 02_wind_on 1 102 2000.0 1.0 0.0 -fr 03_wind_off 1 102 2000.0 1.0 0.0 -fr 04_res 1 102 2000.0 1.0 0.0 -fr 05_nuclear 1 102 2000.0 1.0 0.0 -fr 06_coal 1 102 100.0 1.0 0.0 +fr 01_solar 1 102 2000.0 0.0 1.0 +fr 02_wind_on 1 102 2000.0 0.0 1.0 +fr 03_wind_off 1 102 2000.0 0.0 1.0 +fr 04_res 1 102 2000.0 0.0 1.0 +fr 05_nuclear 1 102 2000.0 0.0 1.0 +fr 06_coal 1 102 100.0 0.0 1.0 fr 07_gas 1 102 0.0 0.0 0.0 fr 08_non-res 1 102 0.0 0.0 0.0 fr 09_hydro_pump 1 102 0.0 0.0 0.0 -fr 01_solar 1 103 2000.0 1.0 0.0 -fr 02_wind_on 1 103 2000.0 1.0 0.0 -fr 03_wind_off 1 103 2000.0 1.0 0.0 -fr 04_res 1 103 2000.0 1.0 0.0 -fr 05_nuclear 1 103 2000.0 1.0 0.0 -fr 06_coal 1 103 200.0 1.0 0.0 +fr 01_solar 1 103 2000.0 0.0 1.0 +fr 02_wind_on 1 103 2000.0 0.0 1.0 +fr 03_wind_off 1 103 2000.0 0.0 1.0 +fr 04_res 1 103 2000.0 0.0 1.0 +fr 05_nuclear 1 103 2000.0 0.0 1.0 +fr 06_coal 1 103 200.0 0.0 1.0 fr 07_gas 1 103 0.0 0.0 0.0 fr 08_non-res 1 103 0.0 0.0 0.0 fr 09_hydro_pump 1 103 0.0 0.0 0.0 -fr 01_solar 1 104 2000.0 1.0 0.0 -fr 02_wind_on 1 104 2000.0 1.0 0.0 -fr 03_wind_off 1 104 2000.0 1.0 0.0 -fr 04_res 1 104 2000.0 1.0 0.0 -fr 05_nuclear 1 104 2000.0 1.0 0.0 -fr 06_coal 1 104 300.0 1.0 0.0 +fr 01_solar 1 104 2000.0 0.0 1.0 +fr 02_wind_on 1 104 2000.0 0.0 1.0 +fr 03_wind_off 1 104 2000.0 0.0 1.0 +fr 04_res 1 104 2000.0 0.0 1.0 +fr 05_nuclear 1 104 2000.0 0.0 1.0 +fr 06_coal 1 104 300.0 0.0 1.0 fr 07_gas 1 104 0.0 0.0 0.0 fr 08_non-res 1 104 0.0 0.0 0.0 fr 09_hydro_pump 1 104 0.0 0.0 0.0 -fr 01_solar 1 105 2000.0 1.0 0.0 -fr 02_wind_on 1 105 2000.0 1.0 0.0 -fr 03_wind_off 1 105 2000.0 1.0 0.0 -fr 04_res 1 105 2000.0 1.0 0.0 -fr 05_nuclear 1 105 2000.0 1.0 0.0 -fr 06_coal 1 105 400.0 1.0 0.0 +fr 01_solar 1 105 2000.0 0.0 1.0 +fr 02_wind_on 1 105 2000.0 0.0 1.0 +fr 03_wind_off 1 105 2000.0 0.0 1.0 +fr 04_res 1 105 2000.0 0.0 1.0 +fr 05_nuclear 1 105 2000.0 0.0 1.0 +fr 06_coal 1 105 400.0 0.0 1.0 fr 07_gas 1 105 0.0 0.0 0.0 fr 08_non-res 1 105 0.0 0.0 0.0 fr 09_hydro_pump 1 105 0.0 0.0 0.0 -fr 01_solar 1 106 2000.0 1.0 0.0 -fr 02_wind_on 1 106 2000.0 1.0 0.0 -fr 03_wind_off 1 106 2000.0 1.0 0.0 -fr 04_res 1 106 2000.0 1.0 0.0 -fr 05_nuclear 1 106 2000.0 1.0 0.0 -fr 06_coal 1 106 500.0 1.0 0.0 +fr 01_solar 1 106 2000.0 0.0 1.0 +fr 02_wind_on 1 106 2000.0 0.0 1.0 +fr 03_wind_off 1 106 2000.0 0.0 1.0 +fr 04_res 1 106 2000.0 0.0 1.0 +fr 05_nuclear 1 106 2000.0 0.0 1.0 +fr 06_coal 1 106 500.0 0.0 1.0 fr 07_gas 1 106 0.0 0.0 0.0 fr 08_non-res 1 106 0.0 0.0 0.0 fr 09_hydro_pump 1 106 0.0 0.0 0.0 -fr 01_solar 1 107 2000.0 1.0 0.0 -fr 02_wind_on 1 107 2000.0 1.0 0.0 -fr 03_wind_off 1 107 2000.0 1.0 0.0 -fr 04_res 1 107 2000.0 1.0 0.0 -fr 05_nuclear 1 107 2000.0 1.0 0.0 -fr 06_coal 1 107 600.0 1.0 0.0 +fr 01_solar 1 107 2000.0 0.0 1.0 +fr 02_wind_on 1 107 2000.0 0.0 1.0 +fr 03_wind_off 1 107 2000.0 0.0 1.0 +fr 04_res 1 107 2000.0 0.0 1.0 +fr 05_nuclear 1 107 2000.0 0.0 1.0 +fr 06_coal 1 107 600.0 0.0 1.0 fr 07_gas 1 107 0.0 0.0 0.0 fr 08_non-res 1 107 0.0 0.0 0.0 fr 09_hydro_pump 1 107 0.0 0.0 0.0 -fr 01_solar 1 108 2000.0 1.0 0.0 -fr 02_wind_on 1 108 2000.0 1.0 0.0 -fr 03_wind_off 1 108 2000.0 1.0 0.0 -fr 04_res 1 108 2000.0 1.0 0.0 -fr 05_nuclear 1 108 2000.0 1.0 0.0 -fr 06_coal 1 108 700.0 1.0 0.0 +fr 01_solar 1 108 2000.0 0.0 1.0 +fr 02_wind_on 1 108 2000.0 0.0 1.0 +fr 03_wind_off 1 108 2000.0 0.0 1.0 +fr 04_res 1 108 2000.0 0.0 1.0 +fr 05_nuclear 1 108 2000.0 0.0 1.0 +fr 06_coal 1 108 700.0 0.0 1.0 fr 07_gas 1 108 0.0 0.0 0.0 fr 08_non-res 1 108 0.0 0.0 0.0 fr 09_hydro_pump 1 108 0.0 0.0 0.0 -fr 01_solar 1 109 2000.0 1.0 0.0 -fr 02_wind_on 1 109 2000.0 1.0 0.0 -fr 03_wind_off 1 109 2000.0 1.0 0.0 -fr 04_res 1 109 2000.0 1.0 0.0 -fr 05_nuclear 1 109 2000.0 1.0 0.0 -fr 06_coal 1 109 800.0 1.0 0.0 +fr 01_solar 1 109 2000.0 0.0 1.0 +fr 02_wind_on 1 109 2000.0 0.0 1.0 +fr 03_wind_off 1 109 2000.0 0.0 1.0 +fr 04_res 1 109 2000.0 0.0 1.0 +fr 05_nuclear 1 109 2000.0 0.0 1.0 +fr 06_coal 1 109 800.0 0.0 1.0 fr 07_gas 1 109 0.0 0.0 0.0 fr 08_non-res 1 109 0.0 0.0 0.0 fr 09_hydro_pump 1 109 0.0 0.0 0.0 -fr 01_solar 1 110 2000.0 1.0 0.0 -fr 02_wind_on 1 110 2000.0 1.0 0.0 -fr 03_wind_off 1 110 2000.0 1.0 0.0 -fr 04_res 1 110 2000.0 1.0 0.0 -fr 05_nuclear 1 110 2000.0 1.0 0.0 -fr 06_coal 1 110 900.0 1.0 0.0 +fr 01_solar 1 110 2000.0 0.0 1.0 +fr 02_wind_on 1 110 2000.0 0.0 1.0 +fr 03_wind_off 1 110 2000.0 0.0 1.0 +fr 04_res 1 110 2000.0 0.0 1.0 +fr 05_nuclear 1 110 2000.0 0.0 1.0 +fr 06_coal 1 110 900.0 0.0 1.0 fr 07_gas 1 110 0.0 0.0 0.0 fr 08_non-res 1 110 0.0 0.0 0.0 fr 09_hydro_pump 1 110 0.0 0.0 0.0 -fr 01_solar 1 111 2000.0 1.0 0.0 -fr 02_wind_on 1 111 2000.0 1.0 0.0 -fr 03_wind_off 1 111 2000.0 1.0 0.0 -fr 04_res 1 111 2000.0 1.0 0.0 -fr 05_nuclear 1 111 2000.0 1.0 0.0 -fr 06_coal 1 111 1000.0 1.0 0.0 +fr 01_solar 1 111 2000.0 0.0 1.0 +fr 02_wind_on 1 111 2000.0 0.0 1.0 +fr 03_wind_off 1 111 2000.0 0.0 1.0 +fr 04_res 1 111 2000.0 0.0 1.0 +fr 05_nuclear 1 111 2000.0 0.0 1.0 +fr 06_coal 1 111 1000.0 0.0 1.0 fr 07_gas 1 111 0.0 0.0 0.0 fr 08_non-res 1 111 0.0 0.0 0.0 fr 09_hydro_pump 1 111 0.0 0.0 0.0 -fr 01_solar 1 112 2000.0 1.0 0.0 -fr 02_wind_on 1 112 2000.0 1.0 0.0 -fr 03_wind_off 1 112 2000.0 1.0 0.0 -fr 04_res 1 112 2000.0 1.0 0.0 -fr 05_nuclear 1 112 2000.0 1.0 0.0 -fr 06_coal 1 112 1100.0 1.0 0.0 +fr 01_solar 1 112 2000.0 0.0 1.0 +fr 02_wind_on 1 112 2000.0 0.0 1.0 +fr 03_wind_off 1 112 2000.0 0.0 1.0 +fr 04_res 1 112 2000.0 0.0 1.0 +fr 05_nuclear 1 112 2000.0 0.0 1.0 +fr 06_coal 1 112 1100.0 0.0 1.0 fr 07_gas 1 112 0.0 0.0 0.0 fr 08_non-res 1 112 0.0 0.0 0.0 fr 09_hydro_pump 1 112 0.0 0.0 0.0 -fr 01_solar 1 113 2000.0 1.0 0.0 -fr 02_wind_on 1 113 2000.0 1.0 0.0 -fr 03_wind_off 1 113 2000.0 1.0 0.0 -fr 04_res 1 113 2000.0 1.0 0.0 -fr 05_nuclear 1 113 2000.0 1.0 0.0 -fr 06_coal 1 113 1200.0 1.0 0.0 +fr 01_solar 1 113 2000.0 0.0 1.0 +fr 02_wind_on 1 113 2000.0 0.0 1.0 +fr 03_wind_off 1 113 2000.0 0.0 1.0 +fr 04_res 1 113 2000.0 0.0 1.0 +fr 05_nuclear 1 113 2000.0 0.0 1.0 +fr 06_coal 1 113 1200.0 0.0 1.0 fr 07_gas 1 113 0.0 0.0 0.0 fr 08_non-res 1 113 0.0 0.0 0.0 fr 09_hydro_pump 1 113 0.0 0.0 0.0 -fr 01_solar 1 114 2000.0 1.0 0.0 -fr 02_wind_on 1 114 2000.0 1.0 0.0 -fr 03_wind_off 1 114 2000.0 1.0 0.0 -fr 04_res 1 114 2000.0 1.0 0.0 -fr 05_nuclear 1 114 2000.0 1.0 0.0 -fr 06_coal 1 114 1300.0 1.0 0.0 +fr 01_solar 1 114 2000.0 0.0 1.0 +fr 02_wind_on 1 114 2000.0 0.0 1.0 +fr 03_wind_off 1 114 2000.0 0.0 1.0 +fr 04_res 1 114 2000.0 0.0 1.0 +fr 05_nuclear 1 114 2000.0 0.0 1.0 +fr 06_coal 1 114 1300.0 0.0 1.0 fr 07_gas 1 114 0.0 0.0 0.0 fr 08_non-res 1 114 0.0 0.0 0.0 fr 09_hydro_pump 1 114 0.0 0.0 0.0 -fr 01_solar 1 115 2000.0 1.0 0.0 -fr 02_wind_on 1 115 2000.0 1.0 0.0 -fr 03_wind_off 1 115 2000.0 1.0 0.0 -fr 04_res 1 115 2000.0 1.0 0.0 -fr 05_nuclear 1 115 2000.0 1.0 0.0 -fr 06_coal 1 115 1400.0 1.0 0.0 +fr 01_solar 1 115 2000.0 0.0 1.0 +fr 02_wind_on 1 115 2000.0 0.0 1.0 +fr 03_wind_off 1 115 2000.0 0.0 1.0 +fr 04_res 1 115 2000.0 0.0 1.0 +fr 05_nuclear 1 115 2000.0 0.0 1.0 +fr 06_coal 1 115 1400.0 0.0 1.0 fr 07_gas 1 115 0.0 0.0 0.0 fr 08_non-res 1 115 0.0 0.0 0.0 fr 09_hydro_pump 1 115 0.0 0.0 0.0 -fr 01_solar 1 116 2000.0 1.0 0.0 -fr 02_wind_on 1 116 2000.0 1.0 0.0 -fr 03_wind_off 1 116 2000.0 1.0 0.0 -fr 04_res 1 116 2000.0 1.0 0.0 -fr 05_nuclear 1 116 2000.0 1.0 0.0 -fr 06_coal 1 116 1500.0 1.0 0.0 +fr 01_solar 1 116 2000.0 0.0 1.0 +fr 02_wind_on 1 116 2000.0 0.0 1.0 +fr 03_wind_off 1 116 2000.0 0.0 1.0 +fr 04_res 1 116 2000.0 0.0 1.0 +fr 05_nuclear 1 116 2000.0 0.0 1.0 +fr 06_coal 1 116 1500.0 0.0 1.0 fr 07_gas 1 116 0.0 0.0 0.0 fr 08_non-res 1 116 0.0 0.0 0.0 fr 09_hydro_pump 1 116 0.0 0.0 0.0 -fr 01_solar 1 117 2000.0 1.0 0.0 -fr 02_wind_on 1 117 2000.0 1.0 0.0 -fr 03_wind_off 1 117 2000.0 1.0 0.0 -fr 04_res 1 117 2000.0 1.0 0.0 -fr 05_nuclear 1 117 2000.0 1.0 0.0 -fr 06_coal 1 117 1600.0 1.0 0.0 +fr 01_solar 1 117 2000.0 0.0 1.0 +fr 02_wind_on 1 117 2000.0 0.0 1.0 +fr 03_wind_off 1 117 2000.0 0.0 1.0 +fr 04_res 1 117 2000.0 0.0 1.0 +fr 05_nuclear 1 117 2000.0 0.0 1.0 +fr 06_coal 1 117 1600.0 0.0 1.0 fr 07_gas 1 117 0.0 0.0 0.0 fr 08_non-res 1 117 0.0 0.0 0.0 fr 09_hydro_pump 1 117 0.0 0.0 0.0 -fr 01_solar 1 118 2000.0 1.0 0.0 -fr 02_wind_on 1 118 2000.0 1.0 0.0 -fr 03_wind_off 1 118 2000.0 1.0 0.0 -fr 04_res 1 118 2000.0 1.0 0.0 -fr 05_nuclear 1 118 2000.0 1.0 0.0 -fr 06_coal 1 118 1700.0 1.0 0.0 +fr 01_solar 1 118 2000.0 0.0 1.0 +fr 02_wind_on 1 118 2000.0 0.0 1.0 +fr 03_wind_off 1 118 2000.0 0.0 1.0 +fr 04_res 1 118 2000.0 0.0 1.0 +fr 05_nuclear 1 118 2000.0 0.0 1.0 +fr 06_coal 1 118 1700.0 0.0 1.0 fr 07_gas 1 118 0.0 0.0 0.0 fr 08_non-res 1 118 0.0 0.0 0.0 fr 09_hydro_pump 1 118 0.0 0.0 0.0 -fr 01_solar 1 119 2000.0 1.0 0.0 -fr 02_wind_on 1 119 2000.0 1.0 0.0 -fr 03_wind_off 1 119 2000.0 1.0 0.0 -fr 04_res 1 119 2000.0 1.0 0.0 -fr 05_nuclear 1 119 2000.0 1.0 0.0 -fr 06_coal 1 119 1800.0 1.0 0.0 +fr 01_solar 1 119 2000.0 0.0 1.0 +fr 02_wind_on 1 119 2000.0 0.0 1.0 +fr 03_wind_off 1 119 2000.0 0.0 1.0 +fr 04_res 1 119 2000.0 0.0 1.0 +fr 05_nuclear 1 119 2000.0 0.0 1.0 +fr 06_coal 1 119 1800.0 0.0 1.0 fr 07_gas 1 119 0.0 0.0 0.0 fr 08_non-res 1 119 0.0 0.0 0.0 fr 09_hydro_pump 1 119 0.0 0.0 0.0 -fr 01_solar 1 120 2000.0 1.0 0.0 -fr 02_wind_on 1 120 2000.0 1.0 0.0 -fr 03_wind_off 1 120 2000.0 1.0 0.0 -fr 04_res 1 120 2000.0 1.0 0.0 -fr 05_nuclear 1 120 2000.0 1.0 0.0 -fr 06_coal 1 120 1900.0 1.0 0.0 +fr 01_solar 1 120 2000.0 0.0 1.0 +fr 02_wind_on 1 120 2000.0 0.0 1.0 +fr 03_wind_off 1 120 2000.0 0.0 1.0 +fr 04_res 1 120 2000.0 0.0 1.0 +fr 05_nuclear 1 120 2000.0 0.0 1.0 +fr 06_coal 1 120 1900.0 0.0 1.0 fr 07_gas 1 120 0.0 0.0 0.0 fr 08_non-res 1 120 0.0 0.0 0.0 fr 09_hydro_pump 1 120 0.0 0.0 0.0 -fr 01_solar 1 121 2000.0 1.0 0.0 -fr 02_wind_on 1 121 2000.0 1.0 0.0 -fr 03_wind_off 1 121 2000.0 1.0 0.0 -fr 04_res 1 121 2000.0 1.0 0.0 -fr 05_nuclear 1 121 2000.0 1.0 0.0 -fr 06_coal 1 121 2000.0 1.0 0.0 +fr 01_solar 1 121 2000.0 0.0 1.0 +fr 02_wind_on 1 121 2000.0 0.0 1.0 +fr 03_wind_off 1 121 2000.0 0.0 1.0 +fr 04_res 1 121 2000.0 0.0 1.0 +fr 05_nuclear 1 121 2000.0 0.0 1.0 +fr 06_coal 1 121 2000.0 0.0 1.0 fr 07_gas 1 121 0.0 0.0 0.0 fr 08_non-res 1 121 0.0 0.0 0.0 fr 09_hydro_pump 1 121 0.0 0.0 0.0 -fr 01_solar 1 122 2000.0 1.0 0.0 -fr 02_wind_on 1 122 2000.0 1.0 0.0 -fr 03_wind_off 1 122 2000.0 1.0 0.0 -fr 04_res 1 122 2000.0 1.0 0.0 -fr 05_nuclear 1 122 2000.0 1.0 0.0 -fr 06_coal 1 122 2000.0 1.0 0.0 -fr 07_gas 1 122 100.0 1.0 0.0 +fr 01_solar 1 122 2000.0 0.0 1.0 +fr 02_wind_on 1 122 2000.0 0.0 1.0 +fr 03_wind_off 1 122 2000.0 0.0 1.0 +fr 04_res 1 122 2000.0 0.0 1.0 +fr 05_nuclear 1 122 2000.0 0.0 1.0 +fr 06_coal 1 122 2000.0 0.0 1.0 +fr 07_gas 1 122 100.0 0.0 1.0 fr 08_non-res 1 122 0.0 0.0 0.0 fr 09_hydro_pump 1 122 0.0 0.0 0.0 -fr 01_solar 1 123 2000.0 1.0 0.0 -fr 02_wind_on 1 123 2000.0 1.0 0.0 -fr 03_wind_off 1 123 2000.0 1.0 0.0 -fr 04_res 1 123 2000.0 1.0 0.0 -fr 05_nuclear 1 123 2000.0 1.0 0.0 -fr 06_coal 1 123 2000.0 1.0 0.0 -fr 07_gas 1 123 200.0 1.0 0.0 +fr 01_solar 1 123 2000.0 0.0 1.0 +fr 02_wind_on 1 123 2000.0 0.0 1.0 +fr 03_wind_off 1 123 2000.0 0.0 1.0 +fr 04_res 1 123 2000.0 0.0 1.0 +fr 05_nuclear 1 123 2000.0 0.0 1.0 +fr 06_coal 1 123 2000.0 0.0 1.0 +fr 07_gas 1 123 200.0 0.0 1.0 fr 08_non-res 1 123 0.0 0.0 0.0 fr 09_hydro_pump 1 123 0.0 0.0 0.0 -fr 01_solar 1 124 2000.0 1.0 0.0 -fr 02_wind_on 1 124 2000.0 1.0 0.0 -fr 03_wind_off 1 124 2000.0 1.0 0.0 -fr 04_res 1 124 2000.0 1.0 0.0 -fr 05_nuclear 1 124 2000.0 1.0 0.0 -fr 06_coal 1 124 2000.0 1.0 0.0 -fr 07_gas 1 124 300.0 1.0 0.0 +fr 01_solar 1 124 2000.0 0.0 1.0 +fr 02_wind_on 1 124 2000.0 0.0 1.0 +fr 03_wind_off 1 124 2000.0 0.0 1.0 +fr 04_res 1 124 2000.0 0.0 1.0 +fr 05_nuclear 1 124 2000.0 0.0 1.0 +fr 06_coal 1 124 2000.0 0.0 1.0 +fr 07_gas 1 124 300.0 0.0 1.0 fr 08_non-res 1 124 0.0 0.0 0.0 fr 09_hydro_pump 1 124 0.0 0.0 0.0 -fr 01_solar 1 125 2000.0 1.0 0.0 -fr 02_wind_on 1 125 2000.0 1.0 0.0 -fr 03_wind_off 1 125 2000.0 1.0 0.0 -fr 04_res 1 125 2000.0 1.0 0.0 -fr 05_nuclear 1 125 2000.0 1.0 0.0 -fr 06_coal 1 125 2000.0 1.0 0.0 -fr 07_gas 1 125 400.0 1.0 0.0 +fr 01_solar 1 125 2000.0 0.0 1.0 +fr 02_wind_on 1 125 2000.0 0.0 1.0 +fr 03_wind_off 1 125 2000.0 0.0 1.0 +fr 04_res 1 125 2000.0 0.0 1.0 +fr 05_nuclear 1 125 2000.0 0.0 1.0 +fr 06_coal 1 125 2000.0 0.0 1.0 +fr 07_gas 1 125 400.0 0.0 1.0 fr 08_non-res 1 125 0.0 0.0 0.0 fr 09_hydro_pump 1 125 0.0 0.0 0.0 -fr 01_solar 1 126 2000.0 1.0 0.0 -fr 02_wind_on 1 126 2000.0 1.0 0.0 -fr 03_wind_off 1 126 2000.0 1.0 0.0 -fr 04_res 1 126 2000.0 1.0 0.0 -fr 05_nuclear 1 126 2000.0 1.0 0.0 -fr 06_coal 1 126 2000.0 1.0 0.0 -fr 07_gas 1 126 500.0 1.0 0.0 +fr 01_solar 1 126 2000.0 0.0 1.0 +fr 02_wind_on 1 126 2000.0 0.0 1.0 +fr 03_wind_off 1 126 2000.0 0.0 1.0 +fr 04_res 1 126 2000.0 0.0 1.0 +fr 05_nuclear 1 126 2000.0 0.0 1.0 +fr 06_coal 1 126 2000.0 0.0 1.0 +fr 07_gas 1 126 500.0 0.0 1.0 fr 08_non-res 1 126 0.0 0.0 0.0 fr 09_hydro_pump 1 126 0.0 0.0 0.0 -fr 01_solar 1 127 2000.0 1.0 0.0 -fr 02_wind_on 1 127 2000.0 1.0 0.0 -fr 03_wind_off 1 127 2000.0 1.0 0.0 -fr 04_res 1 127 2000.0 1.0 0.0 -fr 05_nuclear 1 127 2000.0 1.0 0.0 -fr 06_coal 1 127 2000.0 1.0 0.0 -fr 07_gas 1 127 600.0 1.0 0.0 +fr 01_solar 1 127 2000.0 0.0 1.0 +fr 02_wind_on 1 127 2000.0 0.0 1.0 +fr 03_wind_off 1 127 2000.0 0.0 1.0 +fr 04_res 1 127 2000.0 0.0 1.0 +fr 05_nuclear 1 127 2000.0 0.0 1.0 +fr 06_coal 1 127 2000.0 0.0 1.0 +fr 07_gas 1 127 600.0 0.0 1.0 fr 08_non-res 1 127 0.0 0.0 0.0 fr 09_hydro_pump 1 127 0.0 0.0 0.0 -fr 01_solar 1 128 2000.0 1.0 0.0 -fr 02_wind_on 1 128 2000.0 1.0 0.0 -fr 03_wind_off 1 128 2000.0 1.0 0.0 -fr 04_res 1 128 2000.0 1.0 0.0 -fr 05_nuclear 1 128 2000.0 1.0 0.0 -fr 06_coal 1 128 2000.0 1.0 0.0 -fr 07_gas 1 128 700.0 1.0 0.0 +fr 01_solar 1 128 2000.0 0.0 1.0 +fr 02_wind_on 1 128 2000.0 0.0 1.0 +fr 03_wind_off 1 128 2000.0 0.0 1.0 +fr 04_res 1 128 2000.0 0.0 1.0 +fr 05_nuclear 1 128 2000.0 0.0 1.0 +fr 06_coal 1 128 2000.0 0.0 1.0 +fr 07_gas 1 128 700.0 0.0 1.0 fr 08_non-res 1 128 0.0 0.0 0.0 fr 09_hydro_pump 1 128 0.0 0.0 0.0 -fr 01_solar 1 129 2000.0 1.0 0.0 -fr 02_wind_on 1 129 2000.0 1.0 0.0 -fr 03_wind_off 1 129 2000.0 1.0 0.0 -fr 04_res 1 129 2000.0 1.0 0.0 -fr 05_nuclear 1 129 2000.0 1.0 0.0 -fr 06_coal 1 129 2000.0 1.0 0.0 -fr 07_gas 1 129 800.0 1.0 0.0 +fr 01_solar 1 129 2000.0 0.0 1.0 +fr 02_wind_on 1 129 2000.0 0.0 1.0 +fr 03_wind_off 1 129 2000.0 0.0 1.0 +fr 04_res 1 129 2000.0 0.0 1.0 +fr 05_nuclear 1 129 2000.0 0.0 1.0 +fr 06_coal 1 129 2000.0 0.0 1.0 +fr 07_gas 1 129 800.0 0.0 1.0 fr 08_non-res 1 129 0.0 0.0 0.0 fr 09_hydro_pump 1 129 0.0 0.0 0.0 -fr 01_solar 1 130 2000.0 1.0 0.0 -fr 02_wind_on 1 130 2000.0 1.0 0.0 -fr 03_wind_off 1 130 2000.0 1.0 0.0 -fr 04_res 1 130 2000.0 1.0 0.0 -fr 05_nuclear 1 130 2000.0 1.0 0.0 -fr 06_coal 1 130 2000.0 1.0 0.0 -fr 07_gas 1 130 900.0 1.0 0.0 +fr 01_solar 1 130 2000.0 0.0 1.0 +fr 02_wind_on 1 130 2000.0 0.0 1.0 +fr 03_wind_off 1 130 2000.0 0.0 1.0 +fr 04_res 1 130 2000.0 0.0 1.0 +fr 05_nuclear 1 130 2000.0 0.0 1.0 +fr 06_coal 1 130 2000.0 0.0 1.0 +fr 07_gas 1 130 900.0 0.0 1.0 fr 08_non-res 1 130 0.0 0.0 0.0 fr 09_hydro_pump 1 130 0.0 0.0 0.0 -fr 01_solar 1 131 2000.0 1.0 0.0 -fr 02_wind_on 1 131 2000.0 1.0 0.0 -fr 03_wind_off 1 131 2000.0 1.0 0.0 -fr 04_res 1 131 2000.0 1.0 0.0 -fr 05_nuclear 1 131 2000.0 1.0 0.0 -fr 06_coal 1 131 2000.0 1.0 0.0 -fr 07_gas 1 131 1000.0 1.0 0.0 +fr 01_solar 1 131 2000.0 0.0 1.0 +fr 02_wind_on 1 131 2000.0 0.0 1.0 +fr 03_wind_off 1 131 2000.0 0.0 1.0 +fr 04_res 1 131 2000.0 0.0 1.0 +fr 05_nuclear 1 131 2000.0 0.0 1.0 +fr 06_coal 1 131 2000.0 0.0 1.0 +fr 07_gas 1 131 1000.0 0.0 1.0 fr 08_non-res 1 131 0.0 0.0 0.0 fr 09_hydro_pump 1 131 0.0 0.0 0.0 -fr 01_solar 1 132 2000.0 1.0 0.0 -fr 02_wind_on 1 132 2000.0 1.0 0.0 -fr 03_wind_off 1 132 2000.0 1.0 0.0 -fr 04_res 1 132 2000.0 1.0 0.0 -fr 05_nuclear 1 132 2000.0 1.0 0.0 -fr 06_coal 1 132 2000.0 1.0 0.0 -fr 07_gas 1 132 1100.0 1.0 0.0 +fr 01_solar 1 132 2000.0 0.0 1.0 +fr 02_wind_on 1 132 2000.0 0.0 1.0 +fr 03_wind_off 1 132 2000.0 0.0 1.0 +fr 04_res 1 132 2000.0 0.0 1.0 +fr 05_nuclear 1 132 2000.0 0.0 1.0 +fr 06_coal 1 132 2000.0 0.0 1.0 +fr 07_gas 1 132 1100.0 0.0 1.0 fr 08_non-res 1 132 0.0 0.0 0.0 fr 09_hydro_pump 1 132 0.0 0.0 0.0 -fr 01_solar 1 133 2000.0 1.0 0.0 -fr 02_wind_on 1 133 2000.0 1.0 0.0 -fr 03_wind_off 1 133 2000.0 1.0 0.0 -fr 04_res 1 133 2000.0 1.0 0.0 -fr 05_nuclear 1 133 2000.0 1.0 0.0 -fr 06_coal 1 133 2000.0 1.0 0.0 -fr 07_gas 1 133 1200.0 1.0 0.0 +fr 01_solar 1 133 2000.0 0.0 1.0 +fr 02_wind_on 1 133 2000.0 0.0 1.0 +fr 03_wind_off 1 133 2000.0 0.0 1.0 +fr 04_res 1 133 2000.0 0.0 1.0 +fr 05_nuclear 1 133 2000.0 0.0 1.0 +fr 06_coal 1 133 2000.0 0.0 1.0 +fr 07_gas 1 133 1200.0 0.0 1.0 fr 08_non-res 1 133 0.0 0.0 0.0 fr 09_hydro_pump 1 133 0.0 0.0 0.0 -fr 01_solar 1 134 2000.0 1.0 0.0 -fr 02_wind_on 1 134 2000.0 1.0 0.0 -fr 03_wind_off 1 134 2000.0 1.0 0.0 -fr 04_res 1 134 2000.0 1.0 0.0 -fr 05_nuclear 1 134 2000.0 1.0 0.0 -fr 06_coal 1 134 2000.0 1.0 0.0 -fr 07_gas 1 134 1300.0 1.0 0.0 +fr 01_solar 1 134 2000.0 0.0 1.0 +fr 02_wind_on 1 134 2000.0 0.0 1.0 +fr 03_wind_off 1 134 2000.0 0.0 1.0 +fr 04_res 1 134 2000.0 0.0 1.0 +fr 05_nuclear 1 134 2000.0 0.0 1.0 +fr 06_coal 1 134 2000.0 0.0 1.0 +fr 07_gas 1 134 1300.0 0.0 1.0 fr 08_non-res 1 134 0.0 0.0 0.0 fr 09_hydro_pump 1 134 0.0 0.0 0.0 -fr 01_solar 1 135 2000.0 1.0 0.0 -fr 02_wind_on 1 135 2000.0 1.0 0.0 -fr 03_wind_off 1 135 2000.0 1.0 0.0 -fr 04_res 1 135 2000.0 1.0 0.0 -fr 05_nuclear 1 135 2000.0 1.0 0.0 -fr 06_coal 1 135 2000.0 1.0 0.0 -fr 07_gas 1 135 1400.0 1.0 0.0 +fr 01_solar 1 135 2000.0 0.0 1.0 +fr 02_wind_on 1 135 2000.0 0.0 1.0 +fr 03_wind_off 1 135 2000.0 0.0 1.0 +fr 04_res 1 135 2000.0 0.0 1.0 +fr 05_nuclear 1 135 2000.0 0.0 1.0 +fr 06_coal 1 135 2000.0 0.0 1.0 +fr 07_gas 1 135 1400.0 0.0 1.0 fr 08_non-res 1 135 0.0 0.0 0.0 fr 09_hydro_pump 1 135 0.0 0.0 0.0 -fr 01_solar 1 136 2000.0 1.0 0.0 -fr 02_wind_on 1 136 2000.0 1.0 0.0 -fr 03_wind_off 1 136 2000.0 1.0 0.0 -fr 04_res 1 136 2000.0 1.0 0.0 -fr 05_nuclear 1 136 2000.0 1.0 0.0 -fr 06_coal 1 136 2000.0 1.0 0.0 -fr 07_gas 1 136 1500.0 1.0 0.0 +fr 01_solar 1 136 2000.0 0.0 1.0 +fr 02_wind_on 1 136 2000.0 0.0 1.0 +fr 03_wind_off 1 136 2000.0 0.0 1.0 +fr 04_res 1 136 2000.0 0.0 1.0 +fr 05_nuclear 1 136 2000.0 0.0 1.0 +fr 06_coal 1 136 2000.0 0.0 1.0 +fr 07_gas 1 136 1500.0 0.0 1.0 fr 08_non-res 1 136 0.0 0.0 0.0 fr 09_hydro_pump 1 136 0.0 0.0 0.0 -fr 01_solar 1 137 2000.0 1.0 0.0 -fr 02_wind_on 1 137 2000.0 1.0 0.0 -fr 03_wind_off 1 137 2000.0 1.0 0.0 -fr 04_res 1 137 2000.0 1.0 0.0 -fr 05_nuclear 1 137 2000.0 1.0 0.0 -fr 06_coal 1 137 2000.0 1.0 0.0 -fr 07_gas 1 137 1600.0 1.0 0.0 +fr 01_solar 1 137 2000.0 0.0 1.0 +fr 02_wind_on 1 137 2000.0 0.0 1.0 +fr 03_wind_off 1 137 2000.0 0.0 1.0 +fr 04_res 1 137 2000.0 0.0 1.0 +fr 05_nuclear 1 137 2000.0 0.0 1.0 +fr 06_coal 1 137 2000.0 0.0 1.0 +fr 07_gas 1 137 1600.0 0.0 1.0 fr 08_non-res 1 137 0.0 0.0 0.0 fr 09_hydro_pump 1 137 0.0 0.0 0.0 -fr 01_solar 1 138 2000.0 1.0 0.0 -fr 02_wind_on 1 138 2000.0 1.0 0.0 -fr 03_wind_off 1 138 2000.0 1.0 0.0 -fr 04_res 1 138 2000.0 1.0 0.0 -fr 05_nuclear 1 138 2000.0 1.0 0.0 -fr 06_coal 1 138 2000.0 1.0 0.0 -fr 07_gas 1 138 1700.0 1.0 0.0 +fr 01_solar 1 138 2000.0 0.0 1.0 +fr 02_wind_on 1 138 2000.0 0.0 1.0 +fr 03_wind_off 1 138 2000.0 0.0 1.0 +fr 04_res 1 138 2000.0 0.0 1.0 +fr 05_nuclear 1 138 2000.0 0.0 1.0 +fr 06_coal 1 138 2000.0 0.0 1.0 +fr 07_gas 1 138 1700.0 0.0 1.0 fr 08_non-res 1 138 0.0 0.0 0.0 fr 09_hydro_pump 1 138 0.0 0.0 0.0 -fr 01_solar 1 139 2000.0 1.0 0.0 -fr 02_wind_on 1 139 2000.0 1.0 0.0 -fr 03_wind_off 1 139 2000.0 1.0 0.0 -fr 04_res 1 139 2000.0 1.0 0.0 -fr 05_nuclear 1 139 2000.0 1.0 0.0 -fr 06_coal 1 139 2000.0 1.0 0.0 -fr 07_gas 1 139 1800.0 1.0 0.0 +fr 01_solar 1 139 2000.0 0.0 1.0 +fr 02_wind_on 1 139 2000.0 0.0 1.0 +fr 03_wind_off 1 139 2000.0 0.0 1.0 +fr 04_res 1 139 2000.0 0.0 1.0 +fr 05_nuclear 1 139 2000.0 0.0 1.0 +fr 06_coal 1 139 2000.0 0.0 1.0 +fr 07_gas 1 139 1800.0 0.0 1.0 fr 08_non-res 1 139 0.0 0.0 0.0 fr 09_hydro_pump 1 139 0.0 0.0 0.0 -fr 01_solar 1 140 2000.0 1.0 0.0 -fr 02_wind_on 1 140 2000.0 1.0 0.0 -fr 03_wind_off 1 140 2000.0 1.0 0.0 -fr 04_res 1 140 2000.0 1.0 0.0 -fr 05_nuclear 1 140 2000.0 1.0 0.0 -fr 06_coal 1 140 2000.0 1.0 0.0 -fr 07_gas 1 140 1900.0 1.0 0.0 +fr 01_solar 1 140 2000.0 0.0 1.0 +fr 02_wind_on 1 140 2000.0 0.0 1.0 +fr 03_wind_off 1 140 2000.0 0.0 1.0 +fr 04_res 1 140 2000.0 0.0 1.0 +fr 05_nuclear 1 140 2000.0 0.0 1.0 +fr 06_coal 1 140 2000.0 0.0 1.0 +fr 07_gas 1 140 1900.0 0.0 1.0 fr 08_non-res 1 140 0.0 0.0 0.0 fr 09_hydro_pump 1 140 0.0 0.0 0.0 -fr 01_solar 1 141 2000.0 1.0 0.0 -fr 02_wind_on 1 141 2000.0 1.0 0.0 -fr 03_wind_off 1 141 2000.0 1.0 0.0 -fr 04_res 1 141 2000.0 1.0 0.0 -fr 05_nuclear 1 141 2000.0 1.0 0.0 -fr 06_coal 1 141 2000.0 1.0 0.0 -fr 07_gas 1 141 2000.0 1.0 0.0 +fr 01_solar 1 141 2000.0 0.0 1.0 +fr 02_wind_on 1 141 2000.0 0.0 1.0 +fr 03_wind_off 1 141 2000.0 0.0 1.0 +fr 04_res 1 141 2000.0 0.0 1.0 +fr 05_nuclear 1 141 2000.0 0.0 1.0 +fr 06_coal 1 141 2000.0 0.0 1.0 +fr 07_gas 1 141 2000.0 0.0 1.0 fr 08_non-res 1 141 0.0 0.0 0.0 fr 09_hydro_pump 1 141 0.0 0.0 0.0 -fr 01_solar 1 142 2000.0 1.0 0.0 -fr 02_wind_on 1 142 2000.0 1.0 0.0 -fr 03_wind_off 1 142 2000.0 1.0 0.0 -fr 04_res 1 142 2000.0 1.0 0.0 -fr 05_nuclear 1 142 2000.0 1.0 0.0 -fr 06_coal 1 142 2000.0 1.0 0.0 -fr 07_gas 1 142 2000.0 1.0 0.0 -fr 08_non-res 1 142 100.0 1.0 0.0 +fr 01_solar 1 142 2000.0 0.0 1.0 +fr 02_wind_on 1 142 2000.0 0.0 1.0 +fr 03_wind_off 1 142 2000.0 0.0 1.0 +fr 04_res 1 142 2000.0 0.0 1.0 +fr 05_nuclear 1 142 2000.0 0.0 1.0 +fr 06_coal 1 142 2000.0 0.0 1.0 +fr 07_gas 1 142 2000.0 0.0 1.0 +fr 08_non-res 1 142 100.0 0.0 1.0 fr 09_hydro_pump 1 142 0.0 0.0 0.0 -fr 01_solar 1 143 2000.0 1.0 0.0 -fr 02_wind_on 1 143 2000.0 1.0 0.0 -fr 03_wind_off 1 143 2000.0 1.0 0.0 -fr 04_res 1 143 2000.0 1.0 0.0 -fr 05_nuclear 1 143 2000.0 1.0 0.0 -fr 06_coal 1 143 2000.0 1.0 0.0 -fr 07_gas 1 143 2000.0 1.0 0.0 -fr 08_non-res 1 143 200.0 1.0 0.0 +fr 01_solar 1 143 2000.0 0.0 1.0 +fr 02_wind_on 1 143 2000.0 0.0 1.0 +fr 03_wind_off 1 143 2000.0 0.0 1.0 +fr 04_res 1 143 2000.0 0.0 1.0 +fr 05_nuclear 1 143 2000.0 0.0 1.0 +fr 06_coal 1 143 2000.0 0.0 1.0 +fr 07_gas 1 143 2000.0 0.0 1.0 +fr 08_non-res 1 143 200.0 0.0 1.0 fr 09_hydro_pump 1 143 0.0 0.0 0.0 -fr 01_solar 1 144 2000.0 1.0 0.0 -fr 02_wind_on 1 144 2000.0 1.0 0.0 -fr 03_wind_off 1 144 2000.0 1.0 0.0 -fr 04_res 1 144 2000.0 1.0 0.0 -fr 05_nuclear 1 144 2000.0 1.0 0.0 -fr 06_coal 1 144 2000.0 1.0 0.0 -fr 07_gas 1 144 2000.0 1.0 0.0 -fr 08_non-res 1 144 300.0 1.0 0.0 +fr 01_solar 1 144 2000.0 0.0 1.0 +fr 02_wind_on 1 144 2000.0 0.0 1.0 +fr 03_wind_off 1 144 2000.0 0.0 1.0 +fr 04_res 1 144 2000.0 0.0 1.0 +fr 05_nuclear 1 144 2000.0 0.0 1.0 +fr 06_coal 1 144 2000.0 0.0 1.0 +fr 07_gas 1 144 2000.0 0.0 1.0 +fr 08_non-res 1 144 300.0 0.0 1.0 fr 09_hydro_pump 1 144 0.0 0.0 0.0 -fr 01_solar 1 145 2000.0 1.0 0.0 -fr 02_wind_on 1 145 2000.0 1.0 0.0 -fr 03_wind_off 1 145 2000.0 1.0 0.0 -fr 04_res 1 145 2000.0 1.0 0.0 -fr 05_nuclear 1 145 2000.0 1.0 0.0 -fr 06_coal 1 145 2000.0 1.0 0.0 -fr 07_gas 1 145 2000.0 1.0 0.0 -fr 08_non-res 1 145 400.0 1.0 0.0 +fr 01_solar 1 145 2000.0 0.0 1.0 +fr 02_wind_on 1 145 2000.0 0.0 1.0 +fr 03_wind_off 1 145 2000.0 0.0 1.0 +fr 04_res 1 145 2000.0 0.0 1.0 +fr 05_nuclear 1 145 2000.0 0.0 1.0 +fr 06_coal 1 145 2000.0 0.0 1.0 +fr 07_gas 1 145 2000.0 0.0 1.0 +fr 08_non-res 1 145 400.0 0.0 1.0 fr 09_hydro_pump 1 145 0.0 0.0 0.0 -fr 01_solar 1 146 2000.0 1.0 0.0 -fr 02_wind_on 1 146 2000.0 1.0 0.0 -fr 03_wind_off 1 146 2000.0 1.0 0.0 -fr 04_res 1 146 2000.0 1.0 0.0 -fr 05_nuclear 1 146 2000.0 1.0 0.0 -fr 06_coal 1 146 2000.0 1.0 0.0 -fr 07_gas 1 146 2000.0 1.0 0.0 -fr 08_non-res 1 146 500.0 1.0 0.0 +fr 01_solar 1 146 2000.0 0.0 1.0 +fr 02_wind_on 1 146 2000.0 0.0 1.0 +fr 03_wind_off 1 146 2000.0 0.0 1.0 +fr 04_res 1 146 2000.0 0.0 1.0 +fr 05_nuclear 1 146 2000.0 0.0 1.0 +fr 06_coal 1 146 2000.0 0.0 1.0 +fr 07_gas 1 146 2000.0 0.0 1.0 +fr 08_non-res 1 146 500.0 0.0 1.0 fr 09_hydro_pump 1 146 0.0 0.0 0.0 -fr 01_solar 1 147 2000.0 1.0 0.0 -fr 02_wind_on 1 147 2000.0 1.0 0.0 -fr 03_wind_off 1 147 2000.0 1.0 0.0 -fr 04_res 1 147 2000.0 1.0 0.0 -fr 05_nuclear 1 147 2000.0 1.0 0.0 -fr 06_coal 1 147 2000.0 1.0 0.0 -fr 07_gas 1 147 2000.0 1.0 0.0 -fr 08_non-res 1 147 600.0 1.0 0.0 +fr 01_solar 1 147 2000.0 0.0 1.0 +fr 02_wind_on 1 147 2000.0 0.0 1.0 +fr 03_wind_off 1 147 2000.0 0.0 1.0 +fr 04_res 1 147 2000.0 0.0 1.0 +fr 05_nuclear 1 147 2000.0 0.0 1.0 +fr 06_coal 1 147 2000.0 0.0 1.0 +fr 07_gas 1 147 2000.0 0.0 1.0 +fr 08_non-res 1 147 600.0 0.0 1.0 fr 09_hydro_pump 1 147 0.0 0.0 0.0 -fr 01_solar 1 148 2000.0 1.0 0.0 -fr 02_wind_on 1 148 2000.0 1.0 0.0 -fr 03_wind_off 1 148 2000.0 1.0 0.0 -fr 04_res 1 148 2000.0 1.0 0.0 -fr 05_nuclear 1 148 2000.0 1.0 0.0 -fr 06_coal 1 148 2000.0 1.0 0.0 -fr 07_gas 1 148 2000.0 1.0 0.0 -fr 08_non-res 1 148 700.0 1.0 0.0 +fr 01_solar 1 148 2000.0 0.0 1.0 +fr 02_wind_on 1 148 2000.0 0.0 1.0 +fr 03_wind_off 1 148 2000.0 0.0 1.0 +fr 04_res 1 148 2000.0 0.0 1.0 +fr 05_nuclear 1 148 2000.0 0.0 1.0 +fr 06_coal 1 148 2000.0 0.0 1.0 +fr 07_gas 1 148 2000.0 0.0 1.0 +fr 08_non-res 1 148 700.0 0.0 1.0 fr 09_hydro_pump 1 148 0.0 0.0 0.0 -fr 01_solar 1 149 2000.0 1.0 0.0 -fr 02_wind_on 1 149 2000.0 1.0 0.0 -fr 03_wind_off 1 149 2000.0 1.0 0.0 -fr 04_res 1 149 2000.0 1.0 0.0 -fr 05_nuclear 1 149 2000.0 1.0 0.0 -fr 06_coal 1 149 2000.0 1.0 0.0 -fr 07_gas 1 149 2000.0 1.0 0.0 -fr 08_non-res 1 149 800.0 1.0 0.0 +fr 01_solar 1 149 2000.0 0.0 1.0 +fr 02_wind_on 1 149 2000.0 0.0 1.0 +fr 03_wind_off 1 149 2000.0 0.0 1.0 +fr 04_res 1 149 2000.0 0.0 1.0 +fr 05_nuclear 1 149 2000.0 0.0 1.0 +fr 06_coal 1 149 2000.0 0.0 1.0 +fr 07_gas 1 149 2000.0 0.0 1.0 +fr 08_non-res 1 149 800.0 0.0 1.0 fr 09_hydro_pump 1 149 0.0 0.0 0.0 -fr 01_solar 1 150 2000.0 1.0 0.0 -fr 02_wind_on 1 150 2000.0 1.0 0.0 -fr 03_wind_off 1 150 2000.0 1.0 0.0 -fr 04_res 1 150 2000.0 1.0 0.0 -fr 05_nuclear 1 150 2000.0 1.0 0.0 -fr 06_coal 1 150 2000.0 1.0 0.0 -fr 07_gas 1 150 2000.0 1.0 0.0 -fr 08_non-res 1 150 900.0 1.0 0.0 +fr 01_solar 1 150 2000.0 0.0 1.0 +fr 02_wind_on 1 150 2000.0 0.0 1.0 +fr 03_wind_off 1 150 2000.0 0.0 1.0 +fr 04_res 1 150 2000.0 0.0 1.0 +fr 05_nuclear 1 150 2000.0 0.0 1.0 +fr 06_coal 1 150 2000.0 0.0 1.0 +fr 07_gas 1 150 2000.0 0.0 1.0 +fr 08_non-res 1 150 900.0 0.0 1.0 fr 09_hydro_pump 1 150 0.0 0.0 0.0 -fr 01_solar 1 151 2000.0 1.0 0.0 -fr 02_wind_on 1 151 2000.0 1.0 0.0 -fr 03_wind_off 1 151 2000.0 1.0 0.0 -fr 04_res 1 151 2000.0 1.0 0.0 -fr 05_nuclear 1 151 2000.0 1.0 0.0 -fr 06_coal 1 151 2000.0 1.0 0.0 -fr 07_gas 1 151 2000.0 1.0 0.0 -fr 08_non-res 1 151 1000.0 1.0 0.0 +fr 01_solar 1 151 2000.0 0.0 1.0 +fr 02_wind_on 1 151 2000.0 0.0 1.0 +fr 03_wind_off 1 151 2000.0 0.0 1.0 +fr 04_res 1 151 2000.0 0.0 1.0 +fr 05_nuclear 1 151 2000.0 0.0 1.0 +fr 06_coal 1 151 2000.0 0.0 1.0 +fr 07_gas 1 151 2000.0 0.0 1.0 +fr 08_non-res 1 151 1000.0 0.0 1.0 fr 09_hydro_pump 1 151 0.0 0.0 0.0 -fr 01_solar 1 152 2000.0 1.0 0.0 -fr 02_wind_on 1 152 2000.0 1.0 0.0 -fr 03_wind_off 1 152 2000.0 1.0 0.0 -fr 04_res 1 152 2000.0 1.0 0.0 -fr 05_nuclear 1 152 2000.0 1.0 0.0 -fr 06_coal 1 152 2000.0 1.0 0.0 -fr 07_gas 1 152 2000.0 1.0 0.0 -fr 08_non-res 1 152 1100.0 1.0 0.0 +fr 01_solar 1 152 2000.0 0.0 1.0 +fr 02_wind_on 1 152 2000.0 0.0 1.0 +fr 03_wind_off 1 152 2000.0 0.0 1.0 +fr 04_res 1 152 2000.0 0.0 1.0 +fr 05_nuclear 1 152 2000.0 0.0 1.0 +fr 06_coal 1 152 2000.0 0.0 1.0 +fr 07_gas 1 152 2000.0 0.0 1.0 +fr 08_non-res 1 152 1100.0 0.0 1.0 fr 09_hydro_pump 1 152 0.0 0.0 0.0 -fr 01_solar 1 153 2000.0 1.0 0.0 -fr 02_wind_on 1 153 2000.0 1.0 0.0 -fr 03_wind_off 1 153 2000.0 1.0 0.0 -fr 04_res 1 153 2000.0 1.0 0.0 -fr 05_nuclear 1 153 2000.0 1.0 0.0 -fr 06_coal 1 153 2000.0 1.0 0.0 -fr 07_gas 1 153 2000.0 1.0 0.0 -fr 08_non-res 1 153 1200.0 1.0 0.0 +fr 01_solar 1 153 2000.0 0.0 1.0 +fr 02_wind_on 1 153 2000.0 0.0 1.0 +fr 03_wind_off 1 153 2000.0 0.0 1.0 +fr 04_res 1 153 2000.0 0.0 1.0 +fr 05_nuclear 1 153 2000.0 0.0 1.0 +fr 06_coal 1 153 2000.0 0.0 1.0 +fr 07_gas 1 153 2000.0 0.0 1.0 +fr 08_non-res 1 153 1200.0 0.0 1.0 fr 09_hydro_pump 1 153 0.0 0.0 0.0 -fr 01_solar 1 154 2000.0 1.0 0.0 -fr 02_wind_on 1 154 2000.0 1.0 0.0 -fr 03_wind_off 1 154 2000.0 1.0 0.0 -fr 04_res 1 154 2000.0 1.0 0.0 -fr 05_nuclear 1 154 2000.0 1.0 0.0 -fr 06_coal 1 154 2000.0 1.0 0.0 -fr 07_gas 1 154 2000.0 1.0 0.0 -fr 08_non-res 1 154 1300.0 1.0 0.0 +fr 01_solar 1 154 2000.0 0.0 1.0 +fr 02_wind_on 1 154 2000.0 0.0 1.0 +fr 03_wind_off 1 154 2000.0 0.0 1.0 +fr 04_res 1 154 2000.0 0.0 1.0 +fr 05_nuclear 1 154 2000.0 0.0 1.0 +fr 06_coal 1 154 2000.0 0.0 1.0 +fr 07_gas 1 154 2000.0 0.0 1.0 +fr 08_non-res 1 154 1300.0 0.0 1.0 fr 09_hydro_pump 1 154 0.0 0.0 0.0 -fr 01_solar 1 155 2000.0 1.0 0.0 -fr 02_wind_on 1 155 2000.0 1.0 0.0 -fr 03_wind_off 1 155 2000.0 1.0 0.0 -fr 04_res 1 155 2000.0 1.0 0.0 -fr 05_nuclear 1 155 2000.0 1.0 0.0 -fr 06_coal 1 155 2000.0 1.0 0.0 -fr 07_gas 1 155 2000.0 1.0 0.0 -fr 08_non-res 1 155 1400.0 1.0 0.0 +fr 01_solar 1 155 2000.0 0.0 1.0 +fr 02_wind_on 1 155 2000.0 0.0 1.0 +fr 03_wind_off 1 155 2000.0 0.0 1.0 +fr 04_res 1 155 2000.0 0.0 1.0 +fr 05_nuclear 1 155 2000.0 0.0 1.0 +fr 06_coal 1 155 2000.0 0.0 1.0 +fr 07_gas 1 155 2000.0 0.0 1.0 +fr 08_non-res 1 155 1400.0 0.0 1.0 fr 09_hydro_pump 1 155 0.0 0.0 0.0 -fr 01_solar 1 156 2000.0 1.0 0.0 -fr 02_wind_on 1 156 2000.0 1.0 0.0 -fr 03_wind_off 1 156 2000.0 1.0 0.0 -fr 04_res 1 156 2000.0 1.0 0.0 -fr 05_nuclear 1 156 2000.0 1.0 0.0 -fr 06_coal 1 156 2000.0 1.0 0.0 -fr 07_gas 1 156 2000.0 1.0 0.0 -fr 08_non-res 1 156 1500.0 1.0 0.0 +fr 01_solar 1 156 2000.0 0.0 1.0 +fr 02_wind_on 1 156 2000.0 0.0 1.0 +fr 03_wind_off 1 156 2000.0 0.0 1.0 +fr 04_res 1 156 2000.0 0.0 1.0 +fr 05_nuclear 1 156 2000.0 0.0 1.0 +fr 06_coal 1 156 2000.0 0.0 1.0 +fr 07_gas 1 156 2000.0 0.0 1.0 +fr 08_non-res 1 156 1500.0 0.0 1.0 fr 09_hydro_pump 1 156 0.0 0.0 0.0 -fr 01_solar 1 157 2000.0 1.0 0.0 -fr 02_wind_on 1 157 2000.0 1.0 0.0 -fr 03_wind_off 1 157 2000.0 1.0 0.0 -fr 04_res 1 157 2000.0 1.0 0.0 -fr 05_nuclear 1 157 2000.0 1.0 0.0 -fr 06_coal 1 157 2000.0 1.0 0.0 -fr 07_gas 1 157 2000.0 1.0 0.0 -fr 08_non-res 1 157 1600.0 1.0 0.0 +fr 01_solar 1 157 2000.0 0.0 1.0 +fr 02_wind_on 1 157 2000.0 0.0 1.0 +fr 03_wind_off 1 157 2000.0 0.0 1.0 +fr 04_res 1 157 2000.0 0.0 1.0 +fr 05_nuclear 1 157 2000.0 0.0 1.0 +fr 06_coal 1 157 2000.0 0.0 1.0 +fr 07_gas 1 157 2000.0 0.0 1.0 +fr 08_non-res 1 157 1600.0 0.0 1.0 fr 09_hydro_pump 1 157 0.0 0.0 0.0 -fr 01_solar 1 158 2000.0 1.0 0.0 -fr 02_wind_on 1 158 2000.0 1.0 0.0 -fr 03_wind_off 1 158 2000.0 1.0 0.0 -fr 04_res 1 158 2000.0 1.0 0.0 -fr 05_nuclear 1 158 2000.0 1.0 0.0 -fr 06_coal 1 158 2000.0 1.0 0.0 -fr 07_gas 1 158 2000.0 1.0 0.0 -fr 08_non-res 1 158 1700.0 1.0 0.0 +fr 01_solar 1 158 2000.0 0.0 1.0 +fr 02_wind_on 1 158 2000.0 0.0 1.0 +fr 03_wind_off 1 158 2000.0 0.0 1.0 +fr 04_res 1 158 2000.0 0.0 1.0 +fr 05_nuclear 1 158 2000.0 0.0 1.0 +fr 06_coal 1 158 2000.0 0.0 1.0 +fr 07_gas 1 158 2000.0 0.0 1.0 +fr 08_non-res 1 158 1700.0 0.0 1.0 fr 09_hydro_pump 1 158 0.0 0.0 0.0 -fr 01_solar 1 159 2000.0 1.0 0.0 -fr 02_wind_on 1 159 2000.0 1.0 0.0 -fr 03_wind_off 1 159 2000.0 1.0 0.0 -fr 04_res 1 159 2000.0 1.0 0.0 -fr 05_nuclear 1 159 2000.0 1.0 0.0 -fr 06_coal 1 159 2000.0 1.0 0.0 -fr 07_gas 1 159 2000.0 1.0 0.0 -fr 08_non-res 1 159 1800.0 1.0 0.0 +fr 01_solar 1 159 2000.0 0.0 1.0 +fr 02_wind_on 1 159 2000.0 0.0 1.0 +fr 03_wind_off 1 159 2000.0 0.0 1.0 +fr 04_res 1 159 2000.0 0.0 1.0 +fr 05_nuclear 1 159 2000.0 0.0 1.0 +fr 06_coal 1 159 2000.0 0.0 1.0 +fr 07_gas 1 159 2000.0 0.0 1.0 +fr 08_non-res 1 159 1800.0 0.0 1.0 fr 09_hydro_pump 1 159 0.0 0.0 0.0 -fr 01_solar 1 160 2000.0 1.0 0.0 -fr 02_wind_on 1 160 2000.0 1.0 0.0 -fr 03_wind_off 1 160 2000.0 1.0 0.0 -fr 04_res 1 160 2000.0 1.0 0.0 -fr 05_nuclear 1 160 2000.0 1.0 0.0 -fr 06_coal 1 160 2000.0 1.0 0.0 -fr 07_gas 1 160 2000.0 1.0 0.0 -fr 08_non-res 1 160 1900.0 1.0 0.0 +fr 01_solar 1 160 2000.0 0.0 1.0 +fr 02_wind_on 1 160 2000.0 0.0 1.0 +fr 03_wind_off 1 160 2000.0 0.0 1.0 +fr 04_res 1 160 2000.0 0.0 1.0 +fr 05_nuclear 1 160 2000.0 0.0 1.0 +fr 06_coal 1 160 2000.0 0.0 1.0 +fr 07_gas 1 160 2000.0 0.0 1.0 +fr 08_non-res 1 160 1900.0 0.0 1.0 fr 09_hydro_pump 1 160 0.0 0.0 0.0 -fr 01_solar 1 161 2000.0 1.0 0.0 -fr 02_wind_on 1 161 2000.0 1.0 0.0 -fr 03_wind_off 1 161 2000.0 1.0 0.0 -fr 04_res 1 161 2000.0 1.0 0.0 -fr 05_nuclear 1 161 2000.0 1.0 0.0 -fr 06_coal 1 161 2000.0 1.0 0.0 -fr 07_gas 1 161 2000.0 1.0 0.0 -fr 08_non-res 1 161 2000.0 1.0 0.0 +fr 01_solar 1 161 2000.0 0.0 1.0 +fr 02_wind_on 1 161 2000.0 0.0 1.0 +fr 03_wind_off 1 161 2000.0 0.0 1.0 +fr 04_res 1 161 2000.0 0.0 1.0 +fr 05_nuclear 1 161 2000.0 0.0 1.0 +fr 06_coal 1 161 2000.0 0.0 1.0 +fr 07_gas 1 161 2000.0 0.0 1.0 +fr 08_non-res 1 161 2000.0 0.0 1.0 fr 09_hydro_pump 1 161 0.0 0.0 0.0 -fr 01_solar 1 162 2000.0 1.0 0.0 -fr 02_wind_on 1 162 2000.0 1.0 0.0 -fr 03_wind_off 1 162 2000.0 1.0 0.0 -fr 04_res 1 162 2000.0 1.0 0.0 -fr 05_nuclear 1 162 2000.0 1.0 0.0 -fr 06_coal 1 162 2000.0 1.0 0.0 -fr 07_gas 1 162 2000.0 1.0 0.0 -fr 08_non-res 1 162 2000.0 1.0 0.0 -fr 09_hydro_pump 1 162 100.0 1.0 0.0 -fr 01_solar 1 163 2000.0 1.0 0.0 -fr 02_wind_on 1 163 2000.0 1.0 0.0 -fr 03_wind_off 1 163 2000.0 1.0 0.0 -fr 04_res 1 163 2000.0 1.0 0.0 -fr 05_nuclear 1 163 2000.0 1.0 0.0 -fr 06_coal 1 163 2000.0 1.0 0.0 -fr 07_gas 1 163 2000.0 1.0 0.0 -fr 08_non-res 1 163 2000.0 1.0 0.0 -fr 09_hydro_pump 1 163 200.0 1.0 0.0 -fr 01_solar 1 164 2000.0 1.0 0.0 -fr 02_wind_on 1 164 2000.0 1.0 0.0 -fr 03_wind_off 1 164 2000.0 1.0 0.0 -fr 04_res 1 164 2000.0 1.0 0.0 -fr 05_nuclear 1 164 2000.0 1.0 0.0 -fr 06_coal 1 164 2000.0 1.0 0.0 -fr 07_gas 1 164 2000.0 1.0 0.0 -fr 08_non-res 1 164 2000.0 1.0 0.0 -fr 09_hydro_pump 1 164 300.0 1.0 0.0 -fr 01_solar 1 165 2000.0 1.0 0.0 -fr 02_wind_on 1 165 2000.0 1.0 0.0 -fr 03_wind_off 1 165 2000.0 1.0 0.0 -fr 04_res 1 165 2000.0 1.0 0.0 -fr 05_nuclear 1 165 2000.0 1.0 0.0 -fr 06_coal 1 165 2000.0 1.0 0.0 -fr 07_gas 1 165 2000.0 1.0 0.0 -fr 08_non-res 1 165 2000.0 1.0 0.0 -fr 09_hydro_pump 1 165 400.0 1.0 0.0 -fr 01_solar 1 166 2000.0 1.0 0.0 -fr 02_wind_on 1 166 2000.0 1.0 0.0 -fr 03_wind_off 1 166 2000.0 1.0 0.0 -fr 04_res 1 166 2000.0 1.0 0.0 -fr 05_nuclear 1 166 2000.0 1.0 0.0 -fr 06_coal 1 166 2000.0 1.0 0.0 -fr 07_gas 1 166 2000.0 1.0 0.0 -fr 08_non-res 1 166 2000.0 1.0 0.0 -fr 09_hydro_pump 1 166 500.0 1.0 0.0 -fr 01_solar 1 167 2000.0 1.0 0.0 -fr 02_wind_on 1 167 2000.0 1.0 0.0 -fr 03_wind_off 1 167 2000.0 1.0 0.0 -fr 04_res 1 167 2000.0 1.0 0.0 -fr 05_nuclear 1 167 2000.0 1.0 0.0 -fr 06_coal 1 167 2000.0 1.0 0.0 -fr 07_gas 1 167 2000.0 1.0 0.0 -fr 08_non-res 1 167 2000.0 1.0 0.0 -fr 09_hydro_pump 1 167 600.0 1.0 0.0 -fr 01_solar 1 168 2000.0 1.0 0.0 -fr 02_wind_on 1 168 2000.0 1.0 0.0 -fr 03_wind_off 1 168 2000.0 1.0 0.0 -fr 04_res 1 168 2000.0 1.0 0.0 -fr 05_nuclear 1 168 2000.0 1.0 0.0 -fr 06_coal 1 168 2000.0 1.0 0.0 -fr 07_gas 1 168 2000.0 1.0 0.0 -fr 08_non-res 1 168 2000.0 1.0 0.0 -fr 09_hydro_pump 1 168 700.0 1.0 0.0 +fr 01_solar 1 162 2000.0 0.0 1.0 +fr 02_wind_on 1 162 2000.0 0.0 1.0 +fr 03_wind_off 1 162 2000.0 0.0 1.0 +fr 04_res 1 162 2000.0 0.0 1.0 +fr 05_nuclear 1 162 2000.0 0.0 1.0 +fr 06_coal 1 162 2000.0 0.0 1.0 +fr 07_gas 1 162 2000.0 0.0 1.0 +fr 08_non-res 1 162 2000.0 0.0 1.0 +fr 09_hydro_pump 1 162 100.0 0.0 1.0 +fr 01_solar 1 163 2000.0 0.0 1.0 +fr 02_wind_on 1 163 2000.0 0.0 1.0 +fr 03_wind_off 1 163 2000.0 0.0 1.0 +fr 04_res 1 163 2000.0 0.0 1.0 +fr 05_nuclear 1 163 2000.0 0.0 1.0 +fr 06_coal 1 163 2000.0 0.0 1.0 +fr 07_gas 1 163 2000.0 0.0 1.0 +fr 08_non-res 1 163 2000.0 0.0 1.0 +fr 09_hydro_pump 1 163 200.0 0.0 1.0 +fr 01_solar 1 164 2000.0 0.0 1.0 +fr 02_wind_on 1 164 2000.0 0.0 1.0 +fr 03_wind_off 1 164 2000.0 0.0 1.0 +fr 04_res 1 164 2000.0 0.0 1.0 +fr 05_nuclear 1 164 2000.0 0.0 1.0 +fr 06_coal 1 164 2000.0 0.0 1.0 +fr 07_gas 1 164 2000.0 0.0 1.0 +fr 08_non-res 1 164 2000.0 0.0 1.0 +fr 09_hydro_pump 1 164 300.0 0.0 1.0 +fr 01_solar 1 165 2000.0 0.0 1.0 +fr 02_wind_on 1 165 2000.0 0.0 1.0 +fr 03_wind_off 1 165 2000.0 0.0 1.0 +fr 04_res 1 165 2000.0 0.0 1.0 +fr 05_nuclear 1 165 2000.0 0.0 1.0 +fr 06_coal 1 165 2000.0 0.0 1.0 +fr 07_gas 1 165 2000.0 0.0 1.0 +fr 08_non-res 1 165 2000.0 0.0 1.0 +fr 09_hydro_pump 1 165 400.0 0.0 1.0 +fr 01_solar 1 166 2000.0 0.0 1.0 +fr 02_wind_on 1 166 2000.0 0.0 1.0 +fr 03_wind_off 1 166 2000.0 0.0 1.0 +fr 04_res 1 166 2000.0 0.0 1.0 +fr 05_nuclear 1 166 2000.0 0.0 1.0 +fr 06_coal 1 166 2000.0 0.0 1.0 +fr 07_gas 1 166 2000.0 0.0 1.0 +fr 08_non-res 1 166 2000.0 0.0 1.0 +fr 09_hydro_pump 1 166 500.0 0.0 1.0 +fr 01_solar 1 167 2000.0 0.0 1.0 +fr 02_wind_on 1 167 2000.0 0.0 1.0 +fr 03_wind_off 1 167 2000.0 0.0 1.0 +fr 04_res 1 167 2000.0 0.0 1.0 +fr 05_nuclear 1 167 2000.0 0.0 1.0 +fr 06_coal 1 167 2000.0 0.0 1.0 +fr 07_gas 1 167 2000.0 0.0 1.0 +fr 08_non-res 1 167 2000.0 0.0 1.0 +fr 09_hydro_pump 1 167 600.0 0.0 1.0 +fr 01_solar 1 168 2000.0 0.0 1.0 +fr 02_wind_on 1 168 2000.0 0.0 1.0 +fr 03_wind_off 1 168 2000.0 0.0 1.0 +fr 04_res 1 168 2000.0 0.0 1.0 +fr 05_nuclear 1 168 2000.0 0.0 1.0 +fr 06_coal 1 168 2000.0 0.0 1.0 +fr 07_gas 1 168 2000.0 0.0 1.0 +fr 08_non-res 1 168 2000.0 0.0 1.0 +fr 09_hydro_pump 1 168 700.0 0.0 1.0 fr 01_solar 1 169 0.0 0.0 0.0 fr 02_wind_on 1 169 0.0 0.0 0.0 fr 03_wind_off 1 169 0.0 0.0 0.0 @@ -4544,7 +4544,7 @@ fr 06_coal 1 169 0.0 0.0 0.0 fr 07_gas 1 169 0.0 0.0 0.0 fr 08_non-res 1 169 0.0 0.0 0.0 fr 09_hydro_pump 1 169 0.0 0.0 0.0 -fr 01_solar 1 170 100.0 1.0 0.0 +fr 01_solar 1 170 100.0 0.0 1.0 fr 02_wind_on 1 170 0.0 0.0 0.0 fr 03_wind_off 1 170 0.0 0.0 0.0 fr 04_res 1 170 0.0 0.0 0.0 @@ -4553,7 +4553,7 @@ fr 06_coal 1 170 0.0 0.0 0.0 fr 07_gas 1 170 0.0 0.0 0.0 fr 08_non-res 1 170 0.0 0.0 0.0 fr 09_hydro_pump 1 170 0.0 0.0 0.0 -fr 01_solar 1 171 200.0 1.0 0.0 +fr 01_solar 1 171 200.0 0.0 1.0 fr 02_wind_on 1 171 0.0 0.0 0.0 fr 03_wind_off 1 171 0.0 0.0 0.0 fr 04_res 1 171 0.0 0.0 0.0 @@ -4562,7 +4562,7 @@ fr 06_coal 1 171 0.0 0.0 0.0 fr 07_gas 1 171 0.0 0.0 0.0 fr 08_non-res 1 171 0.0 0.0 0.0 fr 09_hydro_pump 1 171 0.0 0.0 0.0 -fr 01_solar 1 172 300.0 1.0 0.0 +fr 01_solar 1 172 300.0 0.0 1.0 fr 02_wind_on 1 172 0.0 0.0 0.0 fr 03_wind_off 1 172 0.0 0.0 0.0 fr 04_res 1 172 0.0 0.0 0.0 @@ -4571,7 +4571,7 @@ fr 06_coal 1 172 0.0 0.0 0.0 fr 07_gas 1 172 0.0 0.0 0.0 fr 08_non-res 1 172 0.0 0.0 0.0 fr 09_hydro_pump 1 172 0.0 0.0 0.0 -fr 01_solar 1 173 400.0 1.0 0.0 +fr 01_solar 1 173 400.0 0.0 1.0 fr 02_wind_on 1 173 0.0 0.0 0.0 fr 03_wind_off 1 173 0.0 0.0 0.0 fr 04_res 1 173 0.0 0.0 0.0 @@ -4580,7 +4580,7 @@ fr 06_coal 1 173 0.0 0.0 0.0 fr 07_gas 1 173 0.0 0.0 0.0 fr 08_non-res 1 173 0.0 0.0 0.0 fr 09_hydro_pump 1 173 0.0 0.0 0.0 -fr 01_solar 1 174 500.0 1.0 0.0 +fr 01_solar 1 174 500.0 0.0 1.0 fr 02_wind_on 1 174 0.0 0.0 0.0 fr 03_wind_off 1 174 0.0 0.0 0.0 fr 04_res 1 174 0.0 0.0 0.0 @@ -4589,7 +4589,7 @@ fr 06_coal 1 174 0.0 0.0 0.0 fr 07_gas 1 174 0.0 0.0 0.0 fr 08_non-res 1 174 0.0 0.0 0.0 fr 09_hydro_pump 1 174 0.0 0.0 0.0 -fr 01_solar 1 175 600.0 1.0 0.0 +fr 01_solar 1 175 600.0 0.0 1.0 fr 02_wind_on 1 175 0.0 0.0 0.0 fr 03_wind_off 1 175 0.0 0.0 0.0 fr 04_res 1 175 0.0 0.0 0.0 @@ -4598,7 +4598,7 @@ fr 06_coal 1 175 0.0 0.0 0.0 fr 07_gas 1 175 0.0 0.0 0.0 fr 08_non-res 1 175 0.0 0.0 0.0 fr 09_hydro_pump 1 175 0.0 0.0 0.0 -fr 01_solar 1 176 700.0 1.0 0.0 +fr 01_solar 1 176 700.0 0.0 1.0 fr 02_wind_on 1 176 0.0 0.0 0.0 fr 03_wind_off 1 176 0.0 0.0 0.0 fr 04_res 1 176 0.0 0.0 0.0 @@ -4607,7 +4607,7 @@ fr 06_coal 1 176 0.0 0.0 0.0 fr 07_gas 1 176 0.0 0.0 0.0 fr 08_non-res 1 176 0.0 0.0 0.0 fr 09_hydro_pump 1 176 0.0 0.0 0.0 -fr 01_solar 1 177 800.0 1.0 0.0 +fr 01_solar 1 177 800.0 0.0 1.0 fr 02_wind_on 1 177 0.0 0.0 0.0 fr 03_wind_off 1 177 0.0 0.0 0.0 fr 04_res 1 177 0.0 0.0 0.0 @@ -4616,7 +4616,7 @@ fr 06_coal 1 177 0.0 0.0 0.0 fr 07_gas 1 177 0.0 0.0 0.0 fr 08_non-res 1 177 0.0 0.0 0.0 fr 09_hydro_pump 1 177 0.0 0.0 0.0 -fr 01_solar 1 178 900.0 1.0 0.0 +fr 01_solar 1 178 900.0 0.0 1.0 fr 02_wind_on 1 178 0.0 0.0 0.0 fr 03_wind_off 1 178 0.0 0.0 0.0 fr 04_res 1 178 0.0 0.0 0.0 @@ -4625,7 +4625,7 @@ fr 06_coal 1 178 0.0 0.0 0.0 fr 07_gas 1 178 0.0 0.0 0.0 fr 08_non-res 1 178 0.0 0.0 0.0 fr 09_hydro_pump 1 178 0.0 0.0 0.0 -fr 01_solar 1 179 1000.0 1.0 0.0 +fr 01_solar 1 179 1000.0 0.0 1.0 fr 02_wind_on 1 179 0.0 0.0 0.0 fr 03_wind_off 1 179 0.0 0.0 0.0 fr 04_res 1 179 0.0 0.0 0.0 @@ -4634,7 +4634,7 @@ fr 06_coal 1 179 0.0 0.0 0.0 fr 07_gas 1 179 0.0 0.0 0.0 fr 08_non-res 1 179 0.0 0.0 0.0 fr 09_hydro_pump 1 179 0.0 0.0 0.0 -fr 01_solar 1 180 1100.0 1.0 0.0 +fr 01_solar 1 180 1100.0 0.0 1.0 fr 02_wind_on 1 180 0.0 0.0 0.0 fr 03_wind_off 1 180 0.0 0.0 0.0 fr 04_res 1 180 0.0 0.0 0.0 @@ -4643,7 +4643,7 @@ fr 06_coal 1 180 0.0 0.0 0.0 fr 07_gas 1 180 0.0 0.0 0.0 fr 08_non-res 1 180 0.0 0.0 0.0 fr 09_hydro_pump 1 180 0.0 0.0 0.0 -fr 01_solar 1 181 1200.0 1.0 0.0 +fr 01_solar 1 181 1200.0 0.0 1.0 fr 02_wind_on 1 181 0.0 0.0 0.0 fr 03_wind_off 1 181 0.0 0.0 0.0 fr 04_res 1 181 0.0 0.0 0.0 @@ -4652,7 +4652,7 @@ fr 06_coal 1 181 0.0 0.0 0.0 fr 07_gas 1 181 0.0 0.0 0.0 fr 08_non-res 1 181 0.0 0.0 0.0 fr 09_hydro_pump 1 181 0.0 0.0 0.0 -fr 01_solar 1 182 1300.0 1.0 0.0 +fr 01_solar 1 182 1300.0 0.0 1.0 fr 02_wind_on 1 182 0.0 0.0 0.0 fr 03_wind_off 1 182 0.0 0.0 0.0 fr 04_res 1 182 0.0 0.0 0.0 @@ -4661,7 +4661,7 @@ fr 06_coal 1 182 0.0 0.0 0.0 fr 07_gas 1 182 0.0 0.0 0.0 fr 08_non-res 1 182 0.0 0.0 0.0 fr 09_hydro_pump 1 182 0.0 0.0 0.0 -fr 01_solar 1 183 1400.0 1.0 0.0 +fr 01_solar 1 183 1400.0 0.0 1.0 fr 02_wind_on 1 183 0.0 0.0 0.0 fr 03_wind_off 1 183 0.0 0.0 0.0 fr 04_res 1 183 0.0 0.0 0.0 @@ -4670,7 +4670,7 @@ fr 06_coal 1 183 0.0 0.0 0.0 fr 07_gas 1 183 0.0 0.0 0.0 fr 08_non-res 1 183 0.0 0.0 0.0 fr 09_hydro_pump 1 183 0.0 0.0 0.0 -fr 01_solar 1 184 1500.0 1.0 0.0 +fr 01_solar 1 184 1500.0 0.0 1.0 fr 02_wind_on 1 184 0.0 0.0 0.0 fr 03_wind_off 1 184 0.0 0.0 0.0 fr 04_res 1 184 0.0 0.0 0.0 @@ -4679,7 +4679,7 @@ fr 06_coal 1 184 0.0 0.0 0.0 fr 07_gas 1 184 0.0 0.0 0.0 fr 08_non-res 1 184 0.0 0.0 0.0 fr 09_hydro_pump 1 184 0.0 0.0 0.0 -fr 01_solar 1 185 1600.0 1.0 0.0 +fr 01_solar 1 185 1600.0 0.0 1.0 fr 02_wind_on 1 185 0.0 0.0 0.0 fr 03_wind_off 1 185 0.0 0.0 0.0 fr 04_res 1 185 0.0 0.0 0.0 @@ -4688,7 +4688,7 @@ fr 06_coal 1 185 0.0 0.0 0.0 fr 07_gas 1 185 0.0 0.0 0.0 fr 08_non-res 1 185 0.0 0.0 0.0 fr 09_hydro_pump 1 185 0.0 0.0 0.0 -fr 01_solar 1 186 1700.0 1.0 0.0 +fr 01_solar 1 186 1700.0 0.0 1.0 fr 02_wind_on 1 186 0.0 0.0 0.0 fr 03_wind_off 1 186 0.0 0.0 0.0 fr 04_res 1 186 0.0 0.0 0.0 @@ -4697,7 +4697,7 @@ fr 06_coal 1 186 0.0 0.0 0.0 fr 07_gas 1 186 0.0 0.0 0.0 fr 08_non-res 1 186 0.0 0.0 0.0 fr 09_hydro_pump 1 186 0.0 0.0 0.0 -fr 01_solar 1 187 1800.0 1.0 0.0 +fr 01_solar 1 187 1800.0 0.0 1.0 fr 02_wind_on 1 187 0.0 0.0 0.0 fr 03_wind_off 1 187 0.0 0.0 0.0 fr 04_res 1 187 0.0 0.0 0.0 @@ -4706,7 +4706,7 @@ fr 06_coal 1 187 0.0 0.0 0.0 fr 07_gas 1 187 0.0 0.0 0.0 fr 08_non-res 1 187 0.0 0.0 0.0 fr 09_hydro_pump 1 187 0.0 0.0 0.0 -fr 01_solar 1 188 1900.0 1.0 0.0 +fr 01_solar 1 188 1900.0 0.0 1.0 fr 02_wind_on 1 188 0.0 0.0 0.0 fr 03_wind_off 1 188 0.0 0.0 0.0 fr 04_res 1 188 0.0 0.0 0.0 @@ -4715,7 +4715,7 @@ fr 06_coal 1 188 0.0 0.0 0.0 fr 07_gas 1 188 0.0 0.0 0.0 fr 08_non-res 1 188 0.0 0.0 0.0 fr 09_hydro_pump 1 188 0.0 0.0 0.0 -fr 01_solar 1 189 2000.0 1.0 0.0 +fr 01_solar 1 189 2000.0 0.0 1.0 fr 02_wind_on 1 189 0.0 0.0 0.0 fr 03_wind_off 1 189 0.0 0.0 0.0 fr 04_res 1 189 0.0 0.0 0.0 @@ -4724,8 +4724,8 @@ fr 06_coal 1 189 0.0 0.0 0.0 fr 07_gas 1 189 0.0 0.0 0.0 fr 08_non-res 1 189 0.0 0.0 0.0 fr 09_hydro_pump 1 189 0.0 0.0 0.0 -fr 01_solar 1 190 2000.0 1.0 0.0 -fr 02_wind_on 1 190 100.0 1.0 0.0 +fr 01_solar 1 190 2000.0 0.0 1.0 +fr 02_wind_on 1 190 100.0 0.0 1.0 fr 03_wind_off 1 190 0.0 0.0 0.0 fr 04_res 1 190 0.0 0.0 0.0 fr 05_nuclear 1 190 0.0 0.0 0.0 @@ -4733,8 +4733,8 @@ fr 06_coal 1 190 0.0 0.0 0.0 fr 07_gas 1 190 0.0 0.0 0.0 fr 08_non-res 1 190 0.0 0.0 0.0 fr 09_hydro_pump 1 190 0.0 0.0 0.0 -fr 01_solar 1 191 2000.0 1.0 0.0 -fr 02_wind_on 1 191 200.0 1.0 0.0 +fr 01_solar 1 191 2000.0 0.0 1.0 +fr 02_wind_on 1 191 200.0 0.0 1.0 fr 03_wind_off 1 191 0.0 0.0 0.0 fr 04_res 1 191 0.0 0.0 0.0 fr 05_nuclear 1 191 0.0 0.0 0.0 @@ -4742,8 +4742,8 @@ fr 06_coal 1 191 0.0 0.0 0.0 fr 07_gas 1 191 0.0 0.0 0.0 fr 08_non-res 1 191 0.0 0.0 0.0 fr 09_hydro_pump 1 191 0.0 0.0 0.0 -fr 01_solar 1 192 2000.0 1.0 0.0 -fr 02_wind_on 1 192 300.0 1.0 0.0 +fr 01_solar 1 192 2000.0 0.0 1.0 +fr 02_wind_on 1 192 300.0 0.0 1.0 fr 03_wind_off 1 192 0.0 0.0 0.0 fr 04_res 1 192 0.0 0.0 0.0 fr 05_nuclear 1 192 0.0 0.0 0.0 @@ -4751,8 +4751,8 @@ fr 06_coal 1 192 0.0 0.0 0.0 fr 07_gas 1 192 0.0 0.0 0.0 fr 08_non-res 1 192 0.0 0.0 0.0 fr 09_hydro_pump 1 192 0.0 0.0 0.0 -fr 01_solar 1 193 2000.0 1.0 0.0 -fr 02_wind_on 1 193 400.0 1.0 0.0 +fr 01_solar 1 193 2000.0 0.0 1.0 +fr 02_wind_on 1 193 400.0 0.0 1.0 fr 03_wind_off 1 193 0.0 0.0 0.0 fr 04_res 1 193 0.0 0.0 0.0 fr 05_nuclear 1 193 0.0 0.0 0.0 @@ -4760,8 +4760,8 @@ fr 06_coal 1 193 0.0 0.0 0.0 fr 07_gas 1 193 0.0 0.0 0.0 fr 08_non-res 1 193 0.0 0.0 0.0 fr 09_hydro_pump 1 193 0.0 0.0 0.0 -fr 01_solar 1 194 2000.0 1.0 0.0 -fr 02_wind_on 1 194 500.0 1.0 0.0 +fr 01_solar 1 194 2000.0 0.0 1.0 +fr 02_wind_on 1 194 500.0 0.0 1.0 fr 03_wind_off 1 194 0.0 0.0 0.0 fr 04_res 1 194 0.0 0.0 0.0 fr 05_nuclear 1 194 0.0 0.0 0.0 @@ -4769,8 +4769,8 @@ fr 06_coal 1 194 0.0 0.0 0.0 fr 07_gas 1 194 0.0 0.0 0.0 fr 08_non-res 1 194 0.0 0.0 0.0 fr 09_hydro_pump 1 194 0.0 0.0 0.0 -fr 01_solar 1 195 2000.0 1.0 0.0 -fr 02_wind_on 1 195 600.0 1.0 0.0 +fr 01_solar 1 195 2000.0 0.0 1.0 +fr 02_wind_on 1 195 600.0 0.0 1.0 fr 03_wind_off 1 195 0.0 0.0 0.0 fr 04_res 1 195 0.0 0.0 0.0 fr 05_nuclear 1 195 0.0 0.0 0.0 @@ -4778,8 +4778,8 @@ fr 06_coal 1 195 0.0 0.0 0.0 fr 07_gas 1 195 0.0 0.0 0.0 fr 08_non-res 1 195 0.0 0.0 0.0 fr 09_hydro_pump 1 195 0.0 0.0 0.0 -fr 01_solar 1 196 2000.0 1.0 0.0 -fr 02_wind_on 1 196 700.0 1.0 0.0 +fr 01_solar 1 196 2000.0 0.0 1.0 +fr 02_wind_on 1 196 700.0 0.0 1.0 fr 03_wind_off 1 196 0.0 0.0 0.0 fr 04_res 1 196 0.0 0.0 0.0 fr 05_nuclear 1 196 0.0 0.0 0.0 @@ -4787,8 +4787,8 @@ fr 06_coal 1 196 0.0 0.0 0.0 fr 07_gas 1 196 0.0 0.0 0.0 fr 08_non-res 1 196 0.0 0.0 0.0 fr 09_hydro_pump 1 196 0.0 0.0 0.0 -fr 01_solar 1 197 2000.0 1.0 0.0 -fr 02_wind_on 1 197 800.0 1.0 0.0 +fr 01_solar 1 197 2000.0 0.0 1.0 +fr 02_wind_on 1 197 800.0 0.0 1.0 fr 03_wind_off 1 197 0.0 0.0 0.0 fr 04_res 1 197 0.0 0.0 0.0 fr 05_nuclear 1 197 0.0 0.0 0.0 @@ -4796,8 +4796,8 @@ fr 06_coal 1 197 0.0 0.0 0.0 fr 07_gas 1 197 0.0 0.0 0.0 fr 08_non-res 1 197 0.0 0.0 0.0 fr 09_hydro_pump 1 197 0.0 0.0 0.0 -fr 01_solar 1 198 2000.0 1.0 0.0 -fr 02_wind_on 1 198 900.0 1.0 0.0 +fr 01_solar 1 198 2000.0 0.0 1.0 +fr 02_wind_on 1 198 900.0 0.0 1.0 fr 03_wind_off 1 198 0.0 0.0 0.0 fr 04_res 1 198 0.0 0.0 0.0 fr 05_nuclear 1 198 0.0 0.0 0.0 @@ -4805,8 +4805,8 @@ fr 06_coal 1 198 0.0 0.0 0.0 fr 07_gas 1 198 0.0 0.0 0.0 fr 08_non-res 1 198 0.0 0.0 0.0 fr 09_hydro_pump 1 198 0.0 0.0 0.0 -fr 01_solar 1 199 2000.0 1.0 0.0 -fr 02_wind_on 1 199 1000.0 1.0 0.0 +fr 01_solar 1 199 2000.0 0.0 1.0 +fr 02_wind_on 1 199 1000.0 0.0 1.0 fr 03_wind_off 1 199 0.0 0.0 0.0 fr 04_res 1 199 0.0 0.0 0.0 fr 05_nuclear 1 199 0.0 0.0 0.0 @@ -4814,8 +4814,8 @@ fr 06_coal 1 199 0.0 0.0 0.0 fr 07_gas 1 199 0.0 0.0 0.0 fr 08_non-res 1 199 0.0 0.0 0.0 fr 09_hydro_pump 1 199 0.0 0.0 0.0 -fr 01_solar 1 200 2000.0 1.0 0.0 -fr 02_wind_on 1 200 1100.0 1.0 0.0 +fr 01_solar 1 200 2000.0 0.0 1.0 +fr 02_wind_on 1 200 1100.0 0.0 1.0 fr 03_wind_off 1 200 0.0 0.0 0.0 fr 04_res 1 200 0.0 0.0 0.0 fr 05_nuclear 1 200 0.0 0.0 0.0 @@ -4823,8 +4823,8 @@ fr 06_coal 1 200 0.0 0.0 0.0 fr 07_gas 1 200 0.0 0.0 0.0 fr 08_non-res 1 200 0.0 0.0 0.0 fr 09_hydro_pump 1 200 0.0 0.0 0.0 -fr 01_solar 1 201 2000.0 1.0 0.0 -fr 02_wind_on 1 201 1200.0 1.0 0.0 +fr 01_solar 1 201 2000.0 0.0 1.0 +fr 02_wind_on 1 201 1200.0 0.0 1.0 fr 03_wind_off 1 201 0.0 0.0 0.0 fr 04_res 1 201 0.0 0.0 0.0 fr 05_nuclear 1 201 0.0 0.0 0.0 @@ -4832,8 +4832,8 @@ fr 06_coal 1 201 0.0 0.0 0.0 fr 07_gas 1 201 0.0 0.0 0.0 fr 08_non-res 1 201 0.0 0.0 0.0 fr 09_hydro_pump 1 201 0.0 0.0 0.0 -fr 01_solar 1 202 2000.0 1.0 0.0 -fr 02_wind_on 1 202 1300.0 1.0 0.0 +fr 01_solar 1 202 2000.0 0.0 1.0 +fr 02_wind_on 1 202 1300.0 0.0 1.0 fr 03_wind_off 1 202 0.0 0.0 0.0 fr 04_res 1 202 0.0 0.0 0.0 fr 05_nuclear 1 202 0.0 0.0 0.0 @@ -4841,8 +4841,8 @@ fr 06_coal 1 202 0.0 0.0 0.0 fr 07_gas 1 202 0.0 0.0 0.0 fr 08_non-res 1 202 0.0 0.0 0.0 fr 09_hydro_pump 1 202 0.0 0.0 0.0 -fr 01_solar 1 203 2000.0 1.0 0.0 -fr 02_wind_on 1 203 1400.0 1.0 0.0 +fr 01_solar 1 203 2000.0 0.0 1.0 +fr 02_wind_on 1 203 1400.0 0.0 1.0 fr 03_wind_off 1 203 0.0 0.0 0.0 fr 04_res 1 203 0.0 0.0 0.0 fr 05_nuclear 1 203 0.0 0.0 0.0 @@ -4850,8 +4850,8 @@ fr 06_coal 1 203 0.0 0.0 0.0 fr 07_gas 1 203 0.0 0.0 0.0 fr 08_non-res 1 203 0.0 0.0 0.0 fr 09_hydro_pump 1 203 0.0 0.0 0.0 -fr 01_solar 1 204 2000.0 1.0 0.0 -fr 02_wind_on 1 204 1500.0 1.0 0.0 +fr 01_solar 1 204 2000.0 0.0 1.0 +fr 02_wind_on 1 204 1500.0 0.0 1.0 fr 03_wind_off 1 204 0.0 0.0 0.0 fr 04_res 1 204 0.0 0.0 0.0 fr 05_nuclear 1 204 0.0 0.0 0.0 @@ -4859,8 +4859,8 @@ fr 06_coal 1 204 0.0 0.0 0.0 fr 07_gas 1 204 0.0 0.0 0.0 fr 08_non-res 1 204 0.0 0.0 0.0 fr 09_hydro_pump 1 204 0.0 0.0 0.0 -fr 01_solar 1 205 2000.0 1.0 0.0 -fr 02_wind_on 1 205 1600.0 1.0 0.0 +fr 01_solar 1 205 2000.0 0.0 1.0 +fr 02_wind_on 1 205 1600.0 0.0 1.0 fr 03_wind_off 1 205 0.0 0.0 0.0 fr 04_res 1 205 0.0 0.0 0.0 fr 05_nuclear 1 205 0.0 0.0 0.0 @@ -4868,8 +4868,8 @@ fr 06_coal 1 205 0.0 0.0 0.0 fr 07_gas 1 205 0.0 0.0 0.0 fr 08_non-res 1 205 0.0 0.0 0.0 fr 09_hydro_pump 1 205 0.0 0.0 0.0 -fr 01_solar 1 206 2000.0 1.0 0.0 -fr 02_wind_on 1 206 1700.0 1.0 0.0 +fr 01_solar 1 206 2000.0 0.0 1.0 +fr 02_wind_on 1 206 1700.0 0.0 1.0 fr 03_wind_off 1 206 0.0 0.0 0.0 fr 04_res 1 206 0.0 0.0 0.0 fr 05_nuclear 1 206 0.0 0.0 0.0 @@ -4877,8 +4877,8 @@ fr 06_coal 1 206 0.0 0.0 0.0 fr 07_gas 1 206 0.0 0.0 0.0 fr 08_non-res 1 206 0.0 0.0 0.0 fr 09_hydro_pump 1 206 0.0 0.0 0.0 -fr 01_solar 1 207 2000.0 1.0 0.0 -fr 02_wind_on 1 207 1800.0 1.0 0.0 +fr 01_solar 1 207 2000.0 0.0 1.0 +fr 02_wind_on 1 207 1800.0 0.0 1.0 fr 03_wind_off 1 207 0.0 0.0 0.0 fr 04_res 1 207 0.0 0.0 0.0 fr 05_nuclear 1 207 0.0 0.0 0.0 @@ -4886,8 +4886,8 @@ fr 06_coal 1 207 0.0 0.0 0.0 fr 07_gas 1 207 0.0 0.0 0.0 fr 08_non-res 1 207 0.0 0.0 0.0 fr 09_hydro_pump 1 207 0.0 0.0 0.0 -fr 01_solar 1 208 2000.0 1.0 0.0 -fr 02_wind_on 1 208 1900.0 1.0 0.0 +fr 01_solar 1 208 2000.0 0.0 1.0 +fr 02_wind_on 1 208 1900.0 0.0 1.0 fr 03_wind_off 1 208 0.0 0.0 0.0 fr 04_res 1 208 0.0 0.0 0.0 fr 05_nuclear 1 208 0.0 0.0 0.0 @@ -4895,8 +4895,8 @@ fr 06_coal 1 208 0.0 0.0 0.0 fr 07_gas 1 208 0.0 0.0 0.0 fr 08_non-res 1 208 0.0 0.0 0.0 fr 09_hydro_pump 1 208 0.0 0.0 0.0 -fr 01_solar 1 209 2000.0 1.0 0.0 -fr 02_wind_on 1 209 2000.0 1.0 0.0 +fr 01_solar 1 209 2000.0 0.0 1.0 +fr 02_wind_on 1 209 2000.0 0.0 1.0 fr 03_wind_off 1 209 0.0 0.0 0.0 fr 04_res 1 209 0.0 0.0 0.0 fr 05_nuclear 1 209 0.0 0.0 0.0 @@ -4904,1149 +4904,1149 @@ fr 06_coal 1 209 0.0 0.0 0.0 fr 07_gas 1 209 0.0 0.0 0.0 fr 08_non-res 1 209 0.0 0.0 0.0 fr 09_hydro_pump 1 209 0.0 0.0 0.0 -fr 01_solar 1 210 2000.0 1.0 0.0 -fr 02_wind_on 1 210 2000.0 1.0 0.0 -fr 03_wind_off 1 210 100.0 1.0 0.0 +fr 01_solar 1 210 2000.0 0.0 1.0 +fr 02_wind_on 1 210 2000.0 0.0 1.0 +fr 03_wind_off 1 210 100.0 0.0 1.0 fr 04_res 1 210 0.0 0.0 0.0 fr 05_nuclear 1 210 0.0 0.0 0.0 fr 06_coal 1 210 0.0 0.0 0.0 fr 07_gas 1 210 0.0 0.0 0.0 fr 08_non-res 1 210 0.0 0.0 0.0 fr 09_hydro_pump 1 210 0.0 0.0 0.0 -fr 01_solar 1 211 2000.0 1.0 0.0 -fr 02_wind_on 1 211 2000.0 1.0 0.0 -fr 03_wind_off 1 211 200.0 1.0 0.0 +fr 01_solar 1 211 2000.0 0.0 1.0 +fr 02_wind_on 1 211 2000.0 0.0 1.0 +fr 03_wind_off 1 211 200.0 0.0 1.0 fr 04_res 1 211 0.0 0.0 0.0 fr 05_nuclear 1 211 0.0 0.0 0.0 fr 06_coal 1 211 0.0 0.0 0.0 fr 07_gas 1 211 0.0 0.0 0.0 fr 08_non-res 1 211 0.0 0.0 0.0 fr 09_hydro_pump 1 211 0.0 0.0 0.0 -fr 01_solar 1 212 2000.0 1.0 0.0 -fr 02_wind_on 1 212 2000.0 1.0 0.0 -fr 03_wind_off 1 212 300.0 1.0 0.0 +fr 01_solar 1 212 2000.0 0.0 1.0 +fr 02_wind_on 1 212 2000.0 0.0 1.0 +fr 03_wind_off 1 212 300.0 0.0 1.0 fr 04_res 1 212 0.0 0.0 0.0 fr 05_nuclear 1 212 0.0 0.0 0.0 fr 06_coal 1 212 0.0 0.0 0.0 fr 07_gas 1 212 0.0 0.0 0.0 fr 08_non-res 1 212 0.0 0.0 0.0 fr 09_hydro_pump 1 212 0.0 0.0 0.0 -fr 01_solar 1 213 2000.0 1.0 0.0 -fr 02_wind_on 1 213 2000.0 1.0 0.0 -fr 03_wind_off 1 213 400.0 1.0 0.0 +fr 01_solar 1 213 2000.0 0.0 1.0 +fr 02_wind_on 1 213 2000.0 0.0 1.0 +fr 03_wind_off 1 213 400.0 0.0 1.0 fr 04_res 1 213 0.0 0.0 0.0 fr 05_nuclear 1 213 0.0 0.0 0.0 fr 06_coal 1 213 0.0 0.0 0.0 fr 07_gas 1 213 0.0 0.0 0.0 fr 08_non-res 1 213 0.0 0.0 0.0 fr 09_hydro_pump 1 213 0.0 0.0 0.0 -fr 01_solar 1 214 2000.0 1.0 0.0 -fr 02_wind_on 1 214 2000.0 1.0 0.0 -fr 03_wind_off 1 214 500.0 1.0 0.0 +fr 01_solar 1 214 2000.0 0.0 1.0 +fr 02_wind_on 1 214 2000.0 0.0 1.0 +fr 03_wind_off 1 214 500.0 0.0 1.0 fr 04_res 1 214 0.0 0.0 0.0 fr 05_nuclear 1 214 0.0 0.0 0.0 fr 06_coal 1 214 0.0 0.0 0.0 fr 07_gas 1 214 0.0 0.0 0.0 fr 08_non-res 1 214 0.0 0.0 0.0 fr 09_hydro_pump 1 214 0.0 0.0 0.0 -fr 01_solar 1 215 2000.0 1.0 0.0 -fr 02_wind_on 1 215 2000.0 1.0 0.0 -fr 03_wind_off 1 215 600.0 1.0 0.0 +fr 01_solar 1 215 2000.0 0.0 1.0 +fr 02_wind_on 1 215 2000.0 0.0 1.0 +fr 03_wind_off 1 215 600.0 0.0 1.0 fr 04_res 1 215 0.0 0.0 0.0 fr 05_nuclear 1 215 0.0 0.0 0.0 fr 06_coal 1 215 0.0 0.0 0.0 fr 07_gas 1 215 0.0 0.0 0.0 fr 08_non-res 1 215 0.0 0.0 0.0 fr 09_hydro_pump 1 215 0.0 0.0 0.0 -fr 01_solar 1 216 2000.0 1.0 0.0 -fr 02_wind_on 1 216 2000.0 1.0 0.0 -fr 03_wind_off 1 216 700.0 1.0 0.0 +fr 01_solar 1 216 2000.0 0.0 1.0 +fr 02_wind_on 1 216 2000.0 0.0 1.0 +fr 03_wind_off 1 216 700.0 0.0 1.0 fr 04_res 1 216 0.0 0.0 0.0 fr 05_nuclear 1 216 0.0 0.0 0.0 fr 06_coal 1 216 0.0 0.0 0.0 fr 07_gas 1 216 0.0 0.0 0.0 fr 08_non-res 1 216 0.0 0.0 0.0 fr 09_hydro_pump 1 216 0.0 0.0 0.0 -fr 01_solar 1 217 2000.0 1.0 0.0 -fr 02_wind_on 1 217 2000.0 1.0 0.0 -fr 03_wind_off 1 217 800.0 1.0 0.0 +fr 01_solar 1 217 2000.0 0.0 1.0 +fr 02_wind_on 1 217 2000.0 0.0 1.0 +fr 03_wind_off 1 217 800.0 0.0 1.0 fr 04_res 1 217 0.0 0.0 0.0 fr 05_nuclear 1 217 0.0 0.0 0.0 fr 06_coal 1 217 0.0 0.0 0.0 fr 07_gas 1 217 0.0 0.0 0.0 fr 08_non-res 1 217 0.0 0.0 0.0 fr 09_hydro_pump 1 217 0.0 0.0 0.0 -fr 01_solar 1 218 2000.0 1.0 0.0 -fr 02_wind_on 1 218 2000.0 1.0 0.0 -fr 03_wind_off 1 218 900.0 1.0 0.0 +fr 01_solar 1 218 2000.0 0.0 1.0 +fr 02_wind_on 1 218 2000.0 0.0 1.0 +fr 03_wind_off 1 218 900.0 0.0 1.0 fr 04_res 1 218 0.0 0.0 0.0 fr 05_nuclear 1 218 0.0 0.0 0.0 fr 06_coal 1 218 0.0 0.0 0.0 fr 07_gas 1 218 0.0 0.0 0.0 fr 08_non-res 1 218 0.0 0.0 0.0 fr 09_hydro_pump 1 218 0.0 0.0 0.0 -fr 01_solar 1 219 2000.0 1.0 0.0 -fr 02_wind_on 1 219 2000.0 1.0 0.0 -fr 03_wind_off 1 219 1000.0 1.0 0.0 +fr 01_solar 1 219 2000.0 0.0 1.0 +fr 02_wind_on 1 219 2000.0 0.0 1.0 +fr 03_wind_off 1 219 1000.0 0.0 1.0 fr 04_res 1 219 0.0 0.0 0.0 fr 05_nuclear 1 219 0.0 0.0 0.0 fr 06_coal 1 219 0.0 0.0 0.0 fr 07_gas 1 219 0.0 0.0 0.0 fr 08_non-res 1 219 0.0 0.0 0.0 fr 09_hydro_pump 1 219 0.0 0.0 0.0 -fr 01_solar 1 220 2000.0 1.0 0.0 -fr 02_wind_on 1 220 2000.0 1.0 0.0 -fr 03_wind_off 1 220 1100.0 1.0 0.0 +fr 01_solar 1 220 2000.0 0.0 1.0 +fr 02_wind_on 1 220 2000.0 0.0 1.0 +fr 03_wind_off 1 220 1100.0 0.0 1.0 fr 04_res 1 220 0.0 0.0 0.0 fr 05_nuclear 1 220 0.0 0.0 0.0 fr 06_coal 1 220 0.0 0.0 0.0 fr 07_gas 1 220 0.0 0.0 0.0 fr 08_non-res 1 220 0.0 0.0 0.0 fr 09_hydro_pump 1 220 0.0 0.0 0.0 -fr 01_solar 1 221 2000.0 1.0 0.0 -fr 02_wind_on 1 221 2000.0 1.0 0.0 -fr 03_wind_off 1 221 1200.0 1.0 0.0 +fr 01_solar 1 221 2000.0 0.0 1.0 +fr 02_wind_on 1 221 2000.0 0.0 1.0 +fr 03_wind_off 1 221 1200.0 0.0 1.0 fr 04_res 1 221 0.0 0.0 0.0 fr 05_nuclear 1 221 0.0 0.0 0.0 fr 06_coal 1 221 0.0 0.0 0.0 fr 07_gas 1 221 0.0 0.0 0.0 fr 08_non-res 1 221 0.0 0.0 0.0 fr 09_hydro_pump 1 221 0.0 0.0 0.0 -fr 01_solar 1 222 2000.0 1.0 0.0 -fr 02_wind_on 1 222 2000.0 1.0 0.0 -fr 03_wind_off 1 222 1300.0 1.0 0.0 +fr 01_solar 1 222 2000.0 0.0 1.0 +fr 02_wind_on 1 222 2000.0 0.0 1.0 +fr 03_wind_off 1 222 1300.0 0.0 1.0 fr 04_res 1 222 0.0 0.0 0.0 fr 05_nuclear 1 222 0.0 0.0 0.0 fr 06_coal 1 222 0.0 0.0 0.0 fr 07_gas 1 222 0.0 0.0 0.0 fr 08_non-res 1 222 0.0 0.0 0.0 fr 09_hydro_pump 1 222 0.0 0.0 0.0 -fr 01_solar 1 223 2000.0 1.0 0.0 -fr 02_wind_on 1 223 2000.0 1.0 0.0 -fr 03_wind_off 1 223 1400.0 1.0 0.0 +fr 01_solar 1 223 2000.0 0.0 1.0 +fr 02_wind_on 1 223 2000.0 0.0 1.0 +fr 03_wind_off 1 223 1400.0 0.0 1.0 fr 04_res 1 223 0.0 0.0 0.0 fr 05_nuclear 1 223 0.0 0.0 0.0 fr 06_coal 1 223 0.0 0.0 0.0 fr 07_gas 1 223 0.0 0.0 0.0 fr 08_non-res 1 223 0.0 0.0 0.0 fr 09_hydro_pump 1 223 0.0 0.0 0.0 -fr 01_solar 1 224 2000.0 1.0 0.0 -fr 02_wind_on 1 224 2000.0 1.0 0.0 -fr 03_wind_off 1 224 1500.0 1.0 0.0 +fr 01_solar 1 224 2000.0 0.0 1.0 +fr 02_wind_on 1 224 2000.0 0.0 1.0 +fr 03_wind_off 1 224 1500.0 0.0 1.0 fr 04_res 1 224 0.0 0.0 0.0 fr 05_nuclear 1 224 0.0 0.0 0.0 fr 06_coal 1 224 0.0 0.0 0.0 fr 07_gas 1 224 0.0 0.0 0.0 fr 08_non-res 1 224 0.0 0.0 0.0 fr 09_hydro_pump 1 224 0.0 0.0 0.0 -fr 01_solar 1 225 2000.0 1.0 0.0 -fr 02_wind_on 1 225 2000.0 1.0 0.0 -fr 03_wind_off 1 225 1600.0 1.0 0.0 +fr 01_solar 1 225 2000.0 0.0 1.0 +fr 02_wind_on 1 225 2000.0 0.0 1.0 +fr 03_wind_off 1 225 1600.0 0.0 1.0 fr 04_res 1 225 0.0 0.0 0.0 fr 05_nuclear 1 225 0.0 0.0 0.0 fr 06_coal 1 225 0.0 0.0 0.0 fr 07_gas 1 225 0.0 0.0 0.0 fr 08_non-res 1 225 0.0 0.0 0.0 fr 09_hydro_pump 1 225 0.0 0.0 0.0 -fr 01_solar 1 226 2000.0 1.0 0.0 -fr 02_wind_on 1 226 2000.0 1.0 0.0 -fr 03_wind_off 1 226 1700.0 1.0 0.0 +fr 01_solar 1 226 2000.0 0.0 1.0 +fr 02_wind_on 1 226 2000.0 0.0 1.0 +fr 03_wind_off 1 226 1700.0 0.0 1.0 fr 04_res 1 226 0.0 0.0 0.0 fr 05_nuclear 1 226 0.0 0.0 0.0 fr 06_coal 1 226 0.0 0.0 0.0 fr 07_gas 1 226 0.0 0.0 0.0 fr 08_non-res 1 226 0.0 0.0 0.0 fr 09_hydro_pump 1 226 0.0 0.0 0.0 -fr 01_solar 1 227 2000.0 1.0 0.0 -fr 02_wind_on 1 227 2000.0 1.0 0.0 -fr 03_wind_off 1 227 1800.0 1.0 0.0 +fr 01_solar 1 227 2000.0 0.0 1.0 +fr 02_wind_on 1 227 2000.0 0.0 1.0 +fr 03_wind_off 1 227 1800.0 0.0 1.0 fr 04_res 1 227 0.0 0.0 0.0 fr 05_nuclear 1 227 0.0 0.0 0.0 fr 06_coal 1 227 0.0 0.0 0.0 fr 07_gas 1 227 0.0 0.0 0.0 fr 08_non-res 1 227 0.0 0.0 0.0 fr 09_hydro_pump 1 227 0.0 0.0 0.0 -fr 01_solar 1 228 2000.0 1.0 0.0 -fr 02_wind_on 1 228 2000.0 1.0 0.0 -fr 03_wind_off 1 228 1900.0 1.0 0.0 +fr 01_solar 1 228 2000.0 0.0 1.0 +fr 02_wind_on 1 228 2000.0 0.0 1.0 +fr 03_wind_off 1 228 1900.0 0.0 1.0 fr 04_res 1 228 0.0 0.0 0.0 fr 05_nuclear 1 228 0.0 0.0 0.0 fr 06_coal 1 228 0.0 0.0 0.0 fr 07_gas 1 228 0.0 0.0 0.0 fr 08_non-res 1 228 0.0 0.0 0.0 fr 09_hydro_pump 1 228 0.0 0.0 0.0 -fr 01_solar 1 229 2000.0 1.0 0.0 -fr 02_wind_on 1 229 2000.0 1.0 0.0 -fr 03_wind_off 1 229 2000.0 1.0 0.0 +fr 01_solar 1 229 2000.0 0.0 1.0 +fr 02_wind_on 1 229 2000.0 0.0 1.0 +fr 03_wind_off 1 229 2000.0 0.0 1.0 fr 04_res 1 229 0.0 0.0 0.0 fr 05_nuclear 1 229 0.0 0.0 0.0 fr 06_coal 1 229 0.0 0.0 0.0 fr 07_gas 1 229 0.0 0.0 0.0 fr 08_non-res 1 229 0.0 0.0 0.0 fr 09_hydro_pump 1 229 0.0 0.0 0.0 -fr 01_solar 1 230 2000.0 1.0 0.0 -fr 02_wind_on 1 230 2000.0 1.0 0.0 -fr 03_wind_off 1 230 2000.0 1.0 0.0 -fr 04_res 1 230 100.0 1.0 0.0 +fr 01_solar 1 230 2000.0 0.0 1.0 +fr 02_wind_on 1 230 2000.0 0.0 1.0 +fr 03_wind_off 1 230 2000.0 0.0 1.0 +fr 04_res 1 230 100.0 0.0 1.0 fr 05_nuclear 1 230 0.0 0.0 0.0 fr 06_coal 1 230 0.0 0.0 0.0 fr 07_gas 1 230 0.0 0.0 0.0 fr 08_non-res 1 230 0.0 0.0 0.0 fr 09_hydro_pump 1 230 0.0 0.0 0.0 -fr 01_solar 1 231 2000.0 1.0 0.0 -fr 02_wind_on 1 231 2000.0 1.0 0.0 -fr 03_wind_off 1 231 2000.0 1.0 0.0 -fr 04_res 1 231 200.0 1.0 0.0 +fr 01_solar 1 231 2000.0 0.0 1.0 +fr 02_wind_on 1 231 2000.0 0.0 1.0 +fr 03_wind_off 1 231 2000.0 0.0 1.0 +fr 04_res 1 231 200.0 0.0 1.0 fr 05_nuclear 1 231 0.0 0.0 0.0 fr 06_coal 1 231 0.0 0.0 0.0 fr 07_gas 1 231 0.0 0.0 0.0 fr 08_non-res 1 231 0.0 0.0 0.0 fr 09_hydro_pump 1 231 0.0 0.0 0.0 -fr 01_solar 1 232 2000.0 1.0 0.0 -fr 02_wind_on 1 232 2000.0 1.0 0.0 -fr 03_wind_off 1 232 2000.0 1.0 0.0 -fr 04_res 1 232 300.0 1.0 0.0 +fr 01_solar 1 232 2000.0 0.0 1.0 +fr 02_wind_on 1 232 2000.0 0.0 1.0 +fr 03_wind_off 1 232 2000.0 0.0 1.0 +fr 04_res 1 232 300.0 0.0 1.0 fr 05_nuclear 1 232 0.0 0.0 0.0 fr 06_coal 1 232 0.0 0.0 0.0 fr 07_gas 1 232 0.0 0.0 0.0 fr 08_non-res 1 232 0.0 0.0 0.0 fr 09_hydro_pump 1 232 0.0 0.0 0.0 -fr 01_solar 1 233 2000.0 1.0 0.0 -fr 02_wind_on 1 233 2000.0 1.0 0.0 -fr 03_wind_off 1 233 2000.0 1.0 0.0 -fr 04_res 1 233 400.0 1.0 0.0 +fr 01_solar 1 233 2000.0 0.0 1.0 +fr 02_wind_on 1 233 2000.0 0.0 1.0 +fr 03_wind_off 1 233 2000.0 0.0 1.0 +fr 04_res 1 233 400.0 0.0 1.0 fr 05_nuclear 1 233 0.0 0.0 0.0 fr 06_coal 1 233 0.0 0.0 0.0 fr 07_gas 1 233 0.0 0.0 0.0 fr 08_non-res 1 233 0.0 0.0 0.0 fr 09_hydro_pump 1 233 0.0 0.0 0.0 -fr 01_solar 1 234 2000.0 1.0 0.0 -fr 02_wind_on 1 234 2000.0 1.0 0.0 -fr 03_wind_off 1 234 2000.0 1.0 0.0 -fr 04_res 1 234 500.0 1.0 0.0 +fr 01_solar 1 234 2000.0 0.0 1.0 +fr 02_wind_on 1 234 2000.0 0.0 1.0 +fr 03_wind_off 1 234 2000.0 0.0 1.0 +fr 04_res 1 234 500.0 0.0 1.0 fr 05_nuclear 1 234 0.0 0.0 0.0 fr 06_coal 1 234 0.0 0.0 0.0 fr 07_gas 1 234 0.0 0.0 0.0 fr 08_non-res 1 234 0.0 0.0 0.0 fr 09_hydro_pump 1 234 0.0 0.0 0.0 -fr 01_solar 1 235 2000.0 1.0 0.0 -fr 02_wind_on 1 235 2000.0 1.0 0.0 -fr 03_wind_off 1 235 2000.0 1.0 0.0 -fr 04_res 1 235 600.0 1.0 0.0 +fr 01_solar 1 235 2000.0 0.0 1.0 +fr 02_wind_on 1 235 2000.0 0.0 1.0 +fr 03_wind_off 1 235 2000.0 0.0 1.0 +fr 04_res 1 235 600.0 0.0 1.0 fr 05_nuclear 1 235 0.0 0.0 0.0 fr 06_coal 1 235 0.0 0.0 0.0 fr 07_gas 1 235 0.0 0.0 0.0 fr 08_non-res 1 235 0.0 0.0 0.0 fr 09_hydro_pump 1 235 0.0 0.0 0.0 -fr 01_solar 1 236 2000.0 1.0 0.0 -fr 02_wind_on 1 236 2000.0 1.0 0.0 -fr 03_wind_off 1 236 2000.0 1.0 0.0 -fr 04_res 1 236 700.0 1.0 0.0 +fr 01_solar 1 236 2000.0 0.0 1.0 +fr 02_wind_on 1 236 2000.0 0.0 1.0 +fr 03_wind_off 1 236 2000.0 0.0 1.0 +fr 04_res 1 236 700.0 0.0 1.0 fr 05_nuclear 1 236 0.0 0.0 0.0 fr 06_coal 1 236 0.0 0.0 0.0 fr 07_gas 1 236 0.0 0.0 0.0 fr 08_non-res 1 236 0.0 0.0 0.0 fr 09_hydro_pump 1 236 0.0 0.0 0.0 -fr 01_solar 1 237 2000.0 1.0 0.0 -fr 02_wind_on 1 237 2000.0 1.0 0.0 -fr 03_wind_off 1 237 2000.0 1.0 0.0 -fr 04_res 1 237 800.0 1.0 0.0 +fr 01_solar 1 237 2000.0 0.0 1.0 +fr 02_wind_on 1 237 2000.0 0.0 1.0 +fr 03_wind_off 1 237 2000.0 0.0 1.0 +fr 04_res 1 237 800.0 0.0 1.0 fr 05_nuclear 1 237 0.0 0.0 0.0 fr 06_coal 1 237 0.0 0.0 0.0 fr 07_gas 1 237 0.0 0.0 0.0 fr 08_non-res 1 237 0.0 0.0 0.0 fr 09_hydro_pump 1 237 0.0 0.0 0.0 -fr 01_solar 1 238 2000.0 1.0 0.0 -fr 02_wind_on 1 238 2000.0 1.0 0.0 -fr 03_wind_off 1 238 2000.0 1.0 0.0 -fr 04_res 1 238 900.0 1.0 0.0 +fr 01_solar 1 238 2000.0 0.0 1.0 +fr 02_wind_on 1 238 2000.0 0.0 1.0 +fr 03_wind_off 1 238 2000.0 0.0 1.0 +fr 04_res 1 238 900.0 0.0 1.0 fr 05_nuclear 1 238 0.0 0.0 0.0 fr 06_coal 1 238 0.0 0.0 0.0 fr 07_gas 1 238 0.0 0.0 0.0 fr 08_non-res 1 238 0.0 0.0 0.0 fr 09_hydro_pump 1 238 0.0 0.0 0.0 -fr 01_solar 1 239 2000.0 1.0 0.0 -fr 02_wind_on 1 239 2000.0 1.0 0.0 -fr 03_wind_off 1 239 2000.0 1.0 0.0 -fr 04_res 1 239 1000.0 1.0 0.0 +fr 01_solar 1 239 2000.0 0.0 1.0 +fr 02_wind_on 1 239 2000.0 0.0 1.0 +fr 03_wind_off 1 239 2000.0 0.0 1.0 +fr 04_res 1 239 1000.0 0.0 1.0 fr 05_nuclear 1 239 0.0 0.0 0.0 fr 06_coal 1 239 0.0 0.0 0.0 fr 07_gas 1 239 0.0 0.0 0.0 fr 08_non-res 1 239 0.0 0.0 0.0 fr 09_hydro_pump 1 239 0.0 0.0 0.0 -fr 01_solar 1 240 2000.0 1.0 0.0 -fr 02_wind_on 1 240 2000.0 1.0 0.0 -fr 03_wind_off 1 240 2000.0 1.0 0.0 -fr 04_res 1 240 1100.0 1.0 0.0 +fr 01_solar 1 240 2000.0 0.0 1.0 +fr 02_wind_on 1 240 2000.0 0.0 1.0 +fr 03_wind_off 1 240 2000.0 0.0 1.0 +fr 04_res 1 240 1100.0 0.0 1.0 fr 05_nuclear 1 240 0.0 0.0 0.0 fr 06_coal 1 240 0.0 0.0 0.0 fr 07_gas 1 240 0.0 0.0 0.0 fr 08_non-res 1 240 0.0 0.0 0.0 fr 09_hydro_pump 1 240 0.0 0.0 0.0 -fr 01_solar 1 241 2000.0 1.0 0.0 -fr 02_wind_on 1 241 2000.0 1.0 0.0 -fr 03_wind_off 1 241 2000.0 1.0 0.0 -fr 04_res 1 241 1200.0 1.0 0.0 +fr 01_solar 1 241 2000.0 0.0 1.0 +fr 02_wind_on 1 241 2000.0 0.0 1.0 +fr 03_wind_off 1 241 2000.0 0.0 1.0 +fr 04_res 1 241 1200.0 0.0 1.0 fr 05_nuclear 1 241 0.0 0.0 0.0 fr 06_coal 1 241 0.0 0.0 0.0 fr 07_gas 1 241 0.0 0.0 0.0 fr 08_non-res 1 241 0.0 0.0 0.0 fr 09_hydro_pump 1 241 0.0 0.0 0.0 -fr 01_solar 1 242 2000.0 1.0 0.0 -fr 02_wind_on 1 242 2000.0 1.0 0.0 -fr 03_wind_off 1 242 2000.0 1.0 0.0 -fr 04_res 1 242 1300.0 1.0 0.0 +fr 01_solar 1 242 2000.0 0.0 1.0 +fr 02_wind_on 1 242 2000.0 0.0 1.0 +fr 03_wind_off 1 242 2000.0 0.0 1.0 +fr 04_res 1 242 1300.0 0.0 1.0 fr 05_nuclear 1 242 0.0 0.0 0.0 fr 06_coal 1 242 0.0 0.0 0.0 fr 07_gas 1 242 0.0 0.0 0.0 fr 08_non-res 1 242 0.0 0.0 0.0 fr 09_hydro_pump 1 242 0.0 0.0 0.0 -fr 01_solar 1 243 2000.0 1.0 0.0 -fr 02_wind_on 1 243 2000.0 1.0 0.0 -fr 03_wind_off 1 243 2000.0 1.0 0.0 -fr 04_res 1 243 1400.0 1.0 0.0 +fr 01_solar 1 243 2000.0 0.0 1.0 +fr 02_wind_on 1 243 2000.0 0.0 1.0 +fr 03_wind_off 1 243 2000.0 0.0 1.0 +fr 04_res 1 243 1400.0 0.0 1.0 fr 05_nuclear 1 243 0.0 0.0 0.0 fr 06_coal 1 243 0.0 0.0 0.0 fr 07_gas 1 243 0.0 0.0 0.0 fr 08_non-res 1 243 0.0 0.0 0.0 fr 09_hydro_pump 1 243 0.0 0.0 0.0 -fr 01_solar 1 244 2000.0 1.0 0.0 -fr 02_wind_on 1 244 2000.0 1.0 0.0 -fr 03_wind_off 1 244 2000.0 1.0 0.0 -fr 04_res 1 244 1500.0 1.0 0.0 +fr 01_solar 1 244 2000.0 0.0 1.0 +fr 02_wind_on 1 244 2000.0 0.0 1.0 +fr 03_wind_off 1 244 2000.0 0.0 1.0 +fr 04_res 1 244 1500.0 0.0 1.0 fr 05_nuclear 1 244 0.0 0.0 0.0 fr 06_coal 1 244 0.0 0.0 0.0 fr 07_gas 1 244 0.0 0.0 0.0 fr 08_non-res 1 244 0.0 0.0 0.0 fr 09_hydro_pump 1 244 0.0 0.0 0.0 -fr 01_solar 1 245 2000.0 1.0 0.0 -fr 02_wind_on 1 245 2000.0 1.0 0.0 -fr 03_wind_off 1 245 2000.0 1.0 0.0 -fr 04_res 1 245 1600.0 1.0 0.0 +fr 01_solar 1 245 2000.0 0.0 1.0 +fr 02_wind_on 1 245 2000.0 0.0 1.0 +fr 03_wind_off 1 245 2000.0 0.0 1.0 +fr 04_res 1 245 1600.0 0.0 1.0 fr 05_nuclear 1 245 0.0 0.0 0.0 fr 06_coal 1 245 0.0 0.0 0.0 fr 07_gas 1 245 0.0 0.0 0.0 fr 08_non-res 1 245 0.0 0.0 0.0 fr 09_hydro_pump 1 245 0.0 0.0 0.0 -fr 01_solar 1 246 2000.0 1.0 0.0 -fr 02_wind_on 1 246 2000.0 1.0 0.0 -fr 03_wind_off 1 246 2000.0 1.0 0.0 -fr 04_res 1 246 1700.0 1.0 0.0 +fr 01_solar 1 246 2000.0 0.0 1.0 +fr 02_wind_on 1 246 2000.0 0.0 1.0 +fr 03_wind_off 1 246 2000.0 0.0 1.0 +fr 04_res 1 246 1700.0 0.0 1.0 fr 05_nuclear 1 246 0.0 0.0 0.0 fr 06_coal 1 246 0.0 0.0 0.0 fr 07_gas 1 246 0.0 0.0 0.0 fr 08_non-res 1 246 0.0 0.0 0.0 fr 09_hydro_pump 1 246 0.0 0.0 0.0 -fr 01_solar 1 247 2000.0 1.0 0.0 -fr 02_wind_on 1 247 2000.0 1.0 0.0 -fr 03_wind_off 1 247 2000.0 1.0 0.0 -fr 04_res 1 247 1800.0 1.0 0.0 +fr 01_solar 1 247 2000.0 0.0 1.0 +fr 02_wind_on 1 247 2000.0 0.0 1.0 +fr 03_wind_off 1 247 2000.0 0.0 1.0 +fr 04_res 1 247 1800.0 0.0 1.0 fr 05_nuclear 1 247 0.0 0.0 0.0 fr 06_coal 1 247 0.0 0.0 0.0 fr 07_gas 1 247 0.0 0.0 0.0 fr 08_non-res 1 247 0.0 0.0 0.0 fr 09_hydro_pump 1 247 0.0 0.0 0.0 -fr 01_solar 1 248 2000.0 1.0 0.0 -fr 02_wind_on 1 248 2000.0 1.0 0.0 -fr 03_wind_off 1 248 2000.0 1.0 0.0 -fr 04_res 1 248 1900.0 1.0 0.0 +fr 01_solar 1 248 2000.0 0.0 1.0 +fr 02_wind_on 1 248 2000.0 0.0 1.0 +fr 03_wind_off 1 248 2000.0 0.0 1.0 +fr 04_res 1 248 1900.0 0.0 1.0 fr 05_nuclear 1 248 0.0 0.0 0.0 fr 06_coal 1 248 0.0 0.0 0.0 fr 07_gas 1 248 0.0 0.0 0.0 fr 08_non-res 1 248 0.0 0.0 0.0 fr 09_hydro_pump 1 248 0.0 0.0 0.0 -fr 01_solar 1 249 2000.0 1.0 0.0 -fr 02_wind_on 1 249 2000.0 1.0 0.0 -fr 03_wind_off 1 249 2000.0 1.0 0.0 -fr 04_res 1 249 2000.0 1.0 0.0 +fr 01_solar 1 249 2000.0 0.0 1.0 +fr 02_wind_on 1 249 2000.0 0.0 1.0 +fr 03_wind_off 1 249 2000.0 0.0 1.0 +fr 04_res 1 249 2000.0 0.0 1.0 fr 05_nuclear 1 249 0.0 0.0 0.0 fr 06_coal 1 249 0.0 0.0 0.0 fr 07_gas 1 249 0.0 0.0 0.0 fr 08_non-res 1 249 0.0 0.0 0.0 fr 09_hydro_pump 1 249 0.0 0.0 0.0 -fr 01_solar 1 250 2000.0 1.0 0.0 -fr 02_wind_on 1 250 2000.0 1.0 0.0 -fr 03_wind_off 1 250 2000.0 1.0 0.0 -fr 04_res 1 250 2000.0 1.0 0.0 -fr 05_nuclear 1 250 100.0 1.0 0.0 +fr 01_solar 1 250 2000.0 0.0 1.0 +fr 02_wind_on 1 250 2000.0 0.0 1.0 +fr 03_wind_off 1 250 2000.0 0.0 1.0 +fr 04_res 1 250 2000.0 0.0 1.0 +fr 05_nuclear 1 250 100.0 0.0 1.0 fr 06_coal 1 250 0.0 0.0 0.0 fr 07_gas 1 250 0.0 0.0 0.0 fr 08_non-res 1 250 0.0 0.0 0.0 fr 09_hydro_pump 1 250 0.0 0.0 0.0 -fr 01_solar 1 251 2000.0 1.0 0.0 -fr 02_wind_on 1 251 2000.0 1.0 0.0 -fr 03_wind_off 1 251 2000.0 1.0 0.0 -fr 04_res 1 251 2000.0 1.0 0.0 -fr 05_nuclear 1 251 200.0 1.0 0.0 +fr 01_solar 1 251 2000.0 0.0 1.0 +fr 02_wind_on 1 251 2000.0 0.0 1.0 +fr 03_wind_off 1 251 2000.0 0.0 1.0 +fr 04_res 1 251 2000.0 0.0 1.0 +fr 05_nuclear 1 251 200.0 0.0 1.0 fr 06_coal 1 251 0.0 0.0 0.0 fr 07_gas 1 251 0.0 0.0 0.0 fr 08_non-res 1 251 0.0 0.0 0.0 fr 09_hydro_pump 1 251 0.0 0.0 0.0 -fr 01_solar 1 252 2000.0 1.0 0.0 -fr 02_wind_on 1 252 2000.0 1.0 0.0 -fr 03_wind_off 1 252 2000.0 1.0 0.0 -fr 04_res 1 252 2000.0 1.0 0.0 -fr 05_nuclear 1 252 300.0 1.0 0.0 +fr 01_solar 1 252 2000.0 0.0 1.0 +fr 02_wind_on 1 252 2000.0 0.0 1.0 +fr 03_wind_off 1 252 2000.0 0.0 1.0 +fr 04_res 1 252 2000.0 0.0 1.0 +fr 05_nuclear 1 252 300.0 0.0 1.0 fr 06_coal 1 252 0.0 0.0 0.0 fr 07_gas 1 252 0.0 0.0 0.0 fr 08_non-res 1 252 0.0 0.0 0.0 fr 09_hydro_pump 1 252 0.0 0.0 0.0 -fr 01_solar 1 253 2000.0 1.0 0.0 -fr 02_wind_on 1 253 2000.0 1.0 0.0 -fr 03_wind_off 1 253 2000.0 1.0 0.0 -fr 04_res 1 253 2000.0 1.0 0.0 -fr 05_nuclear 1 253 400.0 1.0 0.0 +fr 01_solar 1 253 2000.0 0.0 1.0 +fr 02_wind_on 1 253 2000.0 0.0 1.0 +fr 03_wind_off 1 253 2000.0 0.0 1.0 +fr 04_res 1 253 2000.0 0.0 1.0 +fr 05_nuclear 1 253 400.0 0.0 1.0 fr 06_coal 1 253 0.0 0.0 0.0 fr 07_gas 1 253 0.0 0.0 0.0 fr 08_non-res 1 253 0.0 0.0 0.0 fr 09_hydro_pump 1 253 0.0 0.0 0.0 -fr 01_solar 1 254 2000.0 1.0 0.0 -fr 02_wind_on 1 254 2000.0 1.0 0.0 -fr 03_wind_off 1 254 2000.0 1.0 0.0 -fr 04_res 1 254 2000.0 1.0 0.0 -fr 05_nuclear 1 254 500.0 1.0 0.0 +fr 01_solar 1 254 2000.0 0.0 1.0 +fr 02_wind_on 1 254 2000.0 0.0 1.0 +fr 03_wind_off 1 254 2000.0 0.0 1.0 +fr 04_res 1 254 2000.0 0.0 1.0 +fr 05_nuclear 1 254 500.0 0.0 1.0 fr 06_coal 1 254 0.0 0.0 0.0 fr 07_gas 1 254 0.0 0.0 0.0 fr 08_non-res 1 254 0.0 0.0 0.0 fr 09_hydro_pump 1 254 0.0 0.0 0.0 -fr 01_solar 1 255 2000.0 1.0 0.0 -fr 02_wind_on 1 255 2000.0 1.0 0.0 -fr 03_wind_off 1 255 2000.0 1.0 0.0 -fr 04_res 1 255 2000.0 1.0 0.0 -fr 05_nuclear 1 255 600.0 1.0 0.0 +fr 01_solar 1 255 2000.0 0.0 1.0 +fr 02_wind_on 1 255 2000.0 0.0 1.0 +fr 03_wind_off 1 255 2000.0 0.0 1.0 +fr 04_res 1 255 2000.0 0.0 1.0 +fr 05_nuclear 1 255 600.0 0.0 1.0 fr 06_coal 1 255 0.0 0.0 0.0 fr 07_gas 1 255 0.0 0.0 0.0 fr 08_non-res 1 255 0.0 0.0 0.0 fr 09_hydro_pump 1 255 0.0 0.0 0.0 -fr 01_solar 1 256 2000.0 1.0 0.0 -fr 02_wind_on 1 256 2000.0 1.0 0.0 -fr 03_wind_off 1 256 2000.0 1.0 0.0 -fr 04_res 1 256 2000.0 1.0 0.0 -fr 05_nuclear 1 256 700.0 1.0 0.0 +fr 01_solar 1 256 2000.0 0.0 1.0 +fr 02_wind_on 1 256 2000.0 0.0 1.0 +fr 03_wind_off 1 256 2000.0 0.0 1.0 +fr 04_res 1 256 2000.0 0.0 1.0 +fr 05_nuclear 1 256 700.0 0.0 1.0 fr 06_coal 1 256 0.0 0.0 0.0 fr 07_gas 1 256 0.0 0.0 0.0 fr 08_non-res 1 256 0.0 0.0 0.0 fr 09_hydro_pump 1 256 0.0 0.0 0.0 -fr 01_solar 1 257 2000.0 1.0 0.0 -fr 02_wind_on 1 257 2000.0 1.0 0.0 -fr 03_wind_off 1 257 2000.0 1.0 0.0 -fr 04_res 1 257 2000.0 1.0 0.0 -fr 05_nuclear 1 257 800.0 1.0 0.0 +fr 01_solar 1 257 2000.0 0.0 1.0 +fr 02_wind_on 1 257 2000.0 0.0 1.0 +fr 03_wind_off 1 257 2000.0 0.0 1.0 +fr 04_res 1 257 2000.0 0.0 1.0 +fr 05_nuclear 1 257 800.0 0.0 1.0 fr 06_coal 1 257 0.0 0.0 0.0 fr 07_gas 1 257 0.0 0.0 0.0 fr 08_non-res 1 257 0.0 0.0 0.0 fr 09_hydro_pump 1 257 0.0 0.0 0.0 -fr 01_solar 1 258 2000.0 1.0 0.0 -fr 02_wind_on 1 258 2000.0 1.0 0.0 -fr 03_wind_off 1 258 2000.0 1.0 0.0 -fr 04_res 1 258 2000.0 1.0 0.0 -fr 05_nuclear 1 258 900.0 1.0 0.0 +fr 01_solar 1 258 2000.0 0.0 1.0 +fr 02_wind_on 1 258 2000.0 0.0 1.0 +fr 03_wind_off 1 258 2000.0 0.0 1.0 +fr 04_res 1 258 2000.0 0.0 1.0 +fr 05_nuclear 1 258 900.0 0.0 1.0 fr 06_coal 1 258 0.0 0.0 0.0 fr 07_gas 1 258 0.0 0.0 0.0 fr 08_non-res 1 258 0.0 0.0 0.0 fr 09_hydro_pump 1 258 0.0 0.0 0.0 -fr 01_solar 1 259 2000.0 1.0 0.0 -fr 02_wind_on 1 259 2000.0 1.0 0.0 -fr 03_wind_off 1 259 2000.0 1.0 0.0 -fr 04_res 1 259 2000.0 1.0 0.0 -fr 05_nuclear 1 259 1000.0 1.0 0.0 +fr 01_solar 1 259 2000.0 0.0 1.0 +fr 02_wind_on 1 259 2000.0 0.0 1.0 +fr 03_wind_off 1 259 2000.0 0.0 1.0 +fr 04_res 1 259 2000.0 0.0 1.0 +fr 05_nuclear 1 259 1000.0 0.0 1.0 fr 06_coal 1 259 0.0 0.0 0.0 fr 07_gas 1 259 0.0 0.0 0.0 fr 08_non-res 1 259 0.0 0.0 0.0 fr 09_hydro_pump 1 259 0.0 0.0 0.0 -fr 01_solar 1 260 2000.0 1.0 0.0 -fr 02_wind_on 1 260 2000.0 1.0 0.0 -fr 03_wind_off 1 260 2000.0 1.0 0.0 -fr 04_res 1 260 2000.0 1.0 0.0 -fr 05_nuclear 1 260 1100.0 1.0 0.0 +fr 01_solar 1 260 2000.0 0.0 1.0 +fr 02_wind_on 1 260 2000.0 0.0 1.0 +fr 03_wind_off 1 260 2000.0 0.0 1.0 +fr 04_res 1 260 2000.0 0.0 1.0 +fr 05_nuclear 1 260 1100.0 0.0 1.0 fr 06_coal 1 260 0.0 0.0 0.0 fr 07_gas 1 260 0.0 0.0 0.0 fr 08_non-res 1 260 0.0 0.0 0.0 fr 09_hydro_pump 1 260 0.0 0.0 0.0 -fr 01_solar 1 261 2000.0 1.0 0.0 -fr 02_wind_on 1 261 2000.0 1.0 0.0 -fr 03_wind_off 1 261 2000.0 1.0 0.0 -fr 04_res 1 261 2000.0 1.0 0.0 -fr 05_nuclear 1 261 1200.0 1.0 0.0 +fr 01_solar 1 261 2000.0 0.0 1.0 +fr 02_wind_on 1 261 2000.0 0.0 1.0 +fr 03_wind_off 1 261 2000.0 0.0 1.0 +fr 04_res 1 261 2000.0 0.0 1.0 +fr 05_nuclear 1 261 1200.0 0.0 1.0 fr 06_coal 1 261 0.0 0.0 0.0 fr 07_gas 1 261 0.0 0.0 0.0 fr 08_non-res 1 261 0.0 0.0 0.0 fr 09_hydro_pump 1 261 0.0 0.0 0.0 -fr 01_solar 1 262 2000.0 1.0 0.0 -fr 02_wind_on 1 262 2000.0 1.0 0.0 -fr 03_wind_off 1 262 2000.0 1.0 0.0 -fr 04_res 1 262 2000.0 1.0 0.0 -fr 05_nuclear 1 262 1300.0 1.0 0.0 +fr 01_solar 1 262 2000.0 0.0 1.0 +fr 02_wind_on 1 262 2000.0 0.0 1.0 +fr 03_wind_off 1 262 2000.0 0.0 1.0 +fr 04_res 1 262 2000.0 0.0 1.0 +fr 05_nuclear 1 262 1300.0 0.0 1.0 fr 06_coal 1 262 0.0 0.0 0.0 fr 07_gas 1 262 0.0 0.0 0.0 fr 08_non-res 1 262 0.0 0.0 0.0 fr 09_hydro_pump 1 262 0.0 0.0 0.0 -fr 01_solar 1 263 2000.0 1.0 0.0 -fr 02_wind_on 1 263 2000.0 1.0 0.0 -fr 03_wind_off 1 263 2000.0 1.0 0.0 -fr 04_res 1 263 2000.0 1.0 0.0 -fr 05_nuclear 1 263 1400.0 1.0 0.0 +fr 01_solar 1 263 2000.0 0.0 1.0 +fr 02_wind_on 1 263 2000.0 0.0 1.0 +fr 03_wind_off 1 263 2000.0 0.0 1.0 +fr 04_res 1 263 2000.0 0.0 1.0 +fr 05_nuclear 1 263 1400.0 0.0 1.0 fr 06_coal 1 263 0.0 0.0 0.0 fr 07_gas 1 263 0.0 0.0 0.0 fr 08_non-res 1 263 0.0 0.0 0.0 fr 09_hydro_pump 1 263 0.0 0.0 0.0 -fr 01_solar 1 264 2000.0 1.0 0.0 -fr 02_wind_on 1 264 2000.0 1.0 0.0 -fr 03_wind_off 1 264 2000.0 1.0 0.0 -fr 04_res 1 264 2000.0 1.0 0.0 -fr 05_nuclear 1 264 1500.0 1.0 0.0 +fr 01_solar 1 264 2000.0 0.0 1.0 +fr 02_wind_on 1 264 2000.0 0.0 1.0 +fr 03_wind_off 1 264 2000.0 0.0 1.0 +fr 04_res 1 264 2000.0 0.0 1.0 +fr 05_nuclear 1 264 1500.0 0.0 1.0 fr 06_coal 1 264 0.0 0.0 0.0 fr 07_gas 1 264 0.0 0.0 0.0 fr 08_non-res 1 264 0.0 0.0 0.0 fr 09_hydro_pump 1 264 0.0 0.0 0.0 -fr 01_solar 1 265 2000.0 1.0 0.0 -fr 02_wind_on 1 265 2000.0 1.0 0.0 -fr 03_wind_off 1 265 2000.0 1.0 0.0 -fr 04_res 1 265 2000.0 1.0 0.0 -fr 05_nuclear 1 265 1600.0 1.0 0.0 +fr 01_solar 1 265 2000.0 0.0 1.0 +fr 02_wind_on 1 265 2000.0 0.0 1.0 +fr 03_wind_off 1 265 2000.0 0.0 1.0 +fr 04_res 1 265 2000.0 0.0 1.0 +fr 05_nuclear 1 265 1600.0 0.0 1.0 fr 06_coal 1 265 0.0 0.0 0.0 fr 07_gas 1 265 0.0 0.0 0.0 fr 08_non-res 1 265 0.0 0.0 0.0 fr 09_hydro_pump 1 265 0.0 0.0 0.0 -fr 01_solar 1 266 2000.0 1.0 0.0 -fr 02_wind_on 1 266 2000.0 1.0 0.0 -fr 03_wind_off 1 266 2000.0 1.0 0.0 -fr 04_res 1 266 2000.0 1.0 0.0 -fr 05_nuclear 1 266 1700.0 1.0 0.0 +fr 01_solar 1 266 2000.0 0.0 1.0 +fr 02_wind_on 1 266 2000.0 0.0 1.0 +fr 03_wind_off 1 266 2000.0 0.0 1.0 +fr 04_res 1 266 2000.0 0.0 1.0 +fr 05_nuclear 1 266 1700.0 0.0 1.0 fr 06_coal 1 266 0.0 0.0 0.0 fr 07_gas 1 266 0.0 0.0 0.0 fr 08_non-res 1 266 0.0 0.0 0.0 fr 09_hydro_pump 1 266 0.0 0.0 0.0 -fr 01_solar 1 267 2000.0 1.0 0.0 -fr 02_wind_on 1 267 2000.0 1.0 0.0 -fr 03_wind_off 1 267 2000.0 1.0 0.0 -fr 04_res 1 267 2000.0 1.0 0.0 -fr 05_nuclear 1 267 1800.0 1.0 0.0 +fr 01_solar 1 267 2000.0 0.0 1.0 +fr 02_wind_on 1 267 2000.0 0.0 1.0 +fr 03_wind_off 1 267 2000.0 0.0 1.0 +fr 04_res 1 267 2000.0 0.0 1.0 +fr 05_nuclear 1 267 1800.0 0.0 1.0 fr 06_coal 1 267 0.0 0.0 0.0 fr 07_gas 1 267 0.0 0.0 0.0 fr 08_non-res 1 267 0.0 0.0 0.0 fr 09_hydro_pump 1 267 0.0 0.0 0.0 -fr 01_solar 1 268 2000.0 1.0 0.0 -fr 02_wind_on 1 268 2000.0 1.0 0.0 -fr 03_wind_off 1 268 2000.0 1.0 0.0 -fr 04_res 1 268 2000.0 1.0 0.0 -fr 05_nuclear 1 268 1900.0 1.0 0.0 +fr 01_solar 1 268 2000.0 0.0 1.0 +fr 02_wind_on 1 268 2000.0 0.0 1.0 +fr 03_wind_off 1 268 2000.0 0.0 1.0 +fr 04_res 1 268 2000.0 0.0 1.0 +fr 05_nuclear 1 268 1900.0 0.0 1.0 fr 06_coal 1 268 0.0 0.0 0.0 fr 07_gas 1 268 0.0 0.0 0.0 fr 08_non-res 1 268 0.0 0.0 0.0 fr 09_hydro_pump 1 268 0.0 0.0 0.0 -fr 01_solar 1 269 2000.0 1.0 0.0 -fr 02_wind_on 1 269 2000.0 1.0 0.0 -fr 03_wind_off 1 269 2000.0 1.0 0.0 -fr 04_res 1 269 2000.0 1.0 0.0 -fr 05_nuclear 1 269 2000.0 1.0 0.0 +fr 01_solar 1 269 2000.0 0.0 1.0 +fr 02_wind_on 1 269 2000.0 0.0 1.0 +fr 03_wind_off 1 269 2000.0 0.0 1.0 +fr 04_res 1 269 2000.0 0.0 1.0 +fr 05_nuclear 1 269 2000.0 0.0 1.0 fr 06_coal 1 269 0.0 0.0 0.0 fr 07_gas 1 269 0.0 0.0 0.0 fr 08_non-res 1 269 0.0 0.0 0.0 fr 09_hydro_pump 1 269 0.0 0.0 0.0 -fr 01_solar 1 270 2000.0 1.0 0.0 -fr 02_wind_on 1 270 2000.0 1.0 0.0 -fr 03_wind_off 1 270 2000.0 1.0 0.0 -fr 04_res 1 270 2000.0 1.0 0.0 -fr 05_nuclear 1 270 2000.0 1.0 0.0 -fr 06_coal 1 270 100.0 1.0 0.0 +fr 01_solar 1 270 2000.0 0.0 1.0 +fr 02_wind_on 1 270 2000.0 0.0 1.0 +fr 03_wind_off 1 270 2000.0 0.0 1.0 +fr 04_res 1 270 2000.0 0.0 1.0 +fr 05_nuclear 1 270 2000.0 0.0 1.0 +fr 06_coal 1 270 100.0 0.0 1.0 fr 07_gas 1 270 0.0 0.0 0.0 fr 08_non-res 1 270 0.0 0.0 0.0 fr 09_hydro_pump 1 270 0.0 0.0 0.0 -fr 01_solar 1 271 2000.0 1.0 0.0 -fr 02_wind_on 1 271 2000.0 1.0 0.0 -fr 03_wind_off 1 271 2000.0 1.0 0.0 -fr 04_res 1 271 2000.0 1.0 0.0 -fr 05_nuclear 1 271 2000.0 1.0 0.0 -fr 06_coal 1 271 200.0 1.0 0.0 +fr 01_solar 1 271 2000.0 0.0 1.0 +fr 02_wind_on 1 271 2000.0 0.0 1.0 +fr 03_wind_off 1 271 2000.0 0.0 1.0 +fr 04_res 1 271 2000.0 0.0 1.0 +fr 05_nuclear 1 271 2000.0 0.0 1.0 +fr 06_coal 1 271 200.0 0.0 1.0 fr 07_gas 1 271 0.0 0.0 0.0 fr 08_non-res 1 271 0.0 0.0 0.0 fr 09_hydro_pump 1 271 0.0 0.0 0.0 -fr 01_solar 1 272 2000.0 1.0 0.0 -fr 02_wind_on 1 272 2000.0 1.0 0.0 -fr 03_wind_off 1 272 2000.0 1.0 0.0 -fr 04_res 1 272 2000.0 1.0 0.0 -fr 05_nuclear 1 272 2000.0 1.0 0.0 -fr 06_coal 1 272 300.0 1.0 0.0 +fr 01_solar 1 272 2000.0 0.0 1.0 +fr 02_wind_on 1 272 2000.0 0.0 1.0 +fr 03_wind_off 1 272 2000.0 0.0 1.0 +fr 04_res 1 272 2000.0 0.0 1.0 +fr 05_nuclear 1 272 2000.0 0.0 1.0 +fr 06_coal 1 272 300.0 0.0 1.0 fr 07_gas 1 272 0.0 0.0 0.0 fr 08_non-res 1 272 0.0 0.0 0.0 fr 09_hydro_pump 1 272 0.0 0.0 0.0 -fr 01_solar 1 273 2000.0 1.0 0.0 -fr 02_wind_on 1 273 2000.0 1.0 0.0 -fr 03_wind_off 1 273 2000.0 1.0 0.0 -fr 04_res 1 273 2000.0 1.0 0.0 -fr 05_nuclear 1 273 2000.0 1.0 0.0 -fr 06_coal 1 273 400.0 1.0 0.0 +fr 01_solar 1 273 2000.0 0.0 1.0 +fr 02_wind_on 1 273 2000.0 0.0 1.0 +fr 03_wind_off 1 273 2000.0 0.0 1.0 +fr 04_res 1 273 2000.0 0.0 1.0 +fr 05_nuclear 1 273 2000.0 0.0 1.0 +fr 06_coal 1 273 400.0 0.0 1.0 fr 07_gas 1 273 0.0 0.0 0.0 fr 08_non-res 1 273 0.0 0.0 0.0 fr 09_hydro_pump 1 273 0.0 0.0 0.0 -fr 01_solar 1 274 2000.0 1.0 0.0 -fr 02_wind_on 1 274 2000.0 1.0 0.0 -fr 03_wind_off 1 274 2000.0 1.0 0.0 -fr 04_res 1 274 2000.0 1.0 0.0 -fr 05_nuclear 1 274 2000.0 1.0 0.0 -fr 06_coal 1 274 500.0 1.0 0.0 +fr 01_solar 1 274 2000.0 0.0 1.0 +fr 02_wind_on 1 274 2000.0 0.0 1.0 +fr 03_wind_off 1 274 2000.0 0.0 1.0 +fr 04_res 1 274 2000.0 0.0 1.0 +fr 05_nuclear 1 274 2000.0 0.0 1.0 +fr 06_coal 1 274 500.0 0.0 1.0 fr 07_gas 1 274 0.0 0.0 0.0 fr 08_non-res 1 274 0.0 0.0 0.0 fr 09_hydro_pump 1 274 0.0 0.0 0.0 -fr 01_solar 1 275 2000.0 1.0 0.0 -fr 02_wind_on 1 275 2000.0 1.0 0.0 -fr 03_wind_off 1 275 2000.0 1.0 0.0 -fr 04_res 1 275 2000.0 1.0 0.0 -fr 05_nuclear 1 275 2000.0 1.0 0.0 -fr 06_coal 1 275 600.0 1.0 0.0 +fr 01_solar 1 275 2000.0 0.0 1.0 +fr 02_wind_on 1 275 2000.0 0.0 1.0 +fr 03_wind_off 1 275 2000.0 0.0 1.0 +fr 04_res 1 275 2000.0 0.0 1.0 +fr 05_nuclear 1 275 2000.0 0.0 1.0 +fr 06_coal 1 275 600.0 0.0 1.0 fr 07_gas 1 275 0.0 0.0 0.0 fr 08_non-res 1 275 0.0 0.0 0.0 fr 09_hydro_pump 1 275 0.0 0.0 0.0 -fr 01_solar 1 276 2000.0 1.0 0.0 -fr 02_wind_on 1 276 2000.0 1.0 0.0 -fr 03_wind_off 1 276 2000.0 1.0 0.0 -fr 04_res 1 276 2000.0 1.0 0.0 -fr 05_nuclear 1 276 2000.0 1.0 0.0 -fr 06_coal 1 276 700.0 1.0 0.0 +fr 01_solar 1 276 2000.0 0.0 1.0 +fr 02_wind_on 1 276 2000.0 0.0 1.0 +fr 03_wind_off 1 276 2000.0 0.0 1.0 +fr 04_res 1 276 2000.0 0.0 1.0 +fr 05_nuclear 1 276 2000.0 0.0 1.0 +fr 06_coal 1 276 700.0 0.0 1.0 fr 07_gas 1 276 0.0 0.0 0.0 fr 08_non-res 1 276 0.0 0.0 0.0 fr 09_hydro_pump 1 276 0.0 0.0 0.0 -fr 01_solar 1 277 2000.0 1.0 0.0 -fr 02_wind_on 1 277 2000.0 1.0 0.0 -fr 03_wind_off 1 277 2000.0 1.0 0.0 -fr 04_res 1 277 2000.0 1.0 0.0 -fr 05_nuclear 1 277 2000.0 1.0 0.0 -fr 06_coal 1 277 800.0 1.0 0.0 +fr 01_solar 1 277 2000.0 0.0 1.0 +fr 02_wind_on 1 277 2000.0 0.0 1.0 +fr 03_wind_off 1 277 2000.0 0.0 1.0 +fr 04_res 1 277 2000.0 0.0 1.0 +fr 05_nuclear 1 277 2000.0 0.0 1.0 +fr 06_coal 1 277 800.0 0.0 1.0 fr 07_gas 1 277 0.0 0.0 0.0 fr 08_non-res 1 277 0.0 0.0 0.0 fr 09_hydro_pump 1 277 0.0 0.0 0.0 -fr 01_solar 1 278 2000.0 1.0 0.0 -fr 02_wind_on 1 278 2000.0 1.0 0.0 -fr 03_wind_off 1 278 2000.0 1.0 0.0 -fr 04_res 1 278 2000.0 1.0 0.0 -fr 05_nuclear 1 278 2000.0 1.0 0.0 -fr 06_coal 1 278 900.0 1.0 0.0 +fr 01_solar 1 278 2000.0 0.0 1.0 +fr 02_wind_on 1 278 2000.0 0.0 1.0 +fr 03_wind_off 1 278 2000.0 0.0 1.0 +fr 04_res 1 278 2000.0 0.0 1.0 +fr 05_nuclear 1 278 2000.0 0.0 1.0 +fr 06_coal 1 278 900.0 0.0 1.0 fr 07_gas 1 278 0.0 0.0 0.0 fr 08_non-res 1 278 0.0 0.0 0.0 fr 09_hydro_pump 1 278 0.0 0.0 0.0 -fr 01_solar 1 279 2000.0 1.0 0.0 -fr 02_wind_on 1 279 2000.0 1.0 0.0 -fr 03_wind_off 1 279 2000.0 1.0 0.0 -fr 04_res 1 279 2000.0 1.0 0.0 -fr 05_nuclear 1 279 2000.0 1.0 0.0 -fr 06_coal 1 279 1000.0 1.0 0.0 +fr 01_solar 1 279 2000.0 0.0 1.0 +fr 02_wind_on 1 279 2000.0 0.0 1.0 +fr 03_wind_off 1 279 2000.0 0.0 1.0 +fr 04_res 1 279 2000.0 0.0 1.0 +fr 05_nuclear 1 279 2000.0 0.0 1.0 +fr 06_coal 1 279 1000.0 0.0 1.0 fr 07_gas 1 279 0.0 0.0 0.0 fr 08_non-res 1 279 0.0 0.0 0.0 fr 09_hydro_pump 1 279 0.0 0.0 0.0 -fr 01_solar 1 280 2000.0 1.0 0.0 -fr 02_wind_on 1 280 2000.0 1.0 0.0 -fr 03_wind_off 1 280 2000.0 1.0 0.0 -fr 04_res 1 280 2000.0 1.0 0.0 -fr 05_nuclear 1 280 2000.0 1.0 0.0 -fr 06_coal 1 280 1100.0 1.0 0.0 +fr 01_solar 1 280 2000.0 0.0 1.0 +fr 02_wind_on 1 280 2000.0 0.0 1.0 +fr 03_wind_off 1 280 2000.0 0.0 1.0 +fr 04_res 1 280 2000.0 0.0 1.0 +fr 05_nuclear 1 280 2000.0 0.0 1.0 +fr 06_coal 1 280 1100.0 0.0 1.0 fr 07_gas 1 280 0.0 0.0 0.0 fr 08_non-res 1 280 0.0 0.0 0.0 fr 09_hydro_pump 1 280 0.0 0.0 0.0 -fr 01_solar 1 281 2000.0 1.0 0.0 -fr 02_wind_on 1 281 2000.0 1.0 0.0 -fr 03_wind_off 1 281 2000.0 1.0 0.0 -fr 04_res 1 281 2000.0 1.0 0.0 -fr 05_nuclear 1 281 2000.0 1.0 0.0 -fr 06_coal 1 281 1200.0 1.0 0.0 +fr 01_solar 1 281 2000.0 0.0 1.0 +fr 02_wind_on 1 281 2000.0 0.0 1.0 +fr 03_wind_off 1 281 2000.0 0.0 1.0 +fr 04_res 1 281 2000.0 0.0 1.0 +fr 05_nuclear 1 281 2000.0 0.0 1.0 +fr 06_coal 1 281 1200.0 0.0 1.0 fr 07_gas 1 281 0.0 0.0 0.0 fr 08_non-res 1 281 0.0 0.0 0.0 fr 09_hydro_pump 1 281 0.0 0.0 0.0 -fr 01_solar 1 282 2000.0 1.0 0.0 -fr 02_wind_on 1 282 2000.0 1.0 0.0 -fr 03_wind_off 1 282 2000.0 1.0 0.0 -fr 04_res 1 282 2000.0 1.0 0.0 -fr 05_nuclear 1 282 2000.0 1.0 0.0 -fr 06_coal 1 282 1300.0 1.0 0.0 +fr 01_solar 1 282 2000.0 0.0 1.0 +fr 02_wind_on 1 282 2000.0 0.0 1.0 +fr 03_wind_off 1 282 2000.0 0.0 1.0 +fr 04_res 1 282 2000.0 0.0 1.0 +fr 05_nuclear 1 282 2000.0 0.0 1.0 +fr 06_coal 1 282 1300.0 0.0 1.0 fr 07_gas 1 282 0.0 0.0 0.0 fr 08_non-res 1 282 0.0 0.0 0.0 fr 09_hydro_pump 1 282 0.0 0.0 0.0 -fr 01_solar 1 283 2000.0 1.0 0.0 -fr 02_wind_on 1 283 2000.0 1.0 0.0 -fr 03_wind_off 1 283 2000.0 1.0 0.0 -fr 04_res 1 283 2000.0 1.0 0.0 -fr 05_nuclear 1 283 2000.0 1.0 0.0 -fr 06_coal 1 283 1400.0 1.0 0.0 +fr 01_solar 1 283 2000.0 0.0 1.0 +fr 02_wind_on 1 283 2000.0 0.0 1.0 +fr 03_wind_off 1 283 2000.0 0.0 1.0 +fr 04_res 1 283 2000.0 0.0 1.0 +fr 05_nuclear 1 283 2000.0 0.0 1.0 +fr 06_coal 1 283 1400.0 0.0 1.0 fr 07_gas 1 283 0.0 0.0 0.0 fr 08_non-res 1 283 0.0 0.0 0.0 fr 09_hydro_pump 1 283 0.0 0.0 0.0 -fr 01_solar 1 284 2000.0 1.0 0.0 -fr 02_wind_on 1 284 2000.0 1.0 0.0 -fr 03_wind_off 1 284 2000.0 1.0 0.0 -fr 04_res 1 284 2000.0 1.0 0.0 -fr 05_nuclear 1 284 2000.0 1.0 0.0 -fr 06_coal 1 284 1500.0 1.0 0.0 +fr 01_solar 1 284 2000.0 0.0 1.0 +fr 02_wind_on 1 284 2000.0 0.0 1.0 +fr 03_wind_off 1 284 2000.0 0.0 1.0 +fr 04_res 1 284 2000.0 0.0 1.0 +fr 05_nuclear 1 284 2000.0 0.0 1.0 +fr 06_coal 1 284 1500.0 0.0 1.0 fr 07_gas 1 284 0.0 0.0 0.0 fr 08_non-res 1 284 0.0 0.0 0.0 fr 09_hydro_pump 1 284 0.0 0.0 0.0 -fr 01_solar 1 285 2000.0 1.0 0.0 -fr 02_wind_on 1 285 2000.0 1.0 0.0 -fr 03_wind_off 1 285 2000.0 1.0 0.0 -fr 04_res 1 285 2000.0 1.0 0.0 -fr 05_nuclear 1 285 2000.0 1.0 0.0 -fr 06_coal 1 285 1600.0 1.0 0.0 +fr 01_solar 1 285 2000.0 0.0 1.0 +fr 02_wind_on 1 285 2000.0 0.0 1.0 +fr 03_wind_off 1 285 2000.0 0.0 1.0 +fr 04_res 1 285 2000.0 0.0 1.0 +fr 05_nuclear 1 285 2000.0 0.0 1.0 +fr 06_coal 1 285 1600.0 0.0 1.0 fr 07_gas 1 285 0.0 0.0 0.0 fr 08_non-res 1 285 0.0 0.0 0.0 fr 09_hydro_pump 1 285 0.0 0.0 0.0 -fr 01_solar 1 286 2000.0 1.0 0.0 -fr 02_wind_on 1 286 2000.0 1.0 0.0 -fr 03_wind_off 1 286 2000.0 1.0 0.0 -fr 04_res 1 286 2000.0 1.0 0.0 -fr 05_nuclear 1 286 2000.0 1.0 0.0 -fr 06_coal 1 286 1700.0 1.0 0.0 +fr 01_solar 1 286 2000.0 0.0 1.0 +fr 02_wind_on 1 286 2000.0 0.0 1.0 +fr 03_wind_off 1 286 2000.0 0.0 1.0 +fr 04_res 1 286 2000.0 0.0 1.0 +fr 05_nuclear 1 286 2000.0 0.0 1.0 +fr 06_coal 1 286 1700.0 0.0 1.0 fr 07_gas 1 286 0.0 0.0 0.0 fr 08_non-res 1 286 0.0 0.0 0.0 fr 09_hydro_pump 1 286 0.0 0.0 0.0 -fr 01_solar 1 287 2000.0 1.0 0.0 -fr 02_wind_on 1 287 2000.0 1.0 0.0 -fr 03_wind_off 1 287 2000.0 1.0 0.0 -fr 04_res 1 287 2000.0 1.0 0.0 -fr 05_nuclear 1 287 2000.0 1.0 0.0 -fr 06_coal 1 287 1800.0 1.0 0.0 +fr 01_solar 1 287 2000.0 0.0 1.0 +fr 02_wind_on 1 287 2000.0 0.0 1.0 +fr 03_wind_off 1 287 2000.0 0.0 1.0 +fr 04_res 1 287 2000.0 0.0 1.0 +fr 05_nuclear 1 287 2000.0 0.0 1.0 +fr 06_coal 1 287 1800.0 0.0 1.0 fr 07_gas 1 287 0.0 0.0 0.0 fr 08_non-res 1 287 0.0 0.0 0.0 fr 09_hydro_pump 1 287 0.0 0.0 0.0 -fr 01_solar 1 288 2000.0 1.0 0.0 -fr 02_wind_on 1 288 2000.0 1.0 0.0 -fr 03_wind_off 1 288 2000.0 1.0 0.0 -fr 04_res 1 288 2000.0 1.0 0.0 -fr 05_nuclear 1 288 2000.0 1.0 0.0 -fr 06_coal 1 288 1900.0 1.0 0.0 +fr 01_solar 1 288 2000.0 0.0 1.0 +fr 02_wind_on 1 288 2000.0 0.0 1.0 +fr 03_wind_off 1 288 2000.0 0.0 1.0 +fr 04_res 1 288 2000.0 0.0 1.0 +fr 05_nuclear 1 288 2000.0 0.0 1.0 +fr 06_coal 1 288 1900.0 0.0 1.0 fr 07_gas 1 288 0.0 0.0 0.0 fr 08_non-res 1 288 0.0 0.0 0.0 fr 09_hydro_pump 1 288 0.0 0.0 0.0 -fr 01_solar 1 289 2000.0 1.0 0.0 -fr 02_wind_on 1 289 2000.0 1.0 0.0 -fr 03_wind_off 1 289 2000.0 1.0 0.0 -fr 04_res 1 289 2000.0 1.0 0.0 -fr 05_nuclear 1 289 2000.0 1.0 0.0 -fr 06_coal 1 289 2000.0 1.0 0.0 +fr 01_solar 1 289 2000.0 0.0 1.0 +fr 02_wind_on 1 289 2000.0 0.0 1.0 +fr 03_wind_off 1 289 2000.0 0.0 1.0 +fr 04_res 1 289 2000.0 0.0 1.0 +fr 05_nuclear 1 289 2000.0 0.0 1.0 +fr 06_coal 1 289 2000.0 0.0 1.0 fr 07_gas 1 289 0.0 0.0 0.0 fr 08_non-res 1 289 0.0 0.0 0.0 fr 09_hydro_pump 1 289 0.0 0.0 0.0 -fr 01_solar 1 290 2000.0 1.0 0.0 -fr 02_wind_on 1 290 2000.0 1.0 0.0 -fr 03_wind_off 1 290 2000.0 1.0 0.0 -fr 04_res 1 290 2000.0 1.0 0.0 -fr 05_nuclear 1 290 2000.0 1.0 0.0 -fr 06_coal 1 290 2000.0 1.0 0.0 -fr 07_gas 1 290 100.0 1.0 0.0 +fr 01_solar 1 290 2000.0 0.0 1.0 +fr 02_wind_on 1 290 2000.0 0.0 1.0 +fr 03_wind_off 1 290 2000.0 0.0 1.0 +fr 04_res 1 290 2000.0 0.0 1.0 +fr 05_nuclear 1 290 2000.0 0.0 1.0 +fr 06_coal 1 290 2000.0 0.0 1.0 +fr 07_gas 1 290 100.0 0.0 1.0 fr 08_non-res 1 290 0.0 0.0 0.0 fr 09_hydro_pump 1 290 0.0 0.0 0.0 -fr 01_solar 1 291 2000.0 1.0 0.0 -fr 02_wind_on 1 291 2000.0 1.0 0.0 -fr 03_wind_off 1 291 2000.0 1.0 0.0 -fr 04_res 1 291 2000.0 1.0 0.0 -fr 05_nuclear 1 291 2000.0 1.0 0.0 -fr 06_coal 1 291 2000.0 1.0 0.0 -fr 07_gas 1 291 200.0 1.0 0.0 +fr 01_solar 1 291 2000.0 0.0 1.0 +fr 02_wind_on 1 291 2000.0 0.0 1.0 +fr 03_wind_off 1 291 2000.0 0.0 1.0 +fr 04_res 1 291 2000.0 0.0 1.0 +fr 05_nuclear 1 291 2000.0 0.0 1.0 +fr 06_coal 1 291 2000.0 0.0 1.0 +fr 07_gas 1 291 200.0 0.0 1.0 fr 08_non-res 1 291 0.0 0.0 0.0 fr 09_hydro_pump 1 291 0.0 0.0 0.0 -fr 01_solar 1 292 2000.0 1.0 0.0 -fr 02_wind_on 1 292 2000.0 1.0 0.0 -fr 03_wind_off 1 292 2000.0 1.0 0.0 -fr 04_res 1 292 2000.0 1.0 0.0 -fr 05_nuclear 1 292 2000.0 1.0 0.0 -fr 06_coal 1 292 2000.0 1.0 0.0 -fr 07_gas 1 292 300.0 1.0 0.0 +fr 01_solar 1 292 2000.0 0.0 1.0 +fr 02_wind_on 1 292 2000.0 0.0 1.0 +fr 03_wind_off 1 292 2000.0 0.0 1.0 +fr 04_res 1 292 2000.0 0.0 1.0 +fr 05_nuclear 1 292 2000.0 0.0 1.0 +fr 06_coal 1 292 2000.0 0.0 1.0 +fr 07_gas 1 292 300.0 0.0 1.0 fr 08_non-res 1 292 0.0 0.0 0.0 fr 09_hydro_pump 1 292 0.0 0.0 0.0 -fr 01_solar 1 293 2000.0 1.0 0.0 -fr 02_wind_on 1 293 2000.0 1.0 0.0 -fr 03_wind_off 1 293 2000.0 1.0 0.0 -fr 04_res 1 293 2000.0 1.0 0.0 -fr 05_nuclear 1 293 2000.0 1.0 0.0 -fr 06_coal 1 293 2000.0 1.0 0.0 -fr 07_gas 1 293 400.0 1.0 0.0 +fr 01_solar 1 293 2000.0 0.0 1.0 +fr 02_wind_on 1 293 2000.0 0.0 1.0 +fr 03_wind_off 1 293 2000.0 0.0 1.0 +fr 04_res 1 293 2000.0 0.0 1.0 +fr 05_nuclear 1 293 2000.0 0.0 1.0 +fr 06_coal 1 293 2000.0 0.0 1.0 +fr 07_gas 1 293 400.0 0.0 1.0 fr 08_non-res 1 293 0.0 0.0 0.0 fr 09_hydro_pump 1 293 0.0 0.0 0.0 -fr 01_solar 1 294 2000.0 1.0 0.0 -fr 02_wind_on 1 294 2000.0 1.0 0.0 -fr 03_wind_off 1 294 2000.0 1.0 0.0 -fr 04_res 1 294 2000.0 1.0 0.0 -fr 05_nuclear 1 294 2000.0 1.0 0.0 -fr 06_coal 1 294 2000.0 1.0 0.0 -fr 07_gas 1 294 500.0 1.0 0.0 +fr 01_solar 1 294 2000.0 0.0 1.0 +fr 02_wind_on 1 294 2000.0 0.0 1.0 +fr 03_wind_off 1 294 2000.0 0.0 1.0 +fr 04_res 1 294 2000.0 0.0 1.0 +fr 05_nuclear 1 294 2000.0 0.0 1.0 +fr 06_coal 1 294 2000.0 0.0 1.0 +fr 07_gas 1 294 500.0 0.0 1.0 fr 08_non-res 1 294 0.0 0.0 0.0 fr 09_hydro_pump 1 294 0.0 0.0 0.0 -fr 01_solar 1 295 2000.0 1.0 0.0 -fr 02_wind_on 1 295 2000.0 1.0 0.0 -fr 03_wind_off 1 295 2000.0 1.0 0.0 -fr 04_res 1 295 2000.0 1.0 0.0 -fr 05_nuclear 1 295 2000.0 1.0 0.0 -fr 06_coal 1 295 2000.0 1.0 0.0 -fr 07_gas 1 295 600.0 1.0 0.0 +fr 01_solar 1 295 2000.0 0.0 1.0 +fr 02_wind_on 1 295 2000.0 0.0 1.0 +fr 03_wind_off 1 295 2000.0 0.0 1.0 +fr 04_res 1 295 2000.0 0.0 1.0 +fr 05_nuclear 1 295 2000.0 0.0 1.0 +fr 06_coal 1 295 2000.0 0.0 1.0 +fr 07_gas 1 295 600.0 0.0 1.0 fr 08_non-res 1 295 0.0 0.0 0.0 fr 09_hydro_pump 1 295 0.0 0.0 0.0 -fr 01_solar 1 296 2000.0 1.0 0.0 -fr 02_wind_on 1 296 2000.0 1.0 0.0 -fr 03_wind_off 1 296 2000.0 1.0 0.0 -fr 04_res 1 296 2000.0 1.0 0.0 -fr 05_nuclear 1 296 2000.0 1.0 0.0 -fr 06_coal 1 296 2000.0 1.0 0.0 -fr 07_gas 1 296 700.0 1.0 0.0 +fr 01_solar 1 296 2000.0 0.0 1.0 +fr 02_wind_on 1 296 2000.0 0.0 1.0 +fr 03_wind_off 1 296 2000.0 0.0 1.0 +fr 04_res 1 296 2000.0 0.0 1.0 +fr 05_nuclear 1 296 2000.0 0.0 1.0 +fr 06_coal 1 296 2000.0 0.0 1.0 +fr 07_gas 1 296 700.0 0.0 1.0 fr 08_non-res 1 296 0.0 0.0 0.0 fr 09_hydro_pump 1 296 0.0 0.0 0.0 -fr 01_solar 1 297 2000.0 1.0 0.0 -fr 02_wind_on 1 297 2000.0 1.0 0.0 -fr 03_wind_off 1 297 2000.0 1.0 0.0 -fr 04_res 1 297 2000.0 1.0 0.0 -fr 05_nuclear 1 297 2000.0 1.0 0.0 -fr 06_coal 1 297 2000.0 1.0 0.0 -fr 07_gas 1 297 800.0 1.0 0.0 +fr 01_solar 1 297 2000.0 0.0 1.0 +fr 02_wind_on 1 297 2000.0 0.0 1.0 +fr 03_wind_off 1 297 2000.0 0.0 1.0 +fr 04_res 1 297 2000.0 0.0 1.0 +fr 05_nuclear 1 297 2000.0 0.0 1.0 +fr 06_coal 1 297 2000.0 0.0 1.0 +fr 07_gas 1 297 800.0 0.0 1.0 fr 08_non-res 1 297 0.0 0.0 0.0 fr 09_hydro_pump 1 297 0.0 0.0 0.0 -fr 01_solar 1 298 2000.0 1.0 0.0 -fr 02_wind_on 1 298 2000.0 1.0 0.0 -fr 03_wind_off 1 298 2000.0 1.0 0.0 -fr 04_res 1 298 2000.0 1.0 0.0 -fr 05_nuclear 1 298 2000.0 1.0 0.0 -fr 06_coal 1 298 2000.0 1.0 0.0 -fr 07_gas 1 298 900.0 1.0 0.0 +fr 01_solar 1 298 2000.0 0.0 1.0 +fr 02_wind_on 1 298 2000.0 0.0 1.0 +fr 03_wind_off 1 298 2000.0 0.0 1.0 +fr 04_res 1 298 2000.0 0.0 1.0 +fr 05_nuclear 1 298 2000.0 0.0 1.0 +fr 06_coal 1 298 2000.0 0.0 1.0 +fr 07_gas 1 298 900.0 0.0 1.0 fr 08_non-res 1 298 0.0 0.0 0.0 fr 09_hydro_pump 1 298 0.0 0.0 0.0 -fr 01_solar 1 299 2000.0 1.0 0.0 -fr 02_wind_on 1 299 2000.0 1.0 0.0 -fr 03_wind_off 1 299 2000.0 1.0 0.0 -fr 04_res 1 299 2000.0 1.0 0.0 -fr 05_nuclear 1 299 2000.0 1.0 0.0 -fr 06_coal 1 299 2000.0 1.0 0.0 -fr 07_gas 1 299 1000.0 1.0 0.0 +fr 01_solar 1 299 2000.0 0.0 1.0 +fr 02_wind_on 1 299 2000.0 0.0 1.0 +fr 03_wind_off 1 299 2000.0 0.0 1.0 +fr 04_res 1 299 2000.0 0.0 1.0 +fr 05_nuclear 1 299 2000.0 0.0 1.0 +fr 06_coal 1 299 2000.0 0.0 1.0 +fr 07_gas 1 299 1000.0 0.0 1.0 fr 08_non-res 1 299 0.0 0.0 0.0 fr 09_hydro_pump 1 299 0.0 0.0 0.0 -fr 01_solar 1 300 2000.0 1.0 0.0 -fr 02_wind_on 1 300 2000.0 1.0 0.0 -fr 03_wind_off 1 300 2000.0 1.0 0.0 -fr 04_res 1 300 2000.0 1.0 0.0 -fr 05_nuclear 1 300 2000.0 1.0 0.0 -fr 06_coal 1 300 2000.0 1.0 0.0 -fr 07_gas 1 300 1100.0 1.0 0.0 +fr 01_solar 1 300 2000.0 0.0 1.0 +fr 02_wind_on 1 300 2000.0 0.0 1.0 +fr 03_wind_off 1 300 2000.0 0.0 1.0 +fr 04_res 1 300 2000.0 0.0 1.0 +fr 05_nuclear 1 300 2000.0 0.0 1.0 +fr 06_coal 1 300 2000.0 0.0 1.0 +fr 07_gas 1 300 1100.0 0.0 1.0 fr 08_non-res 1 300 0.0 0.0 0.0 fr 09_hydro_pump 1 300 0.0 0.0 0.0 -fr 01_solar 1 301 2000.0 1.0 0.0 -fr 02_wind_on 1 301 2000.0 1.0 0.0 -fr 03_wind_off 1 301 2000.0 1.0 0.0 -fr 04_res 1 301 2000.0 1.0 0.0 -fr 05_nuclear 1 301 2000.0 1.0 0.0 -fr 06_coal 1 301 2000.0 1.0 0.0 -fr 07_gas 1 301 1200.0 1.0 0.0 +fr 01_solar 1 301 2000.0 0.0 1.0 +fr 02_wind_on 1 301 2000.0 0.0 1.0 +fr 03_wind_off 1 301 2000.0 0.0 1.0 +fr 04_res 1 301 2000.0 0.0 1.0 +fr 05_nuclear 1 301 2000.0 0.0 1.0 +fr 06_coal 1 301 2000.0 0.0 1.0 +fr 07_gas 1 301 1200.0 0.0 1.0 fr 08_non-res 1 301 0.0 0.0 0.0 fr 09_hydro_pump 1 301 0.0 0.0 0.0 -fr 01_solar 1 302 2000.0 1.0 0.0 -fr 02_wind_on 1 302 2000.0 1.0 0.0 -fr 03_wind_off 1 302 2000.0 1.0 0.0 -fr 04_res 1 302 2000.0 1.0 0.0 -fr 05_nuclear 1 302 2000.0 1.0 0.0 -fr 06_coal 1 302 2000.0 1.0 0.0 -fr 07_gas 1 302 1300.0 1.0 0.0 +fr 01_solar 1 302 2000.0 0.0 1.0 +fr 02_wind_on 1 302 2000.0 0.0 1.0 +fr 03_wind_off 1 302 2000.0 0.0 1.0 +fr 04_res 1 302 2000.0 0.0 1.0 +fr 05_nuclear 1 302 2000.0 0.0 1.0 +fr 06_coal 1 302 2000.0 0.0 1.0 +fr 07_gas 1 302 1300.0 0.0 1.0 fr 08_non-res 1 302 0.0 0.0 0.0 fr 09_hydro_pump 1 302 0.0 0.0 0.0 -fr 01_solar 1 303 2000.0 1.0 0.0 -fr 02_wind_on 1 303 2000.0 1.0 0.0 -fr 03_wind_off 1 303 2000.0 1.0 0.0 -fr 04_res 1 303 2000.0 1.0 0.0 -fr 05_nuclear 1 303 2000.0 1.0 0.0 -fr 06_coal 1 303 2000.0 1.0 0.0 -fr 07_gas 1 303 1400.0 1.0 0.0 +fr 01_solar 1 303 2000.0 0.0 1.0 +fr 02_wind_on 1 303 2000.0 0.0 1.0 +fr 03_wind_off 1 303 2000.0 0.0 1.0 +fr 04_res 1 303 2000.0 0.0 1.0 +fr 05_nuclear 1 303 2000.0 0.0 1.0 +fr 06_coal 1 303 2000.0 0.0 1.0 +fr 07_gas 1 303 1400.0 0.0 1.0 fr 08_non-res 1 303 0.0 0.0 0.0 fr 09_hydro_pump 1 303 0.0 0.0 0.0 -fr 01_solar 1 304 2000.0 1.0 0.0 -fr 02_wind_on 1 304 2000.0 1.0 0.0 -fr 03_wind_off 1 304 2000.0 1.0 0.0 -fr 04_res 1 304 2000.0 1.0 0.0 -fr 05_nuclear 1 304 2000.0 1.0 0.0 -fr 06_coal 1 304 2000.0 1.0 0.0 -fr 07_gas 1 304 1500.0 1.0 0.0 +fr 01_solar 1 304 2000.0 0.0 1.0 +fr 02_wind_on 1 304 2000.0 0.0 1.0 +fr 03_wind_off 1 304 2000.0 0.0 1.0 +fr 04_res 1 304 2000.0 0.0 1.0 +fr 05_nuclear 1 304 2000.0 0.0 1.0 +fr 06_coal 1 304 2000.0 0.0 1.0 +fr 07_gas 1 304 1500.0 0.0 1.0 fr 08_non-res 1 304 0.0 0.0 0.0 fr 09_hydro_pump 1 304 0.0 0.0 0.0 -fr 01_solar 1 305 2000.0 1.0 0.0 -fr 02_wind_on 1 305 2000.0 1.0 0.0 -fr 03_wind_off 1 305 2000.0 1.0 0.0 -fr 04_res 1 305 2000.0 1.0 0.0 -fr 05_nuclear 1 305 2000.0 1.0 0.0 -fr 06_coal 1 305 2000.0 1.0 0.0 -fr 07_gas 1 305 1600.0 1.0 0.0 +fr 01_solar 1 305 2000.0 0.0 1.0 +fr 02_wind_on 1 305 2000.0 0.0 1.0 +fr 03_wind_off 1 305 2000.0 0.0 1.0 +fr 04_res 1 305 2000.0 0.0 1.0 +fr 05_nuclear 1 305 2000.0 0.0 1.0 +fr 06_coal 1 305 2000.0 0.0 1.0 +fr 07_gas 1 305 1600.0 0.0 1.0 fr 08_non-res 1 305 0.0 0.0 0.0 fr 09_hydro_pump 1 305 0.0 0.0 0.0 -fr 01_solar 1 306 2000.0 1.0 0.0 -fr 02_wind_on 1 306 2000.0 1.0 0.0 -fr 03_wind_off 1 306 2000.0 1.0 0.0 -fr 04_res 1 306 2000.0 1.0 0.0 -fr 05_nuclear 1 306 2000.0 1.0 0.0 -fr 06_coal 1 306 2000.0 1.0 0.0 -fr 07_gas 1 306 1700.0 1.0 0.0 +fr 01_solar 1 306 2000.0 0.0 1.0 +fr 02_wind_on 1 306 2000.0 0.0 1.0 +fr 03_wind_off 1 306 2000.0 0.0 1.0 +fr 04_res 1 306 2000.0 0.0 1.0 +fr 05_nuclear 1 306 2000.0 0.0 1.0 +fr 06_coal 1 306 2000.0 0.0 1.0 +fr 07_gas 1 306 1700.0 0.0 1.0 fr 08_non-res 1 306 0.0 0.0 0.0 fr 09_hydro_pump 1 306 0.0 0.0 0.0 -fr 01_solar 1 307 2000.0 1.0 0.0 -fr 02_wind_on 1 307 2000.0 1.0 0.0 -fr 03_wind_off 1 307 2000.0 1.0 0.0 -fr 04_res 1 307 2000.0 1.0 0.0 -fr 05_nuclear 1 307 2000.0 1.0 0.0 -fr 06_coal 1 307 2000.0 1.0 0.0 -fr 07_gas 1 307 1800.0 1.0 0.0 +fr 01_solar 1 307 2000.0 0.0 1.0 +fr 02_wind_on 1 307 2000.0 0.0 1.0 +fr 03_wind_off 1 307 2000.0 0.0 1.0 +fr 04_res 1 307 2000.0 0.0 1.0 +fr 05_nuclear 1 307 2000.0 0.0 1.0 +fr 06_coal 1 307 2000.0 0.0 1.0 +fr 07_gas 1 307 1800.0 0.0 1.0 fr 08_non-res 1 307 0.0 0.0 0.0 fr 09_hydro_pump 1 307 0.0 0.0 0.0 -fr 01_solar 1 308 2000.0 1.0 0.0 -fr 02_wind_on 1 308 2000.0 1.0 0.0 -fr 03_wind_off 1 308 2000.0 1.0 0.0 -fr 04_res 1 308 2000.0 1.0 0.0 -fr 05_nuclear 1 308 2000.0 1.0 0.0 -fr 06_coal 1 308 2000.0 1.0 0.0 -fr 07_gas 1 308 1900.0 1.0 0.0 +fr 01_solar 1 308 2000.0 0.0 1.0 +fr 02_wind_on 1 308 2000.0 0.0 1.0 +fr 03_wind_off 1 308 2000.0 0.0 1.0 +fr 04_res 1 308 2000.0 0.0 1.0 +fr 05_nuclear 1 308 2000.0 0.0 1.0 +fr 06_coal 1 308 2000.0 0.0 1.0 +fr 07_gas 1 308 1900.0 0.0 1.0 fr 08_non-res 1 308 0.0 0.0 0.0 fr 09_hydro_pump 1 308 0.0 0.0 0.0 -fr 01_solar 1 309 2000.0 1.0 0.0 -fr 02_wind_on 1 309 2000.0 1.0 0.0 -fr 03_wind_off 1 309 2000.0 1.0 0.0 -fr 04_res 1 309 2000.0 1.0 0.0 -fr 05_nuclear 1 309 2000.0 1.0 0.0 -fr 06_coal 1 309 2000.0 1.0 0.0 -fr 07_gas 1 309 2000.0 1.0 0.0 +fr 01_solar 1 309 2000.0 0.0 1.0 +fr 02_wind_on 1 309 2000.0 0.0 1.0 +fr 03_wind_off 1 309 2000.0 0.0 1.0 +fr 04_res 1 309 2000.0 0.0 1.0 +fr 05_nuclear 1 309 2000.0 0.0 1.0 +fr 06_coal 1 309 2000.0 0.0 1.0 +fr 07_gas 1 309 2000.0 0.0 1.0 fr 08_non-res 1 309 0.0 0.0 0.0 fr 09_hydro_pump 1 309 0.0 0.0 0.0 -fr 01_solar 1 310 2000.0 1.0 0.0 -fr 02_wind_on 1 310 2000.0 1.0 0.0 -fr 03_wind_off 1 310 2000.0 1.0 0.0 -fr 04_res 1 310 2000.0 1.0 0.0 -fr 05_nuclear 1 310 2000.0 1.0 0.0 -fr 06_coal 1 310 2000.0 1.0 0.0 -fr 07_gas 1 310 2000.0 1.0 0.0 -fr 08_non-res 1 310 100.0 1.0 0.0 +fr 01_solar 1 310 2000.0 0.0 1.0 +fr 02_wind_on 1 310 2000.0 0.0 1.0 +fr 03_wind_off 1 310 2000.0 0.0 1.0 +fr 04_res 1 310 2000.0 0.0 1.0 +fr 05_nuclear 1 310 2000.0 0.0 1.0 +fr 06_coal 1 310 2000.0 0.0 1.0 +fr 07_gas 1 310 2000.0 0.0 1.0 +fr 08_non-res 1 310 100.0 0.0 1.0 fr 09_hydro_pump 1 310 0.0 0.0 0.0 -fr 01_solar 1 311 2000.0 1.0 0.0 -fr 02_wind_on 1 311 2000.0 1.0 0.0 -fr 03_wind_off 1 311 2000.0 1.0 0.0 -fr 04_res 1 311 2000.0 1.0 0.0 -fr 05_nuclear 1 311 2000.0 1.0 0.0 -fr 06_coal 1 311 2000.0 1.0 0.0 -fr 07_gas 1 311 2000.0 1.0 0.0 -fr 08_non-res 1 311 200.0 1.0 0.0 +fr 01_solar 1 311 2000.0 0.0 1.0 +fr 02_wind_on 1 311 2000.0 0.0 1.0 +fr 03_wind_off 1 311 2000.0 0.0 1.0 +fr 04_res 1 311 2000.0 0.0 1.0 +fr 05_nuclear 1 311 2000.0 0.0 1.0 +fr 06_coal 1 311 2000.0 0.0 1.0 +fr 07_gas 1 311 2000.0 0.0 1.0 +fr 08_non-res 1 311 200.0 0.0 1.0 fr 09_hydro_pump 1 311 0.0 0.0 0.0 -fr 01_solar 1 312 2000.0 1.0 0.0 -fr 02_wind_on 1 312 2000.0 1.0 0.0 -fr 03_wind_off 1 312 2000.0 1.0 0.0 -fr 04_res 1 312 2000.0 1.0 0.0 -fr 05_nuclear 1 312 2000.0 1.0 0.0 -fr 06_coal 1 312 2000.0 1.0 0.0 -fr 07_gas 1 312 2000.0 1.0 0.0 -fr 08_non-res 1 312 300.0 1.0 0.0 +fr 01_solar 1 312 2000.0 0.0 1.0 +fr 02_wind_on 1 312 2000.0 0.0 1.0 +fr 03_wind_off 1 312 2000.0 0.0 1.0 +fr 04_res 1 312 2000.0 0.0 1.0 +fr 05_nuclear 1 312 2000.0 0.0 1.0 +fr 06_coal 1 312 2000.0 0.0 1.0 +fr 07_gas 1 312 2000.0 0.0 1.0 +fr 08_non-res 1 312 300.0 0.0 1.0 fr 09_hydro_pump 1 312 0.0 0.0 0.0 -fr 01_solar 1 313 2000.0 1.0 0.0 -fr 02_wind_on 1 313 2000.0 1.0 0.0 -fr 03_wind_off 1 313 2000.0 1.0 0.0 -fr 04_res 1 313 2000.0 1.0 0.0 -fr 05_nuclear 1 313 2000.0 1.0 0.0 -fr 06_coal 1 313 2000.0 1.0 0.0 -fr 07_gas 1 313 2000.0 1.0 0.0 -fr 08_non-res 1 313 400.0 1.0 0.0 +fr 01_solar 1 313 2000.0 0.0 1.0 +fr 02_wind_on 1 313 2000.0 0.0 1.0 +fr 03_wind_off 1 313 2000.0 0.0 1.0 +fr 04_res 1 313 2000.0 0.0 1.0 +fr 05_nuclear 1 313 2000.0 0.0 1.0 +fr 06_coal 1 313 2000.0 0.0 1.0 +fr 07_gas 1 313 2000.0 0.0 1.0 +fr 08_non-res 1 313 400.0 0.0 1.0 fr 09_hydro_pump 1 313 0.0 0.0 0.0 -fr 01_solar 1 314 2000.0 1.0 0.0 -fr 02_wind_on 1 314 2000.0 1.0 0.0 -fr 03_wind_off 1 314 2000.0 1.0 0.0 -fr 04_res 1 314 2000.0 1.0 0.0 -fr 05_nuclear 1 314 2000.0 1.0 0.0 -fr 06_coal 1 314 2000.0 1.0 0.0 -fr 07_gas 1 314 2000.0 1.0 0.0 -fr 08_non-res 1 314 500.0 1.0 0.0 +fr 01_solar 1 314 2000.0 0.0 1.0 +fr 02_wind_on 1 314 2000.0 0.0 1.0 +fr 03_wind_off 1 314 2000.0 0.0 1.0 +fr 04_res 1 314 2000.0 0.0 1.0 +fr 05_nuclear 1 314 2000.0 0.0 1.0 +fr 06_coal 1 314 2000.0 0.0 1.0 +fr 07_gas 1 314 2000.0 0.0 1.0 +fr 08_non-res 1 314 500.0 0.0 1.0 fr 09_hydro_pump 1 314 0.0 0.0 0.0 -fr 01_solar 1 315 2000.0 1.0 0.0 -fr 02_wind_on 1 315 2000.0 1.0 0.0 -fr 03_wind_off 1 315 2000.0 1.0 0.0 -fr 04_res 1 315 2000.0 1.0 0.0 -fr 05_nuclear 1 315 2000.0 1.0 0.0 -fr 06_coal 1 315 2000.0 1.0 0.0 -fr 07_gas 1 315 2000.0 1.0 0.0 -fr 08_non-res 1 315 600.0 1.0 0.0 +fr 01_solar 1 315 2000.0 0.0 1.0 +fr 02_wind_on 1 315 2000.0 0.0 1.0 +fr 03_wind_off 1 315 2000.0 0.0 1.0 +fr 04_res 1 315 2000.0 0.0 1.0 +fr 05_nuclear 1 315 2000.0 0.0 1.0 +fr 06_coal 1 315 2000.0 0.0 1.0 +fr 07_gas 1 315 2000.0 0.0 1.0 +fr 08_non-res 1 315 600.0 0.0 1.0 fr 09_hydro_pump 1 315 0.0 0.0 0.0 -fr 01_solar 1 316 2000.0 1.0 0.0 -fr 02_wind_on 1 316 2000.0 1.0 0.0 -fr 03_wind_off 1 316 2000.0 1.0 0.0 -fr 04_res 1 316 2000.0 1.0 0.0 -fr 05_nuclear 1 316 2000.0 1.0 0.0 -fr 06_coal 1 316 2000.0 1.0 0.0 -fr 07_gas 1 316 2000.0 1.0 0.0 -fr 08_non-res 1 316 700.0 1.0 0.0 +fr 01_solar 1 316 2000.0 0.0 1.0 +fr 02_wind_on 1 316 2000.0 0.0 1.0 +fr 03_wind_off 1 316 2000.0 0.0 1.0 +fr 04_res 1 316 2000.0 0.0 1.0 +fr 05_nuclear 1 316 2000.0 0.0 1.0 +fr 06_coal 1 316 2000.0 0.0 1.0 +fr 07_gas 1 316 2000.0 0.0 1.0 +fr 08_non-res 1 316 700.0 0.0 1.0 fr 09_hydro_pump 1 316 0.0 0.0 0.0 -fr 01_solar 1 317 2000.0 1.0 0.0 -fr 02_wind_on 1 317 2000.0 1.0 0.0 -fr 03_wind_off 1 317 2000.0 1.0 0.0 -fr 04_res 1 317 2000.0 1.0 0.0 -fr 05_nuclear 1 317 2000.0 1.0 0.0 -fr 06_coal 1 317 2000.0 1.0 0.0 -fr 07_gas 1 317 2000.0 1.0 0.0 -fr 08_non-res 1 317 800.0 1.0 0.0 +fr 01_solar 1 317 2000.0 0.0 1.0 +fr 02_wind_on 1 317 2000.0 0.0 1.0 +fr 03_wind_off 1 317 2000.0 0.0 1.0 +fr 04_res 1 317 2000.0 0.0 1.0 +fr 05_nuclear 1 317 2000.0 0.0 1.0 +fr 06_coal 1 317 2000.0 0.0 1.0 +fr 07_gas 1 317 2000.0 0.0 1.0 +fr 08_non-res 1 317 800.0 0.0 1.0 fr 09_hydro_pump 1 317 0.0 0.0 0.0 -fr 01_solar 1 318 2000.0 1.0 0.0 -fr 02_wind_on 1 318 2000.0 1.0 0.0 -fr 03_wind_off 1 318 2000.0 1.0 0.0 -fr 04_res 1 318 2000.0 1.0 0.0 -fr 05_nuclear 1 318 2000.0 1.0 0.0 -fr 06_coal 1 318 2000.0 1.0 0.0 -fr 07_gas 1 318 2000.0 1.0 0.0 -fr 08_non-res 1 318 900.0 1.0 0.0 +fr 01_solar 1 318 2000.0 0.0 1.0 +fr 02_wind_on 1 318 2000.0 0.0 1.0 +fr 03_wind_off 1 318 2000.0 0.0 1.0 +fr 04_res 1 318 2000.0 0.0 1.0 +fr 05_nuclear 1 318 2000.0 0.0 1.0 +fr 06_coal 1 318 2000.0 0.0 1.0 +fr 07_gas 1 318 2000.0 0.0 1.0 +fr 08_non-res 1 318 900.0 0.0 1.0 fr 09_hydro_pump 1 318 0.0 0.0 0.0 -fr 01_solar 1 319 2000.0 1.0 0.0 -fr 02_wind_on 1 319 2000.0 1.0 0.0 -fr 03_wind_off 1 319 2000.0 1.0 0.0 -fr 04_res 1 319 2000.0 1.0 0.0 -fr 05_nuclear 1 319 2000.0 1.0 0.0 -fr 06_coal 1 319 2000.0 1.0 0.0 -fr 07_gas 1 319 2000.0 1.0 0.0 -fr 08_non-res 1 319 1000.0 1.0 0.0 +fr 01_solar 1 319 2000.0 0.0 1.0 +fr 02_wind_on 1 319 2000.0 0.0 1.0 +fr 03_wind_off 1 319 2000.0 0.0 1.0 +fr 04_res 1 319 2000.0 0.0 1.0 +fr 05_nuclear 1 319 2000.0 0.0 1.0 +fr 06_coal 1 319 2000.0 0.0 1.0 +fr 07_gas 1 319 2000.0 0.0 1.0 +fr 08_non-res 1 319 1000.0 0.0 1.0 fr 09_hydro_pump 1 319 0.0 0.0 0.0 -fr 01_solar 1 320 2000.0 1.0 0.0 -fr 02_wind_on 1 320 2000.0 1.0 0.0 -fr 03_wind_off 1 320 2000.0 1.0 0.0 -fr 04_res 1 320 2000.0 1.0 0.0 -fr 05_nuclear 1 320 2000.0 1.0 0.0 -fr 06_coal 1 320 2000.0 1.0 0.0 -fr 07_gas 1 320 2000.0 1.0 0.0 -fr 08_non-res 1 320 1100.0 1.0 0.0 +fr 01_solar 1 320 2000.0 0.0 1.0 +fr 02_wind_on 1 320 2000.0 0.0 1.0 +fr 03_wind_off 1 320 2000.0 0.0 1.0 +fr 04_res 1 320 2000.0 0.0 1.0 +fr 05_nuclear 1 320 2000.0 0.0 1.0 +fr 06_coal 1 320 2000.0 0.0 1.0 +fr 07_gas 1 320 2000.0 0.0 1.0 +fr 08_non-res 1 320 1100.0 0.0 1.0 fr 09_hydro_pump 1 320 0.0 0.0 0.0 -fr 01_solar 1 321 2000.0 1.0 0.0 -fr 02_wind_on 1 321 2000.0 1.0 0.0 -fr 03_wind_off 1 321 2000.0 1.0 0.0 -fr 04_res 1 321 2000.0 1.0 0.0 -fr 05_nuclear 1 321 2000.0 1.0 0.0 -fr 06_coal 1 321 2000.0 1.0 0.0 -fr 07_gas 1 321 2000.0 1.0 0.0 -fr 08_non-res 1 321 1200.0 1.0 0.0 +fr 01_solar 1 321 2000.0 0.0 1.0 +fr 02_wind_on 1 321 2000.0 0.0 1.0 +fr 03_wind_off 1 321 2000.0 0.0 1.0 +fr 04_res 1 321 2000.0 0.0 1.0 +fr 05_nuclear 1 321 2000.0 0.0 1.0 +fr 06_coal 1 321 2000.0 0.0 1.0 +fr 07_gas 1 321 2000.0 0.0 1.0 +fr 08_non-res 1 321 1200.0 0.0 1.0 fr 09_hydro_pump 1 321 0.0 0.0 0.0 -fr 01_solar 1 322 2000.0 1.0 0.0 -fr 02_wind_on 1 322 2000.0 1.0 0.0 -fr 03_wind_off 1 322 2000.0 1.0 0.0 -fr 04_res 1 322 2000.0 1.0 0.0 -fr 05_nuclear 1 322 2000.0 1.0 0.0 -fr 06_coal 1 322 2000.0 1.0 0.0 -fr 07_gas 1 322 2000.0 1.0 0.0 -fr 08_non-res 1 322 1300.0 1.0 0.0 +fr 01_solar 1 322 2000.0 0.0 1.0 +fr 02_wind_on 1 322 2000.0 0.0 1.0 +fr 03_wind_off 1 322 2000.0 0.0 1.0 +fr 04_res 1 322 2000.0 0.0 1.0 +fr 05_nuclear 1 322 2000.0 0.0 1.0 +fr 06_coal 1 322 2000.0 0.0 1.0 +fr 07_gas 1 322 2000.0 0.0 1.0 +fr 08_non-res 1 322 1300.0 0.0 1.0 fr 09_hydro_pump 1 322 0.0 0.0 0.0 -fr 01_solar 1 323 2000.0 1.0 0.0 -fr 02_wind_on 1 323 2000.0 1.0 0.0 -fr 03_wind_off 1 323 2000.0 1.0 0.0 -fr 04_res 1 323 2000.0 1.0 0.0 -fr 05_nuclear 1 323 2000.0 1.0 0.0 -fr 06_coal 1 323 2000.0 1.0 0.0 -fr 07_gas 1 323 2000.0 1.0 0.0 -fr 08_non-res 1 323 1400.0 1.0 0.0 +fr 01_solar 1 323 2000.0 0.0 1.0 +fr 02_wind_on 1 323 2000.0 0.0 1.0 +fr 03_wind_off 1 323 2000.0 0.0 1.0 +fr 04_res 1 323 2000.0 0.0 1.0 +fr 05_nuclear 1 323 2000.0 0.0 1.0 +fr 06_coal 1 323 2000.0 0.0 1.0 +fr 07_gas 1 323 2000.0 0.0 1.0 +fr 08_non-res 1 323 1400.0 0.0 1.0 fr 09_hydro_pump 1 323 0.0 0.0 0.0 -fr 01_solar 1 324 2000.0 1.0 0.0 -fr 02_wind_on 1 324 2000.0 1.0 0.0 -fr 03_wind_off 1 324 2000.0 1.0 0.0 -fr 04_res 1 324 2000.0 1.0 0.0 -fr 05_nuclear 1 324 2000.0 1.0 0.0 -fr 06_coal 1 324 2000.0 1.0 0.0 -fr 07_gas 1 324 2000.0 1.0 0.0 -fr 08_non-res 1 324 1500.0 1.0 0.0 +fr 01_solar 1 324 2000.0 0.0 1.0 +fr 02_wind_on 1 324 2000.0 0.0 1.0 +fr 03_wind_off 1 324 2000.0 0.0 1.0 +fr 04_res 1 324 2000.0 0.0 1.0 +fr 05_nuclear 1 324 2000.0 0.0 1.0 +fr 06_coal 1 324 2000.0 0.0 1.0 +fr 07_gas 1 324 2000.0 0.0 1.0 +fr 08_non-res 1 324 1500.0 0.0 1.0 fr 09_hydro_pump 1 324 0.0 0.0 0.0 -fr 01_solar 1 325 2000.0 1.0 0.0 -fr 02_wind_on 1 325 2000.0 1.0 0.0 -fr 03_wind_off 1 325 2000.0 1.0 0.0 -fr 04_res 1 325 2000.0 1.0 0.0 -fr 05_nuclear 1 325 2000.0 1.0 0.0 -fr 06_coal 1 325 2000.0 1.0 0.0 -fr 07_gas 1 325 2000.0 1.0 0.0 -fr 08_non-res 1 325 1600.0 1.0 0.0 +fr 01_solar 1 325 2000.0 0.0 1.0 +fr 02_wind_on 1 325 2000.0 0.0 1.0 +fr 03_wind_off 1 325 2000.0 0.0 1.0 +fr 04_res 1 325 2000.0 0.0 1.0 +fr 05_nuclear 1 325 2000.0 0.0 1.0 +fr 06_coal 1 325 2000.0 0.0 1.0 +fr 07_gas 1 325 2000.0 0.0 1.0 +fr 08_non-res 1 325 1600.0 0.0 1.0 fr 09_hydro_pump 1 325 0.0 0.0 0.0 -fr 01_solar 1 326 2000.0 1.0 0.0 -fr 02_wind_on 1 326 2000.0 1.0 0.0 -fr 03_wind_off 1 326 2000.0 1.0 0.0 -fr 04_res 1 326 2000.0 1.0 0.0 -fr 05_nuclear 1 326 2000.0 1.0 0.0 -fr 06_coal 1 326 2000.0 1.0 0.0 -fr 07_gas 1 326 2000.0 1.0 0.0 -fr 08_non-res 1 326 1700.0 1.0 0.0 +fr 01_solar 1 326 2000.0 0.0 1.0 +fr 02_wind_on 1 326 2000.0 0.0 1.0 +fr 03_wind_off 1 326 2000.0 0.0 1.0 +fr 04_res 1 326 2000.0 0.0 1.0 +fr 05_nuclear 1 326 2000.0 0.0 1.0 +fr 06_coal 1 326 2000.0 0.0 1.0 +fr 07_gas 1 326 2000.0 0.0 1.0 +fr 08_non-res 1 326 1700.0 0.0 1.0 fr 09_hydro_pump 1 326 0.0 0.0 0.0 -fr 01_solar 1 327 2000.0 1.0 0.0 -fr 02_wind_on 1 327 2000.0 1.0 0.0 -fr 03_wind_off 1 327 2000.0 1.0 0.0 -fr 04_res 1 327 2000.0 1.0 0.0 -fr 05_nuclear 1 327 2000.0 1.0 0.0 -fr 06_coal 1 327 2000.0 1.0 0.0 -fr 07_gas 1 327 2000.0 1.0 0.0 -fr 08_non-res 1 327 1800.0 1.0 0.0 +fr 01_solar 1 327 2000.0 0.0 1.0 +fr 02_wind_on 1 327 2000.0 0.0 1.0 +fr 03_wind_off 1 327 2000.0 0.0 1.0 +fr 04_res 1 327 2000.0 0.0 1.0 +fr 05_nuclear 1 327 2000.0 0.0 1.0 +fr 06_coal 1 327 2000.0 0.0 1.0 +fr 07_gas 1 327 2000.0 0.0 1.0 +fr 08_non-res 1 327 1800.0 0.0 1.0 fr 09_hydro_pump 1 327 0.0 0.0 0.0 -fr 01_solar 1 328 2000.0 1.0 0.0 -fr 02_wind_on 1 328 2000.0 1.0 0.0 -fr 03_wind_off 1 328 2000.0 1.0 0.0 -fr 04_res 1 328 2000.0 1.0 0.0 -fr 05_nuclear 1 328 2000.0 1.0 0.0 -fr 06_coal 1 328 2000.0 1.0 0.0 -fr 07_gas 1 328 2000.0 1.0 0.0 -fr 08_non-res 1 328 1900.0 1.0 0.0 +fr 01_solar 1 328 2000.0 0.0 1.0 +fr 02_wind_on 1 328 2000.0 0.0 1.0 +fr 03_wind_off 1 328 2000.0 0.0 1.0 +fr 04_res 1 328 2000.0 0.0 1.0 +fr 05_nuclear 1 328 2000.0 0.0 1.0 +fr 06_coal 1 328 2000.0 0.0 1.0 +fr 07_gas 1 328 2000.0 0.0 1.0 +fr 08_non-res 1 328 1900.0 0.0 1.0 fr 09_hydro_pump 1 328 0.0 0.0 0.0 -fr 01_solar 1 329 2000.0 1.0 0.0 -fr 02_wind_on 1 329 2000.0 1.0 0.0 -fr 03_wind_off 1 329 2000.0 1.0 0.0 -fr 04_res 1 329 2000.0 1.0 0.0 -fr 05_nuclear 1 329 2000.0 1.0 0.0 -fr 06_coal 1 329 2000.0 1.0 0.0 -fr 07_gas 1 329 2000.0 1.0 0.0 -fr 08_non-res 1 329 2000.0 1.0 0.0 +fr 01_solar 1 329 2000.0 0.0 1.0 +fr 02_wind_on 1 329 2000.0 0.0 1.0 +fr 03_wind_off 1 329 2000.0 0.0 1.0 +fr 04_res 1 329 2000.0 0.0 1.0 +fr 05_nuclear 1 329 2000.0 0.0 1.0 +fr 06_coal 1 329 2000.0 0.0 1.0 +fr 07_gas 1 329 2000.0 0.0 1.0 +fr 08_non-res 1 329 2000.0 0.0 1.0 fr 09_hydro_pump 1 329 0.0 0.0 0.0 -fr 01_solar 1 330 2000.0 1.0 0.0 -fr 02_wind_on 1 330 2000.0 1.0 0.0 -fr 03_wind_off 1 330 2000.0 1.0 0.0 -fr 04_res 1 330 2000.0 1.0 0.0 -fr 05_nuclear 1 330 2000.0 1.0 0.0 -fr 06_coal 1 330 2000.0 1.0 0.0 -fr 07_gas 1 330 2000.0 1.0 0.0 -fr 08_non-res 1 330 2000.0 1.0 0.0 -fr 09_hydro_pump 1 330 100.0 1.0 0.0 -fr 01_solar 1 331 2000.0 1.0 0.0 -fr 02_wind_on 1 331 2000.0 1.0 0.0 -fr 03_wind_off 1 331 2000.0 1.0 0.0 -fr 04_res 1 331 2000.0 1.0 0.0 -fr 05_nuclear 1 331 2000.0 1.0 0.0 -fr 06_coal 1 331 2000.0 1.0 0.0 -fr 07_gas 1 331 2000.0 1.0 0.0 -fr 08_non-res 1 331 2000.0 1.0 0.0 -fr 09_hydro_pump 1 331 200.0 1.0 0.0 -fr 01_solar 1 332 2000.0 1.0 0.0 -fr 02_wind_on 1 332 2000.0 1.0 0.0 -fr 03_wind_off 1 332 2000.0 1.0 0.0 -fr 04_res 1 332 2000.0 1.0 0.0 -fr 05_nuclear 1 332 2000.0 1.0 0.0 -fr 06_coal 1 332 2000.0 1.0 0.0 -fr 07_gas 1 332 2000.0 1.0 0.0 -fr 08_non-res 1 332 2000.0 1.0 0.0 -fr 09_hydro_pump 1 332 300.0 1.0 0.0 -fr 01_solar 1 333 2000.0 1.0 0.0 -fr 02_wind_on 1 333 2000.0 1.0 0.0 -fr 03_wind_off 1 333 2000.0 1.0 0.0 -fr 04_res 1 333 2000.0 1.0 0.0 -fr 05_nuclear 1 333 2000.0 1.0 0.0 -fr 06_coal 1 333 2000.0 1.0 0.0 -fr 07_gas 1 333 2000.0 1.0 0.0 -fr 08_non-res 1 333 2000.0 1.0 0.0 -fr 09_hydro_pump 1 333 400.0 1.0 0.0 -fr 01_solar 1 334 2000.0 1.0 0.0 -fr 02_wind_on 1 334 2000.0 1.0 0.0 -fr 03_wind_off 1 334 2000.0 1.0 0.0 -fr 04_res 1 334 2000.0 1.0 0.0 -fr 05_nuclear 1 334 2000.0 1.0 0.0 -fr 06_coal 1 334 2000.0 1.0 0.0 -fr 07_gas 1 334 2000.0 1.0 0.0 -fr 08_non-res 1 334 2000.0 1.0 0.0 -fr 09_hydro_pump 1 334 500.0 1.0 0.0 -fr 01_solar 1 335 2000.0 1.0 0.0 -fr 02_wind_on 1 335 2000.0 1.0 0.0 -fr 03_wind_off 1 335 2000.0 1.0 0.0 -fr 04_res 1 335 2000.0 1.0 0.0 -fr 05_nuclear 1 335 2000.0 1.0 0.0 -fr 06_coal 1 335 2000.0 1.0 0.0 -fr 07_gas 1 335 2000.0 1.0 0.0 -fr 08_non-res 1 335 2000.0 1.0 0.0 -fr 09_hydro_pump 1 335 600.0 1.0 0.0 -fr 01_solar 1 336 2000.0 1.0 0.0 -fr 02_wind_on 1 336 2000.0 1.0 0.0 -fr 03_wind_off 1 336 2000.0 1.0 0.0 -fr 04_res 1 336 2000.0 1.0 0.0 -fr 05_nuclear 1 336 2000.0 1.0 0.0 -fr 06_coal 1 336 2000.0 1.0 0.0 -fr 07_gas 1 336 2000.0 1.0 0.0 -fr 08_non-res 1 336 2000.0 1.0 0.0 -fr 09_hydro_pump 1 336 700.0 1.0 0.0 +fr 01_solar 1 330 2000.0 0.0 1.0 +fr 02_wind_on 1 330 2000.0 0.0 1.0 +fr 03_wind_off 1 330 2000.0 0.0 1.0 +fr 04_res 1 330 2000.0 0.0 1.0 +fr 05_nuclear 1 330 2000.0 0.0 1.0 +fr 06_coal 1 330 2000.0 0.0 1.0 +fr 07_gas 1 330 2000.0 0.0 1.0 +fr 08_non-res 1 330 2000.0 0.0 1.0 +fr 09_hydro_pump 1 330 100.0 0.0 1.0 +fr 01_solar 1 331 2000.0 0.0 1.0 +fr 02_wind_on 1 331 2000.0 0.0 1.0 +fr 03_wind_off 1 331 2000.0 0.0 1.0 +fr 04_res 1 331 2000.0 0.0 1.0 +fr 05_nuclear 1 331 2000.0 0.0 1.0 +fr 06_coal 1 331 2000.0 0.0 1.0 +fr 07_gas 1 331 2000.0 0.0 1.0 +fr 08_non-res 1 331 2000.0 0.0 1.0 +fr 09_hydro_pump 1 331 200.0 0.0 1.0 +fr 01_solar 1 332 2000.0 0.0 1.0 +fr 02_wind_on 1 332 2000.0 0.0 1.0 +fr 03_wind_off 1 332 2000.0 0.0 1.0 +fr 04_res 1 332 2000.0 0.0 1.0 +fr 05_nuclear 1 332 2000.0 0.0 1.0 +fr 06_coal 1 332 2000.0 0.0 1.0 +fr 07_gas 1 332 2000.0 0.0 1.0 +fr 08_non-res 1 332 2000.0 0.0 1.0 +fr 09_hydro_pump 1 332 300.0 0.0 1.0 +fr 01_solar 1 333 2000.0 0.0 1.0 +fr 02_wind_on 1 333 2000.0 0.0 1.0 +fr 03_wind_off 1 333 2000.0 0.0 1.0 +fr 04_res 1 333 2000.0 0.0 1.0 +fr 05_nuclear 1 333 2000.0 0.0 1.0 +fr 06_coal 1 333 2000.0 0.0 1.0 +fr 07_gas 1 333 2000.0 0.0 1.0 +fr 08_non-res 1 333 2000.0 0.0 1.0 +fr 09_hydro_pump 1 333 400.0 0.0 1.0 +fr 01_solar 1 334 2000.0 0.0 1.0 +fr 02_wind_on 1 334 2000.0 0.0 1.0 +fr 03_wind_off 1 334 2000.0 0.0 1.0 +fr 04_res 1 334 2000.0 0.0 1.0 +fr 05_nuclear 1 334 2000.0 0.0 1.0 +fr 06_coal 1 334 2000.0 0.0 1.0 +fr 07_gas 1 334 2000.0 0.0 1.0 +fr 08_non-res 1 334 2000.0 0.0 1.0 +fr 09_hydro_pump 1 334 500.0 0.0 1.0 +fr 01_solar 1 335 2000.0 0.0 1.0 +fr 02_wind_on 1 335 2000.0 0.0 1.0 +fr 03_wind_off 1 335 2000.0 0.0 1.0 +fr 04_res 1 335 2000.0 0.0 1.0 +fr 05_nuclear 1 335 2000.0 0.0 1.0 +fr 06_coal 1 335 2000.0 0.0 1.0 +fr 07_gas 1 335 2000.0 0.0 1.0 +fr 08_non-res 1 335 2000.0 0.0 1.0 +fr 09_hydro_pump 1 335 600.0 0.0 1.0 +fr 01_solar 1 336 2000.0 0.0 1.0 +fr 02_wind_on 1 336 2000.0 0.0 1.0 +fr 03_wind_off 1 336 2000.0 0.0 1.0 +fr 04_res 1 336 2000.0 0.0 1.0 +fr 05_nuclear 1 336 2000.0 0.0 1.0 +fr 06_coal 1 336 2000.0 0.0 1.0 +fr 07_gas 1 336 2000.0 0.0 1.0 +fr 08_non-res 1 336 2000.0 0.0 1.0 +fr 09_hydro_pump 1 336 700.0 0.0 1.0 it 01_solar 1 1 0.0 0.0 0.0 it 02_wind_on 1 1 0.0 0.0 0.0 it 03_wind_off 1 1 0.0 0.0 0.0 @@ -6056,7 +6056,7 @@ it 06_coal 1 1 0.0 0.0 0.0 it 07_gas 1 1 0.0 0.0 0.0 it 08_non-res 1 1 0.0 0.0 0.0 it 09_hydro_pump 1 1 0.0 0.0 0.0 -it 01_solar 1 2 100.0 1.0 0.0 +it 01_solar 1 2 100.0 0.0 1.0 it 02_wind_on 1 2 0.0 0.0 0.0 it 03_wind_off 1 2 0.0 0.0 0.0 it 04_res 1 2 0.0 0.0 0.0 @@ -6065,7 +6065,7 @@ it 06_coal 1 2 0.0 0.0 0.0 it 07_gas 1 2 0.0 0.0 0.0 it 08_non-res 1 2 0.0 0.0 0.0 it 09_hydro_pump 1 2 0.0 0.0 0.0 -it 01_solar 1 3 200.0 1.0 0.0 +it 01_solar 1 3 200.0 0.0 1.0 it 02_wind_on 1 3 0.0 0.0 0.0 it 03_wind_off 1 3 0.0 0.0 0.0 it 04_res 1 3 0.0 0.0 0.0 @@ -6074,7 +6074,7 @@ it 06_coal 1 3 0.0 0.0 0.0 it 07_gas 1 3 0.0 0.0 0.0 it 08_non-res 1 3 0.0 0.0 0.0 it 09_hydro_pump 1 3 0.0 0.0 0.0 -it 01_solar 1 4 300.0 1.0 0.0 +it 01_solar 1 4 300.0 0.0 1.0 it 02_wind_on 1 4 0.0 0.0 0.0 it 03_wind_off 1 4 0.0 0.0 0.0 it 04_res 1 4 0.0 0.0 0.0 @@ -6083,7 +6083,7 @@ it 06_coal 1 4 0.0 0.0 0.0 it 07_gas 1 4 0.0 0.0 0.0 it 08_non-res 1 4 0.0 0.0 0.0 it 09_hydro_pump 1 4 0.0 0.0 0.0 -it 01_solar 1 5 400.0 1.0 0.0 +it 01_solar 1 5 400.0 0.0 1.0 it 02_wind_on 1 5 0.0 0.0 0.0 it 03_wind_off 1 5 0.0 0.0 0.0 it 04_res 1 5 0.0 0.0 0.0 @@ -6092,7 +6092,7 @@ it 06_coal 1 5 0.0 0.0 0.0 it 07_gas 1 5 0.0 0.0 0.0 it 08_non-res 1 5 0.0 0.0 0.0 it 09_hydro_pump 1 5 0.0 0.0 0.0 -it 01_solar 1 6 500.0 1.0 0.0 +it 01_solar 1 6 500.0 0.0 1.0 it 02_wind_on 1 6 0.0 0.0 0.0 it 03_wind_off 1 6 0.0 0.0 0.0 it 04_res 1 6 0.0 0.0 0.0 @@ -6101,7 +6101,7 @@ it 06_coal 1 6 0.0 0.0 0.0 it 07_gas 1 6 0.0 0.0 0.0 it 08_non-res 1 6 0.0 0.0 0.0 it 09_hydro_pump 1 6 0.0 0.0 0.0 -it 01_solar 1 7 600.0 1.0 0.0 +it 01_solar 1 7 600.0 0.0 1.0 it 02_wind_on 1 7 0.0 0.0 0.0 it 03_wind_off 1 7 0.0 0.0 0.0 it 04_res 1 7 0.0 0.0 0.0 @@ -6110,7 +6110,7 @@ it 06_coal 1 7 0.0 0.0 0.0 it 07_gas 1 7 0.0 0.0 0.0 it 08_non-res 1 7 0.0 0.0 0.0 it 09_hydro_pump 1 7 0.0 0.0 0.0 -it 01_solar 1 8 700.0 1.0 0.0 +it 01_solar 1 8 700.0 0.0 1.0 it 02_wind_on 1 8 0.0 0.0 0.0 it 03_wind_off 1 8 0.0 0.0 0.0 it 04_res 1 8 0.0 0.0 0.0 @@ -6119,7 +6119,7 @@ it 06_coal 1 8 0.0 0.0 0.0 it 07_gas 1 8 0.0 0.0 0.0 it 08_non-res 1 8 0.0 0.0 0.0 it 09_hydro_pump 1 8 0.0 0.0 0.0 -it 01_solar 1 9 800.0 1.0 0.0 +it 01_solar 1 9 800.0 0.0 1.0 it 02_wind_on 1 9 0.0 0.0 0.0 it 03_wind_off 1 9 0.0 0.0 0.0 it 04_res 1 9 0.0 0.0 0.0 @@ -6128,7 +6128,7 @@ it 06_coal 1 9 0.0 0.0 0.0 it 07_gas 1 9 0.0 0.0 0.0 it 08_non-res 1 9 0.0 0.0 0.0 it 09_hydro_pump 1 9 0.0 0.0 0.0 -it 01_solar 1 10 900.0 1.0 0.0 +it 01_solar 1 10 900.0 0.0 1.0 it 02_wind_on 1 10 0.0 0.0 0.0 it 03_wind_off 1 10 0.0 0.0 0.0 it 04_res 1 10 0.0 0.0 0.0 @@ -6137,7 +6137,7 @@ it 06_coal 1 10 0.0 0.0 0.0 it 07_gas 1 10 0.0 0.0 0.0 it 08_non-res 1 10 0.0 0.0 0.0 it 09_hydro_pump 1 10 0.0 0.0 0.0 -it 01_solar 1 11 1000.0 1.0 0.0 +it 01_solar 1 11 1000.0 0.0 1.0 it 02_wind_on 1 11 0.0 0.0 0.0 it 03_wind_off 1 11 0.0 0.0 0.0 it 04_res 1 11 0.0 0.0 0.0 @@ -6146,7 +6146,7 @@ it 06_coal 1 11 0.0 0.0 0.0 it 07_gas 1 11 0.0 0.0 0.0 it 08_non-res 1 11 0.0 0.0 0.0 it 09_hydro_pump 1 11 0.0 0.0 0.0 -it 01_solar 1 12 1100.0 1.0 0.0 +it 01_solar 1 12 1100.0 0.0 1.0 it 02_wind_on 1 12 0.0 0.0 0.0 it 03_wind_off 1 12 0.0 0.0 0.0 it 04_res 1 12 0.0 0.0 0.0 @@ -6155,7 +6155,7 @@ it 06_coal 1 12 0.0 0.0 0.0 it 07_gas 1 12 0.0 0.0 0.0 it 08_non-res 1 12 0.0 0.0 0.0 it 09_hydro_pump 1 12 0.0 0.0 0.0 -it 01_solar 1 13 1200.0 1.0 0.0 +it 01_solar 1 13 1200.0 0.0 1.0 it 02_wind_on 1 13 0.0 0.0 0.0 it 03_wind_off 1 13 0.0 0.0 0.0 it 04_res 1 13 0.0 0.0 0.0 @@ -6164,7 +6164,7 @@ it 06_coal 1 13 0.0 0.0 0.0 it 07_gas 1 13 0.0 0.0 0.0 it 08_non-res 1 13 0.0 0.0 0.0 it 09_hydro_pump 1 13 0.0 0.0 0.0 -it 01_solar 1 14 1300.0 1.0 0.0 +it 01_solar 1 14 1300.0 0.0 1.0 it 02_wind_on 1 14 0.0 0.0 0.0 it 03_wind_off 1 14 0.0 0.0 0.0 it 04_res 1 14 0.0 0.0 0.0 @@ -6173,7 +6173,7 @@ it 06_coal 1 14 0.0 0.0 0.0 it 07_gas 1 14 0.0 0.0 0.0 it 08_non-res 1 14 0.0 0.0 0.0 it 09_hydro_pump 1 14 0.0 0.0 0.0 -it 01_solar 1 15 1400.0 1.0 0.0 +it 01_solar 1 15 1400.0 0.0 1.0 it 02_wind_on 1 15 0.0 0.0 0.0 it 03_wind_off 1 15 0.0 0.0 0.0 it 04_res 1 15 0.0 0.0 0.0 @@ -6182,7 +6182,7 @@ it 06_coal 1 15 0.0 0.0 0.0 it 07_gas 1 15 0.0 0.0 0.0 it 08_non-res 1 15 0.0 0.0 0.0 it 09_hydro_pump 1 15 0.0 0.0 0.0 -it 01_solar 1 16 1500.0 1.0 0.0 +it 01_solar 1 16 1500.0 0.0 1.0 it 02_wind_on 1 16 0.0 0.0 0.0 it 03_wind_off 1 16 0.0 0.0 0.0 it 04_res 1 16 0.0 0.0 0.0 @@ -6191,7 +6191,7 @@ it 06_coal 1 16 0.0 0.0 0.0 it 07_gas 1 16 0.0 0.0 0.0 it 08_non-res 1 16 0.0 0.0 0.0 it 09_hydro_pump 1 16 0.0 0.0 0.0 -it 01_solar 1 17 1600.0 1.0 0.0 +it 01_solar 1 17 1600.0 0.0 1.0 it 02_wind_on 1 17 0.0 0.0 0.0 it 03_wind_off 1 17 0.0 0.0 0.0 it 04_res 1 17 0.0 0.0 0.0 @@ -6200,7 +6200,7 @@ it 06_coal 1 17 0.0 0.0 0.0 it 07_gas 1 17 0.0 0.0 0.0 it 08_non-res 1 17 0.0 0.0 0.0 it 09_hydro_pump 1 17 0.0 0.0 0.0 -it 01_solar 1 18 1700.0 1.0 0.0 +it 01_solar 1 18 1700.0 0.0 1.0 it 02_wind_on 1 18 0.0 0.0 0.0 it 03_wind_off 1 18 0.0 0.0 0.0 it 04_res 1 18 0.0 0.0 0.0 @@ -6209,7 +6209,7 @@ it 06_coal 1 18 0.0 0.0 0.0 it 07_gas 1 18 0.0 0.0 0.0 it 08_non-res 1 18 0.0 0.0 0.0 it 09_hydro_pump 1 18 0.0 0.0 0.0 -it 01_solar 1 19 1800.0 1.0 0.0 +it 01_solar 1 19 1800.0 0.0 1.0 it 02_wind_on 1 19 0.0 0.0 0.0 it 03_wind_off 1 19 0.0 0.0 0.0 it 04_res 1 19 0.0 0.0 0.0 @@ -6218,7 +6218,7 @@ it 06_coal 1 19 0.0 0.0 0.0 it 07_gas 1 19 0.0 0.0 0.0 it 08_non-res 1 19 0.0 0.0 0.0 it 09_hydro_pump 1 19 0.0 0.0 0.0 -it 01_solar 1 20 1900.0 1.0 0.0 +it 01_solar 1 20 1900.0 0.0 1.0 it 02_wind_on 1 20 0.0 0.0 0.0 it 03_wind_off 1 20 0.0 0.0 0.0 it 04_res 1 20 0.0 0.0 0.0 @@ -6227,7 +6227,7 @@ it 06_coal 1 20 0.0 0.0 0.0 it 07_gas 1 20 0.0 0.0 0.0 it 08_non-res 1 20 0.0 0.0 0.0 it 09_hydro_pump 1 20 0.0 0.0 0.0 -it 01_solar 1 21 2000.0 1.0 0.0 +it 01_solar 1 21 2000.0 0.0 1.0 it 02_wind_on 1 21 0.0 0.0 0.0 it 03_wind_off 1 21 0.0 0.0 0.0 it 04_res 1 21 0.0 0.0 0.0 @@ -6236,8 +6236,8 @@ it 06_coal 1 21 0.0 0.0 0.0 it 07_gas 1 21 0.0 0.0 0.0 it 08_non-res 1 21 0.0 0.0 0.0 it 09_hydro_pump 1 21 0.0 0.0 0.0 -it 01_solar 1 22 2000.0 1.0 0.0 -it 02_wind_on 1 22 100.0 1.0 0.0 +it 01_solar 1 22 2000.0 0.0 1.0 +it 02_wind_on 1 22 100.0 0.0 1.0 it 03_wind_off 1 22 0.0 0.0 0.0 it 04_res 1 22 0.0 0.0 0.0 it 05_nuclear 1 22 0.0 0.0 0.0 @@ -6245,8 +6245,8 @@ it 06_coal 1 22 0.0 0.0 0.0 it 07_gas 1 22 0.0 0.0 0.0 it 08_non-res 1 22 0.0 0.0 0.0 it 09_hydro_pump 1 22 0.0 0.0 0.0 -it 01_solar 1 23 2000.0 1.0 0.0 -it 02_wind_on 1 23 200.0 1.0 0.0 +it 01_solar 1 23 2000.0 0.0 1.0 +it 02_wind_on 1 23 200.0 0.0 1.0 it 03_wind_off 1 23 0.0 0.0 0.0 it 04_res 1 23 0.0 0.0 0.0 it 05_nuclear 1 23 0.0 0.0 0.0 @@ -6254,8 +6254,8 @@ it 06_coal 1 23 0.0 0.0 0.0 it 07_gas 1 23 0.0 0.0 0.0 it 08_non-res 1 23 0.0 0.0 0.0 it 09_hydro_pump 1 23 0.0 0.0 0.0 -it 01_solar 1 24 2000.0 1.0 0.0 -it 02_wind_on 1 24 300.0 1.0 0.0 +it 01_solar 1 24 2000.0 0.0 1.0 +it 02_wind_on 1 24 300.0 0.0 1.0 it 03_wind_off 1 24 0.0 0.0 0.0 it 04_res 1 24 0.0 0.0 0.0 it 05_nuclear 1 24 0.0 0.0 0.0 @@ -6263,8 +6263,8 @@ it 06_coal 1 24 0.0 0.0 0.0 it 07_gas 1 24 0.0 0.0 0.0 it 08_non-res 1 24 0.0 0.0 0.0 it 09_hydro_pump 1 24 0.0 0.0 0.0 -it 01_solar 1 25 2000.0 1.0 0.0 -it 02_wind_on 1 25 400.0 1.0 0.0 +it 01_solar 1 25 2000.0 0.0 1.0 +it 02_wind_on 1 25 400.0 0.0 1.0 it 03_wind_off 1 25 0.0 0.0 0.0 it 04_res 1 25 0.0 0.0 0.0 it 05_nuclear 1 25 0.0 0.0 0.0 @@ -6272,8 +6272,8 @@ it 06_coal 1 25 0.0 0.0 0.0 it 07_gas 1 25 0.0 0.0 0.0 it 08_non-res 1 25 0.0 0.0 0.0 it 09_hydro_pump 1 25 0.0 0.0 0.0 -it 01_solar 1 26 2000.0 1.0 0.0 -it 02_wind_on 1 26 500.0 1.0 0.0 +it 01_solar 1 26 2000.0 0.0 1.0 +it 02_wind_on 1 26 500.0 0.0 1.0 it 03_wind_off 1 26 0.0 0.0 0.0 it 04_res 1 26 0.0 0.0 0.0 it 05_nuclear 1 26 0.0 0.0 0.0 @@ -6281,8 +6281,8 @@ it 06_coal 1 26 0.0 0.0 0.0 it 07_gas 1 26 0.0 0.0 0.0 it 08_non-res 1 26 0.0 0.0 0.0 it 09_hydro_pump 1 26 0.0 0.0 0.0 -it 01_solar 1 27 2000.0 1.0 0.0 -it 02_wind_on 1 27 600.0 1.0 0.0 +it 01_solar 1 27 2000.0 0.0 1.0 +it 02_wind_on 1 27 600.0 0.0 1.0 it 03_wind_off 1 27 0.0 0.0 0.0 it 04_res 1 27 0.0 0.0 0.0 it 05_nuclear 1 27 0.0 0.0 0.0 @@ -6290,8 +6290,8 @@ it 06_coal 1 27 0.0 0.0 0.0 it 07_gas 1 27 0.0 0.0 0.0 it 08_non-res 1 27 0.0 0.0 0.0 it 09_hydro_pump 1 27 0.0 0.0 0.0 -it 01_solar 1 28 2000.0 1.0 0.0 -it 02_wind_on 1 28 700.0 1.0 0.0 +it 01_solar 1 28 2000.0 0.0 1.0 +it 02_wind_on 1 28 700.0 0.0 1.0 it 03_wind_off 1 28 0.0 0.0 0.0 it 04_res 1 28 0.0 0.0 0.0 it 05_nuclear 1 28 0.0 0.0 0.0 @@ -6299,8 +6299,8 @@ it 06_coal 1 28 0.0 0.0 0.0 it 07_gas 1 28 0.0 0.0 0.0 it 08_non-res 1 28 0.0 0.0 0.0 it 09_hydro_pump 1 28 0.0 0.0 0.0 -it 01_solar 1 29 2000.0 1.0 0.0 -it 02_wind_on 1 29 800.0 1.0 0.0 +it 01_solar 1 29 2000.0 0.0 1.0 +it 02_wind_on 1 29 800.0 0.0 1.0 it 03_wind_off 1 29 0.0 0.0 0.0 it 04_res 1 29 0.0 0.0 0.0 it 05_nuclear 1 29 0.0 0.0 0.0 @@ -6308,8 +6308,8 @@ it 06_coal 1 29 0.0 0.0 0.0 it 07_gas 1 29 0.0 0.0 0.0 it 08_non-res 1 29 0.0 0.0 0.0 it 09_hydro_pump 1 29 0.0 0.0 0.0 -it 01_solar 1 30 2000.0 1.0 0.0 -it 02_wind_on 1 30 900.0 1.0 0.0 +it 01_solar 1 30 2000.0 0.0 1.0 +it 02_wind_on 1 30 900.0 0.0 1.0 it 03_wind_off 1 30 0.0 0.0 0.0 it 04_res 1 30 0.0 0.0 0.0 it 05_nuclear 1 30 0.0 0.0 0.0 @@ -6317,8 +6317,8 @@ it 06_coal 1 30 0.0 0.0 0.0 it 07_gas 1 30 0.0 0.0 0.0 it 08_non-res 1 30 0.0 0.0 0.0 it 09_hydro_pump 1 30 0.0 0.0 0.0 -it 01_solar 1 31 2000.0 1.0 0.0 -it 02_wind_on 1 31 1000.0 1.0 0.0 +it 01_solar 1 31 2000.0 0.0 1.0 +it 02_wind_on 1 31 1000.0 0.0 1.0 it 03_wind_off 1 31 0.0 0.0 0.0 it 04_res 1 31 0.0 0.0 0.0 it 05_nuclear 1 31 0.0 0.0 0.0 @@ -6326,8 +6326,8 @@ it 06_coal 1 31 0.0 0.0 0.0 it 07_gas 1 31 0.0 0.0 0.0 it 08_non-res 1 31 0.0 0.0 0.0 it 09_hydro_pump 1 31 0.0 0.0 0.0 -it 01_solar 1 32 2000.0 1.0 0.0 -it 02_wind_on 1 32 1100.0 1.0 0.0 +it 01_solar 1 32 2000.0 0.0 1.0 +it 02_wind_on 1 32 1100.0 0.0 1.0 it 03_wind_off 1 32 0.0 0.0 0.0 it 04_res 1 32 0.0 0.0 0.0 it 05_nuclear 1 32 0.0 0.0 0.0 @@ -6335,8 +6335,8 @@ it 06_coal 1 32 0.0 0.0 0.0 it 07_gas 1 32 0.0 0.0 0.0 it 08_non-res 1 32 0.0 0.0 0.0 it 09_hydro_pump 1 32 0.0 0.0 0.0 -it 01_solar 1 33 2000.0 1.0 0.0 -it 02_wind_on 1 33 1200.0 1.0 0.0 +it 01_solar 1 33 2000.0 0.0 1.0 +it 02_wind_on 1 33 1200.0 0.0 1.0 it 03_wind_off 1 33 0.0 0.0 0.0 it 04_res 1 33 0.0 0.0 0.0 it 05_nuclear 1 33 0.0 0.0 0.0 @@ -6344,8 +6344,8 @@ it 06_coal 1 33 0.0 0.0 0.0 it 07_gas 1 33 0.0 0.0 0.0 it 08_non-res 1 33 0.0 0.0 0.0 it 09_hydro_pump 1 33 0.0 0.0 0.0 -it 01_solar 1 34 2000.0 1.0 0.0 -it 02_wind_on 1 34 1300.0 1.0 0.0 +it 01_solar 1 34 2000.0 0.0 1.0 +it 02_wind_on 1 34 1300.0 0.0 1.0 it 03_wind_off 1 34 0.0 0.0 0.0 it 04_res 1 34 0.0 0.0 0.0 it 05_nuclear 1 34 0.0 0.0 0.0 @@ -6353,8 +6353,8 @@ it 06_coal 1 34 0.0 0.0 0.0 it 07_gas 1 34 0.0 0.0 0.0 it 08_non-res 1 34 0.0 0.0 0.0 it 09_hydro_pump 1 34 0.0 0.0 0.0 -it 01_solar 1 35 2000.0 1.0 0.0 -it 02_wind_on 1 35 1400.0 1.0 0.0 +it 01_solar 1 35 2000.0 0.0 1.0 +it 02_wind_on 1 35 1400.0 0.0 1.0 it 03_wind_off 1 35 0.0 0.0 0.0 it 04_res 1 35 0.0 0.0 0.0 it 05_nuclear 1 35 0.0 0.0 0.0 @@ -6362,8 +6362,8 @@ it 06_coal 1 35 0.0 0.0 0.0 it 07_gas 1 35 0.0 0.0 0.0 it 08_non-res 1 35 0.0 0.0 0.0 it 09_hydro_pump 1 35 0.0 0.0 0.0 -it 01_solar 1 36 2000.0 1.0 0.0 -it 02_wind_on 1 36 1500.0 1.0 0.0 +it 01_solar 1 36 2000.0 0.0 1.0 +it 02_wind_on 1 36 1500.0 0.0 1.0 it 03_wind_off 1 36 0.0 0.0 0.0 it 04_res 1 36 0.0 0.0 0.0 it 05_nuclear 1 36 0.0 0.0 0.0 @@ -6371,8 +6371,8 @@ it 06_coal 1 36 0.0 0.0 0.0 it 07_gas 1 36 0.0 0.0 0.0 it 08_non-res 1 36 0.0 0.0 0.0 it 09_hydro_pump 1 36 0.0 0.0 0.0 -it 01_solar 1 37 2000.0 1.0 0.0 -it 02_wind_on 1 37 1600.0 1.0 0.0 +it 01_solar 1 37 2000.0 0.0 1.0 +it 02_wind_on 1 37 1600.0 0.0 1.0 it 03_wind_off 1 37 0.0 0.0 0.0 it 04_res 1 37 0.0 0.0 0.0 it 05_nuclear 1 37 0.0 0.0 0.0 @@ -6380,8 +6380,8 @@ it 06_coal 1 37 0.0 0.0 0.0 it 07_gas 1 37 0.0 0.0 0.0 it 08_non-res 1 37 0.0 0.0 0.0 it 09_hydro_pump 1 37 0.0 0.0 0.0 -it 01_solar 1 38 2000.0 1.0 0.0 -it 02_wind_on 1 38 1700.0 1.0 0.0 +it 01_solar 1 38 2000.0 0.0 1.0 +it 02_wind_on 1 38 1700.0 0.0 1.0 it 03_wind_off 1 38 0.0 0.0 0.0 it 04_res 1 38 0.0 0.0 0.0 it 05_nuclear 1 38 0.0 0.0 0.0 @@ -6389,8 +6389,8 @@ it 06_coal 1 38 0.0 0.0 0.0 it 07_gas 1 38 0.0 0.0 0.0 it 08_non-res 1 38 0.0 0.0 0.0 it 09_hydro_pump 1 38 0.0 0.0 0.0 -it 01_solar 1 39 2000.0 1.0 0.0 -it 02_wind_on 1 39 1800.0 1.0 0.0 +it 01_solar 1 39 2000.0 0.0 1.0 +it 02_wind_on 1 39 1800.0 0.0 1.0 it 03_wind_off 1 39 0.0 0.0 0.0 it 04_res 1 39 0.0 0.0 0.0 it 05_nuclear 1 39 0.0 0.0 0.0 @@ -6398,8 +6398,8 @@ it 06_coal 1 39 0.0 0.0 0.0 it 07_gas 1 39 0.0 0.0 0.0 it 08_non-res 1 39 0.0 0.0 0.0 it 09_hydro_pump 1 39 0.0 0.0 0.0 -it 01_solar 1 40 2000.0 1.0 0.0 -it 02_wind_on 1 40 1900.0 1.0 0.0 +it 01_solar 1 40 2000.0 0.0 1.0 +it 02_wind_on 1 40 1900.0 0.0 1.0 it 03_wind_off 1 40 0.0 0.0 0.0 it 04_res 1 40 0.0 0.0 0.0 it 05_nuclear 1 40 0.0 0.0 0.0 @@ -6407,8 +6407,8 @@ it 06_coal 1 40 0.0 0.0 0.0 it 07_gas 1 40 0.0 0.0 0.0 it 08_non-res 1 40 0.0 0.0 0.0 it 09_hydro_pump 1 40 0.0 0.0 0.0 -it 01_solar 1 41 2000.0 1.0 0.0 -it 02_wind_on 1 41 2000.0 1.0 0.0 +it 01_solar 1 41 2000.0 0.0 1.0 +it 02_wind_on 1 41 2000.0 0.0 1.0 it 03_wind_off 1 41 0.0 0.0 0.0 it 04_res 1 41 0.0 0.0 0.0 it 05_nuclear 1 41 0.0 0.0 0.0 @@ -6416,1149 +6416,1149 @@ it 06_coal 1 41 0.0 0.0 0.0 it 07_gas 1 41 0.0 0.0 0.0 it 08_non-res 1 41 0.0 0.0 0.0 it 09_hydro_pump 1 41 0.0 0.0 0.0 -it 01_solar 1 42 2000.0 1.0 0.0 -it 02_wind_on 1 42 2000.0 1.0 0.0 -it 03_wind_off 1 42 100.0 1.0 0.0 +it 01_solar 1 42 2000.0 0.0 1.0 +it 02_wind_on 1 42 2000.0 0.0 1.0 +it 03_wind_off 1 42 100.0 0.0 1.0 it 04_res 1 42 0.0 0.0 0.0 it 05_nuclear 1 42 0.0 0.0 0.0 it 06_coal 1 42 0.0 0.0 0.0 it 07_gas 1 42 0.0 0.0 0.0 it 08_non-res 1 42 0.0 0.0 0.0 it 09_hydro_pump 1 42 0.0 0.0 0.0 -it 01_solar 1 43 2000.0 1.0 0.0 -it 02_wind_on 1 43 2000.0 1.0 0.0 -it 03_wind_off 1 43 200.0 1.0 0.0 +it 01_solar 1 43 2000.0 0.0 1.0 +it 02_wind_on 1 43 2000.0 0.0 1.0 +it 03_wind_off 1 43 200.0 0.0 1.0 it 04_res 1 43 0.0 0.0 0.0 it 05_nuclear 1 43 0.0 0.0 0.0 it 06_coal 1 43 0.0 0.0 0.0 it 07_gas 1 43 0.0 0.0 0.0 it 08_non-res 1 43 0.0 0.0 0.0 it 09_hydro_pump 1 43 0.0 0.0 0.0 -it 01_solar 1 44 2000.0 1.0 0.0 -it 02_wind_on 1 44 2000.0 1.0 0.0 -it 03_wind_off 1 44 300.0 1.0 0.0 +it 01_solar 1 44 2000.0 0.0 1.0 +it 02_wind_on 1 44 2000.0 0.0 1.0 +it 03_wind_off 1 44 300.0 0.0 1.0 it 04_res 1 44 0.0 0.0 0.0 it 05_nuclear 1 44 0.0 0.0 0.0 it 06_coal 1 44 0.0 0.0 0.0 it 07_gas 1 44 0.0 0.0 0.0 it 08_non-res 1 44 0.0 0.0 0.0 it 09_hydro_pump 1 44 0.0 0.0 0.0 -it 01_solar 1 45 2000.0 1.0 0.0 -it 02_wind_on 1 45 2000.0 1.0 0.0 -it 03_wind_off 1 45 400.0 1.0 0.0 +it 01_solar 1 45 2000.0 0.0 1.0 +it 02_wind_on 1 45 2000.0 0.0 1.0 +it 03_wind_off 1 45 400.0 0.0 1.0 it 04_res 1 45 0.0 0.0 0.0 it 05_nuclear 1 45 0.0 0.0 0.0 it 06_coal 1 45 0.0 0.0 0.0 it 07_gas 1 45 0.0 0.0 0.0 it 08_non-res 1 45 0.0 0.0 0.0 it 09_hydro_pump 1 45 0.0 0.0 0.0 -it 01_solar 1 46 2000.0 1.0 0.0 -it 02_wind_on 1 46 2000.0 1.0 0.0 -it 03_wind_off 1 46 500.0 1.0 0.0 +it 01_solar 1 46 2000.0 0.0 1.0 +it 02_wind_on 1 46 2000.0 0.0 1.0 +it 03_wind_off 1 46 500.0 0.0 1.0 it 04_res 1 46 0.0 0.0 0.0 it 05_nuclear 1 46 0.0 0.0 0.0 it 06_coal 1 46 0.0 0.0 0.0 it 07_gas 1 46 0.0 0.0 0.0 it 08_non-res 1 46 0.0 0.0 0.0 it 09_hydro_pump 1 46 0.0 0.0 0.0 -it 01_solar 1 47 2000.0 1.0 0.0 -it 02_wind_on 1 47 2000.0 1.0 0.0 -it 03_wind_off 1 47 600.0 1.0 0.0 +it 01_solar 1 47 2000.0 0.0 1.0 +it 02_wind_on 1 47 2000.0 0.0 1.0 +it 03_wind_off 1 47 600.0 0.0 1.0 it 04_res 1 47 0.0 0.0 0.0 it 05_nuclear 1 47 0.0 0.0 0.0 it 06_coal 1 47 0.0 0.0 0.0 it 07_gas 1 47 0.0 0.0 0.0 it 08_non-res 1 47 0.0 0.0 0.0 it 09_hydro_pump 1 47 0.0 0.0 0.0 -it 01_solar 1 48 2000.0 1.0 0.0 -it 02_wind_on 1 48 2000.0 1.0 0.0 -it 03_wind_off 1 48 700.0 1.0 0.0 +it 01_solar 1 48 2000.0 0.0 1.0 +it 02_wind_on 1 48 2000.0 0.0 1.0 +it 03_wind_off 1 48 700.0 0.0 1.0 it 04_res 1 48 0.0 0.0 0.0 it 05_nuclear 1 48 0.0 0.0 0.0 it 06_coal 1 48 0.0 0.0 0.0 it 07_gas 1 48 0.0 0.0 0.0 it 08_non-res 1 48 0.0 0.0 0.0 it 09_hydro_pump 1 48 0.0 0.0 0.0 -it 01_solar 1 49 2000.0 1.0 0.0 -it 02_wind_on 1 49 2000.0 1.0 0.0 -it 03_wind_off 1 49 800.0 1.0 0.0 +it 01_solar 1 49 2000.0 0.0 1.0 +it 02_wind_on 1 49 2000.0 0.0 1.0 +it 03_wind_off 1 49 800.0 0.0 1.0 it 04_res 1 49 0.0 0.0 0.0 it 05_nuclear 1 49 0.0 0.0 0.0 it 06_coal 1 49 0.0 0.0 0.0 it 07_gas 1 49 0.0 0.0 0.0 it 08_non-res 1 49 0.0 0.0 0.0 it 09_hydro_pump 1 49 0.0 0.0 0.0 -it 01_solar 1 50 2000.0 1.0 0.0 -it 02_wind_on 1 50 2000.0 1.0 0.0 -it 03_wind_off 1 50 900.0 1.0 0.0 +it 01_solar 1 50 2000.0 0.0 1.0 +it 02_wind_on 1 50 2000.0 0.0 1.0 +it 03_wind_off 1 50 900.0 0.0 1.0 it 04_res 1 50 0.0 0.0 0.0 it 05_nuclear 1 50 0.0 0.0 0.0 it 06_coal 1 50 0.0 0.0 0.0 it 07_gas 1 50 0.0 0.0 0.0 it 08_non-res 1 50 0.0 0.0 0.0 it 09_hydro_pump 1 50 0.0 0.0 0.0 -it 01_solar 1 51 2000.0 1.0 0.0 -it 02_wind_on 1 51 2000.0 1.0 0.0 -it 03_wind_off 1 51 1000.0 1.0 0.0 +it 01_solar 1 51 2000.0 0.0 1.0 +it 02_wind_on 1 51 2000.0 0.0 1.0 +it 03_wind_off 1 51 1000.0 0.0 1.0 it 04_res 1 51 0.0 0.0 0.0 it 05_nuclear 1 51 0.0 0.0 0.0 it 06_coal 1 51 0.0 0.0 0.0 it 07_gas 1 51 0.0 0.0 0.0 it 08_non-res 1 51 0.0 0.0 0.0 it 09_hydro_pump 1 51 0.0 0.0 0.0 -it 01_solar 1 52 2000.0 1.0 0.0 -it 02_wind_on 1 52 2000.0 1.0 0.0 -it 03_wind_off 1 52 1100.0 1.0 0.0 +it 01_solar 1 52 2000.0 0.0 1.0 +it 02_wind_on 1 52 2000.0 0.0 1.0 +it 03_wind_off 1 52 1100.0 0.0 1.0 it 04_res 1 52 0.0 0.0 0.0 it 05_nuclear 1 52 0.0 0.0 0.0 it 06_coal 1 52 0.0 0.0 0.0 it 07_gas 1 52 0.0 0.0 0.0 it 08_non-res 1 52 0.0 0.0 0.0 it 09_hydro_pump 1 52 0.0 0.0 0.0 -it 01_solar 1 53 2000.0 1.0 0.0 -it 02_wind_on 1 53 2000.0 1.0 0.0 -it 03_wind_off 1 53 1200.0 1.0 0.0 +it 01_solar 1 53 2000.0 0.0 1.0 +it 02_wind_on 1 53 2000.0 0.0 1.0 +it 03_wind_off 1 53 1200.0 0.0 1.0 it 04_res 1 53 0.0 0.0 0.0 it 05_nuclear 1 53 0.0 0.0 0.0 it 06_coal 1 53 0.0 0.0 0.0 it 07_gas 1 53 0.0 0.0 0.0 it 08_non-res 1 53 0.0 0.0 0.0 it 09_hydro_pump 1 53 0.0 0.0 0.0 -it 01_solar 1 54 2000.0 1.0 0.0 -it 02_wind_on 1 54 2000.0 1.0 0.0 -it 03_wind_off 1 54 1300.0 1.0 0.0 +it 01_solar 1 54 2000.0 0.0 1.0 +it 02_wind_on 1 54 2000.0 0.0 1.0 +it 03_wind_off 1 54 1300.0 0.0 1.0 it 04_res 1 54 0.0 0.0 0.0 it 05_nuclear 1 54 0.0 0.0 0.0 it 06_coal 1 54 0.0 0.0 0.0 it 07_gas 1 54 0.0 0.0 0.0 it 08_non-res 1 54 0.0 0.0 0.0 it 09_hydro_pump 1 54 0.0 0.0 0.0 -it 01_solar 1 55 2000.0 1.0 0.0 -it 02_wind_on 1 55 2000.0 1.0 0.0 -it 03_wind_off 1 55 1400.0 1.0 0.0 +it 01_solar 1 55 2000.0 0.0 1.0 +it 02_wind_on 1 55 2000.0 0.0 1.0 +it 03_wind_off 1 55 1400.0 0.0 1.0 it 04_res 1 55 0.0 0.0 0.0 it 05_nuclear 1 55 0.0 0.0 0.0 it 06_coal 1 55 0.0 0.0 0.0 it 07_gas 1 55 0.0 0.0 0.0 it 08_non-res 1 55 0.0 0.0 0.0 it 09_hydro_pump 1 55 0.0 0.0 0.0 -it 01_solar 1 56 2000.0 1.0 0.0 -it 02_wind_on 1 56 2000.0 1.0 0.0 -it 03_wind_off 1 56 1500.0 1.0 0.0 +it 01_solar 1 56 2000.0 0.0 1.0 +it 02_wind_on 1 56 2000.0 0.0 1.0 +it 03_wind_off 1 56 1500.0 0.0 1.0 it 04_res 1 56 0.0 0.0 0.0 it 05_nuclear 1 56 0.0 0.0 0.0 it 06_coal 1 56 0.0 0.0 0.0 it 07_gas 1 56 0.0 0.0 0.0 it 08_non-res 1 56 0.0 0.0 0.0 it 09_hydro_pump 1 56 0.0 0.0 0.0 -it 01_solar 1 57 2000.0 1.0 0.0 -it 02_wind_on 1 57 2000.0 1.0 0.0 -it 03_wind_off 1 57 1600.0 1.0 0.0 +it 01_solar 1 57 2000.0 0.0 1.0 +it 02_wind_on 1 57 2000.0 0.0 1.0 +it 03_wind_off 1 57 1600.0 0.0 1.0 it 04_res 1 57 0.0 0.0 0.0 it 05_nuclear 1 57 0.0 0.0 0.0 it 06_coal 1 57 0.0 0.0 0.0 it 07_gas 1 57 0.0 0.0 0.0 it 08_non-res 1 57 0.0 0.0 0.0 it 09_hydro_pump 1 57 0.0 0.0 0.0 -it 01_solar 1 58 2000.0 1.0 0.0 -it 02_wind_on 1 58 2000.0 1.0 0.0 -it 03_wind_off 1 58 1700.0 1.0 0.0 +it 01_solar 1 58 2000.0 0.0 1.0 +it 02_wind_on 1 58 2000.0 0.0 1.0 +it 03_wind_off 1 58 1700.0 0.0 1.0 it 04_res 1 58 0.0 0.0 0.0 it 05_nuclear 1 58 0.0 0.0 0.0 it 06_coal 1 58 0.0 0.0 0.0 it 07_gas 1 58 0.0 0.0 0.0 it 08_non-res 1 58 0.0 0.0 0.0 it 09_hydro_pump 1 58 0.0 0.0 0.0 -it 01_solar 1 59 2000.0 1.0 0.0 -it 02_wind_on 1 59 2000.0 1.0 0.0 -it 03_wind_off 1 59 1800.0 1.0 0.0 +it 01_solar 1 59 2000.0 0.0 1.0 +it 02_wind_on 1 59 2000.0 0.0 1.0 +it 03_wind_off 1 59 1800.0 0.0 1.0 it 04_res 1 59 0.0 0.0 0.0 it 05_nuclear 1 59 0.0 0.0 0.0 it 06_coal 1 59 0.0 0.0 0.0 it 07_gas 1 59 0.0 0.0 0.0 it 08_non-res 1 59 0.0 0.0 0.0 it 09_hydro_pump 1 59 0.0 0.0 0.0 -it 01_solar 1 60 2000.0 1.0 0.0 -it 02_wind_on 1 60 2000.0 1.0 0.0 -it 03_wind_off 1 60 1900.0 1.0 0.0 +it 01_solar 1 60 2000.0 0.0 1.0 +it 02_wind_on 1 60 2000.0 0.0 1.0 +it 03_wind_off 1 60 1900.0 0.0 1.0 it 04_res 1 60 0.0 0.0 0.0 it 05_nuclear 1 60 0.0 0.0 0.0 it 06_coal 1 60 0.0 0.0 0.0 it 07_gas 1 60 0.0 0.0 0.0 it 08_non-res 1 60 0.0 0.0 0.0 it 09_hydro_pump 1 60 0.0 0.0 0.0 -it 01_solar 1 61 2000.0 1.0 0.0 -it 02_wind_on 1 61 2000.0 1.0 0.0 -it 03_wind_off 1 61 2000.0 1.0 0.0 +it 01_solar 1 61 2000.0 0.0 1.0 +it 02_wind_on 1 61 2000.0 0.0 1.0 +it 03_wind_off 1 61 2000.0 0.0 1.0 it 04_res 1 61 0.0 0.0 0.0 it 05_nuclear 1 61 0.0 0.0 0.0 it 06_coal 1 61 0.0 0.0 0.0 it 07_gas 1 61 0.0 0.0 0.0 it 08_non-res 1 61 0.0 0.0 0.0 it 09_hydro_pump 1 61 0.0 0.0 0.0 -it 01_solar 1 62 2000.0 1.0 0.0 -it 02_wind_on 1 62 2000.0 1.0 0.0 -it 03_wind_off 1 62 2000.0 1.0 0.0 -it 04_res 1 62 100.0 1.0 0.0 +it 01_solar 1 62 2000.0 0.0 1.0 +it 02_wind_on 1 62 2000.0 0.0 1.0 +it 03_wind_off 1 62 2000.0 0.0 1.0 +it 04_res 1 62 100.0 0.0 1.0 it 05_nuclear 1 62 0.0 0.0 0.0 it 06_coal 1 62 0.0 0.0 0.0 it 07_gas 1 62 0.0 0.0 0.0 it 08_non-res 1 62 0.0 0.0 0.0 it 09_hydro_pump 1 62 0.0 0.0 0.0 -it 01_solar 1 63 2000.0 1.0 0.0 -it 02_wind_on 1 63 2000.0 1.0 0.0 -it 03_wind_off 1 63 2000.0 1.0 0.0 -it 04_res 1 63 200.0 1.0 0.0 +it 01_solar 1 63 2000.0 0.0 1.0 +it 02_wind_on 1 63 2000.0 0.0 1.0 +it 03_wind_off 1 63 2000.0 0.0 1.0 +it 04_res 1 63 200.0 0.0 1.0 it 05_nuclear 1 63 0.0 0.0 0.0 it 06_coal 1 63 0.0 0.0 0.0 it 07_gas 1 63 0.0 0.0 0.0 it 08_non-res 1 63 0.0 0.0 0.0 it 09_hydro_pump 1 63 0.0 0.0 0.0 -it 01_solar 1 64 2000.0 1.0 0.0 -it 02_wind_on 1 64 2000.0 1.0 0.0 -it 03_wind_off 1 64 2000.0 1.0 0.0 -it 04_res 1 64 300.0 1.0 0.0 +it 01_solar 1 64 2000.0 0.0 1.0 +it 02_wind_on 1 64 2000.0 0.0 1.0 +it 03_wind_off 1 64 2000.0 0.0 1.0 +it 04_res 1 64 300.0 0.0 1.0 it 05_nuclear 1 64 0.0 0.0 0.0 it 06_coal 1 64 0.0 0.0 0.0 it 07_gas 1 64 0.0 0.0 0.0 it 08_non-res 1 64 0.0 0.0 0.0 it 09_hydro_pump 1 64 0.0 0.0 0.0 -it 01_solar 1 65 2000.0 1.0 0.0 -it 02_wind_on 1 65 2000.0 1.0 0.0 -it 03_wind_off 1 65 2000.0 1.0 0.0 -it 04_res 1 65 400.0 1.0 0.0 +it 01_solar 1 65 2000.0 0.0 1.0 +it 02_wind_on 1 65 2000.0 0.0 1.0 +it 03_wind_off 1 65 2000.0 0.0 1.0 +it 04_res 1 65 400.0 0.0 1.0 it 05_nuclear 1 65 0.0 0.0 0.0 it 06_coal 1 65 0.0 0.0 0.0 it 07_gas 1 65 0.0 0.0 0.0 it 08_non-res 1 65 0.0 0.0 0.0 it 09_hydro_pump 1 65 0.0 0.0 0.0 -it 01_solar 1 66 2000.0 1.0 0.0 -it 02_wind_on 1 66 2000.0 1.0 0.0 -it 03_wind_off 1 66 2000.0 1.0 0.0 -it 04_res 1 66 500.0 1.0 0.0 +it 01_solar 1 66 2000.0 0.0 1.0 +it 02_wind_on 1 66 2000.0 0.0 1.0 +it 03_wind_off 1 66 2000.0 0.0 1.0 +it 04_res 1 66 500.0 0.0 1.0 it 05_nuclear 1 66 0.0 0.0 0.0 it 06_coal 1 66 0.0 0.0 0.0 it 07_gas 1 66 0.0 0.0 0.0 it 08_non-res 1 66 0.0 0.0 0.0 it 09_hydro_pump 1 66 0.0 0.0 0.0 -it 01_solar 1 67 2000.0 1.0 0.0 -it 02_wind_on 1 67 2000.0 1.0 0.0 -it 03_wind_off 1 67 2000.0 1.0 0.0 -it 04_res 1 67 600.0 1.0 0.0 +it 01_solar 1 67 2000.0 0.0 1.0 +it 02_wind_on 1 67 2000.0 0.0 1.0 +it 03_wind_off 1 67 2000.0 0.0 1.0 +it 04_res 1 67 600.0 0.0 1.0 it 05_nuclear 1 67 0.0 0.0 0.0 it 06_coal 1 67 0.0 0.0 0.0 it 07_gas 1 67 0.0 0.0 0.0 it 08_non-res 1 67 0.0 0.0 0.0 it 09_hydro_pump 1 67 0.0 0.0 0.0 -it 01_solar 1 68 2000.0 1.0 0.0 -it 02_wind_on 1 68 2000.0 1.0 0.0 -it 03_wind_off 1 68 2000.0 1.0 0.0 -it 04_res 1 68 700.0 1.0 0.0 +it 01_solar 1 68 2000.0 0.0 1.0 +it 02_wind_on 1 68 2000.0 0.0 1.0 +it 03_wind_off 1 68 2000.0 0.0 1.0 +it 04_res 1 68 700.0 0.0 1.0 it 05_nuclear 1 68 0.0 0.0 0.0 it 06_coal 1 68 0.0 0.0 0.0 it 07_gas 1 68 0.0 0.0 0.0 it 08_non-res 1 68 0.0 0.0 0.0 it 09_hydro_pump 1 68 0.0 0.0 0.0 -it 01_solar 1 69 2000.0 1.0 0.0 -it 02_wind_on 1 69 2000.0 1.0 0.0 -it 03_wind_off 1 69 2000.0 1.0 0.0 -it 04_res 1 69 800.0 1.0 0.0 +it 01_solar 1 69 2000.0 0.0 1.0 +it 02_wind_on 1 69 2000.0 0.0 1.0 +it 03_wind_off 1 69 2000.0 0.0 1.0 +it 04_res 1 69 800.0 0.0 1.0 it 05_nuclear 1 69 0.0 0.0 0.0 it 06_coal 1 69 0.0 0.0 0.0 it 07_gas 1 69 0.0 0.0 0.0 it 08_non-res 1 69 0.0 0.0 0.0 it 09_hydro_pump 1 69 0.0 0.0 0.0 -it 01_solar 1 70 2000.0 1.0 0.0 -it 02_wind_on 1 70 2000.0 1.0 0.0 -it 03_wind_off 1 70 2000.0 1.0 0.0 -it 04_res 1 70 900.0 1.0 0.0 +it 01_solar 1 70 2000.0 0.0 1.0 +it 02_wind_on 1 70 2000.0 0.0 1.0 +it 03_wind_off 1 70 2000.0 0.0 1.0 +it 04_res 1 70 900.0 0.0 1.0 it 05_nuclear 1 70 0.0 0.0 0.0 it 06_coal 1 70 0.0 0.0 0.0 it 07_gas 1 70 0.0 0.0 0.0 it 08_non-res 1 70 0.0 0.0 0.0 it 09_hydro_pump 1 70 0.0 0.0 0.0 -it 01_solar 1 71 2000.0 1.0 0.0 -it 02_wind_on 1 71 2000.0 1.0 0.0 -it 03_wind_off 1 71 2000.0 1.0 0.0 -it 04_res 1 71 1000.0 1.0 0.0 +it 01_solar 1 71 2000.0 0.0 1.0 +it 02_wind_on 1 71 2000.0 0.0 1.0 +it 03_wind_off 1 71 2000.0 0.0 1.0 +it 04_res 1 71 1000.0 0.0 1.0 it 05_nuclear 1 71 0.0 0.0 0.0 it 06_coal 1 71 0.0 0.0 0.0 it 07_gas 1 71 0.0 0.0 0.0 it 08_non-res 1 71 0.0 0.0 0.0 it 09_hydro_pump 1 71 0.0 0.0 0.0 -it 01_solar 1 72 2000.0 1.0 0.0 -it 02_wind_on 1 72 2000.0 1.0 0.0 -it 03_wind_off 1 72 2000.0 1.0 0.0 -it 04_res 1 72 1100.0 1.0 0.0 +it 01_solar 1 72 2000.0 0.0 1.0 +it 02_wind_on 1 72 2000.0 0.0 1.0 +it 03_wind_off 1 72 2000.0 0.0 1.0 +it 04_res 1 72 1100.0 0.0 1.0 it 05_nuclear 1 72 0.0 0.0 0.0 it 06_coal 1 72 0.0 0.0 0.0 it 07_gas 1 72 0.0 0.0 0.0 it 08_non-res 1 72 0.0 0.0 0.0 it 09_hydro_pump 1 72 0.0 0.0 0.0 -it 01_solar 1 73 2000.0 1.0 0.0 -it 02_wind_on 1 73 2000.0 1.0 0.0 -it 03_wind_off 1 73 2000.0 1.0 0.0 -it 04_res 1 73 1200.0 1.0 0.0 +it 01_solar 1 73 2000.0 0.0 1.0 +it 02_wind_on 1 73 2000.0 0.0 1.0 +it 03_wind_off 1 73 2000.0 0.0 1.0 +it 04_res 1 73 1200.0 0.0 1.0 it 05_nuclear 1 73 0.0 0.0 0.0 it 06_coal 1 73 0.0 0.0 0.0 it 07_gas 1 73 0.0 0.0 0.0 it 08_non-res 1 73 0.0 0.0 0.0 it 09_hydro_pump 1 73 0.0 0.0 0.0 -it 01_solar 1 74 2000.0 1.0 0.0 -it 02_wind_on 1 74 2000.0 1.0 0.0 -it 03_wind_off 1 74 2000.0 1.0 0.0 -it 04_res 1 74 1300.0 1.0 0.0 +it 01_solar 1 74 2000.0 0.0 1.0 +it 02_wind_on 1 74 2000.0 0.0 1.0 +it 03_wind_off 1 74 2000.0 0.0 1.0 +it 04_res 1 74 1300.0 0.0 1.0 it 05_nuclear 1 74 0.0 0.0 0.0 it 06_coal 1 74 0.0 0.0 0.0 it 07_gas 1 74 0.0 0.0 0.0 it 08_non-res 1 74 0.0 0.0 0.0 it 09_hydro_pump 1 74 0.0 0.0 0.0 -it 01_solar 1 75 2000.0 1.0 0.0 -it 02_wind_on 1 75 2000.0 1.0 0.0 -it 03_wind_off 1 75 2000.0 1.0 0.0 -it 04_res 1 75 1400.0 1.0 0.0 +it 01_solar 1 75 2000.0 0.0 1.0 +it 02_wind_on 1 75 2000.0 0.0 1.0 +it 03_wind_off 1 75 2000.0 0.0 1.0 +it 04_res 1 75 1400.0 0.0 1.0 it 05_nuclear 1 75 0.0 0.0 0.0 it 06_coal 1 75 0.0 0.0 0.0 it 07_gas 1 75 0.0 0.0 0.0 it 08_non-res 1 75 0.0 0.0 0.0 it 09_hydro_pump 1 75 0.0 0.0 0.0 -it 01_solar 1 76 2000.0 1.0 0.0 -it 02_wind_on 1 76 2000.0 1.0 0.0 -it 03_wind_off 1 76 2000.0 1.0 0.0 -it 04_res 1 76 1500.0 1.0 0.0 +it 01_solar 1 76 2000.0 0.0 1.0 +it 02_wind_on 1 76 2000.0 0.0 1.0 +it 03_wind_off 1 76 2000.0 0.0 1.0 +it 04_res 1 76 1500.0 0.0 1.0 it 05_nuclear 1 76 0.0 0.0 0.0 it 06_coal 1 76 0.0 0.0 0.0 it 07_gas 1 76 0.0 0.0 0.0 it 08_non-res 1 76 0.0 0.0 0.0 it 09_hydro_pump 1 76 0.0 0.0 0.0 -it 01_solar 1 77 2000.0 1.0 0.0 -it 02_wind_on 1 77 2000.0 1.0 0.0 -it 03_wind_off 1 77 2000.0 1.0 0.0 -it 04_res 1 77 1600.0 1.0 0.0 +it 01_solar 1 77 2000.0 0.0 1.0 +it 02_wind_on 1 77 2000.0 0.0 1.0 +it 03_wind_off 1 77 2000.0 0.0 1.0 +it 04_res 1 77 1600.0 0.0 1.0 it 05_nuclear 1 77 0.0 0.0 0.0 it 06_coal 1 77 0.0 0.0 0.0 it 07_gas 1 77 0.0 0.0 0.0 it 08_non-res 1 77 0.0 0.0 0.0 it 09_hydro_pump 1 77 0.0 0.0 0.0 -it 01_solar 1 78 2000.0 1.0 0.0 -it 02_wind_on 1 78 2000.0 1.0 0.0 -it 03_wind_off 1 78 2000.0 1.0 0.0 -it 04_res 1 78 1700.0 1.0 0.0 +it 01_solar 1 78 2000.0 0.0 1.0 +it 02_wind_on 1 78 2000.0 0.0 1.0 +it 03_wind_off 1 78 2000.0 0.0 1.0 +it 04_res 1 78 1700.0 0.0 1.0 it 05_nuclear 1 78 0.0 0.0 0.0 it 06_coal 1 78 0.0 0.0 0.0 it 07_gas 1 78 0.0 0.0 0.0 it 08_non-res 1 78 0.0 0.0 0.0 it 09_hydro_pump 1 78 0.0 0.0 0.0 -it 01_solar 1 79 2000.0 1.0 0.0 -it 02_wind_on 1 79 2000.0 1.0 0.0 -it 03_wind_off 1 79 2000.0 1.0 0.0 -it 04_res 1 79 1800.0 1.0 0.0 +it 01_solar 1 79 2000.0 0.0 1.0 +it 02_wind_on 1 79 2000.0 0.0 1.0 +it 03_wind_off 1 79 2000.0 0.0 1.0 +it 04_res 1 79 1800.0 0.0 1.0 it 05_nuclear 1 79 0.0 0.0 0.0 it 06_coal 1 79 0.0 0.0 0.0 it 07_gas 1 79 0.0 0.0 0.0 it 08_non-res 1 79 0.0 0.0 0.0 it 09_hydro_pump 1 79 0.0 0.0 0.0 -it 01_solar 1 80 2000.0 1.0 0.0 -it 02_wind_on 1 80 2000.0 1.0 0.0 -it 03_wind_off 1 80 2000.0 1.0 0.0 -it 04_res 1 80 1900.0 1.0 0.0 +it 01_solar 1 80 2000.0 0.0 1.0 +it 02_wind_on 1 80 2000.0 0.0 1.0 +it 03_wind_off 1 80 2000.0 0.0 1.0 +it 04_res 1 80 1900.0 0.0 1.0 it 05_nuclear 1 80 0.0 0.0 0.0 it 06_coal 1 80 0.0 0.0 0.0 it 07_gas 1 80 0.0 0.0 0.0 it 08_non-res 1 80 0.0 0.0 0.0 it 09_hydro_pump 1 80 0.0 0.0 0.0 -it 01_solar 1 81 2000.0 1.0 0.0 -it 02_wind_on 1 81 2000.0 1.0 0.0 -it 03_wind_off 1 81 2000.0 1.0 0.0 -it 04_res 1 81 2000.0 1.0 0.0 +it 01_solar 1 81 2000.0 0.0 1.0 +it 02_wind_on 1 81 2000.0 0.0 1.0 +it 03_wind_off 1 81 2000.0 0.0 1.0 +it 04_res 1 81 2000.0 0.0 1.0 it 05_nuclear 1 81 0.0 0.0 0.0 it 06_coal 1 81 0.0 0.0 0.0 it 07_gas 1 81 0.0 0.0 0.0 it 08_non-res 1 81 0.0 0.0 0.0 it 09_hydro_pump 1 81 0.0 0.0 0.0 -it 01_solar 1 82 2000.0 1.0 0.0 -it 02_wind_on 1 82 2000.0 1.0 0.0 -it 03_wind_off 1 82 2000.0 1.0 0.0 -it 04_res 1 82 2000.0 1.0 0.0 -it 05_nuclear 1 82 100.0 1.0 0.0 +it 01_solar 1 82 2000.0 0.0 1.0 +it 02_wind_on 1 82 2000.0 0.0 1.0 +it 03_wind_off 1 82 2000.0 0.0 1.0 +it 04_res 1 82 2000.0 0.0 1.0 +it 05_nuclear 1 82 100.0 0.0 1.0 it 06_coal 1 82 0.0 0.0 0.0 it 07_gas 1 82 0.0 0.0 0.0 it 08_non-res 1 82 0.0 0.0 0.0 it 09_hydro_pump 1 82 0.0 0.0 0.0 -it 01_solar 1 83 2000.0 1.0 0.0 -it 02_wind_on 1 83 2000.0 1.0 0.0 -it 03_wind_off 1 83 2000.0 1.0 0.0 -it 04_res 1 83 2000.0 1.0 0.0 -it 05_nuclear 1 83 200.0 1.0 0.0 +it 01_solar 1 83 2000.0 0.0 1.0 +it 02_wind_on 1 83 2000.0 0.0 1.0 +it 03_wind_off 1 83 2000.0 0.0 1.0 +it 04_res 1 83 2000.0 0.0 1.0 +it 05_nuclear 1 83 200.0 0.0 1.0 it 06_coal 1 83 0.0 0.0 0.0 it 07_gas 1 83 0.0 0.0 0.0 it 08_non-res 1 83 0.0 0.0 0.0 it 09_hydro_pump 1 83 0.0 0.0 0.0 -it 01_solar 1 84 2000.0 1.0 0.0 -it 02_wind_on 1 84 2000.0 1.0 0.0 -it 03_wind_off 1 84 2000.0 1.0 0.0 -it 04_res 1 84 2000.0 1.0 0.0 -it 05_nuclear 1 84 300.0 1.0 0.0 +it 01_solar 1 84 2000.0 0.0 1.0 +it 02_wind_on 1 84 2000.0 0.0 1.0 +it 03_wind_off 1 84 2000.0 0.0 1.0 +it 04_res 1 84 2000.0 0.0 1.0 +it 05_nuclear 1 84 300.0 0.0 1.0 it 06_coal 1 84 0.0 0.0 0.0 it 07_gas 1 84 0.0 0.0 0.0 it 08_non-res 1 84 0.0 0.0 0.0 it 09_hydro_pump 1 84 0.0 0.0 0.0 -it 01_solar 1 85 2000.0 1.0 0.0 -it 02_wind_on 1 85 2000.0 1.0 0.0 -it 03_wind_off 1 85 2000.0 1.0 0.0 -it 04_res 1 85 2000.0 1.0 0.0 -it 05_nuclear 1 85 400.0 1.0 0.0 +it 01_solar 1 85 2000.0 0.0 1.0 +it 02_wind_on 1 85 2000.0 0.0 1.0 +it 03_wind_off 1 85 2000.0 0.0 1.0 +it 04_res 1 85 2000.0 0.0 1.0 +it 05_nuclear 1 85 400.0 0.0 1.0 it 06_coal 1 85 0.0 0.0 0.0 it 07_gas 1 85 0.0 0.0 0.0 it 08_non-res 1 85 0.0 0.0 0.0 it 09_hydro_pump 1 85 0.0 0.0 0.0 -it 01_solar 1 86 2000.0 1.0 0.0 -it 02_wind_on 1 86 2000.0 1.0 0.0 -it 03_wind_off 1 86 2000.0 1.0 0.0 -it 04_res 1 86 2000.0 1.0 0.0 -it 05_nuclear 1 86 500.0 1.0 0.0 +it 01_solar 1 86 2000.0 0.0 1.0 +it 02_wind_on 1 86 2000.0 0.0 1.0 +it 03_wind_off 1 86 2000.0 0.0 1.0 +it 04_res 1 86 2000.0 0.0 1.0 +it 05_nuclear 1 86 500.0 0.0 1.0 it 06_coal 1 86 0.0 0.0 0.0 it 07_gas 1 86 0.0 0.0 0.0 it 08_non-res 1 86 0.0 0.0 0.0 it 09_hydro_pump 1 86 0.0 0.0 0.0 -it 01_solar 1 87 2000.0 1.0 0.0 -it 02_wind_on 1 87 2000.0 1.0 0.0 -it 03_wind_off 1 87 2000.0 1.0 0.0 -it 04_res 1 87 2000.0 1.0 0.0 -it 05_nuclear 1 87 600.0 1.0 0.0 +it 01_solar 1 87 2000.0 0.0 1.0 +it 02_wind_on 1 87 2000.0 0.0 1.0 +it 03_wind_off 1 87 2000.0 0.0 1.0 +it 04_res 1 87 2000.0 0.0 1.0 +it 05_nuclear 1 87 600.0 0.0 1.0 it 06_coal 1 87 0.0 0.0 0.0 it 07_gas 1 87 0.0 0.0 0.0 it 08_non-res 1 87 0.0 0.0 0.0 it 09_hydro_pump 1 87 0.0 0.0 0.0 -it 01_solar 1 88 2000.0 1.0 0.0 -it 02_wind_on 1 88 2000.0 1.0 0.0 -it 03_wind_off 1 88 2000.0 1.0 0.0 -it 04_res 1 88 2000.0 1.0 0.0 -it 05_nuclear 1 88 700.0 1.0 0.0 +it 01_solar 1 88 2000.0 0.0 1.0 +it 02_wind_on 1 88 2000.0 0.0 1.0 +it 03_wind_off 1 88 2000.0 0.0 1.0 +it 04_res 1 88 2000.0 0.0 1.0 +it 05_nuclear 1 88 700.0 0.0 1.0 it 06_coal 1 88 0.0 0.0 0.0 it 07_gas 1 88 0.0 0.0 0.0 it 08_non-res 1 88 0.0 0.0 0.0 it 09_hydro_pump 1 88 0.0 0.0 0.0 -it 01_solar 1 89 2000.0 1.0 0.0 -it 02_wind_on 1 89 2000.0 1.0 0.0 -it 03_wind_off 1 89 2000.0 1.0 0.0 -it 04_res 1 89 2000.0 1.0 0.0 -it 05_nuclear 1 89 800.0 1.0 0.0 +it 01_solar 1 89 2000.0 0.0 1.0 +it 02_wind_on 1 89 2000.0 0.0 1.0 +it 03_wind_off 1 89 2000.0 0.0 1.0 +it 04_res 1 89 2000.0 0.0 1.0 +it 05_nuclear 1 89 800.0 0.0 1.0 it 06_coal 1 89 0.0 0.0 0.0 it 07_gas 1 89 0.0 0.0 0.0 it 08_non-res 1 89 0.0 0.0 0.0 it 09_hydro_pump 1 89 0.0 0.0 0.0 -it 01_solar 1 90 2000.0 1.0 0.0 -it 02_wind_on 1 90 2000.0 1.0 0.0 -it 03_wind_off 1 90 2000.0 1.0 0.0 -it 04_res 1 90 2000.0 1.0 0.0 -it 05_nuclear 1 90 900.0 1.0 0.0 +it 01_solar 1 90 2000.0 0.0 1.0 +it 02_wind_on 1 90 2000.0 0.0 1.0 +it 03_wind_off 1 90 2000.0 0.0 1.0 +it 04_res 1 90 2000.0 0.0 1.0 +it 05_nuclear 1 90 900.0 0.0 1.0 it 06_coal 1 90 0.0 0.0 0.0 it 07_gas 1 90 0.0 0.0 0.0 it 08_non-res 1 90 0.0 0.0 0.0 it 09_hydro_pump 1 90 0.0 0.0 0.0 -it 01_solar 1 91 2000.0 1.0 0.0 -it 02_wind_on 1 91 2000.0 1.0 0.0 -it 03_wind_off 1 91 2000.0 1.0 0.0 -it 04_res 1 91 2000.0 1.0 0.0 -it 05_nuclear 1 91 1000.0 1.0 0.0 +it 01_solar 1 91 2000.0 0.0 1.0 +it 02_wind_on 1 91 2000.0 0.0 1.0 +it 03_wind_off 1 91 2000.0 0.0 1.0 +it 04_res 1 91 2000.0 0.0 1.0 +it 05_nuclear 1 91 1000.0 0.0 1.0 it 06_coal 1 91 0.0 0.0 0.0 it 07_gas 1 91 0.0 0.0 0.0 it 08_non-res 1 91 0.0 0.0 0.0 it 09_hydro_pump 1 91 0.0 0.0 0.0 -it 01_solar 1 92 2000.0 1.0 0.0 -it 02_wind_on 1 92 2000.0 1.0 0.0 -it 03_wind_off 1 92 2000.0 1.0 0.0 -it 04_res 1 92 2000.0 1.0 0.0 -it 05_nuclear 1 92 1100.0 1.0 0.0 +it 01_solar 1 92 2000.0 0.0 1.0 +it 02_wind_on 1 92 2000.0 0.0 1.0 +it 03_wind_off 1 92 2000.0 0.0 1.0 +it 04_res 1 92 2000.0 0.0 1.0 +it 05_nuclear 1 92 1100.0 0.0 1.0 it 06_coal 1 92 0.0 0.0 0.0 it 07_gas 1 92 0.0 0.0 0.0 it 08_non-res 1 92 0.0 0.0 0.0 it 09_hydro_pump 1 92 0.0 0.0 0.0 -it 01_solar 1 93 2000.0 1.0 0.0 -it 02_wind_on 1 93 2000.0 1.0 0.0 -it 03_wind_off 1 93 2000.0 1.0 0.0 -it 04_res 1 93 2000.0 1.0 0.0 -it 05_nuclear 1 93 1200.0 1.0 0.0 +it 01_solar 1 93 2000.0 0.0 1.0 +it 02_wind_on 1 93 2000.0 0.0 1.0 +it 03_wind_off 1 93 2000.0 0.0 1.0 +it 04_res 1 93 2000.0 0.0 1.0 +it 05_nuclear 1 93 1200.0 0.0 1.0 it 06_coal 1 93 0.0 0.0 0.0 it 07_gas 1 93 0.0 0.0 0.0 it 08_non-res 1 93 0.0 0.0 0.0 it 09_hydro_pump 1 93 0.0 0.0 0.0 -it 01_solar 1 94 2000.0 1.0 0.0 -it 02_wind_on 1 94 2000.0 1.0 0.0 -it 03_wind_off 1 94 2000.0 1.0 0.0 -it 04_res 1 94 2000.0 1.0 0.0 -it 05_nuclear 1 94 1300.0 1.0 0.0 +it 01_solar 1 94 2000.0 0.0 1.0 +it 02_wind_on 1 94 2000.0 0.0 1.0 +it 03_wind_off 1 94 2000.0 0.0 1.0 +it 04_res 1 94 2000.0 0.0 1.0 +it 05_nuclear 1 94 1300.0 0.0 1.0 it 06_coal 1 94 0.0 0.0 0.0 it 07_gas 1 94 0.0 0.0 0.0 it 08_non-res 1 94 0.0 0.0 0.0 it 09_hydro_pump 1 94 0.0 0.0 0.0 -it 01_solar 1 95 2000.0 1.0 0.0 -it 02_wind_on 1 95 2000.0 1.0 0.0 -it 03_wind_off 1 95 2000.0 1.0 0.0 -it 04_res 1 95 2000.0 1.0 0.0 -it 05_nuclear 1 95 1400.0 1.0 0.0 +it 01_solar 1 95 2000.0 0.0 1.0 +it 02_wind_on 1 95 2000.0 0.0 1.0 +it 03_wind_off 1 95 2000.0 0.0 1.0 +it 04_res 1 95 2000.0 0.0 1.0 +it 05_nuclear 1 95 1400.0 0.0 1.0 it 06_coal 1 95 0.0 0.0 0.0 it 07_gas 1 95 0.0 0.0 0.0 it 08_non-res 1 95 0.0 0.0 0.0 it 09_hydro_pump 1 95 0.0 0.0 0.0 -it 01_solar 1 96 2000.0 1.0 0.0 -it 02_wind_on 1 96 2000.0 1.0 0.0 -it 03_wind_off 1 96 2000.0 1.0 0.0 -it 04_res 1 96 2000.0 1.0 0.0 -it 05_nuclear 1 96 1500.0 1.0 0.0 +it 01_solar 1 96 2000.0 0.0 1.0 +it 02_wind_on 1 96 2000.0 0.0 1.0 +it 03_wind_off 1 96 2000.0 0.0 1.0 +it 04_res 1 96 2000.0 0.0 1.0 +it 05_nuclear 1 96 1500.0 0.0 1.0 it 06_coal 1 96 0.0 0.0 0.0 it 07_gas 1 96 0.0 0.0 0.0 it 08_non-res 1 96 0.0 0.0 0.0 it 09_hydro_pump 1 96 0.0 0.0 0.0 -it 01_solar 1 97 2000.0 1.0 0.0 -it 02_wind_on 1 97 2000.0 1.0 0.0 -it 03_wind_off 1 97 2000.0 1.0 0.0 -it 04_res 1 97 2000.0 1.0 0.0 -it 05_nuclear 1 97 1600.0 1.0 0.0 +it 01_solar 1 97 2000.0 0.0 1.0 +it 02_wind_on 1 97 2000.0 0.0 1.0 +it 03_wind_off 1 97 2000.0 0.0 1.0 +it 04_res 1 97 2000.0 0.0 1.0 +it 05_nuclear 1 97 1600.0 0.0 1.0 it 06_coal 1 97 0.0 0.0 0.0 it 07_gas 1 97 0.0 0.0 0.0 it 08_non-res 1 97 0.0 0.0 0.0 it 09_hydro_pump 1 97 0.0 0.0 0.0 -it 01_solar 1 98 2000.0 1.0 0.0 -it 02_wind_on 1 98 2000.0 1.0 0.0 -it 03_wind_off 1 98 2000.0 1.0 0.0 -it 04_res 1 98 2000.0 1.0 0.0 -it 05_nuclear 1 98 1700.0 1.0 0.0 +it 01_solar 1 98 2000.0 0.0 1.0 +it 02_wind_on 1 98 2000.0 0.0 1.0 +it 03_wind_off 1 98 2000.0 0.0 1.0 +it 04_res 1 98 2000.0 0.0 1.0 +it 05_nuclear 1 98 1700.0 0.0 1.0 it 06_coal 1 98 0.0 0.0 0.0 it 07_gas 1 98 0.0 0.0 0.0 it 08_non-res 1 98 0.0 0.0 0.0 it 09_hydro_pump 1 98 0.0 0.0 0.0 -it 01_solar 1 99 2000.0 1.0 0.0 -it 02_wind_on 1 99 2000.0 1.0 0.0 -it 03_wind_off 1 99 2000.0 1.0 0.0 -it 04_res 1 99 2000.0 1.0 0.0 -it 05_nuclear 1 99 1800.0 1.0 0.0 +it 01_solar 1 99 2000.0 0.0 1.0 +it 02_wind_on 1 99 2000.0 0.0 1.0 +it 03_wind_off 1 99 2000.0 0.0 1.0 +it 04_res 1 99 2000.0 0.0 1.0 +it 05_nuclear 1 99 1800.0 0.0 1.0 it 06_coal 1 99 0.0 0.0 0.0 it 07_gas 1 99 0.0 0.0 0.0 it 08_non-res 1 99 0.0 0.0 0.0 it 09_hydro_pump 1 99 0.0 0.0 0.0 -it 01_solar 1 100 2000.0 1.0 0.0 -it 02_wind_on 1 100 2000.0 1.0 0.0 -it 03_wind_off 1 100 2000.0 1.0 0.0 -it 04_res 1 100 2000.0 1.0 0.0 -it 05_nuclear 1 100 1900.0 1.0 0.0 +it 01_solar 1 100 2000.0 0.0 1.0 +it 02_wind_on 1 100 2000.0 0.0 1.0 +it 03_wind_off 1 100 2000.0 0.0 1.0 +it 04_res 1 100 2000.0 0.0 1.0 +it 05_nuclear 1 100 1900.0 0.0 1.0 it 06_coal 1 100 0.0 0.0 0.0 it 07_gas 1 100 0.0 0.0 0.0 it 08_non-res 1 100 0.0 0.0 0.0 it 09_hydro_pump 1 100 0.0 0.0 0.0 -it 01_solar 1 101 2000.0 1.0 0.0 -it 02_wind_on 1 101 2000.0 1.0 0.0 -it 03_wind_off 1 101 2000.0 1.0 0.0 -it 04_res 1 101 2000.0 1.0 0.0 -it 05_nuclear 1 101 2000.0 1.0 0.0 +it 01_solar 1 101 2000.0 0.0 1.0 +it 02_wind_on 1 101 2000.0 0.0 1.0 +it 03_wind_off 1 101 2000.0 0.0 1.0 +it 04_res 1 101 2000.0 0.0 1.0 +it 05_nuclear 1 101 2000.0 0.0 1.0 it 06_coal 1 101 0.0 0.0 0.0 it 07_gas 1 101 0.0 0.0 0.0 it 08_non-res 1 101 0.0 0.0 0.0 it 09_hydro_pump 1 101 0.0 0.0 0.0 -it 01_solar 1 102 2000.0 1.0 0.0 -it 02_wind_on 1 102 2000.0 1.0 0.0 -it 03_wind_off 1 102 2000.0 1.0 0.0 -it 04_res 1 102 2000.0 1.0 0.0 -it 05_nuclear 1 102 2000.0 1.0 0.0 -it 06_coal 1 102 100.0 1.0 0.0 +it 01_solar 1 102 2000.0 0.0 1.0 +it 02_wind_on 1 102 2000.0 0.0 1.0 +it 03_wind_off 1 102 2000.0 0.0 1.0 +it 04_res 1 102 2000.0 0.0 1.0 +it 05_nuclear 1 102 2000.0 0.0 1.0 +it 06_coal 1 102 100.0 0.0 1.0 it 07_gas 1 102 0.0 0.0 0.0 it 08_non-res 1 102 0.0 0.0 0.0 it 09_hydro_pump 1 102 0.0 0.0 0.0 -it 01_solar 1 103 2000.0 1.0 0.0 -it 02_wind_on 1 103 2000.0 1.0 0.0 -it 03_wind_off 1 103 2000.0 1.0 0.0 -it 04_res 1 103 2000.0 1.0 0.0 -it 05_nuclear 1 103 2000.0 1.0 0.0 -it 06_coal 1 103 200.0 1.0 0.0 +it 01_solar 1 103 2000.0 0.0 1.0 +it 02_wind_on 1 103 2000.0 0.0 1.0 +it 03_wind_off 1 103 2000.0 0.0 1.0 +it 04_res 1 103 2000.0 0.0 1.0 +it 05_nuclear 1 103 2000.0 0.0 1.0 +it 06_coal 1 103 200.0 0.0 1.0 it 07_gas 1 103 0.0 0.0 0.0 it 08_non-res 1 103 0.0 0.0 0.0 it 09_hydro_pump 1 103 0.0 0.0 0.0 -it 01_solar 1 104 2000.0 1.0 0.0 -it 02_wind_on 1 104 2000.0 1.0 0.0 -it 03_wind_off 1 104 2000.0 1.0 0.0 -it 04_res 1 104 2000.0 1.0 0.0 -it 05_nuclear 1 104 2000.0 1.0 0.0 -it 06_coal 1 104 300.0 1.0 0.0 +it 01_solar 1 104 2000.0 0.0 1.0 +it 02_wind_on 1 104 2000.0 0.0 1.0 +it 03_wind_off 1 104 2000.0 0.0 1.0 +it 04_res 1 104 2000.0 0.0 1.0 +it 05_nuclear 1 104 2000.0 0.0 1.0 +it 06_coal 1 104 300.0 0.0 1.0 it 07_gas 1 104 0.0 0.0 0.0 it 08_non-res 1 104 0.0 0.0 0.0 it 09_hydro_pump 1 104 0.0 0.0 0.0 -it 01_solar 1 105 2000.0 1.0 0.0 -it 02_wind_on 1 105 2000.0 1.0 0.0 -it 03_wind_off 1 105 2000.0 1.0 0.0 -it 04_res 1 105 2000.0 1.0 0.0 -it 05_nuclear 1 105 2000.0 1.0 0.0 -it 06_coal 1 105 400.0 1.0 0.0 +it 01_solar 1 105 2000.0 0.0 1.0 +it 02_wind_on 1 105 2000.0 0.0 1.0 +it 03_wind_off 1 105 2000.0 0.0 1.0 +it 04_res 1 105 2000.0 0.0 1.0 +it 05_nuclear 1 105 2000.0 0.0 1.0 +it 06_coal 1 105 400.0 0.0 1.0 it 07_gas 1 105 0.0 0.0 0.0 it 08_non-res 1 105 0.0 0.0 0.0 it 09_hydro_pump 1 105 0.0 0.0 0.0 -it 01_solar 1 106 2000.0 1.0 0.0 -it 02_wind_on 1 106 2000.0 1.0 0.0 -it 03_wind_off 1 106 2000.0 1.0 0.0 -it 04_res 1 106 2000.0 1.0 0.0 -it 05_nuclear 1 106 2000.0 1.0 0.0 -it 06_coal 1 106 500.0 1.0 0.0 +it 01_solar 1 106 2000.0 0.0 1.0 +it 02_wind_on 1 106 2000.0 0.0 1.0 +it 03_wind_off 1 106 2000.0 0.0 1.0 +it 04_res 1 106 2000.0 0.0 1.0 +it 05_nuclear 1 106 2000.0 0.0 1.0 +it 06_coal 1 106 500.0 0.0 1.0 it 07_gas 1 106 0.0 0.0 0.0 it 08_non-res 1 106 0.0 0.0 0.0 it 09_hydro_pump 1 106 0.0 0.0 0.0 -it 01_solar 1 107 2000.0 1.0 0.0 -it 02_wind_on 1 107 2000.0 1.0 0.0 -it 03_wind_off 1 107 2000.0 1.0 0.0 -it 04_res 1 107 2000.0 1.0 0.0 -it 05_nuclear 1 107 2000.0 1.0 0.0 -it 06_coal 1 107 600.0 1.0 0.0 +it 01_solar 1 107 2000.0 0.0 1.0 +it 02_wind_on 1 107 2000.0 0.0 1.0 +it 03_wind_off 1 107 2000.0 0.0 1.0 +it 04_res 1 107 2000.0 0.0 1.0 +it 05_nuclear 1 107 2000.0 0.0 1.0 +it 06_coal 1 107 600.0 0.0 1.0 it 07_gas 1 107 0.0 0.0 0.0 it 08_non-res 1 107 0.0 0.0 0.0 it 09_hydro_pump 1 107 0.0 0.0 0.0 -it 01_solar 1 108 2000.0 1.0 0.0 -it 02_wind_on 1 108 2000.0 1.0 0.0 -it 03_wind_off 1 108 2000.0 1.0 0.0 -it 04_res 1 108 2000.0 1.0 0.0 -it 05_nuclear 1 108 2000.0 1.0 0.0 -it 06_coal 1 108 700.0 1.0 0.0 +it 01_solar 1 108 2000.0 0.0 1.0 +it 02_wind_on 1 108 2000.0 0.0 1.0 +it 03_wind_off 1 108 2000.0 0.0 1.0 +it 04_res 1 108 2000.0 0.0 1.0 +it 05_nuclear 1 108 2000.0 0.0 1.0 +it 06_coal 1 108 700.0 0.0 1.0 it 07_gas 1 108 0.0 0.0 0.0 it 08_non-res 1 108 0.0 0.0 0.0 it 09_hydro_pump 1 108 0.0 0.0 0.0 -it 01_solar 1 109 2000.0 1.0 0.0 -it 02_wind_on 1 109 2000.0 1.0 0.0 -it 03_wind_off 1 109 2000.0 1.0 0.0 -it 04_res 1 109 2000.0 1.0 0.0 -it 05_nuclear 1 109 2000.0 1.0 0.0 -it 06_coal 1 109 800.0 1.0 0.0 +it 01_solar 1 109 2000.0 0.0 1.0 +it 02_wind_on 1 109 2000.0 0.0 1.0 +it 03_wind_off 1 109 2000.0 0.0 1.0 +it 04_res 1 109 2000.0 0.0 1.0 +it 05_nuclear 1 109 2000.0 0.0 1.0 +it 06_coal 1 109 800.0 0.0 1.0 it 07_gas 1 109 0.0 0.0 0.0 it 08_non-res 1 109 0.0 0.0 0.0 it 09_hydro_pump 1 109 0.0 0.0 0.0 -it 01_solar 1 110 2000.0 1.0 0.0 -it 02_wind_on 1 110 2000.0 1.0 0.0 -it 03_wind_off 1 110 2000.0 1.0 0.0 -it 04_res 1 110 2000.0 1.0 0.0 -it 05_nuclear 1 110 2000.0 1.0 0.0 -it 06_coal 1 110 900.0 1.0 0.0 +it 01_solar 1 110 2000.0 0.0 1.0 +it 02_wind_on 1 110 2000.0 0.0 1.0 +it 03_wind_off 1 110 2000.0 0.0 1.0 +it 04_res 1 110 2000.0 0.0 1.0 +it 05_nuclear 1 110 2000.0 0.0 1.0 +it 06_coal 1 110 900.0 0.0 1.0 it 07_gas 1 110 0.0 0.0 0.0 it 08_non-res 1 110 0.0 0.0 0.0 it 09_hydro_pump 1 110 0.0 0.0 0.0 -it 01_solar 1 111 2000.0 1.0 0.0 -it 02_wind_on 1 111 2000.0 1.0 0.0 -it 03_wind_off 1 111 2000.0 1.0 0.0 -it 04_res 1 111 2000.0 1.0 0.0 -it 05_nuclear 1 111 2000.0 1.0 0.0 -it 06_coal 1 111 1000.0 1.0 0.0 +it 01_solar 1 111 2000.0 0.0 1.0 +it 02_wind_on 1 111 2000.0 0.0 1.0 +it 03_wind_off 1 111 2000.0 0.0 1.0 +it 04_res 1 111 2000.0 0.0 1.0 +it 05_nuclear 1 111 2000.0 0.0 1.0 +it 06_coal 1 111 1000.0 0.0 1.0 it 07_gas 1 111 0.0 0.0 0.0 it 08_non-res 1 111 0.0 0.0 0.0 it 09_hydro_pump 1 111 0.0 0.0 0.0 -it 01_solar 1 112 2000.0 1.0 0.0 -it 02_wind_on 1 112 2000.0 1.0 0.0 -it 03_wind_off 1 112 2000.0 1.0 0.0 -it 04_res 1 112 2000.0 1.0 0.0 -it 05_nuclear 1 112 2000.0 1.0 0.0 -it 06_coal 1 112 1100.0 1.0 0.0 +it 01_solar 1 112 2000.0 0.0 1.0 +it 02_wind_on 1 112 2000.0 0.0 1.0 +it 03_wind_off 1 112 2000.0 0.0 1.0 +it 04_res 1 112 2000.0 0.0 1.0 +it 05_nuclear 1 112 2000.0 0.0 1.0 +it 06_coal 1 112 1100.0 0.0 1.0 it 07_gas 1 112 0.0 0.0 0.0 it 08_non-res 1 112 0.0 0.0 0.0 it 09_hydro_pump 1 112 0.0 0.0 0.0 -it 01_solar 1 113 2000.0 1.0 0.0 -it 02_wind_on 1 113 2000.0 1.0 0.0 -it 03_wind_off 1 113 2000.0 1.0 0.0 -it 04_res 1 113 2000.0 1.0 0.0 -it 05_nuclear 1 113 2000.0 1.0 0.0 -it 06_coal 1 113 1200.0 1.0 0.0 +it 01_solar 1 113 2000.0 0.0 1.0 +it 02_wind_on 1 113 2000.0 0.0 1.0 +it 03_wind_off 1 113 2000.0 0.0 1.0 +it 04_res 1 113 2000.0 0.0 1.0 +it 05_nuclear 1 113 2000.0 0.0 1.0 +it 06_coal 1 113 1200.0 0.0 1.0 it 07_gas 1 113 0.0 0.0 0.0 it 08_non-res 1 113 0.0 0.0 0.0 it 09_hydro_pump 1 113 0.0 0.0 0.0 -it 01_solar 1 114 2000.0 1.0 0.0 -it 02_wind_on 1 114 2000.0 1.0 0.0 -it 03_wind_off 1 114 2000.0 1.0 0.0 -it 04_res 1 114 2000.0 1.0 0.0 -it 05_nuclear 1 114 2000.0 1.0 0.0 -it 06_coal 1 114 1300.0 1.0 0.0 +it 01_solar 1 114 2000.0 0.0 1.0 +it 02_wind_on 1 114 2000.0 0.0 1.0 +it 03_wind_off 1 114 2000.0 0.0 1.0 +it 04_res 1 114 2000.0 0.0 1.0 +it 05_nuclear 1 114 2000.0 0.0 1.0 +it 06_coal 1 114 1300.0 0.0 1.0 it 07_gas 1 114 0.0 0.0 0.0 it 08_non-res 1 114 0.0 0.0 0.0 it 09_hydro_pump 1 114 0.0 0.0 0.0 -it 01_solar 1 115 2000.0 1.0 0.0 -it 02_wind_on 1 115 2000.0 1.0 0.0 -it 03_wind_off 1 115 2000.0 1.0 0.0 -it 04_res 1 115 2000.0 1.0 0.0 -it 05_nuclear 1 115 2000.0 1.0 0.0 -it 06_coal 1 115 1400.0 1.0 0.0 +it 01_solar 1 115 2000.0 0.0 1.0 +it 02_wind_on 1 115 2000.0 0.0 1.0 +it 03_wind_off 1 115 2000.0 0.0 1.0 +it 04_res 1 115 2000.0 0.0 1.0 +it 05_nuclear 1 115 2000.0 0.0 1.0 +it 06_coal 1 115 1400.0 0.0 1.0 it 07_gas 1 115 0.0 0.0 0.0 it 08_non-res 1 115 0.0 0.0 0.0 it 09_hydro_pump 1 115 0.0 0.0 0.0 -it 01_solar 1 116 2000.0 1.0 0.0 -it 02_wind_on 1 116 2000.0 1.0 0.0 -it 03_wind_off 1 116 2000.0 1.0 0.0 -it 04_res 1 116 2000.0 1.0 0.0 -it 05_nuclear 1 116 2000.0 1.0 0.0 -it 06_coal 1 116 1500.0 1.0 0.0 +it 01_solar 1 116 2000.0 0.0 1.0 +it 02_wind_on 1 116 2000.0 0.0 1.0 +it 03_wind_off 1 116 2000.0 0.0 1.0 +it 04_res 1 116 2000.0 0.0 1.0 +it 05_nuclear 1 116 2000.0 0.0 1.0 +it 06_coal 1 116 1500.0 0.0 1.0 it 07_gas 1 116 0.0 0.0 0.0 it 08_non-res 1 116 0.0 0.0 0.0 it 09_hydro_pump 1 116 0.0 0.0 0.0 -it 01_solar 1 117 2000.0 1.0 0.0 -it 02_wind_on 1 117 2000.0 1.0 0.0 -it 03_wind_off 1 117 2000.0 1.0 0.0 -it 04_res 1 117 2000.0 1.0 0.0 -it 05_nuclear 1 117 2000.0 1.0 0.0 -it 06_coal 1 117 1600.0 1.0 0.0 +it 01_solar 1 117 2000.0 0.0 1.0 +it 02_wind_on 1 117 2000.0 0.0 1.0 +it 03_wind_off 1 117 2000.0 0.0 1.0 +it 04_res 1 117 2000.0 0.0 1.0 +it 05_nuclear 1 117 2000.0 0.0 1.0 +it 06_coal 1 117 1600.0 0.0 1.0 it 07_gas 1 117 0.0 0.0 0.0 it 08_non-res 1 117 0.0 0.0 0.0 it 09_hydro_pump 1 117 0.0 0.0 0.0 -it 01_solar 1 118 2000.0 1.0 0.0 -it 02_wind_on 1 118 2000.0 1.0 0.0 -it 03_wind_off 1 118 2000.0 1.0 0.0 -it 04_res 1 118 2000.0 1.0 0.0 -it 05_nuclear 1 118 2000.0 1.0 0.0 -it 06_coal 1 118 1700.0 1.0 0.0 +it 01_solar 1 118 2000.0 0.0 1.0 +it 02_wind_on 1 118 2000.0 0.0 1.0 +it 03_wind_off 1 118 2000.0 0.0 1.0 +it 04_res 1 118 2000.0 0.0 1.0 +it 05_nuclear 1 118 2000.0 0.0 1.0 +it 06_coal 1 118 1700.0 0.0 1.0 it 07_gas 1 118 0.0 0.0 0.0 it 08_non-res 1 118 0.0 0.0 0.0 it 09_hydro_pump 1 118 0.0 0.0 0.0 -it 01_solar 1 119 2000.0 1.0 0.0 -it 02_wind_on 1 119 2000.0 1.0 0.0 -it 03_wind_off 1 119 2000.0 1.0 0.0 -it 04_res 1 119 2000.0 1.0 0.0 -it 05_nuclear 1 119 2000.0 1.0 0.0 -it 06_coal 1 119 1800.0 1.0 0.0 +it 01_solar 1 119 2000.0 0.0 1.0 +it 02_wind_on 1 119 2000.0 0.0 1.0 +it 03_wind_off 1 119 2000.0 0.0 1.0 +it 04_res 1 119 2000.0 0.0 1.0 +it 05_nuclear 1 119 2000.0 0.0 1.0 +it 06_coal 1 119 1800.0 0.0 1.0 it 07_gas 1 119 0.0 0.0 0.0 it 08_non-res 1 119 0.0 0.0 0.0 it 09_hydro_pump 1 119 0.0 0.0 0.0 -it 01_solar 1 120 2000.0 1.0 0.0 -it 02_wind_on 1 120 2000.0 1.0 0.0 -it 03_wind_off 1 120 2000.0 1.0 0.0 -it 04_res 1 120 2000.0 1.0 0.0 -it 05_nuclear 1 120 2000.0 1.0 0.0 -it 06_coal 1 120 1900.0 1.0 0.0 +it 01_solar 1 120 2000.0 0.0 1.0 +it 02_wind_on 1 120 2000.0 0.0 1.0 +it 03_wind_off 1 120 2000.0 0.0 1.0 +it 04_res 1 120 2000.0 0.0 1.0 +it 05_nuclear 1 120 2000.0 0.0 1.0 +it 06_coal 1 120 1900.0 0.0 1.0 it 07_gas 1 120 0.0 0.0 0.0 it 08_non-res 1 120 0.0 0.0 0.0 it 09_hydro_pump 1 120 0.0 0.0 0.0 -it 01_solar 1 121 2000.0 1.0 0.0 -it 02_wind_on 1 121 2000.0 1.0 0.0 -it 03_wind_off 1 121 2000.0 1.0 0.0 -it 04_res 1 121 2000.0 1.0 0.0 -it 05_nuclear 1 121 2000.0 1.0 0.0 -it 06_coal 1 121 2000.0 1.0 0.0 +it 01_solar 1 121 2000.0 0.0 1.0 +it 02_wind_on 1 121 2000.0 0.0 1.0 +it 03_wind_off 1 121 2000.0 0.0 1.0 +it 04_res 1 121 2000.0 0.0 1.0 +it 05_nuclear 1 121 2000.0 0.0 1.0 +it 06_coal 1 121 2000.0 0.0 1.0 it 07_gas 1 121 0.0 0.0 0.0 it 08_non-res 1 121 0.0 0.0 0.0 it 09_hydro_pump 1 121 0.0 0.0 0.0 -it 01_solar 1 122 2000.0 1.0 0.0 -it 02_wind_on 1 122 2000.0 1.0 0.0 -it 03_wind_off 1 122 2000.0 1.0 0.0 -it 04_res 1 122 2000.0 1.0 0.0 -it 05_nuclear 1 122 2000.0 1.0 0.0 -it 06_coal 1 122 2000.0 1.0 0.0 -it 07_gas 1 122 100.0 1.0 0.0 +it 01_solar 1 122 2000.0 0.0 1.0 +it 02_wind_on 1 122 2000.0 0.0 1.0 +it 03_wind_off 1 122 2000.0 0.0 1.0 +it 04_res 1 122 2000.0 0.0 1.0 +it 05_nuclear 1 122 2000.0 0.0 1.0 +it 06_coal 1 122 2000.0 0.0 1.0 +it 07_gas 1 122 100.0 0.0 1.0 it 08_non-res 1 122 0.0 0.0 0.0 it 09_hydro_pump 1 122 0.0 0.0 0.0 -it 01_solar 1 123 2000.0 1.0 0.0 -it 02_wind_on 1 123 2000.0 1.0 0.0 -it 03_wind_off 1 123 2000.0 1.0 0.0 -it 04_res 1 123 2000.0 1.0 0.0 -it 05_nuclear 1 123 2000.0 1.0 0.0 -it 06_coal 1 123 2000.0 1.0 0.0 -it 07_gas 1 123 200.0 1.0 0.0 +it 01_solar 1 123 2000.0 0.0 1.0 +it 02_wind_on 1 123 2000.0 0.0 1.0 +it 03_wind_off 1 123 2000.0 0.0 1.0 +it 04_res 1 123 2000.0 0.0 1.0 +it 05_nuclear 1 123 2000.0 0.0 1.0 +it 06_coal 1 123 2000.0 0.0 1.0 +it 07_gas 1 123 200.0 0.0 1.0 it 08_non-res 1 123 0.0 0.0 0.0 it 09_hydro_pump 1 123 0.0 0.0 0.0 -it 01_solar 1 124 2000.0 1.0 0.0 -it 02_wind_on 1 124 2000.0 1.0 0.0 -it 03_wind_off 1 124 2000.0 1.0 0.0 -it 04_res 1 124 2000.0 1.0 0.0 -it 05_nuclear 1 124 2000.0 1.0 0.0 -it 06_coal 1 124 2000.0 1.0 0.0 -it 07_gas 1 124 300.0 1.0 0.0 +it 01_solar 1 124 2000.0 0.0 1.0 +it 02_wind_on 1 124 2000.0 0.0 1.0 +it 03_wind_off 1 124 2000.0 0.0 1.0 +it 04_res 1 124 2000.0 0.0 1.0 +it 05_nuclear 1 124 2000.0 0.0 1.0 +it 06_coal 1 124 2000.0 0.0 1.0 +it 07_gas 1 124 300.0 0.0 1.0 it 08_non-res 1 124 0.0 0.0 0.0 it 09_hydro_pump 1 124 0.0 0.0 0.0 -it 01_solar 1 125 2000.0 1.0 0.0 -it 02_wind_on 1 125 2000.0 1.0 0.0 -it 03_wind_off 1 125 2000.0 1.0 0.0 -it 04_res 1 125 2000.0 1.0 0.0 -it 05_nuclear 1 125 2000.0 1.0 0.0 -it 06_coal 1 125 2000.0 1.0 0.0 -it 07_gas 1 125 400.0 1.0 0.0 +it 01_solar 1 125 2000.0 0.0 1.0 +it 02_wind_on 1 125 2000.0 0.0 1.0 +it 03_wind_off 1 125 2000.0 0.0 1.0 +it 04_res 1 125 2000.0 0.0 1.0 +it 05_nuclear 1 125 2000.0 0.0 1.0 +it 06_coal 1 125 2000.0 0.0 1.0 +it 07_gas 1 125 400.0 0.0 1.0 it 08_non-res 1 125 0.0 0.0 0.0 it 09_hydro_pump 1 125 0.0 0.0 0.0 -it 01_solar 1 126 2000.0 1.0 0.0 -it 02_wind_on 1 126 2000.0 1.0 0.0 -it 03_wind_off 1 126 2000.0 1.0 0.0 -it 04_res 1 126 2000.0 1.0 0.0 -it 05_nuclear 1 126 2000.0 1.0 0.0 -it 06_coal 1 126 2000.0 1.0 0.0 -it 07_gas 1 126 500.0 1.0 0.0 +it 01_solar 1 126 2000.0 0.0 1.0 +it 02_wind_on 1 126 2000.0 0.0 1.0 +it 03_wind_off 1 126 2000.0 0.0 1.0 +it 04_res 1 126 2000.0 0.0 1.0 +it 05_nuclear 1 126 2000.0 0.0 1.0 +it 06_coal 1 126 2000.0 0.0 1.0 +it 07_gas 1 126 500.0 0.0 1.0 it 08_non-res 1 126 0.0 0.0 0.0 it 09_hydro_pump 1 126 0.0 0.0 0.0 -it 01_solar 1 127 2000.0 1.0 0.0 -it 02_wind_on 1 127 2000.0 1.0 0.0 -it 03_wind_off 1 127 2000.0 1.0 0.0 -it 04_res 1 127 2000.0 1.0 0.0 -it 05_nuclear 1 127 2000.0 1.0 0.0 -it 06_coal 1 127 2000.0 1.0 0.0 -it 07_gas 1 127 600.0 1.0 0.0 +it 01_solar 1 127 2000.0 0.0 1.0 +it 02_wind_on 1 127 2000.0 0.0 1.0 +it 03_wind_off 1 127 2000.0 0.0 1.0 +it 04_res 1 127 2000.0 0.0 1.0 +it 05_nuclear 1 127 2000.0 0.0 1.0 +it 06_coal 1 127 2000.0 0.0 1.0 +it 07_gas 1 127 600.0 0.0 1.0 it 08_non-res 1 127 0.0 0.0 0.0 it 09_hydro_pump 1 127 0.0 0.0 0.0 -it 01_solar 1 128 2000.0 1.0 0.0 -it 02_wind_on 1 128 2000.0 1.0 0.0 -it 03_wind_off 1 128 2000.0 1.0 0.0 -it 04_res 1 128 2000.0 1.0 0.0 -it 05_nuclear 1 128 2000.0 1.0 0.0 -it 06_coal 1 128 2000.0 1.0 0.0 -it 07_gas 1 128 700.0 1.0 0.0 +it 01_solar 1 128 2000.0 0.0 1.0 +it 02_wind_on 1 128 2000.0 0.0 1.0 +it 03_wind_off 1 128 2000.0 0.0 1.0 +it 04_res 1 128 2000.0 0.0 1.0 +it 05_nuclear 1 128 2000.0 0.0 1.0 +it 06_coal 1 128 2000.0 0.0 1.0 +it 07_gas 1 128 700.0 0.0 1.0 it 08_non-res 1 128 0.0 0.0 0.0 it 09_hydro_pump 1 128 0.0 0.0 0.0 -it 01_solar 1 129 2000.0 1.0 0.0 -it 02_wind_on 1 129 2000.0 1.0 0.0 -it 03_wind_off 1 129 2000.0 1.0 0.0 -it 04_res 1 129 2000.0 1.0 0.0 -it 05_nuclear 1 129 2000.0 1.0 0.0 -it 06_coal 1 129 2000.0 1.0 0.0 -it 07_gas 1 129 800.0 1.0 0.0 +it 01_solar 1 129 2000.0 0.0 1.0 +it 02_wind_on 1 129 2000.0 0.0 1.0 +it 03_wind_off 1 129 2000.0 0.0 1.0 +it 04_res 1 129 2000.0 0.0 1.0 +it 05_nuclear 1 129 2000.0 0.0 1.0 +it 06_coal 1 129 2000.0 0.0 1.0 +it 07_gas 1 129 800.0 0.0 1.0 it 08_non-res 1 129 0.0 0.0 0.0 it 09_hydro_pump 1 129 0.0 0.0 0.0 -it 01_solar 1 130 2000.0 1.0 0.0 -it 02_wind_on 1 130 2000.0 1.0 0.0 -it 03_wind_off 1 130 2000.0 1.0 0.0 -it 04_res 1 130 2000.0 1.0 0.0 -it 05_nuclear 1 130 2000.0 1.0 0.0 -it 06_coal 1 130 2000.0 1.0 0.0 -it 07_gas 1 130 900.0 1.0 0.0 +it 01_solar 1 130 2000.0 0.0 1.0 +it 02_wind_on 1 130 2000.0 0.0 1.0 +it 03_wind_off 1 130 2000.0 0.0 1.0 +it 04_res 1 130 2000.0 0.0 1.0 +it 05_nuclear 1 130 2000.0 0.0 1.0 +it 06_coal 1 130 2000.0 0.0 1.0 +it 07_gas 1 130 900.0 0.0 1.0 it 08_non-res 1 130 0.0 0.0 0.0 it 09_hydro_pump 1 130 0.0 0.0 0.0 -it 01_solar 1 131 2000.0 1.0 0.0 -it 02_wind_on 1 131 2000.0 1.0 0.0 -it 03_wind_off 1 131 2000.0 1.0 0.0 -it 04_res 1 131 2000.0 1.0 0.0 -it 05_nuclear 1 131 2000.0 1.0 0.0 -it 06_coal 1 131 2000.0 1.0 0.0 -it 07_gas 1 131 1000.0 1.0 0.0 +it 01_solar 1 131 2000.0 0.0 1.0 +it 02_wind_on 1 131 2000.0 0.0 1.0 +it 03_wind_off 1 131 2000.0 0.0 1.0 +it 04_res 1 131 2000.0 0.0 1.0 +it 05_nuclear 1 131 2000.0 0.0 1.0 +it 06_coal 1 131 2000.0 0.0 1.0 +it 07_gas 1 131 1000.0 0.0 1.0 it 08_non-res 1 131 0.0 0.0 0.0 it 09_hydro_pump 1 131 0.0 0.0 0.0 -it 01_solar 1 132 2000.0 1.0 0.0 -it 02_wind_on 1 132 2000.0 1.0 0.0 -it 03_wind_off 1 132 2000.0 1.0 0.0 -it 04_res 1 132 2000.0 1.0 0.0 -it 05_nuclear 1 132 2000.0 1.0 0.0 -it 06_coal 1 132 2000.0 1.0 0.0 -it 07_gas 1 132 1100.0 1.0 0.0 +it 01_solar 1 132 2000.0 0.0 1.0 +it 02_wind_on 1 132 2000.0 0.0 1.0 +it 03_wind_off 1 132 2000.0 0.0 1.0 +it 04_res 1 132 2000.0 0.0 1.0 +it 05_nuclear 1 132 2000.0 0.0 1.0 +it 06_coal 1 132 2000.0 0.0 1.0 +it 07_gas 1 132 1100.0 0.0 1.0 it 08_non-res 1 132 0.0 0.0 0.0 it 09_hydro_pump 1 132 0.0 0.0 0.0 -it 01_solar 1 133 2000.0 1.0 0.0 -it 02_wind_on 1 133 2000.0 1.0 0.0 -it 03_wind_off 1 133 2000.0 1.0 0.0 -it 04_res 1 133 2000.0 1.0 0.0 -it 05_nuclear 1 133 2000.0 1.0 0.0 -it 06_coal 1 133 2000.0 1.0 0.0 -it 07_gas 1 133 1200.0 1.0 0.0 +it 01_solar 1 133 2000.0 0.0 1.0 +it 02_wind_on 1 133 2000.0 0.0 1.0 +it 03_wind_off 1 133 2000.0 0.0 1.0 +it 04_res 1 133 2000.0 0.0 1.0 +it 05_nuclear 1 133 2000.0 0.0 1.0 +it 06_coal 1 133 2000.0 0.0 1.0 +it 07_gas 1 133 1200.0 0.0 1.0 it 08_non-res 1 133 0.0 0.0 0.0 it 09_hydro_pump 1 133 0.0 0.0 0.0 -it 01_solar 1 134 2000.0 1.0 0.0 -it 02_wind_on 1 134 2000.0 1.0 0.0 -it 03_wind_off 1 134 2000.0 1.0 0.0 -it 04_res 1 134 2000.0 1.0 0.0 -it 05_nuclear 1 134 2000.0 1.0 0.0 -it 06_coal 1 134 2000.0 1.0 0.0 -it 07_gas 1 134 1300.0 1.0 0.0 +it 01_solar 1 134 2000.0 0.0 1.0 +it 02_wind_on 1 134 2000.0 0.0 1.0 +it 03_wind_off 1 134 2000.0 0.0 1.0 +it 04_res 1 134 2000.0 0.0 1.0 +it 05_nuclear 1 134 2000.0 0.0 1.0 +it 06_coal 1 134 2000.0 0.0 1.0 +it 07_gas 1 134 1300.0 0.0 1.0 it 08_non-res 1 134 0.0 0.0 0.0 it 09_hydro_pump 1 134 0.0 0.0 0.0 -it 01_solar 1 135 2000.0 1.0 0.0 -it 02_wind_on 1 135 2000.0 1.0 0.0 -it 03_wind_off 1 135 2000.0 1.0 0.0 -it 04_res 1 135 2000.0 1.0 0.0 -it 05_nuclear 1 135 2000.0 1.0 0.0 -it 06_coal 1 135 2000.0 1.0 0.0 -it 07_gas 1 135 1400.0 1.0 0.0 +it 01_solar 1 135 2000.0 0.0 1.0 +it 02_wind_on 1 135 2000.0 0.0 1.0 +it 03_wind_off 1 135 2000.0 0.0 1.0 +it 04_res 1 135 2000.0 0.0 1.0 +it 05_nuclear 1 135 2000.0 0.0 1.0 +it 06_coal 1 135 2000.0 0.0 1.0 +it 07_gas 1 135 1400.0 0.0 1.0 it 08_non-res 1 135 0.0 0.0 0.0 it 09_hydro_pump 1 135 0.0 0.0 0.0 -it 01_solar 1 136 2000.0 1.0 0.0 -it 02_wind_on 1 136 2000.0 1.0 0.0 -it 03_wind_off 1 136 2000.0 1.0 0.0 -it 04_res 1 136 2000.0 1.0 0.0 -it 05_nuclear 1 136 2000.0 1.0 0.0 -it 06_coal 1 136 2000.0 1.0 0.0 -it 07_gas 1 136 1500.0 1.0 0.0 +it 01_solar 1 136 2000.0 0.0 1.0 +it 02_wind_on 1 136 2000.0 0.0 1.0 +it 03_wind_off 1 136 2000.0 0.0 1.0 +it 04_res 1 136 2000.0 0.0 1.0 +it 05_nuclear 1 136 2000.0 0.0 1.0 +it 06_coal 1 136 2000.0 0.0 1.0 +it 07_gas 1 136 1500.0 0.0 1.0 it 08_non-res 1 136 0.0 0.0 0.0 it 09_hydro_pump 1 136 0.0 0.0 0.0 -it 01_solar 1 137 2000.0 1.0 0.0 -it 02_wind_on 1 137 2000.0 1.0 0.0 -it 03_wind_off 1 137 2000.0 1.0 0.0 -it 04_res 1 137 2000.0 1.0 0.0 -it 05_nuclear 1 137 2000.0 1.0 0.0 -it 06_coal 1 137 2000.0 1.0 0.0 -it 07_gas 1 137 1600.0 1.0 0.0 +it 01_solar 1 137 2000.0 0.0 1.0 +it 02_wind_on 1 137 2000.0 0.0 1.0 +it 03_wind_off 1 137 2000.0 0.0 1.0 +it 04_res 1 137 2000.0 0.0 1.0 +it 05_nuclear 1 137 2000.0 0.0 1.0 +it 06_coal 1 137 2000.0 0.0 1.0 +it 07_gas 1 137 1600.0 0.0 1.0 it 08_non-res 1 137 0.0 0.0 0.0 it 09_hydro_pump 1 137 0.0 0.0 0.0 -it 01_solar 1 138 2000.0 1.0 0.0 -it 02_wind_on 1 138 2000.0 1.0 0.0 -it 03_wind_off 1 138 2000.0 1.0 0.0 -it 04_res 1 138 2000.0 1.0 0.0 -it 05_nuclear 1 138 2000.0 1.0 0.0 -it 06_coal 1 138 2000.0 1.0 0.0 -it 07_gas 1 138 1700.0 1.0 0.0 +it 01_solar 1 138 2000.0 0.0 1.0 +it 02_wind_on 1 138 2000.0 0.0 1.0 +it 03_wind_off 1 138 2000.0 0.0 1.0 +it 04_res 1 138 2000.0 0.0 1.0 +it 05_nuclear 1 138 2000.0 0.0 1.0 +it 06_coal 1 138 2000.0 0.0 1.0 +it 07_gas 1 138 1700.0 0.0 1.0 it 08_non-res 1 138 0.0 0.0 0.0 it 09_hydro_pump 1 138 0.0 0.0 0.0 -it 01_solar 1 139 2000.0 1.0 0.0 -it 02_wind_on 1 139 2000.0 1.0 0.0 -it 03_wind_off 1 139 2000.0 1.0 0.0 -it 04_res 1 139 2000.0 1.0 0.0 -it 05_nuclear 1 139 2000.0 1.0 0.0 -it 06_coal 1 139 2000.0 1.0 0.0 -it 07_gas 1 139 1800.0 1.0 0.0 +it 01_solar 1 139 2000.0 0.0 1.0 +it 02_wind_on 1 139 2000.0 0.0 1.0 +it 03_wind_off 1 139 2000.0 0.0 1.0 +it 04_res 1 139 2000.0 0.0 1.0 +it 05_nuclear 1 139 2000.0 0.0 1.0 +it 06_coal 1 139 2000.0 0.0 1.0 +it 07_gas 1 139 1800.0 0.0 1.0 it 08_non-res 1 139 0.0 0.0 0.0 it 09_hydro_pump 1 139 0.0 0.0 0.0 -it 01_solar 1 140 2000.0 1.0 0.0 -it 02_wind_on 1 140 2000.0 1.0 0.0 -it 03_wind_off 1 140 2000.0 1.0 0.0 -it 04_res 1 140 2000.0 1.0 0.0 -it 05_nuclear 1 140 2000.0 1.0 0.0 -it 06_coal 1 140 2000.0 1.0 0.0 -it 07_gas 1 140 1900.0 1.0 0.0 +it 01_solar 1 140 2000.0 0.0 1.0 +it 02_wind_on 1 140 2000.0 0.0 1.0 +it 03_wind_off 1 140 2000.0 0.0 1.0 +it 04_res 1 140 2000.0 0.0 1.0 +it 05_nuclear 1 140 2000.0 0.0 1.0 +it 06_coal 1 140 2000.0 0.0 1.0 +it 07_gas 1 140 1900.0 0.0 1.0 it 08_non-res 1 140 0.0 0.0 0.0 it 09_hydro_pump 1 140 0.0 0.0 0.0 -it 01_solar 1 141 2000.0 1.0 0.0 -it 02_wind_on 1 141 2000.0 1.0 0.0 -it 03_wind_off 1 141 2000.0 1.0 0.0 -it 04_res 1 141 2000.0 1.0 0.0 -it 05_nuclear 1 141 2000.0 1.0 0.0 -it 06_coal 1 141 2000.0 1.0 0.0 -it 07_gas 1 141 2000.0 1.0 0.0 +it 01_solar 1 141 2000.0 0.0 1.0 +it 02_wind_on 1 141 2000.0 0.0 1.0 +it 03_wind_off 1 141 2000.0 0.0 1.0 +it 04_res 1 141 2000.0 0.0 1.0 +it 05_nuclear 1 141 2000.0 0.0 1.0 +it 06_coal 1 141 2000.0 0.0 1.0 +it 07_gas 1 141 2000.0 0.0 1.0 it 08_non-res 1 141 0.0 0.0 0.0 it 09_hydro_pump 1 141 0.0 0.0 0.0 -it 01_solar 1 142 2000.0 1.0 0.0 -it 02_wind_on 1 142 2000.0 1.0 0.0 -it 03_wind_off 1 142 2000.0 1.0 0.0 -it 04_res 1 142 2000.0 1.0 0.0 -it 05_nuclear 1 142 2000.0 1.0 0.0 -it 06_coal 1 142 2000.0 1.0 0.0 -it 07_gas 1 142 2000.0 1.0 0.0 -it 08_non-res 1 142 100.0 1.0 0.0 +it 01_solar 1 142 2000.0 0.0 1.0 +it 02_wind_on 1 142 2000.0 0.0 1.0 +it 03_wind_off 1 142 2000.0 0.0 1.0 +it 04_res 1 142 2000.0 0.0 1.0 +it 05_nuclear 1 142 2000.0 0.0 1.0 +it 06_coal 1 142 2000.0 0.0 1.0 +it 07_gas 1 142 2000.0 0.0 1.0 +it 08_non-res 1 142 100.0 0.0 1.0 it 09_hydro_pump 1 142 0.0 0.0 0.0 -it 01_solar 1 143 2000.0 1.0 0.0 -it 02_wind_on 1 143 2000.0 1.0 0.0 -it 03_wind_off 1 143 2000.0 1.0 0.0 -it 04_res 1 143 2000.0 1.0 0.0 -it 05_nuclear 1 143 2000.0 1.0 0.0 -it 06_coal 1 143 2000.0 1.0 0.0 -it 07_gas 1 143 2000.0 1.0 0.0 -it 08_non-res 1 143 200.0 1.0 0.0 +it 01_solar 1 143 2000.0 0.0 1.0 +it 02_wind_on 1 143 2000.0 0.0 1.0 +it 03_wind_off 1 143 2000.0 0.0 1.0 +it 04_res 1 143 2000.0 0.0 1.0 +it 05_nuclear 1 143 2000.0 0.0 1.0 +it 06_coal 1 143 2000.0 0.0 1.0 +it 07_gas 1 143 2000.0 0.0 1.0 +it 08_non-res 1 143 200.0 0.0 1.0 it 09_hydro_pump 1 143 0.0 0.0 0.0 -it 01_solar 1 144 2000.0 1.0 0.0 -it 02_wind_on 1 144 2000.0 1.0 0.0 -it 03_wind_off 1 144 2000.0 1.0 0.0 -it 04_res 1 144 2000.0 1.0 0.0 -it 05_nuclear 1 144 2000.0 1.0 0.0 -it 06_coal 1 144 2000.0 1.0 0.0 -it 07_gas 1 144 2000.0 1.0 0.0 -it 08_non-res 1 144 300.0 1.0 0.0 +it 01_solar 1 144 2000.0 0.0 1.0 +it 02_wind_on 1 144 2000.0 0.0 1.0 +it 03_wind_off 1 144 2000.0 0.0 1.0 +it 04_res 1 144 2000.0 0.0 1.0 +it 05_nuclear 1 144 2000.0 0.0 1.0 +it 06_coal 1 144 2000.0 0.0 1.0 +it 07_gas 1 144 2000.0 0.0 1.0 +it 08_non-res 1 144 300.0 0.0 1.0 it 09_hydro_pump 1 144 0.0 0.0 0.0 -it 01_solar 1 145 2000.0 1.0 0.0 -it 02_wind_on 1 145 2000.0 1.0 0.0 -it 03_wind_off 1 145 2000.0 1.0 0.0 -it 04_res 1 145 2000.0 1.0 0.0 -it 05_nuclear 1 145 2000.0 1.0 0.0 -it 06_coal 1 145 2000.0 1.0 0.0 -it 07_gas 1 145 2000.0 1.0 0.0 -it 08_non-res 1 145 400.0 1.0 0.0 +it 01_solar 1 145 2000.0 0.0 1.0 +it 02_wind_on 1 145 2000.0 0.0 1.0 +it 03_wind_off 1 145 2000.0 0.0 1.0 +it 04_res 1 145 2000.0 0.0 1.0 +it 05_nuclear 1 145 2000.0 0.0 1.0 +it 06_coal 1 145 2000.0 0.0 1.0 +it 07_gas 1 145 2000.0 0.0 1.0 +it 08_non-res 1 145 400.0 0.0 1.0 it 09_hydro_pump 1 145 0.0 0.0 0.0 -it 01_solar 1 146 2000.0 1.0 0.0 -it 02_wind_on 1 146 2000.0 1.0 0.0 -it 03_wind_off 1 146 2000.0 1.0 0.0 -it 04_res 1 146 2000.0 1.0 0.0 -it 05_nuclear 1 146 2000.0 1.0 0.0 -it 06_coal 1 146 2000.0 1.0 0.0 -it 07_gas 1 146 2000.0 1.0 0.0 -it 08_non-res 1 146 500.0 1.0 0.0 +it 01_solar 1 146 2000.0 0.0 1.0 +it 02_wind_on 1 146 2000.0 0.0 1.0 +it 03_wind_off 1 146 2000.0 0.0 1.0 +it 04_res 1 146 2000.0 0.0 1.0 +it 05_nuclear 1 146 2000.0 0.0 1.0 +it 06_coal 1 146 2000.0 0.0 1.0 +it 07_gas 1 146 2000.0 0.0 1.0 +it 08_non-res 1 146 500.0 0.0 1.0 it 09_hydro_pump 1 146 0.0 0.0 0.0 -it 01_solar 1 147 2000.0 1.0 0.0 -it 02_wind_on 1 147 2000.0 1.0 0.0 -it 03_wind_off 1 147 2000.0 1.0 0.0 -it 04_res 1 147 2000.0 1.0 0.0 -it 05_nuclear 1 147 2000.0 1.0 0.0 -it 06_coal 1 147 2000.0 1.0 0.0 -it 07_gas 1 147 2000.0 1.0 0.0 -it 08_non-res 1 147 600.0 1.0 0.0 +it 01_solar 1 147 2000.0 0.0 1.0 +it 02_wind_on 1 147 2000.0 0.0 1.0 +it 03_wind_off 1 147 2000.0 0.0 1.0 +it 04_res 1 147 2000.0 0.0 1.0 +it 05_nuclear 1 147 2000.0 0.0 1.0 +it 06_coal 1 147 2000.0 0.0 1.0 +it 07_gas 1 147 2000.0 0.0 1.0 +it 08_non-res 1 147 600.0 0.0 1.0 it 09_hydro_pump 1 147 0.0 0.0 0.0 -it 01_solar 1 148 2000.0 1.0 0.0 -it 02_wind_on 1 148 2000.0 1.0 0.0 -it 03_wind_off 1 148 2000.0 1.0 0.0 -it 04_res 1 148 2000.0 1.0 0.0 -it 05_nuclear 1 148 2000.0 1.0 0.0 -it 06_coal 1 148 2000.0 1.0 0.0 -it 07_gas 1 148 2000.0 1.0 0.0 -it 08_non-res 1 148 700.0 1.0 0.0 +it 01_solar 1 148 2000.0 0.0 1.0 +it 02_wind_on 1 148 2000.0 0.0 1.0 +it 03_wind_off 1 148 2000.0 0.0 1.0 +it 04_res 1 148 2000.0 0.0 1.0 +it 05_nuclear 1 148 2000.0 0.0 1.0 +it 06_coal 1 148 2000.0 0.0 1.0 +it 07_gas 1 148 2000.0 0.0 1.0 +it 08_non-res 1 148 700.0 0.0 1.0 it 09_hydro_pump 1 148 0.0 0.0 0.0 -it 01_solar 1 149 2000.0 1.0 0.0 -it 02_wind_on 1 149 2000.0 1.0 0.0 -it 03_wind_off 1 149 2000.0 1.0 0.0 -it 04_res 1 149 2000.0 1.0 0.0 -it 05_nuclear 1 149 2000.0 1.0 0.0 -it 06_coal 1 149 2000.0 1.0 0.0 -it 07_gas 1 149 2000.0 1.0 0.0 -it 08_non-res 1 149 800.0 1.0 0.0 +it 01_solar 1 149 2000.0 0.0 1.0 +it 02_wind_on 1 149 2000.0 0.0 1.0 +it 03_wind_off 1 149 2000.0 0.0 1.0 +it 04_res 1 149 2000.0 0.0 1.0 +it 05_nuclear 1 149 2000.0 0.0 1.0 +it 06_coal 1 149 2000.0 0.0 1.0 +it 07_gas 1 149 2000.0 0.0 1.0 +it 08_non-res 1 149 800.0 0.0 1.0 it 09_hydro_pump 1 149 0.0 0.0 0.0 -it 01_solar 1 150 2000.0 1.0 0.0 -it 02_wind_on 1 150 2000.0 1.0 0.0 -it 03_wind_off 1 150 2000.0 1.0 0.0 -it 04_res 1 150 2000.0 1.0 0.0 -it 05_nuclear 1 150 2000.0 1.0 0.0 -it 06_coal 1 150 2000.0 1.0 0.0 -it 07_gas 1 150 2000.0 1.0 0.0 -it 08_non-res 1 150 900.0 1.0 0.0 +it 01_solar 1 150 2000.0 0.0 1.0 +it 02_wind_on 1 150 2000.0 0.0 1.0 +it 03_wind_off 1 150 2000.0 0.0 1.0 +it 04_res 1 150 2000.0 0.0 1.0 +it 05_nuclear 1 150 2000.0 0.0 1.0 +it 06_coal 1 150 2000.0 0.0 1.0 +it 07_gas 1 150 2000.0 0.0 1.0 +it 08_non-res 1 150 900.0 0.0 1.0 it 09_hydro_pump 1 150 0.0 0.0 0.0 -it 01_solar 1 151 2000.0 1.0 0.0 -it 02_wind_on 1 151 2000.0 1.0 0.0 -it 03_wind_off 1 151 2000.0 1.0 0.0 -it 04_res 1 151 2000.0 1.0 0.0 -it 05_nuclear 1 151 2000.0 1.0 0.0 -it 06_coal 1 151 2000.0 1.0 0.0 -it 07_gas 1 151 2000.0 1.0 0.0 -it 08_non-res 1 151 1000.0 1.0 0.0 +it 01_solar 1 151 2000.0 0.0 1.0 +it 02_wind_on 1 151 2000.0 0.0 1.0 +it 03_wind_off 1 151 2000.0 0.0 1.0 +it 04_res 1 151 2000.0 0.0 1.0 +it 05_nuclear 1 151 2000.0 0.0 1.0 +it 06_coal 1 151 2000.0 0.0 1.0 +it 07_gas 1 151 2000.0 0.0 1.0 +it 08_non-res 1 151 1000.0 0.0 1.0 it 09_hydro_pump 1 151 0.0 0.0 0.0 -it 01_solar 1 152 2000.0 1.0 0.0 -it 02_wind_on 1 152 2000.0 1.0 0.0 -it 03_wind_off 1 152 2000.0 1.0 0.0 -it 04_res 1 152 2000.0 1.0 0.0 -it 05_nuclear 1 152 2000.0 1.0 0.0 -it 06_coal 1 152 2000.0 1.0 0.0 -it 07_gas 1 152 2000.0 1.0 0.0 -it 08_non-res 1 152 1100.0 1.0 0.0 +it 01_solar 1 152 2000.0 0.0 1.0 +it 02_wind_on 1 152 2000.0 0.0 1.0 +it 03_wind_off 1 152 2000.0 0.0 1.0 +it 04_res 1 152 2000.0 0.0 1.0 +it 05_nuclear 1 152 2000.0 0.0 1.0 +it 06_coal 1 152 2000.0 0.0 1.0 +it 07_gas 1 152 2000.0 0.0 1.0 +it 08_non-res 1 152 1100.0 0.0 1.0 it 09_hydro_pump 1 152 0.0 0.0 0.0 -it 01_solar 1 153 2000.0 1.0 0.0 -it 02_wind_on 1 153 2000.0 1.0 0.0 -it 03_wind_off 1 153 2000.0 1.0 0.0 -it 04_res 1 153 2000.0 1.0 0.0 -it 05_nuclear 1 153 2000.0 1.0 0.0 -it 06_coal 1 153 2000.0 1.0 0.0 -it 07_gas 1 153 2000.0 1.0 0.0 -it 08_non-res 1 153 1200.0 1.0 0.0 +it 01_solar 1 153 2000.0 0.0 1.0 +it 02_wind_on 1 153 2000.0 0.0 1.0 +it 03_wind_off 1 153 2000.0 0.0 1.0 +it 04_res 1 153 2000.0 0.0 1.0 +it 05_nuclear 1 153 2000.0 0.0 1.0 +it 06_coal 1 153 2000.0 0.0 1.0 +it 07_gas 1 153 2000.0 0.0 1.0 +it 08_non-res 1 153 1200.0 0.0 1.0 it 09_hydro_pump 1 153 0.0 0.0 0.0 -it 01_solar 1 154 2000.0 1.0 0.0 -it 02_wind_on 1 154 2000.0 1.0 0.0 -it 03_wind_off 1 154 2000.0 1.0 0.0 -it 04_res 1 154 2000.0 1.0 0.0 -it 05_nuclear 1 154 2000.0 1.0 0.0 -it 06_coal 1 154 2000.0 1.0 0.0 -it 07_gas 1 154 2000.0 1.0 0.0 -it 08_non-res 1 154 1300.0 1.0 0.0 +it 01_solar 1 154 2000.0 0.0 1.0 +it 02_wind_on 1 154 2000.0 0.0 1.0 +it 03_wind_off 1 154 2000.0 0.0 1.0 +it 04_res 1 154 2000.0 0.0 1.0 +it 05_nuclear 1 154 2000.0 0.0 1.0 +it 06_coal 1 154 2000.0 0.0 1.0 +it 07_gas 1 154 2000.0 0.0 1.0 +it 08_non-res 1 154 1300.0 0.0 1.0 it 09_hydro_pump 1 154 0.0 0.0 0.0 -it 01_solar 1 155 2000.0 1.0 0.0 -it 02_wind_on 1 155 2000.0 1.0 0.0 -it 03_wind_off 1 155 2000.0 1.0 0.0 -it 04_res 1 155 2000.0 1.0 0.0 -it 05_nuclear 1 155 2000.0 1.0 0.0 -it 06_coal 1 155 2000.0 1.0 0.0 -it 07_gas 1 155 2000.0 1.0 0.0 -it 08_non-res 1 155 1400.0 1.0 0.0 +it 01_solar 1 155 2000.0 0.0 1.0 +it 02_wind_on 1 155 2000.0 0.0 1.0 +it 03_wind_off 1 155 2000.0 0.0 1.0 +it 04_res 1 155 2000.0 0.0 1.0 +it 05_nuclear 1 155 2000.0 0.0 1.0 +it 06_coal 1 155 2000.0 0.0 1.0 +it 07_gas 1 155 2000.0 0.0 1.0 +it 08_non-res 1 155 1400.0 0.0 1.0 it 09_hydro_pump 1 155 0.0 0.0 0.0 -it 01_solar 1 156 2000.0 1.0 0.0 -it 02_wind_on 1 156 2000.0 1.0 0.0 -it 03_wind_off 1 156 2000.0 1.0 0.0 -it 04_res 1 156 2000.0 1.0 0.0 -it 05_nuclear 1 156 2000.0 1.0 0.0 -it 06_coal 1 156 2000.0 1.0 0.0 -it 07_gas 1 156 2000.0 1.0 0.0 -it 08_non-res 1 156 1500.0 1.0 0.0 +it 01_solar 1 156 2000.0 0.0 1.0 +it 02_wind_on 1 156 2000.0 0.0 1.0 +it 03_wind_off 1 156 2000.0 0.0 1.0 +it 04_res 1 156 2000.0 0.0 1.0 +it 05_nuclear 1 156 2000.0 0.0 1.0 +it 06_coal 1 156 2000.0 0.0 1.0 +it 07_gas 1 156 2000.0 0.0 1.0 +it 08_non-res 1 156 1500.0 0.0 1.0 it 09_hydro_pump 1 156 0.0 0.0 0.0 -it 01_solar 1 157 2000.0 1.0 0.0 -it 02_wind_on 1 157 2000.0 1.0 0.0 -it 03_wind_off 1 157 2000.0 1.0 0.0 -it 04_res 1 157 2000.0 1.0 0.0 -it 05_nuclear 1 157 2000.0 1.0 0.0 -it 06_coal 1 157 2000.0 1.0 0.0 -it 07_gas 1 157 2000.0 1.0 0.0 -it 08_non-res 1 157 1600.0 1.0 0.0 +it 01_solar 1 157 2000.0 0.0 1.0 +it 02_wind_on 1 157 2000.0 0.0 1.0 +it 03_wind_off 1 157 2000.0 0.0 1.0 +it 04_res 1 157 2000.0 0.0 1.0 +it 05_nuclear 1 157 2000.0 0.0 1.0 +it 06_coal 1 157 2000.0 0.0 1.0 +it 07_gas 1 157 2000.0 0.0 1.0 +it 08_non-res 1 157 1600.0 0.0 1.0 it 09_hydro_pump 1 157 0.0 0.0 0.0 -it 01_solar 1 158 2000.0 1.0 0.0 -it 02_wind_on 1 158 2000.0 1.0 0.0 -it 03_wind_off 1 158 2000.0 1.0 0.0 -it 04_res 1 158 2000.0 1.0 0.0 -it 05_nuclear 1 158 2000.0 1.0 0.0 -it 06_coal 1 158 2000.0 1.0 0.0 -it 07_gas 1 158 2000.0 1.0 0.0 -it 08_non-res 1 158 1700.0 1.0 0.0 +it 01_solar 1 158 2000.0 0.0 1.0 +it 02_wind_on 1 158 2000.0 0.0 1.0 +it 03_wind_off 1 158 2000.0 0.0 1.0 +it 04_res 1 158 2000.0 0.0 1.0 +it 05_nuclear 1 158 2000.0 0.0 1.0 +it 06_coal 1 158 2000.0 0.0 1.0 +it 07_gas 1 158 2000.0 0.0 1.0 +it 08_non-res 1 158 1700.0 0.0 1.0 it 09_hydro_pump 1 158 0.0 0.0 0.0 -it 01_solar 1 159 2000.0 1.0 0.0 -it 02_wind_on 1 159 2000.0 1.0 0.0 -it 03_wind_off 1 159 2000.0 1.0 0.0 -it 04_res 1 159 2000.0 1.0 0.0 -it 05_nuclear 1 159 2000.0 1.0 0.0 -it 06_coal 1 159 2000.0 1.0 0.0 -it 07_gas 1 159 2000.0 1.0 0.0 -it 08_non-res 1 159 1800.0 1.0 0.0 +it 01_solar 1 159 2000.0 0.0 1.0 +it 02_wind_on 1 159 2000.0 0.0 1.0 +it 03_wind_off 1 159 2000.0 0.0 1.0 +it 04_res 1 159 2000.0 0.0 1.0 +it 05_nuclear 1 159 2000.0 0.0 1.0 +it 06_coal 1 159 2000.0 0.0 1.0 +it 07_gas 1 159 2000.0 0.0 1.0 +it 08_non-res 1 159 1800.0 0.0 1.0 it 09_hydro_pump 1 159 0.0 0.0 0.0 -it 01_solar 1 160 2000.0 1.0 0.0 -it 02_wind_on 1 160 2000.0 1.0 0.0 -it 03_wind_off 1 160 2000.0 1.0 0.0 -it 04_res 1 160 2000.0 1.0 0.0 -it 05_nuclear 1 160 2000.0 1.0 0.0 -it 06_coal 1 160 2000.0 1.0 0.0 -it 07_gas 1 160 2000.0 1.0 0.0 -it 08_non-res 1 160 1900.0 1.0 0.0 +it 01_solar 1 160 2000.0 0.0 1.0 +it 02_wind_on 1 160 2000.0 0.0 1.0 +it 03_wind_off 1 160 2000.0 0.0 1.0 +it 04_res 1 160 2000.0 0.0 1.0 +it 05_nuclear 1 160 2000.0 0.0 1.0 +it 06_coal 1 160 2000.0 0.0 1.0 +it 07_gas 1 160 2000.0 0.0 1.0 +it 08_non-res 1 160 1900.0 0.0 1.0 it 09_hydro_pump 1 160 0.0 0.0 0.0 -it 01_solar 1 161 2000.0 1.0 0.0 -it 02_wind_on 1 161 2000.0 1.0 0.0 -it 03_wind_off 1 161 2000.0 1.0 0.0 -it 04_res 1 161 2000.0 1.0 0.0 -it 05_nuclear 1 161 2000.0 1.0 0.0 -it 06_coal 1 161 2000.0 1.0 0.0 -it 07_gas 1 161 2000.0 1.0 0.0 -it 08_non-res 1 161 2000.0 1.0 0.0 +it 01_solar 1 161 2000.0 0.0 1.0 +it 02_wind_on 1 161 2000.0 0.0 1.0 +it 03_wind_off 1 161 2000.0 0.0 1.0 +it 04_res 1 161 2000.0 0.0 1.0 +it 05_nuclear 1 161 2000.0 0.0 1.0 +it 06_coal 1 161 2000.0 0.0 1.0 +it 07_gas 1 161 2000.0 0.0 1.0 +it 08_non-res 1 161 2000.0 0.0 1.0 it 09_hydro_pump 1 161 0.0 0.0 0.0 -it 01_solar 1 162 2000.0 1.0 0.0 -it 02_wind_on 1 162 2000.0 1.0 0.0 -it 03_wind_off 1 162 2000.0 1.0 0.0 -it 04_res 1 162 2000.0 1.0 0.0 -it 05_nuclear 1 162 2000.0 1.0 0.0 -it 06_coal 1 162 2000.0 1.0 0.0 -it 07_gas 1 162 2000.0 1.0 0.0 -it 08_non-res 1 162 2000.0 1.0 0.0 -it 09_hydro_pump 1 162 100.0 1.0 0.0 -it 01_solar 1 163 2000.0 1.0 0.0 -it 02_wind_on 1 163 2000.0 1.0 0.0 -it 03_wind_off 1 163 2000.0 1.0 0.0 -it 04_res 1 163 2000.0 1.0 0.0 -it 05_nuclear 1 163 2000.0 1.0 0.0 -it 06_coal 1 163 2000.0 1.0 0.0 -it 07_gas 1 163 2000.0 1.0 0.0 -it 08_non-res 1 163 2000.0 1.0 0.0 -it 09_hydro_pump 1 163 200.0 1.0 0.0 -it 01_solar 1 164 2000.0 1.0 0.0 -it 02_wind_on 1 164 2000.0 1.0 0.0 -it 03_wind_off 1 164 2000.0 1.0 0.0 -it 04_res 1 164 2000.0 1.0 0.0 -it 05_nuclear 1 164 2000.0 1.0 0.0 -it 06_coal 1 164 2000.0 1.0 0.0 -it 07_gas 1 164 2000.0 1.0 0.0 -it 08_non-res 1 164 2000.0 1.0 0.0 -it 09_hydro_pump 1 164 300.0 1.0 0.0 -it 01_solar 1 165 2000.0 1.0 0.0 -it 02_wind_on 1 165 2000.0 1.0 0.0 -it 03_wind_off 1 165 2000.0 1.0 0.0 -it 04_res 1 165 2000.0 1.0 0.0 -it 05_nuclear 1 165 2000.0 1.0 0.0 -it 06_coal 1 165 2000.0 1.0 0.0 -it 07_gas 1 165 2000.0 1.0 0.0 -it 08_non-res 1 165 2000.0 1.0 0.0 -it 09_hydro_pump 1 165 400.0 1.0 0.0 -it 01_solar 1 166 2000.0 1.0 0.0 -it 02_wind_on 1 166 2000.0 1.0 0.0 -it 03_wind_off 1 166 2000.0 1.0 0.0 -it 04_res 1 166 2000.0 1.0 0.0 -it 05_nuclear 1 166 2000.0 1.0 0.0 -it 06_coal 1 166 2000.0 1.0 0.0 -it 07_gas 1 166 2000.0 1.0 0.0 -it 08_non-res 1 166 2000.0 1.0 0.0 -it 09_hydro_pump 1 166 500.0 1.0 0.0 -it 01_solar 1 167 2000.0 1.0 0.0 -it 02_wind_on 1 167 2000.0 1.0 0.0 -it 03_wind_off 1 167 2000.0 1.0 0.0 -it 04_res 1 167 2000.0 1.0 0.0 -it 05_nuclear 1 167 2000.0 1.0 0.0 -it 06_coal 1 167 2000.0 1.0 0.0 -it 07_gas 1 167 2000.0 1.0 0.0 -it 08_non-res 1 167 2000.0 1.0 0.0 -it 09_hydro_pump 1 167 600.0 1.0 0.0 -it 01_solar 1 168 2000.0 1.0 0.0 -it 02_wind_on 1 168 2000.0 1.0 0.0 -it 03_wind_off 1 168 2000.0 1.0 0.0 -it 04_res 1 168 2000.0 1.0 0.0 -it 05_nuclear 1 168 2000.0 1.0 0.0 -it 06_coal 1 168 2000.0 1.0 0.0 -it 07_gas 1 168 2000.0 1.0 0.0 -it 08_non-res 1 168 2000.0 1.0 0.0 -it 09_hydro_pump 1 168 700.0 1.0 0.0 +it 01_solar 1 162 2000.0 0.0 1.0 +it 02_wind_on 1 162 2000.0 0.0 1.0 +it 03_wind_off 1 162 2000.0 0.0 1.0 +it 04_res 1 162 2000.0 0.0 1.0 +it 05_nuclear 1 162 2000.0 0.0 1.0 +it 06_coal 1 162 2000.0 0.0 1.0 +it 07_gas 1 162 2000.0 0.0 1.0 +it 08_non-res 1 162 2000.0 0.0 1.0 +it 09_hydro_pump 1 162 100.0 0.0 1.0 +it 01_solar 1 163 2000.0 0.0 1.0 +it 02_wind_on 1 163 2000.0 0.0 1.0 +it 03_wind_off 1 163 2000.0 0.0 1.0 +it 04_res 1 163 2000.0 0.0 1.0 +it 05_nuclear 1 163 2000.0 0.0 1.0 +it 06_coal 1 163 2000.0 0.0 1.0 +it 07_gas 1 163 2000.0 0.0 1.0 +it 08_non-res 1 163 2000.0 0.0 1.0 +it 09_hydro_pump 1 163 200.0 0.0 1.0 +it 01_solar 1 164 2000.0 0.0 1.0 +it 02_wind_on 1 164 2000.0 0.0 1.0 +it 03_wind_off 1 164 2000.0 0.0 1.0 +it 04_res 1 164 2000.0 0.0 1.0 +it 05_nuclear 1 164 2000.0 0.0 1.0 +it 06_coal 1 164 2000.0 0.0 1.0 +it 07_gas 1 164 2000.0 0.0 1.0 +it 08_non-res 1 164 2000.0 0.0 1.0 +it 09_hydro_pump 1 164 300.0 0.0 1.0 +it 01_solar 1 165 2000.0 0.0 1.0 +it 02_wind_on 1 165 2000.0 0.0 1.0 +it 03_wind_off 1 165 2000.0 0.0 1.0 +it 04_res 1 165 2000.0 0.0 1.0 +it 05_nuclear 1 165 2000.0 0.0 1.0 +it 06_coal 1 165 2000.0 0.0 1.0 +it 07_gas 1 165 2000.0 0.0 1.0 +it 08_non-res 1 165 2000.0 0.0 1.0 +it 09_hydro_pump 1 165 400.0 0.0 1.0 +it 01_solar 1 166 2000.0 0.0 1.0 +it 02_wind_on 1 166 2000.0 0.0 1.0 +it 03_wind_off 1 166 2000.0 0.0 1.0 +it 04_res 1 166 2000.0 0.0 1.0 +it 05_nuclear 1 166 2000.0 0.0 1.0 +it 06_coal 1 166 2000.0 0.0 1.0 +it 07_gas 1 166 2000.0 0.0 1.0 +it 08_non-res 1 166 2000.0 0.0 1.0 +it 09_hydro_pump 1 166 500.0 0.0 1.0 +it 01_solar 1 167 2000.0 0.0 1.0 +it 02_wind_on 1 167 2000.0 0.0 1.0 +it 03_wind_off 1 167 2000.0 0.0 1.0 +it 04_res 1 167 2000.0 0.0 1.0 +it 05_nuclear 1 167 2000.0 0.0 1.0 +it 06_coal 1 167 2000.0 0.0 1.0 +it 07_gas 1 167 2000.0 0.0 1.0 +it 08_non-res 1 167 2000.0 0.0 1.0 +it 09_hydro_pump 1 167 600.0 0.0 1.0 +it 01_solar 1 168 2000.0 0.0 1.0 +it 02_wind_on 1 168 2000.0 0.0 1.0 +it 03_wind_off 1 168 2000.0 0.0 1.0 +it 04_res 1 168 2000.0 0.0 1.0 +it 05_nuclear 1 168 2000.0 0.0 1.0 +it 06_coal 1 168 2000.0 0.0 1.0 +it 07_gas 1 168 2000.0 0.0 1.0 +it 08_non-res 1 168 2000.0 0.0 1.0 +it 09_hydro_pump 1 168 700.0 0.0 1.0 it 01_solar 1 169 0.0 0.0 0.0 it 02_wind_on 1 169 0.0 0.0 0.0 it 03_wind_off 1 169 0.0 0.0 0.0 @@ -7568,7 +7568,7 @@ it 06_coal 1 169 0.0 0.0 0.0 it 07_gas 1 169 0.0 0.0 0.0 it 08_non-res 1 169 0.0 0.0 0.0 it 09_hydro_pump 1 169 0.0 0.0 0.0 -it 01_solar 1 170 100.0 1.0 0.0 +it 01_solar 1 170 100.0 0.0 1.0 it 02_wind_on 1 170 0.0 0.0 0.0 it 03_wind_off 1 170 0.0 0.0 0.0 it 04_res 1 170 0.0 0.0 0.0 @@ -7577,7 +7577,7 @@ it 06_coal 1 170 0.0 0.0 0.0 it 07_gas 1 170 0.0 0.0 0.0 it 08_non-res 1 170 0.0 0.0 0.0 it 09_hydro_pump 1 170 0.0 0.0 0.0 -it 01_solar 1 171 200.0 1.0 0.0 +it 01_solar 1 171 200.0 0.0 1.0 it 02_wind_on 1 171 0.0 0.0 0.0 it 03_wind_off 1 171 0.0 0.0 0.0 it 04_res 1 171 0.0 0.0 0.0 @@ -7586,7 +7586,7 @@ it 06_coal 1 171 0.0 0.0 0.0 it 07_gas 1 171 0.0 0.0 0.0 it 08_non-res 1 171 0.0 0.0 0.0 it 09_hydro_pump 1 171 0.0 0.0 0.0 -it 01_solar 1 172 300.0 1.0 0.0 +it 01_solar 1 172 300.0 0.0 1.0 it 02_wind_on 1 172 0.0 0.0 0.0 it 03_wind_off 1 172 0.0 0.0 0.0 it 04_res 1 172 0.0 0.0 0.0 @@ -7595,7 +7595,7 @@ it 06_coal 1 172 0.0 0.0 0.0 it 07_gas 1 172 0.0 0.0 0.0 it 08_non-res 1 172 0.0 0.0 0.0 it 09_hydro_pump 1 172 0.0 0.0 0.0 -it 01_solar 1 173 400.0 1.0 0.0 +it 01_solar 1 173 400.0 0.0 1.0 it 02_wind_on 1 173 0.0 0.0 0.0 it 03_wind_off 1 173 0.0 0.0 0.0 it 04_res 1 173 0.0 0.0 0.0 @@ -7604,7 +7604,7 @@ it 06_coal 1 173 0.0 0.0 0.0 it 07_gas 1 173 0.0 0.0 0.0 it 08_non-res 1 173 0.0 0.0 0.0 it 09_hydro_pump 1 173 0.0 0.0 0.0 -it 01_solar 1 174 500.0 1.0 0.0 +it 01_solar 1 174 500.0 0.0 1.0 it 02_wind_on 1 174 0.0 0.0 0.0 it 03_wind_off 1 174 0.0 0.0 0.0 it 04_res 1 174 0.0 0.0 0.0 @@ -7613,7 +7613,7 @@ it 06_coal 1 174 0.0 0.0 0.0 it 07_gas 1 174 0.0 0.0 0.0 it 08_non-res 1 174 0.0 0.0 0.0 it 09_hydro_pump 1 174 0.0 0.0 0.0 -it 01_solar 1 175 600.0 1.0 0.0 +it 01_solar 1 175 600.0 0.0 1.0 it 02_wind_on 1 175 0.0 0.0 0.0 it 03_wind_off 1 175 0.0 0.0 0.0 it 04_res 1 175 0.0 0.0 0.0 @@ -7622,7 +7622,7 @@ it 06_coal 1 175 0.0 0.0 0.0 it 07_gas 1 175 0.0 0.0 0.0 it 08_non-res 1 175 0.0 0.0 0.0 it 09_hydro_pump 1 175 0.0 0.0 0.0 -it 01_solar 1 176 700.0 1.0 0.0 +it 01_solar 1 176 700.0 0.0 1.0 it 02_wind_on 1 176 0.0 0.0 0.0 it 03_wind_off 1 176 0.0 0.0 0.0 it 04_res 1 176 0.0 0.0 0.0 @@ -7631,7 +7631,7 @@ it 06_coal 1 176 0.0 0.0 0.0 it 07_gas 1 176 0.0 0.0 0.0 it 08_non-res 1 176 0.0 0.0 0.0 it 09_hydro_pump 1 176 0.0 0.0 0.0 -it 01_solar 1 177 800.0 1.0 0.0 +it 01_solar 1 177 800.0 0.0 1.0 it 02_wind_on 1 177 0.0 0.0 0.0 it 03_wind_off 1 177 0.0 0.0 0.0 it 04_res 1 177 0.0 0.0 0.0 @@ -7640,7 +7640,7 @@ it 06_coal 1 177 0.0 0.0 0.0 it 07_gas 1 177 0.0 0.0 0.0 it 08_non-res 1 177 0.0 0.0 0.0 it 09_hydro_pump 1 177 0.0 0.0 0.0 -it 01_solar 1 178 900.0 1.0 0.0 +it 01_solar 1 178 900.0 0.0 1.0 it 02_wind_on 1 178 0.0 0.0 0.0 it 03_wind_off 1 178 0.0 0.0 0.0 it 04_res 1 178 0.0 0.0 0.0 @@ -7649,7 +7649,7 @@ it 06_coal 1 178 0.0 0.0 0.0 it 07_gas 1 178 0.0 0.0 0.0 it 08_non-res 1 178 0.0 0.0 0.0 it 09_hydro_pump 1 178 0.0 0.0 0.0 -it 01_solar 1 179 1000.0 1.0 0.0 +it 01_solar 1 179 1000.0 0.0 1.0 it 02_wind_on 1 179 0.0 0.0 0.0 it 03_wind_off 1 179 0.0 0.0 0.0 it 04_res 1 179 0.0 0.0 0.0 @@ -7658,7 +7658,7 @@ it 06_coal 1 179 0.0 0.0 0.0 it 07_gas 1 179 0.0 0.0 0.0 it 08_non-res 1 179 0.0 0.0 0.0 it 09_hydro_pump 1 179 0.0 0.0 0.0 -it 01_solar 1 180 1100.0 1.0 0.0 +it 01_solar 1 180 1100.0 0.0 1.0 it 02_wind_on 1 180 0.0 0.0 0.0 it 03_wind_off 1 180 0.0 0.0 0.0 it 04_res 1 180 0.0 0.0 0.0 @@ -7667,7 +7667,7 @@ it 06_coal 1 180 0.0 0.0 0.0 it 07_gas 1 180 0.0 0.0 0.0 it 08_non-res 1 180 0.0 0.0 0.0 it 09_hydro_pump 1 180 0.0 0.0 0.0 -it 01_solar 1 181 1200.0 1.0 0.0 +it 01_solar 1 181 1200.0 0.0 1.0 it 02_wind_on 1 181 0.0 0.0 0.0 it 03_wind_off 1 181 0.0 0.0 0.0 it 04_res 1 181 0.0 0.0 0.0 @@ -7676,7 +7676,7 @@ it 06_coal 1 181 0.0 0.0 0.0 it 07_gas 1 181 0.0 0.0 0.0 it 08_non-res 1 181 0.0 0.0 0.0 it 09_hydro_pump 1 181 0.0 0.0 0.0 -it 01_solar 1 182 1300.0 1.0 0.0 +it 01_solar 1 182 1300.0 0.0 1.0 it 02_wind_on 1 182 0.0 0.0 0.0 it 03_wind_off 1 182 0.0 0.0 0.0 it 04_res 1 182 0.0 0.0 0.0 @@ -7685,7 +7685,7 @@ it 06_coal 1 182 0.0 0.0 0.0 it 07_gas 1 182 0.0 0.0 0.0 it 08_non-res 1 182 0.0 0.0 0.0 it 09_hydro_pump 1 182 0.0 0.0 0.0 -it 01_solar 1 183 1400.0 1.0 0.0 +it 01_solar 1 183 1400.0 0.0 1.0 it 02_wind_on 1 183 0.0 0.0 0.0 it 03_wind_off 1 183 0.0 0.0 0.0 it 04_res 1 183 0.0 0.0 0.0 @@ -7694,7 +7694,7 @@ it 06_coal 1 183 0.0 0.0 0.0 it 07_gas 1 183 0.0 0.0 0.0 it 08_non-res 1 183 0.0 0.0 0.0 it 09_hydro_pump 1 183 0.0 0.0 0.0 -it 01_solar 1 184 1500.0 1.0 0.0 +it 01_solar 1 184 1500.0 0.0 1.0 it 02_wind_on 1 184 0.0 0.0 0.0 it 03_wind_off 1 184 0.0 0.0 0.0 it 04_res 1 184 0.0 0.0 0.0 @@ -7703,7 +7703,7 @@ it 06_coal 1 184 0.0 0.0 0.0 it 07_gas 1 184 0.0 0.0 0.0 it 08_non-res 1 184 0.0 0.0 0.0 it 09_hydro_pump 1 184 0.0 0.0 0.0 -it 01_solar 1 185 1600.0 1.0 0.0 +it 01_solar 1 185 1600.0 0.0 1.0 it 02_wind_on 1 185 0.0 0.0 0.0 it 03_wind_off 1 185 0.0 0.0 0.0 it 04_res 1 185 0.0 0.0 0.0 @@ -7712,7 +7712,7 @@ it 06_coal 1 185 0.0 0.0 0.0 it 07_gas 1 185 0.0 0.0 0.0 it 08_non-res 1 185 0.0 0.0 0.0 it 09_hydro_pump 1 185 0.0 0.0 0.0 -it 01_solar 1 186 1700.0 1.0 0.0 +it 01_solar 1 186 1700.0 0.0 1.0 it 02_wind_on 1 186 0.0 0.0 0.0 it 03_wind_off 1 186 0.0 0.0 0.0 it 04_res 1 186 0.0 0.0 0.0 @@ -7721,7 +7721,7 @@ it 06_coal 1 186 0.0 0.0 0.0 it 07_gas 1 186 0.0 0.0 0.0 it 08_non-res 1 186 0.0 0.0 0.0 it 09_hydro_pump 1 186 0.0 0.0 0.0 -it 01_solar 1 187 1800.0 1.0 0.0 +it 01_solar 1 187 1800.0 0.0 1.0 it 02_wind_on 1 187 0.0 0.0 0.0 it 03_wind_off 1 187 0.0 0.0 0.0 it 04_res 1 187 0.0 0.0 0.0 @@ -7730,7 +7730,7 @@ it 06_coal 1 187 0.0 0.0 0.0 it 07_gas 1 187 0.0 0.0 0.0 it 08_non-res 1 187 0.0 0.0 0.0 it 09_hydro_pump 1 187 0.0 0.0 0.0 -it 01_solar 1 188 1900.0 1.0 0.0 +it 01_solar 1 188 1900.0 0.0 1.0 it 02_wind_on 1 188 0.0 0.0 0.0 it 03_wind_off 1 188 0.0 0.0 0.0 it 04_res 1 188 0.0 0.0 0.0 @@ -7739,7 +7739,7 @@ it 06_coal 1 188 0.0 0.0 0.0 it 07_gas 1 188 0.0 0.0 0.0 it 08_non-res 1 188 0.0 0.0 0.0 it 09_hydro_pump 1 188 0.0 0.0 0.0 -it 01_solar 1 189 2000.0 1.0 0.0 +it 01_solar 1 189 2000.0 0.0 1.0 it 02_wind_on 1 189 0.0 0.0 0.0 it 03_wind_off 1 189 0.0 0.0 0.0 it 04_res 1 189 0.0 0.0 0.0 @@ -7748,8 +7748,8 @@ it 06_coal 1 189 0.0 0.0 0.0 it 07_gas 1 189 0.0 0.0 0.0 it 08_non-res 1 189 0.0 0.0 0.0 it 09_hydro_pump 1 189 0.0 0.0 0.0 -it 01_solar 1 190 2000.0 1.0 0.0 -it 02_wind_on 1 190 100.0 1.0 0.0 +it 01_solar 1 190 2000.0 0.0 1.0 +it 02_wind_on 1 190 100.0 0.0 1.0 it 03_wind_off 1 190 0.0 0.0 0.0 it 04_res 1 190 0.0 0.0 0.0 it 05_nuclear 1 190 0.0 0.0 0.0 @@ -7757,8 +7757,8 @@ it 06_coal 1 190 0.0 0.0 0.0 it 07_gas 1 190 0.0 0.0 0.0 it 08_non-res 1 190 0.0 0.0 0.0 it 09_hydro_pump 1 190 0.0 0.0 0.0 -it 01_solar 1 191 2000.0 1.0 0.0 -it 02_wind_on 1 191 200.0 1.0 0.0 +it 01_solar 1 191 2000.0 0.0 1.0 +it 02_wind_on 1 191 200.0 0.0 1.0 it 03_wind_off 1 191 0.0 0.0 0.0 it 04_res 1 191 0.0 0.0 0.0 it 05_nuclear 1 191 0.0 0.0 0.0 @@ -7766,8 +7766,8 @@ it 06_coal 1 191 0.0 0.0 0.0 it 07_gas 1 191 0.0 0.0 0.0 it 08_non-res 1 191 0.0 0.0 0.0 it 09_hydro_pump 1 191 0.0 0.0 0.0 -it 01_solar 1 192 2000.0 1.0 0.0 -it 02_wind_on 1 192 300.0 1.0 0.0 +it 01_solar 1 192 2000.0 0.0 1.0 +it 02_wind_on 1 192 300.0 0.0 1.0 it 03_wind_off 1 192 0.0 0.0 0.0 it 04_res 1 192 0.0 0.0 0.0 it 05_nuclear 1 192 0.0 0.0 0.0 @@ -7775,8 +7775,8 @@ it 06_coal 1 192 0.0 0.0 0.0 it 07_gas 1 192 0.0 0.0 0.0 it 08_non-res 1 192 0.0 0.0 0.0 it 09_hydro_pump 1 192 0.0 0.0 0.0 -it 01_solar 1 193 2000.0 1.0 0.0 -it 02_wind_on 1 193 400.0 1.0 0.0 +it 01_solar 1 193 2000.0 0.0 1.0 +it 02_wind_on 1 193 400.0 0.0 1.0 it 03_wind_off 1 193 0.0 0.0 0.0 it 04_res 1 193 0.0 0.0 0.0 it 05_nuclear 1 193 0.0 0.0 0.0 @@ -7784,8 +7784,8 @@ it 06_coal 1 193 0.0 0.0 0.0 it 07_gas 1 193 0.0 0.0 0.0 it 08_non-res 1 193 0.0 0.0 0.0 it 09_hydro_pump 1 193 0.0 0.0 0.0 -it 01_solar 1 194 2000.0 1.0 0.0 -it 02_wind_on 1 194 500.0 1.0 0.0 +it 01_solar 1 194 2000.0 0.0 1.0 +it 02_wind_on 1 194 500.0 0.0 1.0 it 03_wind_off 1 194 0.0 0.0 0.0 it 04_res 1 194 0.0 0.0 0.0 it 05_nuclear 1 194 0.0 0.0 0.0 @@ -7793,8 +7793,8 @@ it 06_coal 1 194 0.0 0.0 0.0 it 07_gas 1 194 0.0 0.0 0.0 it 08_non-res 1 194 0.0 0.0 0.0 it 09_hydro_pump 1 194 0.0 0.0 0.0 -it 01_solar 1 195 2000.0 1.0 0.0 -it 02_wind_on 1 195 600.0 1.0 0.0 +it 01_solar 1 195 2000.0 0.0 1.0 +it 02_wind_on 1 195 600.0 0.0 1.0 it 03_wind_off 1 195 0.0 0.0 0.0 it 04_res 1 195 0.0 0.0 0.0 it 05_nuclear 1 195 0.0 0.0 0.0 @@ -7802,8 +7802,8 @@ it 06_coal 1 195 0.0 0.0 0.0 it 07_gas 1 195 0.0 0.0 0.0 it 08_non-res 1 195 0.0 0.0 0.0 it 09_hydro_pump 1 195 0.0 0.0 0.0 -it 01_solar 1 196 2000.0 1.0 0.0 -it 02_wind_on 1 196 700.0 1.0 0.0 +it 01_solar 1 196 2000.0 0.0 1.0 +it 02_wind_on 1 196 700.0 0.0 1.0 it 03_wind_off 1 196 0.0 0.0 0.0 it 04_res 1 196 0.0 0.0 0.0 it 05_nuclear 1 196 0.0 0.0 0.0 @@ -7811,8 +7811,8 @@ it 06_coal 1 196 0.0 0.0 0.0 it 07_gas 1 196 0.0 0.0 0.0 it 08_non-res 1 196 0.0 0.0 0.0 it 09_hydro_pump 1 196 0.0 0.0 0.0 -it 01_solar 1 197 2000.0 1.0 0.0 -it 02_wind_on 1 197 800.0 1.0 0.0 +it 01_solar 1 197 2000.0 0.0 1.0 +it 02_wind_on 1 197 800.0 0.0 1.0 it 03_wind_off 1 197 0.0 0.0 0.0 it 04_res 1 197 0.0 0.0 0.0 it 05_nuclear 1 197 0.0 0.0 0.0 @@ -7820,8 +7820,8 @@ it 06_coal 1 197 0.0 0.0 0.0 it 07_gas 1 197 0.0 0.0 0.0 it 08_non-res 1 197 0.0 0.0 0.0 it 09_hydro_pump 1 197 0.0 0.0 0.0 -it 01_solar 1 198 2000.0 1.0 0.0 -it 02_wind_on 1 198 900.0 1.0 0.0 +it 01_solar 1 198 2000.0 0.0 1.0 +it 02_wind_on 1 198 900.0 0.0 1.0 it 03_wind_off 1 198 0.0 0.0 0.0 it 04_res 1 198 0.0 0.0 0.0 it 05_nuclear 1 198 0.0 0.0 0.0 @@ -7829,8 +7829,8 @@ it 06_coal 1 198 0.0 0.0 0.0 it 07_gas 1 198 0.0 0.0 0.0 it 08_non-res 1 198 0.0 0.0 0.0 it 09_hydro_pump 1 198 0.0 0.0 0.0 -it 01_solar 1 199 2000.0 1.0 0.0 -it 02_wind_on 1 199 1000.0 1.0 0.0 +it 01_solar 1 199 2000.0 0.0 1.0 +it 02_wind_on 1 199 1000.0 0.0 1.0 it 03_wind_off 1 199 0.0 0.0 0.0 it 04_res 1 199 0.0 0.0 0.0 it 05_nuclear 1 199 0.0 0.0 0.0 @@ -7838,8 +7838,8 @@ it 06_coal 1 199 0.0 0.0 0.0 it 07_gas 1 199 0.0 0.0 0.0 it 08_non-res 1 199 0.0 0.0 0.0 it 09_hydro_pump 1 199 0.0 0.0 0.0 -it 01_solar 1 200 2000.0 1.0 0.0 -it 02_wind_on 1 200 1100.0 1.0 0.0 +it 01_solar 1 200 2000.0 0.0 1.0 +it 02_wind_on 1 200 1100.0 0.0 1.0 it 03_wind_off 1 200 0.0 0.0 0.0 it 04_res 1 200 0.0 0.0 0.0 it 05_nuclear 1 200 0.0 0.0 0.0 @@ -7847,8 +7847,8 @@ it 06_coal 1 200 0.0 0.0 0.0 it 07_gas 1 200 0.0 0.0 0.0 it 08_non-res 1 200 0.0 0.0 0.0 it 09_hydro_pump 1 200 0.0 0.0 0.0 -it 01_solar 1 201 2000.0 1.0 0.0 -it 02_wind_on 1 201 1200.0 1.0 0.0 +it 01_solar 1 201 2000.0 0.0 1.0 +it 02_wind_on 1 201 1200.0 0.0 1.0 it 03_wind_off 1 201 0.0 0.0 0.0 it 04_res 1 201 0.0 0.0 0.0 it 05_nuclear 1 201 0.0 0.0 0.0 @@ -7856,8 +7856,8 @@ it 06_coal 1 201 0.0 0.0 0.0 it 07_gas 1 201 0.0 0.0 0.0 it 08_non-res 1 201 0.0 0.0 0.0 it 09_hydro_pump 1 201 0.0 0.0 0.0 -it 01_solar 1 202 2000.0 1.0 0.0 -it 02_wind_on 1 202 1300.0 1.0 0.0 +it 01_solar 1 202 2000.0 0.0 1.0 +it 02_wind_on 1 202 1300.0 0.0 1.0 it 03_wind_off 1 202 0.0 0.0 0.0 it 04_res 1 202 0.0 0.0 0.0 it 05_nuclear 1 202 0.0 0.0 0.0 @@ -7865,8 +7865,8 @@ it 06_coal 1 202 0.0 0.0 0.0 it 07_gas 1 202 0.0 0.0 0.0 it 08_non-res 1 202 0.0 0.0 0.0 it 09_hydro_pump 1 202 0.0 0.0 0.0 -it 01_solar 1 203 2000.0 1.0 0.0 -it 02_wind_on 1 203 1400.0 1.0 0.0 +it 01_solar 1 203 2000.0 0.0 1.0 +it 02_wind_on 1 203 1400.0 0.0 1.0 it 03_wind_off 1 203 0.0 0.0 0.0 it 04_res 1 203 0.0 0.0 0.0 it 05_nuclear 1 203 0.0 0.0 0.0 @@ -7874,8 +7874,8 @@ it 06_coal 1 203 0.0 0.0 0.0 it 07_gas 1 203 0.0 0.0 0.0 it 08_non-res 1 203 0.0 0.0 0.0 it 09_hydro_pump 1 203 0.0 0.0 0.0 -it 01_solar 1 204 2000.0 1.0 0.0 -it 02_wind_on 1 204 1500.0 1.0 0.0 +it 01_solar 1 204 2000.0 0.0 1.0 +it 02_wind_on 1 204 1500.0 0.0 1.0 it 03_wind_off 1 204 0.0 0.0 0.0 it 04_res 1 204 0.0 0.0 0.0 it 05_nuclear 1 204 0.0 0.0 0.0 @@ -7883,8 +7883,8 @@ it 06_coal 1 204 0.0 0.0 0.0 it 07_gas 1 204 0.0 0.0 0.0 it 08_non-res 1 204 0.0 0.0 0.0 it 09_hydro_pump 1 204 0.0 0.0 0.0 -it 01_solar 1 205 2000.0 1.0 0.0 -it 02_wind_on 1 205 1600.0 1.0 0.0 +it 01_solar 1 205 2000.0 0.0 1.0 +it 02_wind_on 1 205 1600.0 0.0 1.0 it 03_wind_off 1 205 0.0 0.0 0.0 it 04_res 1 205 0.0 0.0 0.0 it 05_nuclear 1 205 0.0 0.0 0.0 @@ -7892,8 +7892,8 @@ it 06_coal 1 205 0.0 0.0 0.0 it 07_gas 1 205 0.0 0.0 0.0 it 08_non-res 1 205 0.0 0.0 0.0 it 09_hydro_pump 1 205 0.0 0.0 0.0 -it 01_solar 1 206 2000.0 1.0 0.0 -it 02_wind_on 1 206 1700.0 1.0 0.0 +it 01_solar 1 206 2000.0 0.0 1.0 +it 02_wind_on 1 206 1700.0 0.0 1.0 it 03_wind_off 1 206 0.0 0.0 0.0 it 04_res 1 206 0.0 0.0 0.0 it 05_nuclear 1 206 0.0 0.0 0.0 @@ -7901,8 +7901,8 @@ it 06_coal 1 206 0.0 0.0 0.0 it 07_gas 1 206 0.0 0.0 0.0 it 08_non-res 1 206 0.0 0.0 0.0 it 09_hydro_pump 1 206 0.0 0.0 0.0 -it 01_solar 1 207 2000.0 1.0 0.0 -it 02_wind_on 1 207 1800.0 1.0 0.0 +it 01_solar 1 207 2000.0 0.0 1.0 +it 02_wind_on 1 207 1800.0 0.0 1.0 it 03_wind_off 1 207 0.0 0.0 0.0 it 04_res 1 207 0.0 0.0 0.0 it 05_nuclear 1 207 0.0 0.0 0.0 @@ -7910,8 +7910,8 @@ it 06_coal 1 207 0.0 0.0 0.0 it 07_gas 1 207 0.0 0.0 0.0 it 08_non-res 1 207 0.0 0.0 0.0 it 09_hydro_pump 1 207 0.0 0.0 0.0 -it 01_solar 1 208 2000.0 1.0 0.0 -it 02_wind_on 1 208 1900.0 1.0 0.0 +it 01_solar 1 208 2000.0 0.0 1.0 +it 02_wind_on 1 208 1900.0 0.0 1.0 it 03_wind_off 1 208 0.0 0.0 0.0 it 04_res 1 208 0.0 0.0 0.0 it 05_nuclear 1 208 0.0 0.0 0.0 @@ -7919,8 +7919,8 @@ it 06_coal 1 208 0.0 0.0 0.0 it 07_gas 1 208 0.0 0.0 0.0 it 08_non-res 1 208 0.0 0.0 0.0 it 09_hydro_pump 1 208 0.0 0.0 0.0 -it 01_solar 1 209 2000.0 1.0 0.0 -it 02_wind_on 1 209 2000.0 1.0 0.0 +it 01_solar 1 209 2000.0 0.0 1.0 +it 02_wind_on 1 209 2000.0 0.0 1.0 it 03_wind_off 1 209 0.0 0.0 0.0 it 04_res 1 209 0.0 0.0 0.0 it 05_nuclear 1 209 0.0 0.0 0.0 @@ -7928,1146 +7928,1146 @@ it 06_coal 1 209 0.0 0.0 0.0 it 07_gas 1 209 0.0 0.0 0.0 it 08_non-res 1 209 0.0 0.0 0.0 it 09_hydro_pump 1 209 0.0 0.0 0.0 -it 01_solar 1 210 2000.0 1.0 0.0 -it 02_wind_on 1 210 2000.0 1.0 0.0 -it 03_wind_off 1 210 100.0 1.0 0.0 +it 01_solar 1 210 2000.0 0.0 1.0 +it 02_wind_on 1 210 2000.0 0.0 1.0 +it 03_wind_off 1 210 100.0 0.0 1.0 it 04_res 1 210 0.0 0.0 0.0 it 05_nuclear 1 210 0.0 0.0 0.0 it 06_coal 1 210 0.0 0.0 0.0 it 07_gas 1 210 0.0 0.0 0.0 it 08_non-res 1 210 0.0 0.0 0.0 it 09_hydro_pump 1 210 0.0 0.0 0.0 -it 01_solar 1 211 2000.0 1.0 0.0 -it 02_wind_on 1 211 2000.0 1.0 0.0 -it 03_wind_off 1 211 200.0 1.0 0.0 +it 01_solar 1 211 2000.0 0.0 1.0 +it 02_wind_on 1 211 2000.0 0.0 1.0 +it 03_wind_off 1 211 200.0 0.0 1.0 it 04_res 1 211 0.0 0.0 0.0 it 05_nuclear 1 211 0.0 0.0 0.0 it 06_coal 1 211 0.0 0.0 0.0 it 07_gas 1 211 0.0 0.0 0.0 it 08_non-res 1 211 0.0 0.0 0.0 it 09_hydro_pump 1 211 0.0 0.0 0.0 -it 01_solar 1 212 2000.0 1.0 0.0 -it 02_wind_on 1 212 2000.0 1.0 0.0 -it 03_wind_off 1 212 300.0 1.0 0.0 +it 01_solar 1 212 2000.0 0.0 1.0 +it 02_wind_on 1 212 2000.0 0.0 1.0 +it 03_wind_off 1 212 300.0 0.0 1.0 it 04_res 1 212 0.0 0.0 0.0 it 05_nuclear 1 212 0.0 0.0 0.0 it 06_coal 1 212 0.0 0.0 0.0 it 07_gas 1 212 0.0 0.0 0.0 it 08_non-res 1 212 0.0 0.0 0.0 it 09_hydro_pump 1 212 0.0 0.0 0.0 -it 01_solar 1 213 2000.0 1.0 0.0 -it 02_wind_on 1 213 2000.0 1.0 0.0 -it 03_wind_off 1 213 400.0 1.0 0.0 +it 01_solar 1 213 2000.0 0.0 1.0 +it 02_wind_on 1 213 2000.0 0.0 1.0 +it 03_wind_off 1 213 400.0 0.0 1.0 it 04_res 1 213 0.0 0.0 0.0 it 05_nuclear 1 213 0.0 0.0 0.0 it 06_coal 1 213 0.0 0.0 0.0 it 07_gas 1 213 0.0 0.0 0.0 it 08_non-res 1 213 0.0 0.0 0.0 it 09_hydro_pump 1 213 0.0 0.0 0.0 -it 01_solar 1 214 2000.0 1.0 0.0 -it 02_wind_on 1 214 2000.0 1.0 0.0 -it 03_wind_off 1 214 500.0 1.0 0.0 +it 01_solar 1 214 2000.0 0.0 1.0 +it 02_wind_on 1 214 2000.0 0.0 1.0 +it 03_wind_off 1 214 500.0 0.0 1.0 it 04_res 1 214 0.0 0.0 0.0 it 05_nuclear 1 214 0.0 0.0 0.0 it 06_coal 1 214 0.0 0.0 0.0 it 07_gas 1 214 0.0 0.0 0.0 it 08_non-res 1 214 0.0 0.0 0.0 it 09_hydro_pump 1 214 0.0 0.0 0.0 -it 01_solar 1 215 2000.0 1.0 0.0 -it 02_wind_on 1 215 2000.0 1.0 0.0 -it 03_wind_off 1 215 600.0 1.0 0.0 +it 01_solar 1 215 2000.0 0.0 1.0 +it 02_wind_on 1 215 2000.0 0.0 1.0 +it 03_wind_off 1 215 600.0 0.0 1.0 it 04_res 1 215 0.0 0.0 0.0 it 05_nuclear 1 215 0.0 0.0 0.0 it 06_coal 1 215 0.0 0.0 0.0 it 07_gas 1 215 0.0 0.0 0.0 it 08_non-res 1 215 0.0 0.0 0.0 it 09_hydro_pump 1 215 0.0 0.0 0.0 -it 01_solar 1 216 2000.0 1.0 0.0 -it 02_wind_on 1 216 2000.0 1.0 0.0 -it 03_wind_off 1 216 700.0 1.0 0.0 +it 01_solar 1 216 2000.0 0.0 1.0 +it 02_wind_on 1 216 2000.0 0.0 1.0 +it 03_wind_off 1 216 700.0 0.0 1.0 it 04_res 1 216 0.0 0.0 0.0 it 05_nuclear 1 216 0.0 0.0 0.0 it 06_coal 1 216 0.0 0.0 0.0 it 07_gas 1 216 0.0 0.0 0.0 it 08_non-res 1 216 0.0 0.0 0.0 it 09_hydro_pump 1 216 0.0 0.0 0.0 -it 01_solar 1 217 2000.0 1.0 0.0 -it 02_wind_on 1 217 2000.0 1.0 0.0 -it 03_wind_off 1 217 800.0 1.0 0.0 +it 01_solar 1 217 2000.0 0.0 1.0 +it 02_wind_on 1 217 2000.0 0.0 1.0 +it 03_wind_off 1 217 800.0 0.0 1.0 it 04_res 1 217 0.0 0.0 0.0 it 05_nuclear 1 217 0.0 0.0 0.0 it 06_coal 1 217 0.0 0.0 0.0 it 07_gas 1 217 0.0 0.0 0.0 it 08_non-res 1 217 0.0 0.0 0.0 it 09_hydro_pump 1 217 0.0 0.0 0.0 -it 01_solar 1 218 2000.0 1.0 0.0 -it 02_wind_on 1 218 2000.0 1.0 0.0 -it 03_wind_off 1 218 900.0 1.0 0.0 +it 01_solar 1 218 2000.0 0.0 1.0 +it 02_wind_on 1 218 2000.0 0.0 1.0 +it 03_wind_off 1 218 900.0 0.0 1.0 it 04_res 1 218 0.0 0.0 0.0 it 05_nuclear 1 218 0.0 0.0 0.0 it 06_coal 1 218 0.0 0.0 0.0 it 07_gas 1 218 0.0 0.0 0.0 it 08_non-res 1 218 0.0 0.0 0.0 it 09_hydro_pump 1 218 0.0 0.0 0.0 -it 01_solar 1 219 2000.0 1.0 0.0 -it 02_wind_on 1 219 2000.0 1.0 0.0 -it 03_wind_off 1 219 1000.0 1.0 0.0 +it 01_solar 1 219 2000.0 0.0 1.0 +it 02_wind_on 1 219 2000.0 0.0 1.0 +it 03_wind_off 1 219 1000.0 0.0 1.0 it 04_res 1 219 0.0 0.0 0.0 it 05_nuclear 1 219 0.0 0.0 0.0 it 06_coal 1 219 0.0 0.0 0.0 it 07_gas 1 219 0.0 0.0 0.0 it 08_non-res 1 219 0.0 0.0 0.0 it 09_hydro_pump 1 219 0.0 0.0 0.0 -it 01_solar 1 220 2000.0 1.0 0.0 -it 02_wind_on 1 220 2000.0 1.0 0.0 -it 03_wind_off 1 220 1100.0 1.0 0.0 +it 01_solar 1 220 2000.0 0.0 1.0 +it 02_wind_on 1 220 2000.0 0.0 1.0 +it 03_wind_off 1 220 1100.0 0.0 1.0 it 04_res 1 220 0.0 0.0 0.0 it 05_nuclear 1 220 0.0 0.0 0.0 it 06_coal 1 220 0.0 0.0 0.0 it 07_gas 1 220 0.0 0.0 0.0 it 08_non-res 1 220 0.0 0.0 0.0 it 09_hydro_pump 1 220 0.0 0.0 0.0 -it 01_solar 1 221 2000.0 1.0 0.0 -it 02_wind_on 1 221 2000.0 1.0 0.0 -it 03_wind_off 1 221 1200.0 1.0 0.0 +it 01_solar 1 221 2000.0 0.0 1.0 +it 02_wind_on 1 221 2000.0 0.0 1.0 +it 03_wind_off 1 221 1200.0 0.0 1.0 it 04_res 1 221 0.0 0.0 0.0 it 05_nuclear 1 221 0.0 0.0 0.0 it 06_coal 1 221 0.0 0.0 0.0 it 07_gas 1 221 0.0 0.0 0.0 it 08_non-res 1 221 0.0 0.0 0.0 it 09_hydro_pump 1 221 0.0 0.0 0.0 -it 01_solar 1 222 2000.0 1.0 0.0 -it 02_wind_on 1 222 2000.0 1.0 0.0 -it 03_wind_off 1 222 1300.0 1.0 0.0 +it 01_solar 1 222 2000.0 0.0 1.0 +it 02_wind_on 1 222 2000.0 0.0 1.0 +it 03_wind_off 1 222 1300.0 0.0 1.0 it 04_res 1 222 0.0 0.0 0.0 it 05_nuclear 1 222 0.0 0.0 0.0 it 06_coal 1 222 0.0 0.0 0.0 it 07_gas 1 222 0.0 0.0 0.0 it 08_non-res 1 222 0.0 0.0 0.0 it 09_hydro_pump 1 222 0.0 0.0 0.0 -it 01_solar 1 223 2000.0 1.0 0.0 -it 02_wind_on 1 223 2000.0 1.0 0.0 -it 03_wind_off 1 223 1400.0 1.0 0.0 +it 01_solar 1 223 2000.0 0.0 1.0 +it 02_wind_on 1 223 2000.0 0.0 1.0 +it 03_wind_off 1 223 1400.0 0.0 1.0 it 04_res 1 223 0.0 0.0 0.0 it 05_nuclear 1 223 0.0 0.0 0.0 it 06_coal 1 223 0.0 0.0 0.0 it 07_gas 1 223 0.0 0.0 0.0 it 08_non-res 1 223 0.0 0.0 0.0 it 09_hydro_pump 1 223 0.0 0.0 0.0 -it 01_solar 1 224 2000.0 1.0 0.0 -it 02_wind_on 1 224 2000.0 1.0 0.0 -it 03_wind_off 1 224 1500.0 1.0 0.0 +it 01_solar 1 224 2000.0 0.0 1.0 +it 02_wind_on 1 224 2000.0 0.0 1.0 +it 03_wind_off 1 224 1500.0 0.0 1.0 it 04_res 1 224 0.0 0.0 0.0 it 05_nuclear 1 224 0.0 0.0 0.0 it 06_coal 1 224 0.0 0.0 0.0 it 07_gas 1 224 0.0 0.0 0.0 it 08_non-res 1 224 0.0 0.0 0.0 it 09_hydro_pump 1 224 0.0 0.0 0.0 -it 01_solar 1 225 2000.0 1.0 0.0 -it 02_wind_on 1 225 2000.0 1.0 0.0 -it 03_wind_off 1 225 1600.0 1.0 0.0 +it 01_solar 1 225 2000.0 0.0 1.0 +it 02_wind_on 1 225 2000.0 0.0 1.0 +it 03_wind_off 1 225 1600.0 0.0 1.0 it 04_res 1 225 0.0 0.0 0.0 it 05_nuclear 1 225 0.0 0.0 0.0 it 06_coal 1 225 0.0 0.0 0.0 it 07_gas 1 225 0.0 0.0 0.0 it 08_non-res 1 225 0.0 0.0 0.0 it 09_hydro_pump 1 225 0.0 0.0 0.0 -it 01_solar 1 226 2000.0 1.0 0.0 -it 02_wind_on 1 226 2000.0 1.0 0.0 -it 03_wind_off 1 226 1700.0 1.0 0.0 +it 01_solar 1 226 2000.0 0.0 1.0 +it 02_wind_on 1 226 2000.0 0.0 1.0 +it 03_wind_off 1 226 1700.0 0.0 1.0 it 04_res 1 226 0.0 0.0 0.0 it 05_nuclear 1 226 0.0 0.0 0.0 it 06_coal 1 226 0.0 0.0 0.0 it 07_gas 1 226 0.0 0.0 0.0 it 08_non-res 1 226 0.0 0.0 0.0 it 09_hydro_pump 1 226 0.0 0.0 0.0 -it 01_solar 1 227 2000.0 1.0 0.0 -it 02_wind_on 1 227 2000.0 1.0 0.0 -it 03_wind_off 1 227 1800.0 1.0 0.0 +it 01_solar 1 227 2000.0 0.0 1.0 +it 02_wind_on 1 227 2000.0 0.0 1.0 +it 03_wind_off 1 227 1800.0 0.0 1.0 it 04_res 1 227 0.0 0.0 0.0 it 05_nuclear 1 227 0.0 0.0 0.0 it 06_coal 1 227 0.0 0.0 0.0 it 07_gas 1 227 0.0 0.0 0.0 it 08_non-res 1 227 0.0 0.0 0.0 it 09_hydro_pump 1 227 0.0 0.0 0.0 -it 01_solar 1 228 2000.0 1.0 0.0 -it 02_wind_on 1 228 2000.0 1.0 0.0 -it 03_wind_off 1 228 1900.0 1.0 0.0 +it 01_solar 1 228 2000.0 0.0 1.0 +it 02_wind_on 1 228 2000.0 0.0 1.0 +it 03_wind_off 1 228 1900.0 0.0 1.0 it 04_res 1 228 0.0 0.0 0.0 it 05_nuclear 1 228 0.0 0.0 0.0 it 06_coal 1 228 0.0 0.0 0.0 it 07_gas 1 228 0.0 0.0 0.0 it 08_non-res 1 228 0.0 0.0 0.0 it 09_hydro_pump 1 228 0.0 0.0 0.0 -it 01_solar 1 229 2000.0 1.0 0.0 -it 02_wind_on 1 229 2000.0 1.0 0.0 -it 03_wind_off 1 229 2000.0 1.0 0.0 +it 01_solar 1 229 2000.0 0.0 1.0 +it 02_wind_on 1 229 2000.0 0.0 1.0 +it 03_wind_off 1 229 2000.0 0.0 1.0 it 04_res 1 229 0.0 0.0 0.0 it 05_nuclear 1 229 0.0 0.0 0.0 it 06_coal 1 229 0.0 0.0 0.0 it 07_gas 1 229 0.0 0.0 0.0 it 08_non-res 1 229 0.0 0.0 0.0 it 09_hydro_pump 1 229 0.0 0.0 0.0 -it 01_solar 1 230 2000.0 1.0 0.0 -it 02_wind_on 1 230 2000.0 1.0 0.0 -it 03_wind_off 1 230 2000.0 1.0 0.0 -it 04_res 1 230 100.0 1.0 0.0 +it 01_solar 1 230 2000.0 0.0 1.0 +it 02_wind_on 1 230 2000.0 0.0 1.0 +it 03_wind_off 1 230 2000.0 0.0 1.0 +it 04_res 1 230 100.0 0.0 1.0 it 05_nuclear 1 230 0.0 0.0 0.0 it 06_coal 1 230 0.0 0.0 0.0 it 07_gas 1 230 0.0 0.0 0.0 it 08_non-res 1 230 0.0 0.0 0.0 it 09_hydro_pump 1 230 0.0 0.0 0.0 -it 01_solar 1 231 2000.0 1.0 0.0 -it 02_wind_on 1 231 2000.0 1.0 0.0 -it 03_wind_off 1 231 2000.0 1.0 0.0 -it 04_res 1 231 200.0 1.0 0.0 +it 01_solar 1 231 2000.0 0.0 1.0 +it 02_wind_on 1 231 2000.0 0.0 1.0 +it 03_wind_off 1 231 2000.0 0.0 1.0 +it 04_res 1 231 200.0 0.0 1.0 it 05_nuclear 1 231 0.0 0.0 0.0 it 06_coal 1 231 0.0 0.0 0.0 it 07_gas 1 231 0.0 0.0 0.0 it 08_non-res 1 231 0.0 0.0 0.0 it 09_hydro_pump 1 231 0.0 0.0 0.0 -it 01_solar 1 232 2000.0 1.0 0.0 -it 02_wind_on 1 232 2000.0 1.0 0.0 -it 03_wind_off 1 232 2000.0 1.0 0.0 -it 04_res 1 232 300.0 1.0 0.0 +it 01_solar 1 232 2000.0 0.0 1.0 +it 02_wind_on 1 232 2000.0 0.0 1.0 +it 03_wind_off 1 232 2000.0 0.0 1.0 +it 04_res 1 232 300.0 0.0 1.0 it 05_nuclear 1 232 0.0 0.0 0.0 it 06_coal 1 232 0.0 0.0 0.0 it 07_gas 1 232 0.0 0.0 0.0 it 08_non-res 1 232 0.0 0.0 0.0 it 09_hydro_pump 1 232 0.0 0.0 0.0 -it 01_solar 1 233 2000.0 1.0 0.0 -it 02_wind_on 1 233 2000.0 1.0 0.0 -it 03_wind_off 1 233 2000.0 1.0 0.0 -it 04_res 1 233 400.0 1.0 0.0 +it 01_solar 1 233 2000.0 0.0 1.0 +it 02_wind_on 1 233 2000.0 0.0 1.0 +it 03_wind_off 1 233 2000.0 0.0 1.0 +it 04_res 1 233 400.0 0.0 1.0 it 05_nuclear 1 233 0.0 0.0 0.0 it 06_coal 1 233 0.0 0.0 0.0 it 07_gas 1 233 0.0 0.0 0.0 it 08_non-res 1 233 0.0 0.0 0.0 it 09_hydro_pump 1 233 0.0 0.0 0.0 -it 01_solar 1 234 2000.0 1.0 0.0 -it 02_wind_on 1 234 2000.0 1.0 0.0 -it 03_wind_off 1 234 2000.0 1.0 0.0 -it 04_res 1 234 500.0 1.0 0.0 +it 01_solar 1 234 2000.0 0.0 1.0 +it 02_wind_on 1 234 2000.0 0.0 1.0 +it 03_wind_off 1 234 2000.0 0.0 1.0 +it 04_res 1 234 500.0 0.0 1.0 it 05_nuclear 1 234 0.0 0.0 0.0 it 06_coal 1 234 0.0 0.0 0.0 it 07_gas 1 234 0.0 0.0 0.0 it 08_non-res 1 234 0.0 0.0 0.0 it 09_hydro_pump 1 234 0.0 0.0 0.0 -it 01_solar 1 235 2000.0 1.0 0.0 -it 02_wind_on 1 235 2000.0 1.0 0.0 -it 03_wind_off 1 235 2000.0 1.0 0.0 -it 04_res 1 235 600.0 1.0 0.0 +it 01_solar 1 235 2000.0 0.0 1.0 +it 02_wind_on 1 235 2000.0 0.0 1.0 +it 03_wind_off 1 235 2000.0 0.0 1.0 +it 04_res 1 235 600.0 0.0 1.0 it 05_nuclear 1 235 0.0 0.0 0.0 it 06_coal 1 235 0.0 0.0 0.0 it 07_gas 1 235 0.0 0.0 0.0 it 08_non-res 1 235 0.0 0.0 0.0 it 09_hydro_pump 1 235 0.0 0.0 0.0 -it 01_solar 1 236 2000.0 1.0 0.0 -it 02_wind_on 1 236 2000.0 1.0 0.0 -it 03_wind_off 1 236 2000.0 1.0 0.0 -it 04_res 1 236 700.0 1.0 0.0 +it 01_solar 1 236 2000.0 0.0 1.0 +it 02_wind_on 1 236 2000.0 0.0 1.0 +it 03_wind_off 1 236 2000.0 0.0 1.0 +it 04_res 1 236 700.0 0.0 1.0 it 05_nuclear 1 236 0.0 0.0 0.0 it 06_coal 1 236 0.0 0.0 0.0 it 07_gas 1 236 0.0 0.0 0.0 it 08_non-res 1 236 0.0 0.0 0.0 it 09_hydro_pump 1 236 0.0 0.0 0.0 -it 01_solar 1 237 2000.0 1.0 0.0 -it 02_wind_on 1 237 2000.0 1.0 0.0 -it 03_wind_off 1 237 2000.0 1.0 0.0 -it 04_res 1 237 800.0 1.0 0.0 +it 01_solar 1 237 2000.0 0.0 1.0 +it 02_wind_on 1 237 2000.0 0.0 1.0 +it 03_wind_off 1 237 2000.0 0.0 1.0 +it 04_res 1 237 800.0 0.0 1.0 it 05_nuclear 1 237 0.0 0.0 0.0 it 06_coal 1 237 0.0 0.0 0.0 it 07_gas 1 237 0.0 0.0 0.0 it 08_non-res 1 237 0.0 0.0 0.0 it 09_hydro_pump 1 237 0.0 0.0 0.0 -it 01_solar 1 238 2000.0 1.0 0.0 -it 02_wind_on 1 238 2000.0 1.0 0.0 -it 03_wind_off 1 238 2000.0 1.0 0.0 -it 04_res 1 238 900.0 1.0 0.0 +it 01_solar 1 238 2000.0 0.0 1.0 +it 02_wind_on 1 238 2000.0 0.0 1.0 +it 03_wind_off 1 238 2000.0 0.0 1.0 +it 04_res 1 238 900.0 0.0 1.0 it 05_nuclear 1 238 0.0 0.0 0.0 it 06_coal 1 238 0.0 0.0 0.0 it 07_gas 1 238 0.0 0.0 0.0 it 08_non-res 1 238 0.0 0.0 0.0 it 09_hydro_pump 1 238 0.0 0.0 0.0 -it 01_solar 1 239 2000.0 1.0 0.0 -it 02_wind_on 1 239 2000.0 1.0 0.0 -it 03_wind_off 1 239 2000.0 1.0 0.0 -it 04_res 1 239 1000.0 1.0 0.0 +it 01_solar 1 239 2000.0 0.0 1.0 +it 02_wind_on 1 239 2000.0 0.0 1.0 +it 03_wind_off 1 239 2000.0 0.0 1.0 +it 04_res 1 239 1000.0 0.0 1.0 it 05_nuclear 1 239 0.0 0.0 0.0 it 06_coal 1 239 0.0 0.0 0.0 it 07_gas 1 239 0.0 0.0 0.0 it 08_non-res 1 239 0.0 0.0 0.0 it 09_hydro_pump 1 239 0.0 0.0 0.0 -it 01_solar 1 240 2000.0 1.0 0.0 -it 02_wind_on 1 240 2000.0 1.0 0.0 -it 03_wind_off 1 240 2000.0 1.0 0.0 -it 04_res 1 240 1100.0 1.0 0.0 +it 01_solar 1 240 2000.0 0.0 1.0 +it 02_wind_on 1 240 2000.0 0.0 1.0 +it 03_wind_off 1 240 2000.0 0.0 1.0 +it 04_res 1 240 1100.0 0.0 1.0 it 05_nuclear 1 240 0.0 0.0 0.0 it 06_coal 1 240 0.0 0.0 0.0 it 07_gas 1 240 0.0 0.0 0.0 it 08_non-res 1 240 0.0 0.0 0.0 it 09_hydro_pump 1 240 0.0 0.0 0.0 -it 01_solar 1 241 2000.0 1.0 0.0 -it 02_wind_on 1 241 2000.0 1.0 0.0 -it 03_wind_off 1 241 2000.0 1.0 0.0 -it 04_res 1 241 1200.0 1.0 0.0 +it 01_solar 1 241 2000.0 0.0 1.0 +it 02_wind_on 1 241 2000.0 0.0 1.0 +it 03_wind_off 1 241 2000.0 0.0 1.0 +it 04_res 1 241 1200.0 0.0 1.0 it 05_nuclear 1 241 0.0 0.0 0.0 it 06_coal 1 241 0.0 0.0 0.0 it 07_gas 1 241 0.0 0.0 0.0 it 08_non-res 1 241 0.0 0.0 0.0 it 09_hydro_pump 1 241 0.0 0.0 0.0 -it 01_solar 1 242 2000.0 1.0 0.0 -it 02_wind_on 1 242 2000.0 1.0 0.0 -it 03_wind_off 1 242 2000.0 1.0 0.0 -it 04_res 1 242 1300.0 1.0 0.0 +it 01_solar 1 242 2000.0 0.0 1.0 +it 02_wind_on 1 242 2000.0 0.0 1.0 +it 03_wind_off 1 242 2000.0 0.0 1.0 +it 04_res 1 242 1300.0 0.0 1.0 it 05_nuclear 1 242 0.0 0.0 0.0 it 06_coal 1 242 0.0 0.0 0.0 it 07_gas 1 242 0.0 0.0 0.0 it 08_non-res 1 242 0.0 0.0 0.0 it 09_hydro_pump 1 242 0.0 0.0 0.0 -it 01_solar 1 243 2000.0 1.0 0.0 -it 02_wind_on 1 243 2000.0 1.0 0.0 -it 03_wind_off 1 243 2000.0 1.0 0.0 -it 04_res 1 243 1400.0 1.0 0.0 +it 01_solar 1 243 2000.0 0.0 1.0 +it 02_wind_on 1 243 2000.0 0.0 1.0 +it 03_wind_off 1 243 2000.0 0.0 1.0 +it 04_res 1 243 1400.0 0.0 1.0 it 05_nuclear 1 243 0.0 0.0 0.0 it 06_coal 1 243 0.0 0.0 0.0 it 07_gas 1 243 0.0 0.0 0.0 it 08_non-res 1 243 0.0 0.0 0.0 it 09_hydro_pump 1 243 0.0 0.0 0.0 -it 01_solar 1 244 2000.0 1.0 0.0 -it 02_wind_on 1 244 2000.0 1.0 0.0 -it 03_wind_off 1 244 2000.0 1.0 0.0 -it 04_res 1 244 1500.0 1.0 0.0 +it 01_solar 1 244 2000.0 0.0 1.0 +it 02_wind_on 1 244 2000.0 0.0 1.0 +it 03_wind_off 1 244 2000.0 0.0 1.0 +it 04_res 1 244 1500.0 0.0 1.0 it 05_nuclear 1 244 0.0 0.0 0.0 it 06_coal 1 244 0.0 0.0 0.0 it 07_gas 1 244 0.0 0.0 0.0 it 08_non-res 1 244 0.0 0.0 0.0 it 09_hydro_pump 1 244 0.0 0.0 0.0 -it 01_solar 1 245 2000.0 1.0 0.0 -it 02_wind_on 1 245 2000.0 1.0 0.0 -it 03_wind_off 1 245 2000.0 1.0 0.0 -it 04_res 1 245 1600.0 1.0 0.0 +it 01_solar 1 245 2000.0 0.0 1.0 +it 02_wind_on 1 245 2000.0 0.0 1.0 +it 03_wind_off 1 245 2000.0 0.0 1.0 +it 04_res 1 245 1600.0 0.0 1.0 it 05_nuclear 1 245 0.0 0.0 0.0 it 06_coal 1 245 0.0 0.0 0.0 it 07_gas 1 245 0.0 0.0 0.0 it 08_non-res 1 245 0.0 0.0 0.0 it 09_hydro_pump 1 245 0.0 0.0 0.0 -it 01_solar 1 246 2000.0 1.0 0.0 -it 02_wind_on 1 246 2000.0 1.0 0.0 -it 03_wind_off 1 246 2000.0 1.0 0.0 -it 04_res 1 246 1700.0 1.0 0.0 +it 01_solar 1 246 2000.0 0.0 1.0 +it 02_wind_on 1 246 2000.0 0.0 1.0 +it 03_wind_off 1 246 2000.0 0.0 1.0 +it 04_res 1 246 1700.0 0.0 1.0 it 05_nuclear 1 246 0.0 0.0 0.0 it 06_coal 1 246 0.0 0.0 0.0 it 07_gas 1 246 0.0 0.0 0.0 it 08_non-res 1 246 0.0 0.0 0.0 it 09_hydro_pump 1 246 0.0 0.0 0.0 -it 01_solar 1 247 2000.0 1.0 0.0 -it 02_wind_on 1 247 2000.0 1.0 0.0 -it 03_wind_off 1 247 2000.0 1.0 0.0 -it 04_res 1 247 1800.0 1.0 0.0 +it 01_solar 1 247 2000.0 0.0 1.0 +it 02_wind_on 1 247 2000.0 0.0 1.0 +it 03_wind_off 1 247 2000.0 0.0 1.0 +it 04_res 1 247 1800.0 0.0 1.0 it 05_nuclear 1 247 0.0 0.0 0.0 it 06_coal 1 247 0.0 0.0 0.0 it 07_gas 1 247 0.0 0.0 0.0 it 08_non-res 1 247 0.0 0.0 0.0 it 09_hydro_pump 1 247 0.0 0.0 0.0 -it 01_solar 1 248 2000.0 1.0 0.0 -it 02_wind_on 1 248 2000.0 1.0 0.0 -it 03_wind_off 1 248 2000.0 1.0 0.0 -it 04_res 1 248 1900.0 1.0 0.0 +it 01_solar 1 248 2000.0 0.0 1.0 +it 02_wind_on 1 248 2000.0 0.0 1.0 +it 03_wind_off 1 248 2000.0 0.0 1.0 +it 04_res 1 248 1900.0 0.0 1.0 it 05_nuclear 1 248 0.0 0.0 0.0 it 06_coal 1 248 0.0 0.0 0.0 it 07_gas 1 248 0.0 0.0 0.0 it 08_non-res 1 248 0.0 0.0 0.0 it 09_hydro_pump 1 248 0.0 0.0 0.0 -it 01_solar 1 249 2000.0 1.0 0.0 -it 02_wind_on 1 249 2000.0 1.0 0.0 -it 03_wind_off 1 249 2000.0 1.0 0.0 -it 04_res 1 249 2000.0 1.0 0.0 +it 01_solar 1 249 2000.0 0.0 1.0 +it 02_wind_on 1 249 2000.0 0.0 1.0 +it 03_wind_off 1 249 2000.0 0.0 1.0 +it 04_res 1 249 2000.0 0.0 1.0 it 05_nuclear 1 249 0.0 0.0 0.0 it 06_coal 1 249 0.0 0.0 0.0 it 07_gas 1 249 0.0 0.0 0.0 it 08_non-res 1 249 0.0 0.0 0.0 it 09_hydro_pump 1 249 0.0 0.0 0.0 -it 01_solar 1 250 2000.0 1.0 0.0 -it 02_wind_on 1 250 2000.0 1.0 0.0 -it 03_wind_off 1 250 2000.0 1.0 0.0 -it 04_res 1 250 2000.0 1.0 0.0 -it 05_nuclear 1 250 100.0 1.0 0.0 +it 01_solar 1 250 2000.0 0.0 1.0 +it 02_wind_on 1 250 2000.0 0.0 1.0 +it 03_wind_off 1 250 2000.0 0.0 1.0 +it 04_res 1 250 2000.0 0.0 1.0 +it 05_nuclear 1 250 100.0 0.0 1.0 it 06_coal 1 250 0.0 0.0 0.0 it 07_gas 1 250 0.0 0.0 0.0 it 08_non-res 1 250 0.0 0.0 0.0 it 09_hydro_pump 1 250 0.0 0.0 0.0 -it 01_solar 1 251 2000.0 1.0 0.0 -it 02_wind_on 1 251 2000.0 1.0 0.0 -it 03_wind_off 1 251 2000.0 1.0 0.0 -it 04_res 1 251 2000.0 1.0 0.0 -it 05_nuclear 1 251 200.0 1.0 0.0 +it 01_solar 1 251 2000.0 0.0 1.0 +it 02_wind_on 1 251 2000.0 0.0 1.0 +it 03_wind_off 1 251 2000.0 0.0 1.0 +it 04_res 1 251 2000.0 0.0 1.0 +it 05_nuclear 1 251 200.0 0.0 1.0 it 06_coal 1 251 0.0 0.0 0.0 it 07_gas 1 251 0.0 0.0 0.0 it 08_non-res 1 251 0.0 0.0 0.0 it 09_hydro_pump 1 251 0.0 0.0 0.0 -it 01_solar 1 252 2000.0 1.0 0.0 -it 02_wind_on 1 252 2000.0 1.0 0.0 -it 03_wind_off 1 252 2000.0 1.0 0.0 -it 04_res 1 252 2000.0 1.0 0.0 -it 05_nuclear 1 252 300.0 1.0 0.0 +it 01_solar 1 252 2000.0 0.0 1.0 +it 02_wind_on 1 252 2000.0 0.0 1.0 +it 03_wind_off 1 252 2000.0 0.0 1.0 +it 04_res 1 252 2000.0 0.0 1.0 +it 05_nuclear 1 252 300.0 0.0 1.0 it 06_coal 1 252 0.0 0.0 0.0 it 07_gas 1 252 0.0 0.0 0.0 it 08_non-res 1 252 0.0 0.0 0.0 it 09_hydro_pump 1 252 0.0 0.0 0.0 -it 01_solar 1 253 2000.0 1.0 0.0 -it 02_wind_on 1 253 2000.0 1.0 0.0 -it 03_wind_off 1 253 2000.0 1.0 0.0 -it 04_res 1 253 2000.0 1.0 0.0 -it 05_nuclear 1 253 400.0 1.0 0.0 +it 01_solar 1 253 2000.0 0.0 1.0 +it 02_wind_on 1 253 2000.0 0.0 1.0 +it 03_wind_off 1 253 2000.0 0.0 1.0 +it 04_res 1 253 2000.0 0.0 1.0 +it 05_nuclear 1 253 400.0 0.0 1.0 it 06_coal 1 253 0.0 0.0 0.0 it 07_gas 1 253 0.0 0.0 0.0 it 08_non-res 1 253 0.0 0.0 0.0 it 09_hydro_pump 1 253 0.0 0.0 0.0 -it 01_solar 1 254 2000.0 1.0 0.0 -it 02_wind_on 1 254 2000.0 1.0 0.0 -it 03_wind_off 1 254 2000.0 1.0 0.0 -it 04_res 1 254 2000.0 1.0 0.0 -it 05_nuclear 1 254 500.0 1.0 0.0 +it 01_solar 1 254 2000.0 0.0 1.0 +it 02_wind_on 1 254 2000.0 0.0 1.0 +it 03_wind_off 1 254 2000.0 0.0 1.0 +it 04_res 1 254 2000.0 0.0 1.0 +it 05_nuclear 1 254 500.0 0.0 1.0 it 06_coal 1 254 0.0 0.0 0.0 it 07_gas 1 254 0.0 0.0 0.0 it 08_non-res 1 254 0.0 0.0 0.0 it 09_hydro_pump 1 254 0.0 0.0 0.0 -it 01_solar 1 255 2000.0 1.0 0.0 -it 02_wind_on 1 255 2000.0 1.0 0.0 -it 03_wind_off 1 255 2000.0 1.0 0.0 -it 04_res 1 255 2000.0 1.0 0.0 -it 05_nuclear 1 255 600.0 1.0 0.0 +it 01_solar 1 255 2000.0 0.0 1.0 +it 02_wind_on 1 255 2000.0 0.0 1.0 +it 03_wind_off 1 255 2000.0 0.0 1.0 +it 04_res 1 255 2000.0 0.0 1.0 +it 05_nuclear 1 255 600.0 0.0 1.0 it 06_coal 1 255 0.0 0.0 0.0 it 07_gas 1 255 0.0 0.0 0.0 it 08_non-res 1 255 0.0 0.0 0.0 it 09_hydro_pump 1 255 0.0 0.0 0.0 -it 01_solar 1 256 2000.0 1.0 0.0 -it 02_wind_on 1 256 2000.0 1.0 0.0 -it 03_wind_off 1 256 2000.0 1.0 0.0 -it 04_res 1 256 2000.0 1.0 0.0 -it 05_nuclear 1 256 700.0 1.0 0.0 +it 01_solar 1 256 2000.0 0.0 1.0 +it 02_wind_on 1 256 2000.0 0.0 1.0 +it 03_wind_off 1 256 2000.0 0.0 1.0 +it 04_res 1 256 2000.0 0.0 1.0 +it 05_nuclear 1 256 700.0 0.0 1.0 it 06_coal 1 256 0.0 0.0 0.0 it 07_gas 1 256 0.0 0.0 0.0 it 08_non-res 1 256 0.0 0.0 0.0 it 09_hydro_pump 1 256 0.0 0.0 0.0 -it 01_solar 1 257 2000.0 1.0 0.0 -it 02_wind_on 1 257 2000.0 1.0 0.0 -it 03_wind_off 1 257 2000.0 1.0 0.0 -it 04_res 1 257 2000.0 1.0 0.0 -it 05_nuclear 1 257 800.0 1.0 0.0 +it 01_solar 1 257 2000.0 0.0 1.0 +it 02_wind_on 1 257 2000.0 0.0 1.0 +it 03_wind_off 1 257 2000.0 0.0 1.0 +it 04_res 1 257 2000.0 0.0 1.0 +it 05_nuclear 1 257 800.0 0.0 1.0 it 06_coal 1 257 0.0 0.0 0.0 it 07_gas 1 257 0.0 0.0 0.0 it 08_non-res 1 257 0.0 0.0 0.0 it 09_hydro_pump 1 257 0.0 0.0 0.0 -it 01_solar 1 258 2000.0 1.0 0.0 -it 02_wind_on 1 258 2000.0 1.0 0.0 -it 03_wind_off 1 258 2000.0 1.0 0.0 -it 04_res 1 258 2000.0 1.0 0.0 -it 05_nuclear 1 258 900.0 1.0 0.0 +it 01_solar 1 258 2000.0 0.0 1.0 +it 02_wind_on 1 258 2000.0 0.0 1.0 +it 03_wind_off 1 258 2000.0 0.0 1.0 +it 04_res 1 258 2000.0 0.0 1.0 +it 05_nuclear 1 258 900.0 0.0 1.0 it 06_coal 1 258 0.0 0.0 0.0 it 07_gas 1 258 0.0 0.0 0.0 it 08_non-res 1 258 0.0 0.0 0.0 it 09_hydro_pump 1 258 0.0 0.0 0.0 -it 01_solar 1 259 2000.0 1.0 0.0 -it 02_wind_on 1 259 2000.0 1.0 0.0 -it 03_wind_off 1 259 2000.0 1.0 0.0 -it 04_res 1 259 2000.0 1.0 0.0 -it 05_nuclear 1 259 1000.0 1.0 0.0 +it 01_solar 1 259 2000.0 0.0 1.0 +it 02_wind_on 1 259 2000.0 0.0 1.0 +it 03_wind_off 1 259 2000.0 0.0 1.0 +it 04_res 1 259 2000.0 0.0 1.0 +it 05_nuclear 1 259 1000.0 0.0 1.0 it 06_coal 1 259 0.0 0.0 0.0 it 07_gas 1 259 0.0 0.0 0.0 it 08_non-res 1 259 0.0 0.0 0.0 it 09_hydro_pump 1 259 0.0 0.0 0.0 -it 01_solar 1 260 2000.0 1.0 0.0 -it 02_wind_on 1 260 2000.0 1.0 0.0 -it 03_wind_off 1 260 2000.0 1.0 0.0 -it 04_res 1 260 2000.0 1.0 0.0 -it 05_nuclear 1 260 1100.0 1.0 0.0 +it 01_solar 1 260 2000.0 0.0 1.0 +it 02_wind_on 1 260 2000.0 0.0 1.0 +it 03_wind_off 1 260 2000.0 0.0 1.0 +it 04_res 1 260 2000.0 0.0 1.0 +it 05_nuclear 1 260 1100.0 0.0 1.0 it 06_coal 1 260 0.0 0.0 0.0 it 07_gas 1 260 0.0 0.0 0.0 it 08_non-res 1 260 0.0 0.0 0.0 it 09_hydro_pump 1 260 0.0 0.0 0.0 -it 01_solar 1 261 2000.0 1.0 0.0 -it 02_wind_on 1 261 2000.0 1.0 0.0 -it 03_wind_off 1 261 2000.0 1.0 0.0 -it 04_res 1 261 2000.0 1.0 0.0 -it 05_nuclear 1 261 1200.0 1.0 0.0 +it 01_solar 1 261 2000.0 0.0 1.0 +it 02_wind_on 1 261 2000.0 0.0 1.0 +it 03_wind_off 1 261 2000.0 0.0 1.0 +it 04_res 1 261 2000.0 0.0 1.0 +it 05_nuclear 1 261 1200.0 0.0 1.0 it 06_coal 1 261 0.0 0.0 0.0 it 07_gas 1 261 0.0 0.0 0.0 it 08_non-res 1 261 0.0 0.0 0.0 it 09_hydro_pump 1 261 0.0 0.0 0.0 -it 01_solar 1 262 2000.0 1.0 0.0 -it 02_wind_on 1 262 2000.0 1.0 0.0 -it 03_wind_off 1 262 2000.0 1.0 0.0 -it 04_res 1 262 2000.0 1.0 0.0 -it 05_nuclear 1 262 1300.0 1.0 0.0 +it 01_solar 1 262 2000.0 0.0 1.0 +it 02_wind_on 1 262 2000.0 0.0 1.0 +it 03_wind_off 1 262 2000.0 0.0 1.0 +it 04_res 1 262 2000.0 0.0 1.0 +it 05_nuclear 1 262 1300.0 0.0 1.0 it 06_coal 1 262 0.0 0.0 0.0 it 07_gas 1 262 0.0 0.0 0.0 it 08_non-res 1 262 0.0 0.0 0.0 it 09_hydro_pump 1 262 0.0 0.0 0.0 -it 01_solar 1 263 2000.0 1.0 0.0 -it 02_wind_on 1 263 2000.0 1.0 0.0 -it 03_wind_off 1 263 2000.0 1.0 0.0 -it 04_res 1 263 2000.0 1.0 0.0 -it 05_nuclear 1 263 1400.0 1.0 0.0 +it 01_solar 1 263 2000.0 0.0 1.0 +it 02_wind_on 1 263 2000.0 0.0 1.0 +it 03_wind_off 1 263 2000.0 0.0 1.0 +it 04_res 1 263 2000.0 0.0 1.0 +it 05_nuclear 1 263 1400.0 0.0 1.0 it 06_coal 1 263 0.0 0.0 0.0 it 07_gas 1 263 0.0 0.0 0.0 it 08_non-res 1 263 0.0 0.0 0.0 it 09_hydro_pump 1 263 0.0 0.0 0.0 -it 01_solar 1 264 2000.0 1.0 0.0 -it 02_wind_on 1 264 2000.0 1.0 0.0 -it 03_wind_off 1 264 2000.0 1.0 0.0 -it 04_res 1 264 2000.0 1.0 0.0 -it 05_nuclear 1 264 1500.0 1.0 0.0 +it 01_solar 1 264 2000.0 0.0 1.0 +it 02_wind_on 1 264 2000.0 0.0 1.0 +it 03_wind_off 1 264 2000.0 0.0 1.0 +it 04_res 1 264 2000.0 0.0 1.0 +it 05_nuclear 1 264 1500.0 0.0 1.0 it 06_coal 1 264 0.0 0.0 0.0 it 07_gas 1 264 0.0 0.0 0.0 it 08_non-res 1 264 0.0 0.0 0.0 it 09_hydro_pump 1 264 0.0 0.0 0.0 -it 01_solar 1 265 2000.0 1.0 0.0 -it 02_wind_on 1 265 2000.0 1.0 0.0 -it 03_wind_off 1 265 2000.0 1.0 0.0 -it 04_res 1 265 2000.0 1.0 0.0 -it 05_nuclear 1 265 1600.0 1.0 0.0 +it 01_solar 1 265 2000.0 0.0 1.0 +it 02_wind_on 1 265 2000.0 0.0 1.0 +it 03_wind_off 1 265 2000.0 0.0 1.0 +it 04_res 1 265 2000.0 0.0 1.0 +it 05_nuclear 1 265 1600.0 0.0 1.0 it 06_coal 1 265 0.0 0.0 0.0 it 07_gas 1 265 0.0 0.0 0.0 it 08_non-res 1 265 0.0 0.0 0.0 it 09_hydro_pump 1 265 0.0 0.0 0.0 -it 01_solar 1 266 2000.0 1.0 0.0 -it 02_wind_on 1 266 2000.0 1.0 0.0 -it 03_wind_off 1 266 2000.0 1.0 0.0 -it 04_res 1 266 2000.0 1.0 0.0 -it 05_nuclear 1 266 1700.0 1.0 0.0 +it 01_solar 1 266 2000.0 0.0 1.0 +it 02_wind_on 1 266 2000.0 0.0 1.0 +it 03_wind_off 1 266 2000.0 0.0 1.0 +it 04_res 1 266 2000.0 0.0 1.0 +it 05_nuclear 1 266 1700.0 0.0 1.0 it 06_coal 1 266 0.0 0.0 0.0 it 07_gas 1 266 0.0 0.0 0.0 it 08_non-res 1 266 0.0 0.0 0.0 it 09_hydro_pump 1 266 0.0 0.0 0.0 -it 01_solar 1 267 2000.0 1.0 0.0 -it 02_wind_on 1 267 2000.0 1.0 0.0 -it 03_wind_off 1 267 2000.0 1.0 0.0 -it 04_res 1 267 2000.0 1.0 0.0 -it 05_nuclear 1 267 1800.0 1.0 0.0 +it 01_solar 1 267 2000.0 0.0 1.0 +it 02_wind_on 1 267 2000.0 0.0 1.0 +it 03_wind_off 1 267 2000.0 0.0 1.0 +it 04_res 1 267 2000.0 0.0 1.0 +it 05_nuclear 1 267 1800.0 0.0 1.0 it 06_coal 1 267 0.0 0.0 0.0 it 07_gas 1 267 0.0 0.0 0.0 it 08_non-res 1 267 0.0 0.0 0.0 it 09_hydro_pump 1 267 0.0 0.0 0.0 -it 01_solar 1 268 2000.0 1.0 0.0 -it 02_wind_on 1 268 2000.0 1.0 0.0 -it 03_wind_off 1 268 2000.0 1.0 0.0 -it 04_res 1 268 2000.0 1.0 0.0 -it 05_nuclear 1 268 1900.0 1.0 0.0 +it 01_solar 1 268 2000.0 0.0 1.0 +it 02_wind_on 1 268 2000.0 0.0 1.0 +it 03_wind_off 1 268 2000.0 0.0 1.0 +it 04_res 1 268 2000.0 0.0 1.0 +it 05_nuclear 1 268 1900.0 0.0 1.0 it 06_coal 1 268 0.0 0.0 0.0 it 07_gas 1 268 0.0 0.0 0.0 it 08_non-res 1 268 0.0 0.0 0.0 it 09_hydro_pump 1 268 0.0 0.0 0.0 -it 01_solar 1 269 2000.0 1.0 0.0 -it 02_wind_on 1 269 2000.0 1.0 0.0 -it 03_wind_off 1 269 2000.0 1.0 0.0 -it 04_res 1 269 2000.0 1.0 0.0 -it 05_nuclear 1 269 2000.0 1.0 0.0 +it 01_solar 1 269 2000.0 0.0 1.0 +it 02_wind_on 1 269 2000.0 0.0 1.0 +it 03_wind_off 1 269 2000.0 0.0 1.0 +it 04_res 1 269 2000.0 0.0 1.0 +it 05_nuclear 1 269 2000.0 0.0 1.0 it 06_coal 1 269 0.0 0.0 0.0 it 07_gas 1 269 0.0 0.0 0.0 it 08_non-res 1 269 0.0 0.0 0.0 it 09_hydro_pump 1 269 0.0 0.0 0.0 -it 01_solar 1 270 2000.0 1.0 0.0 -it 02_wind_on 1 270 2000.0 1.0 0.0 -it 03_wind_off 1 270 2000.0 1.0 0.0 -it 04_res 1 270 2000.0 1.0 0.0 -it 05_nuclear 1 270 2000.0 1.0 0.0 -it 06_coal 1 270 100.0 1.0 0.0 +it 01_solar 1 270 2000.0 0.0 1.0 +it 02_wind_on 1 270 2000.0 0.0 1.0 +it 03_wind_off 1 270 2000.0 0.0 1.0 +it 04_res 1 270 2000.0 0.0 1.0 +it 05_nuclear 1 270 2000.0 0.0 1.0 +it 06_coal 1 270 100.0 0.0 1.0 it 07_gas 1 270 0.0 0.0 0.0 it 08_non-res 1 270 0.0 0.0 0.0 it 09_hydro_pump 1 270 0.0 0.0 0.0 -it 01_solar 1 271 2000.0 1.0 0.0 -it 02_wind_on 1 271 2000.0 1.0 0.0 -it 03_wind_off 1 271 2000.0 1.0 0.0 -it 04_res 1 271 2000.0 1.0 0.0 -it 05_nuclear 1 271 2000.0 1.0 0.0 -it 06_coal 1 271 200.0 1.0 0.0 +it 01_solar 1 271 2000.0 0.0 1.0 +it 02_wind_on 1 271 2000.0 0.0 1.0 +it 03_wind_off 1 271 2000.0 0.0 1.0 +it 04_res 1 271 2000.0 0.0 1.0 +it 05_nuclear 1 271 2000.0 0.0 1.0 +it 06_coal 1 271 200.0 0.0 1.0 it 07_gas 1 271 0.0 0.0 0.0 it 08_non-res 1 271 0.0 0.0 0.0 it 09_hydro_pump 1 271 0.0 0.0 0.0 -it 01_solar 1 272 2000.0 1.0 0.0 -it 02_wind_on 1 272 2000.0 1.0 0.0 -it 03_wind_off 1 272 2000.0 1.0 0.0 -it 04_res 1 272 2000.0 1.0 0.0 -it 05_nuclear 1 272 2000.0 1.0 0.0 -it 06_coal 1 272 300.0 1.0 0.0 +it 01_solar 1 272 2000.0 0.0 1.0 +it 02_wind_on 1 272 2000.0 0.0 1.0 +it 03_wind_off 1 272 2000.0 0.0 1.0 +it 04_res 1 272 2000.0 0.0 1.0 +it 05_nuclear 1 272 2000.0 0.0 1.0 +it 06_coal 1 272 300.0 0.0 1.0 it 07_gas 1 272 0.0 0.0 0.0 it 08_non-res 1 272 0.0 0.0 0.0 it 09_hydro_pump 1 272 0.0 0.0 0.0 -it 01_solar 1 273 2000.0 1.0 0.0 -it 02_wind_on 1 273 2000.0 1.0 0.0 -it 03_wind_off 1 273 2000.0 1.0 0.0 -it 04_res 1 273 2000.0 1.0 0.0 -it 05_nuclear 1 273 2000.0 1.0 0.0 -it 06_coal 1 273 400.0 1.0 0.0 +it 01_solar 1 273 2000.0 0.0 1.0 +it 02_wind_on 1 273 2000.0 0.0 1.0 +it 03_wind_off 1 273 2000.0 0.0 1.0 +it 04_res 1 273 2000.0 0.0 1.0 +it 05_nuclear 1 273 2000.0 0.0 1.0 +it 06_coal 1 273 400.0 0.0 1.0 it 07_gas 1 273 0.0 0.0 0.0 it 08_non-res 1 273 0.0 0.0 0.0 it 09_hydro_pump 1 273 0.0 0.0 0.0 -it 01_solar 1 274 2000.0 1.0 0.0 -it 02_wind_on 1 274 2000.0 1.0 0.0 -it 03_wind_off 1 274 2000.0 1.0 0.0 -it 04_res 1 274 2000.0 1.0 0.0 -it 05_nuclear 1 274 2000.0 1.0 0.0 -it 06_coal 1 274 500.0 1.0 0.0 +it 01_solar 1 274 2000.0 0.0 1.0 +it 02_wind_on 1 274 2000.0 0.0 1.0 +it 03_wind_off 1 274 2000.0 0.0 1.0 +it 04_res 1 274 2000.0 0.0 1.0 +it 05_nuclear 1 274 2000.0 0.0 1.0 +it 06_coal 1 274 500.0 0.0 1.0 it 07_gas 1 274 0.0 0.0 0.0 it 08_non-res 1 274 0.0 0.0 0.0 it 09_hydro_pump 1 274 0.0 0.0 0.0 -it 01_solar 1 275 2000.0 1.0 0.0 -it 02_wind_on 1 275 2000.0 1.0 0.0 -it 03_wind_off 1 275 2000.0 1.0 0.0 -it 04_res 1 275 2000.0 1.0 0.0 -it 05_nuclear 1 275 2000.0 1.0 0.0 -it 06_coal 1 275 600.0 1.0 0.0 +it 01_solar 1 275 2000.0 0.0 1.0 +it 02_wind_on 1 275 2000.0 0.0 1.0 +it 03_wind_off 1 275 2000.0 0.0 1.0 +it 04_res 1 275 2000.0 0.0 1.0 +it 05_nuclear 1 275 2000.0 0.0 1.0 +it 06_coal 1 275 600.0 0.0 1.0 it 07_gas 1 275 0.0 0.0 0.0 it 08_non-res 1 275 0.0 0.0 0.0 it 09_hydro_pump 1 275 0.0 0.0 0.0 -it 01_solar 1 276 2000.0 1.0 0.0 -it 02_wind_on 1 276 2000.0 1.0 0.0 -it 03_wind_off 1 276 2000.0 1.0 0.0 -it 04_res 1 276 2000.0 1.0 0.0 -it 05_nuclear 1 276 2000.0 1.0 0.0 -it 06_coal 1 276 700.0 1.0 0.0 +it 01_solar 1 276 2000.0 0.0 1.0 +it 02_wind_on 1 276 2000.0 0.0 1.0 +it 03_wind_off 1 276 2000.0 0.0 1.0 +it 04_res 1 276 2000.0 0.0 1.0 +it 05_nuclear 1 276 2000.0 0.0 1.0 +it 06_coal 1 276 700.0 0.0 1.0 it 07_gas 1 276 0.0 0.0 0.0 it 08_non-res 1 276 0.0 0.0 0.0 it 09_hydro_pump 1 276 0.0 0.0 0.0 -it 01_solar 1 277 2000.0 1.0 0.0 -it 02_wind_on 1 277 2000.0 1.0 0.0 -it 03_wind_off 1 277 2000.0 1.0 0.0 -it 04_res 1 277 2000.0 1.0 0.0 -it 05_nuclear 1 277 2000.0 1.0 0.0 -it 06_coal 1 277 800.0 1.0 0.0 +it 01_solar 1 277 2000.0 0.0 1.0 +it 02_wind_on 1 277 2000.0 0.0 1.0 +it 03_wind_off 1 277 2000.0 0.0 1.0 +it 04_res 1 277 2000.0 0.0 1.0 +it 05_nuclear 1 277 2000.0 0.0 1.0 +it 06_coal 1 277 800.0 0.0 1.0 it 07_gas 1 277 0.0 0.0 0.0 it 08_non-res 1 277 0.0 0.0 0.0 it 09_hydro_pump 1 277 0.0 0.0 0.0 -it 01_solar 1 278 2000.0 1.0 0.0 -it 02_wind_on 1 278 2000.0 1.0 0.0 -it 03_wind_off 1 278 2000.0 1.0 0.0 -it 04_res 1 278 2000.0 1.0 0.0 -it 05_nuclear 1 278 2000.0 1.0 0.0 -it 06_coal 1 278 900.0 1.0 0.0 +it 01_solar 1 278 2000.0 0.0 1.0 +it 02_wind_on 1 278 2000.0 0.0 1.0 +it 03_wind_off 1 278 2000.0 0.0 1.0 +it 04_res 1 278 2000.0 0.0 1.0 +it 05_nuclear 1 278 2000.0 0.0 1.0 +it 06_coal 1 278 900.0 0.0 1.0 it 07_gas 1 278 0.0 0.0 0.0 it 08_non-res 1 278 0.0 0.0 0.0 it 09_hydro_pump 1 278 0.0 0.0 0.0 -it 01_solar 1 279 2000.0 1.0 0.0 -it 02_wind_on 1 279 2000.0 1.0 0.0 -it 03_wind_off 1 279 2000.0 1.0 0.0 -it 04_res 1 279 2000.0 1.0 0.0 -it 05_nuclear 1 279 2000.0 1.0 0.0 -it 06_coal 1 279 1000.0 1.0 0.0 +it 01_solar 1 279 2000.0 0.0 1.0 +it 02_wind_on 1 279 2000.0 0.0 1.0 +it 03_wind_off 1 279 2000.0 0.0 1.0 +it 04_res 1 279 2000.0 0.0 1.0 +it 05_nuclear 1 279 2000.0 0.0 1.0 +it 06_coal 1 279 1000.0 0.0 1.0 it 07_gas 1 279 0.0 0.0 0.0 it 08_non-res 1 279 0.0 0.0 0.0 it 09_hydro_pump 1 279 0.0 0.0 0.0 -it 01_solar 1 280 2000.0 1.0 0.0 -it 02_wind_on 1 280 2000.0 1.0 0.0 -it 03_wind_off 1 280 2000.0 1.0 0.0 -it 04_res 1 280 2000.0 1.0 0.0 -it 05_nuclear 1 280 2000.0 1.0 0.0 -it 06_coal 1 280 1100.0 1.0 0.0 +it 01_solar 1 280 2000.0 0.0 1.0 +it 02_wind_on 1 280 2000.0 0.0 1.0 +it 03_wind_off 1 280 2000.0 0.0 1.0 +it 04_res 1 280 2000.0 0.0 1.0 +it 05_nuclear 1 280 2000.0 0.0 1.0 +it 06_coal 1 280 1100.0 0.0 1.0 it 07_gas 1 280 0.0 0.0 0.0 it 08_non-res 1 280 0.0 0.0 0.0 it 09_hydro_pump 1 280 0.0 0.0 0.0 -it 01_solar 1 281 2000.0 1.0 0.0 -it 02_wind_on 1 281 2000.0 1.0 0.0 -it 03_wind_off 1 281 2000.0 1.0 0.0 -it 04_res 1 281 2000.0 1.0 0.0 -it 05_nuclear 1 281 2000.0 1.0 0.0 -it 06_coal 1 281 1200.0 1.0 0.0 +it 01_solar 1 281 2000.0 0.0 1.0 +it 02_wind_on 1 281 2000.0 0.0 1.0 +it 03_wind_off 1 281 2000.0 0.0 1.0 +it 04_res 1 281 2000.0 0.0 1.0 +it 05_nuclear 1 281 2000.0 0.0 1.0 +it 06_coal 1 281 1200.0 0.0 1.0 it 07_gas 1 281 0.0 0.0 0.0 it 08_non-res 1 281 0.0 0.0 0.0 it 09_hydro_pump 1 281 0.0 0.0 0.0 -it 01_solar 1 282 2000.0 1.0 0.0 -it 02_wind_on 1 282 2000.0 1.0 0.0 -it 03_wind_off 1 282 2000.0 1.0 0.0 -it 04_res 1 282 2000.0 1.0 0.0 -it 05_nuclear 1 282 2000.0 1.0 0.0 -it 06_coal 1 282 1300.0 1.0 0.0 +it 01_solar 1 282 2000.0 0.0 1.0 +it 02_wind_on 1 282 2000.0 0.0 1.0 +it 03_wind_off 1 282 2000.0 0.0 1.0 +it 04_res 1 282 2000.0 0.0 1.0 +it 05_nuclear 1 282 2000.0 0.0 1.0 +it 06_coal 1 282 1300.0 0.0 1.0 it 07_gas 1 282 0.0 0.0 0.0 it 08_non-res 1 282 0.0 0.0 0.0 it 09_hydro_pump 1 282 0.0 0.0 0.0 -it 01_solar 1 283 2000.0 1.0 0.0 -it 02_wind_on 1 283 2000.0 1.0 0.0 -it 03_wind_off 1 283 2000.0 1.0 0.0 -it 04_res 1 283 2000.0 1.0 0.0 -it 05_nuclear 1 283 2000.0 1.0 0.0 -it 06_coal 1 283 1400.0 1.0 0.0 +it 01_solar 1 283 2000.0 0.0 1.0 +it 02_wind_on 1 283 2000.0 0.0 1.0 +it 03_wind_off 1 283 2000.0 0.0 1.0 +it 04_res 1 283 2000.0 0.0 1.0 +it 05_nuclear 1 283 2000.0 0.0 1.0 +it 06_coal 1 283 1400.0 0.0 1.0 it 07_gas 1 283 0.0 0.0 0.0 it 08_non-res 1 283 0.0 0.0 0.0 it 09_hydro_pump 1 283 0.0 0.0 0.0 -it 01_solar 1 284 2000.0 1.0 0.0 -it 02_wind_on 1 284 2000.0 1.0 0.0 -it 03_wind_off 1 284 2000.0 1.0 0.0 -it 04_res 1 284 2000.0 1.0 0.0 -it 05_nuclear 1 284 2000.0 1.0 0.0 -it 06_coal 1 284 1500.0 1.0 0.0 +it 01_solar 1 284 2000.0 0.0 1.0 +it 02_wind_on 1 284 2000.0 0.0 1.0 +it 03_wind_off 1 284 2000.0 0.0 1.0 +it 04_res 1 284 2000.0 0.0 1.0 +it 05_nuclear 1 284 2000.0 0.0 1.0 +it 06_coal 1 284 1500.0 0.0 1.0 it 07_gas 1 284 0.0 0.0 0.0 it 08_non-res 1 284 0.0 0.0 0.0 it 09_hydro_pump 1 284 0.0 0.0 0.0 -it 01_solar 1 285 2000.0 1.0 0.0 -it 02_wind_on 1 285 2000.0 1.0 0.0 -it 03_wind_off 1 285 2000.0 1.0 0.0 -it 04_res 1 285 2000.0 1.0 0.0 -it 05_nuclear 1 285 2000.0 1.0 0.0 -it 06_coal 1 285 1600.0 1.0 0.0 +it 01_solar 1 285 2000.0 0.0 1.0 +it 02_wind_on 1 285 2000.0 0.0 1.0 +it 03_wind_off 1 285 2000.0 0.0 1.0 +it 04_res 1 285 2000.0 0.0 1.0 +it 05_nuclear 1 285 2000.0 0.0 1.0 +it 06_coal 1 285 1600.0 0.0 1.0 it 07_gas 1 285 0.0 0.0 0.0 it 08_non-res 1 285 0.0 0.0 0.0 it 09_hydro_pump 1 285 0.0 0.0 0.0 -it 01_solar 1 286 2000.0 1.0 0.0 -it 02_wind_on 1 286 2000.0 1.0 0.0 -it 03_wind_off 1 286 2000.0 1.0 0.0 -it 04_res 1 286 2000.0 1.0 0.0 -it 05_nuclear 1 286 2000.0 1.0 0.0 -it 06_coal 1 286 1700.0 1.0 0.0 +it 01_solar 1 286 2000.0 0.0 1.0 +it 02_wind_on 1 286 2000.0 0.0 1.0 +it 03_wind_off 1 286 2000.0 0.0 1.0 +it 04_res 1 286 2000.0 0.0 1.0 +it 05_nuclear 1 286 2000.0 0.0 1.0 +it 06_coal 1 286 1700.0 0.0 1.0 it 07_gas 1 286 0.0 0.0 0.0 it 08_non-res 1 286 0.0 0.0 0.0 it 09_hydro_pump 1 286 0.0 0.0 0.0 -it 01_solar 1 287 2000.0 1.0 0.0 -it 02_wind_on 1 287 2000.0 1.0 0.0 -it 03_wind_off 1 287 2000.0 1.0 0.0 -it 04_res 1 287 2000.0 1.0 0.0 -it 05_nuclear 1 287 2000.0 1.0 0.0 -it 06_coal 1 287 1800.0 1.0 0.0 +it 01_solar 1 287 2000.0 0.0 1.0 +it 02_wind_on 1 287 2000.0 0.0 1.0 +it 03_wind_off 1 287 2000.0 0.0 1.0 +it 04_res 1 287 2000.0 0.0 1.0 +it 05_nuclear 1 287 2000.0 0.0 1.0 +it 06_coal 1 287 1800.0 0.0 1.0 it 07_gas 1 287 0.0 0.0 0.0 it 08_non-res 1 287 0.0 0.0 0.0 it 09_hydro_pump 1 287 0.0 0.0 0.0 -it 01_solar 1 288 2000.0 1.0 0.0 -it 02_wind_on 1 288 2000.0 1.0 0.0 -it 03_wind_off 1 288 2000.0 1.0 0.0 -it 04_res 1 288 2000.0 1.0 0.0 -it 05_nuclear 1 288 2000.0 1.0 0.0 -it 06_coal 1 288 1900.0 1.0 0.0 +it 01_solar 1 288 2000.0 0.0 1.0 +it 02_wind_on 1 288 2000.0 0.0 1.0 +it 03_wind_off 1 288 2000.0 0.0 1.0 +it 04_res 1 288 2000.0 0.0 1.0 +it 05_nuclear 1 288 2000.0 0.0 1.0 +it 06_coal 1 288 1900.0 0.0 1.0 it 07_gas 1 288 0.0 0.0 0.0 it 08_non-res 1 288 0.0 0.0 0.0 it 09_hydro_pump 1 288 0.0 0.0 0.0 -it 01_solar 1 289 2000.0 1.0 0.0 -it 02_wind_on 1 289 2000.0 1.0 0.0 -it 03_wind_off 1 289 2000.0 1.0 0.0 -it 04_res 1 289 2000.0 1.0 0.0 -it 05_nuclear 1 289 2000.0 1.0 0.0 -it 06_coal 1 289 2000.0 1.0 0.0 +it 01_solar 1 289 2000.0 0.0 1.0 +it 02_wind_on 1 289 2000.0 0.0 1.0 +it 03_wind_off 1 289 2000.0 0.0 1.0 +it 04_res 1 289 2000.0 0.0 1.0 +it 05_nuclear 1 289 2000.0 0.0 1.0 +it 06_coal 1 289 2000.0 0.0 1.0 it 07_gas 1 289 0.0 0.0 0.0 it 08_non-res 1 289 0.0 0.0 0.0 it 09_hydro_pump 1 289 0.0 0.0 0.0 -it 01_solar 1 290 2000.0 1.0 0.0 -it 02_wind_on 1 290 2000.0 1.0 0.0 -it 03_wind_off 1 290 2000.0 1.0 0.0 -it 04_res 1 290 2000.0 1.0 0.0 -it 05_nuclear 1 290 2000.0 1.0 0.0 -it 06_coal 1 290 2000.0 1.0 0.0 -it 07_gas 1 290 100.0 1.0 0.0 +it 01_solar 1 290 2000.0 0.0 1.0 +it 02_wind_on 1 290 2000.0 0.0 1.0 +it 03_wind_off 1 290 2000.0 0.0 1.0 +it 04_res 1 290 2000.0 0.0 1.0 +it 05_nuclear 1 290 2000.0 0.0 1.0 +it 06_coal 1 290 2000.0 0.0 1.0 +it 07_gas 1 290 100.0 0.0 1.0 it 08_non-res 1 290 0.0 0.0 0.0 it 09_hydro_pump 1 290 0.0 0.0 0.0 -it 01_solar 1 291 2000.0 1.0 0.0 -it 02_wind_on 1 291 2000.0 1.0 0.0 -it 03_wind_off 1 291 2000.0 1.0 0.0 -it 04_res 1 291 2000.0 1.0 0.0 -it 05_nuclear 1 291 2000.0 1.0 0.0 -it 06_coal 1 291 2000.0 1.0 0.0 -it 07_gas 1 291 200.0 1.0 0.0 +it 01_solar 1 291 2000.0 0.0 1.0 +it 02_wind_on 1 291 2000.0 0.0 1.0 +it 03_wind_off 1 291 2000.0 0.0 1.0 +it 04_res 1 291 2000.0 0.0 1.0 +it 05_nuclear 1 291 2000.0 0.0 1.0 +it 06_coal 1 291 2000.0 0.0 1.0 +it 07_gas 1 291 200.0 0.0 1.0 it 08_non-res 1 291 0.0 0.0 0.0 it 09_hydro_pump 1 291 0.0 0.0 0.0 -it 01_solar 1 292 2000.0 1.0 0.0 -it 02_wind_on 1 292 2000.0 1.0 0.0 -it 03_wind_off 1 292 2000.0 1.0 0.0 -it 04_res 1 292 2000.0 1.0 0.0 -it 05_nuclear 1 292 2000.0 1.0 0.0 -it 06_coal 1 292 2000.0 1.0 0.0 -it 07_gas 1 292 300.0 1.0 0.0 +it 01_solar 1 292 2000.0 0.0 1.0 +it 02_wind_on 1 292 2000.0 0.0 1.0 +it 03_wind_off 1 292 2000.0 0.0 1.0 +it 04_res 1 292 2000.0 0.0 1.0 +it 05_nuclear 1 292 2000.0 0.0 1.0 +it 06_coal 1 292 2000.0 0.0 1.0 +it 07_gas 1 292 300.0 0.0 1.0 it 08_non-res 1 292 0.0 0.0 0.0 it 09_hydro_pump 1 292 0.0 0.0 0.0 -it 01_solar 1 293 2000.0 1.0 0.0 -it 02_wind_on 1 293 2000.0 1.0 0.0 -it 03_wind_off 1 293 2000.0 1.0 0.0 -it 04_res 1 293 2000.0 1.0 0.0 -it 05_nuclear 1 293 2000.0 1.0 0.0 -it 06_coal 1 293 2000.0 1.0 0.0 -it 07_gas 1 293 400.0 1.0 0.0 +it 01_solar 1 293 2000.0 0.0 1.0 +it 02_wind_on 1 293 2000.0 0.0 1.0 +it 03_wind_off 1 293 2000.0 0.0 1.0 +it 04_res 1 293 2000.0 0.0 1.0 +it 05_nuclear 1 293 2000.0 0.0 1.0 +it 06_coal 1 293 2000.0 0.0 1.0 +it 07_gas 1 293 400.0 0.0 1.0 it 08_non-res 1 293 0.0 0.0 0.0 it 09_hydro_pump 1 293 0.0 0.0 0.0 -it 01_solar 1 294 2000.0 1.0 0.0 -it 02_wind_on 1 294 2000.0 1.0 0.0 -it 03_wind_off 1 294 2000.0 1.0 0.0 -it 04_res 1 294 2000.0 1.0 0.0 -it 05_nuclear 1 294 2000.0 1.0 0.0 -it 06_coal 1 294 2000.0 1.0 0.0 -it 07_gas 1 294 500.0 1.0 0.0 +it 01_solar 1 294 2000.0 0.0 1.0 +it 02_wind_on 1 294 2000.0 0.0 1.0 +it 03_wind_off 1 294 2000.0 0.0 1.0 +it 04_res 1 294 2000.0 0.0 1.0 +it 05_nuclear 1 294 2000.0 0.0 1.0 +it 06_coal 1 294 2000.0 0.0 1.0 +it 07_gas 1 294 500.0 0.0 1.0 it 08_non-res 1 294 0.0 0.0 0.0 it 09_hydro_pump 1 294 0.0 0.0 0.0 -it 01_solar 1 295 2000.0 1.0 0.0 -it 02_wind_on 1 295 2000.0 1.0 0.0 -it 03_wind_off 1 295 2000.0 1.0 0.0 -it 04_res 1 295 2000.0 1.0 0.0 -it 05_nuclear 1 295 2000.0 1.0 0.0 -it 06_coal 1 295 2000.0 1.0 0.0 -it 07_gas 1 295 600.0 1.0 0.0 +it 01_solar 1 295 2000.0 0.0 1.0 +it 02_wind_on 1 295 2000.0 0.0 1.0 +it 03_wind_off 1 295 2000.0 0.0 1.0 +it 04_res 1 295 2000.0 0.0 1.0 +it 05_nuclear 1 295 2000.0 0.0 1.0 +it 06_coal 1 295 2000.0 0.0 1.0 +it 07_gas 1 295 600.0 0.0 1.0 it 08_non-res 1 295 0.0 0.0 0.0 it 09_hydro_pump 1 295 0.0 0.0 0.0 -it 01_solar 1 296 2000.0 1.0 0.0 -it 02_wind_on 1 296 2000.0 1.0 0.0 -it 03_wind_off 1 296 2000.0 1.0 0.0 -it 04_res 1 296 2000.0 1.0 0.0 -it 05_nuclear 1 296 2000.0 1.0 0.0 -it 06_coal 1 296 2000.0 1.0 0.0 -it 07_gas 1 296 700.0 1.0 0.0 +it 01_solar 1 296 2000.0 0.0 1.0 +it 02_wind_on 1 296 2000.0 0.0 1.0 +it 03_wind_off 1 296 2000.0 0.0 1.0 +it 04_res 1 296 2000.0 0.0 1.0 +it 05_nuclear 1 296 2000.0 0.0 1.0 +it 06_coal 1 296 2000.0 0.0 1.0 +it 07_gas 1 296 700.0 0.0 1.0 it 08_non-res 1 296 0.0 0.0 0.0 it 09_hydro_pump 1 296 0.0 0.0 0.0 -it 01_solar 1 297 2000.0 1.0 0.0 -it 02_wind_on 1 297 2000.0 1.0 0.0 -it 03_wind_off 1 297 2000.0 1.0 0.0 -it 04_res 1 297 2000.0 1.0 0.0 -it 05_nuclear 1 297 2000.0 1.0 0.0 -it 06_coal 1 297 2000.0 1.0 0.0 -it 07_gas 1 297 800.0 1.0 0.0 +it 01_solar 1 297 2000.0 0.0 1.0 +it 02_wind_on 1 297 2000.0 0.0 1.0 +it 03_wind_off 1 297 2000.0 0.0 1.0 +it 04_res 1 297 2000.0 0.0 1.0 +it 05_nuclear 1 297 2000.0 0.0 1.0 +it 06_coal 1 297 2000.0 0.0 1.0 +it 07_gas 1 297 800.0 0.0 1.0 it 08_non-res 1 297 0.0 0.0 0.0 it 09_hydro_pump 1 297 0.0 0.0 0.0 -it 01_solar 1 298 2000.0 1.0 0.0 -it 02_wind_on 1 298 2000.0 1.0 0.0 -it 03_wind_off 1 298 2000.0 1.0 0.0 -it 04_res 1 298 2000.0 1.0 0.0 -it 05_nuclear 1 298 2000.0 1.0 0.0 -it 06_coal 1 298 2000.0 1.0 0.0 -it 07_gas 1 298 900.0 1.0 0.0 +it 01_solar 1 298 2000.0 0.0 1.0 +it 02_wind_on 1 298 2000.0 0.0 1.0 +it 03_wind_off 1 298 2000.0 0.0 1.0 +it 04_res 1 298 2000.0 0.0 1.0 +it 05_nuclear 1 298 2000.0 0.0 1.0 +it 06_coal 1 298 2000.0 0.0 1.0 +it 07_gas 1 298 900.0 0.0 1.0 it 08_non-res 1 298 0.0 0.0 0.0 it 09_hydro_pump 1 298 0.0 0.0 0.0 -it 01_solar 1 299 2000.0 1.0 0.0 -it 02_wind_on 1 299 2000.0 1.0 0.0 -it 03_wind_off 1 299 2000.0 1.0 0.0 -it 04_res 1 299 2000.0 1.0 0.0 -it 05_nuclear 1 299 2000.0 1.0 0.0 -it 06_coal 1 299 2000.0 1.0 0.0 -it 07_gas 1 299 1000.0 1.0 0.0 +it 01_solar 1 299 2000.0 0.0 1.0 +it 02_wind_on 1 299 2000.0 0.0 1.0 +it 03_wind_off 1 299 2000.0 0.0 1.0 +it 04_res 1 299 2000.0 0.0 1.0 +it 05_nuclear 1 299 2000.0 0.0 1.0 +it 06_coal 1 299 2000.0 0.0 1.0 +it 07_gas 1 299 1000.0 0.0 1.0 it 08_non-res 1 299 0.0 0.0 0.0 it 09_hydro_pump 1 299 0.0 0.0 0.0 -it 01_solar 1 300 2000.0 1.0 0.0 -it 02_wind_on 1 300 2000.0 1.0 0.0 -it 03_wind_off 1 300 2000.0 1.0 0.0 -it 04_res 1 300 2000.0 1.0 0.0 -it 05_nuclear 1 300 2000.0 1.0 0.0 -it 06_coal 1 300 2000.0 1.0 0.0 -it 07_gas 1 300 1100.0 1.0 0.0 +it 01_solar 1 300 2000.0 0.0 1.0 +it 02_wind_on 1 300 2000.0 0.0 1.0 +it 03_wind_off 1 300 2000.0 0.0 1.0 +it 04_res 1 300 2000.0 0.0 1.0 +it 05_nuclear 1 300 2000.0 0.0 1.0 +it 06_coal 1 300 2000.0 0.0 1.0 +it 07_gas 1 300 1100.0 0.0 1.0 it 08_non-res 1 300 0.0 0.0 0.0 it 09_hydro_pump 1 300 0.0 0.0 0.0 -it 01_solar 1 301 2000.0 1.0 0.0 -it 02_wind_on 1 301 2000.0 1.0 0.0 -it 03_wind_off 1 301 2000.0 1.0 0.0 -it 04_res 1 301 2000.0 1.0 0.0 -it 05_nuclear 1 301 2000.0 1.0 0.0 -it 06_coal 1 301 2000.0 1.0 0.0 -it 07_gas 1 301 1200.0 1.0 0.0 +it 01_solar 1 301 2000.0 0.0 1.0 +it 02_wind_on 1 301 2000.0 0.0 1.0 +it 03_wind_off 1 301 2000.0 0.0 1.0 +it 04_res 1 301 2000.0 0.0 1.0 +it 05_nuclear 1 301 2000.0 0.0 1.0 +it 06_coal 1 301 2000.0 0.0 1.0 +it 07_gas 1 301 1200.0 0.0 1.0 it 08_non-res 1 301 0.0 0.0 0.0 it 09_hydro_pump 1 301 0.0 0.0 0.0 -it 01_solar 1 302 2000.0 1.0 0.0 -it 02_wind_on 1 302 2000.0 1.0 0.0 -it 03_wind_off 1 302 2000.0 1.0 0.0 -it 04_res 1 302 2000.0 1.0 0.0 -it 05_nuclear 1 302 2000.0 1.0 0.0 -it 06_coal 1 302 2000.0 1.0 0.0 -it 07_gas 1 302 1300.0 1.0 0.0 +it 01_solar 1 302 2000.0 0.0 1.0 +it 02_wind_on 1 302 2000.0 0.0 1.0 +it 03_wind_off 1 302 2000.0 0.0 1.0 +it 04_res 1 302 2000.0 0.0 1.0 +it 05_nuclear 1 302 2000.0 0.0 1.0 +it 06_coal 1 302 2000.0 0.0 1.0 +it 07_gas 1 302 1300.0 0.0 1.0 it 08_non-res 1 302 0.0 0.0 0.0 it 09_hydro_pump 1 302 0.0 0.0 0.0 -it 01_solar 1 303 2000.0 1.0 0.0 -it 02_wind_on 1 303 2000.0 1.0 0.0 -it 03_wind_off 1 303 2000.0 1.0 0.0 -it 04_res 1 303 2000.0 1.0 0.0 -it 05_nuclear 1 303 2000.0 1.0 0.0 -it 06_coal 1 303 2000.0 1.0 0.0 -it 07_gas 1 303 1400.0 1.0 0.0 +it 01_solar 1 303 2000.0 0.0 1.0 +it 02_wind_on 1 303 2000.0 0.0 1.0 +it 03_wind_off 1 303 2000.0 0.0 1.0 +it 04_res 1 303 2000.0 0.0 1.0 +it 05_nuclear 1 303 2000.0 0.0 1.0 +it 06_coal 1 303 2000.0 0.0 1.0 +it 07_gas 1 303 1400.0 0.0 1.0 it 08_non-res 1 303 0.0 0.0 0.0 it 09_hydro_pump 1 303 0.0 0.0 0.0 -it 01_solar 1 304 2000.0 1.0 0.0 -it 02_wind_on 1 304 2000.0 1.0 0.0 -it 03_wind_off 1 304 2000.0 1.0 0.0 -it 04_res 1 304 2000.0 1.0 0.0 -it 05_nuclear 1 304 2000.0 1.0 0.0 -it 06_coal 1 304 2000.0 1.0 0.0 -it 07_gas 1 304 1500.0 1.0 0.0 +it 01_solar 1 304 2000.0 0.0 1.0 +it 02_wind_on 1 304 2000.0 0.0 1.0 +it 03_wind_off 1 304 2000.0 0.0 1.0 +it 04_res 1 304 2000.0 0.0 1.0 +it 05_nuclear 1 304 2000.0 0.0 1.0 +it 06_coal 1 304 2000.0 0.0 1.0 +it 07_gas 1 304 1500.0 0.0 1.0 it 08_non-res 1 304 0.0 0.0 0.0 it 09_hydro_pump 1 304 0.0 0.0 0.0 -it 01_solar 1 305 2000.0 1.0 0.0 -it 02_wind_on 1 305 2000.0 1.0 0.0 -it 03_wind_off 1 305 2000.0 1.0 0.0 -it 04_res 1 305 2000.0 1.0 0.0 -it 05_nuclear 1 305 2000.0 1.0 0.0 -it 06_coal 1 305 2000.0 1.0 0.0 -it 07_gas 1 305 1600.0 1.0 0.0 +it 01_solar 1 305 2000.0 0.0 1.0 +it 02_wind_on 1 305 2000.0 0.0 1.0 +it 03_wind_off 1 305 2000.0 0.0 1.0 +it 04_res 1 305 2000.0 0.0 1.0 +it 05_nuclear 1 305 2000.0 0.0 1.0 +it 06_coal 1 305 2000.0 0.0 1.0 +it 07_gas 1 305 1600.0 0.0 1.0 it 08_non-res 1 305 0.0 0.0 0.0 it 09_hydro_pump 1 305 0.0 0.0 0.0 -it 01_solar 1 306 2000.0 1.0 0.0 -it 02_wind_on 1 306 2000.0 1.0 0.0 -it 03_wind_off 1 306 2000.0 1.0 0.0 -it 04_res 1 306 2000.0 1.0 0.0 -it 05_nuclear 1 306 2000.0 1.0 0.0 -it 06_coal 1 306 2000.0 1.0 0.0 -it 07_gas 1 306 1700.0 1.0 0.0 +it 01_solar 1 306 2000.0 0.0 1.0 +it 02_wind_on 1 306 2000.0 0.0 1.0 +it 03_wind_off 1 306 2000.0 0.0 1.0 +it 04_res 1 306 2000.0 0.0 1.0 +it 05_nuclear 1 306 2000.0 0.0 1.0 +it 06_coal 1 306 2000.0 0.0 1.0 +it 07_gas 1 306 1700.0 0.0 1.0 it 08_non-res 1 306 0.0 0.0 0.0 it 09_hydro_pump 1 306 0.0 0.0 0.0 -it 01_solar 1 307 2000.0 1.0 0.0 -it 02_wind_on 1 307 2000.0 1.0 0.0 -it 03_wind_off 1 307 2000.0 1.0 0.0 -it 04_res 1 307 2000.0 1.0 0.0 -it 05_nuclear 1 307 2000.0 1.0 0.0 -it 06_coal 1 307 2000.0 1.0 0.0 -it 07_gas 1 307 1800.0 1.0 0.0 +it 01_solar 1 307 2000.0 0.0 1.0 +it 02_wind_on 1 307 2000.0 0.0 1.0 +it 03_wind_off 1 307 2000.0 0.0 1.0 +it 04_res 1 307 2000.0 0.0 1.0 +it 05_nuclear 1 307 2000.0 0.0 1.0 +it 06_coal 1 307 2000.0 0.0 1.0 +it 07_gas 1 307 1800.0 0.0 1.0 it 08_non-res 1 307 0.0 0.0 0.0 it 09_hydro_pump 1 307 0.0 0.0 0.0 -it 01_solar 1 308 2000.0 1.0 0.0 -it 02_wind_on 1 308 2000.0 1.0 0.0 -it 03_wind_off 1 308 2000.0 1.0 0.0 -it 04_res 1 308 2000.0 1.0 0.0 -it 05_nuclear 1 308 2000.0 1.0 0.0 -it 06_coal 1 308 2000.0 1.0 0.0 -it 07_gas 1 308 1900.0 1.0 0.0 +it 01_solar 1 308 2000.0 0.0 1.0 +it 02_wind_on 1 308 2000.0 0.0 1.0 +it 03_wind_off 1 308 2000.0 0.0 1.0 +it 04_res 1 308 2000.0 0.0 1.0 +it 05_nuclear 1 308 2000.0 0.0 1.0 +it 06_coal 1 308 2000.0 0.0 1.0 +it 07_gas 1 308 1900.0 0.0 1.0 it 08_non-res 1 308 0.0 0.0 0.0 it 09_hydro_pump 1 308 0.0 0.0 0.0 -it 01_solar 1 309 2000.0 1.0 0.0 -it 02_wind_on 1 309 2000.0 1.0 0.0 -it 03_wind_off 1 309 2000.0 1.0 0.0 -it 04_res 1 309 2000.0 1.0 0.0 -it 05_nuclear 1 309 2000.0 1.0 0.0 -it 06_coal 1 309 2000.0 1.0 0.0 -it 07_gas 1 309 2000.0 1.0 0.0 +it 01_solar 1 309 2000.0 0.0 1.0 +it 02_wind_on 1 309 2000.0 0.0 1.0 +it 03_wind_off 1 309 2000.0 0.0 1.0 +it 04_res 1 309 2000.0 0.0 1.0 +it 05_nuclear 1 309 2000.0 0.0 1.0 +it 06_coal 1 309 2000.0 0.0 1.0 +it 07_gas 1 309 2000.0 0.0 1.0 it 08_non-res 1 309 0.0 0.0 0.0 it 09_hydro_pump 1 309 0.0 0.0 0.0 -it 01_solar 1 310 2000.0 1.0 0.0 -it 02_wind_on 1 310 2000.0 1.0 0.0 -it 03_wind_off 1 310 2000.0 1.0 0.0 -it 04_res 1 310 2000.0 1.0 0.0 -it 05_nuclear 1 310 2000.0 1.0 0.0 -it 06_coal 1 310 2000.0 1.0 0.0 -it 07_gas 1 310 2000.0 1.0 0.0 -it 08_non-res 1 310 100.0 1.0 0.0 +it 01_solar 1 310 2000.0 0.0 1.0 +it 02_wind_on 1 310 2000.0 0.0 1.0 +it 03_wind_off 1 310 2000.0 0.0 1.0 +it 04_res 1 310 2000.0 0.0 1.0 +it 05_nuclear 1 310 2000.0 0.0 1.0 +it 06_coal 1 310 2000.0 0.0 1.0 +it 07_gas 1 310 2000.0 0.0 1.0 +it 08_non-res 1 310 100.0 0.0 1.0 it 09_hydro_pump 1 310 0.0 0.0 0.0 -it 01_solar 1 311 2000.0 1.0 0.0 -it 02_wind_on 1 311 2000.0 1.0 0.0 -it 03_wind_off 1 311 2000.0 1.0 0.0 -it 04_res 1 311 2000.0 1.0 0.0 -it 05_nuclear 1 311 2000.0 1.0 0.0 -it 06_coal 1 311 2000.0 1.0 0.0 -it 07_gas 1 311 2000.0 1.0 0.0 -it 08_non-res 1 311 200.0 1.0 0.0 +it 01_solar 1 311 2000.0 0.0 1.0 +it 02_wind_on 1 311 2000.0 0.0 1.0 +it 03_wind_off 1 311 2000.0 0.0 1.0 +it 04_res 1 311 2000.0 0.0 1.0 +it 05_nuclear 1 311 2000.0 0.0 1.0 +it 06_coal 1 311 2000.0 0.0 1.0 +it 07_gas 1 311 2000.0 0.0 1.0 +it 08_non-res 1 311 200.0 0.0 1.0 it 09_hydro_pump 1 311 0.0 0.0 0.0 -it 01_solar 1 312 2000.0 1.0 0.0 -it 02_wind_on 1 312 2000.0 1.0 0.0 -it 03_wind_off 1 312 2000.0 1.0 0.0 -it 04_res 1 312 2000.0 1.0 0.0 -it 05_nuclear 1 312 2000.0 1.0 0.0 -it 06_coal 1 312 2000.0 1.0 0.0 -it 07_gas 1 312 2000.0 1.0 0.0 -it 08_non-res 1 312 300.0 1.0 0.0 +it 01_solar 1 312 2000.0 0.0 1.0 +it 02_wind_on 1 312 2000.0 0.0 1.0 +it 03_wind_off 1 312 2000.0 0.0 1.0 +it 04_res 1 312 2000.0 0.0 1.0 +it 05_nuclear 1 312 2000.0 0.0 1.0 +it 06_coal 1 312 2000.0 0.0 1.0 +it 07_gas 1 312 2000.0 0.0 1.0 +it 08_non-res 1 312 300.0 0.0 1.0 it 09_hydro_pump 1 312 0.0 0.0 0.0 -it 01_solar 1 313 2000.0 1.0 0.0 -it 02_wind_on 1 313 2000.0 1.0 0.0 -it 03_wind_off 1 313 2000.0 1.0 0.0 -it 04_res 1 313 2000.0 1.0 0.0 -it 05_nuclear 1 313 2000.0 1.0 0.0 -it 06_coal 1 313 2000.0 1.0 0.0 -it 07_gas 1 313 2000.0 1.0 0.0 -it 08_non-res 1 313 400.0 1.0 0.0 +it 01_solar 1 313 2000.0 0.0 1.0 +it 02_wind_on 1 313 2000.0 0.0 1.0 +it 03_wind_off 1 313 2000.0 0.0 1.0 +it 04_res 1 313 2000.0 0.0 1.0 +it 05_nuclear 1 313 2000.0 0.0 1.0 +it 06_coal 1 313 2000.0 0.0 1.0 +it 07_gas 1 313 2000.0 0.0 1.0 +it 08_non-res 1 313 400.0 0.0 1.0 it 09_hydro_pump 1 313 0.0 0.0 0.0 -it 01_solar 1 314 2000.0 1.0 0.0 -it 02_wind_on 1 314 2000.0 1.0 0.0 -it 03_wind_off 1 314 2000.0 1.0 0.0 -it 04_res 1 314 2000.0 1.0 0.0 -it 05_nuclear 1 314 2000.0 1.0 0.0 -it 06_coal 1 314 2000.0 1.0 0.0 -it 07_gas 1 314 2000.0 1.0 0.0 -it 08_non-res 1 314 500.0 1.0 0.0 +it 01_solar 1 314 2000.0 0.0 1.0 +it 02_wind_on 1 314 2000.0 0.0 1.0 +it 03_wind_off 1 314 2000.0 0.0 1.0 +it 04_res 1 314 2000.0 0.0 1.0 +it 05_nuclear 1 314 2000.0 0.0 1.0 +it 06_coal 1 314 2000.0 0.0 1.0 +it 07_gas 1 314 2000.0 0.0 1.0 +it 08_non-res 1 314 500.0 0.0 1.0 it 09_hydro_pump 1 314 0.0 0.0 0.0 -it 01_solar 1 315 2000.0 1.0 0.0 -it 02_wind_on 1 315 2000.0 1.0 0.0 -it 03_wind_off 1 315 2000.0 1.0 0.0 -it 04_res 1 315 2000.0 1.0 0.0 -it 05_nuclear 1 315 2000.0 1.0 0.0 -it 06_coal 1 315 2000.0 1.0 0.0 -it 07_gas 1 315 2000.0 1.0 0.0 -it 08_non-res 1 315 600.0 1.0 0.0 +it 01_solar 1 315 2000.0 0.0 1.0 +it 02_wind_on 1 315 2000.0 0.0 1.0 +it 03_wind_off 1 315 2000.0 0.0 1.0 +it 04_res 1 315 2000.0 0.0 1.0 +it 05_nuclear 1 315 2000.0 0.0 1.0 +it 06_coal 1 315 2000.0 0.0 1.0 +it 07_gas 1 315 2000.0 0.0 1.0 +it 08_non-res 1 315 600.0 0.0 1.0 it 09_hydro_pump 1 315 0.0 0.0 0.0 -it 01_solar 1 316 2000.0 1.0 0.0 -it 02_wind_on 1 316 2000.0 1.0 0.0 -it 03_wind_off 1 316 2000.0 1.0 0.0 -it 04_res 1 316 2000.0 1.0 0.0 -it 05_nuclear 1 316 2000.0 1.0 0.0 -it 06_coal 1 316 2000.0 1.0 0.0 -it 07_gas 1 316 2000.0 1.0 0.0 -it 08_non-res 1 316 700.0 1.0 0.0 +it 01_solar 1 316 2000.0 0.0 1.0 +it 02_wind_on 1 316 2000.0 0.0 1.0 +it 03_wind_off 1 316 2000.0 0.0 1.0 +it 04_res 1 316 2000.0 0.0 1.0 +it 05_nuclear 1 316 2000.0 0.0 1.0 +it 06_coal 1 316 2000.0 0.0 1.0 +it 07_gas 1 316 2000.0 0.0 1.0 +it 08_non-res 1 316 700.0 0.0 1.0 it 09_hydro_pump 1 316 0.0 0.0 0.0 -it 01_solar 1 317 2000.0 1.0 0.0 -it 02_wind_on 1 317 2000.0 1.0 0.0 -it 03_wind_off 1 317 2000.0 1.0 0.0 -it 04_res 1 317 2000.0 1.0 0.0 -it 05_nuclear 1 317 2000.0 1.0 0.0 -it 06_coal 1 317 2000.0 1.0 0.0 -it 07_gas 1 317 2000.0 1.0 0.0 -it 08_non-res 1 317 800.0 1.0 0.0 +it 01_solar 1 317 2000.0 0.0 1.0 +it 02_wind_on 1 317 2000.0 0.0 1.0 +it 03_wind_off 1 317 2000.0 0.0 1.0 +it 04_res 1 317 2000.0 0.0 1.0 +it 05_nuclear 1 317 2000.0 0.0 1.0 +it 06_coal 1 317 2000.0 0.0 1.0 +it 07_gas 1 317 2000.0 0.0 1.0 +it 08_non-res 1 317 800.0 0.0 1.0 it 09_hydro_pump 1 317 0.0 0.0 0.0 -it 01_solar 1 318 2000.0 1.0 0.0 -it 02_wind_on 1 318 2000.0 1.0 0.0 -it 03_wind_off 1 318 2000.0 1.0 0.0 -it 04_res 1 318 2000.0 1.0 0.0 -it 05_nuclear 1 318 2000.0 1.0 0.0 -it 06_coal 1 318 2000.0 1.0 0.0 -it 07_gas 1 318 2000.0 1.0 0.0 -it 08_non-res 1 318 900.0 1.0 0.0 +it 01_solar 1 318 2000.0 0.0 1.0 +it 02_wind_on 1 318 2000.0 0.0 1.0 +it 03_wind_off 1 318 2000.0 0.0 1.0 +it 04_res 1 318 2000.0 0.0 1.0 +it 05_nuclear 1 318 2000.0 0.0 1.0 +it 06_coal 1 318 2000.0 0.0 1.0 +it 07_gas 1 318 2000.0 0.0 1.0 +it 08_non-res 1 318 900.0 0.0 1.0 it 09_hydro_pump 1 318 0.0 0.0 0.0 -it 01_solar 1 319 2000.0 1.0 0.0 -it 02_wind_on 1 319 2000.0 1.0 0.0 -it 03_wind_off 1 319 2000.0 1.0 0.0 -it 04_res 1 319 2000.0 1.0 0.0 -it 05_nuclear 1 319 2000.0 1.0 0.0 -it 06_coal 1 319 2000.0 1.0 0.0 -it 07_gas 1 319 2000.0 1.0 0.0 -it 08_non-res 1 319 1000.0 1.0 0.0 +it 01_solar 1 319 2000.0 0.0 1.0 +it 02_wind_on 1 319 2000.0 0.0 1.0 +it 03_wind_off 1 319 2000.0 0.0 1.0 +it 04_res 1 319 2000.0 0.0 1.0 +it 05_nuclear 1 319 2000.0 0.0 1.0 +it 06_coal 1 319 2000.0 0.0 1.0 +it 07_gas 1 319 2000.0 0.0 1.0 +it 08_non-res 1 319 1000.0 0.0 1.0 it 09_hydro_pump 1 319 0.0 0.0 0.0 -it 01_solar 1 320 2000.0 1.0 0.0 -it 02_wind_on 1 320 2000.0 1.0 0.0 -it 03_wind_off 1 320 2000.0 1.0 0.0 -it 04_res 1 320 2000.0 1.0 0.0 -it 05_nuclear 1 320 2000.0 1.0 0.0 -it 06_coal 1 320 2000.0 1.0 0.0 -it 07_gas 1 320 2000.0 1.0 0.0 -it 08_non-res 1 320 1100.0 1.0 0.0 +it 01_solar 1 320 2000.0 0.0 1.0 +it 02_wind_on 1 320 2000.0 0.0 1.0 +it 03_wind_off 1 320 2000.0 0.0 1.0 +it 04_res 1 320 2000.0 0.0 1.0 +it 05_nuclear 1 320 2000.0 0.0 1.0 +it 06_coal 1 320 2000.0 0.0 1.0 +it 07_gas 1 320 2000.0 0.0 1.0 +it 08_non-res 1 320 1100.0 0.0 1.0 it 09_hydro_pump 1 320 0.0 0.0 0.0 -it 01_solar 1 321 2000.0 1.0 0.0 -it 02_wind_on 1 321 2000.0 1.0 0.0 -it 03_wind_off 1 321 2000.0 1.0 0.0 -it 04_res 1 321 2000.0 1.0 0.0 -it 05_nuclear 1 321 2000.0 1.0 0.0 -it 06_coal 1 321 2000.0 1.0 0.0 -it 07_gas 1 321 2000.0 1.0 0.0 -it 08_non-res 1 321 1200.0 1.0 0.0 +it 01_solar 1 321 2000.0 0.0 1.0 +it 02_wind_on 1 321 2000.0 0.0 1.0 +it 03_wind_off 1 321 2000.0 0.0 1.0 +it 04_res 1 321 2000.0 0.0 1.0 +it 05_nuclear 1 321 2000.0 0.0 1.0 +it 06_coal 1 321 2000.0 0.0 1.0 +it 07_gas 1 321 2000.0 0.0 1.0 +it 08_non-res 1 321 1200.0 0.0 1.0 it 09_hydro_pump 1 321 0.0 0.0 0.0 -it 01_solar 1 322 2000.0 1.0 0.0 -it 02_wind_on 1 322 2000.0 1.0 0.0 -it 03_wind_off 1 322 2000.0 1.0 0.0 -it 04_res 1 322 2000.0 1.0 0.0 -it 05_nuclear 1 322 2000.0 1.0 0.0 -it 06_coal 1 322 2000.0 1.0 0.0 -it 07_gas 1 322 2000.0 1.0 0.0 -it 08_non-res 1 322 1300.0 1.0 0.0 +it 01_solar 1 322 2000.0 0.0 1.0 +it 02_wind_on 1 322 2000.0 0.0 1.0 +it 03_wind_off 1 322 2000.0 0.0 1.0 +it 04_res 1 322 2000.0 0.0 1.0 +it 05_nuclear 1 322 2000.0 0.0 1.0 +it 06_coal 1 322 2000.0 0.0 1.0 +it 07_gas 1 322 2000.0 0.0 1.0 +it 08_non-res 1 322 1300.0 0.0 1.0 it 09_hydro_pump 1 322 0.0 0.0 0.0 -it 01_solar 1 323 2000.0 1.0 0.0 -it 02_wind_on 1 323 2000.0 1.0 0.0 -it 03_wind_off 1 323 2000.0 1.0 0.0 -it 04_res 1 323 2000.0 1.0 0.0 -it 05_nuclear 1 323 2000.0 1.0 0.0 -it 06_coal 1 323 2000.0 1.0 0.0 -it 07_gas 1 323 2000.0 1.0 0.0 -it 08_non-res 1 323 1400.0 1.0 0.0 +it 01_solar 1 323 2000.0 0.0 1.0 +it 02_wind_on 1 323 2000.0 0.0 1.0 +it 03_wind_off 1 323 2000.0 0.0 1.0 +it 04_res 1 323 2000.0 0.0 1.0 +it 05_nuclear 1 323 2000.0 0.0 1.0 +it 06_coal 1 323 2000.0 0.0 1.0 +it 07_gas 1 323 2000.0 0.0 1.0 +it 08_non-res 1 323 1400.0 0.0 1.0 it 09_hydro_pump 1 323 0.0 0.0 0.0 -it 01_solar 1 324 2000.0 1.0 0.0 -it 02_wind_on 1 324 2000.0 1.0 0.0 -it 03_wind_off 1 324 2000.0 1.0 0.0 -it 04_res 1 324 2000.0 1.0 0.0 -it 05_nuclear 1 324 2000.0 1.0 0.0 -it 06_coal 1 324 2000.0 1.0 0.0 -it 07_gas 1 324 2000.0 1.0 0.0 -it 08_non-res 1 324 1500.0 1.0 0.0 +it 01_solar 1 324 2000.0 0.0 1.0 +it 02_wind_on 1 324 2000.0 0.0 1.0 +it 03_wind_off 1 324 2000.0 0.0 1.0 +it 04_res 1 324 2000.0 0.0 1.0 +it 05_nuclear 1 324 2000.0 0.0 1.0 +it 06_coal 1 324 2000.0 0.0 1.0 +it 07_gas 1 324 2000.0 0.0 1.0 +it 08_non-res 1 324 1500.0 0.0 1.0 it 09_hydro_pump 1 324 0.0 0.0 0.0 -it 01_solar 1 325 2000.0 1.0 0.0 -it 02_wind_on 1 325 2000.0 1.0 0.0 -it 03_wind_off 1 325 2000.0 1.0 0.0 -it 04_res 1 325 2000.0 1.0 0.0 -it 05_nuclear 1 325 2000.0 1.0 0.0 -it 06_coal 1 325 2000.0 1.0 0.0 -it 07_gas 1 325 2000.0 1.0 0.0 -it 08_non-res 1 325 1600.0 1.0 0.0 +it 01_solar 1 325 2000.0 0.0 1.0 +it 02_wind_on 1 325 2000.0 0.0 1.0 +it 03_wind_off 1 325 2000.0 0.0 1.0 +it 04_res 1 325 2000.0 0.0 1.0 +it 05_nuclear 1 325 2000.0 0.0 1.0 +it 06_coal 1 325 2000.0 0.0 1.0 +it 07_gas 1 325 2000.0 0.0 1.0 +it 08_non-res 1 325 1600.0 0.0 1.0 it 09_hydro_pump 1 325 0.0 0.0 0.0 -it 01_solar 1 326 2000.0 1.0 0.0 -it 02_wind_on 1 326 2000.0 1.0 0.0 -it 03_wind_off 1 326 2000.0 1.0 0.0 -it 04_res 1 326 2000.0 1.0 0.0 -it 05_nuclear 1 326 2000.0 1.0 0.0 -it 06_coal 1 326 2000.0 1.0 0.0 -it 07_gas 1 326 2000.0 1.0 0.0 -it 08_non-res 1 326 1700.0 1.0 0.0 +it 01_solar 1 326 2000.0 0.0 1.0 +it 02_wind_on 1 326 2000.0 0.0 1.0 +it 03_wind_off 1 326 2000.0 0.0 1.0 +it 04_res 1 326 2000.0 0.0 1.0 +it 05_nuclear 1 326 2000.0 0.0 1.0 +it 06_coal 1 326 2000.0 0.0 1.0 +it 07_gas 1 326 2000.0 0.0 1.0 +it 08_non-res 1 326 1700.0 0.0 1.0 it 09_hydro_pump 1 326 0.0 0.0 0.0 -it 01_solar 1 327 2000.0 1.0 0.0 -it 02_wind_on 1 327 2000.0 1.0 0.0 -it 03_wind_off 1 327 2000.0 1.0 0.0 -it 04_res 1 327 2000.0 1.0 0.0 -it 05_nuclear 1 327 2000.0 1.0 0.0 -it 06_coal 1 327 2000.0 1.0 0.0 -it 07_gas 1 327 2000.0 1.0 0.0 -it 08_non-res 1 327 1800.0 1.0 0.0 +it 01_solar 1 327 2000.0 0.0 1.0 +it 02_wind_on 1 327 2000.0 0.0 1.0 +it 03_wind_off 1 327 2000.0 0.0 1.0 +it 04_res 1 327 2000.0 0.0 1.0 +it 05_nuclear 1 327 2000.0 0.0 1.0 +it 06_coal 1 327 2000.0 0.0 1.0 +it 07_gas 1 327 2000.0 0.0 1.0 +it 08_non-res 1 327 1800.0 0.0 1.0 it 09_hydro_pump 1 327 0.0 0.0 0.0 -it 01_solar 1 328 2000.0 1.0 0.0 -it 02_wind_on 1 328 2000.0 1.0 0.0 -it 03_wind_off 1 328 2000.0 1.0 0.0 -it 04_res 1 328 2000.0 1.0 0.0 -it 05_nuclear 1 328 2000.0 1.0 0.0 -it 06_coal 1 328 2000.0 1.0 0.0 -it 07_gas 1 328 2000.0 1.0 0.0 -it 08_non-res 1 328 1900.0 1.0 0.0 +it 01_solar 1 328 2000.0 0.0 1.0 +it 02_wind_on 1 328 2000.0 0.0 1.0 +it 03_wind_off 1 328 2000.0 0.0 1.0 +it 04_res 1 328 2000.0 0.0 1.0 +it 05_nuclear 1 328 2000.0 0.0 1.0 +it 06_coal 1 328 2000.0 0.0 1.0 +it 07_gas 1 328 2000.0 0.0 1.0 +it 08_non-res 1 328 1900.0 0.0 1.0 it 09_hydro_pump 1 328 0.0 0.0 0.0 -it 01_solar 1 329 2000.0 1.0 0.0 -it 02_wind_on 1 329 2000.0 1.0 0.0 -it 03_wind_off 1 329 2000.0 1.0 0.0 -it 04_res 1 329 2000.0 1.0 0.0 -it 05_nuclear 1 329 2000.0 1.0 0.0 -it 06_coal 1 329 2000.0 1.0 0.0 -it 07_gas 1 329 2000.0 1.0 0.0 -it 08_non-res 1 329 2000.0 1.0 0.0 +it 01_solar 1 329 2000.0 0.0 1.0 +it 02_wind_on 1 329 2000.0 0.0 1.0 +it 03_wind_off 1 329 2000.0 0.0 1.0 +it 04_res 1 329 2000.0 0.0 1.0 +it 05_nuclear 1 329 2000.0 0.0 1.0 +it 06_coal 1 329 2000.0 0.0 1.0 +it 07_gas 1 329 2000.0 0.0 1.0 +it 08_non-res 1 329 2000.0 0.0 1.0 it 09_hydro_pump 1 329 0.0 0.0 0.0 -it 01_solar 1 330 2000.0 1.0 0.0 -it 02_wind_on 1 330 2000.0 1.0 0.0 -it 03_wind_off 1 330 2000.0 1.0 0.0 -it 04_res 1 330 2000.0 1.0 0.0 -it 05_nuclear 1 330 2000.0 1.0 0.0 -it 06_coal 1 330 2000.0 1.0 0.0 -it 07_gas 1 330 2000.0 1.0 0.0 -it 08_non-res 1 330 2000.0 1.0 0.0 -it 09_hydro_pump 1 330 100.0 1.0 0.0 -it 01_solar 1 331 2000.0 1.0 0.0 -it 02_wind_on 1 331 2000.0 1.0 0.0 -it 03_wind_off 1 331 2000.0 1.0 0.0 -it 04_res 1 331 2000.0 1.0 0.0 -it 05_nuclear 1 331 2000.0 1.0 0.0 -it 06_coal 1 331 2000.0 1.0 0.0 -it 07_gas 1 331 2000.0 1.0 0.0 -it 08_non-res 1 331 2000.0 1.0 0.0 -it 09_hydro_pump 1 331 200.0 1.0 0.0 -it 01_solar 1 332 2000.0 1.0 0.0 -it 02_wind_on 1 332 2000.0 1.0 0.0 -it 03_wind_off 1 332 2000.0 1.0 0.0 -it 04_res 1 332 2000.0 1.0 0.0 -it 05_nuclear 1 332 2000.0 1.0 0.0 -it 06_coal 1 332 2000.0 1.0 0.0 -it 07_gas 1 332 2000.0 1.0 0.0 -it 08_non-res 1 332 2000.0 1.0 0.0 -it 09_hydro_pump 1 332 300.0 1.0 0.0 -it 01_solar 1 333 2000.0 1.0 0.0 -it 02_wind_on 1 333 2000.0 1.0 0.0 -it 03_wind_off 1 333 2000.0 1.0 0.0 -it 04_res 1 333 2000.0 1.0 0.0 -it 05_nuclear 1 333 2000.0 1.0 0.0 -it 06_coal 1 333 2000.0 1.0 0.0 -it 07_gas 1 333 2000.0 1.0 0.0 -it 08_non-res 1 333 2000.0 1.0 0.0 -it 09_hydro_pump 1 333 400.0 1.0 0.0 -it 01_solar 1 334 2000.0 1.0 0.0 -it 02_wind_on 1 334 2000.0 1.0 0.0 -it 03_wind_off 1 334 2000.0 1.0 0.0 -it 04_res 1 334 2000.0 1.0 0.0 -it 05_nuclear 1 334 2000.0 1.0 0.0 -it 06_coal 1 334 2000.0 1.0 0.0 -it 07_gas 1 334 2000.0 1.0 0.0 -it 08_non-res 1 334 2000.0 1.0 0.0 -it 09_hydro_pump 1 334 500.0 1.0 0.0 -it 01_solar 1 335 2000.0 1.0 0.0 -it 02_wind_on 1 335 2000.0 1.0 0.0 -it 03_wind_off 1 335 2000.0 1.0 0.0 -it 04_res 1 335 2000.0 1.0 0.0 -it 05_nuclear 1 335 2000.0 1.0 0.0 -it 06_coal 1 335 2000.0 1.0 0.0 -it 07_gas 1 335 2000.0 1.0 0.0 -it 08_non-res 1 335 2000.0 1.0 0.0 -it 09_hydro_pump 1 335 600.0 1.0 0.0 -it 01_solar 1 336 2000.0 1.0 0.0 -it 02_wind_on 1 336 2000.0 1.0 0.0 -it 03_wind_off 1 336 2000.0 1.0 0.0 -it 04_res 1 336 2000.0 1.0 0.0 -it 05_nuclear 1 336 2000.0 1.0 0.0 -it 06_coal 1 336 2000.0 1.0 0.0 -it 07_gas 1 336 2000.0 1.0 0.0 -it 08_non-res 1 336 2000.0 1.0 0.0 -it 09_hydro_pump 1 336 700.0 1.0 0.0 +it 01_solar 1 330 2000.0 0.0 1.0 +it 02_wind_on 1 330 2000.0 0.0 1.0 +it 03_wind_off 1 330 2000.0 0.0 1.0 +it 04_res 1 330 2000.0 0.0 1.0 +it 05_nuclear 1 330 2000.0 0.0 1.0 +it 06_coal 1 330 2000.0 0.0 1.0 +it 07_gas 1 330 2000.0 0.0 1.0 +it 08_non-res 1 330 2000.0 0.0 1.0 +it 09_hydro_pump 1 330 100.0 0.0 1.0 +it 01_solar 1 331 2000.0 0.0 1.0 +it 02_wind_on 1 331 2000.0 0.0 1.0 +it 03_wind_off 1 331 2000.0 0.0 1.0 +it 04_res 1 331 2000.0 0.0 1.0 +it 05_nuclear 1 331 2000.0 0.0 1.0 +it 06_coal 1 331 2000.0 0.0 1.0 +it 07_gas 1 331 2000.0 0.0 1.0 +it 08_non-res 1 331 2000.0 0.0 1.0 +it 09_hydro_pump 1 331 200.0 0.0 1.0 +it 01_solar 1 332 2000.0 0.0 1.0 +it 02_wind_on 1 332 2000.0 0.0 1.0 +it 03_wind_off 1 332 2000.0 0.0 1.0 +it 04_res 1 332 2000.0 0.0 1.0 +it 05_nuclear 1 332 2000.0 0.0 1.0 +it 06_coal 1 332 2000.0 0.0 1.0 +it 07_gas 1 332 2000.0 0.0 1.0 +it 08_non-res 1 332 2000.0 0.0 1.0 +it 09_hydro_pump 1 332 300.0 0.0 1.0 +it 01_solar 1 333 2000.0 0.0 1.0 +it 02_wind_on 1 333 2000.0 0.0 1.0 +it 03_wind_off 1 333 2000.0 0.0 1.0 +it 04_res 1 333 2000.0 0.0 1.0 +it 05_nuclear 1 333 2000.0 0.0 1.0 +it 06_coal 1 333 2000.0 0.0 1.0 +it 07_gas 1 333 2000.0 0.0 1.0 +it 08_non-res 1 333 2000.0 0.0 1.0 +it 09_hydro_pump 1 333 400.0 0.0 1.0 +it 01_solar 1 334 2000.0 0.0 1.0 +it 02_wind_on 1 334 2000.0 0.0 1.0 +it 03_wind_off 1 334 2000.0 0.0 1.0 +it 04_res 1 334 2000.0 0.0 1.0 +it 05_nuclear 1 334 2000.0 0.0 1.0 +it 06_coal 1 334 2000.0 0.0 1.0 +it 07_gas 1 334 2000.0 0.0 1.0 +it 08_non-res 1 334 2000.0 0.0 1.0 +it 09_hydro_pump 1 334 500.0 0.0 1.0 +it 01_solar 1 335 2000.0 0.0 1.0 +it 02_wind_on 1 335 2000.0 0.0 1.0 +it 03_wind_off 1 335 2000.0 0.0 1.0 +it 04_res 1 335 2000.0 0.0 1.0 +it 05_nuclear 1 335 2000.0 0.0 1.0 +it 06_coal 1 335 2000.0 0.0 1.0 +it 07_gas 1 335 2000.0 0.0 1.0 +it 08_non-res 1 335 2000.0 0.0 1.0 +it 09_hydro_pump 1 335 600.0 0.0 1.0 +it 01_solar 1 336 2000.0 0.0 1.0 +it 02_wind_on 1 336 2000.0 0.0 1.0 +it 03_wind_off 1 336 2000.0 0.0 1.0 +it 04_res 1 336 2000.0 0.0 1.0 +it 05_nuclear 1 336 2000.0 0.0 1.0 +it 06_coal 1 336 2000.0 0.0 1.0 +it 07_gas 1 336 2000.0 0.0 1.0 +it 08_non-res 1 336 2000.0 0.0 1.0 +it 09_hydro_pump 1 336 700.0 0.0 1.0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-07.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-07.result.tsv index fef638b5b9..587ee1ee46 100644 --- a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-07.result.tsv +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-07.result.tsv @@ -1,4 +1,4 @@ -area cluster mcYear timeId NODU NP Cost - Euro +area cluster mcYear timeId NP Cost NODU de 01_solar 1 1 0.0 0.0 de 02_wind_on 1 1 0.0 0.0 de 03_wind_off 1 1 0.0 0.0 @@ -8,7 +8,7 @@ de 06_coal 1 1 0.0 0.0 de 07_gas 1 1 0.0 0.0 de 08_non-res 1 1 0.0 0.0 de 09_hydro_pump 1 1 0.0 0.0 -de 01_solar 1 2 1.0 0.0 +de 01_solar 1 2 0.0 1.0 de 02_wind_on 1 2 0.0 0.0 de 03_wind_off 1 2 0.0 0.0 de 04_res 1 2 0.0 0.0 @@ -17,7 +17,7 @@ de 06_coal 1 2 0.0 0.0 de 07_gas 1 2 0.0 0.0 de 08_non-res 1 2 0.0 0.0 de 09_hydro_pump 1 2 0.0 0.0 -de 01_solar 1 3 1.0 0.0 +de 01_solar 1 3 0.0 1.0 de 02_wind_on 1 3 0.0 0.0 de 03_wind_off 1 3 0.0 0.0 de 04_res 1 3 0.0 0.0 @@ -26,7 +26,7 @@ de 06_coal 1 3 0.0 0.0 de 07_gas 1 3 0.0 0.0 de 08_non-res 1 3 0.0 0.0 de 09_hydro_pump 1 3 0.0 0.0 -de 01_solar 1 4 1.0 0.0 +de 01_solar 1 4 0.0 1.0 de 02_wind_on 1 4 0.0 0.0 de 03_wind_off 1 4 0.0 0.0 de 04_res 1 4 0.0 0.0 @@ -35,7 +35,7 @@ de 06_coal 1 4 0.0 0.0 de 07_gas 1 4 0.0 0.0 de 08_non-res 1 4 0.0 0.0 de 09_hydro_pump 1 4 0.0 0.0 -de 01_solar 1 5 1.0 0.0 +de 01_solar 1 5 0.0 1.0 de 02_wind_on 1 5 0.0 0.0 de 03_wind_off 1 5 0.0 0.0 de 04_res 1 5 0.0 0.0 @@ -44,7 +44,7 @@ de 06_coal 1 5 0.0 0.0 de 07_gas 1 5 0.0 0.0 de 08_non-res 1 5 0.0 0.0 de 09_hydro_pump 1 5 0.0 0.0 -de 01_solar 1 6 1.0 0.0 +de 01_solar 1 6 0.0 1.0 de 02_wind_on 1 6 0.0 0.0 de 03_wind_off 1 6 0.0 0.0 de 04_res 1 6 0.0 0.0 @@ -53,7 +53,7 @@ de 06_coal 1 6 0.0 0.0 de 07_gas 1 6 0.0 0.0 de 08_non-res 1 6 0.0 0.0 de 09_hydro_pump 1 6 0.0 0.0 -de 01_solar 1 7 1.0 0.0 +de 01_solar 1 7 0.0 1.0 de 02_wind_on 1 7 0.0 0.0 de 03_wind_off 1 7 0.0 0.0 de 04_res 1 7 0.0 0.0 @@ -62,7 +62,7 @@ de 06_coal 1 7 0.0 0.0 de 07_gas 1 7 0.0 0.0 de 08_non-res 1 7 0.0 0.0 de 09_hydro_pump 1 7 0.0 0.0 -de 01_solar 1 8 1.0 0.0 +de 01_solar 1 8 0.0 1.0 de 02_wind_on 1 8 0.0 0.0 de 03_wind_off 1 8 0.0 0.0 de 04_res 1 8 0.0 0.0 @@ -71,7 +71,7 @@ de 06_coal 1 8 0.0 0.0 de 07_gas 1 8 0.0 0.0 de 08_non-res 1 8 0.0 0.0 de 09_hydro_pump 1 8 0.0 0.0 -de 01_solar 1 9 1.0 0.0 +de 01_solar 1 9 0.0 1.0 de 02_wind_on 1 9 0.0 0.0 de 03_wind_off 1 9 0.0 0.0 de 04_res 1 9 0.0 0.0 @@ -80,7 +80,7 @@ de 06_coal 1 9 0.0 0.0 de 07_gas 1 9 0.0 0.0 de 08_non-res 1 9 0.0 0.0 de 09_hydro_pump 1 9 0.0 0.0 -de 01_solar 1 10 1.0 0.0 +de 01_solar 1 10 0.0 1.0 de 02_wind_on 1 10 0.0 0.0 de 03_wind_off 1 10 0.0 0.0 de 04_res 1 10 0.0 0.0 @@ -89,7 +89,7 @@ de 06_coal 1 10 0.0 0.0 de 07_gas 1 10 0.0 0.0 de 08_non-res 1 10 0.0 0.0 de 09_hydro_pump 1 10 0.0 0.0 -de 01_solar 1 11 1.0 0.0 +de 01_solar 1 11 0.0 1.0 de 02_wind_on 1 11 0.0 0.0 de 03_wind_off 1 11 0.0 0.0 de 04_res 1 11 0.0 0.0 @@ -98,7 +98,7 @@ de 06_coal 1 11 0.0 0.0 de 07_gas 1 11 0.0 0.0 de 08_non-res 1 11 0.0 0.0 de 09_hydro_pump 1 11 0.0 0.0 -de 01_solar 1 12 1.0 0.0 +de 01_solar 1 12 0.0 1.0 de 02_wind_on 1 12 0.0 0.0 de 03_wind_off 1 12 0.0 0.0 de 04_res 1 12 0.0 0.0 @@ -107,7 +107,7 @@ de 06_coal 1 12 0.0 0.0 de 07_gas 1 12 0.0 0.0 de 08_non-res 1 12 0.0 0.0 de 09_hydro_pump 1 12 0.0 0.0 -de 01_solar 1 13 1.0 0.0 +de 01_solar 1 13 0.0 1.0 de 02_wind_on 1 13 0.0 0.0 de 03_wind_off 1 13 0.0 0.0 de 04_res 1 13 0.0 0.0 @@ -116,7 +116,7 @@ de 06_coal 1 13 0.0 0.0 de 07_gas 1 13 0.0 0.0 de 08_non-res 1 13 0.0 0.0 de 09_hydro_pump 1 13 0.0 0.0 -de 01_solar 1 14 1.0 0.0 +de 01_solar 1 14 0.0 1.0 de 02_wind_on 1 14 0.0 0.0 de 03_wind_off 1 14 0.0 0.0 de 04_res 1 14 0.0 0.0 @@ -125,7 +125,7 @@ de 06_coal 1 14 0.0 0.0 de 07_gas 1 14 0.0 0.0 de 08_non-res 1 14 0.0 0.0 de 09_hydro_pump 1 14 0.0 0.0 -de 01_solar 1 15 1.0 0.0 +de 01_solar 1 15 0.0 1.0 de 02_wind_on 1 15 0.0 0.0 de 03_wind_off 1 15 0.0 0.0 de 04_res 1 15 0.0 0.0 @@ -134,7 +134,7 @@ de 06_coal 1 15 0.0 0.0 de 07_gas 1 15 0.0 0.0 de 08_non-res 1 15 0.0 0.0 de 09_hydro_pump 1 15 0.0 0.0 -de 01_solar 1 16 1.0 0.0 +de 01_solar 1 16 0.0 1.0 de 02_wind_on 1 16 0.0 0.0 de 03_wind_off 1 16 0.0 0.0 de 04_res 1 16 0.0 0.0 @@ -143,7 +143,7 @@ de 06_coal 1 16 0.0 0.0 de 07_gas 1 16 0.0 0.0 de 08_non-res 1 16 0.0 0.0 de 09_hydro_pump 1 16 0.0 0.0 -de 01_solar 1 17 1.0 0.0 +de 01_solar 1 17 0.0 1.0 de 02_wind_on 1 17 0.0 0.0 de 03_wind_off 1 17 0.0 0.0 de 04_res 1 17 0.0 0.0 @@ -152,7 +152,7 @@ de 06_coal 1 17 0.0 0.0 de 07_gas 1 17 0.0 0.0 de 08_non-res 1 17 0.0 0.0 de 09_hydro_pump 1 17 0.0 0.0 -de 01_solar 1 18 1.0 0.0 +de 01_solar 1 18 0.0 1.0 de 02_wind_on 1 18 0.0 0.0 de 03_wind_off 1 18 0.0 0.0 de 04_res 1 18 0.0 0.0 @@ -161,7 +161,7 @@ de 06_coal 1 18 0.0 0.0 de 07_gas 1 18 0.0 0.0 de 08_non-res 1 18 0.0 0.0 de 09_hydro_pump 1 18 0.0 0.0 -de 01_solar 1 19 1.0 0.0 +de 01_solar 1 19 0.0 1.0 de 02_wind_on 1 19 0.0 0.0 de 03_wind_off 1 19 0.0 0.0 de 04_res 1 19 0.0 0.0 @@ -170,7 +170,7 @@ de 06_coal 1 19 0.0 0.0 de 07_gas 1 19 0.0 0.0 de 08_non-res 1 19 0.0 0.0 de 09_hydro_pump 1 19 0.0 0.0 -de 01_solar 1 20 1.0 0.0 +de 01_solar 1 20 0.0 1.0 de 02_wind_on 1 20 0.0 0.0 de 03_wind_off 1 20 0.0 0.0 de 04_res 1 20 0.0 0.0 @@ -179,7 +179,7 @@ de 06_coal 1 20 0.0 0.0 de 07_gas 1 20 0.0 0.0 de 08_non-res 1 20 0.0 0.0 de 09_hydro_pump 1 20 0.0 0.0 -de 01_solar 1 21 1.0 0.0 +de 01_solar 1 21 0.0 1.0 de 02_wind_on 1 21 0.0 0.0 de 03_wind_off 1 21 0.0 0.0 de 04_res 1 21 0.0 0.0 @@ -188,8 +188,8 @@ de 06_coal 1 21 0.0 0.0 de 07_gas 1 21 0.0 0.0 de 08_non-res 1 21 0.0 0.0 de 09_hydro_pump 1 21 0.0 0.0 -de 01_solar 1 22 1.0 0.0 -de 02_wind_on 1 22 1.0 0.0 +de 01_solar 1 22 0.0 1.0 +de 02_wind_on 1 22 0.0 1.0 de 03_wind_off 1 22 0.0 0.0 de 04_res 1 22 0.0 0.0 de 05_nuclear 1 22 0.0 0.0 @@ -197,8 +197,8 @@ de 06_coal 1 22 0.0 0.0 de 07_gas 1 22 0.0 0.0 de 08_non-res 1 22 0.0 0.0 de 09_hydro_pump 1 22 0.0 0.0 -de 01_solar 1 23 1.0 0.0 -de 02_wind_on 1 23 1.0 0.0 +de 01_solar 1 23 0.0 1.0 +de 02_wind_on 1 23 0.0 1.0 de 03_wind_off 1 23 0.0 0.0 de 04_res 1 23 0.0 0.0 de 05_nuclear 1 23 0.0 0.0 @@ -206,8 +206,8 @@ de 06_coal 1 23 0.0 0.0 de 07_gas 1 23 0.0 0.0 de 08_non-res 1 23 0.0 0.0 de 09_hydro_pump 1 23 0.0 0.0 -de 01_solar 1 24 1.0 0.0 -de 02_wind_on 1 24 1.0 0.0 +de 01_solar 1 24 0.0 1.0 +de 02_wind_on 1 24 0.0 1.0 de 03_wind_off 1 24 0.0 0.0 de 04_res 1 24 0.0 0.0 de 05_nuclear 1 24 0.0 0.0 @@ -215,8 +215,8 @@ de 06_coal 1 24 0.0 0.0 de 07_gas 1 24 0.0 0.0 de 08_non-res 1 24 0.0 0.0 de 09_hydro_pump 1 24 0.0 0.0 -de 01_solar 1 25 1.0 0.0 -de 02_wind_on 1 25 1.0 0.0 +de 01_solar 1 25 0.0 1.0 +de 02_wind_on 1 25 0.0 1.0 de 03_wind_off 1 25 0.0 0.0 de 04_res 1 25 0.0 0.0 de 05_nuclear 1 25 0.0 0.0 @@ -224,8 +224,8 @@ de 06_coal 1 25 0.0 0.0 de 07_gas 1 25 0.0 0.0 de 08_non-res 1 25 0.0 0.0 de 09_hydro_pump 1 25 0.0 0.0 -de 01_solar 1 26 1.0 0.0 -de 02_wind_on 1 26 1.0 0.0 +de 01_solar 1 26 0.0 1.0 +de 02_wind_on 1 26 0.0 1.0 de 03_wind_off 1 26 0.0 0.0 de 04_res 1 26 0.0 0.0 de 05_nuclear 1 26 0.0 0.0 @@ -233,8 +233,8 @@ de 06_coal 1 26 0.0 0.0 de 07_gas 1 26 0.0 0.0 de 08_non-res 1 26 0.0 0.0 de 09_hydro_pump 1 26 0.0 0.0 -de 01_solar 1 27 1.0 0.0 -de 02_wind_on 1 27 1.0 0.0 +de 01_solar 1 27 0.0 1.0 +de 02_wind_on 1 27 0.0 1.0 de 03_wind_off 1 27 0.0 0.0 de 04_res 1 27 0.0 0.0 de 05_nuclear 1 27 0.0 0.0 @@ -242,8 +242,8 @@ de 06_coal 1 27 0.0 0.0 de 07_gas 1 27 0.0 0.0 de 08_non-res 1 27 0.0 0.0 de 09_hydro_pump 1 27 0.0 0.0 -de 01_solar 1 28 1.0 0.0 -de 02_wind_on 1 28 1.0 0.0 +de 01_solar 1 28 0.0 1.0 +de 02_wind_on 1 28 0.0 1.0 de 03_wind_off 1 28 0.0 0.0 de 04_res 1 28 0.0 0.0 de 05_nuclear 1 28 0.0 0.0 @@ -251,8 +251,8 @@ de 06_coal 1 28 0.0 0.0 de 07_gas 1 28 0.0 0.0 de 08_non-res 1 28 0.0 0.0 de 09_hydro_pump 1 28 0.0 0.0 -de 01_solar 1 29 1.0 0.0 -de 02_wind_on 1 29 1.0 0.0 +de 01_solar 1 29 0.0 1.0 +de 02_wind_on 1 29 0.0 1.0 de 03_wind_off 1 29 0.0 0.0 de 04_res 1 29 0.0 0.0 de 05_nuclear 1 29 0.0 0.0 @@ -260,8 +260,8 @@ de 06_coal 1 29 0.0 0.0 de 07_gas 1 29 0.0 0.0 de 08_non-res 1 29 0.0 0.0 de 09_hydro_pump 1 29 0.0 0.0 -de 01_solar 1 30 1.0 0.0 -de 02_wind_on 1 30 1.0 0.0 +de 01_solar 1 30 0.0 1.0 +de 02_wind_on 1 30 0.0 1.0 de 03_wind_off 1 30 0.0 0.0 de 04_res 1 30 0.0 0.0 de 05_nuclear 1 30 0.0 0.0 @@ -269,8 +269,8 @@ de 06_coal 1 30 0.0 0.0 de 07_gas 1 30 0.0 0.0 de 08_non-res 1 30 0.0 0.0 de 09_hydro_pump 1 30 0.0 0.0 -de 01_solar 1 31 1.0 0.0 -de 02_wind_on 1 31 1.0 0.0 +de 01_solar 1 31 0.0 1.0 +de 02_wind_on 1 31 0.0 1.0 de 03_wind_off 1 31 0.0 0.0 de 04_res 1 31 0.0 0.0 de 05_nuclear 1 31 0.0 0.0 @@ -278,8 +278,8 @@ de 06_coal 1 31 0.0 0.0 de 07_gas 1 31 0.0 0.0 de 08_non-res 1 31 0.0 0.0 de 09_hydro_pump 1 31 0.0 0.0 -de 01_solar 1 32 1.0 0.0 -de 02_wind_on 1 32 1.0 0.0 +de 01_solar 1 32 0.0 1.0 +de 02_wind_on 1 32 0.0 1.0 de 03_wind_off 1 32 0.0 0.0 de 04_res 1 32 0.0 0.0 de 05_nuclear 1 32 0.0 0.0 @@ -287,8 +287,8 @@ de 06_coal 1 32 0.0 0.0 de 07_gas 1 32 0.0 0.0 de 08_non-res 1 32 0.0 0.0 de 09_hydro_pump 1 32 0.0 0.0 -de 01_solar 1 33 1.0 0.0 -de 02_wind_on 1 33 1.0 0.0 +de 01_solar 1 33 0.0 1.0 +de 02_wind_on 1 33 0.0 1.0 de 03_wind_off 1 33 0.0 0.0 de 04_res 1 33 0.0 0.0 de 05_nuclear 1 33 0.0 0.0 @@ -296,8 +296,8 @@ de 06_coal 1 33 0.0 0.0 de 07_gas 1 33 0.0 0.0 de 08_non-res 1 33 0.0 0.0 de 09_hydro_pump 1 33 0.0 0.0 -de 01_solar 1 34 1.0 0.0 -de 02_wind_on 1 34 1.0 0.0 +de 01_solar 1 34 0.0 1.0 +de 02_wind_on 1 34 0.0 1.0 de 03_wind_off 1 34 0.0 0.0 de 04_res 1 34 0.0 0.0 de 05_nuclear 1 34 0.0 0.0 @@ -305,8 +305,8 @@ de 06_coal 1 34 0.0 0.0 de 07_gas 1 34 0.0 0.0 de 08_non-res 1 34 0.0 0.0 de 09_hydro_pump 1 34 0.0 0.0 -de 01_solar 1 35 1.0 0.0 -de 02_wind_on 1 35 1.0 0.0 +de 01_solar 1 35 0.0 1.0 +de 02_wind_on 1 35 0.0 1.0 de 03_wind_off 1 35 0.0 0.0 de 04_res 1 35 0.0 0.0 de 05_nuclear 1 35 0.0 0.0 @@ -314,8 +314,8 @@ de 06_coal 1 35 0.0 0.0 de 07_gas 1 35 0.0 0.0 de 08_non-res 1 35 0.0 0.0 de 09_hydro_pump 1 35 0.0 0.0 -de 01_solar 1 36 1.0 0.0 -de 02_wind_on 1 36 1.0 0.0 +de 01_solar 1 36 0.0 1.0 +de 02_wind_on 1 36 0.0 1.0 de 03_wind_off 1 36 0.0 0.0 de 04_res 1 36 0.0 0.0 de 05_nuclear 1 36 0.0 0.0 @@ -323,8 +323,8 @@ de 06_coal 1 36 0.0 0.0 de 07_gas 1 36 0.0 0.0 de 08_non-res 1 36 0.0 0.0 de 09_hydro_pump 1 36 0.0 0.0 -de 01_solar 1 37 1.0 0.0 -de 02_wind_on 1 37 1.0 0.0 +de 01_solar 1 37 0.0 1.0 +de 02_wind_on 1 37 0.0 1.0 de 03_wind_off 1 37 0.0 0.0 de 04_res 1 37 0.0 0.0 de 05_nuclear 1 37 0.0 0.0 @@ -332,8 +332,8 @@ de 06_coal 1 37 0.0 0.0 de 07_gas 1 37 0.0 0.0 de 08_non-res 1 37 0.0 0.0 de 09_hydro_pump 1 37 0.0 0.0 -de 01_solar 1 38 1.0 0.0 -de 02_wind_on 1 38 1.0 0.0 +de 01_solar 1 38 0.0 1.0 +de 02_wind_on 1 38 0.0 1.0 de 03_wind_off 1 38 0.0 0.0 de 04_res 1 38 0.0 0.0 de 05_nuclear 1 38 0.0 0.0 @@ -341,8 +341,8 @@ de 06_coal 1 38 0.0 0.0 de 07_gas 1 38 0.0 0.0 de 08_non-res 1 38 0.0 0.0 de 09_hydro_pump 1 38 0.0 0.0 -de 01_solar 1 39 1.0 0.0 -de 02_wind_on 1 39 1.0 0.0 +de 01_solar 1 39 0.0 1.0 +de 02_wind_on 1 39 0.0 1.0 de 03_wind_off 1 39 0.0 0.0 de 04_res 1 39 0.0 0.0 de 05_nuclear 1 39 0.0 0.0 @@ -350,8 +350,8 @@ de 06_coal 1 39 0.0 0.0 de 07_gas 1 39 0.0 0.0 de 08_non-res 1 39 0.0 0.0 de 09_hydro_pump 1 39 0.0 0.0 -de 01_solar 1 40 1.0 0.0 -de 02_wind_on 1 40 1.0 0.0 +de 01_solar 1 40 0.0 1.0 +de 02_wind_on 1 40 0.0 1.0 de 03_wind_off 1 40 0.0 0.0 de 04_res 1 40 0.0 0.0 de 05_nuclear 1 40 0.0 0.0 @@ -359,8 +359,8 @@ de 06_coal 1 40 0.0 0.0 de 07_gas 1 40 0.0 0.0 de 08_non-res 1 40 0.0 0.0 de 09_hydro_pump 1 40 0.0 0.0 -de 01_solar 1 41 1.0 0.0 -de 02_wind_on 1 41 1.0 0.0 +de 01_solar 1 41 0.0 1.0 +de 02_wind_on 1 41 0.0 1.0 de 03_wind_off 1 41 0.0 0.0 de 04_res 1 41 0.0 0.0 de 05_nuclear 1 41 0.0 0.0 @@ -368,1149 +368,1149 @@ de 06_coal 1 41 0.0 0.0 de 07_gas 1 41 0.0 0.0 de 08_non-res 1 41 0.0 0.0 de 09_hydro_pump 1 41 0.0 0.0 -de 01_solar 1 42 1.0 0.0 -de 02_wind_on 1 42 1.0 0.0 -de 03_wind_off 1 42 1.0 0.0 +de 01_solar 1 42 0.0 1.0 +de 02_wind_on 1 42 0.0 1.0 +de 03_wind_off 1 42 0.0 1.0 de 04_res 1 42 0.0 0.0 de 05_nuclear 1 42 0.0 0.0 de 06_coal 1 42 0.0 0.0 de 07_gas 1 42 0.0 0.0 de 08_non-res 1 42 0.0 0.0 de 09_hydro_pump 1 42 0.0 0.0 -de 01_solar 1 43 1.0 0.0 -de 02_wind_on 1 43 1.0 0.0 -de 03_wind_off 1 43 1.0 0.0 +de 01_solar 1 43 0.0 1.0 +de 02_wind_on 1 43 0.0 1.0 +de 03_wind_off 1 43 0.0 1.0 de 04_res 1 43 0.0 0.0 de 05_nuclear 1 43 0.0 0.0 de 06_coal 1 43 0.0 0.0 de 07_gas 1 43 0.0 0.0 de 08_non-res 1 43 0.0 0.0 de 09_hydro_pump 1 43 0.0 0.0 -de 01_solar 1 44 1.0 0.0 -de 02_wind_on 1 44 1.0 0.0 -de 03_wind_off 1 44 1.0 0.0 +de 01_solar 1 44 0.0 1.0 +de 02_wind_on 1 44 0.0 1.0 +de 03_wind_off 1 44 0.0 1.0 de 04_res 1 44 0.0 0.0 de 05_nuclear 1 44 0.0 0.0 de 06_coal 1 44 0.0 0.0 de 07_gas 1 44 0.0 0.0 de 08_non-res 1 44 0.0 0.0 de 09_hydro_pump 1 44 0.0 0.0 -de 01_solar 1 45 1.0 0.0 -de 02_wind_on 1 45 1.0 0.0 -de 03_wind_off 1 45 1.0 0.0 +de 01_solar 1 45 0.0 1.0 +de 02_wind_on 1 45 0.0 1.0 +de 03_wind_off 1 45 0.0 1.0 de 04_res 1 45 0.0 0.0 de 05_nuclear 1 45 0.0 0.0 de 06_coal 1 45 0.0 0.0 de 07_gas 1 45 0.0 0.0 de 08_non-res 1 45 0.0 0.0 de 09_hydro_pump 1 45 0.0 0.0 -de 01_solar 1 46 1.0 0.0 -de 02_wind_on 1 46 1.0 0.0 -de 03_wind_off 1 46 1.0 0.0 +de 01_solar 1 46 0.0 1.0 +de 02_wind_on 1 46 0.0 1.0 +de 03_wind_off 1 46 0.0 1.0 de 04_res 1 46 0.0 0.0 de 05_nuclear 1 46 0.0 0.0 de 06_coal 1 46 0.0 0.0 de 07_gas 1 46 0.0 0.0 de 08_non-res 1 46 0.0 0.0 de 09_hydro_pump 1 46 0.0 0.0 -de 01_solar 1 47 1.0 0.0 -de 02_wind_on 1 47 1.0 0.0 -de 03_wind_off 1 47 1.0 0.0 +de 01_solar 1 47 0.0 1.0 +de 02_wind_on 1 47 0.0 1.0 +de 03_wind_off 1 47 0.0 1.0 de 04_res 1 47 0.0 0.0 de 05_nuclear 1 47 0.0 0.0 de 06_coal 1 47 0.0 0.0 de 07_gas 1 47 0.0 0.0 de 08_non-res 1 47 0.0 0.0 de 09_hydro_pump 1 47 0.0 0.0 -de 01_solar 1 48 1.0 0.0 -de 02_wind_on 1 48 1.0 0.0 -de 03_wind_off 1 48 1.0 0.0 +de 01_solar 1 48 0.0 1.0 +de 02_wind_on 1 48 0.0 1.0 +de 03_wind_off 1 48 0.0 1.0 de 04_res 1 48 0.0 0.0 de 05_nuclear 1 48 0.0 0.0 de 06_coal 1 48 0.0 0.0 de 07_gas 1 48 0.0 0.0 de 08_non-res 1 48 0.0 0.0 de 09_hydro_pump 1 48 0.0 0.0 -de 01_solar 1 49 1.0 0.0 -de 02_wind_on 1 49 1.0 0.0 -de 03_wind_off 1 49 1.0 0.0 +de 01_solar 1 49 0.0 1.0 +de 02_wind_on 1 49 0.0 1.0 +de 03_wind_off 1 49 0.0 1.0 de 04_res 1 49 0.0 0.0 de 05_nuclear 1 49 0.0 0.0 de 06_coal 1 49 0.0 0.0 de 07_gas 1 49 0.0 0.0 de 08_non-res 1 49 0.0 0.0 de 09_hydro_pump 1 49 0.0 0.0 -de 01_solar 1 50 1.0 0.0 -de 02_wind_on 1 50 1.0 0.0 -de 03_wind_off 1 50 1.0 0.0 +de 01_solar 1 50 0.0 1.0 +de 02_wind_on 1 50 0.0 1.0 +de 03_wind_off 1 50 0.0 1.0 de 04_res 1 50 0.0 0.0 de 05_nuclear 1 50 0.0 0.0 de 06_coal 1 50 0.0 0.0 de 07_gas 1 50 0.0 0.0 de 08_non-res 1 50 0.0 0.0 de 09_hydro_pump 1 50 0.0 0.0 -de 01_solar 1 51 1.0 0.0 -de 02_wind_on 1 51 1.0 0.0 -de 03_wind_off 1 51 1.0 0.0 +de 01_solar 1 51 0.0 1.0 +de 02_wind_on 1 51 0.0 1.0 +de 03_wind_off 1 51 0.0 1.0 de 04_res 1 51 0.0 0.0 de 05_nuclear 1 51 0.0 0.0 de 06_coal 1 51 0.0 0.0 de 07_gas 1 51 0.0 0.0 de 08_non-res 1 51 0.0 0.0 de 09_hydro_pump 1 51 0.0 0.0 -de 01_solar 1 52 1.0 0.0 -de 02_wind_on 1 52 1.0 0.0 -de 03_wind_off 1 52 1.0 0.0 +de 01_solar 1 52 0.0 1.0 +de 02_wind_on 1 52 0.0 1.0 +de 03_wind_off 1 52 0.0 1.0 de 04_res 1 52 0.0 0.0 de 05_nuclear 1 52 0.0 0.0 de 06_coal 1 52 0.0 0.0 de 07_gas 1 52 0.0 0.0 de 08_non-res 1 52 0.0 0.0 de 09_hydro_pump 1 52 0.0 0.0 -de 01_solar 1 53 1.0 0.0 -de 02_wind_on 1 53 1.0 0.0 -de 03_wind_off 1 53 1.0 0.0 +de 01_solar 1 53 0.0 1.0 +de 02_wind_on 1 53 0.0 1.0 +de 03_wind_off 1 53 0.0 1.0 de 04_res 1 53 0.0 0.0 de 05_nuclear 1 53 0.0 0.0 de 06_coal 1 53 0.0 0.0 de 07_gas 1 53 0.0 0.0 de 08_non-res 1 53 0.0 0.0 de 09_hydro_pump 1 53 0.0 0.0 -de 01_solar 1 54 1.0 0.0 -de 02_wind_on 1 54 1.0 0.0 -de 03_wind_off 1 54 1.0 0.0 +de 01_solar 1 54 0.0 1.0 +de 02_wind_on 1 54 0.0 1.0 +de 03_wind_off 1 54 0.0 1.0 de 04_res 1 54 0.0 0.0 de 05_nuclear 1 54 0.0 0.0 de 06_coal 1 54 0.0 0.0 de 07_gas 1 54 0.0 0.0 de 08_non-res 1 54 0.0 0.0 de 09_hydro_pump 1 54 0.0 0.0 -de 01_solar 1 55 1.0 0.0 -de 02_wind_on 1 55 1.0 0.0 -de 03_wind_off 1 55 1.0 0.0 +de 01_solar 1 55 0.0 1.0 +de 02_wind_on 1 55 0.0 1.0 +de 03_wind_off 1 55 0.0 1.0 de 04_res 1 55 0.0 0.0 de 05_nuclear 1 55 0.0 0.0 de 06_coal 1 55 0.0 0.0 de 07_gas 1 55 0.0 0.0 de 08_non-res 1 55 0.0 0.0 de 09_hydro_pump 1 55 0.0 0.0 -de 01_solar 1 56 1.0 0.0 -de 02_wind_on 1 56 1.0 0.0 -de 03_wind_off 1 56 1.0 0.0 +de 01_solar 1 56 0.0 1.0 +de 02_wind_on 1 56 0.0 1.0 +de 03_wind_off 1 56 0.0 1.0 de 04_res 1 56 0.0 0.0 de 05_nuclear 1 56 0.0 0.0 de 06_coal 1 56 0.0 0.0 de 07_gas 1 56 0.0 0.0 de 08_non-res 1 56 0.0 0.0 de 09_hydro_pump 1 56 0.0 0.0 -de 01_solar 1 57 1.0 0.0 -de 02_wind_on 1 57 1.0 0.0 -de 03_wind_off 1 57 1.0 0.0 +de 01_solar 1 57 0.0 1.0 +de 02_wind_on 1 57 0.0 1.0 +de 03_wind_off 1 57 0.0 1.0 de 04_res 1 57 0.0 0.0 de 05_nuclear 1 57 0.0 0.0 de 06_coal 1 57 0.0 0.0 de 07_gas 1 57 0.0 0.0 de 08_non-res 1 57 0.0 0.0 de 09_hydro_pump 1 57 0.0 0.0 -de 01_solar 1 58 1.0 0.0 -de 02_wind_on 1 58 1.0 0.0 -de 03_wind_off 1 58 1.0 0.0 +de 01_solar 1 58 0.0 1.0 +de 02_wind_on 1 58 0.0 1.0 +de 03_wind_off 1 58 0.0 1.0 de 04_res 1 58 0.0 0.0 de 05_nuclear 1 58 0.0 0.0 de 06_coal 1 58 0.0 0.0 de 07_gas 1 58 0.0 0.0 de 08_non-res 1 58 0.0 0.0 de 09_hydro_pump 1 58 0.0 0.0 -de 01_solar 1 59 1.0 0.0 -de 02_wind_on 1 59 1.0 0.0 -de 03_wind_off 1 59 1.0 0.0 +de 01_solar 1 59 0.0 1.0 +de 02_wind_on 1 59 0.0 1.0 +de 03_wind_off 1 59 0.0 1.0 de 04_res 1 59 0.0 0.0 de 05_nuclear 1 59 0.0 0.0 de 06_coal 1 59 0.0 0.0 de 07_gas 1 59 0.0 0.0 de 08_non-res 1 59 0.0 0.0 de 09_hydro_pump 1 59 0.0 0.0 -de 01_solar 1 60 1.0 0.0 -de 02_wind_on 1 60 1.0 0.0 -de 03_wind_off 1 60 1.0 0.0 +de 01_solar 1 60 0.0 1.0 +de 02_wind_on 1 60 0.0 1.0 +de 03_wind_off 1 60 0.0 1.0 de 04_res 1 60 0.0 0.0 de 05_nuclear 1 60 0.0 0.0 de 06_coal 1 60 0.0 0.0 de 07_gas 1 60 0.0 0.0 de 08_non-res 1 60 0.0 0.0 de 09_hydro_pump 1 60 0.0 0.0 -de 01_solar 1 61 1.0 0.0 -de 02_wind_on 1 61 1.0 0.0 -de 03_wind_off 1 61 1.0 0.0 +de 01_solar 1 61 0.0 1.0 +de 02_wind_on 1 61 0.0 1.0 +de 03_wind_off 1 61 0.0 1.0 de 04_res 1 61 0.0 0.0 de 05_nuclear 1 61 0.0 0.0 de 06_coal 1 61 0.0 0.0 de 07_gas 1 61 0.0 0.0 de 08_non-res 1 61 0.0 0.0 de 09_hydro_pump 1 61 0.0 0.0 -de 01_solar 1 62 1.0 0.0 -de 02_wind_on 1 62 1.0 0.0 -de 03_wind_off 1 62 1.0 0.0 -de 04_res 1 62 1.0 0.0 +de 01_solar 1 62 0.0 1.0 +de 02_wind_on 1 62 0.0 1.0 +de 03_wind_off 1 62 0.0 1.0 +de 04_res 1 62 0.0 1.0 de 05_nuclear 1 62 0.0 0.0 de 06_coal 1 62 0.0 0.0 de 07_gas 1 62 0.0 0.0 de 08_non-res 1 62 0.0 0.0 de 09_hydro_pump 1 62 0.0 0.0 -de 01_solar 1 63 1.0 0.0 -de 02_wind_on 1 63 1.0 0.0 -de 03_wind_off 1 63 1.0 0.0 -de 04_res 1 63 1.0 0.0 +de 01_solar 1 63 0.0 1.0 +de 02_wind_on 1 63 0.0 1.0 +de 03_wind_off 1 63 0.0 1.0 +de 04_res 1 63 0.0 1.0 de 05_nuclear 1 63 0.0 0.0 de 06_coal 1 63 0.0 0.0 de 07_gas 1 63 0.0 0.0 de 08_non-res 1 63 0.0 0.0 de 09_hydro_pump 1 63 0.0 0.0 -de 01_solar 1 64 1.0 0.0 -de 02_wind_on 1 64 1.0 0.0 -de 03_wind_off 1 64 1.0 0.0 -de 04_res 1 64 1.0 0.0 +de 01_solar 1 64 0.0 1.0 +de 02_wind_on 1 64 0.0 1.0 +de 03_wind_off 1 64 0.0 1.0 +de 04_res 1 64 0.0 1.0 de 05_nuclear 1 64 0.0 0.0 de 06_coal 1 64 0.0 0.0 de 07_gas 1 64 0.0 0.0 de 08_non-res 1 64 0.0 0.0 de 09_hydro_pump 1 64 0.0 0.0 -de 01_solar 1 65 1.0 0.0 -de 02_wind_on 1 65 1.0 0.0 -de 03_wind_off 1 65 1.0 0.0 -de 04_res 1 65 1.0 0.0 +de 01_solar 1 65 0.0 1.0 +de 02_wind_on 1 65 0.0 1.0 +de 03_wind_off 1 65 0.0 1.0 +de 04_res 1 65 0.0 1.0 de 05_nuclear 1 65 0.0 0.0 de 06_coal 1 65 0.0 0.0 de 07_gas 1 65 0.0 0.0 de 08_non-res 1 65 0.0 0.0 de 09_hydro_pump 1 65 0.0 0.0 -de 01_solar 1 66 1.0 0.0 -de 02_wind_on 1 66 1.0 0.0 -de 03_wind_off 1 66 1.0 0.0 -de 04_res 1 66 1.0 0.0 +de 01_solar 1 66 0.0 1.0 +de 02_wind_on 1 66 0.0 1.0 +de 03_wind_off 1 66 0.0 1.0 +de 04_res 1 66 0.0 1.0 de 05_nuclear 1 66 0.0 0.0 de 06_coal 1 66 0.0 0.0 de 07_gas 1 66 0.0 0.0 de 08_non-res 1 66 0.0 0.0 de 09_hydro_pump 1 66 0.0 0.0 -de 01_solar 1 67 1.0 0.0 -de 02_wind_on 1 67 1.0 0.0 -de 03_wind_off 1 67 1.0 0.0 -de 04_res 1 67 1.0 0.0 +de 01_solar 1 67 0.0 1.0 +de 02_wind_on 1 67 0.0 1.0 +de 03_wind_off 1 67 0.0 1.0 +de 04_res 1 67 0.0 1.0 de 05_nuclear 1 67 0.0 0.0 de 06_coal 1 67 0.0 0.0 de 07_gas 1 67 0.0 0.0 de 08_non-res 1 67 0.0 0.0 de 09_hydro_pump 1 67 0.0 0.0 -de 01_solar 1 68 1.0 0.0 -de 02_wind_on 1 68 1.0 0.0 -de 03_wind_off 1 68 1.0 0.0 -de 04_res 1 68 1.0 0.0 +de 01_solar 1 68 0.0 1.0 +de 02_wind_on 1 68 0.0 1.0 +de 03_wind_off 1 68 0.0 1.0 +de 04_res 1 68 0.0 1.0 de 05_nuclear 1 68 0.0 0.0 de 06_coal 1 68 0.0 0.0 de 07_gas 1 68 0.0 0.0 de 08_non-res 1 68 0.0 0.0 de 09_hydro_pump 1 68 0.0 0.0 -de 01_solar 1 69 1.0 0.0 -de 02_wind_on 1 69 1.0 0.0 -de 03_wind_off 1 69 1.0 0.0 -de 04_res 1 69 1.0 0.0 +de 01_solar 1 69 0.0 1.0 +de 02_wind_on 1 69 0.0 1.0 +de 03_wind_off 1 69 0.0 1.0 +de 04_res 1 69 0.0 1.0 de 05_nuclear 1 69 0.0 0.0 de 06_coal 1 69 0.0 0.0 de 07_gas 1 69 0.0 0.0 de 08_non-res 1 69 0.0 0.0 de 09_hydro_pump 1 69 0.0 0.0 -de 01_solar 1 70 1.0 0.0 -de 02_wind_on 1 70 1.0 0.0 -de 03_wind_off 1 70 1.0 0.0 -de 04_res 1 70 1.0 0.0 +de 01_solar 1 70 0.0 1.0 +de 02_wind_on 1 70 0.0 1.0 +de 03_wind_off 1 70 0.0 1.0 +de 04_res 1 70 0.0 1.0 de 05_nuclear 1 70 0.0 0.0 de 06_coal 1 70 0.0 0.0 de 07_gas 1 70 0.0 0.0 de 08_non-res 1 70 0.0 0.0 de 09_hydro_pump 1 70 0.0 0.0 -de 01_solar 1 71 1.0 0.0 -de 02_wind_on 1 71 1.0 0.0 -de 03_wind_off 1 71 1.0 0.0 -de 04_res 1 71 1.0 0.0 +de 01_solar 1 71 0.0 1.0 +de 02_wind_on 1 71 0.0 1.0 +de 03_wind_off 1 71 0.0 1.0 +de 04_res 1 71 0.0 1.0 de 05_nuclear 1 71 0.0 0.0 de 06_coal 1 71 0.0 0.0 de 07_gas 1 71 0.0 0.0 de 08_non-res 1 71 0.0 0.0 de 09_hydro_pump 1 71 0.0 0.0 -de 01_solar 1 72 1.0 0.0 -de 02_wind_on 1 72 1.0 0.0 -de 03_wind_off 1 72 1.0 0.0 -de 04_res 1 72 1.0 0.0 +de 01_solar 1 72 0.0 1.0 +de 02_wind_on 1 72 0.0 1.0 +de 03_wind_off 1 72 0.0 1.0 +de 04_res 1 72 0.0 1.0 de 05_nuclear 1 72 0.0 0.0 de 06_coal 1 72 0.0 0.0 de 07_gas 1 72 0.0 0.0 de 08_non-res 1 72 0.0 0.0 de 09_hydro_pump 1 72 0.0 0.0 -de 01_solar 1 73 1.0 0.0 -de 02_wind_on 1 73 1.0 0.0 -de 03_wind_off 1 73 1.0 0.0 -de 04_res 1 73 1.0 0.0 +de 01_solar 1 73 0.0 1.0 +de 02_wind_on 1 73 0.0 1.0 +de 03_wind_off 1 73 0.0 1.0 +de 04_res 1 73 0.0 1.0 de 05_nuclear 1 73 0.0 0.0 de 06_coal 1 73 0.0 0.0 de 07_gas 1 73 0.0 0.0 de 08_non-res 1 73 0.0 0.0 de 09_hydro_pump 1 73 0.0 0.0 -de 01_solar 1 74 1.0 0.0 -de 02_wind_on 1 74 1.0 0.0 -de 03_wind_off 1 74 1.0 0.0 -de 04_res 1 74 1.0 0.0 +de 01_solar 1 74 0.0 1.0 +de 02_wind_on 1 74 0.0 1.0 +de 03_wind_off 1 74 0.0 1.0 +de 04_res 1 74 0.0 1.0 de 05_nuclear 1 74 0.0 0.0 de 06_coal 1 74 0.0 0.0 de 07_gas 1 74 0.0 0.0 de 08_non-res 1 74 0.0 0.0 de 09_hydro_pump 1 74 0.0 0.0 -de 01_solar 1 75 1.0 0.0 -de 02_wind_on 1 75 1.0 0.0 -de 03_wind_off 1 75 1.0 0.0 -de 04_res 1 75 1.0 0.0 +de 01_solar 1 75 0.0 1.0 +de 02_wind_on 1 75 0.0 1.0 +de 03_wind_off 1 75 0.0 1.0 +de 04_res 1 75 0.0 1.0 de 05_nuclear 1 75 0.0 0.0 de 06_coal 1 75 0.0 0.0 de 07_gas 1 75 0.0 0.0 de 08_non-res 1 75 0.0 0.0 de 09_hydro_pump 1 75 0.0 0.0 -de 01_solar 1 76 1.0 0.0 -de 02_wind_on 1 76 1.0 0.0 -de 03_wind_off 1 76 1.0 0.0 -de 04_res 1 76 1.0 0.0 +de 01_solar 1 76 0.0 1.0 +de 02_wind_on 1 76 0.0 1.0 +de 03_wind_off 1 76 0.0 1.0 +de 04_res 1 76 0.0 1.0 de 05_nuclear 1 76 0.0 0.0 de 06_coal 1 76 0.0 0.0 de 07_gas 1 76 0.0 0.0 de 08_non-res 1 76 0.0 0.0 de 09_hydro_pump 1 76 0.0 0.0 -de 01_solar 1 77 1.0 0.0 -de 02_wind_on 1 77 1.0 0.0 -de 03_wind_off 1 77 1.0 0.0 -de 04_res 1 77 1.0 0.0 +de 01_solar 1 77 0.0 1.0 +de 02_wind_on 1 77 0.0 1.0 +de 03_wind_off 1 77 0.0 1.0 +de 04_res 1 77 0.0 1.0 de 05_nuclear 1 77 0.0 0.0 de 06_coal 1 77 0.0 0.0 de 07_gas 1 77 0.0 0.0 de 08_non-res 1 77 0.0 0.0 de 09_hydro_pump 1 77 0.0 0.0 -de 01_solar 1 78 1.0 0.0 -de 02_wind_on 1 78 1.0 0.0 -de 03_wind_off 1 78 1.0 0.0 -de 04_res 1 78 1.0 0.0 +de 01_solar 1 78 0.0 1.0 +de 02_wind_on 1 78 0.0 1.0 +de 03_wind_off 1 78 0.0 1.0 +de 04_res 1 78 0.0 1.0 de 05_nuclear 1 78 0.0 0.0 de 06_coal 1 78 0.0 0.0 de 07_gas 1 78 0.0 0.0 de 08_non-res 1 78 0.0 0.0 de 09_hydro_pump 1 78 0.0 0.0 -de 01_solar 1 79 1.0 0.0 -de 02_wind_on 1 79 1.0 0.0 -de 03_wind_off 1 79 1.0 0.0 -de 04_res 1 79 1.0 0.0 +de 01_solar 1 79 0.0 1.0 +de 02_wind_on 1 79 0.0 1.0 +de 03_wind_off 1 79 0.0 1.0 +de 04_res 1 79 0.0 1.0 de 05_nuclear 1 79 0.0 0.0 de 06_coal 1 79 0.0 0.0 de 07_gas 1 79 0.0 0.0 de 08_non-res 1 79 0.0 0.0 de 09_hydro_pump 1 79 0.0 0.0 -de 01_solar 1 80 1.0 0.0 -de 02_wind_on 1 80 1.0 0.0 -de 03_wind_off 1 80 1.0 0.0 -de 04_res 1 80 1.0 0.0 +de 01_solar 1 80 0.0 1.0 +de 02_wind_on 1 80 0.0 1.0 +de 03_wind_off 1 80 0.0 1.0 +de 04_res 1 80 0.0 1.0 de 05_nuclear 1 80 0.0 0.0 de 06_coal 1 80 0.0 0.0 de 07_gas 1 80 0.0 0.0 de 08_non-res 1 80 0.0 0.0 de 09_hydro_pump 1 80 0.0 0.0 -de 01_solar 1 81 1.0 0.0 -de 02_wind_on 1 81 1.0 0.0 -de 03_wind_off 1 81 1.0 0.0 -de 04_res 1 81 1.0 0.0 +de 01_solar 1 81 0.0 1.0 +de 02_wind_on 1 81 0.0 1.0 +de 03_wind_off 1 81 0.0 1.0 +de 04_res 1 81 0.0 1.0 de 05_nuclear 1 81 0.0 0.0 de 06_coal 1 81 0.0 0.0 de 07_gas 1 81 0.0 0.0 de 08_non-res 1 81 0.0 0.0 de 09_hydro_pump 1 81 0.0 0.0 -de 01_solar 1 82 1.0 0.0 -de 02_wind_on 1 82 1.0 0.0 -de 03_wind_off 1 82 1.0 0.0 -de 04_res 1 82 1.0 0.0 -de 05_nuclear 1 82 1.0 0.0 +de 01_solar 1 82 0.0 1.0 +de 02_wind_on 1 82 0.0 1.0 +de 03_wind_off 1 82 0.0 1.0 +de 04_res 1 82 0.0 1.0 +de 05_nuclear 1 82 0.0 1.0 de 06_coal 1 82 0.0 0.0 de 07_gas 1 82 0.0 0.0 de 08_non-res 1 82 0.0 0.0 de 09_hydro_pump 1 82 0.0 0.0 -de 01_solar 1 83 1.0 0.0 -de 02_wind_on 1 83 1.0 0.0 -de 03_wind_off 1 83 1.0 0.0 -de 04_res 1 83 1.0 0.0 -de 05_nuclear 1 83 1.0 0.0 +de 01_solar 1 83 0.0 1.0 +de 02_wind_on 1 83 0.0 1.0 +de 03_wind_off 1 83 0.0 1.0 +de 04_res 1 83 0.0 1.0 +de 05_nuclear 1 83 0.0 1.0 de 06_coal 1 83 0.0 0.0 de 07_gas 1 83 0.0 0.0 de 08_non-res 1 83 0.0 0.0 de 09_hydro_pump 1 83 0.0 0.0 -de 01_solar 1 84 1.0 0.0 -de 02_wind_on 1 84 1.0 0.0 -de 03_wind_off 1 84 1.0 0.0 -de 04_res 1 84 1.0 0.0 -de 05_nuclear 1 84 1.0 0.0 +de 01_solar 1 84 0.0 1.0 +de 02_wind_on 1 84 0.0 1.0 +de 03_wind_off 1 84 0.0 1.0 +de 04_res 1 84 0.0 1.0 +de 05_nuclear 1 84 0.0 1.0 de 06_coal 1 84 0.0 0.0 de 07_gas 1 84 0.0 0.0 de 08_non-res 1 84 0.0 0.0 de 09_hydro_pump 1 84 0.0 0.0 -de 01_solar 1 85 1.0 0.0 -de 02_wind_on 1 85 1.0 0.0 -de 03_wind_off 1 85 1.0 0.0 -de 04_res 1 85 1.0 0.0 -de 05_nuclear 1 85 1.0 0.0 +de 01_solar 1 85 0.0 1.0 +de 02_wind_on 1 85 0.0 1.0 +de 03_wind_off 1 85 0.0 1.0 +de 04_res 1 85 0.0 1.0 +de 05_nuclear 1 85 0.0 1.0 de 06_coal 1 85 0.0 0.0 de 07_gas 1 85 0.0 0.0 de 08_non-res 1 85 0.0 0.0 de 09_hydro_pump 1 85 0.0 0.0 -de 01_solar 1 86 1.0 0.0 -de 02_wind_on 1 86 1.0 0.0 -de 03_wind_off 1 86 1.0 0.0 -de 04_res 1 86 1.0 0.0 -de 05_nuclear 1 86 1.0 0.0 +de 01_solar 1 86 0.0 1.0 +de 02_wind_on 1 86 0.0 1.0 +de 03_wind_off 1 86 0.0 1.0 +de 04_res 1 86 0.0 1.0 +de 05_nuclear 1 86 0.0 1.0 de 06_coal 1 86 0.0 0.0 de 07_gas 1 86 0.0 0.0 de 08_non-res 1 86 0.0 0.0 de 09_hydro_pump 1 86 0.0 0.0 -de 01_solar 1 87 1.0 0.0 -de 02_wind_on 1 87 1.0 0.0 -de 03_wind_off 1 87 1.0 0.0 -de 04_res 1 87 1.0 0.0 -de 05_nuclear 1 87 1.0 0.0 +de 01_solar 1 87 0.0 1.0 +de 02_wind_on 1 87 0.0 1.0 +de 03_wind_off 1 87 0.0 1.0 +de 04_res 1 87 0.0 1.0 +de 05_nuclear 1 87 0.0 1.0 de 06_coal 1 87 0.0 0.0 de 07_gas 1 87 0.0 0.0 de 08_non-res 1 87 0.0 0.0 de 09_hydro_pump 1 87 0.0 0.0 -de 01_solar 1 88 1.0 0.0 -de 02_wind_on 1 88 1.0 0.0 -de 03_wind_off 1 88 1.0 0.0 -de 04_res 1 88 1.0 0.0 -de 05_nuclear 1 88 1.0 0.0 +de 01_solar 1 88 0.0 1.0 +de 02_wind_on 1 88 0.0 1.0 +de 03_wind_off 1 88 0.0 1.0 +de 04_res 1 88 0.0 1.0 +de 05_nuclear 1 88 0.0 1.0 de 06_coal 1 88 0.0 0.0 de 07_gas 1 88 0.0 0.0 de 08_non-res 1 88 0.0 0.0 de 09_hydro_pump 1 88 0.0 0.0 -de 01_solar 1 89 1.0 0.0 -de 02_wind_on 1 89 1.0 0.0 -de 03_wind_off 1 89 1.0 0.0 -de 04_res 1 89 1.0 0.0 -de 05_nuclear 1 89 1.0 0.0 +de 01_solar 1 89 0.0 1.0 +de 02_wind_on 1 89 0.0 1.0 +de 03_wind_off 1 89 0.0 1.0 +de 04_res 1 89 0.0 1.0 +de 05_nuclear 1 89 0.0 1.0 de 06_coal 1 89 0.0 0.0 de 07_gas 1 89 0.0 0.0 de 08_non-res 1 89 0.0 0.0 de 09_hydro_pump 1 89 0.0 0.0 -de 01_solar 1 90 1.0 0.0 -de 02_wind_on 1 90 1.0 0.0 -de 03_wind_off 1 90 1.0 0.0 -de 04_res 1 90 1.0 0.0 -de 05_nuclear 1 90 1.0 0.0 +de 01_solar 1 90 0.0 1.0 +de 02_wind_on 1 90 0.0 1.0 +de 03_wind_off 1 90 0.0 1.0 +de 04_res 1 90 0.0 1.0 +de 05_nuclear 1 90 0.0 1.0 de 06_coal 1 90 0.0 0.0 de 07_gas 1 90 0.0 0.0 de 08_non-res 1 90 0.0 0.0 de 09_hydro_pump 1 90 0.0 0.0 -de 01_solar 1 91 1.0 0.0 -de 02_wind_on 1 91 1.0 0.0 -de 03_wind_off 1 91 1.0 0.0 -de 04_res 1 91 1.0 0.0 -de 05_nuclear 1 91 1.0 0.0 +de 01_solar 1 91 0.0 1.0 +de 02_wind_on 1 91 0.0 1.0 +de 03_wind_off 1 91 0.0 1.0 +de 04_res 1 91 0.0 1.0 +de 05_nuclear 1 91 0.0 1.0 de 06_coal 1 91 0.0 0.0 de 07_gas 1 91 0.0 0.0 de 08_non-res 1 91 0.0 0.0 de 09_hydro_pump 1 91 0.0 0.0 -de 01_solar 1 92 1.0 0.0 -de 02_wind_on 1 92 1.0 0.0 -de 03_wind_off 1 92 1.0 0.0 -de 04_res 1 92 1.0 0.0 -de 05_nuclear 1 92 1.0 0.0 +de 01_solar 1 92 0.0 1.0 +de 02_wind_on 1 92 0.0 1.0 +de 03_wind_off 1 92 0.0 1.0 +de 04_res 1 92 0.0 1.0 +de 05_nuclear 1 92 0.0 1.0 de 06_coal 1 92 0.0 0.0 de 07_gas 1 92 0.0 0.0 de 08_non-res 1 92 0.0 0.0 de 09_hydro_pump 1 92 0.0 0.0 -de 01_solar 1 93 1.0 0.0 -de 02_wind_on 1 93 1.0 0.0 -de 03_wind_off 1 93 1.0 0.0 -de 04_res 1 93 1.0 0.0 -de 05_nuclear 1 93 1.0 0.0 +de 01_solar 1 93 0.0 1.0 +de 02_wind_on 1 93 0.0 1.0 +de 03_wind_off 1 93 0.0 1.0 +de 04_res 1 93 0.0 1.0 +de 05_nuclear 1 93 0.0 1.0 de 06_coal 1 93 0.0 0.0 de 07_gas 1 93 0.0 0.0 de 08_non-res 1 93 0.0 0.0 de 09_hydro_pump 1 93 0.0 0.0 -de 01_solar 1 94 1.0 0.0 -de 02_wind_on 1 94 1.0 0.0 -de 03_wind_off 1 94 1.0 0.0 -de 04_res 1 94 1.0 0.0 -de 05_nuclear 1 94 1.0 0.0 +de 01_solar 1 94 0.0 1.0 +de 02_wind_on 1 94 0.0 1.0 +de 03_wind_off 1 94 0.0 1.0 +de 04_res 1 94 0.0 1.0 +de 05_nuclear 1 94 0.0 1.0 de 06_coal 1 94 0.0 0.0 de 07_gas 1 94 0.0 0.0 de 08_non-res 1 94 0.0 0.0 de 09_hydro_pump 1 94 0.0 0.0 -de 01_solar 1 95 1.0 0.0 -de 02_wind_on 1 95 1.0 0.0 -de 03_wind_off 1 95 1.0 0.0 -de 04_res 1 95 1.0 0.0 -de 05_nuclear 1 95 1.0 0.0 +de 01_solar 1 95 0.0 1.0 +de 02_wind_on 1 95 0.0 1.0 +de 03_wind_off 1 95 0.0 1.0 +de 04_res 1 95 0.0 1.0 +de 05_nuclear 1 95 0.0 1.0 de 06_coal 1 95 0.0 0.0 de 07_gas 1 95 0.0 0.0 de 08_non-res 1 95 0.0 0.0 de 09_hydro_pump 1 95 0.0 0.0 -de 01_solar 1 96 1.0 0.0 -de 02_wind_on 1 96 1.0 0.0 -de 03_wind_off 1 96 1.0 0.0 -de 04_res 1 96 1.0 0.0 -de 05_nuclear 1 96 1.0 0.0 +de 01_solar 1 96 0.0 1.0 +de 02_wind_on 1 96 0.0 1.0 +de 03_wind_off 1 96 0.0 1.0 +de 04_res 1 96 0.0 1.0 +de 05_nuclear 1 96 0.0 1.0 de 06_coal 1 96 0.0 0.0 de 07_gas 1 96 0.0 0.0 de 08_non-res 1 96 0.0 0.0 de 09_hydro_pump 1 96 0.0 0.0 -de 01_solar 1 97 1.0 0.0 -de 02_wind_on 1 97 1.0 0.0 -de 03_wind_off 1 97 1.0 0.0 -de 04_res 1 97 1.0 0.0 -de 05_nuclear 1 97 1.0 0.0 +de 01_solar 1 97 0.0 1.0 +de 02_wind_on 1 97 0.0 1.0 +de 03_wind_off 1 97 0.0 1.0 +de 04_res 1 97 0.0 1.0 +de 05_nuclear 1 97 0.0 1.0 de 06_coal 1 97 0.0 0.0 de 07_gas 1 97 0.0 0.0 de 08_non-res 1 97 0.0 0.0 de 09_hydro_pump 1 97 0.0 0.0 -de 01_solar 1 98 1.0 0.0 -de 02_wind_on 1 98 1.0 0.0 -de 03_wind_off 1 98 1.0 0.0 -de 04_res 1 98 1.0 0.0 -de 05_nuclear 1 98 1.0 0.0 +de 01_solar 1 98 0.0 1.0 +de 02_wind_on 1 98 0.0 1.0 +de 03_wind_off 1 98 0.0 1.0 +de 04_res 1 98 0.0 1.0 +de 05_nuclear 1 98 0.0 1.0 de 06_coal 1 98 0.0 0.0 de 07_gas 1 98 0.0 0.0 de 08_non-res 1 98 0.0 0.0 de 09_hydro_pump 1 98 0.0 0.0 -de 01_solar 1 99 1.0 0.0 -de 02_wind_on 1 99 1.0 0.0 -de 03_wind_off 1 99 1.0 0.0 -de 04_res 1 99 1.0 0.0 -de 05_nuclear 1 99 1.0 0.0 +de 01_solar 1 99 0.0 1.0 +de 02_wind_on 1 99 0.0 1.0 +de 03_wind_off 1 99 0.0 1.0 +de 04_res 1 99 0.0 1.0 +de 05_nuclear 1 99 0.0 1.0 de 06_coal 1 99 0.0 0.0 de 07_gas 1 99 0.0 0.0 de 08_non-res 1 99 0.0 0.0 de 09_hydro_pump 1 99 0.0 0.0 -de 01_solar 1 100 1.0 0.0 -de 02_wind_on 1 100 1.0 0.0 -de 03_wind_off 1 100 1.0 0.0 -de 04_res 1 100 1.0 0.0 -de 05_nuclear 1 100 1.0 0.0 +de 01_solar 1 100 0.0 1.0 +de 02_wind_on 1 100 0.0 1.0 +de 03_wind_off 1 100 0.0 1.0 +de 04_res 1 100 0.0 1.0 +de 05_nuclear 1 100 0.0 1.0 de 06_coal 1 100 0.0 0.0 de 07_gas 1 100 0.0 0.0 de 08_non-res 1 100 0.0 0.0 de 09_hydro_pump 1 100 0.0 0.0 -de 01_solar 1 101 1.0 0.0 -de 02_wind_on 1 101 1.0 0.0 -de 03_wind_off 1 101 1.0 0.0 -de 04_res 1 101 1.0 0.0 -de 05_nuclear 1 101 1.0 0.0 +de 01_solar 1 101 0.0 1.0 +de 02_wind_on 1 101 0.0 1.0 +de 03_wind_off 1 101 0.0 1.0 +de 04_res 1 101 0.0 1.0 +de 05_nuclear 1 101 0.0 1.0 de 06_coal 1 101 0.0 0.0 de 07_gas 1 101 0.0 0.0 de 08_non-res 1 101 0.0 0.0 de 09_hydro_pump 1 101 0.0 0.0 -de 01_solar 1 102 1.0 0.0 -de 02_wind_on 1 102 1.0 0.0 -de 03_wind_off 1 102 1.0 0.0 -de 04_res 1 102 1.0 0.0 -de 05_nuclear 1 102 1.0 0.0 -de 06_coal 1 102 1.0 0.0 +de 01_solar 1 102 0.0 1.0 +de 02_wind_on 1 102 0.0 1.0 +de 03_wind_off 1 102 0.0 1.0 +de 04_res 1 102 0.0 1.0 +de 05_nuclear 1 102 0.0 1.0 +de 06_coal 1 102 0.0 1.0 de 07_gas 1 102 0.0 0.0 de 08_non-res 1 102 0.0 0.0 de 09_hydro_pump 1 102 0.0 0.0 -de 01_solar 1 103 1.0 0.0 -de 02_wind_on 1 103 1.0 0.0 -de 03_wind_off 1 103 1.0 0.0 -de 04_res 1 103 1.0 0.0 -de 05_nuclear 1 103 1.0 0.0 -de 06_coal 1 103 1.0 0.0 +de 01_solar 1 103 0.0 1.0 +de 02_wind_on 1 103 0.0 1.0 +de 03_wind_off 1 103 0.0 1.0 +de 04_res 1 103 0.0 1.0 +de 05_nuclear 1 103 0.0 1.0 +de 06_coal 1 103 0.0 1.0 de 07_gas 1 103 0.0 0.0 de 08_non-res 1 103 0.0 0.0 de 09_hydro_pump 1 103 0.0 0.0 -de 01_solar 1 104 1.0 0.0 -de 02_wind_on 1 104 1.0 0.0 -de 03_wind_off 1 104 1.0 0.0 -de 04_res 1 104 1.0 0.0 -de 05_nuclear 1 104 1.0 0.0 -de 06_coal 1 104 1.0 0.0 +de 01_solar 1 104 0.0 1.0 +de 02_wind_on 1 104 0.0 1.0 +de 03_wind_off 1 104 0.0 1.0 +de 04_res 1 104 0.0 1.0 +de 05_nuclear 1 104 0.0 1.0 +de 06_coal 1 104 0.0 1.0 de 07_gas 1 104 0.0 0.0 de 08_non-res 1 104 0.0 0.0 de 09_hydro_pump 1 104 0.0 0.0 -de 01_solar 1 105 1.0 0.0 -de 02_wind_on 1 105 1.0 0.0 -de 03_wind_off 1 105 1.0 0.0 -de 04_res 1 105 1.0 0.0 -de 05_nuclear 1 105 1.0 0.0 -de 06_coal 1 105 1.0 0.0 +de 01_solar 1 105 0.0 1.0 +de 02_wind_on 1 105 0.0 1.0 +de 03_wind_off 1 105 0.0 1.0 +de 04_res 1 105 0.0 1.0 +de 05_nuclear 1 105 0.0 1.0 +de 06_coal 1 105 0.0 1.0 de 07_gas 1 105 0.0 0.0 de 08_non-res 1 105 0.0 0.0 de 09_hydro_pump 1 105 0.0 0.0 -de 01_solar 1 106 1.0 0.0 -de 02_wind_on 1 106 1.0 0.0 -de 03_wind_off 1 106 1.0 0.0 -de 04_res 1 106 1.0 0.0 -de 05_nuclear 1 106 1.0 0.0 -de 06_coal 1 106 1.0 0.0 +de 01_solar 1 106 0.0 1.0 +de 02_wind_on 1 106 0.0 1.0 +de 03_wind_off 1 106 0.0 1.0 +de 04_res 1 106 0.0 1.0 +de 05_nuclear 1 106 0.0 1.0 +de 06_coal 1 106 0.0 1.0 de 07_gas 1 106 0.0 0.0 de 08_non-res 1 106 0.0 0.0 de 09_hydro_pump 1 106 0.0 0.0 -de 01_solar 1 107 1.0 0.0 -de 02_wind_on 1 107 1.0 0.0 -de 03_wind_off 1 107 1.0 0.0 -de 04_res 1 107 1.0 0.0 -de 05_nuclear 1 107 1.0 0.0 -de 06_coal 1 107 1.0 0.0 +de 01_solar 1 107 0.0 1.0 +de 02_wind_on 1 107 0.0 1.0 +de 03_wind_off 1 107 0.0 1.0 +de 04_res 1 107 0.0 1.0 +de 05_nuclear 1 107 0.0 1.0 +de 06_coal 1 107 0.0 1.0 de 07_gas 1 107 0.0 0.0 de 08_non-res 1 107 0.0 0.0 de 09_hydro_pump 1 107 0.0 0.0 -de 01_solar 1 108 1.0 0.0 -de 02_wind_on 1 108 1.0 0.0 -de 03_wind_off 1 108 1.0 0.0 -de 04_res 1 108 1.0 0.0 -de 05_nuclear 1 108 1.0 0.0 -de 06_coal 1 108 1.0 0.0 +de 01_solar 1 108 0.0 1.0 +de 02_wind_on 1 108 0.0 1.0 +de 03_wind_off 1 108 0.0 1.0 +de 04_res 1 108 0.0 1.0 +de 05_nuclear 1 108 0.0 1.0 +de 06_coal 1 108 0.0 1.0 de 07_gas 1 108 0.0 0.0 de 08_non-res 1 108 0.0 0.0 de 09_hydro_pump 1 108 0.0 0.0 -de 01_solar 1 109 1.0 0.0 -de 02_wind_on 1 109 1.0 0.0 -de 03_wind_off 1 109 1.0 0.0 -de 04_res 1 109 1.0 0.0 -de 05_nuclear 1 109 1.0 0.0 -de 06_coal 1 109 1.0 0.0 +de 01_solar 1 109 0.0 1.0 +de 02_wind_on 1 109 0.0 1.0 +de 03_wind_off 1 109 0.0 1.0 +de 04_res 1 109 0.0 1.0 +de 05_nuclear 1 109 0.0 1.0 +de 06_coal 1 109 0.0 1.0 de 07_gas 1 109 0.0 0.0 de 08_non-res 1 109 0.0 0.0 de 09_hydro_pump 1 109 0.0 0.0 -de 01_solar 1 110 1.0 0.0 -de 02_wind_on 1 110 1.0 0.0 -de 03_wind_off 1 110 1.0 0.0 -de 04_res 1 110 1.0 0.0 -de 05_nuclear 1 110 1.0 0.0 -de 06_coal 1 110 1.0 0.0 +de 01_solar 1 110 0.0 1.0 +de 02_wind_on 1 110 0.0 1.0 +de 03_wind_off 1 110 0.0 1.0 +de 04_res 1 110 0.0 1.0 +de 05_nuclear 1 110 0.0 1.0 +de 06_coal 1 110 0.0 1.0 de 07_gas 1 110 0.0 0.0 de 08_non-res 1 110 0.0 0.0 de 09_hydro_pump 1 110 0.0 0.0 -de 01_solar 1 111 1.0 0.0 -de 02_wind_on 1 111 1.0 0.0 -de 03_wind_off 1 111 1.0 0.0 -de 04_res 1 111 1.0 0.0 -de 05_nuclear 1 111 1.0 0.0 -de 06_coal 1 111 1.0 0.0 +de 01_solar 1 111 0.0 1.0 +de 02_wind_on 1 111 0.0 1.0 +de 03_wind_off 1 111 0.0 1.0 +de 04_res 1 111 0.0 1.0 +de 05_nuclear 1 111 0.0 1.0 +de 06_coal 1 111 0.0 1.0 de 07_gas 1 111 0.0 0.0 de 08_non-res 1 111 0.0 0.0 de 09_hydro_pump 1 111 0.0 0.0 -de 01_solar 1 112 1.0 0.0 -de 02_wind_on 1 112 1.0 0.0 -de 03_wind_off 1 112 1.0 0.0 -de 04_res 1 112 1.0 0.0 -de 05_nuclear 1 112 1.0 0.0 -de 06_coal 1 112 1.0 0.0 +de 01_solar 1 112 0.0 1.0 +de 02_wind_on 1 112 0.0 1.0 +de 03_wind_off 1 112 0.0 1.0 +de 04_res 1 112 0.0 1.0 +de 05_nuclear 1 112 0.0 1.0 +de 06_coal 1 112 0.0 1.0 de 07_gas 1 112 0.0 0.0 de 08_non-res 1 112 0.0 0.0 de 09_hydro_pump 1 112 0.0 0.0 -de 01_solar 1 113 1.0 0.0 -de 02_wind_on 1 113 1.0 0.0 -de 03_wind_off 1 113 1.0 0.0 -de 04_res 1 113 1.0 0.0 -de 05_nuclear 1 113 1.0 0.0 -de 06_coal 1 113 1.0 0.0 +de 01_solar 1 113 0.0 1.0 +de 02_wind_on 1 113 0.0 1.0 +de 03_wind_off 1 113 0.0 1.0 +de 04_res 1 113 0.0 1.0 +de 05_nuclear 1 113 0.0 1.0 +de 06_coal 1 113 0.0 1.0 de 07_gas 1 113 0.0 0.0 de 08_non-res 1 113 0.0 0.0 de 09_hydro_pump 1 113 0.0 0.0 -de 01_solar 1 114 1.0 0.0 -de 02_wind_on 1 114 1.0 0.0 -de 03_wind_off 1 114 1.0 0.0 -de 04_res 1 114 1.0 0.0 -de 05_nuclear 1 114 1.0 0.0 -de 06_coal 1 114 1.0 0.0 +de 01_solar 1 114 0.0 1.0 +de 02_wind_on 1 114 0.0 1.0 +de 03_wind_off 1 114 0.0 1.0 +de 04_res 1 114 0.0 1.0 +de 05_nuclear 1 114 0.0 1.0 +de 06_coal 1 114 0.0 1.0 de 07_gas 1 114 0.0 0.0 de 08_non-res 1 114 0.0 0.0 de 09_hydro_pump 1 114 0.0 0.0 -de 01_solar 1 115 1.0 0.0 -de 02_wind_on 1 115 1.0 0.0 -de 03_wind_off 1 115 1.0 0.0 -de 04_res 1 115 1.0 0.0 -de 05_nuclear 1 115 1.0 0.0 -de 06_coal 1 115 1.0 0.0 +de 01_solar 1 115 0.0 1.0 +de 02_wind_on 1 115 0.0 1.0 +de 03_wind_off 1 115 0.0 1.0 +de 04_res 1 115 0.0 1.0 +de 05_nuclear 1 115 0.0 1.0 +de 06_coal 1 115 0.0 1.0 de 07_gas 1 115 0.0 0.0 de 08_non-res 1 115 0.0 0.0 de 09_hydro_pump 1 115 0.0 0.0 -de 01_solar 1 116 1.0 0.0 -de 02_wind_on 1 116 1.0 0.0 -de 03_wind_off 1 116 1.0 0.0 -de 04_res 1 116 1.0 0.0 -de 05_nuclear 1 116 1.0 0.0 -de 06_coal 1 116 1.0 0.0 +de 01_solar 1 116 0.0 1.0 +de 02_wind_on 1 116 0.0 1.0 +de 03_wind_off 1 116 0.0 1.0 +de 04_res 1 116 0.0 1.0 +de 05_nuclear 1 116 0.0 1.0 +de 06_coal 1 116 0.0 1.0 de 07_gas 1 116 0.0 0.0 de 08_non-res 1 116 0.0 0.0 de 09_hydro_pump 1 116 0.0 0.0 -de 01_solar 1 117 1.0 0.0 -de 02_wind_on 1 117 1.0 0.0 -de 03_wind_off 1 117 1.0 0.0 -de 04_res 1 117 1.0 0.0 -de 05_nuclear 1 117 1.0 0.0 -de 06_coal 1 117 1.0 0.0 +de 01_solar 1 117 0.0 1.0 +de 02_wind_on 1 117 0.0 1.0 +de 03_wind_off 1 117 0.0 1.0 +de 04_res 1 117 0.0 1.0 +de 05_nuclear 1 117 0.0 1.0 +de 06_coal 1 117 0.0 1.0 de 07_gas 1 117 0.0 0.0 de 08_non-res 1 117 0.0 0.0 de 09_hydro_pump 1 117 0.0 0.0 -de 01_solar 1 118 1.0 0.0 -de 02_wind_on 1 118 1.0 0.0 -de 03_wind_off 1 118 1.0 0.0 -de 04_res 1 118 1.0 0.0 -de 05_nuclear 1 118 1.0 0.0 -de 06_coal 1 118 1.0 0.0 +de 01_solar 1 118 0.0 1.0 +de 02_wind_on 1 118 0.0 1.0 +de 03_wind_off 1 118 0.0 1.0 +de 04_res 1 118 0.0 1.0 +de 05_nuclear 1 118 0.0 1.0 +de 06_coal 1 118 0.0 1.0 de 07_gas 1 118 0.0 0.0 de 08_non-res 1 118 0.0 0.0 de 09_hydro_pump 1 118 0.0 0.0 -de 01_solar 1 119 1.0 0.0 -de 02_wind_on 1 119 1.0 0.0 -de 03_wind_off 1 119 1.0 0.0 -de 04_res 1 119 1.0 0.0 -de 05_nuclear 1 119 1.0 0.0 -de 06_coal 1 119 1.0 0.0 +de 01_solar 1 119 0.0 1.0 +de 02_wind_on 1 119 0.0 1.0 +de 03_wind_off 1 119 0.0 1.0 +de 04_res 1 119 0.0 1.0 +de 05_nuclear 1 119 0.0 1.0 +de 06_coal 1 119 0.0 1.0 de 07_gas 1 119 0.0 0.0 de 08_non-res 1 119 0.0 0.0 de 09_hydro_pump 1 119 0.0 0.0 -de 01_solar 1 120 1.0 0.0 -de 02_wind_on 1 120 1.0 0.0 -de 03_wind_off 1 120 1.0 0.0 -de 04_res 1 120 1.0 0.0 -de 05_nuclear 1 120 1.0 0.0 -de 06_coal 1 120 1.0 0.0 +de 01_solar 1 120 0.0 1.0 +de 02_wind_on 1 120 0.0 1.0 +de 03_wind_off 1 120 0.0 1.0 +de 04_res 1 120 0.0 1.0 +de 05_nuclear 1 120 0.0 1.0 +de 06_coal 1 120 0.0 1.0 de 07_gas 1 120 0.0 0.0 de 08_non-res 1 120 0.0 0.0 de 09_hydro_pump 1 120 0.0 0.0 -de 01_solar 1 121 1.0 0.0 -de 02_wind_on 1 121 1.0 0.0 -de 03_wind_off 1 121 1.0 0.0 -de 04_res 1 121 1.0 0.0 -de 05_nuclear 1 121 1.0 0.0 -de 06_coal 1 121 1.0 0.0 +de 01_solar 1 121 0.0 1.0 +de 02_wind_on 1 121 0.0 1.0 +de 03_wind_off 1 121 0.0 1.0 +de 04_res 1 121 0.0 1.0 +de 05_nuclear 1 121 0.0 1.0 +de 06_coal 1 121 0.0 1.0 de 07_gas 1 121 0.0 0.0 de 08_non-res 1 121 0.0 0.0 de 09_hydro_pump 1 121 0.0 0.0 -de 01_solar 1 122 1.0 0.0 -de 02_wind_on 1 122 1.0 0.0 -de 03_wind_off 1 122 1.0 0.0 -de 04_res 1 122 1.0 0.0 -de 05_nuclear 1 122 1.0 0.0 -de 06_coal 1 122 1.0 0.0 -de 07_gas 1 122 1.0 0.0 +de 01_solar 1 122 0.0 1.0 +de 02_wind_on 1 122 0.0 1.0 +de 03_wind_off 1 122 0.0 1.0 +de 04_res 1 122 0.0 1.0 +de 05_nuclear 1 122 0.0 1.0 +de 06_coal 1 122 0.0 1.0 +de 07_gas 1 122 0.0 1.0 de 08_non-res 1 122 0.0 0.0 de 09_hydro_pump 1 122 0.0 0.0 -de 01_solar 1 123 1.0 0.0 -de 02_wind_on 1 123 1.0 0.0 -de 03_wind_off 1 123 1.0 0.0 -de 04_res 1 123 1.0 0.0 -de 05_nuclear 1 123 1.0 0.0 -de 06_coal 1 123 1.0 0.0 -de 07_gas 1 123 1.0 0.0 +de 01_solar 1 123 0.0 1.0 +de 02_wind_on 1 123 0.0 1.0 +de 03_wind_off 1 123 0.0 1.0 +de 04_res 1 123 0.0 1.0 +de 05_nuclear 1 123 0.0 1.0 +de 06_coal 1 123 0.0 1.0 +de 07_gas 1 123 0.0 1.0 de 08_non-res 1 123 0.0 0.0 de 09_hydro_pump 1 123 0.0 0.0 -de 01_solar 1 124 1.0 0.0 -de 02_wind_on 1 124 1.0 0.0 -de 03_wind_off 1 124 1.0 0.0 -de 04_res 1 124 1.0 0.0 -de 05_nuclear 1 124 1.0 0.0 -de 06_coal 1 124 1.0 0.0 -de 07_gas 1 124 1.0 0.0 +de 01_solar 1 124 0.0 1.0 +de 02_wind_on 1 124 0.0 1.0 +de 03_wind_off 1 124 0.0 1.0 +de 04_res 1 124 0.0 1.0 +de 05_nuclear 1 124 0.0 1.0 +de 06_coal 1 124 0.0 1.0 +de 07_gas 1 124 0.0 1.0 de 08_non-res 1 124 0.0 0.0 de 09_hydro_pump 1 124 0.0 0.0 -de 01_solar 1 125 1.0 0.0 -de 02_wind_on 1 125 1.0 0.0 -de 03_wind_off 1 125 1.0 0.0 -de 04_res 1 125 1.0 0.0 -de 05_nuclear 1 125 1.0 0.0 -de 06_coal 1 125 1.0 0.0 -de 07_gas 1 125 1.0 0.0 +de 01_solar 1 125 0.0 1.0 +de 02_wind_on 1 125 0.0 1.0 +de 03_wind_off 1 125 0.0 1.0 +de 04_res 1 125 0.0 1.0 +de 05_nuclear 1 125 0.0 1.0 +de 06_coal 1 125 0.0 1.0 +de 07_gas 1 125 0.0 1.0 de 08_non-res 1 125 0.0 0.0 de 09_hydro_pump 1 125 0.0 0.0 -de 01_solar 1 126 1.0 0.0 -de 02_wind_on 1 126 1.0 0.0 -de 03_wind_off 1 126 1.0 0.0 -de 04_res 1 126 1.0 0.0 -de 05_nuclear 1 126 1.0 0.0 -de 06_coal 1 126 1.0 0.0 -de 07_gas 1 126 1.0 0.0 +de 01_solar 1 126 0.0 1.0 +de 02_wind_on 1 126 0.0 1.0 +de 03_wind_off 1 126 0.0 1.0 +de 04_res 1 126 0.0 1.0 +de 05_nuclear 1 126 0.0 1.0 +de 06_coal 1 126 0.0 1.0 +de 07_gas 1 126 0.0 1.0 de 08_non-res 1 126 0.0 0.0 de 09_hydro_pump 1 126 0.0 0.0 -de 01_solar 1 127 1.0 0.0 -de 02_wind_on 1 127 1.0 0.0 -de 03_wind_off 1 127 1.0 0.0 -de 04_res 1 127 1.0 0.0 -de 05_nuclear 1 127 1.0 0.0 -de 06_coal 1 127 1.0 0.0 -de 07_gas 1 127 1.0 0.0 +de 01_solar 1 127 0.0 1.0 +de 02_wind_on 1 127 0.0 1.0 +de 03_wind_off 1 127 0.0 1.0 +de 04_res 1 127 0.0 1.0 +de 05_nuclear 1 127 0.0 1.0 +de 06_coal 1 127 0.0 1.0 +de 07_gas 1 127 0.0 1.0 de 08_non-res 1 127 0.0 0.0 de 09_hydro_pump 1 127 0.0 0.0 -de 01_solar 1 128 1.0 0.0 -de 02_wind_on 1 128 1.0 0.0 -de 03_wind_off 1 128 1.0 0.0 -de 04_res 1 128 1.0 0.0 -de 05_nuclear 1 128 1.0 0.0 -de 06_coal 1 128 1.0 0.0 -de 07_gas 1 128 1.0 0.0 +de 01_solar 1 128 0.0 1.0 +de 02_wind_on 1 128 0.0 1.0 +de 03_wind_off 1 128 0.0 1.0 +de 04_res 1 128 0.0 1.0 +de 05_nuclear 1 128 0.0 1.0 +de 06_coal 1 128 0.0 1.0 +de 07_gas 1 128 0.0 1.0 de 08_non-res 1 128 0.0 0.0 de 09_hydro_pump 1 128 0.0 0.0 -de 01_solar 1 129 1.0 0.0 -de 02_wind_on 1 129 1.0 0.0 -de 03_wind_off 1 129 1.0 0.0 -de 04_res 1 129 1.0 0.0 -de 05_nuclear 1 129 1.0 0.0 -de 06_coal 1 129 1.0 0.0 -de 07_gas 1 129 1.0 0.0 +de 01_solar 1 129 0.0 1.0 +de 02_wind_on 1 129 0.0 1.0 +de 03_wind_off 1 129 0.0 1.0 +de 04_res 1 129 0.0 1.0 +de 05_nuclear 1 129 0.0 1.0 +de 06_coal 1 129 0.0 1.0 +de 07_gas 1 129 0.0 1.0 de 08_non-res 1 129 0.0 0.0 de 09_hydro_pump 1 129 0.0 0.0 -de 01_solar 1 130 1.0 0.0 -de 02_wind_on 1 130 1.0 0.0 -de 03_wind_off 1 130 1.0 0.0 -de 04_res 1 130 1.0 0.0 -de 05_nuclear 1 130 1.0 0.0 -de 06_coal 1 130 1.0 0.0 -de 07_gas 1 130 1.0 0.0 +de 01_solar 1 130 0.0 1.0 +de 02_wind_on 1 130 0.0 1.0 +de 03_wind_off 1 130 0.0 1.0 +de 04_res 1 130 0.0 1.0 +de 05_nuclear 1 130 0.0 1.0 +de 06_coal 1 130 0.0 1.0 +de 07_gas 1 130 0.0 1.0 de 08_non-res 1 130 0.0 0.0 de 09_hydro_pump 1 130 0.0 0.0 -de 01_solar 1 131 1.0 0.0 -de 02_wind_on 1 131 1.0 0.0 -de 03_wind_off 1 131 1.0 0.0 -de 04_res 1 131 1.0 0.0 -de 05_nuclear 1 131 1.0 0.0 -de 06_coal 1 131 1.0 0.0 -de 07_gas 1 131 1.0 0.0 +de 01_solar 1 131 0.0 1.0 +de 02_wind_on 1 131 0.0 1.0 +de 03_wind_off 1 131 0.0 1.0 +de 04_res 1 131 0.0 1.0 +de 05_nuclear 1 131 0.0 1.0 +de 06_coal 1 131 0.0 1.0 +de 07_gas 1 131 0.0 1.0 de 08_non-res 1 131 0.0 0.0 de 09_hydro_pump 1 131 0.0 0.0 -de 01_solar 1 132 1.0 0.0 -de 02_wind_on 1 132 1.0 0.0 -de 03_wind_off 1 132 1.0 0.0 -de 04_res 1 132 1.0 0.0 -de 05_nuclear 1 132 1.0 0.0 -de 06_coal 1 132 1.0 0.0 -de 07_gas 1 132 1.0 0.0 +de 01_solar 1 132 0.0 1.0 +de 02_wind_on 1 132 0.0 1.0 +de 03_wind_off 1 132 0.0 1.0 +de 04_res 1 132 0.0 1.0 +de 05_nuclear 1 132 0.0 1.0 +de 06_coal 1 132 0.0 1.0 +de 07_gas 1 132 0.0 1.0 de 08_non-res 1 132 0.0 0.0 de 09_hydro_pump 1 132 0.0 0.0 -de 01_solar 1 133 1.0 0.0 -de 02_wind_on 1 133 1.0 0.0 -de 03_wind_off 1 133 1.0 0.0 -de 04_res 1 133 1.0 0.0 -de 05_nuclear 1 133 1.0 0.0 -de 06_coal 1 133 1.0 0.0 -de 07_gas 1 133 1.0 0.0 +de 01_solar 1 133 0.0 1.0 +de 02_wind_on 1 133 0.0 1.0 +de 03_wind_off 1 133 0.0 1.0 +de 04_res 1 133 0.0 1.0 +de 05_nuclear 1 133 0.0 1.0 +de 06_coal 1 133 0.0 1.0 +de 07_gas 1 133 0.0 1.0 de 08_non-res 1 133 0.0 0.0 de 09_hydro_pump 1 133 0.0 0.0 -de 01_solar 1 134 1.0 0.0 -de 02_wind_on 1 134 1.0 0.0 -de 03_wind_off 1 134 1.0 0.0 -de 04_res 1 134 1.0 0.0 -de 05_nuclear 1 134 1.0 0.0 -de 06_coal 1 134 1.0 0.0 -de 07_gas 1 134 1.0 0.0 +de 01_solar 1 134 0.0 1.0 +de 02_wind_on 1 134 0.0 1.0 +de 03_wind_off 1 134 0.0 1.0 +de 04_res 1 134 0.0 1.0 +de 05_nuclear 1 134 0.0 1.0 +de 06_coal 1 134 0.0 1.0 +de 07_gas 1 134 0.0 1.0 de 08_non-res 1 134 0.0 0.0 de 09_hydro_pump 1 134 0.0 0.0 -de 01_solar 1 135 1.0 0.0 -de 02_wind_on 1 135 1.0 0.0 -de 03_wind_off 1 135 1.0 0.0 -de 04_res 1 135 1.0 0.0 -de 05_nuclear 1 135 1.0 0.0 -de 06_coal 1 135 1.0 0.0 -de 07_gas 1 135 1.0 0.0 +de 01_solar 1 135 0.0 1.0 +de 02_wind_on 1 135 0.0 1.0 +de 03_wind_off 1 135 0.0 1.0 +de 04_res 1 135 0.0 1.0 +de 05_nuclear 1 135 0.0 1.0 +de 06_coal 1 135 0.0 1.0 +de 07_gas 1 135 0.0 1.0 de 08_non-res 1 135 0.0 0.0 de 09_hydro_pump 1 135 0.0 0.0 -de 01_solar 1 136 1.0 0.0 -de 02_wind_on 1 136 1.0 0.0 -de 03_wind_off 1 136 1.0 0.0 -de 04_res 1 136 1.0 0.0 -de 05_nuclear 1 136 1.0 0.0 -de 06_coal 1 136 1.0 0.0 -de 07_gas 1 136 1.0 0.0 +de 01_solar 1 136 0.0 1.0 +de 02_wind_on 1 136 0.0 1.0 +de 03_wind_off 1 136 0.0 1.0 +de 04_res 1 136 0.0 1.0 +de 05_nuclear 1 136 0.0 1.0 +de 06_coal 1 136 0.0 1.0 +de 07_gas 1 136 0.0 1.0 de 08_non-res 1 136 0.0 0.0 de 09_hydro_pump 1 136 0.0 0.0 -de 01_solar 1 137 1.0 0.0 -de 02_wind_on 1 137 1.0 0.0 -de 03_wind_off 1 137 1.0 0.0 -de 04_res 1 137 1.0 0.0 -de 05_nuclear 1 137 1.0 0.0 -de 06_coal 1 137 1.0 0.0 -de 07_gas 1 137 1.0 0.0 +de 01_solar 1 137 0.0 1.0 +de 02_wind_on 1 137 0.0 1.0 +de 03_wind_off 1 137 0.0 1.0 +de 04_res 1 137 0.0 1.0 +de 05_nuclear 1 137 0.0 1.0 +de 06_coal 1 137 0.0 1.0 +de 07_gas 1 137 0.0 1.0 de 08_non-res 1 137 0.0 0.0 de 09_hydro_pump 1 137 0.0 0.0 -de 01_solar 1 138 1.0 0.0 -de 02_wind_on 1 138 1.0 0.0 -de 03_wind_off 1 138 1.0 0.0 -de 04_res 1 138 1.0 0.0 -de 05_nuclear 1 138 1.0 0.0 -de 06_coal 1 138 1.0 0.0 -de 07_gas 1 138 1.0 0.0 +de 01_solar 1 138 0.0 1.0 +de 02_wind_on 1 138 0.0 1.0 +de 03_wind_off 1 138 0.0 1.0 +de 04_res 1 138 0.0 1.0 +de 05_nuclear 1 138 0.0 1.0 +de 06_coal 1 138 0.0 1.0 +de 07_gas 1 138 0.0 1.0 de 08_non-res 1 138 0.0 0.0 de 09_hydro_pump 1 138 0.0 0.0 -de 01_solar 1 139 1.0 0.0 -de 02_wind_on 1 139 1.0 0.0 -de 03_wind_off 1 139 1.0 0.0 -de 04_res 1 139 1.0 0.0 -de 05_nuclear 1 139 1.0 0.0 -de 06_coal 1 139 1.0 0.0 -de 07_gas 1 139 1.0 0.0 +de 01_solar 1 139 0.0 1.0 +de 02_wind_on 1 139 0.0 1.0 +de 03_wind_off 1 139 0.0 1.0 +de 04_res 1 139 0.0 1.0 +de 05_nuclear 1 139 0.0 1.0 +de 06_coal 1 139 0.0 1.0 +de 07_gas 1 139 0.0 1.0 de 08_non-res 1 139 0.0 0.0 de 09_hydro_pump 1 139 0.0 0.0 -de 01_solar 1 140 1.0 0.0 -de 02_wind_on 1 140 1.0 0.0 -de 03_wind_off 1 140 1.0 0.0 -de 04_res 1 140 1.0 0.0 -de 05_nuclear 1 140 1.0 0.0 -de 06_coal 1 140 1.0 0.0 -de 07_gas 1 140 1.0 0.0 +de 01_solar 1 140 0.0 1.0 +de 02_wind_on 1 140 0.0 1.0 +de 03_wind_off 1 140 0.0 1.0 +de 04_res 1 140 0.0 1.0 +de 05_nuclear 1 140 0.0 1.0 +de 06_coal 1 140 0.0 1.0 +de 07_gas 1 140 0.0 1.0 de 08_non-res 1 140 0.0 0.0 de 09_hydro_pump 1 140 0.0 0.0 -de 01_solar 1 141 1.0 0.0 -de 02_wind_on 1 141 1.0 0.0 -de 03_wind_off 1 141 1.0 0.0 -de 04_res 1 141 1.0 0.0 -de 05_nuclear 1 141 1.0 0.0 -de 06_coal 1 141 1.0 0.0 -de 07_gas 1 141 1.0 0.0 +de 01_solar 1 141 0.0 1.0 +de 02_wind_on 1 141 0.0 1.0 +de 03_wind_off 1 141 0.0 1.0 +de 04_res 1 141 0.0 1.0 +de 05_nuclear 1 141 0.0 1.0 +de 06_coal 1 141 0.0 1.0 +de 07_gas 1 141 0.0 1.0 de 08_non-res 1 141 0.0 0.0 de 09_hydro_pump 1 141 0.0 0.0 -de 01_solar 1 142 1.0 0.0 -de 02_wind_on 1 142 1.0 0.0 -de 03_wind_off 1 142 1.0 0.0 -de 04_res 1 142 1.0 0.0 -de 05_nuclear 1 142 1.0 0.0 -de 06_coal 1 142 1.0 0.0 -de 07_gas 1 142 1.0 0.0 -de 08_non-res 1 142 1.0 0.0 +de 01_solar 1 142 0.0 1.0 +de 02_wind_on 1 142 0.0 1.0 +de 03_wind_off 1 142 0.0 1.0 +de 04_res 1 142 0.0 1.0 +de 05_nuclear 1 142 0.0 1.0 +de 06_coal 1 142 0.0 1.0 +de 07_gas 1 142 0.0 1.0 +de 08_non-res 1 142 0.0 1.0 de 09_hydro_pump 1 142 0.0 0.0 -de 01_solar 1 143 1.0 0.0 -de 02_wind_on 1 143 1.0 0.0 -de 03_wind_off 1 143 1.0 0.0 -de 04_res 1 143 1.0 0.0 -de 05_nuclear 1 143 1.0 0.0 -de 06_coal 1 143 1.0 0.0 -de 07_gas 1 143 1.0 0.0 -de 08_non-res 1 143 1.0 0.0 +de 01_solar 1 143 0.0 1.0 +de 02_wind_on 1 143 0.0 1.0 +de 03_wind_off 1 143 0.0 1.0 +de 04_res 1 143 0.0 1.0 +de 05_nuclear 1 143 0.0 1.0 +de 06_coal 1 143 0.0 1.0 +de 07_gas 1 143 0.0 1.0 +de 08_non-res 1 143 0.0 1.0 de 09_hydro_pump 1 143 0.0 0.0 -de 01_solar 1 144 1.0 0.0 -de 02_wind_on 1 144 1.0 0.0 -de 03_wind_off 1 144 1.0 0.0 -de 04_res 1 144 1.0 0.0 -de 05_nuclear 1 144 1.0 0.0 -de 06_coal 1 144 1.0 0.0 -de 07_gas 1 144 1.0 0.0 -de 08_non-res 1 144 1.0 0.0 +de 01_solar 1 144 0.0 1.0 +de 02_wind_on 1 144 0.0 1.0 +de 03_wind_off 1 144 0.0 1.0 +de 04_res 1 144 0.0 1.0 +de 05_nuclear 1 144 0.0 1.0 +de 06_coal 1 144 0.0 1.0 +de 07_gas 1 144 0.0 1.0 +de 08_non-res 1 144 0.0 1.0 de 09_hydro_pump 1 144 0.0 0.0 -de 01_solar 1 145 1.0 0.0 -de 02_wind_on 1 145 1.0 0.0 -de 03_wind_off 1 145 1.0 0.0 -de 04_res 1 145 1.0 0.0 -de 05_nuclear 1 145 1.0 0.0 -de 06_coal 1 145 1.0 0.0 -de 07_gas 1 145 1.0 0.0 -de 08_non-res 1 145 1.0 0.0 +de 01_solar 1 145 0.0 1.0 +de 02_wind_on 1 145 0.0 1.0 +de 03_wind_off 1 145 0.0 1.0 +de 04_res 1 145 0.0 1.0 +de 05_nuclear 1 145 0.0 1.0 +de 06_coal 1 145 0.0 1.0 +de 07_gas 1 145 0.0 1.0 +de 08_non-res 1 145 0.0 1.0 de 09_hydro_pump 1 145 0.0 0.0 -de 01_solar 1 146 1.0 0.0 -de 02_wind_on 1 146 1.0 0.0 -de 03_wind_off 1 146 1.0 0.0 -de 04_res 1 146 1.0 0.0 -de 05_nuclear 1 146 1.0 0.0 -de 06_coal 1 146 1.0 0.0 -de 07_gas 1 146 1.0 0.0 -de 08_non-res 1 146 1.0 0.0 +de 01_solar 1 146 0.0 1.0 +de 02_wind_on 1 146 0.0 1.0 +de 03_wind_off 1 146 0.0 1.0 +de 04_res 1 146 0.0 1.0 +de 05_nuclear 1 146 0.0 1.0 +de 06_coal 1 146 0.0 1.0 +de 07_gas 1 146 0.0 1.0 +de 08_non-res 1 146 0.0 1.0 de 09_hydro_pump 1 146 0.0 0.0 -de 01_solar 1 147 1.0 0.0 -de 02_wind_on 1 147 1.0 0.0 -de 03_wind_off 1 147 1.0 0.0 -de 04_res 1 147 1.0 0.0 -de 05_nuclear 1 147 1.0 0.0 -de 06_coal 1 147 1.0 0.0 -de 07_gas 1 147 1.0 0.0 -de 08_non-res 1 147 1.0 0.0 +de 01_solar 1 147 0.0 1.0 +de 02_wind_on 1 147 0.0 1.0 +de 03_wind_off 1 147 0.0 1.0 +de 04_res 1 147 0.0 1.0 +de 05_nuclear 1 147 0.0 1.0 +de 06_coal 1 147 0.0 1.0 +de 07_gas 1 147 0.0 1.0 +de 08_non-res 1 147 0.0 1.0 de 09_hydro_pump 1 147 0.0 0.0 -de 01_solar 1 148 1.0 0.0 -de 02_wind_on 1 148 1.0 0.0 -de 03_wind_off 1 148 1.0 0.0 -de 04_res 1 148 1.0 0.0 -de 05_nuclear 1 148 1.0 0.0 -de 06_coal 1 148 1.0 0.0 -de 07_gas 1 148 1.0 0.0 -de 08_non-res 1 148 1.0 0.0 +de 01_solar 1 148 0.0 1.0 +de 02_wind_on 1 148 0.0 1.0 +de 03_wind_off 1 148 0.0 1.0 +de 04_res 1 148 0.0 1.0 +de 05_nuclear 1 148 0.0 1.0 +de 06_coal 1 148 0.0 1.0 +de 07_gas 1 148 0.0 1.0 +de 08_non-res 1 148 0.0 1.0 de 09_hydro_pump 1 148 0.0 0.0 -de 01_solar 1 149 1.0 0.0 -de 02_wind_on 1 149 1.0 0.0 -de 03_wind_off 1 149 1.0 0.0 -de 04_res 1 149 1.0 0.0 -de 05_nuclear 1 149 1.0 0.0 -de 06_coal 1 149 1.0 0.0 -de 07_gas 1 149 1.0 0.0 -de 08_non-res 1 149 1.0 0.0 +de 01_solar 1 149 0.0 1.0 +de 02_wind_on 1 149 0.0 1.0 +de 03_wind_off 1 149 0.0 1.0 +de 04_res 1 149 0.0 1.0 +de 05_nuclear 1 149 0.0 1.0 +de 06_coal 1 149 0.0 1.0 +de 07_gas 1 149 0.0 1.0 +de 08_non-res 1 149 0.0 1.0 de 09_hydro_pump 1 149 0.0 0.0 -de 01_solar 1 150 1.0 0.0 -de 02_wind_on 1 150 1.0 0.0 -de 03_wind_off 1 150 1.0 0.0 -de 04_res 1 150 1.0 0.0 -de 05_nuclear 1 150 1.0 0.0 -de 06_coal 1 150 1.0 0.0 -de 07_gas 1 150 1.0 0.0 -de 08_non-res 1 150 1.0 0.0 +de 01_solar 1 150 0.0 1.0 +de 02_wind_on 1 150 0.0 1.0 +de 03_wind_off 1 150 0.0 1.0 +de 04_res 1 150 0.0 1.0 +de 05_nuclear 1 150 0.0 1.0 +de 06_coal 1 150 0.0 1.0 +de 07_gas 1 150 0.0 1.0 +de 08_non-res 1 150 0.0 1.0 de 09_hydro_pump 1 150 0.0 0.0 -de 01_solar 1 151 1.0 0.0 -de 02_wind_on 1 151 1.0 0.0 -de 03_wind_off 1 151 1.0 0.0 -de 04_res 1 151 1.0 0.0 -de 05_nuclear 1 151 1.0 0.0 -de 06_coal 1 151 1.0 0.0 -de 07_gas 1 151 1.0 0.0 -de 08_non-res 1 151 1.0 0.0 +de 01_solar 1 151 0.0 1.0 +de 02_wind_on 1 151 0.0 1.0 +de 03_wind_off 1 151 0.0 1.0 +de 04_res 1 151 0.0 1.0 +de 05_nuclear 1 151 0.0 1.0 +de 06_coal 1 151 0.0 1.0 +de 07_gas 1 151 0.0 1.0 +de 08_non-res 1 151 0.0 1.0 de 09_hydro_pump 1 151 0.0 0.0 -de 01_solar 1 152 1.0 0.0 -de 02_wind_on 1 152 1.0 0.0 -de 03_wind_off 1 152 1.0 0.0 -de 04_res 1 152 1.0 0.0 -de 05_nuclear 1 152 1.0 0.0 -de 06_coal 1 152 1.0 0.0 -de 07_gas 1 152 1.0 0.0 -de 08_non-res 1 152 1.0 0.0 +de 01_solar 1 152 0.0 1.0 +de 02_wind_on 1 152 0.0 1.0 +de 03_wind_off 1 152 0.0 1.0 +de 04_res 1 152 0.0 1.0 +de 05_nuclear 1 152 0.0 1.0 +de 06_coal 1 152 0.0 1.0 +de 07_gas 1 152 0.0 1.0 +de 08_non-res 1 152 0.0 1.0 de 09_hydro_pump 1 152 0.0 0.0 -de 01_solar 1 153 1.0 0.0 -de 02_wind_on 1 153 1.0 0.0 -de 03_wind_off 1 153 1.0 0.0 -de 04_res 1 153 1.0 0.0 -de 05_nuclear 1 153 1.0 0.0 -de 06_coal 1 153 1.0 0.0 -de 07_gas 1 153 1.0 0.0 -de 08_non-res 1 153 1.0 0.0 +de 01_solar 1 153 0.0 1.0 +de 02_wind_on 1 153 0.0 1.0 +de 03_wind_off 1 153 0.0 1.0 +de 04_res 1 153 0.0 1.0 +de 05_nuclear 1 153 0.0 1.0 +de 06_coal 1 153 0.0 1.0 +de 07_gas 1 153 0.0 1.0 +de 08_non-res 1 153 0.0 1.0 de 09_hydro_pump 1 153 0.0 0.0 -de 01_solar 1 154 1.0 0.0 -de 02_wind_on 1 154 1.0 0.0 -de 03_wind_off 1 154 1.0 0.0 -de 04_res 1 154 1.0 0.0 -de 05_nuclear 1 154 1.0 0.0 -de 06_coal 1 154 1.0 0.0 -de 07_gas 1 154 1.0 0.0 -de 08_non-res 1 154 1.0 0.0 +de 01_solar 1 154 0.0 1.0 +de 02_wind_on 1 154 0.0 1.0 +de 03_wind_off 1 154 0.0 1.0 +de 04_res 1 154 0.0 1.0 +de 05_nuclear 1 154 0.0 1.0 +de 06_coal 1 154 0.0 1.0 +de 07_gas 1 154 0.0 1.0 +de 08_non-res 1 154 0.0 1.0 de 09_hydro_pump 1 154 0.0 0.0 -de 01_solar 1 155 1.0 0.0 -de 02_wind_on 1 155 1.0 0.0 -de 03_wind_off 1 155 1.0 0.0 -de 04_res 1 155 1.0 0.0 -de 05_nuclear 1 155 1.0 0.0 -de 06_coal 1 155 1.0 0.0 -de 07_gas 1 155 1.0 0.0 -de 08_non-res 1 155 1.0 0.0 +de 01_solar 1 155 0.0 1.0 +de 02_wind_on 1 155 0.0 1.0 +de 03_wind_off 1 155 0.0 1.0 +de 04_res 1 155 0.0 1.0 +de 05_nuclear 1 155 0.0 1.0 +de 06_coal 1 155 0.0 1.0 +de 07_gas 1 155 0.0 1.0 +de 08_non-res 1 155 0.0 1.0 de 09_hydro_pump 1 155 0.0 0.0 -de 01_solar 1 156 1.0 0.0 -de 02_wind_on 1 156 1.0 0.0 -de 03_wind_off 1 156 1.0 0.0 -de 04_res 1 156 1.0 0.0 -de 05_nuclear 1 156 1.0 0.0 -de 06_coal 1 156 1.0 0.0 -de 07_gas 1 156 1.0 0.0 -de 08_non-res 1 156 1.0 0.0 +de 01_solar 1 156 0.0 1.0 +de 02_wind_on 1 156 0.0 1.0 +de 03_wind_off 1 156 0.0 1.0 +de 04_res 1 156 0.0 1.0 +de 05_nuclear 1 156 0.0 1.0 +de 06_coal 1 156 0.0 1.0 +de 07_gas 1 156 0.0 1.0 +de 08_non-res 1 156 0.0 1.0 de 09_hydro_pump 1 156 0.0 0.0 -de 01_solar 1 157 1.0 0.0 -de 02_wind_on 1 157 1.0 0.0 -de 03_wind_off 1 157 1.0 0.0 -de 04_res 1 157 1.0 0.0 -de 05_nuclear 1 157 1.0 0.0 -de 06_coal 1 157 1.0 0.0 -de 07_gas 1 157 1.0 0.0 -de 08_non-res 1 157 1.0 0.0 +de 01_solar 1 157 0.0 1.0 +de 02_wind_on 1 157 0.0 1.0 +de 03_wind_off 1 157 0.0 1.0 +de 04_res 1 157 0.0 1.0 +de 05_nuclear 1 157 0.0 1.0 +de 06_coal 1 157 0.0 1.0 +de 07_gas 1 157 0.0 1.0 +de 08_non-res 1 157 0.0 1.0 de 09_hydro_pump 1 157 0.0 0.0 -de 01_solar 1 158 1.0 0.0 -de 02_wind_on 1 158 1.0 0.0 -de 03_wind_off 1 158 1.0 0.0 -de 04_res 1 158 1.0 0.0 -de 05_nuclear 1 158 1.0 0.0 -de 06_coal 1 158 1.0 0.0 -de 07_gas 1 158 1.0 0.0 -de 08_non-res 1 158 1.0 0.0 +de 01_solar 1 158 0.0 1.0 +de 02_wind_on 1 158 0.0 1.0 +de 03_wind_off 1 158 0.0 1.0 +de 04_res 1 158 0.0 1.0 +de 05_nuclear 1 158 0.0 1.0 +de 06_coal 1 158 0.0 1.0 +de 07_gas 1 158 0.0 1.0 +de 08_non-res 1 158 0.0 1.0 de 09_hydro_pump 1 158 0.0 0.0 -de 01_solar 1 159 1.0 0.0 -de 02_wind_on 1 159 1.0 0.0 -de 03_wind_off 1 159 1.0 0.0 -de 04_res 1 159 1.0 0.0 -de 05_nuclear 1 159 1.0 0.0 -de 06_coal 1 159 1.0 0.0 -de 07_gas 1 159 1.0 0.0 -de 08_non-res 1 159 1.0 0.0 +de 01_solar 1 159 0.0 1.0 +de 02_wind_on 1 159 0.0 1.0 +de 03_wind_off 1 159 0.0 1.0 +de 04_res 1 159 0.0 1.0 +de 05_nuclear 1 159 0.0 1.0 +de 06_coal 1 159 0.0 1.0 +de 07_gas 1 159 0.0 1.0 +de 08_non-res 1 159 0.0 1.0 de 09_hydro_pump 1 159 0.0 0.0 -de 01_solar 1 160 1.0 0.0 -de 02_wind_on 1 160 1.0 0.0 -de 03_wind_off 1 160 1.0 0.0 -de 04_res 1 160 1.0 0.0 -de 05_nuclear 1 160 1.0 0.0 -de 06_coal 1 160 1.0 0.0 -de 07_gas 1 160 1.0 0.0 -de 08_non-res 1 160 1.0 0.0 +de 01_solar 1 160 0.0 1.0 +de 02_wind_on 1 160 0.0 1.0 +de 03_wind_off 1 160 0.0 1.0 +de 04_res 1 160 0.0 1.0 +de 05_nuclear 1 160 0.0 1.0 +de 06_coal 1 160 0.0 1.0 +de 07_gas 1 160 0.0 1.0 +de 08_non-res 1 160 0.0 1.0 de 09_hydro_pump 1 160 0.0 0.0 -de 01_solar 1 161 1.0 0.0 -de 02_wind_on 1 161 1.0 0.0 -de 03_wind_off 1 161 1.0 0.0 -de 04_res 1 161 1.0 0.0 -de 05_nuclear 1 161 1.0 0.0 -de 06_coal 1 161 1.0 0.0 -de 07_gas 1 161 1.0 0.0 -de 08_non-res 1 161 1.0 0.0 +de 01_solar 1 161 0.0 1.0 +de 02_wind_on 1 161 0.0 1.0 +de 03_wind_off 1 161 0.0 1.0 +de 04_res 1 161 0.0 1.0 +de 05_nuclear 1 161 0.0 1.0 +de 06_coal 1 161 0.0 1.0 +de 07_gas 1 161 0.0 1.0 +de 08_non-res 1 161 0.0 1.0 de 09_hydro_pump 1 161 0.0 0.0 -de 01_solar 1 162 1.0 0.0 -de 02_wind_on 1 162 1.0 0.0 -de 03_wind_off 1 162 1.0 0.0 -de 04_res 1 162 1.0 0.0 -de 05_nuclear 1 162 1.0 0.0 -de 06_coal 1 162 1.0 0.0 -de 07_gas 1 162 1.0 0.0 -de 08_non-res 1 162 1.0 0.0 -de 09_hydro_pump 1 162 1.0 0.0 -de 01_solar 1 163 1.0 0.0 -de 02_wind_on 1 163 1.0 0.0 -de 03_wind_off 1 163 1.0 0.0 -de 04_res 1 163 1.0 0.0 -de 05_nuclear 1 163 1.0 0.0 -de 06_coal 1 163 1.0 0.0 -de 07_gas 1 163 1.0 0.0 -de 08_non-res 1 163 1.0 0.0 -de 09_hydro_pump 1 163 1.0 0.0 -de 01_solar 1 164 1.0 0.0 -de 02_wind_on 1 164 1.0 0.0 -de 03_wind_off 1 164 1.0 0.0 -de 04_res 1 164 1.0 0.0 -de 05_nuclear 1 164 1.0 0.0 -de 06_coal 1 164 1.0 0.0 -de 07_gas 1 164 1.0 0.0 -de 08_non-res 1 164 1.0 0.0 -de 09_hydro_pump 1 164 1.0 0.0 -de 01_solar 1 165 1.0 0.0 -de 02_wind_on 1 165 1.0 0.0 -de 03_wind_off 1 165 1.0 0.0 -de 04_res 1 165 1.0 0.0 -de 05_nuclear 1 165 1.0 0.0 -de 06_coal 1 165 1.0 0.0 -de 07_gas 1 165 1.0 0.0 -de 08_non-res 1 165 1.0 0.0 -de 09_hydro_pump 1 165 1.0 0.0 -de 01_solar 1 166 1.0 0.0 -de 02_wind_on 1 166 1.0 0.0 -de 03_wind_off 1 166 1.0 0.0 -de 04_res 1 166 1.0 0.0 -de 05_nuclear 1 166 1.0 0.0 -de 06_coal 1 166 1.0 0.0 -de 07_gas 1 166 1.0 0.0 -de 08_non-res 1 166 1.0 0.0 -de 09_hydro_pump 1 166 1.0 0.0 -de 01_solar 1 167 1.0 0.0 -de 02_wind_on 1 167 1.0 0.0 -de 03_wind_off 1 167 1.0 0.0 -de 04_res 1 167 1.0 0.0 -de 05_nuclear 1 167 1.0 0.0 -de 06_coal 1 167 1.0 0.0 -de 07_gas 1 167 1.0 0.0 -de 08_non-res 1 167 1.0 0.0 -de 09_hydro_pump 1 167 1.0 0.0 -de 01_solar 1 168 1.0 0.0 -de 02_wind_on 1 168 1.0 0.0 -de 03_wind_off 1 168 1.0 0.0 -de 04_res 1 168 1.0 0.0 -de 05_nuclear 1 168 1.0 0.0 -de 06_coal 1 168 1.0 0.0 -de 07_gas 1 168 1.0 0.0 -de 08_non-res 1 168 1.0 0.0 -de 09_hydro_pump 1 168 1.0 0.0 +de 01_solar 1 162 0.0 1.0 +de 02_wind_on 1 162 0.0 1.0 +de 03_wind_off 1 162 0.0 1.0 +de 04_res 1 162 0.0 1.0 +de 05_nuclear 1 162 0.0 1.0 +de 06_coal 1 162 0.0 1.0 +de 07_gas 1 162 0.0 1.0 +de 08_non-res 1 162 0.0 1.0 +de 09_hydro_pump 1 162 0.0 1.0 +de 01_solar 1 163 0.0 1.0 +de 02_wind_on 1 163 0.0 1.0 +de 03_wind_off 1 163 0.0 1.0 +de 04_res 1 163 0.0 1.0 +de 05_nuclear 1 163 0.0 1.0 +de 06_coal 1 163 0.0 1.0 +de 07_gas 1 163 0.0 1.0 +de 08_non-res 1 163 0.0 1.0 +de 09_hydro_pump 1 163 0.0 1.0 +de 01_solar 1 164 0.0 1.0 +de 02_wind_on 1 164 0.0 1.0 +de 03_wind_off 1 164 0.0 1.0 +de 04_res 1 164 0.0 1.0 +de 05_nuclear 1 164 0.0 1.0 +de 06_coal 1 164 0.0 1.0 +de 07_gas 1 164 0.0 1.0 +de 08_non-res 1 164 0.0 1.0 +de 09_hydro_pump 1 164 0.0 1.0 +de 01_solar 1 165 0.0 1.0 +de 02_wind_on 1 165 0.0 1.0 +de 03_wind_off 1 165 0.0 1.0 +de 04_res 1 165 0.0 1.0 +de 05_nuclear 1 165 0.0 1.0 +de 06_coal 1 165 0.0 1.0 +de 07_gas 1 165 0.0 1.0 +de 08_non-res 1 165 0.0 1.0 +de 09_hydro_pump 1 165 0.0 1.0 +de 01_solar 1 166 0.0 1.0 +de 02_wind_on 1 166 0.0 1.0 +de 03_wind_off 1 166 0.0 1.0 +de 04_res 1 166 0.0 1.0 +de 05_nuclear 1 166 0.0 1.0 +de 06_coal 1 166 0.0 1.0 +de 07_gas 1 166 0.0 1.0 +de 08_non-res 1 166 0.0 1.0 +de 09_hydro_pump 1 166 0.0 1.0 +de 01_solar 1 167 0.0 1.0 +de 02_wind_on 1 167 0.0 1.0 +de 03_wind_off 1 167 0.0 1.0 +de 04_res 1 167 0.0 1.0 +de 05_nuclear 1 167 0.0 1.0 +de 06_coal 1 167 0.0 1.0 +de 07_gas 1 167 0.0 1.0 +de 08_non-res 1 167 0.0 1.0 +de 09_hydro_pump 1 167 0.0 1.0 +de 01_solar 1 168 0.0 1.0 +de 02_wind_on 1 168 0.0 1.0 +de 03_wind_off 1 168 0.0 1.0 +de 04_res 1 168 0.0 1.0 +de 05_nuclear 1 168 0.0 1.0 +de 06_coal 1 168 0.0 1.0 +de 07_gas 1 168 0.0 1.0 +de 08_non-res 1 168 0.0 1.0 +de 09_hydro_pump 1 168 0.0 1.0 de 01_solar 1 169 0.0 0.0 de 02_wind_on 1 169 0.0 0.0 de 03_wind_off 1 169 0.0 0.0 @@ -1520,7 +1520,7 @@ de 06_coal 1 169 0.0 0.0 de 07_gas 1 169 0.0 0.0 de 08_non-res 1 169 0.0 0.0 de 09_hydro_pump 1 169 0.0 0.0 -de 01_solar 1 170 1.0 0.0 +de 01_solar 1 170 0.0 1.0 de 02_wind_on 1 170 0.0 0.0 de 03_wind_off 1 170 0.0 0.0 de 04_res 1 170 0.0 0.0 @@ -1529,7 +1529,7 @@ de 06_coal 1 170 0.0 0.0 de 07_gas 1 170 0.0 0.0 de 08_non-res 1 170 0.0 0.0 de 09_hydro_pump 1 170 0.0 0.0 -de 01_solar 1 171 1.0 0.0 +de 01_solar 1 171 0.0 1.0 de 02_wind_on 1 171 0.0 0.0 de 03_wind_off 1 171 0.0 0.0 de 04_res 1 171 0.0 0.0 @@ -1538,7 +1538,7 @@ de 06_coal 1 171 0.0 0.0 de 07_gas 1 171 0.0 0.0 de 08_non-res 1 171 0.0 0.0 de 09_hydro_pump 1 171 0.0 0.0 -de 01_solar 1 172 1.0 0.0 +de 01_solar 1 172 0.0 1.0 de 02_wind_on 1 172 0.0 0.0 de 03_wind_off 1 172 0.0 0.0 de 04_res 1 172 0.0 0.0 @@ -1547,7 +1547,7 @@ de 06_coal 1 172 0.0 0.0 de 07_gas 1 172 0.0 0.0 de 08_non-res 1 172 0.0 0.0 de 09_hydro_pump 1 172 0.0 0.0 -de 01_solar 1 173 1.0 0.0 +de 01_solar 1 173 0.0 1.0 de 02_wind_on 1 173 0.0 0.0 de 03_wind_off 1 173 0.0 0.0 de 04_res 1 173 0.0 0.0 @@ -1556,7 +1556,7 @@ de 06_coal 1 173 0.0 0.0 de 07_gas 1 173 0.0 0.0 de 08_non-res 1 173 0.0 0.0 de 09_hydro_pump 1 173 0.0 0.0 -de 01_solar 1 174 1.0 0.0 +de 01_solar 1 174 0.0 1.0 de 02_wind_on 1 174 0.0 0.0 de 03_wind_off 1 174 0.0 0.0 de 04_res 1 174 0.0 0.0 @@ -1565,7 +1565,7 @@ de 06_coal 1 174 0.0 0.0 de 07_gas 1 174 0.0 0.0 de 08_non-res 1 174 0.0 0.0 de 09_hydro_pump 1 174 0.0 0.0 -de 01_solar 1 175 1.0 0.0 +de 01_solar 1 175 0.0 1.0 de 02_wind_on 1 175 0.0 0.0 de 03_wind_off 1 175 0.0 0.0 de 04_res 1 175 0.0 0.0 @@ -1574,7 +1574,7 @@ de 06_coal 1 175 0.0 0.0 de 07_gas 1 175 0.0 0.0 de 08_non-res 1 175 0.0 0.0 de 09_hydro_pump 1 175 0.0 0.0 -de 01_solar 1 176 1.0 0.0 +de 01_solar 1 176 0.0 1.0 de 02_wind_on 1 176 0.0 0.0 de 03_wind_off 1 176 0.0 0.0 de 04_res 1 176 0.0 0.0 @@ -1583,7 +1583,7 @@ de 06_coal 1 176 0.0 0.0 de 07_gas 1 176 0.0 0.0 de 08_non-res 1 176 0.0 0.0 de 09_hydro_pump 1 176 0.0 0.0 -de 01_solar 1 177 1.0 0.0 +de 01_solar 1 177 0.0 1.0 de 02_wind_on 1 177 0.0 0.0 de 03_wind_off 1 177 0.0 0.0 de 04_res 1 177 0.0 0.0 @@ -1592,7 +1592,7 @@ de 06_coal 1 177 0.0 0.0 de 07_gas 1 177 0.0 0.0 de 08_non-res 1 177 0.0 0.0 de 09_hydro_pump 1 177 0.0 0.0 -de 01_solar 1 178 1.0 0.0 +de 01_solar 1 178 0.0 1.0 de 02_wind_on 1 178 0.0 0.0 de 03_wind_off 1 178 0.0 0.0 de 04_res 1 178 0.0 0.0 @@ -1601,7 +1601,7 @@ de 06_coal 1 178 0.0 0.0 de 07_gas 1 178 0.0 0.0 de 08_non-res 1 178 0.0 0.0 de 09_hydro_pump 1 178 0.0 0.0 -de 01_solar 1 179 1.0 0.0 +de 01_solar 1 179 0.0 1.0 de 02_wind_on 1 179 0.0 0.0 de 03_wind_off 1 179 0.0 0.0 de 04_res 1 179 0.0 0.0 @@ -1610,7 +1610,7 @@ de 06_coal 1 179 0.0 0.0 de 07_gas 1 179 0.0 0.0 de 08_non-res 1 179 0.0 0.0 de 09_hydro_pump 1 179 0.0 0.0 -de 01_solar 1 180 1.0 0.0 +de 01_solar 1 180 0.0 1.0 de 02_wind_on 1 180 0.0 0.0 de 03_wind_off 1 180 0.0 0.0 de 04_res 1 180 0.0 0.0 @@ -1619,7 +1619,7 @@ de 06_coal 1 180 0.0 0.0 de 07_gas 1 180 0.0 0.0 de 08_non-res 1 180 0.0 0.0 de 09_hydro_pump 1 180 0.0 0.0 -de 01_solar 1 181 1.0 0.0 +de 01_solar 1 181 0.0 1.0 de 02_wind_on 1 181 0.0 0.0 de 03_wind_off 1 181 0.0 0.0 de 04_res 1 181 0.0 0.0 @@ -1628,7 +1628,7 @@ de 06_coal 1 181 0.0 0.0 de 07_gas 1 181 0.0 0.0 de 08_non-res 1 181 0.0 0.0 de 09_hydro_pump 1 181 0.0 0.0 -de 01_solar 1 182 1.0 0.0 +de 01_solar 1 182 0.0 1.0 de 02_wind_on 1 182 0.0 0.0 de 03_wind_off 1 182 0.0 0.0 de 04_res 1 182 0.0 0.0 @@ -1637,7 +1637,7 @@ de 06_coal 1 182 0.0 0.0 de 07_gas 1 182 0.0 0.0 de 08_non-res 1 182 0.0 0.0 de 09_hydro_pump 1 182 0.0 0.0 -de 01_solar 1 183 1.0 0.0 +de 01_solar 1 183 0.0 1.0 de 02_wind_on 1 183 0.0 0.0 de 03_wind_off 1 183 0.0 0.0 de 04_res 1 183 0.0 0.0 @@ -1646,7 +1646,7 @@ de 06_coal 1 183 0.0 0.0 de 07_gas 1 183 0.0 0.0 de 08_non-res 1 183 0.0 0.0 de 09_hydro_pump 1 183 0.0 0.0 -de 01_solar 1 184 1.0 0.0 +de 01_solar 1 184 0.0 1.0 de 02_wind_on 1 184 0.0 0.0 de 03_wind_off 1 184 0.0 0.0 de 04_res 1 184 0.0 0.0 @@ -1655,7 +1655,7 @@ de 06_coal 1 184 0.0 0.0 de 07_gas 1 184 0.0 0.0 de 08_non-res 1 184 0.0 0.0 de 09_hydro_pump 1 184 0.0 0.0 -de 01_solar 1 185 1.0 0.0 +de 01_solar 1 185 0.0 1.0 de 02_wind_on 1 185 0.0 0.0 de 03_wind_off 1 185 0.0 0.0 de 04_res 1 185 0.0 0.0 @@ -1664,7 +1664,7 @@ de 06_coal 1 185 0.0 0.0 de 07_gas 1 185 0.0 0.0 de 08_non-res 1 185 0.0 0.0 de 09_hydro_pump 1 185 0.0 0.0 -de 01_solar 1 186 1.0 0.0 +de 01_solar 1 186 0.0 1.0 de 02_wind_on 1 186 0.0 0.0 de 03_wind_off 1 186 0.0 0.0 de 04_res 1 186 0.0 0.0 @@ -1673,7 +1673,7 @@ de 06_coal 1 186 0.0 0.0 de 07_gas 1 186 0.0 0.0 de 08_non-res 1 186 0.0 0.0 de 09_hydro_pump 1 186 0.0 0.0 -de 01_solar 1 187 1.0 0.0 +de 01_solar 1 187 0.0 1.0 de 02_wind_on 1 187 0.0 0.0 de 03_wind_off 1 187 0.0 0.0 de 04_res 1 187 0.0 0.0 @@ -1682,7 +1682,7 @@ de 06_coal 1 187 0.0 0.0 de 07_gas 1 187 0.0 0.0 de 08_non-res 1 187 0.0 0.0 de 09_hydro_pump 1 187 0.0 0.0 -de 01_solar 1 188 1.0 0.0 +de 01_solar 1 188 0.0 1.0 de 02_wind_on 1 188 0.0 0.0 de 03_wind_off 1 188 0.0 0.0 de 04_res 1 188 0.0 0.0 @@ -1691,7 +1691,7 @@ de 06_coal 1 188 0.0 0.0 de 07_gas 1 188 0.0 0.0 de 08_non-res 1 188 0.0 0.0 de 09_hydro_pump 1 188 0.0 0.0 -de 01_solar 1 189 1.0 0.0 +de 01_solar 1 189 0.0 1.0 de 02_wind_on 1 189 0.0 0.0 de 03_wind_off 1 189 0.0 0.0 de 04_res 1 189 0.0 0.0 @@ -1700,8 +1700,8 @@ de 06_coal 1 189 0.0 0.0 de 07_gas 1 189 0.0 0.0 de 08_non-res 1 189 0.0 0.0 de 09_hydro_pump 1 189 0.0 0.0 -de 01_solar 1 190 1.0 0.0 -de 02_wind_on 1 190 1.0 0.0 +de 01_solar 1 190 0.0 1.0 +de 02_wind_on 1 190 0.0 1.0 de 03_wind_off 1 190 0.0 0.0 de 04_res 1 190 0.0 0.0 de 05_nuclear 1 190 0.0 0.0 @@ -1709,8 +1709,8 @@ de 06_coal 1 190 0.0 0.0 de 07_gas 1 190 0.0 0.0 de 08_non-res 1 190 0.0 0.0 de 09_hydro_pump 1 190 0.0 0.0 -de 01_solar 1 191 1.0 0.0 -de 02_wind_on 1 191 1.0 0.0 +de 01_solar 1 191 0.0 1.0 +de 02_wind_on 1 191 0.0 1.0 de 03_wind_off 1 191 0.0 0.0 de 04_res 1 191 0.0 0.0 de 05_nuclear 1 191 0.0 0.0 @@ -1718,8 +1718,8 @@ de 06_coal 1 191 0.0 0.0 de 07_gas 1 191 0.0 0.0 de 08_non-res 1 191 0.0 0.0 de 09_hydro_pump 1 191 0.0 0.0 -de 01_solar 1 192 1.0 0.0 -de 02_wind_on 1 192 1.0 0.0 +de 01_solar 1 192 0.0 1.0 +de 02_wind_on 1 192 0.0 1.0 de 03_wind_off 1 192 0.0 0.0 de 04_res 1 192 0.0 0.0 de 05_nuclear 1 192 0.0 0.0 @@ -1727,8 +1727,8 @@ de 06_coal 1 192 0.0 0.0 de 07_gas 1 192 0.0 0.0 de 08_non-res 1 192 0.0 0.0 de 09_hydro_pump 1 192 0.0 0.0 -de 01_solar 1 193 1.0 0.0 -de 02_wind_on 1 193 1.0 0.0 +de 01_solar 1 193 0.0 1.0 +de 02_wind_on 1 193 0.0 1.0 de 03_wind_off 1 193 0.0 0.0 de 04_res 1 193 0.0 0.0 de 05_nuclear 1 193 0.0 0.0 @@ -1736,8 +1736,8 @@ de 06_coal 1 193 0.0 0.0 de 07_gas 1 193 0.0 0.0 de 08_non-res 1 193 0.0 0.0 de 09_hydro_pump 1 193 0.0 0.0 -de 01_solar 1 194 1.0 0.0 -de 02_wind_on 1 194 1.0 0.0 +de 01_solar 1 194 0.0 1.0 +de 02_wind_on 1 194 0.0 1.0 de 03_wind_off 1 194 0.0 0.0 de 04_res 1 194 0.0 0.0 de 05_nuclear 1 194 0.0 0.0 @@ -1745,8 +1745,8 @@ de 06_coal 1 194 0.0 0.0 de 07_gas 1 194 0.0 0.0 de 08_non-res 1 194 0.0 0.0 de 09_hydro_pump 1 194 0.0 0.0 -de 01_solar 1 195 1.0 0.0 -de 02_wind_on 1 195 1.0 0.0 +de 01_solar 1 195 0.0 1.0 +de 02_wind_on 1 195 0.0 1.0 de 03_wind_off 1 195 0.0 0.0 de 04_res 1 195 0.0 0.0 de 05_nuclear 1 195 0.0 0.0 @@ -1754,8 +1754,8 @@ de 06_coal 1 195 0.0 0.0 de 07_gas 1 195 0.0 0.0 de 08_non-res 1 195 0.0 0.0 de 09_hydro_pump 1 195 0.0 0.0 -de 01_solar 1 196 1.0 0.0 -de 02_wind_on 1 196 1.0 0.0 +de 01_solar 1 196 0.0 1.0 +de 02_wind_on 1 196 0.0 1.0 de 03_wind_off 1 196 0.0 0.0 de 04_res 1 196 0.0 0.0 de 05_nuclear 1 196 0.0 0.0 @@ -1763,8 +1763,8 @@ de 06_coal 1 196 0.0 0.0 de 07_gas 1 196 0.0 0.0 de 08_non-res 1 196 0.0 0.0 de 09_hydro_pump 1 196 0.0 0.0 -de 01_solar 1 197 1.0 0.0 -de 02_wind_on 1 197 1.0 0.0 +de 01_solar 1 197 0.0 1.0 +de 02_wind_on 1 197 0.0 1.0 de 03_wind_off 1 197 0.0 0.0 de 04_res 1 197 0.0 0.0 de 05_nuclear 1 197 0.0 0.0 @@ -1772,8 +1772,8 @@ de 06_coal 1 197 0.0 0.0 de 07_gas 1 197 0.0 0.0 de 08_non-res 1 197 0.0 0.0 de 09_hydro_pump 1 197 0.0 0.0 -de 01_solar 1 198 1.0 0.0 -de 02_wind_on 1 198 1.0 0.0 +de 01_solar 1 198 0.0 1.0 +de 02_wind_on 1 198 0.0 1.0 de 03_wind_off 1 198 0.0 0.0 de 04_res 1 198 0.0 0.0 de 05_nuclear 1 198 0.0 0.0 @@ -1781,8 +1781,8 @@ de 06_coal 1 198 0.0 0.0 de 07_gas 1 198 0.0 0.0 de 08_non-res 1 198 0.0 0.0 de 09_hydro_pump 1 198 0.0 0.0 -de 01_solar 1 199 1.0 0.0 -de 02_wind_on 1 199 1.0 0.0 +de 01_solar 1 199 0.0 1.0 +de 02_wind_on 1 199 0.0 1.0 de 03_wind_off 1 199 0.0 0.0 de 04_res 1 199 0.0 0.0 de 05_nuclear 1 199 0.0 0.0 @@ -1790,8 +1790,8 @@ de 06_coal 1 199 0.0 0.0 de 07_gas 1 199 0.0 0.0 de 08_non-res 1 199 0.0 0.0 de 09_hydro_pump 1 199 0.0 0.0 -de 01_solar 1 200 1.0 0.0 -de 02_wind_on 1 200 1.0 0.0 +de 01_solar 1 200 0.0 1.0 +de 02_wind_on 1 200 0.0 1.0 de 03_wind_off 1 200 0.0 0.0 de 04_res 1 200 0.0 0.0 de 05_nuclear 1 200 0.0 0.0 @@ -1799,8 +1799,8 @@ de 06_coal 1 200 0.0 0.0 de 07_gas 1 200 0.0 0.0 de 08_non-res 1 200 0.0 0.0 de 09_hydro_pump 1 200 0.0 0.0 -de 01_solar 1 201 1.0 0.0 -de 02_wind_on 1 201 1.0 0.0 +de 01_solar 1 201 0.0 1.0 +de 02_wind_on 1 201 0.0 1.0 de 03_wind_off 1 201 0.0 0.0 de 04_res 1 201 0.0 0.0 de 05_nuclear 1 201 0.0 0.0 @@ -1808,8 +1808,8 @@ de 06_coal 1 201 0.0 0.0 de 07_gas 1 201 0.0 0.0 de 08_non-res 1 201 0.0 0.0 de 09_hydro_pump 1 201 0.0 0.0 -de 01_solar 1 202 1.0 0.0 -de 02_wind_on 1 202 1.0 0.0 +de 01_solar 1 202 0.0 1.0 +de 02_wind_on 1 202 0.0 1.0 de 03_wind_off 1 202 0.0 0.0 de 04_res 1 202 0.0 0.0 de 05_nuclear 1 202 0.0 0.0 @@ -1817,8 +1817,8 @@ de 06_coal 1 202 0.0 0.0 de 07_gas 1 202 0.0 0.0 de 08_non-res 1 202 0.0 0.0 de 09_hydro_pump 1 202 0.0 0.0 -de 01_solar 1 203 1.0 0.0 -de 02_wind_on 1 203 1.0 0.0 +de 01_solar 1 203 0.0 1.0 +de 02_wind_on 1 203 0.0 1.0 de 03_wind_off 1 203 0.0 0.0 de 04_res 1 203 0.0 0.0 de 05_nuclear 1 203 0.0 0.0 @@ -1826,8 +1826,8 @@ de 06_coal 1 203 0.0 0.0 de 07_gas 1 203 0.0 0.0 de 08_non-res 1 203 0.0 0.0 de 09_hydro_pump 1 203 0.0 0.0 -de 01_solar 1 204 1.0 0.0 -de 02_wind_on 1 204 1.0 0.0 +de 01_solar 1 204 0.0 1.0 +de 02_wind_on 1 204 0.0 1.0 de 03_wind_off 1 204 0.0 0.0 de 04_res 1 204 0.0 0.0 de 05_nuclear 1 204 0.0 0.0 @@ -1835,8 +1835,8 @@ de 06_coal 1 204 0.0 0.0 de 07_gas 1 204 0.0 0.0 de 08_non-res 1 204 0.0 0.0 de 09_hydro_pump 1 204 0.0 0.0 -de 01_solar 1 205 1.0 0.0 -de 02_wind_on 1 205 1.0 0.0 +de 01_solar 1 205 0.0 1.0 +de 02_wind_on 1 205 0.0 1.0 de 03_wind_off 1 205 0.0 0.0 de 04_res 1 205 0.0 0.0 de 05_nuclear 1 205 0.0 0.0 @@ -1844,8 +1844,8 @@ de 06_coal 1 205 0.0 0.0 de 07_gas 1 205 0.0 0.0 de 08_non-res 1 205 0.0 0.0 de 09_hydro_pump 1 205 0.0 0.0 -de 01_solar 1 206 1.0 0.0 -de 02_wind_on 1 206 1.0 0.0 +de 01_solar 1 206 0.0 1.0 +de 02_wind_on 1 206 0.0 1.0 de 03_wind_off 1 206 0.0 0.0 de 04_res 1 206 0.0 0.0 de 05_nuclear 1 206 0.0 0.0 @@ -1853,8 +1853,8 @@ de 06_coal 1 206 0.0 0.0 de 07_gas 1 206 0.0 0.0 de 08_non-res 1 206 0.0 0.0 de 09_hydro_pump 1 206 0.0 0.0 -de 01_solar 1 207 1.0 0.0 -de 02_wind_on 1 207 1.0 0.0 +de 01_solar 1 207 0.0 1.0 +de 02_wind_on 1 207 0.0 1.0 de 03_wind_off 1 207 0.0 0.0 de 04_res 1 207 0.0 0.0 de 05_nuclear 1 207 0.0 0.0 @@ -1862,8 +1862,8 @@ de 06_coal 1 207 0.0 0.0 de 07_gas 1 207 0.0 0.0 de 08_non-res 1 207 0.0 0.0 de 09_hydro_pump 1 207 0.0 0.0 -de 01_solar 1 208 1.0 0.0 -de 02_wind_on 1 208 1.0 0.0 +de 01_solar 1 208 0.0 1.0 +de 02_wind_on 1 208 0.0 1.0 de 03_wind_off 1 208 0.0 0.0 de 04_res 1 208 0.0 0.0 de 05_nuclear 1 208 0.0 0.0 @@ -1871,8 +1871,8 @@ de 06_coal 1 208 0.0 0.0 de 07_gas 1 208 0.0 0.0 de 08_non-res 1 208 0.0 0.0 de 09_hydro_pump 1 208 0.0 0.0 -de 01_solar 1 209 1.0 0.0 -de 02_wind_on 1 209 1.0 0.0 +de 01_solar 1 209 0.0 1.0 +de 02_wind_on 1 209 0.0 1.0 de 03_wind_off 1 209 0.0 0.0 de 04_res 1 209 0.0 0.0 de 05_nuclear 1 209 0.0 0.0 @@ -1880,1149 +1880,1149 @@ de 06_coal 1 209 0.0 0.0 de 07_gas 1 209 0.0 0.0 de 08_non-res 1 209 0.0 0.0 de 09_hydro_pump 1 209 0.0 0.0 -de 01_solar 1 210 1.0 0.0 -de 02_wind_on 1 210 1.0 0.0 -de 03_wind_off 1 210 1.0 0.0 +de 01_solar 1 210 0.0 1.0 +de 02_wind_on 1 210 0.0 1.0 +de 03_wind_off 1 210 0.0 1.0 de 04_res 1 210 0.0 0.0 de 05_nuclear 1 210 0.0 0.0 de 06_coal 1 210 0.0 0.0 de 07_gas 1 210 0.0 0.0 de 08_non-res 1 210 0.0 0.0 de 09_hydro_pump 1 210 0.0 0.0 -de 01_solar 1 211 1.0 0.0 -de 02_wind_on 1 211 1.0 0.0 -de 03_wind_off 1 211 1.0 0.0 +de 01_solar 1 211 0.0 1.0 +de 02_wind_on 1 211 0.0 1.0 +de 03_wind_off 1 211 0.0 1.0 de 04_res 1 211 0.0 0.0 de 05_nuclear 1 211 0.0 0.0 de 06_coal 1 211 0.0 0.0 de 07_gas 1 211 0.0 0.0 de 08_non-res 1 211 0.0 0.0 de 09_hydro_pump 1 211 0.0 0.0 -de 01_solar 1 212 1.0 0.0 -de 02_wind_on 1 212 1.0 0.0 -de 03_wind_off 1 212 1.0 0.0 +de 01_solar 1 212 0.0 1.0 +de 02_wind_on 1 212 0.0 1.0 +de 03_wind_off 1 212 0.0 1.0 de 04_res 1 212 0.0 0.0 de 05_nuclear 1 212 0.0 0.0 de 06_coal 1 212 0.0 0.0 de 07_gas 1 212 0.0 0.0 de 08_non-res 1 212 0.0 0.0 de 09_hydro_pump 1 212 0.0 0.0 -de 01_solar 1 213 1.0 0.0 -de 02_wind_on 1 213 1.0 0.0 -de 03_wind_off 1 213 1.0 0.0 +de 01_solar 1 213 0.0 1.0 +de 02_wind_on 1 213 0.0 1.0 +de 03_wind_off 1 213 0.0 1.0 de 04_res 1 213 0.0 0.0 de 05_nuclear 1 213 0.0 0.0 de 06_coal 1 213 0.0 0.0 de 07_gas 1 213 0.0 0.0 de 08_non-res 1 213 0.0 0.0 de 09_hydro_pump 1 213 0.0 0.0 -de 01_solar 1 214 1.0 0.0 -de 02_wind_on 1 214 1.0 0.0 -de 03_wind_off 1 214 1.0 0.0 +de 01_solar 1 214 0.0 1.0 +de 02_wind_on 1 214 0.0 1.0 +de 03_wind_off 1 214 0.0 1.0 de 04_res 1 214 0.0 0.0 de 05_nuclear 1 214 0.0 0.0 de 06_coal 1 214 0.0 0.0 de 07_gas 1 214 0.0 0.0 de 08_non-res 1 214 0.0 0.0 de 09_hydro_pump 1 214 0.0 0.0 -de 01_solar 1 215 1.0 0.0 -de 02_wind_on 1 215 1.0 0.0 -de 03_wind_off 1 215 1.0 0.0 +de 01_solar 1 215 0.0 1.0 +de 02_wind_on 1 215 0.0 1.0 +de 03_wind_off 1 215 0.0 1.0 de 04_res 1 215 0.0 0.0 de 05_nuclear 1 215 0.0 0.0 de 06_coal 1 215 0.0 0.0 de 07_gas 1 215 0.0 0.0 de 08_non-res 1 215 0.0 0.0 de 09_hydro_pump 1 215 0.0 0.0 -de 01_solar 1 216 1.0 0.0 -de 02_wind_on 1 216 1.0 0.0 -de 03_wind_off 1 216 1.0 0.0 +de 01_solar 1 216 0.0 1.0 +de 02_wind_on 1 216 0.0 1.0 +de 03_wind_off 1 216 0.0 1.0 de 04_res 1 216 0.0 0.0 de 05_nuclear 1 216 0.0 0.0 de 06_coal 1 216 0.0 0.0 de 07_gas 1 216 0.0 0.0 de 08_non-res 1 216 0.0 0.0 de 09_hydro_pump 1 216 0.0 0.0 -de 01_solar 1 217 1.0 0.0 -de 02_wind_on 1 217 1.0 0.0 -de 03_wind_off 1 217 1.0 0.0 +de 01_solar 1 217 0.0 1.0 +de 02_wind_on 1 217 0.0 1.0 +de 03_wind_off 1 217 0.0 1.0 de 04_res 1 217 0.0 0.0 de 05_nuclear 1 217 0.0 0.0 de 06_coal 1 217 0.0 0.0 de 07_gas 1 217 0.0 0.0 de 08_non-res 1 217 0.0 0.0 de 09_hydro_pump 1 217 0.0 0.0 -de 01_solar 1 218 1.0 0.0 -de 02_wind_on 1 218 1.0 0.0 -de 03_wind_off 1 218 1.0 0.0 +de 01_solar 1 218 0.0 1.0 +de 02_wind_on 1 218 0.0 1.0 +de 03_wind_off 1 218 0.0 1.0 de 04_res 1 218 0.0 0.0 de 05_nuclear 1 218 0.0 0.0 de 06_coal 1 218 0.0 0.0 de 07_gas 1 218 0.0 0.0 de 08_non-res 1 218 0.0 0.0 de 09_hydro_pump 1 218 0.0 0.0 -de 01_solar 1 219 1.0 0.0 -de 02_wind_on 1 219 1.0 0.0 -de 03_wind_off 1 219 1.0 0.0 +de 01_solar 1 219 0.0 1.0 +de 02_wind_on 1 219 0.0 1.0 +de 03_wind_off 1 219 0.0 1.0 de 04_res 1 219 0.0 0.0 de 05_nuclear 1 219 0.0 0.0 de 06_coal 1 219 0.0 0.0 de 07_gas 1 219 0.0 0.0 de 08_non-res 1 219 0.0 0.0 de 09_hydro_pump 1 219 0.0 0.0 -de 01_solar 1 220 1.0 0.0 -de 02_wind_on 1 220 1.0 0.0 -de 03_wind_off 1 220 1.0 0.0 +de 01_solar 1 220 0.0 1.0 +de 02_wind_on 1 220 0.0 1.0 +de 03_wind_off 1 220 0.0 1.0 de 04_res 1 220 0.0 0.0 de 05_nuclear 1 220 0.0 0.0 de 06_coal 1 220 0.0 0.0 de 07_gas 1 220 0.0 0.0 de 08_non-res 1 220 0.0 0.0 de 09_hydro_pump 1 220 0.0 0.0 -de 01_solar 1 221 1.0 0.0 -de 02_wind_on 1 221 1.0 0.0 -de 03_wind_off 1 221 1.0 0.0 +de 01_solar 1 221 0.0 1.0 +de 02_wind_on 1 221 0.0 1.0 +de 03_wind_off 1 221 0.0 1.0 de 04_res 1 221 0.0 0.0 de 05_nuclear 1 221 0.0 0.0 de 06_coal 1 221 0.0 0.0 de 07_gas 1 221 0.0 0.0 de 08_non-res 1 221 0.0 0.0 de 09_hydro_pump 1 221 0.0 0.0 -de 01_solar 1 222 1.0 0.0 -de 02_wind_on 1 222 1.0 0.0 -de 03_wind_off 1 222 1.0 0.0 +de 01_solar 1 222 0.0 1.0 +de 02_wind_on 1 222 0.0 1.0 +de 03_wind_off 1 222 0.0 1.0 de 04_res 1 222 0.0 0.0 de 05_nuclear 1 222 0.0 0.0 de 06_coal 1 222 0.0 0.0 de 07_gas 1 222 0.0 0.0 de 08_non-res 1 222 0.0 0.0 de 09_hydro_pump 1 222 0.0 0.0 -de 01_solar 1 223 1.0 0.0 -de 02_wind_on 1 223 1.0 0.0 -de 03_wind_off 1 223 1.0 0.0 +de 01_solar 1 223 0.0 1.0 +de 02_wind_on 1 223 0.0 1.0 +de 03_wind_off 1 223 0.0 1.0 de 04_res 1 223 0.0 0.0 de 05_nuclear 1 223 0.0 0.0 de 06_coal 1 223 0.0 0.0 de 07_gas 1 223 0.0 0.0 de 08_non-res 1 223 0.0 0.0 de 09_hydro_pump 1 223 0.0 0.0 -de 01_solar 1 224 1.0 0.0 -de 02_wind_on 1 224 1.0 0.0 -de 03_wind_off 1 224 1.0 0.0 +de 01_solar 1 224 0.0 1.0 +de 02_wind_on 1 224 0.0 1.0 +de 03_wind_off 1 224 0.0 1.0 de 04_res 1 224 0.0 0.0 de 05_nuclear 1 224 0.0 0.0 de 06_coal 1 224 0.0 0.0 de 07_gas 1 224 0.0 0.0 de 08_non-res 1 224 0.0 0.0 de 09_hydro_pump 1 224 0.0 0.0 -de 01_solar 1 225 1.0 0.0 -de 02_wind_on 1 225 1.0 0.0 -de 03_wind_off 1 225 1.0 0.0 +de 01_solar 1 225 0.0 1.0 +de 02_wind_on 1 225 0.0 1.0 +de 03_wind_off 1 225 0.0 1.0 de 04_res 1 225 0.0 0.0 de 05_nuclear 1 225 0.0 0.0 de 06_coal 1 225 0.0 0.0 de 07_gas 1 225 0.0 0.0 de 08_non-res 1 225 0.0 0.0 de 09_hydro_pump 1 225 0.0 0.0 -de 01_solar 1 226 1.0 0.0 -de 02_wind_on 1 226 1.0 0.0 -de 03_wind_off 1 226 1.0 0.0 +de 01_solar 1 226 0.0 1.0 +de 02_wind_on 1 226 0.0 1.0 +de 03_wind_off 1 226 0.0 1.0 de 04_res 1 226 0.0 0.0 de 05_nuclear 1 226 0.0 0.0 de 06_coal 1 226 0.0 0.0 de 07_gas 1 226 0.0 0.0 de 08_non-res 1 226 0.0 0.0 de 09_hydro_pump 1 226 0.0 0.0 -de 01_solar 1 227 1.0 0.0 -de 02_wind_on 1 227 1.0 0.0 -de 03_wind_off 1 227 1.0 0.0 +de 01_solar 1 227 0.0 1.0 +de 02_wind_on 1 227 0.0 1.0 +de 03_wind_off 1 227 0.0 1.0 de 04_res 1 227 0.0 0.0 de 05_nuclear 1 227 0.0 0.0 de 06_coal 1 227 0.0 0.0 de 07_gas 1 227 0.0 0.0 de 08_non-res 1 227 0.0 0.0 de 09_hydro_pump 1 227 0.0 0.0 -de 01_solar 1 228 1.0 0.0 -de 02_wind_on 1 228 1.0 0.0 -de 03_wind_off 1 228 1.0 0.0 +de 01_solar 1 228 0.0 1.0 +de 02_wind_on 1 228 0.0 1.0 +de 03_wind_off 1 228 0.0 1.0 de 04_res 1 228 0.0 0.0 de 05_nuclear 1 228 0.0 0.0 de 06_coal 1 228 0.0 0.0 de 07_gas 1 228 0.0 0.0 de 08_non-res 1 228 0.0 0.0 de 09_hydro_pump 1 228 0.0 0.0 -de 01_solar 1 229 1.0 0.0 -de 02_wind_on 1 229 1.0 0.0 -de 03_wind_off 1 229 1.0 0.0 +de 01_solar 1 229 0.0 1.0 +de 02_wind_on 1 229 0.0 1.0 +de 03_wind_off 1 229 0.0 1.0 de 04_res 1 229 0.0 0.0 de 05_nuclear 1 229 0.0 0.0 de 06_coal 1 229 0.0 0.0 de 07_gas 1 229 0.0 0.0 de 08_non-res 1 229 0.0 0.0 de 09_hydro_pump 1 229 0.0 0.0 -de 01_solar 1 230 1.0 0.0 -de 02_wind_on 1 230 1.0 0.0 -de 03_wind_off 1 230 1.0 0.0 -de 04_res 1 230 1.0 0.0 +de 01_solar 1 230 0.0 1.0 +de 02_wind_on 1 230 0.0 1.0 +de 03_wind_off 1 230 0.0 1.0 +de 04_res 1 230 0.0 1.0 de 05_nuclear 1 230 0.0 0.0 de 06_coal 1 230 0.0 0.0 de 07_gas 1 230 0.0 0.0 de 08_non-res 1 230 0.0 0.0 de 09_hydro_pump 1 230 0.0 0.0 -de 01_solar 1 231 1.0 0.0 -de 02_wind_on 1 231 1.0 0.0 -de 03_wind_off 1 231 1.0 0.0 -de 04_res 1 231 1.0 0.0 +de 01_solar 1 231 0.0 1.0 +de 02_wind_on 1 231 0.0 1.0 +de 03_wind_off 1 231 0.0 1.0 +de 04_res 1 231 0.0 1.0 de 05_nuclear 1 231 0.0 0.0 de 06_coal 1 231 0.0 0.0 de 07_gas 1 231 0.0 0.0 de 08_non-res 1 231 0.0 0.0 de 09_hydro_pump 1 231 0.0 0.0 -de 01_solar 1 232 1.0 0.0 -de 02_wind_on 1 232 1.0 0.0 -de 03_wind_off 1 232 1.0 0.0 -de 04_res 1 232 1.0 0.0 +de 01_solar 1 232 0.0 1.0 +de 02_wind_on 1 232 0.0 1.0 +de 03_wind_off 1 232 0.0 1.0 +de 04_res 1 232 0.0 1.0 de 05_nuclear 1 232 0.0 0.0 de 06_coal 1 232 0.0 0.0 de 07_gas 1 232 0.0 0.0 de 08_non-res 1 232 0.0 0.0 de 09_hydro_pump 1 232 0.0 0.0 -de 01_solar 1 233 1.0 0.0 -de 02_wind_on 1 233 1.0 0.0 -de 03_wind_off 1 233 1.0 0.0 -de 04_res 1 233 1.0 0.0 +de 01_solar 1 233 0.0 1.0 +de 02_wind_on 1 233 0.0 1.0 +de 03_wind_off 1 233 0.0 1.0 +de 04_res 1 233 0.0 1.0 de 05_nuclear 1 233 0.0 0.0 de 06_coal 1 233 0.0 0.0 de 07_gas 1 233 0.0 0.0 de 08_non-res 1 233 0.0 0.0 de 09_hydro_pump 1 233 0.0 0.0 -de 01_solar 1 234 1.0 0.0 -de 02_wind_on 1 234 1.0 0.0 -de 03_wind_off 1 234 1.0 0.0 -de 04_res 1 234 1.0 0.0 +de 01_solar 1 234 0.0 1.0 +de 02_wind_on 1 234 0.0 1.0 +de 03_wind_off 1 234 0.0 1.0 +de 04_res 1 234 0.0 1.0 de 05_nuclear 1 234 0.0 0.0 de 06_coal 1 234 0.0 0.0 de 07_gas 1 234 0.0 0.0 de 08_non-res 1 234 0.0 0.0 de 09_hydro_pump 1 234 0.0 0.0 -de 01_solar 1 235 1.0 0.0 -de 02_wind_on 1 235 1.0 0.0 -de 03_wind_off 1 235 1.0 0.0 -de 04_res 1 235 1.0 0.0 +de 01_solar 1 235 0.0 1.0 +de 02_wind_on 1 235 0.0 1.0 +de 03_wind_off 1 235 0.0 1.0 +de 04_res 1 235 0.0 1.0 de 05_nuclear 1 235 0.0 0.0 de 06_coal 1 235 0.0 0.0 de 07_gas 1 235 0.0 0.0 de 08_non-res 1 235 0.0 0.0 de 09_hydro_pump 1 235 0.0 0.0 -de 01_solar 1 236 1.0 0.0 -de 02_wind_on 1 236 1.0 0.0 -de 03_wind_off 1 236 1.0 0.0 -de 04_res 1 236 1.0 0.0 +de 01_solar 1 236 0.0 1.0 +de 02_wind_on 1 236 0.0 1.0 +de 03_wind_off 1 236 0.0 1.0 +de 04_res 1 236 0.0 1.0 de 05_nuclear 1 236 0.0 0.0 de 06_coal 1 236 0.0 0.0 de 07_gas 1 236 0.0 0.0 de 08_non-res 1 236 0.0 0.0 de 09_hydro_pump 1 236 0.0 0.0 -de 01_solar 1 237 1.0 0.0 -de 02_wind_on 1 237 1.0 0.0 -de 03_wind_off 1 237 1.0 0.0 -de 04_res 1 237 1.0 0.0 +de 01_solar 1 237 0.0 1.0 +de 02_wind_on 1 237 0.0 1.0 +de 03_wind_off 1 237 0.0 1.0 +de 04_res 1 237 0.0 1.0 de 05_nuclear 1 237 0.0 0.0 de 06_coal 1 237 0.0 0.0 de 07_gas 1 237 0.0 0.0 de 08_non-res 1 237 0.0 0.0 de 09_hydro_pump 1 237 0.0 0.0 -de 01_solar 1 238 1.0 0.0 -de 02_wind_on 1 238 1.0 0.0 -de 03_wind_off 1 238 1.0 0.0 -de 04_res 1 238 1.0 0.0 +de 01_solar 1 238 0.0 1.0 +de 02_wind_on 1 238 0.0 1.0 +de 03_wind_off 1 238 0.0 1.0 +de 04_res 1 238 0.0 1.0 de 05_nuclear 1 238 0.0 0.0 de 06_coal 1 238 0.0 0.0 de 07_gas 1 238 0.0 0.0 de 08_non-res 1 238 0.0 0.0 de 09_hydro_pump 1 238 0.0 0.0 -de 01_solar 1 239 1.0 0.0 -de 02_wind_on 1 239 1.0 0.0 -de 03_wind_off 1 239 1.0 0.0 -de 04_res 1 239 1.0 0.0 +de 01_solar 1 239 0.0 1.0 +de 02_wind_on 1 239 0.0 1.0 +de 03_wind_off 1 239 0.0 1.0 +de 04_res 1 239 0.0 1.0 de 05_nuclear 1 239 0.0 0.0 de 06_coal 1 239 0.0 0.0 de 07_gas 1 239 0.0 0.0 de 08_non-res 1 239 0.0 0.0 de 09_hydro_pump 1 239 0.0 0.0 -de 01_solar 1 240 1.0 0.0 -de 02_wind_on 1 240 1.0 0.0 -de 03_wind_off 1 240 1.0 0.0 -de 04_res 1 240 1.0 0.0 +de 01_solar 1 240 0.0 1.0 +de 02_wind_on 1 240 0.0 1.0 +de 03_wind_off 1 240 0.0 1.0 +de 04_res 1 240 0.0 1.0 de 05_nuclear 1 240 0.0 0.0 de 06_coal 1 240 0.0 0.0 de 07_gas 1 240 0.0 0.0 de 08_non-res 1 240 0.0 0.0 de 09_hydro_pump 1 240 0.0 0.0 -de 01_solar 1 241 1.0 0.0 -de 02_wind_on 1 241 1.0 0.0 -de 03_wind_off 1 241 1.0 0.0 -de 04_res 1 241 1.0 0.0 +de 01_solar 1 241 0.0 1.0 +de 02_wind_on 1 241 0.0 1.0 +de 03_wind_off 1 241 0.0 1.0 +de 04_res 1 241 0.0 1.0 de 05_nuclear 1 241 0.0 0.0 de 06_coal 1 241 0.0 0.0 de 07_gas 1 241 0.0 0.0 de 08_non-res 1 241 0.0 0.0 de 09_hydro_pump 1 241 0.0 0.0 -de 01_solar 1 242 1.0 0.0 -de 02_wind_on 1 242 1.0 0.0 -de 03_wind_off 1 242 1.0 0.0 -de 04_res 1 242 1.0 0.0 +de 01_solar 1 242 0.0 1.0 +de 02_wind_on 1 242 0.0 1.0 +de 03_wind_off 1 242 0.0 1.0 +de 04_res 1 242 0.0 1.0 de 05_nuclear 1 242 0.0 0.0 de 06_coal 1 242 0.0 0.0 de 07_gas 1 242 0.0 0.0 de 08_non-res 1 242 0.0 0.0 de 09_hydro_pump 1 242 0.0 0.0 -de 01_solar 1 243 1.0 0.0 -de 02_wind_on 1 243 1.0 0.0 -de 03_wind_off 1 243 1.0 0.0 -de 04_res 1 243 1.0 0.0 +de 01_solar 1 243 0.0 1.0 +de 02_wind_on 1 243 0.0 1.0 +de 03_wind_off 1 243 0.0 1.0 +de 04_res 1 243 0.0 1.0 de 05_nuclear 1 243 0.0 0.0 de 06_coal 1 243 0.0 0.0 de 07_gas 1 243 0.0 0.0 de 08_non-res 1 243 0.0 0.0 de 09_hydro_pump 1 243 0.0 0.0 -de 01_solar 1 244 1.0 0.0 -de 02_wind_on 1 244 1.0 0.0 -de 03_wind_off 1 244 1.0 0.0 -de 04_res 1 244 1.0 0.0 +de 01_solar 1 244 0.0 1.0 +de 02_wind_on 1 244 0.0 1.0 +de 03_wind_off 1 244 0.0 1.0 +de 04_res 1 244 0.0 1.0 de 05_nuclear 1 244 0.0 0.0 de 06_coal 1 244 0.0 0.0 de 07_gas 1 244 0.0 0.0 de 08_non-res 1 244 0.0 0.0 de 09_hydro_pump 1 244 0.0 0.0 -de 01_solar 1 245 1.0 0.0 -de 02_wind_on 1 245 1.0 0.0 -de 03_wind_off 1 245 1.0 0.0 -de 04_res 1 245 1.0 0.0 +de 01_solar 1 245 0.0 1.0 +de 02_wind_on 1 245 0.0 1.0 +de 03_wind_off 1 245 0.0 1.0 +de 04_res 1 245 0.0 1.0 de 05_nuclear 1 245 0.0 0.0 de 06_coal 1 245 0.0 0.0 de 07_gas 1 245 0.0 0.0 de 08_non-res 1 245 0.0 0.0 de 09_hydro_pump 1 245 0.0 0.0 -de 01_solar 1 246 1.0 0.0 -de 02_wind_on 1 246 1.0 0.0 -de 03_wind_off 1 246 1.0 0.0 -de 04_res 1 246 1.0 0.0 +de 01_solar 1 246 0.0 1.0 +de 02_wind_on 1 246 0.0 1.0 +de 03_wind_off 1 246 0.0 1.0 +de 04_res 1 246 0.0 1.0 de 05_nuclear 1 246 0.0 0.0 de 06_coal 1 246 0.0 0.0 de 07_gas 1 246 0.0 0.0 de 08_non-res 1 246 0.0 0.0 de 09_hydro_pump 1 246 0.0 0.0 -de 01_solar 1 247 1.0 0.0 -de 02_wind_on 1 247 1.0 0.0 -de 03_wind_off 1 247 1.0 0.0 -de 04_res 1 247 1.0 0.0 +de 01_solar 1 247 0.0 1.0 +de 02_wind_on 1 247 0.0 1.0 +de 03_wind_off 1 247 0.0 1.0 +de 04_res 1 247 0.0 1.0 de 05_nuclear 1 247 0.0 0.0 de 06_coal 1 247 0.0 0.0 de 07_gas 1 247 0.0 0.0 de 08_non-res 1 247 0.0 0.0 de 09_hydro_pump 1 247 0.0 0.0 -de 01_solar 1 248 1.0 0.0 -de 02_wind_on 1 248 1.0 0.0 -de 03_wind_off 1 248 1.0 0.0 -de 04_res 1 248 1.0 0.0 +de 01_solar 1 248 0.0 1.0 +de 02_wind_on 1 248 0.0 1.0 +de 03_wind_off 1 248 0.0 1.0 +de 04_res 1 248 0.0 1.0 de 05_nuclear 1 248 0.0 0.0 de 06_coal 1 248 0.0 0.0 de 07_gas 1 248 0.0 0.0 de 08_non-res 1 248 0.0 0.0 de 09_hydro_pump 1 248 0.0 0.0 -de 01_solar 1 249 1.0 0.0 -de 02_wind_on 1 249 1.0 0.0 -de 03_wind_off 1 249 1.0 0.0 -de 04_res 1 249 1.0 0.0 +de 01_solar 1 249 0.0 1.0 +de 02_wind_on 1 249 0.0 1.0 +de 03_wind_off 1 249 0.0 1.0 +de 04_res 1 249 0.0 1.0 de 05_nuclear 1 249 0.0 0.0 de 06_coal 1 249 0.0 0.0 de 07_gas 1 249 0.0 0.0 de 08_non-res 1 249 0.0 0.0 de 09_hydro_pump 1 249 0.0 0.0 -de 01_solar 1 250 1.0 0.0 -de 02_wind_on 1 250 1.0 0.0 -de 03_wind_off 1 250 1.0 0.0 -de 04_res 1 250 1.0 0.0 -de 05_nuclear 1 250 1.0 0.0 +de 01_solar 1 250 0.0 1.0 +de 02_wind_on 1 250 0.0 1.0 +de 03_wind_off 1 250 0.0 1.0 +de 04_res 1 250 0.0 1.0 +de 05_nuclear 1 250 0.0 1.0 de 06_coal 1 250 0.0 0.0 de 07_gas 1 250 0.0 0.0 de 08_non-res 1 250 0.0 0.0 de 09_hydro_pump 1 250 0.0 0.0 -de 01_solar 1 251 1.0 0.0 -de 02_wind_on 1 251 1.0 0.0 -de 03_wind_off 1 251 1.0 0.0 -de 04_res 1 251 1.0 0.0 -de 05_nuclear 1 251 1.0 0.0 +de 01_solar 1 251 0.0 1.0 +de 02_wind_on 1 251 0.0 1.0 +de 03_wind_off 1 251 0.0 1.0 +de 04_res 1 251 0.0 1.0 +de 05_nuclear 1 251 0.0 1.0 de 06_coal 1 251 0.0 0.0 de 07_gas 1 251 0.0 0.0 de 08_non-res 1 251 0.0 0.0 de 09_hydro_pump 1 251 0.0 0.0 -de 01_solar 1 252 1.0 0.0 -de 02_wind_on 1 252 1.0 0.0 -de 03_wind_off 1 252 1.0 0.0 -de 04_res 1 252 1.0 0.0 -de 05_nuclear 1 252 1.0 0.0 +de 01_solar 1 252 0.0 1.0 +de 02_wind_on 1 252 0.0 1.0 +de 03_wind_off 1 252 0.0 1.0 +de 04_res 1 252 0.0 1.0 +de 05_nuclear 1 252 0.0 1.0 de 06_coal 1 252 0.0 0.0 de 07_gas 1 252 0.0 0.0 de 08_non-res 1 252 0.0 0.0 de 09_hydro_pump 1 252 0.0 0.0 -de 01_solar 1 253 1.0 0.0 -de 02_wind_on 1 253 1.0 0.0 -de 03_wind_off 1 253 1.0 0.0 -de 04_res 1 253 1.0 0.0 -de 05_nuclear 1 253 1.0 0.0 +de 01_solar 1 253 0.0 1.0 +de 02_wind_on 1 253 0.0 1.0 +de 03_wind_off 1 253 0.0 1.0 +de 04_res 1 253 0.0 1.0 +de 05_nuclear 1 253 0.0 1.0 de 06_coal 1 253 0.0 0.0 de 07_gas 1 253 0.0 0.0 de 08_non-res 1 253 0.0 0.0 de 09_hydro_pump 1 253 0.0 0.0 -de 01_solar 1 254 1.0 0.0 -de 02_wind_on 1 254 1.0 0.0 -de 03_wind_off 1 254 1.0 0.0 -de 04_res 1 254 1.0 0.0 -de 05_nuclear 1 254 1.0 0.0 +de 01_solar 1 254 0.0 1.0 +de 02_wind_on 1 254 0.0 1.0 +de 03_wind_off 1 254 0.0 1.0 +de 04_res 1 254 0.0 1.0 +de 05_nuclear 1 254 0.0 1.0 de 06_coal 1 254 0.0 0.0 de 07_gas 1 254 0.0 0.0 de 08_non-res 1 254 0.0 0.0 de 09_hydro_pump 1 254 0.0 0.0 -de 01_solar 1 255 1.0 0.0 -de 02_wind_on 1 255 1.0 0.0 -de 03_wind_off 1 255 1.0 0.0 -de 04_res 1 255 1.0 0.0 -de 05_nuclear 1 255 1.0 0.0 +de 01_solar 1 255 0.0 1.0 +de 02_wind_on 1 255 0.0 1.0 +de 03_wind_off 1 255 0.0 1.0 +de 04_res 1 255 0.0 1.0 +de 05_nuclear 1 255 0.0 1.0 de 06_coal 1 255 0.0 0.0 de 07_gas 1 255 0.0 0.0 de 08_non-res 1 255 0.0 0.0 de 09_hydro_pump 1 255 0.0 0.0 -de 01_solar 1 256 1.0 0.0 -de 02_wind_on 1 256 1.0 0.0 -de 03_wind_off 1 256 1.0 0.0 -de 04_res 1 256 1.0 0.0 -de 05_nuclear 1 256 1.0 0.0 +de 01_solar 1 256 0.0 1.0 +de 02_wind_on 1 256 0.0 1.0 +de 03_wind_off 1 256 0.0 1.0 +de 04_res 1 256 0.0 1.0 +de 05_nuclear 1 256 0.0 1.0 de 06_coal 1 256 0.0 0.0 de 07_gas 1 256 0.0 0.0 de 08_non-res 1 256 0.0 0.0 de 09_hydro_pump 1 256 0.0 0.0 -de 01_solar 1 257 1.0 0.0 -de 02_wind_on 1 257 1.0 0.0 -de 03_wind_off 1 257 1.0 0.0 -de 04_res 1 257 1.0 0.0 -de 05_nuclear 1 257 1.0 0.0 +de 01_solar 1 257 0.0 1.0 +de 02_wind_on 1 257 0.0 1.0 +de 03_wind_off 1 257 0.0 1.0 +de 04_res 1 257 0.0 1.0 +de 05_nuclear 1 257 0.0 1.0 de 06_coal 1 257 0.0 0.0 de 07_gas 1 257 0.0 0.0 de 08_non-res 1 257 0.0 0.0 de 09_hydro_pump 1 257 0.0 0.0 -de 01_solar 1 258 1.0 0.0 -de 02_wind_on 1 258 1.0 0.0 -de 03_wind_off 1 258 1.0 0.0 -de 04_res 1 258 1.0 0.0 -de 05_nuclear 1 258 1.0 0.0 +de 01_solar 1 258 0.0 1.0 +de 02_wind_on 1 258 0.0 1.0 +de 03_wind_off 1 258 0.0 1.0 +de 04_res 1 258 0.0 1.0 +de 05_nuclear 1 258 0.0 1.0 de 06_coal 1 258 0.0 0.0 de 07_gas 1 258 0.0 0.0 de 08_non-res 1 258 0.0 0.0 de 09_hydro_pump 1 258 0.0 0.0 -de 01_solar 1 259 1.0 0.0 -de 02_wind_on 1 259 1.0 0.0 -de 03_wind_off 1 259 1.0 0.0 -de 04_res 1 259 1.0 0.0 -de 05_nuclear 1 259 1.0 0.0 +de 01_solar 1 259 0.0 1.0 +de 02_wind_on 1 259 0.0 1.0 +de 03_wind_off 1 259 0.0 1.0 +de 04_res 1 259 0.0 1.0 +de 05_nuclear 1 259 0.0 1.0 de 06_coal 1 259 0.0 0.0 de 07_gas 1 259 0.0 0.0 de 08_non-res 1 259 0.0 0.0 de 09_hydro_pump 1 259 0.0 0.0 -de 01_solar 1 260 1.0 0.0 -de 02_wind_on 1 260 1.0 0.0 -de 03_wind_off 1 260 1.0 0.0 -de 04_res 1 260 1.0 0.0 -de 05_nuclear 1 260 1.0 0.0 +de 01_solar 1 260 0.0 1.0 +de 02_wind_on 1 260 0.0 1.0 +de 03_wind_off 1 260 0.0 1.0 +de 04_res 1 260 0.0 1.0 +de 05_nuclear 1 260 0.0 1.0 de 06_coal 1 260 0.0 0.0 de 07_gas 1 260 0.0 0.0 de 08_non-res 1 260 0.0 0.0 de 09_hydro_pump 1 260 0.0 0.0 -de 01_solar 1 261 1.0 0.0 -de 02_wind_on 1 261 1.0 0.0 -de 03_wind_off 1 261 1.0 0.0 -de 04_res 1 261 1.0 0.0 -de 05_nuclear 1 261 1.0 0.0 +de 01_solar 1 261 0.0 1.0 +de 02_wind_on 1 261 0.0 1.0 +de 03_wind_off 1 261 0.0 1.0 +de 04_res 1 261 0.0 1.0 +de 05_nuclear 1 261 0.0 1.0 de 06_coal 1 261 0.0 0.0 de 07_gas 1 261 0.0 0.0 de 08_non-res 1 261 0.0 0.0 de 09_hydro_pump 1 261 0.0 0.0 -de 01_solar 1 262 1.0 0.0 -de 02_wind_on 1 262 1.0 0.0 -de 03_wind_off 1 262 1.0 0.0 -de 04_res 1 262 1.0 0.0 -de 05_nuclear 1 262 1.0 0.0 +de 01_solar 1 262 0.0 1.0 +de 02_wind_on 1 262 0.0 1.0 +de 03_wind_off 1 262 0.0 1.0 +de 04_res 1 262 0.0 1.0 +de 05_nuclear 1 262 0.0 1.0 de 06_coal 1 262 0.0 0.0 de 07_gas 1 262 0.0 0.0 de 08_non-res 1 262 0.0 0.0 de 09_hydro_pump 1 262 0.0 0.0 -de 01_solar 1 263 1.0 0.0 -de 02_wind_on 1 263 1.0 0.0 -de 03_wind_off 1 263 1.0 0.0 -de 04_res 1 263 1.0 0.0 -de 05_nuclear 1 263 1.0 0.0 +de 01_solar 1 263 0.0 1.0 +de 02_wind_on 1 263 0.0 1.0 +de 03_wind_off 1 263 0.0 1.0 +de 04_res 1 263 0.0 1.0 +de 05_nuclear 1 263 0.0 1.0 de 06_coal 1 263 0.0 0.0 de 07_gas 1 263 0.0 0.0 de 08_non-res 1 263 0.0 0.0 de 09_hydro_pump 1 263 0.0 0.0 -de 01_solar 1 264 1.0 0.0 -de 02_wind_on 1 264 1.0 0.0 -de 03_wind_off 1 264 1.0 0.0 -de 04_res 1 264 1.0 0.0 -de 05_nuclear 1 264 1.0 0.0 +de 01_solar 1 264 0.0 1.0 +de 02_wind_on 1 264 0.0 1.0 +de 03_wind_off 1 264 0.0 1.0 +de 04_res 1 264 0.0 1.0 +de 05_nuclear 1 264 0.0 1.0 de 06_coal 1 264 0.0 0.0 de 07_gas 1 264 0.0 0.0 de 08_non-res 1 264 0.0 0.0 de 09_hydro_pump 1 264 0.0 0.0 -de 01_solar 1 265 1.0 0.0 -de 02_wind_on 1 265 1.0 0.0 -de 03_wind_off 1 265 1.0 0.0 -de 04_res 1 265 1.0 0.0 -de 05_nuclear 1 265 1.0 0.0 +de 01_solar 1 265 0.0 1.0 +de 02_wind_on 1 265 0.0 1.0 +de 03_wind_off 1 265 0.0 1.0 +de 04_res 1 265 0.0 1.0 +de 05_nuclear 1 265 0.0 1.0 de 06_coal 1 265 0.0 0.0 de 07_gas 1 265 0.0 0.0 de 08_non-res 1 265 0.0 0.0 de 09_hydro_pump 1 265 0.0 0.0 -de 01_solar 1 266 1.0 0.0 -de 02_wind_on 1 266 1.0 0.0 -de 03_wind_off 1 266 1.0 0.0 -de 04_res 1 266 1.0 0.0 -de 05_nuclear 1 266 1.0 0.0 +de 01_solar 1 266 0.0 1.0 +de 02_wind_on 1 266 0.0 1.0 +de 03_wind_off 1 266 0.0 1.0 +de 04_res 1 266 0.0 1.0 +de 05_nuclear 1 266 0.0 1.0 de 06_coal 1 266 0.0 0.0 de 07_gas 1 266 0.0 0.0 de 08_non-res 1 266 0.0 0.0 de 09_hydro_pump 1 266 0.0 0.0 -de 01_solar 1 267 1.0 0.0 -de 02_wind_on 1 267 1.0 0.0 -de 03_wind_off 1 267 1.0 0.0 -de 04_res 1 267 1.0 0.0 -de 05_nuclear 1 267 1.0 0.0 +de 01_solar 1 267 0.0 1.0 +de 02_wind_on 1 267 0.0 1.0 +de 03_wind_off 1 267 0.0 1.0 +de 04_res 1 267 0.0 1.0 +de 05_nuclear 1 267 0.0 1.0 de 06_coal 1 267 0.0 0.0 de 07_gas 1 267 0.0 0.0 de 08_non-res 1 267 0.0 0.0 de 09_hydro_pump 1 267 0.0 0.0 -de 01_solar 1 268 1.0 0.0 -de 02_wind_on 1 268 1.0 0.0 -de 03_wind_off 1 268 1.0 0.0 -de 04_res 1 268 1.0 0.0 -de 05_nuclear 1 268 1.0 0.0 +de 01_solar 1 268 0.0 1.0 +de 02_wind_on 1 268 0.0 1.0 +de 03_wind_off 1 268 0.0 1.0 +de 04_res 1 268 0.0 1.0 +de 05_nuclear 1 268 0.0 1.0 de 06_coal 1 268 0.0 0.0 de 07_gas 1 268 0.0 0.0 de 08_non-res 1 268 0.0 0.0 de 09_hydro_pump 1 268 0.0 0.0 -de 01_solar 1 269 1.0 0.0 -de 02_wind_on 1 269 1.0 0.0 -de 03_wind_off 1 269 1.0 0.0 -de 04_res 1 269 1.0 0.0 -de 05_nuclear 1 269 1.0 0.0 +de 01_solar 1 269 0.0 1.0 +de 02_wind_on 1 269 0.0 1.0 +de 03_wind_off 1 269 0.0 1.0 +de 04_res 1 269 0.0 1.0 +de 05_nuclear 1 269 0.0 1.0 de 06_coal 1 269 0.0 0.0 de 07_gas 1 269 0.0 0.0 de 08_non-res 1 269 0.0 0.0 de 09_hydro_pump 1 269 0.0 0.0 -de 01_solar 1 270 1.0 0.0 -de 02_wind_on 1 270 1.0 0.0 -de 03_wind_off 1 270 1.0 0.0 -de 04_res 1 270 1.0 0.0 -de 05_nuclear 1 270 1.0 0.0 -de 06_coal 1 270 1.0 0.0 +de 01_solar 1 270 0.0 1.0 +de 02_wind_on 1 270 0.0 1.0 +de 03_wind_off 1 270 0.0 1.0 +de 04_res 1 270 0.0 1.0 +de 05_nuclear 1 270 0.0 1.0 +de 06_coal 1 270 0.0 1.0 de 07_gas 1 270 0.0 0.0 de 08_non-res 1 270 0.0 0.0 de 09_hydro_pump 1 270 0.0 0.0 -de 01_solar 1 271 1.0 0.0 -de 02_wind_on 1 271 1.0 0.0 -de 03_wind_off 1 271 1.0 0.0 -de 04_res 1 271 1.0 0.0 -de 05_nuclear 1 271 1.0 0.0 -de 06_coal 1 271 1.0 0.0 +de 01_solar 1 271 0.0 1.0 +de 02_wind_on 1 271 0.0 1.0 +de 03_wind_off 1 271 0.0 1.0 +de 04_res 1 271 0.0 1.0 +de 05_nuclear 1 271 0.0 1.0 +de 06_coal 1 271 0.0 1.0 de 07_gas 1 271 0.0 0.0 de 08_non-res 1 271 0.0 0.0 de 09_hydro_pump 1 271 0.0 0.0 -de 01_solar 1 272 1.0 0.0 -de 02_wind_on 1 272 1.0 0.0 -de 03_wind_off 1 272 1.0 0.0 -de 04_res 1 272 1.0 0.0 -de 05_nuclear 1 272 1.0 0.0 -de 06_coal 1 272 1.0 0.0 +de 01_solar 1 272 0.0 1.0 +de 02_wind_on 1 272 0.0 1.0 +de 03_wind_off 1 272 0.0 1.0 +de 04_res 1 272 0.0 1.0 +de 05_nuclear 1 272 0.0 1.0 +de 06_coal 1 272 0.0 1.0 de 07_gas 1 272 0.0 0.0 de 08_non-res 1 272 0.0 0.0 de 09_hydro_pump 1 272 0.0 0.0 -de 01_solar 1 273 1.0 0.0 -de 02_wind_on 1 273 1.0 0.0 -de 03_wind_off 1 273 1.0 0.0 -de 04_res 1 273 1.0 0.0 -de 05_nuclear 1 273 1.0 0.0 -de 06_coal 1 273 1.0 0.0 +de 01_solar 1 273 0.0 1.0 +de 02_wind_on 1 273 0.0 1.0 +de 03_wind_off 1 273 0.0 1.0 +de 04_res 1 273 0.0 1.0 +de 05_nuclear 1 273 0.0 1.0 +de 06_coal 1 273 0.0 1.0 de 07_gas 1 273 0.0 0.0 de 08_non-res 1 273 0.0 0.0 de 09_hydro_pump 1 273 0.0 0.0 -de 01_solar 1 274 1.0 0.0 -de 02_wind_on 1 274 1.0 0.0 -de 03_wind_off 1 274 1.0 0.0 -de 04_res 1 274 1.0 0.0 -de 05_nuclear 1 274 1.0 0.0 -de 06_coal 1 274 1.0 0.0 +de 01_solar 1 274 0.0 1.0 +de 02_wind_on 1 274 0.0 1.0 +de 03_wind_off 1 274 0.0 1.0 +de 04_res 1 274 0.0 1.0 +de 05_nuclear 1 274 0.0 1.0 +de 06_coal 1 274 0.0 1.0 de 07_gas 1 274 0.0 0.0 de 08_non-res 1 274 0.0 0.0 de 09_hydro_pump 1 274 0.0 0.0 -de 01_solar 1 275 1.0 0.0 -de 02_wind_on 1 275 1.0 0.0 -de 03_wind_off 1 275 1.0 0.0 -de 04_res 1 275 1.0 0.0 -de 05_nuclear 1 275 1.0 0.0 -de 06_coal 1 275 1.0 0.0 +de 01_solar 1 275 0.0 1.0 +de 02_wind_on 1 275 0.0 1.0 +de 03_wind_off 1 275 0.0 1.0 +de 04_res 1 275 0.0 1.0 +de 05_nuclear 1 275 0.0 1.0 +de 06_coal 1 275 0.0 1.0 de 07_gas 1 275 0.0 0.0 de 08_non-res 1 275 0.0 0.0 de 09_hydro_pump 1 275 0.0 0.0 -de 01_solar 1 276 1.0 0.0 -de 02_wind_on 1 276 1.0 0.0 -de 03_wind_off 1 276 1.0 0.0 -de 04_res 1 276 1.0 0.0 -de 05_nuclear 1 276 1.0 0.0 -de 06_coal 1 276 1.0 0.0 +de 01_solar 1 276 0.0 1.0 +de 02_wind_on 1 276 0.0 1.0 +de 03_wind_off 1 276 0.0 1.0 +de 04_res 1 276 0.0 1.0 +de 05_nuclear 1 276 0.0 1.0 +de 06_coal 1 276 0.0 1.0 de 07_gas 1 276 0.0 0.0 de 08_non-res 1 276 0.0 0.0 de 09_hydro_pump 1 276 0.0 0.0 -de 01_solar 1 277 1.0 0.0 -de 02_wind_on 1 277 1.0 0.0 -de 03_wind_off 1 277 1.0 0.0 -de 04_res 1 277 1.0 0.0 -de 05_nuclear 1 277 1.0 0.0 -de 06_coal 1 277 1.0 0.0 +de 01_solar 1 277 0.0 1.0 +de 02_wind_on 1 277 0.0 1.0 +de 03_wind_off 1 277 0.0 1.0 +de 04_res 1 277 0.0 1.0 +de 05_nuclear 1 277 0.0 1.0 +de 06_coal 1 277 0.0 1.0 de 07_gas 1 277 0.0 0.0 de 08_non-res 1 277 0.0 0.0 de 09_hydro_pump 1 277 0.0 0.0 -de 01_solar 1 278 1.0 0.0 -de 02_wind_on 1 278 1.0 0.0 -de 03_wind_off 1 278 1.0 0.0 -de 04_res 1 278 1.0 0.0 -de 05_nuclear 1 278 1.0 0.0 -de 06_coal 1 278 1.0 0.0 +de 01_solar 1 278 0.0 1.0 +de 02_wind_on 1 278 0.0 1.0 +de 03_wind_off 1 278 0.0 1.0 +de 04_res 1 278 0.0 1.0 +de 05_nuclear 1 278 0.0 1.0 +de 06_coal 1 278 0.0 1.0 de 07_gas 1 278 0.0 0.0 de 08_non-res 1 278 0.0 0.0 de 09_hydro_pump 1 278 0.0 0.0 -de 01_solar 1 279 1.0 0.0 -de 02_wind_on 1 279 1.0 0.0 -de 03_wind_off 1 279 1.0 0.0 -de 04_res 1 279 1.0 0.0 -de 05_nuclear 1 279 1.0 0.0 -de 06_coal 1 279 1.0 0.0 +de 01_solar 1 279 0.0 1.0 +de 02_wind_on 1 279 0.0 1.0 +de 03_wind_off 1 279 0.0 1.0 +de 04_res 1 279 0.0 1.0 +de 05_nuclear 1 279 0.0 1.0 +de 06_coal 1 279 0.0 1.0 de 07_gas 1 279 0.0 0.0 de 08_non-res 1 279 0.0 0.0 de 09_hydro_pump 1 279 0.0 0.0 -de 01_solar 1 280 1.0 0.0 -de 02_wind_on 1 280 1.0 0.0 -de 03_wind_off 1 280 1.0 0.0 -de 04_res 1 280 1.0 0.0 -de 05_nuclear 1 280 1.0 0.0 -de 06_coal 1 280 1.0 0.0 +de 01_solar 1 280 0.0 1.0 +de 02_wind_on 1 280 0.0 1.0 +de 03_wind_off 1 280 0.0 1.0 +de 04_res 1 280 0.0 1.0 +de 05_nuclear 1 280 0.0 1.0 +de 06_coal 1 280 0.0 1.0 de 07_gas 1 280 0.0 0.0 de 08_non-res 1 280 0.0 0.0 de 09_hydro_pump 1 280 0.0 0.0 -de 01_solar 1 281 1.0 0.0 -de 02_wind_on 1 281 1.0 0.0 -de 03_wind_off 1 281 1.0 0.0 -de 04_res 1 281 1.0 0.0 -de 05_nuclear 1 281 1.0 0.0 -de 06_coal 1 281 1.0 0.0 +de 01_solar 1 281 0.0 1.0 +de 02_wind_on 1 281 0.0 1.0 +de 03_wind_off 1 281 0.0 1.0 +de 04_res 1 281 0.0 1.0 +de 05_nuclear 1 281 0.0 1.0 +de 06_coal 1 281 0.0 1.0 de 07_gas 1 281 0.0 0.0 de 08_non-res 1 281 0.0 0.0 de 09_hydro_pump 1 281 0.0 0.0 -de 01_solar 1 282 1.0 0.0 -de 02_wind_on 1 282 1.0 0.0 -de 03_wind_off 1 282 1.0 0.0 -de 04_res 1 282 1.0 0.0 -de 05_nuclear 1 282 1.0 0.0 -de 06_coal 1 282 1.0 0.0 +de 01_solar 1 282 0.0 1.0 +de 02_wind_on 1 282 0.0 1.0 +de 03_wind_off 1 282 0.0 1.0 +de 04_res 1 282 0.0 1.0 +de 05_nuclear 1 282 0.0 1.0 +de 06_coal 1 282 0.0 1.0 de 07_gas 1 282 0.0 0.0 de 08_non-res 1 282 0.0 0.0 de 09_hydro_pump 1 282 0.0 0.0 -de 01_solar 1 283 1.0 0.0 -de 02_wind_on 1 283 1.0 0.0 -de 03_wind_off 1 283 1.0 0.0 -de 04_res 1 283 1.0 0.0 -de 05_nuclear 1 283 1.0 0.0 -de 06_coal 1 283 1.0 0.0 +de 01_solar 1 283 0.0 1.0 +de 02_wind_on 1 283 0.0 1.0 +de 03_wind_off 1 283 0.0 1.0 +de 04_res 1 283 0.0 1.0 +de 05_nuclear 1 283 0.0 1.0 +de 06_coal 1 283 0.0 1.0 de 07_gas 1 283 0.0 0.0 de 08_non-res 1 283 0.0 0.0 de 09_hydro_pump 1 283 0.0 0.0 -de 01_solar 1 284 1.0 0.0 -de 02_wind_on 1 284 1.0 0.0 -de 03_wind_off 1 284 1.0 0.0 -de 04_res 1 284 1.0 0.0 -de 05_nuclear 1 284 1.0 0.0 -de 06_coal 1 284 1.0 0.0 +de 01_solar 1 284 0.0 1.0 +de 02_wind_on 1 284 0.0 1.0 +de 03_wind_off 1 284 0.0 1.0 +de 04_res 1 284 0.0 1.0 +de 05_nuclear 1 284 0.0 1.0 +de 06_coal 1 284 0.0 1.0 de 07_gas 1 284 0.0 0.0 de 08_non-res 1 284 0.0 0.0 de 09_hydro_pump 1 284 0.0 0.0 -de 01_solar 1 285 1.0 0.0 -de 02_wind_on 1 285 1.0 0.0 -de 03_wind_off 1 285 1.0 0.0 -de 04_res 1 285 1.0 0.0 -de 05_nuclear 1 285 1.0 0.0 -de 06_coal 1 285 1.0 0.0 +de 01_solar 1 285 0.0 1.0 +de 02_wind_on 1 285 0.0 1.0 +de 03_wind_off 1 285 0.0 1.0 +de 04_res 1 285 0.0 1.0 +de 05_nuclear 1 285 0.0 1.0 +de 06_coal 1 285 0.0 1.0 de 07_gas 1 285 0.0 0.0 de 08_non-res 1 285 0.0 0.0 de 09_hydro_pump 1 285 0.0 0.0 -de 01_solar 1 286 1.0 0.0 -de 02_wind_on 1 286 1.0 0.0 -de 03_wind_off 1 286 1.0 0.0 -de 04_res 1 286 1.0 0.0 -de 05_nuclear 1 286 1.0 0.0 -de 06_coal 1 286 1.0 0.0 +de 01_solar 1 286 0.0 1.0 +de 02_wind_on 1 286 0.0 1.0 +de 03_wind_off 1 286 0.0 1.0 +de 04_res 1 286 0.0 1.0 +de 05_nuclear 1 286 0.0 1.0 +de 06_coal 1 286 0.0 1.0 de 07_gas 1 286 0.0 0.0 de 08_non-res 1 286 0.0 0.0 de 09_hydro_pump 1 286 0.0 0.0 -de 01_solar 1 287 1.0 0.0 -de 02_wind_on 1 287 1.0 0.0 -de 03_wind_off 1 287 1.0 0.0 -de 04_res 1 287 1.0 0.0 -de 05_nuclear 1 287 1.0 0.0 -de 06_coal 1 287 1.0 0.0 +de 01_solar 1 287 0.0 1.0 +de 02_wind_on 1 287 0.0 1.0 +de 03_wind_off 1 287 0.0 1.0 +de 04_res 1 287 0.0 1.0 +de 05_nuclear 1 287 0.0 1.0 +de 06_coal 1 287 0.0 1.0 de 07_gas 1 287 0.0 0.0 de 08_non-res 1 287 0.0 0.0 de 09_hydro_pump 1 287 0.0 0.0 -de 01_solar 1 288 1.0 0.0 -de 02_wind_on 1 288 1.0 0.0 -de 03_wind_off 1 288 1.0 0.0 -de 04_res 1 288 1.0 0.0 -de 05_nuclear 1 288 1.0 0.0 -de 06_coal 1 288 1.0 0.0 +de 01_solar 1 288 0.0 1.0 +de 02_wind_on 1 288 0.0 1.0 +de 03_wind_off 1 288 0.0 1.0 +de 04_res 1 288 0.0 1.0 +de 05_nuclear 1 288 0.0 1.0 +de 06_coal 1 288 0.0 1.0 de 07_gas 1 288 0.0 0.0 de 08_non-res 1 288 0.0 0.0 de 09_hydro_pump 1 288 0.0 0.0 -de 01_solar 1 289 1.0 0.0 -de 02_wind_on 1 289 1.0 0.0 -de 03_wind_off 1 289 1.0 0.0 -de 04_res 1 289 1.0 0.0 -de 05_nuclear 1 289 1.0 0.0 -de 06_coal 1 289 1.0 0.0 +de 01_solar 1 289 0.0 1.0 +de 02_wind_on 1 289 0.0 1.0 +de 03_wind_off 1 289 0.0 1.0 +de 04_res 1 289 0.0 1.0 +de 05_nuclear 1 289 0.0 1.0 +de 06_coal 1 289 0.0 1.0 de 07_gas 1 289 0.0 0.0 de 08_non-res 1 289 0.0 0.0 de 09_hydro_pump 1 289 0.0 0.0 -de 01_solar 1 290 1.0 0.0 -de 02_wind_on 1 290 1.0 0.0 -de 03_wind_off 1 290 1.0 0.0 -de 04_res 1 290 1.0 0.0 -de 05_nuclear 1 290 1.0 0.0 -de 06_coal 1 290 1.0 0.0 -de 07_gas 1 290 1.0 0.0 +de 01_solar 1 290 0.0 1.0 +de 02_wind_on 1 290 0.0 1.0 +de 03_wind_off 1 290 0.0 1.0 +de 04_res 1 290 0.0 1.0 +de 05_nuclear 1 290 0.0 1.0 +de 06_coal 1 290 0.0 1.0 +de 07_gas 1 290 0.0 1.0 de 08_non-res 1 290 0.0 0.0 de 09_hydro_pump 1 290 0.0 0.0 -de 01_solar 1 291 1.0 0.0 -de 02_wind_on 1 291 1.0 0.0 -de 03_wind_off 1 291 1.0 0.0 -de 04_res 1 291 1.0 0.0 -de 05_nuclear 1 291 1.0 0.0 -de 06_coal 1 291 1.0 0.0 -de 07_gas 1 291 1.0 0.0 +de 01_solar 1 291 0.0 1.0 +de 02_wind_on 1 291 0.0 1.0 +de 03_wind_off 1 291 0.0 1.0 +de 04_res 1 291 0.0 1.0 +de 05_nuclear 1 291 0.0 1.0 +de 06_coal 1 291 0.0 1.0 +de 07_gas 1 291 0.0 1.0 de 08_non-res 1 291 0.0 0.0 de 09_hydro_pump 1 291 0.0 0.0 -de 01_solar 1 292 1.0 0.0 -de 02_wind_on 1 292 1.0 0.0 -de 03_wind_off 1 292 1.0 0.0 -de 04_res 1 292 1.0 0.0 -de 05_nuclear 1 292 1.0 0.0 -de 06_coal 1 292 1.0 0.0 -de 07_gas 1 292 1.0 0.0 +de 01_solar 1 292 0.0 1.0 +de 02_wind_on 1 292 0.0 1.0 +de 03_wind_off 1 292 0.0 1.0 +de 04_res 1 292 0.0 1.0 +de 05_nuclear 1 292 0.0 1.0 +de 06_coal 1 292 0.0 1.0 +de 07_gas 1 292 0.0 1.0 de 08_non-res 1 292 0.0 0.0 de 09_hydro_pump 1 292 0.0 0.0 -de 01_solar 1 293 1.0 0.0 -de 02_wind_on 1 293 1.0 0.0 -de 03_wind_off 1 293 1.0 0.0 -de 04_res 1 293 1.0 0.0 -de 05_nuclear 1 293 1.0 0.0 -de 06_coal 1 293 1.0 0.0 -de 07_gas 1 293 1.0 0.0 +de 01_solar 1 293 0.0 1.0 +de 02_wind_on 1 293 0.0 1.0 +de 03_wind_off 1 293 0.0 1.0 +de 04_res 1 293 0.0 1.0 +de 05_nuclear 1 293 0.0 1.0 +de 06_coal 1 293 0.0 1.0 +de 07_gas 1 293 0.0 1.0 de 08_non-res 1 293 0.0 0.0 de 09_hydro_pump 1 293 0.0 0.0 -de 01_solar 1 294 1.0 0.0 -de 02_wind_on 1 294 1.0 0.0 -de 03_wind_off 1 294 1.0 0.0 -de 04_res 1 294 1.0 0.0 -de 05_nuclear 1 294 1.0 0.0 -de 06_coal 1 294 1.0 0.0 -de 07_gas 1 294 1.0 0.0 +de 01_solar 1 294 0.0 1.0 +de 02_wind_on 1 294 0.0 1.0 +de 03_wind_off 1 294 0.0 1.0 +de 04_res 1 294 0.0 1.0 +de 05_nuclear 1 294 0.0 1.0 +de 06_coal 1 294 0.0 1.0 +de 07_gas 1 294 0.0 1.0 de 08_non-res 1 294 0.0 0.0 de 09_hydro_pump 1 294 0.0 0.0 -de 01_solar 1 295 1.0 0.0 -de 02_wind_on 1 295 1.0 0.0 -de 03_wind_off 1 295 1.0 0.0 -de 04_res 1 295 1.0 0.0 -de 05_nuclear 1 295 1.0 0.0 -de 06_coal 1 295 1.0 0.0 -de 07_gas 1 295 1.0 0.0 +de 01_solar 1 295 0.0 1.0 +de 02_wind_on 1 295 0.0 1.0 +de 03_wind_off 1 295 0.0 1.0 +de 04_res 1 295 0.0 1.0 +de 05_nuclear 1 295 0.0 1.0 +de 06_coal 1 295 0.0 1.0 +de 07_gas 1 295 0.0 1.0 de 08_non-res 1 295 0.0 0.0 de 09_hydro_pump 1 295 0.0 0.0 -de 01_solar 1 296 1.0 0.0 -de 02_wind_on 1 296 1.0 0.0 -de 03_wind_off 1 296 1.0 0.0 -de 04_res 1 296 1.0 0.0 -de 05_nuclear 1 296 1.0 0.0 -de 06_coal 1 296 1.0 0.0 -de 07_gas 1 296 1.0 0.0 +de 01_solar 1 296 0.0 1.0 +de 02_wind_on 1 296 0.0 1.0 +de 03_wind_off 1 296 0.0 1.0 +de 04_res 1 296 0.0 1.0 +de 05_nuclear 1 296 0.0 1.0 +de 06_coal 1 296 0.0 1.0 +de 07_gas 1 296 0.0 1.0 de 08_non-res 1 296 0.0 0.0 de 09_hydro_pump 1 296 0.0 0.0 -de 01_solar 1 297 1.0 0.0 -de 02_wind_on 1 297 1.0 0.0 -de 03_wind_off 1 297 1.0 0.0 -de 04_res 1 297 1.0 0.0 -de 05_nuclear 1 297 1.0 0.0 -de 06_coal 1 297 1.0 0.0 -de 07_gas 1 297 1.0 0.0 +de 01_solar 1 297 0.0 1.0 +de 02_wind_on 1 297 0.0 1.0 +de 03_wind_off 1 297 0.0 1.0 +de 04_res 1 297 0.0 1.0 +de 05_nuclear 1 297 0.0 1.0 +de 06_coal 1 297 0.0 1.0 +de 07_gas 1 297 0.0 1.0 de 08_non-res 1 297 0.0 0.0 de 09_hydro_pump 1 297 0.0 0.0 -de 01_solar 1 298 1.0 0.0 -de 02_wind_on 1 298 1.0 0.0 -de 03_wind_off 1 298 1.0 0.0 -de 04_res 1 298 1.0 0.0 -de 05_nuclear 1 298 1.0 0.0 -de 06_coal 1 298 1.0 0.0 -de 07_gas 1 298 1.0 0.0 +de 01_solar 1 298 0.0 1.0 +de 02_wind_on 1 298 0.0 1.0 +de 03_wind_off 1 298 0.0 1.0 +de 04_res 1 298 0.0 1.0 +de 05_nuclear 1 298 0.0 1.0 +de 06_coal 1 298 0.0 1.0 +de 07_gas 1 298 0.0 1.0 de 08_non-res 1 298 0.0 0.0 de 09_hydro_pump 1 298 0.0 0.0 -de 01_solar 1 299 1.0 0.0 -de 02_wind_on 1 299 1.0 0.0 -de 03_wind_off 1 299 1.0 0.0 -de 04_res 1 299 1.0 0.0 -de 05_nuclear 1 299 1.0 0.0 -de 06_coal 1 299 1.0 0.0 -de 07_gas 1 299 1.0 0.0 +de 01_solar 1 299 0.0 1.0 +de 02_wind_on 1 299 0.0 1.0 +de 03_wind_off 1 299 0.0 1.0 +de 04_res 1 299 0.0 1.0 +de 05_nuclear 1 299 0.0 1.0 +de 06_coal 1 299 0.0 1.0 +de 07_gas 1 299 0.0 1.0 de 08_non-res 1 299 0.0 0.0 de 09_hydro_pump 1 299 0.0 0.0 -de 01_solar 1 300 1.0 0.0 -de 02_wind_on 1 300 1.0 0.0 -de 03_wind_off 1 300 1.0 0.0 -de 04_res 1 300 1.0 0.0 -de 05_nuclear 1 300 1.0 0.0 -de 06_coal 1 300 1.0 0.0 -de 07_gas 1 300 1.0 0.0 +de 01_solar 1 300 0.0 1.0 +de 02_wind_on 1 300 0.0 1.0 +de 03_wind_off 1 300 0.0 1.0 +de 04_res 1 300 0.0 1.0 +de 05_nuclear 1 300 0.0 1.0 +de 06_coal 1 300 0.0 1.0 +de 07_gas 1 300 0.0 1.0 de 08_non-res 1 300 0.0 0.0 de 09_hydro_pump 1 300 0.0 0.0 -de 01_solar 1 301 1.0 0.0 -de 02_wind_on 1 301 1.0 0.0 -de 03_wind_off 1 301 1.0 0.0 -de 04_res 1 301 1.0 0.0 -de 05_nuclear 1 301 1.0 0.0 -de 06_coal 1 301 1.0 0.0 -de 07_gas 1 301 1.0 0.0 +de 01_solar 1 301 0.0 1.0 +de 02_wind_on 1 301 0.0 1.0 +de 03_wind_off 1 301 0.0 1.0 +de 04_res 1 301 0.0 1.0 +de 05_nuclear 1 301 0.0 1.0 +de 06_coal 1 301 0.0 1.0 +de 07_gas 1 301 0.0 1.0 de 08_non-res 1 301 0.0 0.0 de 09_hydro_pump 1 301 0.0 0.0 -de 01_solar 1 302 1.0 0.0 -de 02_wind_on 1 302 1.0 0.0 -de 03_wind_off 1 302 1.0 0.0 -de 04_res 1 302 1.0 0.0 -de 05_nuclear 1 302 1.0 0.0 -de 06_coal 1 302 1.0 0.0 -de 07_gas 1 302 1.0 0.0 +de 01_solar 1 302 0.0 1.0 +de 02_wind_on 1 302 0.0 1.0 +de 03_wind_off 1 302 0.0 1.0 +de 04_res 1 302 0.0 1.0 +de 05_nuclear 1 302 0.0 1.0 +de 06_coal 1 302 0.0 1.0 +de 07_gas 1 302 0.0 1.0 de 08_non-res 1 302 0.0 0.0 de 09_hydro_pump 1 302 0.0 0.0 -de 01_solar 1 303 1.0 0.0 -de 02_wind_on 1 303 1.0 0.0 -de 03_wind_off 1 303 1.0 0.0 -de 04_res 1 303 1.0 0.0 -de 05_nuclear 1 303 1.0 0.0 -de 06_coal 1 303 1.0 0.0 -de 07_gas 1 303 1.0 0.0 +de 01_solar 1 303 0.0 1.0 +de 02_wind_on 1 303 0.0 1.0 +de 03_wind_off 1 303 0.0 1.0 +de 04_res 1 303 0.0 1.0 +de 05_nuclear 1 303 0.0 1.0 +de 06_coal 1 303 0.0 1.0 +de 07_gas 1 303 0.0 1.0 de 08_non-res 1 303 0.0 0.0 de 09_hydro_pump 1 303 0.0 0.0 -de 01_solar 1 304 1.0 0.0 -de 02_wind_on 1 304 1.0 0.0 -de 03_wind_off 1 304 1.0 0.0 -de 04_res 1 304 1.0 0.0 -de 05_nuclear 1 304 1.0 0.0 -de 06_coal 1 304 1.0 0.0 -de 07_gas 1 304 1.0 0.0 +de 01_solar 1 304 0.0 1.0 +de 02_wind_on 1 304 0.0 1.0 +de 03_wind_off 1 304 0.0 1.0 +de 04_res 1 304 0.0 1.0 +de 05_nuclear 1 304 0.0 1.0 +de 06_coal 1 304 0.0 1.0 +de 07_gas 1 304 0.0 1.0 de 08_non-res 1 304 0.0 0.0 de 09_hydro_pump 1 304 0.0 0.0 -de 01_solar 1 305 1.0 0.0 -de 02_wind_on 1 305 1.0 0.0 -de 03_wind_off 1 305 1.0 0.0 -de 04_res 1 305 1.0 0.0 -de 05_nuclear 1 305 1.0 0.0 -de 06_coal 1 305 1.0 0.0 -de 07_gas 1 305 1.0 0.0 +de 01_solar 1 305 0.0 1.0 +de 02_wind_on 1 305 0.0 1.0 +de 03_wind_off 1 305 0.0 1.0 +de 04_res 1 305 0.0 1.0 +de 05_nuclear 1 305 0.0 1.0 +de 06_coal 1 305 0.0 1.0 +de 07_gas 1 305 0.0 1.0 de 08_non-res 1 305 0.0 0.0 de 09_hydro_pump 1 305 0.0 0.0 -de 01_solar 1 306 1.0 0.0 -de 02_wind_on 1 306 1.0 0.0 -de 03_wind_off 1 306 1.0 0.0 -de 04_res 1 306 1.0 0.0 -de 05_nuclear 1 306 1.0 0.0 -de 06_coal 1 306 1.0 0.0 -de 07_gas 1 306 1.0 0.0 +de 01_solar 1 306 0.0 1.0 +de 02_wind_on 1 306 0.0 1.0 +de 03_wind_off 1 306 0.0 1.0 +de 04_res 1 306 0.0 1.0 +de 05_nuclear 1 306 0.0 1.0 +de 06_coal 1 306 0.0 1.0 +de 07_gas 1 306 0.0 1.0 de 08_non-res 1 306 0.0 0.0 de 09_hydro_pump 1 306 0.0 0.0 -de 01_solar 1 307 1.0 0.0 -de 02_wind_on 1 307 1.0 0.0 -de 03_wind_off 1 307 1.0 0.0 -de 04_res 1 307 1.0 0.0 -de 05_nuclear 1 307 1.0 0.0 -de 06_coal 1 307 1.0 0.0 -de 07_gas 1 307 1.0 0.0 +de 01_solar 1 307 0.0 1.0 +de 02_wind_on 1 307 0.0 1.0 +de 03_wind_off 1 307 0.0 1.0 +de 04_res 1 307 0.0 1.0 +de 05_nuclear 1 307 0.0 1.0 +de 06_coal 1 307 0.0 1.0 +de 07_gas 1 307 0.0 1.0 de 08_non-res 1 307 0.0 0.0 de 09_hydro_pump 1 307 0.0 0.0 -de 01_solar 1 308 1.0 0.0 -de 02_wind_on 1 308 1.0 0.0 -de 03_wind_off 1 308 1.0 0.0 -de 04_res 1 308 1.0 0.0 -de 05_nuclear 1 308 1.0 0.0 -de 06_coal 1 308 1.0 0.0 -de 07_gas 1 308 1.0 0.0 +de 01_solar 1 308 0.0 1.0 +de 02_wind_on 1 308 0.0 1.0 +de 03_wind_off 1 308 0.0 1.0 +de 04_res 1 308 0.0 1.0 +de 05_nuclear 1 308 0.0 1.0 +de 06_coal 1 308 0.0 1.0 +de 07_gas 1 308 0.0 1.0 de 08_non-res 1 308 0.0 0.0 de 09_hydro_pump 1 308 0.0 0.0 -de 01_solar 1 309 1.0 0.0 -de 02_wind_on 1 309 1.0 0.0 -de 03_wind_off 1 309 1.0 0.0 -de 04_res 1 309 1.0 0.0 -de 05_nuclear 1 309 1.0 0.0 -de 06_coal 1 309 1.0 0.0 -de 07_gas 1 309 1.0 0.0 +de 01_solar 1 309 0.0 1.0 +de 02_wind_on 1 309 0.0 1.0 +de 03_wind_off 1 309 0.0 1.0 +de 04_res 1 309 0.0 1.0 +de 05_nuclear 1 309 0.0 1.0 +de 06_coal 1 309 0.0 1.0 +de 07_gas 1 309 0.0 1.0 de 08_non-res 1 309 0.0 0.0 de 09_hydro_pump 1 309 0.0 0.0 -de 01_solar 1 310 1.0 0.0 -de 02_wind_on 1 310 1.0 0.0 -de 03_wind_off 1 310 1.0 0.0 -de 04_res 1 310 1.0 0.0 -de 05_nuclear 1 310 1.0 0.0 -de 06_coal 1 310 1.0 0.0 -de 07_gas 1 310 1.0 0.0 -de 08_non-res 1 310 1.0 0.0 +de 01_solar 1 310 0.0 1.0 +de 02_wind_on 1 310 0.0 1.0 +de 03_wind_off 1 310 0.0 1.0 +de 04_res 1 310 0.0 1.0 +de 05_nuclear 1 310 0.0 1.0 +de 06_coal 1 310 0.0 1.0 +de 07_gas 1 310 0.0 1.0 +de 08_non-res 1 310 0.0 1.0 de 09_hydro_pump 1 310 0.0 0.0 -de 01_solar 1 311 1.0 0.0 -de 02_wind_on 1 311 1.0 0.0 -de 03_wind_off 1 311 1.0 0.0 -de 04_res 1 311 1.0 0.0 -de 05_nuclear 1 311 1.0 0.0 -de 06_coal 1 311 1.0 0.0 -de 07_gas 1 311 1.0 0.0 -de 08_non-res 1 311 1.0 0.0 +de 01_solar 1 311 0.0 1.0 +de 02_wind_on 1 311 0.0 1.0 +de 03_wind_off 1 311 0.0 1.0 +de 04_res 1 311 0.0 1.0 +de 05_nuclear 1 311 0.0 1.0 +de 06_coal 1 311 0.0 1.0 +de 07_gas 1 311 0.0 1.0 +de 08_non-res 1 311 0.0 1.0 de 09_hydro_pump 1 311 0.0 0.0 -de 01_solar 1 312 1.0 0.0 -de 02_wind_on 1 312 1.0 0.0 -de 03_wind_off 1 312 1.0 0.0 -de 04_res 1 312 1.0 0.0 -de 05_nuclear 1 312 1.0 0.0 -de 06_coal 1 312 1.0 0.0 -de 07_gas 1 312 1.0 0.0 -de 08_non-res 1 312 1.0 0.0 +de 01_solar 1 312 0.0 1.0 +de 02_wind_on 1 312 0.0 1.0 +de 03_wind_off 1 312 0.0 1.0 +de 04_res 1 312 0.0 1.0 +de 05_nuclear 1 312 0.0 1.0 +de 06_coal 1 312 0.0 1.0 +de 07_gas 1 312 0.0 1.0 +de 08_non-res 1 312 0.0 1.0 de 09_hydro_pump 1 312 0.0 0.0 -de 01_solar 1 313 1.0 0.0 -de 02_wind_on 1 313 1.0 0.0 -de 03_wind_off 1 313 1.0 0.0 -de 04_res 1 313 1.0 0.0 -de 05_nuclear 1 313 1.0 0.0 -de 06_coal 1 313 1.0 0.0 -de 07_gas 1 313 1.0 0.0 -de 08_non-res 1 313 1.0 0.0 +de 01_solar 1 313 0.0 1.0 +de 02_wind_on 1 313 0.0 1.0 +de 03_wind_off 1 313 0.0 1.0 +de 04_res 1 313 0.0 1.0 +de 05_nuclear 1 313 0.0 1.0 +de 06_coal 1 313 0.0 1.0 +de 07_gas 1 313 0.0 1.0 +de 08_non-res 1 313 0.0 1.0 de 09_hydro_pump 1 313 0.0 0.0 -de 01_solar 1 314 1.0 0.0 -de 02_wind_on 1 314 1.0 0.0 -de 03_wind_off 1 314 1.0 0.0 -de 04_res 1 314 1.0 0.0 -de 05_nuclear 1 314 1.0 0.0 -de 06_coal 1 314 1.0 0.0 -de 07_gas 1 314 1.0 0.0 -de 08_non-res 1 314 1.0 0.0 +de 01_solar 1 314 0.0 1.0 +de 02_wind_on 1 314 0.0 1.0 +de 03_wind_off 1 314 0.0 1.0 +de 04_res 1 314 0.0 1.0 +de 05_nuclear 1 314 0.0 1.0 +de 06_coal 1 314 0.0 1.0 +de 07_gas 1 314 0.0 1.0 +de 08_non-res 1 314 0.0 1.0 de 09_hydro_pump 1 314 0.0 0.0 -de 01_solar 1 315 1.0 0.0 -de 02_wind_on 1 315 1.0 0.0 -de 03_wind_off 1 315 1.0 0.0 -de 04_res 1 315 1.0 0.0 -de 05_nuclear 1 315 1.0 0.0 -de 06_coal 1 315 1.0 0.0 -de 07_gas 1 315 1.0 0.0 -de 08_non-res 1 315 1.0 0.0 +de 01_solar 1 315 0.0 1.0 +de 02_wind_on 1 315 0.0 1.0 +de 03_wind_off 1 315 0.0 1.0 +de 04_res 1 315 0.0 1.0 +de 05_nuclear 1 315 0.0 1.0 +de 06_coal 1 315 0.0 1.0 +de 07_gas 1 315 0.0 1.0 +de 08_non-res 1 315 0.0 1.0 de 09_hydro_pump 1 315 0.0 0.0 -de 01_solar 1 316 1.0 0.0 -de 02_wind_on 1 316 1.0 0.0 -de 03_wind_off 1 316 1.0 0.0 -de 04_res 1 316 1.0 0.0 -de 05_nuclear 1 316 1.0 0.0 -de 06_coal 1 316 1.0 0.0 -de 07_gas 1 316 1.0 0.0 -de 08_non-res 1 316 1.0 0.0 +de 01_solar 1 316 0.0 1.0 +de 02_wind_on 1 316 0.0 1.0 +de 03_wind_off 1 316 0.0 1.0 +de 04_res 1 316 0.0 1.0 +de 05_nuclear 1 316 0.0 1.0 +de 06_coal 1 316 0.0 1.0 +de 07_gas 1 316 0.0 1.0 +de 08_non-res 1 316 0.0 1.0 de 09_hydro_pump 1 316 0.0 0.0 -de 01_solar 1 317 1.0 0.0 -de 02_wind_on 1 317 1.0 0.0 -de 03_wind_off 1 317 1.0 0.0 -de 04_res 1 317 1.0 0.0 -de 05_nuclear 1 317 1.0 0.0 -de 06_coal 1 317 1.0 0.0 -de 07_gas 1 317 1.0 0.0 -de 08_non-res 1 317 1.0 0.0 +de 01_solar 1 317 0.0 1.0 +de 02_wind_on 1 317 0.0 1.0 +de 03_wind_off 1 317 0.0 1.0 +de 04_res 1 317 0.0 1.0 +de 05_nuclear 1 317 0.0 1.0 +de 06_coal 1 317 0.0 1.0 +de 07_gas 1 317 0.0 1.0 +de 08_non-res 1 317 0.0 1.0 de 09_hydro_pump 1 317 0.0 0.0 -de 01_solar 1 318 1.0 0.0 -de 02_wind_on 1 318 1.0 0.0 -de 03_wind_off 1 318 1.0 0.0 -de 04_res 1 318 1.0 0.0 -de 05_nuclear 1 318 1.0 0.0 -de 06_coal 1 318 1.0 0.0 -de 07_gas 1 318 1.0 0.0 -de 08_non-res 1 318 1.0 0.0 +de 01_solar 1 318 0.0 1.0 +de 02_wind_on 1 318 0.0 1.0 +de 03_wind_off 1 318 0.0 1.0 +de 04_res 1 318 0.0 1.0 +de 05_nuclear 1 318 0.0 1.0 +de 06_coal 1 318 0.0 1.0 +de 07_gas 1 318 0.0 1.0 +de 08_non-res 1 318 0.0 1.0 de 09_hydro_pump 1 318 0.0 0.0 -de 01_solar 1 319 1.0 0.0 -de 02_wind_on 1 319 1.0 0.0 -de 03_wind_off 1 319 1.0 0.0 -de 04_res 1 319 1.0 0.0 -de 05_nuclear 1 319 1.0 0.0 -de 06_coal 1 319 1.0 0.0 -de 07_gas 1 319 1.0 0.0 -de 08_non-res 1 319 1.0 0.0 +de 01_solar 1 319 0.0 1.0 +de 02_wind_on 1 319 0.0 1.0 +de 03_wind_off 1 319 0.0 1.0 +de 04_res 1 319 0.0 1.0 +de 05_nuclear 1 319 0.0 1.0 +de 06_coal 1 319 0.0 1.0 +de 07_gas 1 319 0.0 1.0 +de 08_non-res 1 319 0.0 1.0 de 09_hydro_pump 1 319 0.0 0.0 -de 01_solar 1 320 1.0 0.0 -de 02_wind_on 1 320 1.0 0.0 -de 03_wind_off 1 320 1.0 0.0 -de 04_res 1 320 1.0 0.0 -de 05_nuclear 1 320 1.0 0.0 -de 06_coal 1 320 1.0 0.0 -de 07_gas 1 320 1.0 0.0 -de 08_non-res 1 320 1.0 0.0 +de 01_solar 1 320 0.0 1.0 +de 02_wind_on 1 320 0.0 1.0 +de 03_wind_off 1 320 0.0 1.0 +de 04_res 1 320 0.0 1.0 +de 05_nuclear 1 320 0.0 1.0 +de 06_coal 1 320 0.0 1.0 +de 07_gas 1 320 0.0 1.0 +de 08_non-res 1 320 0.0 1.0 de 09_hydro_pump 1 320 0.0 0.0 -de 01_solar 1 321 1.0 0.0 -de 02_wind_on 1 321 1.0 0.0 -de 03_wind_off 1 321 1.0 0.0 -de 04_res 1 321 1.0 0.0 -de 05_nuclear 1 321 1.0 0.0 -de 06_coal 1 321 1.0 0.0 -de 07_gas 1 321 1.0 0.0 -de 08_non-res 1 321 1.0 0.0 +de 01_solar 1 321 0.0 1.0 +de 02_wind_on 1 321 0.0 1.0 +de 03_wind_off 1 321 0.0 1.0 +de 04_res 1 321 0.0 1.0 +de 05_nuclear 1 321 0.0 1.0 +de 06_coal 1 321 0.0 1.0 +de 07_gas 1 321 0.0 1.0 +de 08_non-res 1 321 0.0 1.0 de 09_hydro_pump 1 321 0.0 0.0 -de 01_solar 1 322 1.0 0.0 -de 02_wind_on 1 322 1.0 0.0 -de 03_wind_off 1 322 1.0 0.0 -de 04_res 1 322 1.0 0.0 -de 05_nuclear 1 322 1.0 0.0 -de 06_coal 1 322 1.0 0.0 -de 07_gas 1 322 1.0 0.0 -de 08_non-res 1 322 1.0 0.0 +de 01_solar 1 322 0.0 1.0 +de 02_wind_on 1 322 0.0 1.0 +de 03_wind_off 1 322 0.0 1.0 +de 04_res 1 322 0.0 1.0 +de 05_nuclear 1 322 0.0 1.0 +de 06_coal 1 322 0.0 1.0 +de 07_gas 1 322 0.0 1.0 +de 08_non-res 1 322 0.0 1.0 de 09_hydro_pump 1 322 0.0 0.0 -de 01_solar 1 323 1.0 0.0 -de 02_wind_on 1 323 1.0 0.0 -de 03_wind_off 1 323 1.0 0.0 -de 04_res 1 323 1.0 0.0 -de 05_nuclear 1 323 1.0 0.0 -de 06_coal 1 323 1.0 0.0 -de 07_gas 1 323 1.0 0.0 -de 08_non-res 1 323 1.0 0.0 +de 01_solar 1 323 0.0 1.0 +de 02_wind_on 1 323 0.0 1.0 +de 03_wind_off 1 323 0.0 1.0 +de 04_res 1 323 0.0 1.0 +de 05_nuclear 1 323 0.0 1.0 +de 06_coal 1 323 0.0 1.0 +de 07_gas 1 323 0.0 1.0 +de 08_non-res 1 323 0.0 1.0 de 09_hydro_pump 1 323 0.0 0.0 -de 01_solar 1 324 1.0 0.0 -de 02_wind_on 1 324 1.0 0.0 -de 03_wind_off 1 324 1.0 0.0 -de 04_res 1 324 1.0 0.0 -de 05_nuclear 1 324 1.0 0.0 -de 06_coal 1 324 1.0 0.0 -de 07_gas 1 324 1.0 0.0 -de 08_non-res 1 324 1.0 0.0 +de 01_solar 1 324 0.0 1.0 +de 02_wind_on 1 324 0.0 1.0 +de 03_wind_off 1 324 0.0 1.0 +de 04_res 1 324 0.0 1.0 +de 05_nuclear 1 324 0.0 1.0 +de 06_coal 1 324 0.0 1.0 +de 07_gas 1 324 0.0 1.0 +de 08_non-res 1 324 0.0 1.0 de 09_hydro_pump 1 324 0.0 0.0 -de 01_solar 1 325 1.0 0.0 -de 02_wind_on 1 325 1.0 0.0 -de 03_wind_off 1 325 1.0 0.0 -de 04_res 1 325 1.0 0.0 -de 05_nuclear 1 325 1.0 0.0 -de 06_coal 1 325 1.0 0.0 -de 07_gas 1 325 1.0 0.0 -de 08_non-res 1 325 1.0 0.0 +de 01_solar 1 325 0.0 1.0 +de 02_wind_on 1 325 0.0 1.0 +de 03_wind_off 1 325 0.0 1.0 +de 04_res 1 325 0.0 1.0 +de 05_nuclear 1 325 0.0 1.0 +de 06_coal 1 325 0.0 1.0 +de 07_gas 1 325 0.0 1.0 +de 08_non-res 1 325 0.0 1.0 de 09_hydro_pump 1 325 0.0 0.0 -de 01_solar 1 326 1.0 0.0 -de 02_wind_on 1 326 1.0 0.0 -de 03_wind_off 1 326 1.0 0.0 -de 04_res 1 326 1.0 0.0 -de 05_nuclear 1 326 1.0 0.0 -de 06_coal 1 326 1.0 0.0 -de 07_gas 1 326 1.0 0.0 -de 08_non-res 1 326 1.0 0.0 +de 01_solar 1 326 0.0 1.0 +de 02_wind_on 1 326 0.0 1.0 +de 03_wind_off 1 326 0.0 1.0 +de 04_res 1 326 0.0 1.0 +de 05_nuclear 1 326 0.0 1.0 +de 06_coal 1 326 0.0 1.0 +de 07_gas 1 326 0.0 1.0 +de 08_non-res 1 326 0.0 1.0 de 09_hydro_pump 1 326 0.0 0.0 -de 01_solar 1 327 1.0 0.0 -de 02_wind_on 1 327 1.0 0.0 -de 03_wind_off 1 327 1.0 0.0 -de 04_res 1 327 1.0 0.0 -de 05_nuclear 1 327 1.0 0.0 -de 06_coal 1 327 1.0 0.0 -de 07_gas 1 327 1.0 0.0 -de 08_non-res 1 327 1.0 0.0 +de 01_solar 1 327 0.0 1.0 +de 02_wind_on 1 327 0.0 1.0 +de 03_wind_off 1 327 0.0 1.0 +de 04_res 1 327 0.0 1.0 +de 05_nuclear 1 327 0.0 1.0 +de 06_coal 1 327 0.0 1.0 +de 07_gas 1 327 0.0 1.0 +de 08_non-res 1 327 0.0 1.0 de 09_hydro_pump 1 327 0.0 0.0 -de 01_solar 1 328 1.0 0.0 -de 02_wind_on 1 328 1.0 0.0 -de 03_wind_off 1 328 1.0 0.0 -de 04_res 1 328 1.0 0.0 -de 05_nuclear 1 328 1.0 0.0 -de 06_coal 1 328 1.0 0.0 -de 07_gas 1 328 1.0 0.0 -de 08_non-res 1 328 1.0 0.0 +de 01_solar 1 328 0.0 1.0 +de 02_wind_on 1 328 0.0 1.0 +de 03_wind_off 1 328 0.0 1.0 +de 04_res 1 328 0.0 1.0 +de 05_nuclear 1 328 0.0 1.0 +de 06_coal 1 328 0.0 1.0 +de 07_gas 1 328 0.0 1.0 +de 08_non-res 1 328 0.0 1.0 de 09_hydro_pump 1 328 0.0 0.0 -de 01_solar 1 329 1.0 0.0 -de 02_wind_on 1 329 1.0 0.0 -de 03_wind_off 1 329 1.0 0.0 -de 04_res 1 329 1.0 0.0 -de 05_nuclear 1 329 1.0 0.0 -de 06_coal 1 329 1.0 0.0 -de 07_gas 1 329 1.0 0.0 -de 08_non-res 1 329 1.0 0.0 +de 01_solar 1 329 0.0 1.0 +de 02_wind_on 1 329 0.0 1.0 +de 03_wind_off 1 329 0.0 1.0 +de 04_res 1 329 0.0 1.0 +de 05_nuclear 1 329 0.0 1.0 +de 06_coal 1 329 0.0 1.0 +de 07_gas 1 329 0.0 1.0 +de 08_non-res 1 329 0.0 1.0 de 09_hydro_pump 1 329 0.0 0.0 -de 01_solar 1 330 1.0 0.0 -de 02_wind_on 1 330 1.0 0.0 -de 03_wind_off 1 330 1.0 0.0 -de 04_res 1 330 1.0 0.0 -de 05_nuclear 1 330 1.0 0.0 -de 06_coal 1 330 1.0 0.0 -de 07_gas 1 330 1.0 0.0 -de 08_non-res 1 330 1.0 0.0 -de 09_hydro_pump 1 330 1.0 0.0 -de 01_solar 1 331 1.0 0.0 -de 02_wind_on 1 331 1.0 0.0 -de 03_wind_off 1 331 1.0 0.0 -de 04_res 1 331 1.0 0.0 -de 05_nuclear 1 331 1.0 0.0 -de 06_coal 1 331 1.0 0.0 -de 07_gas 1 331 1.0 0.0 -de 08_non-res 1 331 1.0 0.0 -de 09_hydro_pump 1 331 1.0 0.0 -de 01_solar 1 332 1.0 0.0 -de 02_wind_on 1 332 1.0 0.0 -de 03_wind_off 1 332 1.0 0.0 -de 04_res 1 332 1.0 0.0 -de 05_nuclear 1 332 1.0 0.0 -de 06_coal 1 332 1.0 0.0 -de 07_gas 1 332 1.0 0.0 -de 08_non-res 1 332 1.0 0.0 -de 09_hydro_pump 1 332 1.0 0.0 -de 01_solar 1 333 1.0 0.0 -de 02_wind_on 1 333 1.0 0.0 -de 03_wind_off 1 333 1.0 0.0 -de 04_res 1 333 1.0 0.0 -de 05_nuclear 1 333 1.0 0.0 -de 06_coal 1 333 1.0 0.0 -de 07_gas 1 333 1.0 0.0 -de 08_non-res 1 333 1.0 0.0 -de 09_hydro_pump 1 333 1.0 0.0 -de 01_solar 1 334 1.0 0.0 -de 02_wind_on 1 334 1.0 0.0 -de 03_wind_off 1 334 1.0 0.0 -de 04_res 1 334 1.0 0.0 -de 05_nuclear 1 334 1.0 0.0 -de 06_coal 1 334 1.0 0.0 -de 07_gas 1 334 1.0 0.0 -de 08_non-res 1 334 1.0 0.0 -de 09_hydro_pump 1 334 1.0 0.0 -de 01_solar 1 335 1.0 0.0 -de 02_wind_on 1 335 1.0 0.0 -de 03_wind_off 1 335 1.0 0.0 -de 04_res 1 335 1.0 0.0 -de 05_nuclear 1 335 1.0 0.0 -de 06_coal 1 335 1.0 0.0 -de 07_gas 1 335 1.0 0.0 -de 08_non-res 1 335 1.0 0.0 -de 09_hydro_pump 1 335 1.0 0.0 -de 01_solar 1 336 1.0 0.0 -de 02_wind_on 1 336 1.0 0.0 -de 03_wind_off 1 336 1.0 0.0 -de 04_res 1 336 1.0 0.0 -de 05_nuclear 1 336 1.0 0.0 -de 06_coal 1 336 1.0 0.0 -de 07_gas 1 336 1.0 0.0 -de 08_non-res 1 336 1.0 0.0 -de 09_hydro_pump 1 336 1.0 0.0 +de 01_solar 1 330 0.0 1.0 +de 02_wind_on 1 330 0.0 1.0 +de 03_wind_off 1 330 0.0 1.0 +de 04_res 1 330 0.0 1.0 +de 05_nuclear 1 330 0.0 1.0 +de 06_coal 1 330 0.0 1.0 +de 07_gas 1 330 0.0 1.0 +de 08_non-res 1 330 0.0 1.0 +de 09_hydro_pump 1 330 0.0 1.0 +de 01_solar 1 331 0.0 1.0 +de 02_wind_on 1 331 0.0 1.0 +de 03_wind_off 1 331 0.0 1.0 +de 04_res 1 331 0.0 1.0 +de 05_nuclear 1 331 0.0 1.0 +de 06_coal 1 331 0.0 1.0 +de 07_gas 1 331 0.0 1.0 +de 08_non-res 1 331 0.0 1.0 +de 09_hydro_pump 1 331 0.0 1.0 +de 01_solar 1 332 0.0 1.0 +de 02_wind_on 1 332 0.0 1.0 +de 03_wind_off 1 332 0.0 1.0 +de 04_res 1 332 0.0 1.0 +de 05_nuclear 1 332 0.0 1.0 +de 06_coal 1 332 0.0 1.0 +de 07_gas 1 332 0.0 1.0 +de 08_non-res 1 332 0.0 1.0 +de 09_hydro_pump 1 332 0.0 1.0 +de 01_solar 1 333 0.0 1.0 +de 02_wind_on 1 333 0.0 1.0 +de 03_wind_off 1 333 0.0 1.0 +de 04_res 1 333 0.0 1.0 +de 05_nuclear 1 333 0.0 1.0 +de 06_coal 1 333 0.0 1.0 +de 07_gas 1 333 0.0 1.0 +de 08_non-res 1 333 0.0 1.0 +de 09_hydro_pump 1 333 0.0 1.0 +de 01_solar 1 334 0.0 1.0 +de 02_wind_on 1 334 0.0 1.0 +de 03_wind_off 1 334 0.0 1.0 +de 04_res 1 334 0.0 1.0 +de 05_nuclear 1 334 0.0 1.0 +de 06_coal 1 334 0.0 1.0 +de 07_gas 1 334 0.0 1.0 +de 08_non-res 1 334 0.0 1.0 +de 09_hydro_pump 1 334 0.0 1.0 +de 01_solar 1 335 0.0 1.0 +de 02_wind_on 1 335 0.0 1.0 +de 03_wind_off 1 335 0.0 1.0 +de 04_res 1 335 0.0 1.0 +de 05_nuclear 1 335 0.0 1.0 +de 06_coal 1 335 0.0 1.0 +de 07_gas 1 335 0.0 1.0 +de 08_non-res 1 335 0.0 1.0 +de 09_hydro_pump 1 335 0.0 1.0 +de 01_solar 1 336 0.0 1.0 +de 02_wind_on 1 336 0.0 1.0 +de 03_wind_off 1 336 0.0 1.0 +de 04_res 1 336 0.0 1.0 +de 05_nuclear 1 336 0.0 1.0 +de 06_coal 1 336 0.0 1.0 +de 07_gas 1 336 0.0 1.0 +de 08_non-res 1 336 0.0 1.0 +de 09_hydro_pump 1 336 0.0 1.0 es 01_solar 1 1 0.0 0.0 es 02_wind_on 1 1 0.0 0.0 es 03_wind_off 1 1 0.0 0.0 @@ -3032,7 +3032,7 @@ es 06_coal 1 1 0.0 0.0 es 07_gas 1 1 0.0 0.0 es 08_non-res 1 1 0.0 0.0 es 09_hydro_pump 1 1 0.0 0.0 -es 01_solar 1 2 1.0 0.0 +es 01_solar 1 2 0.0 1.0 es 02_wind_on 1 2 0.0 0.0 es 03_wind_off 1 2 0.0 0.0 es 04_res 1 2 0.0 0.0 @@ -3041,7 +3041,7 @@ es 06_coal 1 2 0.0 0.0 es 07_gas 1 2 0.0 0.0 es 08_non-res 1 2 0.0 0.0 es 09_hydro_pump 1 2 0.0 0.0 -es 01_solar 1 3 1.0 0.0 +es 01_solar 1 3 0.0 1.0 es 02_wind_on 1 3 0.0 0.0 es 03_wind_off 1 3 0.0 0.0 es 04_res 1 3 0.0 0.0 @@ -3050,7 +3050,7 @@ es 06_coal 1 3 0.0 0.0 es 07_gas 1 3 0.0 0.0 es 08_non-res 1 3 0.0 0.0 es 09_hydro_pump 1 3 0.0 0.0 -es 01_solar 1 4 1.0 0.0 +es 01_solar 1 4 0.0 1.0 es 02_wind_on 1 4 0.0 0.0 es 03_wind_off 1 4 0.0 0.0 es 04_res 1 4 0.0 0.0 @@ -3059,7 +3059,7 @@ es 06_coal 1 4 0.0 0.0 es 07_gas 1 4 0.0 0.0 es 08_non-res 1 4 0.0 0.0 es 09_hydro_pump 1 4 0.0 0.0 -es 01_solar 1 5 1.0 0.0 +es 01_solar 1 5 0.0 1.0 es 02_wind_on 1 5 0.0 0.0 es 03_wind_off 1 5 0.0 0.0 es 04_res 1 5 0.0 0.0 @@ -3068,7 +3068,7 @@ es 06_coal 1 5 0.0 0.0 es 07_gas 1 5 0.0 0.0 es 08_non-res 1 5 0.0 0.0 es 09_hydro_pump 1 5 0.0 0.0 -es 01_solar 1 6 1.0 0.0 +es 01_solar 1 6 0.0 1.0 es 02_wind_on 1 6 0.0 0.0 es 03_wind_off 1 6 0.0 0.0 es 04_res 1 6 0.0 0.0 @@ -3077,7 +3077,7 @@ es 06_coal 1 6 0.0 0.0 es 07_gas 1 6 0.0 0.0 es 08_non-res 1 6 0.0 0.0 es 09_hydro_pump 1 6 0.0 0.0 -es 01_solar 1 7 1.0 0.0 +es 01_solar 1 7 0.0 1.0 es 02_wind_on 1 7 0.0 0.0 es 03_wind_off 1 7 0.0 0.0 es 04_res 1 7 0.0 0.0 @@ -3086,7 +3086,7 @@ es 06_coal 1 7 0.0 0.0 es 07_gas 1 7 0.0 0.0 es 08_non-res 1 7 0.0 0.0 es 09_hydro_pump 1 7 0.0 0.0 -es 01_solar 1 8 1.0 0.0 +es 01_solar 1 8 0.0 1.0 es 02_wind_on 1 8 0.0 0.0 es 03_wind_off 1 8 0.0 0.0 es 04_res 1 8 0.0 0.0 @@ -3095,7 +3095,7 @@ es 06_coal 1 8 0.0 0.0 es 07_gas 1 8 0.0 0.0 es 08_non-res 1 8 0.0 0.0 es 09_hydro_pump 1 8 0.0 0.0 -es 01_solar 1 9 1.0 0.0 +es 01_solar 1 9 0.0 1.0 es 02_wind_on 1 9 0.0 0.0 es 03_wind_off 1 9 0.0 0.0 es 04_res 1 9 0.0 0.0 @@ -3104,7 +3104,7 @@ es 06_coal 1 9 0.0 0.0 es 07_gas 1 9 0.0 0.0 es 08_non-res 1 9 0.0 0.0 es 09_hydro_pump 1 9 0.0 0.0 -es 01_solar 1 10 1.0 0.0 +es 01_solar 1 10 0.0 1.0 es 02_wind_on 1 10 0.0 0.0 es 03_wind_off 1 10 0.0 0.0 es 04_res 1 10 0.0 0.0 @@ -3113,7 +3113,7 @@ es 06_coal 1 10 0.0 0.0 es 07_gas 1 10 0.0 0.0 es 08_non-res 1 10 0.0 0.0 es 09_hydro_pump 1 10 0.0 0.0 -es 01_solar 1 11 1.0 0.0 +es 01_solar 1 11 0.0 1.0 es 02_wind_on 1 11 0.0 0.0 es 03_wind_off 1 11 0.0 0.0 es 04_res 1 11 0.0 0.0 @@ -3122,7 +3122,7 @@ es 06_coal 1 11 0.0 0.0 es 07_gas 1 11 0.0 0.0 es 08_non-res 1 11 0.0 0.0 es 09_hydro_pump 1 11 0.0 0.0 -es 01_solar 1 12 1.0 0.0 +es 01_solar 1 12 0.0 1.0 es 02_wind_on 1 12 0.0 0.0 es 03_wind_off 1 12 0.0 0.0 es 04_res 1 12 0.0 0.0 @@ -3131,7 +3131,7 @@ es 06_coal 1 12 0.0 0.0 es 07_gas 1 12 0.0 0.0 es 08_non-res 1 12 0.0 0.0 es 09_hydro_pump 1 12 0.0 0.0 -es 01_solar 1 13 1.0 0.0 +es 01_solar 1 13 0.0 1.0 es 02_wind_on 1 13 0.0 0.0 es 03_wind_off 1 13 0.0 0.0 es 04_res 1 13 0.0 0.0 @@ -3140,7 +3140,7 @@ es 06_coal 1 13 0.0 0.0 es 07_gas 1 13 0.0 0.0 es 08_non-res 1 13 0.0 0.0 es 09_hydro_pump 1 13 0.0 0.0 -es 01_solar 1 14 1.0 0.0 +es 01_solar 1 14 0.0 1.0 es 02_wind_on 1 14 0.0 0.0 es 03_wind_off 1 14 0.0 0.0 es 04_res 1 14 0.0 0.0 @@ -3149,7 +3149,7 @@ es 06_coal 1 14 0.0 0.0 es 07_gas 1 14 0.0 0.0 es 08_non-res 1 14 0.0 0.0 es 09_hydro_pump 1 14 0.0 0.0 -es 01_solar 1 15 1.0 0.0 +es 01_solar 1 15 0.0 1.0 es 02_wind_on 1 15 0.0 0.0 es 03_wind_off 1 15 0.0 0.0 es 04_res 1 15 0.0 0.0 @@ -3158,7 +3158,7 @@ es 06_coal 1 15 0.0 0.0 es 07_gas 1 15 0.0 0.0 es 08_non-res 1 15 0.0 0.0 es 09_hydro_pump 1 15 0.0 0.0 -es 01_solar 1 16 1.0 0.0 +es 01_solar 1 16 0.0 1.0 es 02_wind_on 1 16 0.0 0.0 es 03_wind_off 1 16 0.0 0.0 es 04_res 1 16 0.0 0.0 @@ -3167,7 +3167,7 @@ es 06_coal 1 16 0.0 0.0 es 07_gas 1 16 0.0 0.0 es 08_non-res 1 16 0.0 0.0 es 09_hydro_pump 1 16 0.0 0.0 -es 01_solar 1 17 1.0 0.0 +es 01_solar 1 17 0.0 1.0 es 02_wind_on 1 17 0.0 0.0 es 03_wind_off 1 17 0.0 0.0 es 04_res 1 17 0.0 0.0 @@ -3176,7 +3176,7 @@ es 06_coal 1 17 0.0 0.0 es 07_gas 1 17 0.0 0.0 es 08_non-res 1 17 0.0 0.0 es 09_hydro_pump 1 17 0.0 0.0 -es 01_solar 1 18 1.0 0.0 +es 01_solar 1 18 0.0 1.0 es 02_wind_on 1 18 0.0 0.0 es 03_wind_off 1 18 0.0 0.0 es 04_res 1 18 0.0 0.0 @@ -3185,7 +3185,7 @@ es 06_coal 1 18 0.0 0.0 es 07_gas 1 18 0.0 0.0 es 08_non-res 1 18 0.0 0.0 es 09_hydro_pump 1 18 0.0 0.0 -es 01_solar 1 19 1.0 0.0 +es 01_solar 1 19 0.0 1.0 es 02_wind_on 1 19 0.0 0.0 es 03_wind_off 1 19 0.0 0.0 es 04_res 1 19 0.0 0.0 @@ -3194,7 +3194,7 @@ es 06_coal 1 19 0.0 0.0 es 07_gas 1 19 0.0 0.0 es 08_non-res 1 19 0.0 0.0 es 09_hydro_pump 1 19 0.0 0.0 -es 01_solar 1 20 1.0 0.0 +es 01_solar 1 20 0.0 1.0 es 02_wind_on 1 20 0.0 0.0 es 03_wind_off 1 20 0.0 0.0 es 04_res 1 20 0.0 0.0 @@ -3203,7 +3203,7 @@ es 06_coal 1 20 0.0 0.0 es 07_gas 1 20 0.0 0.0 es 08_non-res 1 20 0.0 0.0 es 09_hydro_pump 1 20 0.0 0.0 -es 01_solar 1 21 1.0 0.0 +es 01_solar 1 21 0.0 1.0 es 02_wind_on 1 21 0.0 0.0 es 03_wind_off 1 21 0.0 0.0 es 04_res 1 21 0.0 0.0 @@ -3212,8 +3212,8 @@ es 06_coal 1 21 0.0 0.0 es 07_gas 1 21 0.0 0.0 es 08_non-res 1 21 0.0 0.0 es 09_hydro_pump 1 21 0.0 0.0 -es 01_solar 1 22 1.0 0.0 -es 02_wind_on 1 22 1.0 0.0 +es 01_solar 1 22 0.0 1.0 +es 02_wind_on 1 22 0.0 1.0 es 03_wind_off 1 22 0.0 0.0 es 04_res 1 22 0.0 0.0 es 05_nuclear 1 22 0.0 0.0 @@ -3221,8 +3221,8 @@ es 06_coal 1 22 0.0 0.0 es 07_gas 1 22 0.0 0.0 es 08_non-res 1 22 0.0 0.0 es 09_hydro_pump 1 22 0.0 0.0 -es 01_solar 1 23 1.0 0.0 -es 02_wind_on 1 23 1.0 0.0 +es 01_solar 1 23 0.0 1.0 +es 02_wind_on 1 23 0.0 1.0 es 03_wind_off 1 23 0.0 0.0 es 04_res 1 23 0.0 0.0 es 05_nuclear 1 23 0.0 0.0 @@ -3230,8 +3230,8 @@ es 06_coal 1 23 0.0 0.0 es 07_gas 1 23 0.0 0.0 es 08_non-res 1 23 0.0 0.0 es 09_hydro_pump 1 23 0.0 0.0 -es 01_solar 1 24 1.0 0.0 -es 02_wind_on 1 24 1.0 0.0 +es 01_solar 1 24 0.0 1.0 +es 02_wind_on 1 24 0.0 1.0 es 03_wind_off 1 24 0.0 0.0 es 04_res 1 24 0.0 0.0 es 05_nuclear 1 24 0.0 0.0 @@ -3239,8 +3239,8 @@ es 06_coal 1 24 0.0 0.0 es 07_gas 1 24 0.0 0.0 es 08_non-res 1 24 0.0 0.0 es 09_hydro_pump 1 24 0.0 0.0 -es 01_solar 1 25 1.0 0.0 -es 02_wind_on 1 25 1.0 0.0 +es 01_solar 1 25 0.0 1.0 +es 02_wind_on 1 25 0.0 1.0 es 03_wind_off 1 25 0.0 0.0 es 04_res 1 25 0.0 0.0 es 05_nuclear 1 25 0.0 0.0 @@ -3248,8 +3248,8 @@ es 06_coal 1 25 0.0 0.0 es 07_gas 1 25 0.0 0.0 es 08_non-res 1 25 0.0 0.0 es 09_hydro_pump 1 25 0.0 0.0 -es 01_solar 1 26 1.0 0.0 -es 02_wind_on 1 26 1.0 0.0 +es 01_solar 1 26 0.0 1.0 +es 02_wind_on 1 26 0.0 1.0 es 03_wind_off 1 26 0.0 0.0 es 04_res 1 26 0.0 0.0 es 05_nuclear 1 26 0.0 0.0 @@ -3257,8 +3257,8 @@ es 06_coal 1 26 0.0 0.0 es 07_gas 1 26 0.0 0.0 es 08_non-res 1 26 0.0 0.0 es 09_hydro_pump 1 26 0.0 0.0 -es 01_solar 1 27 1.0 0.0 -es 02_wind_on 1 27 1.0 0.0 +es 01_solar 1 27 0.0 1.0 +es 02_wind_on 1 27 0.0 1.0 es 03_wind_off 1 27 0.0 0.0 es 04_res 1 27 0.0 0.0 es 05_nuclear 1 27 0.0 0.0 @@ -3266,8 +3266,8 @@ es 06_coal 1 27 0.0 0.0 es 07_gas 1 27 0.0 0.0 es 08_non-res 1 27 0.0 0.0 es 09_hydro_pump 1 27 0.0 0.0 -es 01_solar 1 28 1.0 0.0 -es 02_wind_on 1 28 1.0 0.0 +es 01_solar 1 28 0.0 1.0 +es 02_wind_on 1 28 0.0 1.0 es 03_wind_off 1 28 0.0 0.0 es 04_res 1 28 0.0 0.0 es 05_nuclear 1 28 0.0 0.0 @@ -3275,8 +3275,8 @@ es 06_coal 1 28 0.0 0.0 es 07_gas 1 28 0.0 0.0 es 08_non-res 1 28 0.0 0.0 es 09_hydro_pump 1 28 0.0 0.0 -es 01_solar 1 29 1.0 0.0 -es 02_wind_on 1 29 1.0 0.0 +es 01_solar 1 29 0.0 1.0 +es 02_wind_on 1 29 0.0 1.0 es 03_wind_off 1 29 0.0 0.0 es 04_res 1 29 0.0 0.0 es 05_nuclear 1 29 0.0 0.0 @@ -3284,8 +3284,8 @@ es 06_coal 1 29 0.0 0.0 es 07_gas 1 29 0.0 0.0 es 08_non-res 1 29 0.0 0.0 es 09_hydro_pump 1 29 0.0 0.0 -es 01_solar 1 30 1.0 0.0 -es 02_wind_on 1 30 1.0 0.0 +es 01_solar 1 30 0.0 1.0 +es 02_wind_on 1 30 0.0 1.0 es 03_wind_off 1 30 0.0 0.0 es 04_res 1 30 0.0 0.0 es 05_nuclear 1 30 0.0 0.0 @@ -3293,8 +3293,8 @@ es 06_coal 1 30 0.0 0.0 es 07_gas 1 30 0.0 0.0 es 08_non-res 1 30 0.0 0.0 es 09_hydro_pump 1 30 0.0 0.0 -es 01_solar 1 31 1.0 0.0 -es 02_wind_on 1 31 1.0 0.0 +es 01_solar 1 31 0.0 1.0 +es 02_wind_on 1 31 0.0 1.0 es 03_wind_off 1 31 0.0 0.0 es 04_res 1 31 0.0 0.0 es 05_nuclear 1 31 0.0 0.0 @@ -3302,8 +3302,8 @@ es 06_coal 1 31 0.0 0.0 es 07_gas 1 31 0.0 0.0 es 08_non-res 1 31 0.0 0.0 es 09_hydro_pump 1 31 0.0 0.0 -es 01_solar 1 32 1.0 0.0 -es 02_wind_on 1 32 1.0 0.0 +es 01_solar 1 32 0.0 1.0 +es 02_wind_on 1 32 0.0 1.0 es 03_wind_off 1 32 0.0 0.0 es 04_res 1 32 0.0 0.0 es 05_nuclear 1 32 0.0 0.0 @@ -3311,8 +3311,8 @@ es 06_coal 1 32 0.0 0.0 es 07_gas 1 32 0.0 0.0 es 08_non-res 1 32 0.0 0.0 es 09_hydro_pump 1 32 0.0 0.0 -es 01_solar 1 33 1.0 0.0 -es 02_wind_on 1 33 1.0 0.0 +es 01_solar 1 33 0.0 1.0 +es 02_wind_on 1 33 0.0 1.0 es 03_wind_off 1 33 0.0 0.0 es 04_res 1 33 0.0 0.0 es 05_nuclear 1 33 0.0 0.0 @@ -3320,8 +3320,8 @@ es 06_coal 1 33 0.0 0.0 es 07_gas 1 33 0.0 0.0 es 08_non-res 1 33 0.0 0.0 es 09_hydro_pump 1 33 0.0 0.0 -es 01_solar 1 34 1.0 0.0 -es 02_wind_on 1 34 1.0 0.0 +es 01_solar 1 34 0.0 1.0 +es 02_wind_on 1 34 0.0 1.0 es 03_wind_off 1 34 0.0 0.0 es 04_res 1 34 0.0 0.0 es 05_nuclear 1 34 0.0 0.0 @@ -3329,8 +3329,8 @@ es 06_coal 1 34 0.0 0.0 es 07_gas 1 34 0.0 0.0 es 08_non-res 1 34 0.0 0.0 es 09_hydro_pump 1 34 0.0 0.0 -es 01_solar 1 35 1.0 0.0 -es 02_wind_on 1 35 1.0 0.0 +es 01_solar 1 35 0.0 1.0 +es 02_wind_on 1 35 0.0 1.0 es 03_wind_off 1 35 0.0 0.0 es 04_res 1 35 0.0 0.0 es 05_nuclear 1 35 0.0 0.0 @@ -3338,8 +3338,8 @@ es 06_coal 1 35 0.0 0.0 es 07_gas 1 35 0.0 0.0 es 08_non-res 1 35 0.0 0.0 es 09_hydro_pump 1 35 0.0 0.0 -es 01_solar 1 36 1.0 0.0 -es 02_wind_on 1 36 1.0 0.0 +es 01_solar 1 36 0.0 1.0 +es 02_wind_on 1 36 0.0 1.0 es 03_wind_off 1 36 0.0 0.0 es 04_res 1 36 0.0 0.0 es 05_nuclear 1 36 0.0 0.0 @@ -3347,8 +3347,8 @@ es 06_coal 1 36 0.0 0.0 es 07_gas 1 36 0.0 0.0 es 08_non-res 1 36 0.0 0.0 es 09_hydro_pump 1 36 0.0 0.0 -es 01_solar 1 37 1.0 0.0 -es 02_wind_on 1 37 1.0 0.0 +es 01_solar 1 37 0.0 1.0 +es 02_wind_on 1 37 0.0 1.0 es 03_wind_off 1 37 0.0 0.0 es 04_res 1 37 0.0 0.0 es 05_nuclear 1 37 0.0 0.0 @@ -3356,8 +3356,8 @@ es 06_coal 1 37 0.0 0.0 es 07_gas 1 37 0.0 0.0 es 08_non-res 1 37 0.0 0.0 es 09_hydro_pump 1 37 0.0 0.0 -es 01_solar 1 38 1.0 0.0 -es 02_wind_on 1 38 1.0 0.0 +es 01_solar 1 38 0.0 1.0 +es 02_wind_on 1 38 0.0 1.0 es 03_wind_off 1 38 0.0 0.0 es 04_res 1 38 0.0 0.0 es 05_nuclear 1 38 0.0 0.0 @@ -3365,8 +3365,8 @@ es 06_coal 1 38 0.0 0.0 es 07_gas 1 38 0.0 0.0 es 08_non-res 1 38 0.0 0.0 es 09_hydro_pump 1 38 0.0 0.0 -es 01_solar 1 39 1.0 0.0 -es 02_wind_on 1 39 1.0 0.0 +es 01_solar 1 39 0.0 1.0 +es 02_wind_on 1 39 0.0 1.0 es 03_wind_off 1 39 0.0 0.0 es 04_res 1 39 0.0 0.0 es 05_nuclear 1 39 0.0 0.0 @@ -3374,8 +3374,8 @@ es 06_coal 1 39 0.0 0.0 es 07_gas 1 39 0.0 0.0 es 08_non-res 1 39 0.0 0.0 es 09_hydro_pump 1 39 0.0 0.0 -es 01_solar 1 40 1.0 0.0 -es 02_wind_on 1 40 1.0 0.0 +es 01_solar 1 40 0.0 1.0 +es 02_wind_on 1 40 0.0 1.0 es 03_wind_off 1 40 0.0 0.0 es 04_res 1 40 0.0 0.0 es 05_nuclear 1 40 0.0 0.0 @@ -3383,8 +3383,8 @@ es 06_coal 1 40 0.0 0.0 es 07_gas 1 40 0.0 0.0 es 08_non-res 1 40 0.0 0.0 es 09_hydro_pump 1 40 0.0 0.0 -es 01_solar 1 41 1.0 0.0 -es 02_wind_on 1 41 1.0 0.0 +es 01_solar 1 41 0.0 1.0 +es 02_wind_on 1 41 0.0 1.0 es 03_wind_off 1 41 0.0 0.0 es 04_res 1 41 0.0 0.0 es 05_nuclear 1 41 0.0 0.0 @@ -3392,1149 +3392,1149 @@ es 06_coal 1 41 0.0 0.0 es 07_gas 1 41 0.0 0.0 es 08_non-res 1 41 0.0 0.0 es 09_hydro_pump 1 41 0.0 0.0 -es 01_solar 1 42 1.0 0.0 -es 02_wind_on 1 42 1.0 0.0 -es 03_wind_off 1 42 1.0 0.0 +es 01_solar 1 42 0.0 1.0 +es 02_wind_on 1 42 0.0 1.0 +es 03_wind_off 1 42 0.0 1.0 es 04_res 1 42 0.0 0.0 es 05_nuclear 1 42 0.0 0.0 es 06_coal 1 42 0.0 0.0 es 07_gas 1 42 0.0 0.0 es 08_non-res 1 42 0.0 0.0 es 09_hydro_pump 1 42 0.0 0.0 -es 01_solar 1 43 1.0 0.0 -es 02_wind_on 1 43 1.0 0.0 -es 03_wind_off 1 43 1.0 0.0 +es 01_solar 1 43 0.0 1.0 +es 02_wind_on 1 43 0.0 1.0 +es 03_wind_off 1 43 0.0 1.0 es 04_res 1 43 0.0 0.0 es 05_nuclear 1 43 0.0 0.0 es 06_coal 1 43 0.0 0.0 es 07_gas 1 43 0.0 0.0 es 08_non-res 1 43 0.0 0.0 es 09_hydro_pump 1 43 0.0 0.0 -es 01_solar 1 44 1.0 0.0 -es 02_wind_on 1 44 1.0 0.0 -es 03_wind_off 1 44 1.0 0.0 +es 01_solar 1 44 0.0 1.0 +es 02_wind_on 1 44 0.0 1.0 +es 03_wind_off 1 44 0.0 1.0 es 04_res 1 44 0.0 0.0 es 05_nuclear 1 44 0.0 0.0 es 06_coal 1 44 0.0 0.0 es 07_gas 1 44 0.0 0.0 es 08_non-res 1 44 0.0 0.0 es 09_hydro_pump 1 44 0.0 0.0 -es 01_solar 1 45 1.0 0.0 -es 02_wind_on 1 45 1.0 0.0 -es 03_wind_off 1 45 1.0 0.0 +es 01_solar 1 45 0.0 1.0 +es 02_wind_on 1 45 0.0 1.0 +es 03_wind_off 1 45 0.0 1.0 es 04_res 1 45 0.0 0.0 es 05_nuclear 1 45 0.0 0.0 es 06_coal 1 45 0.0 0.0 es 07_gas 1 45 0.0 0.0 es 08_non-res 1 45 0.0 0.0 es 09_hydro_pump 1 45 0.0 0.0 -es 01_solar 1 46 1.0 0.0 -es 02_wind_on 1 46 1.0 0.0 -es 03_wind_off 1 46 1.0 0.0 +es 01_solar 1 46 0.0 1.0 +es 02_wind_on 1 46 0.0 1.0 +es 03_wind_off 1 46 0.0 1.0 es 04_res 1 46 0.0 0.0 es 05_nuclear 1 46 0.0 0.0 es 06_coal 1 46 0.0 0.0 es 07_gas 1 46 0.0 0.0 es 08_non-res 1 46 0.0 0.0 es 09_hydro_pump 1 46 0.0 0.0 -es 01_solar 1 47 1.0 0.0 -es 02_wind_on 1 47 1.0 0.0 -es 03_wind_off 1 47 1.0 0.0 +es 01_solar 1 47 0.0 1.0 +es 02_wind_on 1 47 0.0 1.0 +es 03_wind_off 1 47 0.0 1.0 es 04_res 1 47 0.0 0.0 es 05_nuclear 1 47 0.0 0.0 es 06_coal 1 47 0.0 0.0 es 07_gas 1 47 0.0 0.0 es 08_non-res 1 47 0.0 0.0 es 09_hydro_pump 1 47 0.0 0.0 -es 01_solar 1 48 1.0 0.0 -es 02_wind_on 1 48 1.0 0.0 -es 03_wind_off 1 48 1.0 0.0 +es 01_solar 1 48 0.0 1.0 +es 02_wind_on 1 48 0.0 1.0 +es 03_wind_off 1 48 0.0 1.0 es 04_res 1 48 0.0 0.0 es 05_nuclear 1 48 0.0 0.0 es 06_coal 1 48 0.0 0.0 es 07_gas 1 48 0.0 0.0 es 08_non-res 1 48 0.0 0.0 es 09_hydro_pump 1 48 0.0 0.0 -es 01_solar 1 49 1.0 0.0 -es 02_wind_on 1 49 1.0 0.0 -es 03_wind_off 1 49 1.0 0.0 +es 01_solar 1 49 0.0 1.0 +es 02_wind_on 1 49 0.0 1.0 +es 03_wind_off 1 49 0.0 1.0 es 04_res 1 49 0.0 0.0 es 05_nuclear 1 49 0.0 0.0 es 06_coal 1 49 0.0 0.0 es 07_gas 1 49 0.0 0.0 es 08_non-res 1 49 0.0 0.0 es 09_hydro_pump 1 49 0.0 0.0 -es 01_solar 1 50 1.0 0.0 -es 02_wind_on 1 50 1.0 0.0 -es 03_wind_off 1 50 1.0 0.0 +es 01_solar 1 50 0.0 1.0 +es 02_wind_on 1 50 0.0 1.0 +es 03_wind_off 1 50 0.0 1.0 es 04_res 1 50 0.0 0.0 es 05_nuclear 1 50 0.0 0.0 es 06_coal 1 50 0.0 0.0 es 07_gas 1 50 0.0 0.0 es 08_non-res 1 50 0.0 0.0 es 09_hydro_pump 1 50 0.0 0.0 -es 01_solar 1 51 1.0 0.0 -es 02_wind_on 1 51 1.0 0.0 -es 03_wind_off 1 51 1.0 0.0 +es 01_solar 1 51 0.0 1.0 +es 02_wind_on 1 51 0.0 1.0 +es 03_wind_off 1 51 0.0 1.0 es 04_res 1 51 0.0 0.0 es 05_nuclear 1 51 0.0 0.0 es 06_coal 1 51 0.0 0.0 es 07_gas 1 51 0.0 0.0 es 08_non-res 1 51 0.0 0.0 es 09_hydro_pump 1 51 0.0 0.0 -es 01_solar 1 52 1.0 0.0 -es 02_wind_on 1 52 1.0 0.0 -es 03_wind_off 1 52 1.0 0.0 +es 01_solar 1 52 0.0 1.0 +es 02_wind_on 1 52 0.0 1.0 +es 03_wind_off 1 52 0.0 1.0 es 04_res 1 52 0.0 0.0 es 05_nuclear 1 52 0.0 0.0 es 06_coal 1 52 0.0 0.0 es 07_gas 1 52 0.0 0.0 es 08_non-res 1 52 0.0 0.0 es 09_hydro_pump 1 52 0.0 0.0 -es 01_solar 1 53 1.0 0.0 -es 02_wind_on 1 53 1.0 0.0 -es 03_wind_off 1 53 1.0 0.0 +es 01_solar 1 53 0.0 1.0 +es 02_wind_on 1 53 0.0 1.0 +es 03_wind_off 1 53 0.0 1.0 es 04_res 1 53 0.0 0.0 es 05_nuclear 1 53 0.0 0.0 es 06_coal 1 53 0.0 0.0 es 07_gas 1 53 0.0 0.0 es 08_non-res 1 53 0.0 0.0 es 09_hydro_pump 1 53 0.0 0.0 -es 01_solar 1 54 1.0 0.0 -es 02_wind_on 1 54 1.0 0.0 -es 03_wind_off 1 54 1.0 0.0 +es 01_solar 1 54 0.0 1.0 +es 02_wind_on 1 54 0.0 1.0 +es 03_wind_off 1 54 0.0 1.0 es 04_res 1 54 0.0 0.0 es 05_nuclear 1 54 0.0 0.0 es 06_coal 1 54 0.0 0.0 es 07_gas 1 54 0.0 0.0 es 08_non-res 1 54 0.0 0.0 es 09_hydro_pump 1 54 0.0 0.0 -es 01_solar 1 55 1.0 0.0 -es 02_wind_on 1 55 1.0 0.0 -es 03_wind_off 1 55 1.0 0.0 +es 01_solar 1 55 0.0 1.0 +es 02_wind_on 1 55 0.0 1.0 +es 03_wind_off 1 55 0.0 1.0 es 04_res 1 55 0.0 0.0 es 05_nuclear 1 55 0.0 0.0 es 06_coal 1 55 0.0 0.0 es 07_gas 1 55 0.0 0.0 es 08_non-res 1 55 0.0 0.0 es 09_hydro_pump 1 55 0.0 0.0 -es 01_solar 1 56 1.0 0.0 -es 02_wind_on 1 56 1.0 0.0 -es 03_wind_off 1 56 1.0 0.0 +es 01_solar 1 56 0.0 1.0 +es 02_wind_on 1 56 0.0 1.0 +es 03_wind_off 1 56 0.0 1.0 es 04_res 1 56 0.0 0.0 es 05_nuclear 1 56 0.0 0.0 es 06_coal 1 56 0.0 0.0 es 07_gas 1 56 0.0 0.0 es 08_non-res 1 56 0.0 0.0 es 09_hydro_pump 1 56 0.0 0.0 -es 01_solar 1 57 1.0 0.0 -es 02_wind_on 1 57 1.0 0.0 -es 03_wind_off 1 57 1.0 0.0 +es 01_solar 1 57 0.0 1.0 +es 02_wind_on 1 57 0.0 1.0 +es 03_wind_off 1 57 0.0 1.0 es 04_res 1 57 0.0 0.0 es 05_nuclear 1 57 0.0 0.0 es 06_coal 1 57 0.0 0.0 es 07_gas 1 57 0.0 0.0 es 08_non-res 1 57 0.0 0.0 es 09_hydro_pump 1 57 0.0 0.0 -es 01_solar 1 58 1.0 0.0 -es 02_wind_on 1 58 1.0 0.0 -es 03_wind_off 1 58 1.0 0.0 +es 01_solar 1 58 0.0 1.0 +es 02_wind_on 1 58 0.0 1.0 +es 03_wind_off 1 58 0.0 1.0 es 04_res 1 58 0.0 0.0 es 05_nuclear 1 58 0.0 0.0 es 06_coal 1 58 0.0 0.0 es 07_gas 1 58 0.0 0.0 es 08_non-res 1 58 0.0 0.0 es 09_hydro_pump 1 58 0.0 0.0 -es 01_solar 1 59 1.0 0.0 -es 02_wind_on 1 59 1.0 0.0 -es 03_wind_off 1 59 1.0 0.0 +es 01_solar 1 59 0.0 1.0 +es 02_wind_on 1 59 0.0 1.0 +es 03_wind_off 1 59 0.0 1.0 es 04_res 1 59 0.0 0.0 es 05_nuclear 1 59 0.0 0.0 es 06_coal 1 59 0.0 0.0 es 07_gas 1 59 0.0 0.0 es 08_non-res 1 59 0.0 0.0 es 09_hydro_pump 1 59 0.0 0.0 -es 01_solar 1 60 1.0 0.0 -es 02_wind_on 1 60 1.0 0.0 -es 03_wind_off 1 60 1.0 0.0 +es 01_solar 1 60 0.0 1.0 +es 02_wind_on 1 60 0.0 1.0 +es 03_wind_off 1 60 0.0 1.0 es 04_res 1 60 0.0 0.0 es 05_nuclear 1 60 0.0 0.0 es 06_coal 1 60 0.0 0.0 es 07_gas 1 60 0.0 0.0 es 08_non-res 1 60 0.0 0.0 es 09_hydro_pump 1 60 0.0 0.0 -es 01_solar 1 61 1.0 0.0 -es 02_wind_on 1 61 1.0 0.0 -es 03_wind_off 1 61 1.0 0.0 +es 01_solar 1 61 0.0 1.0 +es 02_wind_on 1 61 0.0 1.0 +es 03_wind_off 1 61 0.0 1.0 es 04_res 1 61 0.0 0.0 es 05_nuclear 1 61 0.0 0.0 es 06_coal 1 61 0.0 0.0 es 07_gas 1 61 0.0 0.0 es 08_non-res 1 61 0.0 0.0 es 09_hydro_pump 1 61 0.0 0.0 -es 01_solar 1 62 1.0 0.0 -es 02_wind_on 1 62 1.0 0.0 -es 03_wind_off 1 62 1.0 0.0 -es 04_res 1 62 1.0 0.0 +es 01_solar 1 62 0.0 1.0 +es 02_wind_on 1 62 0.0 1.0 +es 03_wind_off 1 62 0.0 1.0 +es 04_res 1 62 0.0 1.0 es 05_nuclear 1 62 0.0 0.0 es 06_coal 1 62 0.0 0.0 es 07_gas 1 62 0.0 0.0 es 08_non-res 1 62 0.0 0.0 es 09_hydro_pump 1 62 0.0 0.0 -es 01_solar 1 63 1.0 0.0 -es 02_wind_on 1 63 1.0 0.0 -es 03_wind_off 1 63 1.0 0.0 -es 04_res 1 63 1.0 0.0 +es 01_solar 1 63 0.0 1.0 +es 02_wind_on 1 63 0.0 1.0 +es 03_wind_off 1 63 0.0 1.0 +es 04_res 1 63 0.0 1.0 es 05_nuclear 1 63 0.0 0.0 es 06_coal 1 63 0.0 0.0 es 07_gas 1 63 0.0 0.0 es 08_non-res 1 63 0.0 0.0 es 09_hydro_pump 1 63 0.0 0.0 -es 01_solar 1 64 1.0 0.0 -es 02_wind_on 1 64 1.0 0.0 -es 03_wind_off 1 64 1.0 0.0 -es 04_res 1 64 1.0 0.0 +es 01_solar 1 64 0.0 1.0 +es 02_wind_on 1 64 0.0 1.0 +es 03_wind_off 1 64 0.0 1.0 +es 04_res 1 64 0.0 1.0 es 05_nuclear 1 64 0.0 0.0 es 06_coal 1 64 0.0 0.0 es 07_gas 1 64 0.0 0.0 es 08_non-res 1 64 0.0 0.0 es 09_hydro_pump 1 64 0.0 0.0 -es 01_solar 1 65 1.0 0.0 -es 02_wind_on 1 65 1.0 0.0 -es 03_wind_off 1 65 1.0 0.0 -es 04_res 1 65 1.0 0.0 +es 01_solar 1 65 0.0 1.0 +es 02_wind_on 1 65 0.0 1.0 +es 03_wind_off 1 65 0.0 1.0 +es 04_res 1 65 0.0 1.0 es 05_nuclear 1 65 0.0 0.0 es 06_coal 1 65 0.0 0.0 es 07_gas 1 65 0.0 0.0 es 08_non-res 1 65 0.0 0.0 es 09_hydro_pump 1 65 0.0 0.0 -es 01_solar 1 66 1.0 0.0 -es 02_wind_on 1 66 1.0 0.0 -es 03_wind_off 1 66 1.0 0.0 -es 04_res 1 66 1.0 0.0 +es 01_solar 1 66 0.0 1.0 +es 02_wind_on 1 66 0.0 1.0 +es 03_wind_off 1 66 0.0 1.0 +es 04_res 1 66 0.0 1.0 es 05_nuclear 1 66 0.0 0.0 es 06_coal 1 66 0.0 0.0 es 07_gas 1 66 0.0 0.0 es 08_non-res 1 66 0.0 0.0 es 09_hydro_pump 1 66 0.0 0.0 -es 01_solar 1 67 1.0 0.0 -es 02_wind_on 1 67 1.0 0.0 -es 03_wind_off 1 67 1.0 0.0 -es 04_res 1 67 1.0 0.0 +es 01_solar 1 67 0.0 1.0 +es 02_wind_on 1 67 0.0 1.0 +es 03_wind_off 1 67 0.0 1.0 +es 04_res 1 67 0.0 1.0 es 05_nuclear 1 67 0.0 0.0 es 06_coal 1 67 0.0 0.0 es 07_gas 1 67 0.0 0.0 es 08_non-res 1 67 0.0 0.0 es 09_hydro_pump 1 67 0.0 0.0 -es 01_solar 1 68 1.0 0.0 -es 02_wind_on 1 68 1.0 0.0 -es 03_wind_off 1 68 1.0 0.0 -es 04_res 1 68 1.0 0.0 +es 01_solar 1 68 0.0 1.0 +es 02_wind_on 1 68 0.0 1.0 +es 03_wind_off 1 68 0.0 1.0 +es 04_res 1 68 0.0 1.0 es 05_nuclear 1 68 0.0 0.0 es 06_coal 1 68 0.0 0.0 es 07_gas 1 68 0.0 0.0 es 08_non-res 1 68 0.0 0.0 es 09_hydro_pump 1 68 0.0 0.0 -es 01_solar 1 69 1.0 0.0 -es 02_wind_on 1 69 1.0 0.0 -es 03_wind_off 1 69 1.0 0.0 -es 04_res 1 69 1.0 0.0 +es 01_solar 1 69 0.0 1.0 +es 02_wind_on 1 69 0.0 1.0 +es 03_wind_off 1 69 0.0 1.0 +es 04_res 1 69 0.0 1.0 es 05_nuclear 1 69 0.0 0.0 es 06_coal 1 69 0.0 0.0 es 07_gas 1 69 0.0 0.0 es 08_non-res 1 69 0.0 0.0 es 09_hydro_pump 1 69 0.0 0.0 -es 01_solar 1 70 1.0 0.0 -es 02_wind_on 1 70 1.0 0.0 -es 03_wind_off 1 70 1.0 0.0 -es 04_res 1 70 1.0 0.0 +es 01_solar 1 70 0.0 1.0 +es 02_wind_on 1 70 0.0 1.0 +es 03_wind_off 1 70 0.0 1.0 +es 04_res 1 70 0.0 1.0 es 05_nuclear 1 70 0.0 0.0 es 06_coal 1 70 0.0 0.0 es 07_gas 1 70 0.0 0.0 es 08_non-res 1 70 0.0 0.0 es 09_hydro_pump 1 70 0.0 0.0 -es 01_solar 1 71 1.0 0.0 -es 02_wind_on 1 71 1.0 0.0 -es 03_wind_off 1 71 1.0 0.0 -es 04_res 1 71 1.0 0.0 +es 01_solar 1 71 0.0 1.0 +es 02_wind_on 1 71 0.0 1.0 +es 03_wind_off 1 71 0.0 1.0 +es 04_res 1 71 0.0 1.0 es 05_nuclear 1 71 0.0 0.0 es 06_coal 1 71 0.0 0.0 es 07_gas 1 71 0.0 0.0 es 08_non-res 1 71 0.0 0.0 es 09_hydro_pump 1 71 0.0 0.0 -es 01_solar 1 72 1.0 0.0 -es 02_wind_on 1 72 1.0 0.0 -es 03_wind_off 1 72 1.0 0.0 -es 04_res 1 72 1.0 0.0 +es 01_solar 1 72 0.0 1.0 +es 02_wind_on 1 72 0.0 1.0 +es 03_wind_off 1 72 0.0 1.0 +es 04_res 1 72 0.0 1.0 es 05_nuclear 1 72 0.0 0.0 es 06_coal 1 72 0.0 0.0 es 07_gas 1 72 0.0 0.0 es 08_non-res 1 72 0.0 0.0 es 09_hydro_pump 1 72 0.0 0.0 -es 01_solar 1 73 1.0 0.0 -es 02_wind_on 1 73 1.0 0.0 -es 03_wind_off 1 73 1.0 0.0 -es 04_res 1 73 1.0 0.0 +es 01_solar 1 73 0.0 1.0 +es 02_wind_on 1 73 0.0 1.0 +es 03_wind_off 1 73 0.0 1.0 +es 04_res 1 73 0.0 1.0 es 05_nuclear 1 73 0.0 0.0 es 06_coal 1 73 0.0 0.0 es 07_gas 1 73 0.0 0.0 es 08_non-res 1 73 0.0 0.0 es 09_hydro_pump 1 73 0.0 0.0 -es 01_solar 1 74 1.0 0.0 -es 02_wind_on 1 74 1.0 0.0 -es 03_wind_off 1 74 1.0 0.0 -es 04_res 1 74 1.0 0.0 +es 01_solar 1 74 0.0 1.0 +es 02_wind_on 1 74 0.0 1.0 +es 03_wind_off 1 74 0.0 1.0 +es 04_res 1 74 0.0 1.0 es 05_nuclear 1 74 0.0 0.0 es 06_coal 1 74 0.0 0.0 es 07_gas 1 74 0.0 0.0 es 08_non-res 1 74 0.0 0.0 es 09_hydro_pump 1 74 0.0 0.0 -es 01_solar 1 75 1.0 0.0 -es 02_wind_on 1 75 1.0 0.0 -es 03_wind_off 1 75 1.0 0.0 -es 04_res 1 75 1.0 0.0 +es 01_solar 1 75 0.0 1.0 +es 02_wind_on 1 75 0.0 1.0 +es 03_wind_off 1 75 0.0 1.0 +es 04_res 1 75 0.0 1.0 es 05_nuclear 1 75 0.0 0.0 es 06_coal 1 75 0.0 0.0 es 07_gas 1 75 0.0 0.0 es 08_non-res 1 75 0.0 0.0 es 09_hydro_pump 1 75 0.0 0.0 -es 01_solar 1 76 1.0 0.0 -es 02_wind_on 1 76 1.0 0.0 -es 03_wind_off 1 76 1.0 0.0 -es 04_res 1 76 1.0 0.0 +es 01_solar 1 76 0.0 1.0 +es 02_wind_on 1 76 0.0 1.0 +es 03_wind_off 1 76 0.0 1.0 +es 04_res 1 76 0.0 1.0 es 05_nuclear 1 76 0.0 0.0 es 06_coal 1 76 0.0 0.0 es 07_gas 1 76 0.0 0.0 es 08_non-res 1 76 0.0 0.0 es 09_hydro_pump 1 76 0.0 0.0 -es 01_solar 1 77 1.0 0.0 -es 02_wind_on 1 77 1.0 0.0 -es 03_wind_off 1 77 1.0 0.0 -es 04_res 1 77 1.0 0.0 +es 01_solar 1 77 0.0 1.0 +es 02_wind_on 1 77 0.0 1.0 +es 03_wind_off 1 77 0.0 1.0 +es 04_res 1 77 0.0 1.0 es 05_nuclear 1 77 0.0 0.0 es 06_coal 1 77 0.0 0.0 es 07_gas 1 77 0.0 0.0 es 08_non-res 1 77 0.0 0.0 es 09_hydro_pump 1 77 0.0 0.0 -es 01_solar 1 78 1.0 0.0 -es 02_wind_on 1 78 1.0 0.0 -es 03_wind_off 1 78 1.0 0.0 -es 04_res 1 78 1.0 0.0 +es 01_solar 1 78 0.0 1.0 +es 02_wind_on 1 78 0.0 1.0 +es 03_wind_off 1 78 0.0 1.0 +es 04_res 1 78 0.0 1.0 es 05_nuclear 1 78 0.0 0.0 es 06_coal 1 78 0.0 0.0 es 07_gas 1 78 0.0 0.0 es 08_non-res 1 78 0.0 0.0 es 09_hydro_pump 1 78 0.0 0.0 -es 01_solar 1 79 1.0 0.0 -es 02_wind_on 1 79 1.0 0.0 -es 03_wind_off 1 79 1.0 0.0 -es 04_res 1 79 1.0 0.0 +es 01_solar 1 79 0.0 1.0 +es 02_wind_on 1 79 0.0 1.0 +es 03_wind_off 1 79 0.0 1.0 +es 04_res 1 79 0.0 1.0 es 05_nuclear 1 79 0.0 0.0 es 06_coal 1 79 0.0 0.0 es 07_gas 1 79 0.0 0.0 es 08_non-res 1 79 0.0 0.0 es 09_hydro_pump 1 79 0.0 0.0 -es 01_solar 1 80 1.0 0.0 -es 02_wind_on 1 80 1.0 0.0 -es 03_wind_off 1 80 1.0 0.0 -es 04_res 1 80 1.0 0.0 +es 01_solar 1 80 0.0 1.0 +es 02_wind_on 1 80 0.0 1.0 +es 03_wind_off 1 80 0.0 1.0 +es 04_res 1 80 0.0 1.0 es 05_nuclear 1 80 0.0 0.0 es 06_coal 1 80 0.0 0.0 es 07_gas 1 80 0.0 0.0 es 08_non-res 1 80 0.0 0.0 es 09_hydro_pump 1 80 0.0 0.0 -es 01_solar 1 81 1.0 0.0 -es 02_wind_on 1 81 1.0 0.0 -es 03_wind_off 1 81 1.0 0.0 -es 04_res 1 81 1.0 0.0 +es 01_solar 1 81 0.0 1.0 +es 02_wind_on 1 81 0.0 1.0 +es 03_wind_off 1 81 0.0 1.0 +es 04_res 1 81 0.0 1.0 es 05_nuclear 1 81 0.0 0.0 es 06_coal 1 81 0.0 0.0 es 07_gas 1 81 0.0 0.0 es 08_non-res 1 81 0.0 0.0 es 09_hydro_pump 1 81 0.0 0.0 -es 01_solar 1 82 1.0 0.0 -es 02_wind_on 1 82 1.0 0.0 -es 03_wind_off 1 82 1.0 0.0 -es 04_res 1 82 1.0 0.0 -es 05_nuclear 1 82 1.0 0.0 +es 01_solar 1 82 0.0 1.0 +es 02_wind_on 1 82 0.0 1.0 +es 03_wind_off 1 82 0.0 1.0 +es 04_res 1 82 0.0 1.0 +es 05_nuclear 1 82 0.0 1.0 es 06_coal 1 82 0.0 0.0 es 07_gas 1 82 0.0 0.0 es 08_non-res 1 82 0.0 0.0 es 09_hydro_pump 1 82 0.0 0.0 -es 01_solar 1 83 1.0 0.0 -es 02_wind_on 1 83 1.0 0.0 -es 03_wind_off 1 83 1.0 0.0 -es 04_res 1 83 1.0 0.0 -es 05_nuclear 1 83 1.0 0.0 +es 01_solar 1 83 0.0 1.0 +es 02_wind_on 1 83 0.0 1.0 +es 03_wind_off 1 83 0.0 1.0 +es 04_res 1 83 0.0 1.0 +es 05_nuclear 1 83 0.0 1.0 es 06_coal 1 83 0.0 0.0 es 07_gas 1 83 0.0 0.0 es 08_non-res 1 83 0.0 0.0 es 09_hydro_pump 1 83 0.0 0.0 -es 01_solar 1 84 1.0 0.0 -es 02_wind_on 1 84 1.0 0.0 -es 03_wind_off 1 84 1.0 0.0 -es 04_res 1 84 1.0 0.0 -es 05_nuclear 1 84 1.0 0.0 +es 01_solar 1 84 0.0 1.0 +es 02_wind_on 1 84 0.0 1.0 +es 03_wind_off 1 84 0.0 1.0 +es 04_res 1 84 0.0 1.0 +es 05_nuclear 1 84 0.0 1.0 es 06_coal 1 84 0.0 0.0 es 07_gas 1 84 0.0 0.0 es 08_non-res 1 84 0.0 0.0 es 09_hydro_pump 1 84 0.0 0.0 -es 01_solar 1 85 1.0 0.0 -es 02_wind_on 1 85 1.0 0.0 -es 03_wind_off 1 85 1.0 0.0 -es 04_res 1 85 1.0 0.0 -es 05_nuclear 1 85 1.0 0.0 +es 01_solar 1 85 0.0 1.0 +es 02_wind_on 1 85 0.0 1.0 +es 03_wind_off 1 85 0.0 1.0 +es 04_res 1 85 0.0 1.0 +es 05_nuclear 1 85 0.0 1.0 es 06_coal 1 85 0.0 0.0 es 07_gas 1 85 0.0 0.0 es 08_non-res 1 85 0.0 0.0 es 09_hydro_pump 1 85 0.0 0.0 -es 01_solar 1 86 1.0 0.0 -es 02_wind_on 1 86 1.0 0.0 -es 03_wind_off 1 86 1.0 0.0 -es 04_res 1 86 1.0 0.0 -es 05_nuclear 1 86 1.0 0.0 +es 01_solar 1 86 0.0 1.0 +es 02_wind_on 1 86 0.0 1.0 +es 03_wind_off 1 86 0.0 1.0 +es 04_res 1 86 0.0 1.0 +es 05_nuclear 1 86 0.0 1.0 es 06_coal 1 86 0.0 0.0 es 07_gas 1 86 0.0 0.0 es 08_non-res 1 86 0.0 0.0 es 09_hydro_pump 1 86 0.0 0.0 -es 01_solar 1 87 1.0 0.0 -es 02_wind_on 1 87 1.0 0.0 -es 03_wind_off 1 87 1.0 0.0 -es 04_res 1 87 1.0 0.0 -es 05_nuclear 1 87 1.0 0.0 +es 01_solar 1 87 0.0 1.0 +es 02_wind_on 1 87 0.0 1.0 +es 03_wind_off 1 87 0.0 1.0 +es 04_res 1 87 0.0 1.0 +es 05_nuclear 1 87 0.0 1.0 es 06_coal 1 87 0.0 0.0 es 07_gas 1 87 0.0 0.0 es 08_non-res 1 87 0.0 0.0 es 09_hydro_pump 1 87 0.0 0.0 -es 01_solar 1 88 1.0 0.0 -es 02_wind_on 1 88 1.0 0.0 -es 03_wind_off 1 88 1.0 0.0 -es 04_res 1 88 1.0 0.0 -es 05_nuclear 1 88 1.0 0.0 +es 01_solar 1 88 0.0 1.0 +es 02_wind_on 1 88 0.0 1.0 +es 03_wind_off 1 88 0.0 1.0 +es 04_res 1 88 0.0 1.0 +es 05_nuclear 1 88 0.0 1.0 es 06_coal 1 88 0.0 0.0 es 07_gas 1 88 0.0 0.0 es 08_non-res 1 88 0.0 0.0 es 09_hydro_pump 1 88 0.0 0.0 -es 01_solar 1 89 1.0 0.0 -es 02_wind_on 1 89 1.0 0.0 -es 03_wind_off 1 89 1.0 0.0 -es 04_res 1 89 1.0 0.0 -es 05_nuclear 1 89 1.0 0.0 +es 01_solar 1 89 0.0 1.0 +es 02_wind_on 1 89 0.0 1.0 +es 03_wind_off 1 89 0.0 1.0 +es 04_res 1 89 0.0 1.0 +es 05_nuclear 1 89 0.0 1.0 es 06_coal 1 89 0.0 0.0 es 07_gas 1 89 0.0 0.0 es 08_non-res 1 89 0.0 0.0 es 09_hydro_pump 1 89 0.0 0.0 -es 01_solar 1 90 1.0 0.0 -es 02_wind_on 1 90 1.0 0.0 -es 03_wind_off 1 90 1.0 0.0 -es 04_res 1 90 1.0 0.0 -es 05_nuclear 1 90 1.0 0.0 +es 01_solar 1 90 0.0 1.0 +es 02_wind_on 1 90 0.0 1.0 +es 03_wind_off 1 90 0.0 1.0 +es 04_res 1 90 0.0 1.0 +es 05_nuclear 1 90 0.0 1.0 es 06_coal 1 90 0.0 0.0 es 07_gas 1 90 0.0 0.0 es 08_non-res 1 90 0.0 0.0 es 09_hydro_pump 1 90 0.0 0.0 -es 01_solar 1 91 1.0 0.0 -es 02_wind_on 1 91 1.0 0.0 -es 03_wind_off 1 91 1.0 0.0 -es 04_res 1 91 1.0 0.0 -es 05_nuclear 1 91 1.0 0.0 +es 01_solar 1 91 0.0 1.0 +es 02_wind_on 1 91 0.0 1.0 +es 03_wind_off 1 91 0.0 1.0 +es 04_res 1 91 0.0 1.0 +es 05_nuclear 1 91 0.0 1.0 es 06_coal 1 91 0.0 0.0 es 07_gas 1 91 0.0 0.0 es 08_non-res 1 91 0.0 0.0 es 09_hydro_pump 1 91 0.0 0.0 -es 01_solar 1 92 1.0 0.0 -es 02_wind_on 1 92 1.0 0.0 -es 03_wind_off 1 92 1.0 0.0 -es 04_res 1 92 1.0 0.0 -es 05_nuclear 1 92 1.0 0.0 +es 01_solar 1 92 0.0 1.0 +es 02_wind_on 1 92 0.0 1.0 +es 03_wind_off 1 92 0.0 1.0 +es 04_res 1 92 0.0 1.0 +es 05_nuclear 1 92 0.0 1.0 es 06_coal 1 92 0.0 0.0 es 07_gas 1 92 0.0 0.0 es 08_non-res 1 92 0.0 0.0 es 09_hydro_pump 1 92 0.0 0.0 -es 01_solar 1 93 1.0 0.0 -es 02_wind_on 1 93 1.0 0.0 -es 03_wind_off 1 93 1.0 0.0 -es 04_res 1 93 1.0 0.0 -es 05_nuclear 1 93 1.0 0.0 +es 01_solar 1 93 0.0 1.0 +es 02_wind_on 1 93 0.0 1.0 +es 03_wind_off 1 93 0.0 1.0 +es 04_res 1 93 0.0 1.0 +es 05_nuclear 1 93 0.0 1.0 es 06_coal 1 93 0.0 0.0 es 07_gas 1 93 0.0 0.0 es 08_non-res 1 93 0.0 0.0 es 09_hydro_pump 1 93 0.0 0.0 -es 01_solar 1 94 1.0 0.0 -es 02_wind_on 1 94 1.0 0.0 -es 03_wind_off 1 94 1.0 0.0 -es 04_res 1 94 1.0 0.0 -es 05_nuclear 1 94 1.0 0.0 +es 01_solar 1 94 0.0 1.0 +es 02_wind_on 1 94 0.0 1.0 +es 03_wind_off 1 94 0.0 1.0 +es 04_res 1 94 0.0 1.0 +es 05_nuclear 1 94 0.0 1.0 es 06_coal 1 94 0.0 0.0 es 07_gas 1 94 0.0 0.0 es 08_non-res 1 94 0.0 0.0 es 09_hydro_pump 1 94 0.0 0.0 -es 01_solar 1 95 1.0 0.0 -es 02_wind_on 1 95 1.0 0.0 -es 03_wind_off 1 95 1.0 0.0 -es 04_res 1 95 1.0 0.0 -es 05_nuclear 1 95 1.0 0.0 +es 01_solar 1 95 0.0 1.0 +es 02_wind_on 1 95 0.0 1.0 +es 03_wind_off 1 95 0.0 1.0 +es 04_res 1 95 0.0 1.0 +es 05_nuclear 1 95 0.0 1.0 es 06_coal 1 95 0.0 0.0 es 07_gas 1 95 0.0 0.0 es 08_non-res 1 95 0.0 0.0 es 09_hydro_pump 1 95 0.0 0.0 -es 01_solar 1 96 1.0 0.0 -es 02_wind_on 1 96 1.0 0.0 -es 03_wind_off 1 96 1.0 0.0 -es 04_res 1 96 1.0 0.0 -es 05_nuclear 1 96 1.0 0.0 +es 01_solar 1 96 0.0 1.0 +es 02_wind_on 1 96 0.0 1.0 +es 03_wind_off 1 96 0.0 1.0 +es 04_res 1 96 0.0 1.0 +es 05_nuclear 1 96 0.0 1.0 es 06_coal 1 96 0.0 0.0 es 07_gas 1 96 0.0 0.0 es 08_non-res 1 96 0.0 0.0 es 09_hydro_pump 1 96 0.0 0.0 -es 01_solar 1 97 1.0 0.0 -es 02_wind_on 1 97 1.0 0.0 -es 03_wind_off 1 97 1.0 0.0 -es 04_res 1 97 1.0 0.0 -es 05_nuclear 1 97 1.0 0.0 +es 01_solar 1 97 0.0 1.0 +es 02_wind_on 1 97 0.0 1.0 +es 03_wind_off 1 97 0.0 1.0 +es 04_res 1 97 0.0 1.0 +es 05_nuclear 1 97 0.0 1.0 es 06_coal 1 97 0.0 0.0 es 07_gas 1 97 0.0 0.0 es 08_non-res 1 97 0.0 0.0 es 09_hydro_pump 1 97 0.0 0.0 -es 01_solar 1 98 1.0 0.0 -es 02_wind_on 1 98 1.0 0.0 -es 03_wind_off 1 98 1.0 0.0 -es 04_res 1 98 1.0 0.0 -es 05_nuclear 1 98 1.0 0.0 +es 01_solar 1 98 0.0 1.0 +es 02_wind_on 1 98 0.0 1.0 +es 03_wind_off 1 98 0.0 1.0 +es 04_res 1 98 0.0 1.0 +es 05_nuclear 1 98 0.0 1.0 es 06_coal 1 98 0.0 0.0 es 07_gas 1 98 0.0 0.0 es 08_non-res 1 98 0.0 0.0 es 09_hydro_pump 1 98 0.0 0.0 -es 01_solar 1 99 1.0 0.0 -es 02_wind_on 1 99 1.0 0.0 -es 03_wind_off 1 99 1.0 0.0 -es 04_res 1 99 1.0 0.0 -es 05_nuclear 1 99 1.0 0.0 +es 01_solar 1 99 0.0 1.0 +es 02_wind_on 1 99 0.0 1.0 +es 03_wind_off 1 99 0.0 1.0 +es 04_res 1 99 0.0 1.0 +es 05_nuclear 1 99 0.0 1.0 es 06_coal 1 99 0.0 0.0 es 07_gas 1 99 0.0 0.0 es 08_non-res 1 99 0.0 0.0 es 09_hydro_pump 1 99 0.0 0.0 -es 01_solar 1 100 1.0 0.0 -es 02_wind_on 1 100 1.0 0.0 -es 03_wind_off 1 100 1.0 0.0 -es 04_res 1 100 1.0 0.0 -es 05_nuclear 1 100 1.0 0.0 +es 01_solar 1 100 0.0 1.0 +es 02_wind_on 1 100 0.0 1.0 +es 03_wind_off 1 100 0.0 1.0 +es 04_res 1 100 0.0 1.0 +es 05_nuclear 1 100 0.0 1.0 es 06_coal 1 100 0.0 0.0 es 07_gas 1 100 0.0 0.0 es 08_non-res 1 100 0.0 0.0 es 09_hydro_pump 1 100 0.0 0.0 -es 01_solar 1 101 1.0 0.0 -es 02_wind_on 1 101 1.0 0.0 -es 03_wind_off 1 101 1.0 0.0 -es 04_res 1 101 1.0 0.0 -es 05_nuclear 1 101 1.0 0.0 +es 01_solar 1 101 0.0 1.0 +es 02_wind_on 1 101 0.0 1.0 +es 03_wind_off 1 101 0.0 1.0 +es 04_res 1 101 0.0 1.0 +es 05_nuclear 1 101 0.0 1.0 es 06_coal 1 101 0.0 0.0 es 07_gas 1 101 0.0 0.0 es 08_non-res 1 101 0.0 0.0 es 09_hydro_pump 1 101 0.0 0.0 -es 01_solar 1 102 1.0 0.0 -es 02_wind_on 1 102 1.0 0.0 -es 03_wind_off 1 102 1.0 0.0 -es 04_res 1 102 1.0 0.0 -es 05_nuclear 1 102 1.0 0.0 -es 06_coal 1 102 1.0 0.0 +es 01_solar 1 102 0.0 1.0 +es 02_wind_on 1 102 0.0 1.0 +es 03_wind_off 1 102 0.0 1.0 +es 04_res 1 102 0.0 1.0 +es 05_nuclear 1 102 0.0 1.0 +es 06_coal 1 102 0.0 1.0 es 07_gas 1 102 0.0 0.0 es 08_non-res 1 102 0.0 0.0 es 09_hydro_pump 1 102 0.0 0.0 -es 01_solar 1 103 1.0 0.0 -es 02_wind_on 1 103 1.0 0.0 -es 03_wind_off 1 103 1.0 0.0 -es 04_res 1 103 1.0 0.0 -es 05_nuclear 1 103 1.0 0.0 -es 06_coal 1 103 1.0 0.0 +es 01_solar 1 103 0.0 1.0 +es 02_wind_on 1 103 0.0 1.0 +es 03_wind_off 1 103 0.0 1.0 +es 04_res 1 103 0.0 1.0 +es 05_nuclear 1 103 0.0 1.0 +es 06_coal 1 103 0.0 1.0 es 07_gas 1 103 0.0 0.0 es 08_non-res 1 103 0.0 0.0 es 09_hydro_pump 1 103 0.0 0.0 -es 01_solar 1 104 1.0 0.0 -es 02_wind_on 1 104 1.0 0.0 -es 03_wind_off 1 104 1.0 0.0 -es 04_res 1 104 1.0 0.0 -es 05_nuclear 1 104 1.0 0.0 -es 06_coal 1 104 1.0 0.0 +es 01_solar 1 104 0.0 1.0 +es 02_wind_on 1 104 0.0 1.0 +es 03_wind_off 1 104 0.0 1.0 +es 04_res 1 104 0.0 1.0 +es 05_nuclear 1 104 0.0 1.0 +es 06_coal 1 104 0.0 1.0 es 07_gas 1 104 0.0 0.0 es 08_non-res 1 104 0.0 0.0 es 09_hydro_pump 1 104 0.0 0.0 -es 01_solar 1 105 1.0 0.0 -es 02_wind_on 1 105 1.0 0.0 -es 03_wind_off 1 105 1.0 0.0 -es 04_res 1 105 1.0 0.0 -es 05_nuclear 1 105 1.0 0.0 -es 06_coal 1 105 1.0 0.0 +es 01_solar 1 105 0.0 1.0 +es 02_wind_on 1 105 0.0 1.0 +es 03_wind_off 1 105 0.0 1.0 +es 04_res 1 105 0.0 1.0 +es 05_nuclear 1 105 0.0 1.0 +es 06_coal 1 105 0.0 1.0 es 07_gas 1 105 0.0 0.0 es 08_non-res 1 105 0.0 0.0 es 09_hydro_pump 1 105 0.0 0.0 -es 01_solar 1 106 1.0 0.0 -es 02_wind_on 1 106 1.0 0.0 -es 03_wind_off 1 106 1.0 0.0 -es 04_res 1 106 1.0 0.0 -es 05_nuclear 1 106 1.0 0.0 -es 06_coal 1 106 1.0 0.0 +es 01_solar 1 106 0.0 1.0 +es 02_wind_on 1 106 0.0 1.0 +es 03_wind_off 1 106 0.0 1.0 +es 04_res 1 106 0.0 1.0 +es 05_nuclear 1 106 0.0 1.0 +es 06_coal 1 106 0.0 1.0 es 07_gas 1 106 0.0 0.0 es 08_non-res 1 106 0.0 0.0 es 09_hydro_pump 1 106 0.0 0.0 -es 01_solar 1 107 1.0 0.0 -es 02_wind_on 1 107 1.0 0.0 -es 03_wind_off 1 107 1.0 0.0 -es 04_res 1 107 1.0 0.0 -es 05_nuclear 1 107 1.0 0.0 -es 06_coal 1 107 1.0 0.0 +es 01_solar 1 107 0.0 1.0 +es 02_wind_on 1 107 0.0 1.0 +es 03_wind_off 1 107 0.0 1.0 +es 04_res 1 107 0.0 1.0 +es 05_nuclear 1 107 0.0 1.0 +es 06_coal 1 107 0.0 1.0 es 07_gas 1 107 0.0 0.0 es 08_non-res 1 107 0.0 0.0 es 09_hydro_pump 1 107 0.0 0.0 -es 01_solar 1 108 1.0 0.0 -es 02_wind_on 1 108 1.0 0.0 -es 03_wind_off 1 108 1.0 0.0 -es 04_res 1 108 1.0 0.0 -es 05_nuclear 1 108 1.0 0.0 -es 06_coal 1 108 1.0 0.0 +es 01_solar 1 108 0.0 1.0 +es 02_wind_on 1 108 0.0 1.0 +es 03_wind_off 1 108 0.0 1.0 +es 04_res 1 108 0.0 1.0 +es 05_nuclear 1 108 0.0 1.0 +es 06_coal 1 108 0.0 1.0 es 07_gas 1 108 0.0 0.0 es 08_non-res 1 108 0.0 0.0 es 09_hydro_pump 1 108 0.0 0.0 -es 01_solar 1 109 1.0 0.0 -es 02_wind_on 1 109 1.0 0.0 -es 03_wind_off 1 109 1.0 0.0 -es 04_res 1 109 1.0 0.0 -es 05_nuclear 1 109 1.0 0.0 -es 06_coal 1 109 1.0 0.0 +es 01_solar 1 109 0.0 1.0 +es 02_wind_on 1 109 0.0 1.0 +es 03_wind_off 1 109 0.0 1.0 +es 04_res 1 109 0.0 1.0 +es 05_nuclear 1 109 0.0 1.0 +es 06_coal 1 109 0.0 1.0 es 07_gas 1 109 0.0 0.0 es 08_non-res 1 109 0.0 0.0 es 09_hydro_pump 1 109 0.0 0.0 -es 01_solar 1 110 1.0 0.0 -es 02_wind_on 1 110 1.0 0.0 -es 03_wind_off 1 110 1.0 0.0 -es 04_res 1 110 1.0 0.0 -es 05_nuclear 1 110 1.0 0.0 -es 06_coal 1 110 1.0 0.0 +es 01_solar 1 110 0.0 1.0 +es 02_wind_on 1 110 0.0 1.0 +es 03_wind_off 1 110 0.0 1.0 +es 04_res 1 110 0.0 1.0 +es 05_nuclear 1 110 0.0 1.0 +es 06_coal 1 110 0.0 1.0 es 07_gas 1 110 0.0 0.0 es 08_non-res 1 110 0.0 0.0 es 09_hydro_pump 1 110 0.0 0.0 -es 01_solar 1 111 1.0 0.0 -es 02_wind_on 1 111 1.0 0.0 -es 03_wind_off 1 111 1.0 0.0 -es 04_res 1 111 1.0 0.0 -es 05_nuclear 1 111 1.0 0.0 -es 06_coal 1 111 1.0 0.0 +es 01_solar 1 111 0.0 1.0 +es 02_wind_on 1 111 0.0 1.0 +es 03_wind_off 1 111 0.0 1.0 +es 04_res 1 111 0.0 1.0 +es 05_nuclear 1 111 0.0 1.0 +es 06_coal 1 111 0.0 1.0 es 07_gas 1 111 0.0 0.0 es 08_non-res 1 111 0.0 0.0 es 09_hydro_pump 1 111 0.0 0.0 -es 01_solar 1 112 1.0 0.0 -es 02_wind_on 1 112 1.0 0.0 -es 03_wind_off 1 112 1.0 0.0 -es 04_res 1 112 1.0 0.0 -es 05_nuclear 1 112 1.0 0.0 -es 06_coal 1 112 1.0 0.0 +es 01_solar 1 112 0.0 1.0 +es 02_wind_on 1 112 0.0 1.0 +es 03_wind_off 1 112 0.0 1.0 +es 04_res 1 112 0.0 1.0 +es 05_nuclear 1 112 0.0 1.0 +es 06_coal 1 112 0.0 1.0 es 07_gas 1 112 0.0 0.0 es 08_non-res 1 112 0.0 0.0 es 09_hydro_pump 1 112 0.0 0.0 -es 01_solar 1 113 1.0 0.0 -es 02_wind_on 1 113 1.0 0.0 -es 03_wind_off 1 113 1.0 0.0 -es 04_res 1 113 1.0 0.0 -es 05_nuclear 1 113 1.0 0.0 -es 06_coal 1 113 1.0 0.0 +es 01_solar 1 113 0.0 1.0 +es 02_wind_on 1 113 0.0 1.0 +es 03_wind_off 1 113 0.0 1.0 +es 04_res 1 113 0.0 1.0 +es 05_nuclear 1 113 0.0 1.0 +es 06_coal 1 113 0.0 1.0 es 07_gas 1 113 0.0 0.0 es 08_non-res 1 113 0.0 0.0 es 09_hydro_pump 1 113 0.0 0.0 -es 01_solar 1 114 1.0 0.0 -es 02_wind_on 1 114 1.0 0.0 -es 03_wind_off 1 114 1.0 0.0 -es 04_res 1 114 1.0 0.0 -es 05_nuclear 1 114 1.0 0.0 -es 06_coal 1 114 1.0 0.0 +es 01_solar 1 114 0.0 1.0 +es 02_wind_on 1 114 0.0 1.0 +es 03_wind_off 1 114 0.0 1.0 +es 04_res 1 114 0.0 1.0 +es 05_nuclear 1 114 0.0 1.0 +es 06_coal 1 114 0.0 1.0 es 07_gas 1 114 0.0 0.0 es 08_non-res 1 114 0.0 0.0 es 09_hydro_pump 1 114 0.0 0.0 -es 01_solar 1 115 1.0 0.0 -es 02_wind_on 1 115 1.0 0.0 -es 03_wind_off 1 115 1.0 0.0 -es 04_res 1 115 1.0 0.0 -es 05_nuclear 1 115 1.0 0.0 -es 06_coal 1 115 1.0 0.0 +es 01_solar 1 115 0.0 1.0 +es 02_wind_on 1 115 0.0 1.0 +es 03_wind_off 1 115 0.0 1.0 +es 04_res 1 115 0.0 1.0 +es 05_nuclear 1 115 0.0 1.0 +es 06_coal 1 115 0.0 1.0 es 07_gas 1 115 0.0 0.0 es 08_non-res 1 115 0.0 0.0 es 09_hydro_pump 1 115 0.0 0.0 -es 01_solar 1 116 1.0 0.0 -es 02_wind_on 1 116 1.0 0.0 -es 03_wind_off 1 116 1.0 0.0 -es 04_res 1 116 1.0 0.0 -es 05_nuclear 1 116 1.0 0.0 -es 06_coal 1 116 1.0 0.0 +es 01_solar 1 116 0.0 1.0 +es 02_wind_on 1 116 0.0 1.0 +es 03_wind_off 1 116 0.0 1.0 +es 04_res 1 116 0.0 1.0 +es 05_nuclear 1 116 0.0 1.0 +es 06_coal 1 116 0.0 1.0 es 07_gas 1 116 0.0 0.0 es 08_non-res 1 116 0.0 0.0 es 09_hydro_pump 1 116 0.0 0.0 -es 01_solar 1 117 1.0 0.0 -es 02_wind_on 1 117 1.0 0.0 -es 03_wind_off 1 117 1.0 0.0 -es 04_res 1 117 1.0 0.0 -es 05_nuclear 1 117 1.0 0.0 -es 06_coal 1 117 1.0 0.0 +es 01_solar 1 117 0.0 1.0 +es 02_wind_on 1 117 0.0 1.0 +es 03_wind_off 1 117 0.0 1.0 +es 04_res 1 117 0.0 1.0 +es 05_nuclear 1 117 0.0 1.0 +es 06_coal 1 117 0.0 1.0 es 07_gas 1 117 0.0 0.0 es 08_non-res 1 117 0.0 0.0 es 09_hydro_pump 1 117 0.0 0.0 -es 01_solar 1 118 1.0 0.0 -es 02_wind_on 1 118 1.0 0.0 -es 03_wind_off 1 118 1.0 0.0 -es 04_res 1 118 1.0 0.0 -es 05_nuclear 1 118 1.0 0.0 -es 06_coal 1 118 1.0 0.0 +es 01_solar 1 118 0.0 1.0 +es 02_wind_on 1 118 0.0 1.0 +es 03_wind_off 1 118 0.0 1.0 +es 04_res 1 118 0.0 1.0 +es 05_nuclear 1 118 0.0 1.0 +es 06_coal 1 118 0.0 1.0 es 07_gas 1 118 0.0 0.0 es 08_non-res 1 118 0.0 0.0 es 09_hydro_pump 1 118 0.0 0.0 -es 01_solar 1 119 1.0 0.0 -es 02_wind_on 1 119 1.0 0.0 -es 03_wind_off 1 119 1.0 0.0 -es 04_res 1 119 1.0 0.0 -es 05_nuclear 1 119 1.0 0.0 -es 06_coal 1 119 1.0 0.0 +es 01_solar 1 119 0.0 1.0 +es 02_wind_on 1 119 0.0 1.0 +es 03_wind_off 1 119 0.0 1.0 +es 04_res 1 119 0.0 1.0 +es 05_nuclear 1 119 0.0 1.0 +es 06_coal 1 119 0.0 1.0 es 07_gas 1 119 0.0 0.0 es 08_non-res 1 119 0.0 0.0 es 09_hydro_pump 1 119 0.0 0.0 -es 01_solar 1 120 1.0 0.0 -es 02_wind_on 1 120 1.0 0.0 -es 03_wind_off 1 120 1.0 0.0 -es 04_res 1 120 1.0 0.0 -es 05_nuclear 1 120 1.0 0.0 -es 06_coal 1 120 1.0 0.0 +es 01_solar 1 120 0.0 1.0 +es 02_wind_on 1 120 0.0 1.0 +es 03_wind_off 1 120 0.0 1.0 +es 04_res 1 120 0.0 1.0 +es 05_nuclear 1 120 0.0 1.0 +es 06_coal 1 120 0.0 1.0 es 07_gas 1 120 0.0 0.0 es 08_non-res 1 120 0.0 0.0 es 09_hydro_pump 1 120 0.0 0.0 -es 01_solar 1 121 1.0 0.0 -es 02_wind_on 1 121 1.0 0.0 -es 03_wind_off 1 121 1.0 0.0 -es 04_res 1 121 1.0 0.0 -es 05_nuclear 1 121 1.0 0.0 -es 06_coal 1 121 1.0 0.0 +es 01_solar 1 121 0.0 1.0 +es 02_wind_on 1 121 0.0 1.0 +es 03_wind_off 1 121 0.0 1.0 +es 04_res 1 121 0.0 1.0 +es 05_nuclear 1 121 0.0 1.0 +es 06_coal 1 121 0.0 1.0 es 07_gas 1 121 0.0 0.0 es 08_non-res 1 121 0.0 0.0 es 09_hydro_pump 1 121 0.0 0.0 -es 01_solar 1 122 1.0 0.0 -es 02_wind_on 1 122 1.0 0.0 -es 03_wind_off 1 122 1.0 0.0 -es 04_res 1 122 1.0 0.0 -es 05_nuclear 1 122 1.0 0.0 -es 06_coal 1 122 1.0 0.0 -es 07_gas 1 122 1.0 0.0 +es 01_solar 1 122 0.0 1.0 +es 02_wind_on 1 122 0.0 1.0 +es 03_wind_off 1 122 0.0 1.0 +es 04_res 1 122 0.0 1.0 +es 05_nuclear 1 122 0.0 1.0 +es 06_coal 1 122 0.0 1.0 +es 07_gas 1 122 0.0 1.0 es 08_non-res 1 122 0.0 0.0 es 09_hydro_pump 1 122 0.0 0.0 -es 01_solar 1 123 1.0 0.0 -es 02_wind_on 1 123 1.0 0.0 -es 03_wind_off 1 123 1.0 0.0 -es 04_res 1 123 1.0 0.0 -es 05_nuclear 1 123 1.0 0.0 -es 06_coal 1 123 1.0 0.0 -es 07_gas 1 123 1.0 0.0 +es 01_solar 1 123 0.0 1.0 +es 02_wind_on 1 123 0.0 1.0 +es 03_wind_off 1 123 0.0 1.0 +es 04_res 1 123 0.0 1.0 +es 05_nuclear 1 123 0.0 1.0 +es 06_coal 1 123 0.0 1.0 +es 07_gas 1 123 0.0 1.0 es 08_non-res 1 123 0.0 0.0 es 09_hydro_pump 1 123 0.0 0.0 -es 01_solar 1 124 1.0 0.0 -es 02_wind_on 1 124 1.0 0.0 -es 03_wind_off 1 124 1.0 0.0 -es 04_res 1 124 1.0 0.0 -es 05_nuclear 1 124 1.0 0.0 -es 06_coal 1 124 1.0 0.0 -es 07_gas 1 124 1.0 0.0 +es 01_solar 1 124 0.0 1.0 +es 02_wind_on 1 124 0.0 1.0 +es 03_wind_off 1 124 0.0 1.0 +es 04_res 1 124 0.0 1.0 +es 05_nuclear 1 124 0.0 1.0 +es 06_coal 1 124 0.0 1.0 +es 07_gas 1 124 0.0 1.0 es 08_non-res 1 124 0.0 0.0 es 09_hydro_pump 1 124 0.0 0.0 -es 01_solar 1 125 1.0 0.0 -es 02_wind_on 1 125 1.0 0.0 -es 03_wind_off 1 125 1.0 0.0 -es 04_res 1 125 1.0 0.0 -es 05_nuclear 1 125 1.0 0.0 -es 06_coal 1 125 1.0 0.0 -es 07_gas 1 125 1.0 0.0 +es 01_solar 1 125 0.0 1.0 +es 02_wind_on 1 125 0.0 1.0 +es 03_wind_off 1 125 0.0 1.0 +es 04_res 1 125 0.0 1.0 +es 05_nuclear 1 125 0.0 1.0 +es 06_coal 1 125 0.0 1.0 +es 07_gas 1 125 0.0 1.0 es 08_non-res 1 125 0.0 0.0 es 09_hydro_pump 1 125 0.0 0.0 -es 01_solar 1 126 1.0 0.0 -es 02_wind_on 1 126 1.0 0.0 -es 03_wind_off 1 126 1.0 0.0 -es 04_res 1 126 1.0 0.0 -es 05_nuclear 1 126 1.0 0.0 -es 06_coal 1 126 1.0 0.0 -es 07_gas 1 126 1.0 0.0 +es 01_solar 1 126 0.0 1.0 +es 02_wind_on 1 126 0.0 1.0 +es 03_wind_off 1 126 0.0 1.0 +es 04_res 1 126 0.0 1.0 +es 05_nuclear 1 126 0.0 1.0 +es 06_coal 1 126 0.0 1.0 +es 07_gas 1 126 0.0 1.0 es 08_non-res 1 126 0.0 0.0 es 09_hydro_pump 1 126 0.0 0.0 -es 01_solar 1 127 1.0 0.0 -es 02_wind_on 1 127 1.0 0.0 -es 03_wind_off 1 127 1.0 0.0 -es 04_res 1 127 1.0 0.0 -es 05_nuclear 1 127 1.0 0.0 -es 06_coal 1 127 1.0 0.0 -es 07_gas 1 127 1.0 0.0 +es 01_solar 1 127 0.0 1.0 +es 02_wind_on 1 127 0.0 1.0 +es 03_wind_off 1 127 0.0 1.0 +es 04_res 1 127 0.0 1.0 +es 05_nuclear 1 127 0.0 1.0 +es 06_coal 1 127 0.0 1.0 +es 07_gas 1 127 0.0 1.0 es 08_non-res 1 127 0.0 0.0 es 09_hydro_pump 1 127 0.0 0.0 -es 01_solar 1 128 1.0 0.0 -es 02_wind_on 1 128 1.0 0.0 -es 03_wind_off 1 128 1.0 0.0 -es 04_res 1 128 1.0 0.0 -es 05_nuclear 1 128 1.0 0.0 -es 06_coal 1 128 1.0 0.0 -es 07_gas 1 128 1.0 0.0 +es 01_solar 1 128 0.0 1.0 +es 02_wind_on 1 128 0.0 1.0 +es 03_wind_off 1 128 0.0 1.0 +es 04_res 1 128 0.0 1.0 +es 05_nuclear 1 128 0.0 1.0 +es 06_coal 1 128 0.0 1.0 +es 07_gas 1 128 0.0 1.0 es 08_non-res 1 128 0.0 0.0 es 09_hydro_pump 1 128 0.0 0.0 -es 01_solar 1 129 1.0 0.0 -es 02_wind_on 1 129 1.0 0.0 -es 03_wind_off 1 129 1.0 0.0 -es 04_res 1 129 1.0 0.0 -es 05_nuclear 1 129 1.0 0.0 -es 06_coal 1 129 1.0 0.0 -es 07_gas 1 129 1.0 0.0 +es 01_solar 1 129 0.0 1.0 +es 02_wind_on 1 129 0.0 1.0 +es 03_wind_off 1 129 0.0 1.0 +es 04_res 1 129 0.0 1.0 +es 05_nuclear 1 129 0.0 1.0 +es 06_coal 1 129 0.0 1.0 +es 07_gas 1 129 0.0 1.0 es 08_non-res 1 129 0.0 0.0 es 09_hydro_pump 1 129 0.0 0.0 -es 01_solar 1 130 1.0 0.0 -es 02_wind_on 1 130 1.0 0.0 -es 03_wind_off 1 130 1.0 0.0 -es 04_res 1 130 1.0 0.0 -es 05_nuclear 1 130 1.0 0.0 -es 06_coal 1 130 1.0 0.0 -es 07_gas 1 130 1.0 0.0 +es 01_solar 1 130 0.0 1.0 +es 02_wind_on 1 130 0.0 1.0 +es 03_wind_off 1 130 0.0 1.0 +es 04_res 1 130 0.0 1.0 +es 05_nuclear 1 130 0.0 1.0 +es 06_coal 1 130 0.0 1.0 +es 07_gas 1 130 0.0 1.0 es 08_non-res 1 130 0.0 0.0 es 09_hydro_pump 1 130 0.0 0.0 -es 01_solar 1 131 1.0 0.0 -es 02_wind_on 1 131 1.0 0.0 -es 03_wind_off 1 131 1.0 0.0 -es 04_res 1 131 1.0 0.0 -es 05_nuclear 1 131 1.0 0.0 -es 06_coal 1 131 1.0 0.0 -es 07_gas 1 131 1.0 0.0 +es 01_solar 1 131 0.0 1.0 +es 02_wind_on 1 131 0.0 1.0 +es 03_wind_off 1 131 0.0 1.0 +es 04_res 1 131 0.0 1.0 +es 05_nuclear 1 131 0.0 1.0 +es 06_coal 1 131 0.0 1.0 +es 07_gas 1 131 0.0 1.0 es 08_non-res 1 131 0.0 0.0 es 09_hydro_pump 1 131 0.0 0.0 -es 01_solar 1 132 1.0 0.0 -es 02_wind_on 1 132 1.0 0.0 -es 03_wind_off 1 132 1.0 0.0 -es 04_res 1 132 1.0 0.0 -es 05_nuclear 1 132 1.0 0.0 -es 06_coal 1 132 1.0 0.0 -es 07_gas 1 132 1.0 0.0 +es 01_solar 1 132 0.0 1.0 +es 02_wind_on 1 132 0.0 1.0 +es 03_wind_off 1 132 0.0 1.0 +es 04_res 1 132 0.0 1.0 +es 05_nuclear 1 132 0.0 1.0 +es 06_coal 1 132 0.0 1.0 +es 07_gas 1 132 0.0 1.0 es 08_non-res 1 132 0.0 0.0 es 09_hydro_pump 1 132 0.0 0.0 -es 01_solar 1 133 1.0 0.0 -es 02_wind_on 1 133 1.0 0.0 -es 03_wind_off 1 133 1.0 0.0 -es 04_res 1 133 1.0 0.0 -es 05_nuclear 1 133 1.0 0.0 -es 06_coal 1 133 1.0 0.0 -es 07_gas 1 133 1.0 0.0 +es 01_solar 1 133 0.0 1.0 +es 02_wind_on 1 133 0.0 1.0 +es 03_wind_off 1 133 0.0 1.0 +es 04_res 1 133 0.0 1.0 +es 05_nuclear 1 133 0.0 1.0 +es 06_coal 1 133 0.0 1.0 +es 07_gas 1 133 0.0 1.0 es 08_non-res 1 133 0.0 0.0 es 09_hydro_pump 1 133 0.0 0.0 -es 01_solar 1 134 1.0 0.0 -es 02_wind_on 1 134 1.0 0.0 -es 03_wind_off 1 134 1.0 0.0 -es 04_res 1 134 1.0 0.0 -es 05_nuclear 1 134 1.0 0.0 -es 06_coal 1 134 1.0 0.0 -es 07_gas 1 134 1.0 0.0 +es 01_solar 1 134 0.0 1.0 +es 02_wind_on 1 134 0.0 1.0 +es 03_wind_off 1 134 0.0 1.0 +es 04_res 1 134 0.0 1.0 +es 05_nuclear 1 134 0.0 1.0 +es 06_coal 1 134 0.0 1.0 +es 07_gas 1 134 0.0 1.0 es 08_non-res 1 134 0.0 0.0 es 09_hydro_pump 1 134 0.0 0.0 -es 01_solar 1 135 1.0 0.0 -es 02_wind_on 1 135 1.0 0.0 -es 03_wind_off 1 135 1.0 0.0 -es 04_res 1 135 1.0 0.0 -es 05_nuclear 1 135 1.0 0.0 -es 06_coal 1 135 1.0 0.0 -es 07_gas 1 135 1.0 0.0 +es 01_solar 1 135 0.0 1.0 +es 02_wind_on 1 135 0.0 1.0 +es 03_wind_off 1 135 0.0 1.0 +es 04_res 1 135 0.0 1.0 +es 05_nuclear 1 135 0.0 1.0 +es 06_coal 1 135 0.0 1.0 +es 07_gas 1 135 0.0 1.0 es 08_non-res 1 135 0.0 0.0 es 09_hydro_pump 1 135 0.0 0.0 -es 01_solar 1 136 1.0 0.0 -es 02_wind_on 1 136 1.0 0.0 -es 03_wind_off 1 136 1.0 0.0 -es 04_res 1 136 1.0 0.0 -es 05_nuclear 1 136 1.0 0.0 -es 06_coal 1 136 1.0 0.0 -es 07_gas 1 136 1.0 0.0 +es 01_solar 1 136 0.0 1.0 +es 02_wind_on 1 136 0.0 1.0 +es 03_wind_off 1 136 0.0 1.0 +es 04_res 1 136 0.0 1.0 +es 05_nuclear 1 136 0.0 1.0 +es 06_coal 1 136 0.0 1.0 +es 07_gas 1 136 0.0 1.0 es 08_non-res 1 136 0.0 0.0 es 09_hydro_pump 1 136 0.0 0.0 -es 01_solar 1 137 1.0 0.0 -es 02_wind_on 1 137 1.0 0.0 -es 03_wind_off 1 137 1.0 0.0 -es 04_res 1 137 1.0 0.0 -es 05_nuclear 1 137 1.0 0.0 -es 06_coal 1 137 1.0 0.0 -es 07_gas 1 137 1.0 0.0 +es 01_solar 1 137 0.0 1.0 +es 02_wind_on 1 137 0.0 1.0 +es 03_wind_off 1 137 0.0 1.0 +es 04_res 1 137 0.0 1.0 +es 05_nuclear 1 137 0.0 1.0 +es 06_coal 1 137 0.0 1.0 +es 07_gas 1 137 0.0 1.0 es 08_non-res 1 137 0.0 0.0 es 09_hydro_pump 1 137 0.0 0.0 -es 01_solar 1 138 1.0 0.0 -es 02_wind_on 1 138 1.0 0.0 -es 03_wind_off 1 138 1.0 0.0 -es 04_res 1 138 1.0 0.0 -es 05_nuclear 1 138 1.0 0.0 -es 06_coal 1 138 1.0 0.0 -es 07_gas 1 138 1.0 0.0 +es 01_solar 1 138 0.0 1.0 +es 02_wind_on 1 138 0.0 1.0 +es 03_wind_off 1 138 0.0 1.0 +es 04_res 1 138 0.0 1.0 +es 05_nuclear 1 138 0.0 1.0 +es 06_coal 1 138 0.0 1.0 +es 07_gas 1 138 0.0 1.0 es 08_non-res 1 138 0.0 0.0 es 09_hydro_pump 1 138 0.0 0.0 -es 01_solar 1 139 1.0 0.0 -es 02_wind_on 1 139 1.0 0.0 -es 03_wind_off 1 139 1.0 0.0 -es 04_res 1 139 1.0 0.0 -es 05_nuclear 1 139 1.0 0.0 -es 06_coal 1 139 1.0 0.0 -es 07_gas 1 139 1.0 0.0 +es 01_solar 1 139 0.0 1.0 +es 02_wind_on 1 139 0.0 1.0 +es 03_wind_off 1 139 0.0 1.0 +es 04_res 1 139 0.0 1.0 +es 05_nuclear 1 139 0.0 1.0 +es 06_coal 1 139 0.0 1.0 +es 07_gas 1 139 0.0 1.0 es 08_non-res 1 139 0.0 0.0 es 09_hydro_pump 1 139 0.0 0.0 -es 01_solar 1 140 1.0 0.0 -es 02_wind_on 1 140 1.0 0.0 -es 03_wind_off 1 140 1.0 0.0 -es 04_res 1 140 1.0 0.0 -es 05_nuclear 1 140 1.0 0.0 -es 06_coal 1 140 1.0 0.0 -es 07_gas 1 140 1.0 0.0 +es 01_solar 1 140 0.0 1.0 +es 02_wind_on 1 140 0.0 1.0 +es 03_wind_off 1 140 0.0 1.0 +es 04_res 1 140 0.0 1.0 +es 05_nuclear 1 140 0.0 1.0 +es 06_coal 1 140 0.0 1.0 +es 07_gas 1 140 0.0 1.0 es 08_non-res 1 140 0.0 0.0 es 09_hydro_pump 1 140 0.0 0.0 -es 01_solar 1 141 1.0 0.0 -es 02_wind_on 1 141 1.0 0.0 -es 03_wind_off 1 141 1.0 0.0 -es 04_res 1 141 1.0 0.0 -es 05_nuclear 1 141 1.0 0.0 -es 06_coal 1 141 1.0 0.0 -es 07_gas 1 141 1.0 0.0 +es 01_solar 1 141 0.0 1.0 +es 02_wind_on 1 141 0.0 1.0 +es 03_wind_off 1 141 0.0 1.0 +es 04_res 1 141 0.0 1.0 +es 05_nuclear 1 141 0.0 1.0 +es 06_coal 1 141 0.0 1.0 +es 07_gas 1 141 0.0 1.0 es 08_non-res 1 141 0.0 0.0 es 09_hydro_pump 1 141 0.0 0.0 -es 01_solar 1 142 1.0 0.0 -es 02_wind_on 1 142 1.0 0.0 -es 03_wind_off 1 142 1.0 0.0 -es 04_res 1 142 1.0 0.0 -es 05_nuclear 1 142 1.0 0.0 -es 06_coal 1 142 1.0 0.0 -es 07_gas 1 142 1.0 0.0 -es 08_non-res 1 142 1.0 0.0 +es 01_solar 1 142 0.0 1.0 +es 02_wind_on 1 142 0.0 1.0 +es 03_wind_off 1 142 0.0 1.0 +es 04_res 1 142 0.0 1.0 +es 05_nuclear 1 142 0.0 1.0 +es 06_coal 1 142 0.0 1.0 +es 07_gas 1 142 0.0 1.0 +es 08_non-res 1 142 0.0 1.0 es 09_hydro_pump 1 142 0.0 0.0 -es 01_solar 1 143 1.0 0.0 -es 02_wind_on 1 143 1.0 0.0 -es 03_wind_off 1 143 1.0 0.0 -es 04_res 1 143 1.0 0.0 -es 05_nuclear 1 143 1.0 0.0 -es 06_coal 1 143 1.0 0.0 -es 07_gas 1 143 1.0 0.0 -es 08_non-res 1 143 1.0 0.0 +es 01_solar 1 143 0.0 1.0 +es 02_wind_on 1 143 0.0 1.0 +es 03_wind_off 1 143 0.0 1.0 +es 04_res 1 143 0.0 1.0 +es 05_nuclear 1 143 0.0 1.0 +es 06_coal 1 143 0.0 1.0 +es 07_gas 1 143 0.0 1.0 +es 08_non-res 1 143 0.0 1.0 es 09_hydro_pump 1 143 0.0 0.0 -es 01_solar 1 144 1.0 0.0 -es 02_wind_on 1 144 1.0 0.0 -es 03_wind_off 1 144 1.0 0.0 -es 04_res 1 144 1.0 0.0 -es 05_nuclear 1 144 1.0 0.0 -es 06_coal 1 144 1.0 0.0 -es 07_gas 1 144 1.0 0.0 -es 08_non-res 1 144 1.0 0.0 +es 01_solar 1 144 0.0 1.0 +es 02_wind_on 1 144 0.0 1.0 +es 03_wind_off 1 144 0.0 1.0 +es 04_res 1 144 0.0 1.0 +es 05_nuclear 1 144 0.0 1.0 +es 06_coal 1 144 0.0 1.0 +es 07_gas 1 144 0.0 1.0 +es 08_non-res 1 144 0.0 1.0 es 09_hydro_pump 1 144 0.0 0.0 -es 01_solar 1 145 1.0 0.0 -es 02_wind_on 1 145 1.0 0.0 -es 03_wind_off 1 145 1.0 0.0 -es 04_res 1 145 1.0 0.0 -es 05_nuclear 1 145 1.0 0.0 -es 06_coal 1 145 1.0 0.0 -es 07_gas 1 145 1.0 0.0 -es 08_non-res 1 145 1.0 0.0 +es 01_solar 1 145 0.0 1.0 +es 02_wind_on 1 145 0.0 1.0 +es 03_wind_off 1 145 0.0 1.0 +es 04_res 1 145 0.0 1.0 +es 05_nuclear 1 145 0.0 1.0 +es 06_coal 1 145 0.0 1.0 +es 07_gas 1 145 0.0 1.0 +es 08_non-res 1 145 0.0 1.0 es 09_hydro_pump 1 145 0.0 0.0 -es 01_solar 1 146 1.0 0.0 -es 02_wind_on 1 146 1.0 0.0 -es 03_wind_off 1 146 1.0 0.0 -es 04_res 1 146 1.0 0.0 -es 05_nuclear 1 146 1.0 0.0 -es 06_coal 1 146 1.0 0.0 -es 07_gas 1 146 1.0 0.0 -es 08_non-res 1 146 1.0 0.0 +es 01_solar 1 146 0.0 1.0 +es 02_wind_on 1 146 0.0 1.0 +es 03_wind_off 1 146 0.0 1.0 +es 04_res 1 146 0.0 1.0 +es 05_nuclear 1 146 0.0 1.0 +es 06_coal 1 146 0.0 1.0 +es 07_gas 1 146 0.0 1.0 +es 08_non-res 1 146 0.0 1.0 es 09_hydro_pump 1 146 0.0 0.0 -es 01_solar 1 147 1.0 0.0 -es 02_wind_on 1 147 1.0 0.0 -es 03_wind_off 1 147 1.0 0.0 -es 04_res 1 147 1.0 0.0 -es 05_nuclear 1 147 1.0 0.0 -es 06_coal 1 147 1.0 0.0 -es 07_gas 1 147 1.0 0.0 -es 08_non-res 1 147 1.0 0.0 +es 01_solar 1 147 0.0 1.0 +es 02_wind_on 1 147 0.0 1.0 +es 03_wind_off 1 147 0.0 1.0 +es 04_res 1 147 0.0 1.0 +es 05_nuclear 1 147 0.0 1.0 +es 06_coal 1 147 0.0 1.0 +es 07_gas 1 147 0.0 1.0 +es 08_non-res 1 147 0.0 1.0 es 09_hydro_pump 1 147 0.0 0.0 -es 01_solar 1 148 1.0 0.0 -es 02_wind_on 1 148 1.0 0.0 -es 03_wind_off 1 148 1.0 0.0 -es 04_res 1 148 1.0 0.0 -es 05_nuclear 1 148 1.0 0.0 -es 06_coal 1 148 1.0 0.0 -es 07_gas 1 148 1.0 0.0 -es 08_non-res 1 148 1.0 0.0 +es 01_solar 1 148 0.0 1.0 +es 02_wind_on 1 148 0.0 1.0 +es 03_wind_off 1 148 0.0 1.0 +es 04_res 1 148 0.0 1.0 +es 05_nuclear 1 148 0.0 1.0 +es 06_coal 1 148 0.0 1.0 +es 07_gas 1 148 0.0 1.0 +es 08_non-res 1 148 0.0 1.0 es 09_hydro_pump 1 148 0.0 0.0 -es 01_solar 1 149 1.0 0.0 -es 02_wind_on 1 149 1.0 0.0 -es 03_wind_off 1 149 1.0 0.0 -es 04_res 1 149 1.0 0.0 -es 05_nuclear 1 149 1.0 0.0 -es 06_coal 1 149 1.0 0.0 -es 07_gas 1 149 1.0 0.0 -es 08_non-res 1 149 1.0 0.0 +es 01_solar 1 149 0.0 1.0 +es 02_wind_on 1 149 0.0 1.0 +es 03_wind_off 1 149 0.0 1.0 +es 04_res 1 149 0.0 1.0 +es 05_nuclear 1 149 0.0 1.0 +es 06_coal 1 149 0.0 1.0 +es 07_gas 1 149 0.0 1.0 +es 08_non-res 1 149 0.0 1.0 es 09_hydro_pump 1 149 0.0 0.0 -es 01_solar 1 150 1.0 0.0 -es 02_wind_on 1 150 1.0 0.0 -es 03_wind_off 1 150 1.0 0.0 -es 04_res 1 150 1.0 0.0 -es 05_nuclear 1 150 1.0 0.0 -es 06_coal 1 150 1.0 0.0 -es 07_gas 1 150 1.0 0.0 -es 08_non-res 1 150 1.0 0.0 +es 01_solar 1 150 0.0 1.0 +es 02_wind_on 1 150 0.0 1.0 +es 03_wind_off 1 150 0.0 1.0 +es 04_res 1 150 0.0 1.0 +es 05_nuclear 1 150 0.0 1.0 +es 06_coal 1 150 0.0 1.0 +es 07_gas 1 150 0.0 1.0 +es 08_non-res 1 150 0.0 1.0 es 09_hydro_pump 1 150 0.0 0.0 -es 01_solar 1 151 1.0 0.0 -es 02_wind_on 1 151 1.0 0.0 -es 03_wind_off 1 151 1.0 0.0 -es 04_res 1 151 1.0 0.0 -es 05_nuclear 1 151 1.0 0.0 -es 06_coal 1 151 1.0 0.0 -es 07_gas 1 151 1.0 0.0 -es 08_non-res 1 151 1.0 0.0 +es 01_solar 1 151 0.0 1.0 +es 02_wind_on 1 151 0.0 1.0 +es 03_wind_off 1 151 0.0 1.0 +es 04_res 1 151 0.0 1.0 +es 05_nuclear 1 151 0.0 1.0 +es 06_coal 1 151 0.0 1.0 +es 07_gas 1 151 0.0 1.0 +es 08_non-res 1 151 0.0 1.0 es 09_hydro_pump 1 151 0.0 0.0 -es 01_solar 1 152 1.0 0.0 -es 02_wind_on 1 152 1.0 0.0 -es 03_wind_off 1 152 1.0 0.0 -es 04_res 1 152 1.0 0.0 -es 05_nuclear 1 152 1.0 0.0 -es 06_coal 1 152 1.0 0.0 -es 07_gas 1 152 1.0 0.0 -es 08_non-res 1 152 1.0 0.0 +es 01_solar 1 152 0.0 1.0 +es 02_wind_on 1 152 0.0 1.0 +es 03_wind_off 1 152 0.0 1.0 +es 04_res 1 152 0.0 1.0 +es 05_nuclear 1 152 0.0 1.0 +es 06_coal 1 152 0.0 1.0 +es 07_gas 1 152 0.0 1.0 +es 08_non-res 1 152 0.0 1.0 es 09_hydro_pump 1 152 0.0 0.0 -es 01_solar 1 153 1.0 0.0 -es 02_wind_on 1 153 1.0 0.0 -es 03_wind_off 1 153 1.0 0.0 -es 04_res 1 153 1.0 0.0 -es 05_nuclear 1 153 1.0 0.0 -es 06_coal 1 153 1.0 0.0 -es 07_gas 1 153 1.0 0.0 -es 08_non-res 1 153 1.0 0.0 +es 01_solar 1 153 0.0 1.0 +es 02_wind_on 1 153 0.0 1.0 +es 03_wind_off 1 153 0.0 1.0 +es 04_res 1 153 0.0 1.0 +es 05_nuclear 1 153 0.0 1.0 +es 06_coal 1 153 0.0 1.0 +es 07_gas 1 153 0.0 1.0 +es 08_non-res 1 153 0.0 1.0 es 09_hydro_pump 1 153 0.0 0.0 -es 01_solar 1 154 1.0 0.0 -es 02_wind_on 1 154 1.0 0.0 -es 03_wind_off 1 154 1.0 0.0 -es 04_res 1 154 1.0 0.0 -es 05_nuclear 1 154 1.0 0.0 -es 06_coal 1 154 1.0 0.0 -es 07_gas 1 154 1.0 0.0 -es 08_non-res 1 154 1.0 0.0 +es 01_solar 1 154 0.0 1.0 +es 02_wind_on 1 154 0.0 1.0 +es 03_wind_off 1 154 0.0 1.0 +es 04_res 1 154 0.0 1.0 +es 05_nuclear 1 154 0.0 1.0 +es 06_coal 1 154 0.0 1.0 +es 07_gas 1 154 0.0 1.0 +es 08_non-res 1 154 0.0 1.0 es 09_hydro_pump 1 154 0.0 0.0 -es 01_solar 1 155 1.0 0.0 -es 02_wind_on 1 155 1.0 0.0 -es 03_wind_off 1 155 1.0 0.0 -es 04_res 1 155 1.0 0.0 -es 05_nuclear 1 155 1.0 0.0 -es 06_coal 1 155 1.0 0.0 -es 07_gas 1 155 1.0 0.0 -es 08_non-res 1 155 1.0 0.0 +es 01_solar 1 155 0.0 1.0 +es 02_wind_on 1 155 0.0 1.0 +es 03_wind_off 1 155 0.0 1.0 +es 04_res 1 155 0.0 1.0 +es 05_nuclear 1 155 0.0 1.0 +es 06_coal 1 155 0.0 1.0 +es 07_gas 1 155 0.0 1.0 +es 08_non-res 1 155 0.0 1.0 es 09_hydro_pump 1 155 0.0 0.0 -es 01_solar 1 156 1.0 0.0 -es 02_wind_on 1 156 1.0 0.0 -es 03_wind_off 1 156 1.0 0.0 -es 04_res 1 156 1.0 0.0 -es 05_nuclear 1 156 1.0 0.0 -es 06_coal 1 156 1.0 0.0 -es 07_gas 1 156 1.0 0.0 -es 08_non-res 1 156 1.0 0.0 +es 01_solar 1 156 0.0 1.0 +es 02_wind_on 1 156 0.0 1.0 +es 03_wind_off 1 156 0.0 1.0 +es 04_res 1 156 0.0 1.0 +es 05_nuclear 1 156 0.0 1.0 +es 06_coal 1 156 0.0 1.0 +es 07_gas 1 156 0.0 1.0 +es 08_non-res 1 156 0.0 1.0 es 09_hydro_pump 1 156 0.0 0.0 -es 01_solar 1 157 1.0 0.0 -es 02_wind_on 1 157 1.0 0.0 -es 03_wind_off 1 157 1.0 0.0 -es 04_res 1 157 1.0 0.0 -es 05_nuclear 1 157 1.0 0.0 -es 06_coal 1 157 1.0 0.0 -es 07_gas 1 157 1.0 0.0 -es 08_non-res 1 157 1.0 0.0 +es 01_solar 1 157 0.0 1.0 +es 02_wind_on 1 157 0.0 1.0 +es 03_wind_off 1 157 0.0 1.0 +es 04_res 1 157 0.0 1.0 +es 05_nuclear 1 157 0.0 1.0 +es 06_coal 1 157 0.0 1.0 +es 07_gas 1 157 0.0 1.0 +es 08_non-res 1 157 0.0 1.0 es 09_hydro_pump 1 157 0.0 0.0 -es 01_solar 1 158 1.0 0.0 -es 02_wind_on 1 158 1.0 0.0 -es 03_wind_off 1 158 1.0 0.0 -es 04_res 1 158 1.0 0.0 -es 05_nuclear 1 158 1.0 0.0 -es 06_coal 1 158 1.0 0.0 -es 07_gas 1 158 1.0 0.0 -es 08_non-res 1 158 1.0 0.0 +es 01_solar 1 158 0.0 1.0 +es 02_wind_on 1 158 0.0 1.0 +es 03_wind_off 1 158 0.0 1.0 +es 04_res 1 158 0.0 1.0 +es 05_nuclear 1 158 0.0 1.0 +es 06_coal 1 158 0.0 1.0 +es 07_gas 1 158 0.0 1.0 +es 08_non-res 1 158 0.0 1.0 es 09_hydro_pump 1 158 0.0 0.0 -es 01_solar 1 159 1.0 0.0 -es 02_wind_on 1 159 1.0 0.0 -es 03_wind_off 1 159 1.0 0.0 -es 04_res 1 159 1.0 0.0 -es 05_nuclear 1 159 1.0 0.0 -es 06_coal 1 159 1.0 0.0 -es 07_gas 1 159 1.0 0.0 -es 08_non-res 1 159 1.0 0.0 +es 01_solar 1 159 0.0 1.0 +es 02_wind_on 1 159 0.0 1.0 +es 03_wind_off 1 159 0.0 1.0 +es 04_res 1 159 0.0 1.0 +es 05_nuclear 1 159 0.0 1.0 +es 06_coal 1 159 0.0 1.0 +es 07_gas 1 159 0.0 1.0 +es 08_non-res 1 159 0.0 1.0 es 09_hydro_pump 1 159 0.0 0.0 -es 01_solar 1 160 1.0 0.0 -es 02_wind_on 1 160 1.0 0.0 -es 03_wind_off 1 160 1.0 0.0 -es 04_res 1 160 1.0 0.0 -es 05_nuclear 1 160 1.0 0.0 -es 06_coal 1 160 1.0 0.0 -es 07_gas 1 160 1.0 0.0 -es 08_non-res 1 160 1.0 0.0 +es 01_solar 1 160 0.0 1.0 +es 02_wind_on 1 160 0.0 1.0 +es 03_wind_off 1 160 0.0 1.0 +es 04_res 1 160 0.0 1.0 +es 05_nuclear 1 160 0.0 1.0 +es 06_coal 1 160 0.0 1.0 +es 07_gas 1 160 0.0 1.0 +es 08_non-res 1 160 0.0 1.0 es 09_hydro_pump 1 160 0.0 0.0 -es 01_solar 1 161 1.0 0.0 -es 02_wind_on 1 161 1.0 0.0 -es 03_wind_off 1 161 1.0 0.0 -es 04_res 1 161 1.0 0.0 -es 05_nuclear 1 161 1.0 0.0 -es 06_coal 1 161 1.0 0.0 -es 07_gas 1 161 1.0 0.0 -es 08_non-res 1 161 1.0 0.0 +es 01_solar 1 161 0.0 1.0 +es 02_wind_on 1 161 0.0 1.0 +es 03_wind_off 1 161 0.0 1.0 +es 04_res 1 161 0.0 1.0 +es 05_nuclear 1 161 0.0 1.0 +es 06_coal 1 161 0.0 1.0 +es 07_gas 1 161 0.0 1.0 +es 08_non-res 1 161 0.0 1.0 es 09_hydro_pump 1 161 0.0 0.0 -es 01_solar 1 162 1.0 0.0 -es 02_wind_on 1 162 1.0 0.0 -es 03_wind_off 1 162 1.0 0.0 -es 04_res 1 162 1.0 0.0 -es 05_nuclear 1 162 1.0 0.0 -es 06_coal 1 162 1.0 0.0 -es 07_gas 1 162 1.0 0.0 -es 08_non-res 1 162 1.0 0.0 -es 09_hydro_pump 1 162 1.0 0.0 -es 01_solar 1 163 1.0 0.0 -es 02_wind_on 1 163 1.0 0.0 -es 03_wind_off 1 163 1.0 0.0 -es 04_res 1 163 1.0 0.0 -es 05_nuclear 1 163 1.0 0.0 -es 06_coal 1 163 1.0 0.0 -es 07_gas 1 163 1.0 0.0 -es 08_non-res 1 163 1.0 0.0 -es 09_hydro_pump 1 163 1.0 0.0 -es 01_solar 1 164 1.0 0.0 -es 02_wind_on 1 164 1.0 0.0 -es 03_wind_off 1 164 1.0 0.0 -es 04_res 1 164 1.0 0.0 -es 05_nuclear 1 164 1.0 0.0 -es 06_coal 1 164 1.0 0.0 -es 07_gas 1 164 1.0 0.0 -es 08_non-res 1 164 1.0 0.0 -es 09_hydro_pump 1 164 1.0 0.0 -es 01_solar 1 165 1.0 0.0 -es 02_wind_on 1 165 1.0 0.0 -es 03_wind_off 1 165 1.0 0.0 -es 04_res 1 165 1.0 0.0 -es 05_nuclear 1 165 1.0 0.0 -es 06_coal 1 165 1.0 0.0 -es 07_gas 1 165 1.0 0.0 -es 08_non-res 1 165 1.0 0.0 -es 09_hydro_pump 1 165 1.0 0.0 -es 01_solar 1 166 1.0 0.0 -es 02_wind_on 1 166 1.0 0.0 -es 03_wind_off 1 166 1.0 0.0 -es 04_res 1 166 1.0 0.0 -es 05_nuclear 1 166 1.0 0.0 -es 06_coal 1 166 1.0 0.0 -es 07_gas 1 166 1.0 0.0 -es 08_non-res 1 166 1.0 0.0 -es 09_hydro_pump 1 166 1.0 0.0 -es 01_solar 1 167 1.0 0.0 -es 02_wind_on 1 167 1.0 0.0 -es 03_wind_off 1 167 1.0 0.0 -es 04_res 1 167 1.0 0.0 -es 05_nuclear 1 167 1.0 0.0 -es 06_coal 1 167 1.0 0.0 -es 07_gas 1 167 1.0 0.0 -es 08_non-res 1 167 1.0 0.0 -es 09_hydro_pump 1 167 1.0 0.0 -es 01_solar 1 168 1.0 0.0 -es 02_wind_on 1 168 1.0 0.0 -es 03_wind_off 1 168 1.0 0.0 -es 04_res 1 168 1.0 0.0 -es 05_nuclear 1 168 1.0 0.0 -es 06_coal 1 168 1.0 0.0 -es 07_gas 1 168 1.0 0.0 -es 08_non-res 1 168 1.0 0.0 -es 09_hydro_pump 1 168 1.0 0.0 +es 01_solar 1 162 0.0 1.0 +es 02_wind_on 1 162 0.0 1.0 +es 03_wind_off 1 162 0.0 1.0 +es 04_res 1 162 0.0 1.0 +es 05_nuclear 1 162 0.0 1.0 +es 06_coal 1 162 0.0 1.0 +es 07_gas 1 162 0.0 1.0 +es 08_non-res 1 162 0.0 1.0 +es 09_hydro_pump 1 162 0.0 1.0 +es 01_solar 1 163 0.0 1.0 +es 02_wind_on 1 163 0.0 1.0 +es 03_wind_off 1 163 0.0 1.0 +es 04_res 1 163 0.0 1.0 +es 05_nuclear 1 163 0.0 1.0 +es 06_coal 1 163 0.0 1.0 +es 07_gas 1 163 0.0 1.0 +es 08_non-res 1 163 0.0 1.0 +es 09_hydro_pump 1 163 0.0 1.0 +es 01_solar 1 164 0.0 1.0 +es 02_wind_on 1 164 0.0 1.0 +es 03_wind_off 1 164 0.0 1.0 +es 04_res 1 164 0.0 1.0 +es 05_nuclear 1 164 0.0 1.0 +es 06_coal 1 164 0.0 1.0 +es 07_gas 1 164 0.0 1.0 +es 08_non-res 1 164 0.0 1.0 +es 09_hydro_pump 1 164 0.0 1.0 +es 01_solar 1 165 0.0 1.0 +es 02_wind_on 1 165 0.0 1.0 +es 03_wind_off 1 165 0.0 1.0 +es 04_res 1 165 0.0 1.0 +es 05_nuclear 1 165 0.0 1.0 +es 06_coal 1 165 0.0 1.0 +es 07_gas 1 165 0.0 1.0 +es 08_non-res 1 165 0.0 1.0 +es 09_hydro_pump 1 165 0.0 1.0 +es 01_solar 1 166 0.0 1.0 +es 02_wind_on 1 166 0.0 1.0 +es 03_wind_off 1 166 0.0 1.0 +es 04_res 1 166 0.0 1.0 +es 05_nuclear 1 166 0.0 1.0 +es 06_coal 1 166 0.0 1.0 +es 07_gas 1 166 0.0 1.0 +es 08_non-res 1 166 0.0 1.0 +es 09_hydro_pump 1 166 0.0 1.0 +es 01_solar 1 167 0.0 1.0 +es 02_wind_on 1 167 0.0 1.0 +es 03_wind_off 1 167 0.0 1.0 +es 04_res 1 167 0.0 1.0 +es 05_nuclear 1 167 0.0 1.0 +es 06_coal 1 167 0.0 1.0 +es 07_gas 1 167 0.0 1.0 +es 08_non-res 1 167 0.0 1.0 +es 09_hydro_pump 1 167 0.0 1.0 +es 01_solar 1 168 0.0 1.0 +es 02_wind_on 1 168 0.0 1.0 +es 03_wind_off 1 168 0.0 1.0 +es 04_res 1 168 0.0 1.0 +es 05_nuclear 1 168 0.0 1.0 +es 06_coal 1 168 0.0 1.0 +es 07_gas 1 168 0.0 1.0 +es 08_non-res 1 168 0.0 1.0 +es 09_hydro_pump 1 168 0.0 1.0 es 01_solar 1 169 0.0 0.0 es 02_wind_on 1 169 0.0 0.0 es 03_wind_off 1 169 0.0 0.0 @@ -4544,7 +4544,7 @@ es 06_coal 1 169 0.0 0.0 es 07_gas 1 169 0.0 0.0 es 08_non-res 1 169 0.0 0.0 es 09_hydro_pump 1 169 0.0 0.0 -es 01_solar 1 170 1.0 0.0 +es 01_solar 1 170 0.0 1.0 es 02_wind_on 1 170 0.0 0.0 es 03_wind_off 1 170 0.0 0.0 es 04_res 1 170 0.0 0.0 @@ -4553,7 +4553,7 @@ es 06_coal 1 170 0.0 0.0 es 07_gas 1 170 0.0 0.0 es 08_non-res 1 170 0.0 0.0 es 09_hydro_pump 1 170 0.0 0.0 -es 01_solar 1 171 1.0 0.0 +es 01_solar 1 171 0.0 1.0 es 02_wind_on 1 171 0.0 0.0 es 03_wind_off 1 171 0.0 0.0 es 04_res 1 171 0.0 0.0 @@ -4562,7 +4562,7 @@ es 06_coal 1 171 0.0 0.0 es 07_gas 1 171 0.0 0.0 es 08_non-res 1 171 0.0 0.0 es 09_hydro_pump 1 171 0.0 0.0 -es 01_solar 1 172 1.0 0.0 +es 01_solar 1 172 0.0 1.0 es 02_wind_on 1 172 0.0 0.0 es 03_wind_off 1 172 0.0 0.0 es 04_res 1 172 0.0 0.0 @@ -4571,7 +4571,7 @@ es 06_coal 1 172 0.0 0.0 es 07_gas 1 172 0.0 0.0 es 08_non-res 1 172 0.0 0.0 es 09_hydro_pump 1 172 0.0 0.0 -es 01_solar 1 173 1.0 0.0 +es 01_solar 1 173 0.0 1.0 es 02_wind_on 1 173 0.0 0.0 es 03_wind_off 1 173 0.0 0.0 es 04_res 1 173 0.0 0.0 @@ -4580,7 +4580,7 @@ es 06_coal 1 173 0.0 0.0 es 07_gas 1 173 0.0 0.0 es 08_non-res 1 173 0.0 0.0 es 09_hydro_pump 1 173 0.0 0.0 -es 01_solar 1 174 1.0 0.0 +es 01_solar 1 174 0.0 1.0 es 02_wind_on 1 174 0.0 0.0 es 03_wind_off 1 174 0.0 0.0 es 04_res 1 174 0.0 0.0 @@ -4589,7 +4589,7 @@ es 06_coal 1 174 0.0 0.0 es 07_gas 1 174 0.0 0.0 es 08_non-res 1 174 0.0 0.0 es 09_hydro_pump 1 174 0.0 0.0 -es 01_solar 1 175 1.0 0.0 +es 01_solar 1 175 0.0 1.0 es 02_wind_on 1 175 0.0 0.0 es 03_wind_off 1 175 0.0 0.0 es 04_res 1 175 0.0 0.0 @@ -4598,7 +4598,7 @@ es 06_coal 1 175 0.0 0.0 es 07_gas 1 175 0.0 0.0 es 08_non-res 1 175 0.0 0.0 es 09_hydro_pump 1 175 0.0 0.0 -es 01_solar 1 176 1.0 0.0 +es 01_solar 1 176 0.0 1.0 es 02_wind_on 1 176 0.0 0.0 es 03_wind_off 1 176 0.0 0.0 es 04_res 1 176 0.0 0.0 @@ -4607,7 +4607,7 @@ es 06_coal 1 176 0.0 0.0 es 07_gas 1 176 0.0 0.0 es 08_non-res 1 176 0.0 0.0 es 09_hydro_pump 1 176 0.0 0.0 -es 01_solar 1 177 1.0 0.0 +es 01_solar 1 177 0.0 1.0 es 02_wind_on 1 177 0.0 0.0 es 03_wind_off 1 177 0.0 0.0 es 04_res 1 177 0.0 0.0 @@ -4616,7 +4616,7 @@ es 06_coal 1 177 0.0 0.0 es 07_gas 1 177 0.0 0.0 es 08_non-res 1 177 0.0 0.0 es 09_hydro_pump 1 177 0.0 0.0 -es 01_solar 1 178 1.0 0.0 +es 01_solar 1 178 0.0 1.0 es 02_wind_on 1 178 0.0 0.0 es 03_wind_off 1 178 0.0 0.0 es 04_res 1 178 0.0 0.0 @@ -4625,7 +4625,7 @@ es 06_coal 1 178 0.0 0.0 es 07_gas 1 178 0.0 0.0 es 08_non-res 1 178 0.0 0.0 es 09_hydro_pump 1 178 0.0 0.0 -es 01_solar 1 179 1.0 0.0 +es 01_solar 1 179 0.0 1.0 es 02_wind_on 1 179 0.0 0.0 es 03_wind_off 1 179 0.0 0.0 es 04_res 1 179 0.0 0.0 @@ -4634,7 +4634,7 @@ es 06_coal 1 179 0.0 0.0 es 07_gas 1 179 0.0 0.0 es 08_non-res 1 179 0.0 0.0 es 09_hydro_pump 1 179 0.0 0.0 -es 01_solar 1 180 1.0 0.0 +es 01_solar 1 180 0.0 1.0 es 02_wind_on 1 180 0.0 0.0 es 03_wind_off 1 180 0.0 0.0 es 04_res 1 180 0.0 0.0 @@ -4643,7 +4643,7 @@ es 06_coal 1 180 0.0 0.0 es 07_gas 1 180 0.0 0.0 es 08_non-res 1 180 0.0 0.0 es 09_hydro_pump 1 180 0.0 0.0 -es 01_solar 1 181 1.0 0.0 +es 01_solar 1 181 0.0 1.0 es 02_wind_on 1 181 0.0 0.0 es 03_wind_off 1 181 0.0 0.0 es 04_res 1 181 0.0 0.0 @@ -4652,7 +4652,7 @@ es 06_coal 1 181 0.0 0.0 es 07_gas 1 181 0.0 0.0 es 08_non-res 1 181 0.0 0.0 es 09_hydro_pump 1 181 0.0 0.0 -es 01_solar 1 182 1.0 0.0 +es 01_solar 1 182 0.0 1.0 es 02_wind_on 1 182 0.0 0.0 es 03_wind_off 1 182 0.0 0.0 es 04_res 1 182 0.0 0.0 @@ -4661,7 +4661,7 @@ es 06_coal 1 182 0.0 0.0 es 07_gas 1 182 0.0 0.0 es 08_non-res 1 182 0.0 0.0 es 09_hydro_pump 1 182 0.0 0.0 -es 01_solar 1 183 1.0 0.0 +es 01_solar 1 183 0.0 1.0 es 02_wind_on 1 183 0.0 0.0 es 03_wind_off 1 183 0.0 0.0 es 04_res 1 183 0.0 0.0 @@ -4670,7 +4670,7 @@ es 06_coal 1 183 0.0 0.0 es 07_gas 1 183 0.0 0.0 es 08_non-res 1 183 0.0 0.0 es 09_hydro_pump 1 183 0.0 0.0 -es 01_solar 1 184 1.0 0.0 +es 01_solar 1 184 0.0 1.0 es 02_wind_on 1 184 0.0 0.0 es 03_wind_off 1 184 0.0 0.0 es 04_res 1 184 0.0 0.0 @@ -4679,7 +4679,7 @@ es 06_coal 1 184 0.0 0.0 es 07_gas 1 184 0.0 0.0 es 08_non-res 1 184 0.0 0.0 es 09_hydro_pump 1 184 0.0 0.0 -es 01_solar 1 185 1.0 0.0 +es 01_solar 1 185 0.0 1.0 es 02_wind_on 1 185 0.0 0.0 es 03_wind_off 1 185 0.0 0.0 es 04_res 1 185 0.0 0.0 @@ -4688,7 +4688,7 @@ es 06_coal 1 185 0.0 0.0 es 07_gas 1 185 0.0 0.0 es 08_non-res 1 185 0.0 0.0 es 09_hydro_pump 1 185 0.0 0.0 -es 01_solar 1 186 1.0 0.0 +es 01_solar 1 186 0.0 1.0 es 02_wind_on 1 186 0.0 0.0 es 03_wind_off 1 186 0.0 0.0 es 04_res 1 186 0.0 0.0 @@ -4697,7 +4697,7 @@ es 06_coal 1 186 0.0 0.0 es 07_gas 1 186 0.0 0.0 es 08_non-res 1 186 0.0 0.0 es 09_hydro_pump 1 186 0.0 0.0 -es 01_solar 1 187 1.0 0.0 +es 01_solar 1 187 0.0 1.0 es 02_wind_on 1 187 0.0 0.0 es 03_wind_off 1 187 0.0 0.0 es 04_res 1 187 0.0 0.0 @@ -4706,7 +4706,7 @@ es 06_coal 1 187 0.0 0.0 es 07_gas 1 187 0.0 0.0 es 08_non-res 1 187 0.0 0.0 es 09_hydro_pump 1 187 0.0 0.0 -es 01_solar 1 188 1.0 0.0 +es 01_solar 1 188 0.0 1.0 es 02_wind_on 1 188 0.0 0.0 es 03_wind_off 1 188 0.0 0.0 es 04_res 1 188 0.0 0.0 @@ -4715,7 +4715,7 @@ es 06_coal 1 188 0.0 0.0 es 07_gas 1 188 0.0 0.0 es 08_non-res 1 188 0.0 0.0 es 09_hydro_pump 1 188 0.0 0.0 -es 01_solar 1 189 1.0 0.0 +es 01_solar 1 189 0.0 1.0 es 02_wind_on 1 189 0.0 0.0 es 03_wind_off 1 189 0.0 0.0 es 04_res 1 189 0.0 0.0 @@ -4724,8 +4724,8 @@ es 06_coal 1 189 0.0 0.0 es 07_gas 1 189 0.0 0.0 es 08_non-res 1 189 0.0 0.0 es 09_hydro_pump 1 189 0.0 0.0 -es 01_solar 1 190 1.0 0.0 -es 02_wind_on 1 190 1.0 0.0 +es 01_solar 1 190 0.0 1.0 +es 02_wind_on 1 190 0.0 1.0 es 03_wind_off 1 190 0.0 0.0 es 04_res 1 190 0.0 0.0 es 05_nuclear 1 190 0.0 0.0 @@ -4733,8 +4733,8 @@ es 06_coal 1 190 0.0 0.0 es 07_gas 1 190 0.0 0.0 es 08_non-res 1 190 0.0 0.0 es 09_hydro_pump 1 190 0.0 0.0 -es 01_solar 1 191 1.0 0.0 -es 02_wind_on 1 191 1.0 0.0 +es 01_solar 1 191 0.0 1.0 +es 02_wind_on 1 191 0.0 1.0 es 03_wind_off 1 191 0.0 0.0 es 04_res 1 191 0.0 0.0 es 05_nuclear 1 191 0.0 0.0 @@ -4742,8 +4742,8 @@ es 06_coal 1 191 0.0 0.0 es 07_gas 1 191 0.0 0.0 es 08_non-res 1 191 0.0 0.0 es 09_hydro_pump 1 191 0.0 0.0 -es 01_solar 1 192 1.0 0.0 -es 02_wind_on 1 192 1.0 0.0 +es 01_solar 1 192 0.0 1.0 +es 02_wind_on 1 192 0.0 1.0 es 03_wind_off 1 192 0.0 0.0 es 04_res 1 192 0.0 0.0 es 05_nuclear 1 192 0.0 0.0 @@ -4751,8 +4751,8 @@ es 06_coal 1 192 0.0 0.0 es 07_gas 1 192 0.0 0.0 es 08_non-res 1 192 0.0 0.0 es 09_hydro_pump 1 192 0.0 0.0 -es 01_solar 1 193 1.0 0.0 -es 02_wind_on 1 193 1.0 0.0 +es 01_solar 1 193 0.0 1.0 +es 02_wind_on 1 193 0.0 1.0 es 03_wind_off 1 193 0.0 0.0 es 04_res 1 193 0.0 0.0 es 05_nuclear 1 193 0.0 0.0 @@ -4760,8 +4760,8 @@ es 06_coal 1 193 0.0 0.0 es 07_gas 1 193 0.0 0.0 es 08_non-res 1 193 0.0 0.0 es 09_hydro_pump 1 193 0.0 0.0 -es 01_solar 1 194 1.0 0.0 -es 02_wind_on 1 194 1.0 0.0 +es 01_solar 1 194 0.0 1.0 +es 02_wind_on 1 194 0.0 1.0 es 03_wind_off 1 194 0.0 0.0 es 04_res 1 194 0.0 0.0 es 05_nuclear 1 194 0.0 0.0 @@ -4769,8 +4769,8 @@ es 06_coal 1 194 0.0 0.0 es 07_gas 1 194 0.0 0.0 es 08_non-res 1 194 0.0 0.0 es 09_hydro_pump 1 194 0.0 0.0 -es 01_solar 1 195 1.0 0.0 -es 02_wind_on 1 195 1.0 0.0 +es 01_solar 1 195 0.0 1.0 +es 02_wind_on 1 195 0.0 1.0 es 03_wind_off 1 195 0.0 0.0 es 04_res 1 195 0.0 0.0 es 05_nuclear 1 195 0.0 0.0 @@ -4778,8 +4778,8 @@ es 06_coal 1 195 0.0 0.0 es 07_gas 1 195 0.0 0.0 es 08_non-res 1 195 0.0 0.0 es 09_hydro_pump 1 195 0.0 0.0 -es 01_solar 1 196 1.0 0.0 -es 02_wind_on 1 196 1.0 0.0 +es 01_solar 1 196 0.0 1.0 +es 02_wind_on 1 196 0.0 1.0 es 03_wind_off 1 196 0.0 0.0 es 04_res 1 196 0.0 0.0 es 05_nuclear 1 196 0.0 0.0 @@ -4787,8 +4787,8 @@ es 06_coal 1 196 0.0 0.0 es 07_gas 1 196 0.0 0.0 es 08_non-res 1 196 0.0 0.0 es 09_hydro_pump 1 196 0.0 0.0 -es 01_solar 1 197 1.0 0.0 -es 02_wind_on 1 197 1.0 0.0 +es 01_solar 1 197 0.0 1.0 +es 02_wind_on 1 197 0.0 1.0 es 03_wind_off 1 197 0.0 0.0 es 04_res 1 197 0.0 0.0 es 05_nuclear 1 197 0.0 0.0 @@ -4796,8 +4796,8 @@ es 06_coal 1 197 0.0 0.0 es 07_gas 1 197 0.0 0.0 es 08_non-res 1 197 0.0 0.0 es 09_hydro_pump 1 197 0.0 0.0 -es 01_solar 1 198 1.0 0.0 -es 02_wind_on 1 198 1.0 0.0 +es 01_solar 1 198 0.0 1.0 +es 02_wind_on 1 198 0.0 1.0 es 03_wind_off 1 198 0.0 0.0 es 04_res 1 198 0.0 0.0 es 05_nuclear 1 198 0.0 0.0 @@ -4805,8 +4805,8 @@ es 06_coal 1 198 0.0 0.0 es 07_gas 1 198 0.0 0.0 es 08_non-res 1 198 0.0 0.0 es 09_hydro_pump 1 198 0.0 0.0 -es 01_solar 1 199 1.0 0.0 -es 02_wind_on 1 199 1.0 0.0 +es 01_solar 1 199 0.0 1.0 +es 02_wind_on 1 199 0.0 1.0 es 03_wind_off 1 199 0.0 0.0 es 04_res 1 199 0.0 0.0 es 05_nuclear 1 199 0.0 0.0 @@ -4814,8 +4814,8 @@ es 06_coal 1 199 0.0 0.0 es 07_gas 1 199 0.0 0.0 es 08_non-res 1 199 0.0 0.0 es 09_hydro_pump 1 199 0.0 0.0 -es 01_solar 1 200 1.0 0.0 -es 02_wind_on 1 200 1.0 0.0 +es 01_solar 1 200 0.0 1.0 +es 02_wind_on 1 200 0.0 1.0 es 03_wind_off 1 200 0.0 0.0 es 04_res 1 200 0.0 0.0 es 05_nuclear 1 200 0.0 0.0 @@ -4823,8 +4823,8 @@ es 06_coal 1 200 0.0 0.0 es 07_gas 1 200 0.0 0.0 es 08_non-res 1 200 0.0 0.0 es 09_hydro_pump 1 200 0.0 0.0 -es 01_solar 1 201 1.0 0.0 -es 02_wind_on 1 201 1.0 0.0 +es 01_solar 1 201 0.0 1.0 +es 02_wind_on 1 201 0.0 1.0 es 03_wind_off 1 201 0.0 0.0 es 04_res 1 201 0.0 0.0 es 05_nuclear 1 201 0.0 0.0 @@ -4832,8 +4832,8 @@ es 06_coal 1 201 0.0 0.0 es 07_gas 1 201 0.0 0.0 es 08_non-res 1 201 0.0 0.0 es 09_hydro_pump 1 201 0.0 0.0 -es 01_solar 1 202 1.0 0.0 -es 02_wind_on 1 202 1.0 0.0 +es 01_solar 1 202 0.0 1.0 +es 02_wind_on 1 202 0.0 1.0 es 03_wind_off 1 202 0.0 0.0 es 04_res 1 202 0.0 0.0 es 05_nuclear 1 202 0.0 0.0 @@ -4841,8 +4841,8 @@ es 06_coal 1 202 0.0 0.0 es 07_gas 1 202 0.0 0.0 es 08_non-res 1 202 0.0 0.0 es 09_hydro_pump 1 202 0.0 0.0 -es 01_solar 1 203 1.0 0.0 -es 02_wind_on 1 203 1.0 0.0 +es 01_solar 1 203 0.0 1.0 +es 02_wind_on 1 203 0.0 1.0 es 03_wind_off 1 203 0.0 0.0 es 04_res 1 203 0.0 0.0 es 05_nuclear 1 203 0.0 0.0 @@ -4850,8 +4850,8 @@ es 06_coal 1 203 0.0 0.0 es 07_gas 1 203 0.0 0.0 es 08_non-res 1 203 0.0 0.0 es 09_hydro_pump 1 203 0.0 0.0 -es 01_solar 1 204 1.0 0.0 -es 02_wind_on 1 204 1.0 0.0 +es 01_solar 1 204 0.0 1.0 +es 02_wind_on 1 204 0.0 1.0 es 03_wind_off 1 204 0.0 0.0 es 04_res 1 204 0.0 0.0 es 05_nuclear 1 204 0.0 0.0 @@ -4859,8 +4859,8 @@ es 06_coal 1 204 0.0 0.0 es 07_gas 1 204 0.0 0.0 es 08_non-res 1 204 0.0 0.0 es 09_hydro_pump 1 204 0.0 0.0 -es 01_solar 1 205 1.0 0.0 -es 02_wind_on 1 205 1.0 0.0 +es 01_solar 1 205 0.0 1.0 +es 02_wind_on 1 205 0.0 1.0 es 03_wind_off 1 205 0.0 0.0 es 04_res 1 205 0.0 0.0 es 05_nuclear 1 205 0.0 0.0 @@ -4868,8 +4868,8 @@ es 06_coal 1 205 0.0 0.0 es 07_gas 1 205 0.0 0.0 es 08_non-res 1 205 0.0 0.0 es 09_hydro_pump 1 205 0.0 0.0 -es 01_solar 1 206 1.0 0.0 -es 02_wind_on 1 206 1.0 0.0 +es 01_solar 1 206 0.0 1.0 +es 02_wind_on 1 206 0.0 1.0 es 03_wind_off 1 206 0.0 0.0 es 04_res 1 206 0.0 0.0 es 05_nuclear 1 206 0.0 0.0 @@ -4877,8 +4877,8 @@ es 06_coal 1 206 0.0 0.0 es 07_gas 1 206 0.0 0.0 es 08_non-res 1 206 0.0 0.0 es 09_hydro_pump 1 206 0.0 0.0 -es 01_solar 1 207 1.0 0.0 -es 02_wind_on 1 207 1.0 0.0 +es 01_solar 1 207 0.0 1.0 +es 02_wind_on 1 207 0.0 1.0 es 03_wind_off 1 207 0.0 0.0 es 04_res 1 207 0.0 0.0 es 05_nuclear 1 207 0.0 0.0 @@ -4886,8 +4886,8 @@ es 06_coal 1 207 0.0 0.0 es 07_gas 1 207 0.0 0.0 es 08_non-res 1 207 0.0 0.0 es 09_hydro_pump 1 207 0.0 0.0 -es 01_solar 1 208 1.0 0.0 -es 02_wind_on 1 208 1.0 0.0 +es 01_solar 1 208 0.0 1.0 +es 02_wind_on 1 208 0.0 1.0 es 03_wind_off 1 208 0.0 0.0 es 04_res 1 208 0.0 0.0 es 05_nuclear 1 208 0.0 0.0 @@ -4895,8 +4895,8 @@ es 06_coal 1 208 0.0 0.0 es 07_gas 1 208 0.0 0.0 es 08_non-res 1 208 0.0 0.0 es 09_hydro_pump 1 208 0.0 0.0 -es 01_solar 1 209 1.0 0.0 -es 02_wind_on 1 209 1.0 0.0 +es 01_solar 1 209 0.0 1.0 +es 02_wind_on 1 209 0.0 1.0 es 03_wind_off 1 209 0.0 0.0 es 04_res 1 209 0.0 0.0 es 05_nuclear 1 209 0.0 0.0 @@ -4904,1149 +4904,1149 @@ es 06_coal 1 209 0.0 0.0 es 07_gas 1 209 0.0 0.0 es 08_non-res 1 209 0.0 0.0 es 09_hydro_pump 1 209 0.0 0.0 -es 01_solar 1 210 1.0 0.0 -es 02_wind_on 1 210 1.0 0.0 -es 03_wind_off 1 210 1.0 0.0 +es 01_solar 1 210 0.0 1.0 +es 02_wind_on 1 210 0.0 1.0 +es 03_wind_off 1 210 0.0 1.0 es 04_res 1 210 0.0 0.0 es 05_nuclear 1 210 0.0 0.0 es 06_coal 1 210 0.0 0.0 es 07_gas 1 210 0.0 0.0 es 08_non-res 1 210 0.0 0.0 es 09_hydro_pump 1 210 0.0 0.0 -es 01_solar 1 211 1.0 0.0 -es 02_wind_on 1 211 1.0 0.0 -es 03_wind_off 1 211 1.0 0.0 +es 01_solar 1 211 0.0 1.0 +es 02_wind_on 1 211 0.0 1.0 +es 03_wind_off 1 211 0.0 1.0 es 04_res 1 211 0.0 0.0 es 05_nuclear 1 211 0.0 0.0 es 06_coal 1 211 0.0 0.0 es 07_gas 1 211 0.0 0.0 es 08_non-res 1 211 0.0 0.0 es 09_hydro_pump 1 211 0.0 0.0 -es 01_solar 1 212 1.0 0.0 -es 02_wind_on 1 212 1.0 0.0 -es 03_wind_off 1 212 1.0 0.0 +es 01_solar 1 212 0.0 1.0 +es 02_wind_on 1 212 0.0 1.0 +es 03_wind_off 1 212 0.0 1.0 es 04_res 1 212 0.0 0.0 es 05_nuclear 1 212 0.0 0.0 es 06_coal 1 212 0.0 0.0 es 07_gas 1 212 0.0 0.0 es 08_non-res 1 212 0.0 0.0 es 09_hydro_pump 1 212 0.0 0.0 -es 01_solar 1 213 1.0 0.0 -es 02_wind_on 1 213 1.0 0.0 -es 03_wind_off 1 213 1.0 0.0 +es 01_solar 1 213 0.0 1.0 +es 02_wind_on 1 213 0.0 1.0 +es 03_wind_off 1 213 0.0 1.0 es 04_res 1 213 0.0 0.0 es 05_nuclear 1 213 0.0 0.0 es 06_coal 1 213 0.0 0.0 es 07_gas 1 213 0.0 0.0 es 08_non-res 1 213 0.0 0.0 es 09_hydro_pump 1 213 0.0 0.0 -es 01_solar 1 214 1.0 0.0 -es 02_wind_on 1 214 1.0 0.0 -es 03_wind_off 1 214 1.0 0.0 +es 01_solar 1 214 0.0 1.0 +es 02_wind_on 1 214 0.0 1.0 +es 03_wind_off 1 214 0.0 1.0 es 04_res 1 214 0.0 0.0 es 05_nuclear 1 214 0.0 0.0 es 06_coal 1 214 0.0 0.0 es 07_gas 1 214 0.0 0.0 es 08_non-res 1 214 0.0 0.0 es 09_hydro_pump 1 214 0.0 0.0 -es 01_solar 1 215 1.0 0.0 -es 02_wind_on 1 215 1.0 0.0 -es 03_wind_off 1 215 1.0 0.0 +es 01_solar 1 215 0.0 1.0 +es 02_wind_on 1 215 0.0 1.0 +es 03_wind_off 1 215 0.0 1.0 es 04_res 1 215 0.0 0.0 es 05_nuclear 1 215 0.0 0.0 es 06_coal 1 215 0.0 0.0 es 07_gas 1 215 0.0 0.0 es 08_non-res 1 215 0.0 0.0 es 09_hydro_pump 1 215 0.0 0.0 -es 01_solar 1 216 1.0 0.0 -es 02_wind_on 1 216 1.0 0.0 -es 03_wind_off 1 216 1.0 0.0 +es 01_solar 1 216 0.0 1.0 +es 02_wind_on 1 216 0.0 1.0 +es 03_wind_off 1 216 0.0 1.0 es 04_res 1 216 0.0 0.0 es 05_nuclear 1 216 0.0 0.0 es 06_coal 1 216 0.0 0.0 es 07_gas 1 216 0.0 0.0 es 08_non-res 1 216 0.0 0.0 es 09_hydro_pump 1 216 0.0 0.0 -es 01_solar 1 217 1.0 0.0 -es 02_wind_on 1 217 1.0 0.0 -es 03_wind_off 1 217 1.0 0.0 +es 01_solar 1 217 0.0 1.0 +es 02_wind_on 1 217 0.0 1.0 +es 03_wind_off 1 217 0.0 1.0 es 04_res 1 217 0.0 0.0 es 05_nuclear 1 217 0.0 0.0 es 06_coal 1 217 0.0 0.0 es 07_gas 1 217 0.0 0.0 es 08_non-res 1 217 0.0 0.0 es 09_hydro_pump 1 217 0.0 0.0 -es 01_solar 1 218 1.0 0.0 -es 02_wind_on 1 218 1.0 0.0 -es 03_wind_off 1 218 1.0 0.0 +es 01_solar 1 218 0.0 1.0 +es 02_wind_on 1 218 0.0 1.0 +es 03_wind_off 1 218 0.0 1.0 es 04_res 1 218 0.0 0.0 es 05_nuclear 1 218 0.0 0.0 es 06_coal 1 218 0.0 0.0 es 07_gas 1 218 0.0 0.0 es 08_non-res 1 218 0.0 0.0 es 09_hydro_pump 1 218 0.0 0.0 -es 01_solar 1 219 1.0 0.0 -es 02_wind_on 1 219 1.0 0.0 -es 03_wind_off 1 219 1.0 0.0 +es 01_solar 1 219 0.0 1.0 +es 02_wind_on 1 219 0.0 1.0 +es 03_wind_off 1 219 0.0 1.0 es 04_res 1 219 0.0 0.0 es 05_nuclear 1 219 0.0 0.0 es 06_coal 1 219 0.0 0.0 es 07_gas 1 219 0.0 0.0 es 08_non-res 1 219 0.0 0.0 es 09_hydro_pump 1 219 0.0 0.0 -es 01_solar 1 220 1.0 0.0 -es 02_wind_on 1 220 1.0 0.0 -es 03_wind_off 1 220 1.0 0.0 +es 01_solar 1 220 0.0 1.0 +es 02_wind_on 1 220 0.0 1.0 +es 03_wind_off 1 220 0.0 1.0 es 04_res 1 220 0.0 0.0 es 05_nuclear 1 220 0.0 0.0 es 06_coal 1 220 0.0 0.0 es 07_gas 1 220 0.0 0.0 es 08_non-res 1 220 0.0 0.0 es 09_hydro_pump 1 220 0.0 0.0 -es 01_solar 1 221 1.0 0.0 -es 02_wind_on 1 221 1.0 0.0 -es 03_wind_off 1 221 1.0 0.0 +es 01_solar 1 221 0.0 1.0 +es 02_wind_on 1 221 0.0 1.0 +es 03_wind_off 1 221 0.0 1.0 es 04_res 1 221 0.0 0.0 es 05_nuclear 1 221 0.0 0.0 es 06_coal 1 221 0.0 0.0 es 07_gas 1 221 0.0 0.0 es 08_non-res 1 221 0.0 0.0 es 09_hydro_pump 1 221 0.0 0.0 -es 01_solar 1 222 1.0 0.0 -es 02_wind_on 1 222 1.0 0.0 -es 03_wind_off 1 222 1.0 0.0 +es 01_solar 1 222 0.0 1.0 +es 02_wind_on 1 222 0.0 1.0 +es 03_wind_off 1 222 0.0 1.0 es 04_res 1 222 0.0 0.0 es 05_nuclear 1 222 0.0 0.0 es 06_coal 1 222 0.0 0.0 es 07_gas 1 222 0.0 0.0 es 08_non-res 1 222 0.0 0.0 es 09_hydro_pump 1 222 0.0 0.0 -es 01_solar 1 223 1.0 0.0 -es 02_wind_on 1 223 1.0 0.0 -es 03_wind_off 1 223 1.0 0.0 +es 01_solar 1 223 0.0 1.0 +es 02_wind_on 1 223 0.0 1.0 +es 03_wind_off 1 223 0.0 1.0 es 04_res 1 223 0.0 0.0 es 05_nuclear 1 223 0.0 0.0 es 06_coal 1 223 0.0 0.0 es 07_gas 1 223 0.0 0.0 es 08_non-res 1 223 0.0 0.0 es 09_hydro_pump 1 223 0.0 0.0 -es 01_solar 1 224 1.0 0.0 -es 02_wind_on 1 224 1.0 0.0 -es 03_wind_off 1 224 1.0 0.0 +es 01_solar 1 224 0.0 1.0 +es 02_wind_on 1 224 0.0 1.0 +es 03_wind_off 1 224 0.0 1.0 es 04_res 1 224 0.0 0.0 es 05_nuclear 1 224 0.0 0.0 es 06_coal 1 224 0.0 0.0 es 07_gas 1 224 0.0 0.0 es 08_non-res 1 224 0.0 0.0 es 09_hydro_pump 1 224 0.0 0.0 -es 01_solar 1 225 1.0 0.0 -es 02_wind_on 1 225 1.0 0.0 -es 03_wind_off 1 225 1.0 0.0 +es 01_solar 1 225 0.0 1.0 +es 02_wind_on 1 225 0.0 1.0 +es 03_wind_off 1 225 0.0 1.0 es 04_res 1 225 0.0 0.0 es 05_nuclear 1 225 0.0 0.0 es 06_coal 1 225 0.0 0.0 es 07_gas 1 225 0.0 0.0 es 08_non-res 1 225 0.0 0.0 es 09_hydro_pump 1 225 0.0 0.0 -es 01_solar 1 226 1.0 0.0 -es 02_wind_on 1 226 1.0 0.0 -es 03_wind_off 1 226 1.0 0.0 +es 01_solar 1 226 0.0 1.0 +es 02_wind_on 1 226 0.0 1.0 +es 03_wind_off 1 226 0.0 1.0 es 04_res 1 226 0.0 0.0 es 05_nuclear 1 226 0.0 0.0 es 06_coal 1 226 0.0 0.0 es 07_gas 1 226 0.0 0.0 es 08_non-res 1 226 0.0 0.0 es 09_hydro_pump 1 226 0.0 0.0 -es 01_solar 1 227 1.0 0.0 -es 02_wind_on 1 227 1.0 0.0 -es 03_wind_off 1 227 1.0 0.0 +es 01_solar 1 227 0.0 1.0 +es 02_wind_on 1 227 0.0 1.0 +es 03_wind_off 1 227 0.0 1.0 es 04_res 1 227 0.0 0.0 es 05_nuclear 1 227 0.0 0.0 es 06_coal 1 227 0.0 0.0 es 07_gas 1 227 0.0 0.0 es 08_non-res 1 227 0.0 0.0 es 09_hydro_pump 1 227 0.0 0.0 -es 01_solar 1 228 1.0 0.0 -es 02_wind_on 1 228 1.0 0.0 -es 03_wind_off 1 228 1.0 0.0 +es 01_solar 1 228 0.0 1.0 +es 02_wind_on 1 228 0.0 1.0 +es 03_wind_off 1 228 0.0 1.0 es 04_res 1 228 0.0 0.0 es 05_nuclear 1 228 0.0 0.0 es 06_coal 1 228 0.0 0.0 es 07_gas 1 228 0.0 0.0 es 08_non-res 1 228 0.0 0.0 es 09_hydro_pump 1 228 0.0 0.0 -es 01_solar 1 229 1.0 0.0 -es 02_wind_on 1 229 1.0 0.0 -es 03_wind_off 1 229 1.0 0.0 +es 01_solar 1 229 0.0 1.0 +es 02_wind_on 1 229 0.0 1.0 +es 03_wind_off 1 229 0.0 1.0 es 04_res 1 229 0.0 0.0 es 05_nuclear 1 229 0.0 0.0 es 06_coal 1 229 0.0 0.0 es 07_gas 1 229 0.0 0.0 es 08_non-res 1 229 0.0 0.0 es 09_hydro_pump 1 229 0.0 0.0 -es 01_solar 1 230 1.0 0.0 -es 02_wind_on 1 230 1.0 0.0 -es 03_wind_off 1 230 1.0 0.0 -es 04_res 1 230 1.0 0.0 +es 01_solar 1 230 0.0 1.0 +es 02_wind_on 1 230 0.0 1.0 +es 03_wind_off 1 230 0.0 1.0 +es 04_res 1 230 0.0 1.0 es 05_nuclear 1 230 0.0 0.0 es 06_coal 1 230 0.0 0.0 es 07_gas 1 230 0.0 0.0 es 08_non-res 1 230 0.0 0.0 es 09_hydro_pump 1 230 0.0 0.0 -es 01_solar 1 231 1.0 0.0 -es 02_wind_on 1 231 1.0 0.0 -es 03_wind_off 1 231 1.0 0.0 -es 04_res 1 231 1.0 0.0 +es 01_solar 1 231 0.0 1.0 +es 02_wind_on 1 231 0.0 1.0 +es 03_wind_off 1 231 0.0 1.0 +es 04_res 1 231 0.0 1.0 es 05_nuclear 1 231 0.0 0.0 es 06_coal 1 231 0.0 0.0 es 07_gas 1 231 0.0 0.0 es 08_non-res 1 231 0.0 0.0 es 09_hydro_pump 1 231 0.0 0.0 -es 01_solar 1 232 1.0 0.0 -es 02_wind_on 1 232 1.0 0.0 -es 03_wind_off 1 232 1.0 0.0 -es 04_res 1 232 1.0 0.0 +es 01_solar 1 232 0.0 1.0 +es 02_wind_on 1 232 0.0 1.0 +es 03_wind_off 1 232 0.0 1.0 +es 04_res 1 232 0.0 1.0 es 05_nuclear 1 232 0.0 0.0 es 06_coal 1 232 0.0 0.0 es 07_gas 1 232 0.0 0.0 es 08_non-res 1 232 0.0 0.0 es 09_hydro_pump 1 232 0.0 0.0 -es 01_solar 1 233 1.0 0.0 -es 02_wind_on 1 233 1.0 0.0 -es 03_wind_off 1 233 1.0 0.0 -es 04_res 1 233 1.0 0.0 +es 01_solar 1 233 0.0 1.0 +es 02_wind_on 1 233 0.0 1.0 +es 03_wind_off 1 233 0.0 1.0 +es 04_res 1 233 0.0 1.0 es 05_nuclear 1 233 0.0 0.0 es 06_coal 1 233 0.0 0.0 es 07_gas 1 233 0.0 0.0 es 08_non-res 1 233 0.0 0.0 es 09_hydro_pump 1 233 0.0 0.0 -es 01_solar 1 234 1.0 0.0 -es 02_wind_on 1 234 1.0 0.0 -es 03_wind_off 1 234 1.0 0.0 -es 04_res 1 234 1.0 0.0 +es 01_solar 1 234 0.0 1.0 +es 02_wind_on 1 234 0.0 1.0 +es 03_wind_off 1 234 0.0 1.0 +es 04_res 1 234 0.0 1.0 es 05_nuclear 1 234 0.0 0.0 es 06_coal 1 234 0.0 0.0 es 07_gas 1 234 0.0 0.0 es 08_non-res 1 234 0.0 0.0 es 09_hydro_pump 1 234 0.0 0.0 -es 01_solar 1 235 1.0 0.0 -es 02_wind_on 1 235 1.0 0.0 -es 03_wind_off 1 235 1.0 0.0 -es 04_res 1 235 1.0 0.0 +es 01_solar 1 235 0.0 1.0 +es 02_wind_on 1 235 0.0 1.0 +es 03_wind_off 1 235 0.0 1.0 +es 04_res 1 235 0.0 1.0 es 05_nuclear 1 235 0.0 0.0 es 06_coal 1 235 0.0 0.0 es 07_gas 1 235 0.0 0.0 es 08_non-res 1 235 0.0 0.0 es 09_hydro_pump 1 235 0.0 0.0 -es 01_solar 1 236 1.0 0.0 -es 02_wind_on 1 236 1.0 0.0 -es 03_wind_off 1 236 1.0 0.0 -es 04_res 1 236 1.0 0.0 +es 01_solar 1 236 0.0 1.0 +es 02_wind_on 1 236 0.0 1.0 +es 03_wind_off 1 236 0.0 1.0 +es 04_res 1 236 0.0 1.0 es 05_nuclear 1 236 0.0 0.0 es 06_coal 1 236 0.0 0.0 es 07_gas 1 236 0.0 0.0 es 08_non-res 1 236 0.0 0.0 es 09_hydro_pump 1 236 0.0 0.0 -es 01_solar 1 237 1.0 0.0 -es 02_wind_on 1 237 1.0 0.0 -es 03_wind_off 1 237 1.0 0.0 -es 04_res 1 237 1.0 0.0 +es 01_solar 1 237 0.0 1.0 +es 02_wind_on 1 237 0.0 1.0 +es 03_wind_off 1 237 0.0 1.0 +es 04_res 1 237 0.0 1.0 es 05_nuclear 1 237 0.0 0.0 es 06_coal 1 237 0.0 0.0 es 07_gas 1 237 0.0 0.0 es 08_non-res 1 237 0.0 0.0 es 09_hydro_pump 1 237 0.0 0.0 -es 01_solar 1 238 1.0 0.0 -es 02_wind_on 1 238 1.0 0.0 -es 03_wind_off 1 238 1.0 0.0 -es 04_res 1 238 1.0 0.0 +es 01_solar 1 238 0.0 1.0 +es 02_wind_on 1 238 0.0 1.0 +es 03_wind_off 1 238 0.0 1.0 +es 04_res 1 238 0.0 1.0 es 05_nuclear 1 238 0.0 0.0 es 06_coal 1 238 0.0 0.0 es 07_gas 1 238 0.0 0.0 es 08_non-res 1 238 0.0 0.0 es 09_hydro_pump 1 238 0.0 0.0 -es 01_solar 1 239 1.0 0.0 -es 02_wind_on 1 239 1.0 0.0 -es 03_wind_off 1 239 1.0 0.0 -es 04_res 1 239 1.0 0.0 +es 01_solar 1 239 0.0 1.0 +es 02_wind_on 1 239 0.0 1.0 +es 03_wind_off 1 239 0.0 1.0 +es 04_res 1 239 0.0 1.0 es 05_nuclear 1 239 0.0 0.0 es 06_coal 1 239 0.0 0.0 es 07_gas 1 239 0.0 0.0 es 08_non-res 1 239 0.0 0.0 es 09_hydro_pump 1 239 0.0 0.0 -es 01_solar 1 240 1.0 0.0 -es 02_wind_on 1 240 1.0 0.0 -es 03_wind_off 1 240 1.0 0.0 -es 04_res 1 240 1.0 0.0 +es 01_solar 1 240 0.0 1.0 +es 02_wind_on 1 240 0.0 1.0 +es 03_wind_off 1 240 0.0 1.0 +es 04_res 1 240 0.0 1.0 es 05_nuclear 1 240 0.0 0.0 es 06_coal 1 240 0.0 0.0 es 07_gas 1 240 0.0 0.0 es 08_non-res 1 240 0.0 0.0 es 09_hydro_pump 1 240 0.0 0.0 -es 01_solar 1 241 1.0 0.0 -es 02_wind_on 1 241 1.0 0.0 -es 03_wind_off 1 241 1.0 0.0 -es 04_res 1 241 1.0 0.0 +es 01_solar 1 241 0.0 1.0 +es 02_wind_on 1 241 0.0 1.0 +es 03_wind_off 1 241 0.0 1.0 +es 04_res 1 241 0.0 1.0 es 05_nuclear 1 241 0.0 0.0 es 06_coal 1 241 0.0 0.0 es 07_gas 1 241 0.0 0.0 es 08_non-res 1 241 0.0 0.0 es 09_hydro_pump 1 241 0.0 0.0 -es 01_solar 1 242 1.0 0.0 -es 02_wind_on 1 242 1.0 0.0 -es 03_wind_off 1 242 1.0 0.0 -es 04_res 1 242 1.0 0.0 +es 01_solar 1 242 0.0 1.0 +es 02_wind_on 1 242 0.0 1.0 +es 03_wind_off 1 242 0.0 1.0 +es 04_res 1 242 0.0 1.0 es 05_nuclear 1 242 0.0 0.0 es 06_coal 1 242 0.0 0.0 es 07_gas 1 242 0.0 0.0 es 08_non-res 1 242 0.0 0.0 es 09_hydro_pump 1 242 0.0 0.0 -es 01_solar 1 243 1.0 0.0 -es 02_wind_on 1 243 1.0 0.0 -es 03_wind_off 1 243 1.0 0.0 -es 04_res 1 243 1.0 0.0 +es 01_solar 1 243 0.0 1.0 +es 02_wind_on 1 243 0.0 1.0 +es 03_wind_off 1 243 0.0 1.0 +es 04_res 1 243 0.0 1.0 es 05_nuclear 1 243 0.0 0.0 es 06_coal 1 243 0.0 0.0 es 07_gas 1 243 0.0 0.0 es 08_non-res 1 243 0.0 0.0 es 09_hydro_pump 1 243 0.0 0.0 -es 01_solar 1 244 1.0 0.0 -es 02_wind_on 1 244 1.0 0.0 -es 03_wind_off 1 244 1.0 0.0 -es 04_res 1 244 1.0 0.0 +es 01_solar 1 244 0.0 1.0 +es 02_wind_on 1 244 0.0 1.0 +es 03_wind_off 1 244 0.0 1.0 +es 04_res 1 244 0.0 1.0 es 05_nuclear 1 244 0.0 0.0 es 06_coal 1 244 0.0 0.0 es 07_gas 1 244 0.0 0.0 es 08_non-res 1 244 0.0 0.0 es 09_hydro_pump 1 244 0.0 0.0 -es 01_solar 1 245 1.0 0.0 -es 02_wind_on 1 245 1.0 0.0 -es 03_wind_off 1 245 1.0 0.0 -es 04_res 1 245 1.0 0.0 +es 01_solar 1 245 0.0 1.0 +es 02_wind_on 1 245 0.0 1.0 +es 03_wind_off 1 245 0.0 1.0 +es 04_res 1 245 0.0 1.0 es 05_nuclear 1 245 0.0 0.0 es 06_coal 1 245 0.0 0.0 es 07_gas 1 245 0.0 0.0 es 08_non-res 1 245 0.0 0.0 es 09_hydro_pump 1 245 0.0 0.0 -es 01_solar 1 246 1.0 0.0 -es 02_wind_on 1 246 1.0 0.0 -es 03_wind_off 1 246 1.0 0.0 -es 04_res 1 246 1.0 0.0 +es 01_solar 1 246 0.0 1.0 +es 02_wind_on 1 246 0.0 1.0 +es 03_wind_off 1 246 0.0 1.0 +es 04_res 1 246 0.0 1.0 es 05_nuclear 1 246 0.0 0.0 es 06_coal 1 246 0.0 0.0 es 07_gas 1 246 0.0 0.0 es 08_non-res 1 246 0.0 0.0 es 09_hydro_pump 1 246 0.0 0.0 -es 01_solar 1 247 1.0 0.0 -es 02_wind_on 1 247 1.0 0.0 -es 03_wind_off 1 247 1.0 0.0 -es 04_res 1 247 1.0 0.0 +es 01_solar 1 247 0.0 1.0 +es 02_wind_on 1 247 0.0 1.0 +es 03_wind_off 1 247 0.0 1.0 +es 04_res 1 247 0.0 1.0 es 05_nuclear 1 247 0.0 0.0 es 06_coal 1 247 0.0 0.0 es 07_gas 1 247 0.0 0.0 es 08_non-res 1 247 0.0 0.0 es 09_hydro_pump 1 247 0.0 0.0 -es 01_solar 1 248 1.0 0.0 -es 02_wind_on 1 248 1.0 0.0 -es 03_wind_off 1 248 1.0 0.0 -es 04_res 1 248 1.0 0.0 +es 01_solar 1 248 0.0 1.0 +es 02_wind_on 1 248 0.0 1.0 +es 03_wind_off 1 248 0.0 1.0 +es 04_res 1 248 0.0 1.0 es 05_nuclear 1 248 0.0 0.0 es 06_coal 1 248 0.0 0.0 es 07_gas 1 248 0.0 0.0 es 08_non-res 1 248 0.0 0.0 es 09_hydro_pump 1 248 0.0 0.0 -es 01_solar 1 249 1.0 0.0 -es 02_wind_on 1 249 1.0 0.0 -es 03_wind_off 1 249 1.0 0.0 -es 04_res 1 249 1.0 0.0 +es 01_solar 1 249 0.0 1.0 +es 02_wind_on 1 249 0.0 1.0 +es 03_wind_off 1 249 0.0 1.0 +es 04_res 1 249 0.0 1.0 es 05_nuclear 1 249 0.0 0.0 es 06_coal 1 249 0.0 0.0 es 07_gas 1 249 0.0 0.0 es 08_non-res 1 249 0.0 0.0 es 09_hydro_pump 1 249 0.0 0.0 -es 01_solar 1 250 1.0 0.0 -es 02_wind_on 1 250 1.0 0.0 -es 03_wind_off 1 250 1.0 0.0 -es 04_res 1 250 1.0 0.0 -es 05_nuclear 1 250 1.0 0.0 +es 01_solar 1 250 0.0 1.0 +es 02_wind_on 1 250 0.0 1.0 +es 03_wind_off 1 250 0.0 1.0 +es 04_res 1 250 0.0 1.0 +es 05_nuclear 1 250 0.0 1.0 es 06_coal 1 250 0.0 0.0 es 07_gas 1 250 0.0 0.0 es 08_non-res 1 250 0.0 0.0 es 09_hydro_pump 1 250 0.0 0.0 -es 01_solar 1 251 1.0 0.0 -es 02_wind_on 1 251 1.0 0.0 -es 03_wind_off 1 251 1.0 0.0 -es 04_res 1 251 1.0 0.0 -es 05_nuclear 1 251 1.0 0.0 +es 01_solar 1 251 0.0 1.0 +es 02_wind_on 1 251 0.0 1.0 +es 03_wind_off 1 251 0.0 1.0 +es 04_res 1 251 0.0 1.0 +es 05_nuclear 1 251 0.0 1.0 es 06_coal 1 251 0.0 0.0 es 07_gas 1 251 0.0 0.0 es 08_non-res 1 251 0.0 0.0 es 09_hydro_pump 1 251 0.0 0.0 -es 01_solar 1 252 1.0 0.0 -es 02_wind_on 1 252 1.0 0.0 -es 03_wind_off 1 252 1.0 0.0 -es 04_res 1 252 1.0 0.0 -es 05_nuclear 1 252 1.0 0.0 +es 01_solar 1 252 0.0 1.0 +es 02_wind_on 1 252 0.0 1.0 +es 03_wind_off 1 252 0.0 1.0 +es 04_res 1 252 0.0 1.0 +es 05_nuclear 1 252 0.0 1.0 es 06_coal 1 252 0.0 0.0 es 07_gas 1 252 0.0 0.0 es 08_non-res 1 252 0.0 0.0 es 09_hydro_pump 1 252 0.0 0.0 -es 01_solar 1 253 1.0 0.0 -es 02_wind_on 1 253 1.0 0.0 -es 03_wind_off 1 253 1.0 0.0 -es 04_res 1 253 1.0 0.0 -es 05_nuclear 1 253 1.0 0.0 +es 01_solar 1 253 0.0 1.0 +es 02_wind_on 1 253 0.0 1.0 +es 03_wind_off 1 253 0.0 1.0 +es 04_res 1 253 0.0 1.0 +es 05_nuclear 1 253 0.0 1.0 es 06_coal 1 253 0.0 0.0 es 07_gas 1 253 0.0 0.0 es 08_non-res 1 253 0.0 0.0 es 09_hydro_pump 1 253 0.0 0.0 -es 01_solar 1 254 1.0 0.0 -es 02_wind_on 1 254 1.0 0.0 -es 03_wind_off 1 254 1.0 0.0 -es 04_res 1 254 1.0 0.0 -es 05_nuclear 1 254 1.0 0.0 +es 01_solar 1 254 0.0 1.0 +es 02_wind_on 1 254 0.0 1.0 +es 03_wind_off 1 254 0.0 1.0 +es 04_res 1 254 0.0 1.0 +es 05_nuclear 1 254 0.0 1.0 es 06_coal 1 254 0.0 0.0 es 07_gas 1 254 0.0 0.0 es 08_non-res 1 254 0.0 0.0 es 09_hydro_pump 1 254 0.0 0.0 -es 01_solar 1 255 1.0 0.0 -es 02_wind_on 1 255 1.0 0.0 -es 03_wind_off 1 255 1.0 0.0 -es 04_res 1 255 1.0 0.0 -es 05_nuclear 1 255 1.0 0.0 +es 01_solar 1 255 0.0 1.0 +es 02_wind_on 1 255 0.0 1.0 +es 03_wind_off 1 255 0.0 1.0 +es 04_res 1 255 0.0 1.0 +es 05_nuclear 1 255 0.0 1.0 es 06_coal 1 255 0.0 0.0 es 07_gas 1 255 0.0 0.0 es 08_non-res 1 255 0.0 0.0 es 09_hydro_pump 1 255 0.0 0.0 -es 01_solar 1 256 1.0 0.0 -es 02_wind_on 1 256 1.0 0.0 -es 03_wind_off 1 256 1.0 0.0 -es 04_res 1 256 1.0 0.0 -es 05_nuclear 1 256 1.0 0.0 +es 01_solar 1 256 0.0 1.0 +es 02_wind_on 1 256 0.0 1.0 +es 03_wind_off 1 256 0.0 1.0 +es 04_res 1 256 0.0 1.0 +es 05_nuclear 1 256 0.0 1.0 es 06_coal 1 256 0.0 0.0 es 07_gas 1 256 0.0 0.0 es 08_non-res 1 256 0.0 0.0 es 09_hydro_pump 1 256 0.0 0.0 -es 01_solar 1 257 1.0 0.0 -es 02_wind_on 1 257 1.0 0.0 -es 03_wind_off 1 257 1.0 0.0 -es 04_res 1 257 1.0 0.0 -es 05_nuclear 1 257 1.0 0.0 +es 01_solar 1 257 0.0 1.0 +es 02_wind_on 1 257 0.0 1.0 +es 03_wind_off 1 257 0.0 1.0 +es 04_res 1 257 0.0 1.0 +es 05_nuclear 1 257 0.0 1.0 es 06_coal 1 257 0.0 0.0 es 07_gas 1 257 0.0 0.0 es 08_non-res 1 257 0.0 0.0 es 09_hydro_pump 1 257 0.0 0.0 -es 01_solar 1 258 1.0 0.0 -es 02_wind_on 1 258 1.0 0.0 -es 03_wind_off 1 258 1.0 0.0 -es 04_res 1 258 1.0 0.0 -es 05_nuclear 1 258 1.0 0.0 +es 01_solar 1 258 0.0 1.0 +es 02_wind_on 1 258 0.0 1.0 +es 03_wind_off 1 258 0.0 1.0 +es 04_res 1 258 0.0 1.0 +es 05_nuclear 1 258 0.0 1.0 es 06_coal 1 258 0.0 0.0 es 07_gas 1 258 0.0 0.0 es 08_non-res 1 258 0.0 0.0 es 09_hydro_pump 1 258 0.0 0.0 -es 01_solar 1 259 1.0 0.0 -es 02_wind_on 1 259 1.0 0.0 -es 03_wind_off 1 259 1.0 0.0 -es 04_res 1 259 1.0 0.0 -es 05_nuclear 1 259 1.0 0.0 +es 01_solar 1 259 0.0 1.0 +es 02_wind_on 1 259 0.0 1.0 +es 03_wind_off 1 259 0.0 1.0 +es 04_res 1 259 0.0 1.0 +es 05_nuclear 1 259 0.0 1.0 es 06_coal 1 259 0.0 0.0 es 07_gas 1 259 0.0 0.0 es 08_non-res 1 259 0.0 0.0 es 09_hydro_pump 1 259 0.0 0.0 -es 01_solar 1 260 1.0 0.0 -es 02_wind_on 1 260 1.0 0.0 -es 03_wind_off 1 260 1.0 0.0 -es 04_res 1 260 1.0 0.0 -es 05_nuclear 1 260 1.0 0.0 +es 01_solar 1 260 0.0 1.0 +es 02_wind_on 1 260 0.0 1.0 +es 03_wind_off 1 260 0.0 1.0 +es 04_res 1 260 0.0 1.0 +es 05_nuclear 1 260 0.0 1.0 es 06_coal 1 260 0.0 0.0 es 07_gas 1 260 0.0 0.0 es 08_non-res 1 260 0.0 0.0 es 09_hydro_pump 1 260 0.0 0.0 -es 01_solar 1 261 1.0 0.0 -es 02_wind_on 1 261 1.0 0.0 -es 03_wind_off 1 261 1.0 0.0 -es 04_res 1 261 1.0 0.0 -es 05_nuclear 1 261 1.0 0.0 +es 01_solar 1 261 0.0 1.0 +es 02_wind_on 1 261 0.0 1.0 +es 03_wind_off 1 261 0.0 1.0 +es 04_res 1 261 0.0 1.0 +es 05_nuclear 1 261 0.0 1.0 es 06_coal 1 261 0.0 0.0 es 07_gas 1 261 0.0 0.0 es 08_non-res 1 261 0.0 0.0 es 09_hydro_pump 1 261 0.0 0.0 -es 01_solar 1 262 1.0 0.0 -es 02_wind_on 1 262 1.0 0.0 -es 03_wind_off 1 262 1.0 0.0 -es 04_res 1 262 1.0 0.0 -es 05_nuclear 1 262 1.0 0.0 +es 01_solar 1 262 0.0 1.0 +es 02_wind_on 1 262 0.0 1.0 +es 03_wind_off 1 262 0.0 1.0 +es 04_res 1 262 0.0 1.0 +es 05_nuclear 1 262 0.0 1.0 es 06_coal 1 262 0.0 0.0 es 07_gas 1 262 0.0 0.0 es 08_non-res 1 262 0.0 0.0 es 09_hydro_pump 1 262 0.0 0.0 -es 01_solar 1 263 1.0 0.0 -es 02_wind_on 1 263 1.0 0.0 -es 03_wind_off 1 263 1.0 0.0 -es 04_res 1 263 1.0 0.0 -es 05_nuclear 1 263 1.0 0.0 +es 01_solar 1 263 0.0 1.0 +es 02_wind_on 1 263 0.0 1.0 +es 03_wind_off 1 263 0.0 1.0 +es 04_res 1 263 0.0 1.0 +es 05_nuclear 1 263 0.0 1.0 es 06_coal 1 263 0.0 0.0 es 07_gas 1 263 0.0 0.0 es 08_non-res 1 263 0.0 0.0 es 09_hydro_pump 1 263 0.0 0.0 -es 01_solar 1 264 1.0 0.0 -es 02_wind_on 1 264 1.0 0.0 -es 03_wind_off 1 264 1.0 0.0 -es 04_res 1 264 1.0 0.0 -es 05_nuclear 1 264 1.0 0.0 +es 01_solar 1 264 0.0 1.0 +es 02_wind_on 1 264 0.0 1.0 +es 03_wind_off 1 264 0.0 1.0 +es 04_res 1 264 0.0 1.0 +es 05_nuclear 1 264 0.0 1.0 es 06_coal 1 264 0.0 0.0 es 07_gas 1 264 0.0 0.0 es 08_non-res 1 264 0.0 0.0 es 09_hydro_pump 1 264 0.0 0.0 -es 01_solar 1 265 1.0 0.0 -es 02_wind_on 1 265 1.0 0.0 -es 03_wind_off 1 265 1.0 0.0 -es 04_res 1 265 1.0 0.0 -es 05_nuclear 1 265 1.0 0.0 +es 01_solar 1 265 0.0 1.0 +es 02_wind_on 1 265 0.0 1.0 +es 03_wind_off 1 265 0.0 1.0 +es 04_res 1 265 0.0 1.0 +es 05_nuclear 1 265 0.0 1.0 es 06_coal 1 265 0.0 0.0 es 07_gas 1 265 0.0 0.0 es 08_non-res 1 265 0.0 0.0 es 09_hydro_pump 1 265 0.0 0.0 -es 01_solar 1 266 1.0 0.0 -es 02_wind_on 1 266 1.0 0.0 -es 03_wind_off 1 266 1.0 0.0 -es 04_res 1 266 1.0 0.0 -es 05_nuclear 1 266 1.0 0.0 +es 01_solar 1 266 0.0 1.0 +es 02_wind_on 1 266 0.0 1.0 +es 03_wind_off 1 266 0.0 1.0 +es 04_res 1 266 0.0 1.0 +es 05_nuclear 1 266 0.0 1.0 es 06_coal 1 266 0.0 0.0 es 07_gas 1 266 0.0 0.0 es 08_non-res 1 266 0.0 0.0 es 09_hydro_pump 1 266 0.0 0.0 -es 01_solar 1 267 1.0 0.0 -es 02_wind_on 1 267 1.0 0.0 -es 03_wind_off 1 267 1.0 0.0 -es 04_res 1 267 1.0 0.0 -es 05_nuclear 1 267 1.0 0.0 +es 01_solar 1 267 0.0 1.0 +es 02_wind_on 1 267 0.0 1.0 +es 03_wind_off 1 267 0.0 1.0 +es 04_res 1 267 0.0 1.0 +es 05_nuclear 1 267 0.0 1.0 es 06_coal 1 267 0.0 0.0 es 07_gas 1 267 0.0 0.0 es 08_non-res 1 267 0.0 0.0 es 09_hydro_pump 1 267 0.0 0.0 -es 01_solar 1 268 1.0 0.0 -es 02_wind_on 1 268 1.0 0.0 -es 03_wind_off 1 268 1.0 0.0 -es 04_res 1 268 1.0 0.0 -es 05_nuclear 1 268 1.0 0.0 +es 01_solar 1 268 0.0 1.0 +es 02_wind_on 1 268 0.0 1.0 +es 03_wind_off 1 268 0.0 1.0 +es 04_res 1 268 0.0 1.0 +es 05_nuclear 1 268 0.0 1.0 es 06_coal 1 268 0.0 0.0 es 07_gas 1 268 0.0 0.0 es 08_non-res 1 268 0.0 0.0 es 09_hydro_pump 1 268 0.0 0.0 -es 01_solar 1 269 1.0 0.0 -es 02_wind_on 1 269 1.0 0.0 -es 03_wind_off 1 269 1.0 0.0 -es 04_res 1 269 1.0 0.0 -es 05_nuclear 1 269 1.0 0.0 +es 01_solar 1 269 0.0 1.0 +es 02_wind_on 1 269 0.0 1.0 +es 03_wind_off 1 269 0.0 1.0 +es 04_res 1 269 0.0 1.0 +es 05_nuclear 1 269 0.0 1.0 es 06_coal 1 269 0.0 0.0 es 07_gas 1 269 0.0 0.0 es 08_non-res 1 269 0.0 0.0 es 09_hydro_pump 1 269 0.0 0.0 -es 01_solar 1 270 1.0 0.0 -es 02_wind_on 1 270 1.0 0.0 -es 03_wind_off 1 270 1.0 0.0 -es 04_res 1 270 1.0 0.0 -es 05_nuclear 1 270 1.0 0.0 -es 06_coal 1 270 1.0 0.0 +es 01_solar 1 270 0.0 1.0 +es 02_wind_on 1 270 0.0 1.0 +es 03_wind_off 1 270 0.0 1.0 +es 04_res 1 270 0.0 1.0 +es 05_nuclear 1 270 0.0 1.0 +es 06_coal 1 270 0.0 1.0 es 07_gas 1 270 0.0 0.0 es 08_non-res 1 270 0.0 0.0 es 09_hydro_pump 1 270 0.0 0.0 -es 01_solar 1 271 1.0 0.0 -es 02_wind_on 1 271 1.0 0.0 -es 03_wind_off 1 271 1.0 0.0 -es 04_res 1 271 1.0 0.0 -es 05_nuclear 1 271 1.0 0.0 -es 06_coal 1 271 1.0 0.0 +es 01_solar 1 271 0.0 1.0 +es 02_wind_on 1 271 0.0 1.0 +es 03_wind_off 1 271 0.0 1.0 +es 04_res 1 271 0.0 1.0 +es 05_nuclear 1 271 0.0 1.0 +es 06_coal 1 271 0.0 1.0 es 07_gas 1 271 0.0 0.0 es 08_non-res 1 271 0.0 0.0 es 09_hydro_pump 1 271 0.0 0.0 -es 01_solar 1 272 1.0 0.0 -es 02_wind_on 1 272 1.0 0.0 -es 03_wind_off 1 272 1.0 0.0 -es 04_res 1 272 1.0 0.0 -es 05_nuclear 1 272 1.0 0.0 -es 06_coal 1 272 1.0 0.0 +es 01_solar 1 272 0.0 1.0 +es 02_wind_on 1 272 0.0 1.0 +es 03_wind_off 1 272 0.0 1.0 +es 04_res 1 272 0.0 1.0 +es 05_nuclear 1 272 0.0 1.0 +es 06_coal 1 272 0.0 1.0 es 07_gas 1 272 0.0 0.0 es 08_non-res 1 272 0.0 0.0 es 09_hydro_pump 1 272 0.0 0.0 -es 01_solar 1 273 1.0 0.0 -es 02_wind_on 1 273 1.0 0.0 -es 03_wind_off 1 273 1.0 0.0 -es 04_res 1 273 1.0 0.0 -es 05_nuclear 1 273 1.0 0.0 -es 06_coal 1 273 1.0 0.0 +es 01_solar 1 273 0.0 1.0 +es 02_wind_on 1 273 0.0 1.0 +es 03_wind_off 1 273 0.0 1.0 +es 04_res 1 273 0.0 1.0 +es 05_nuclear 1 273 0.0 1.0 +es 06_coal 1 273 0.0 1.0 es 07_gas 1 273 0.0 0.0 es 08_non-res 1 273 0.0 0.0 es 09_hydro_pump 1 273 0.0 0.0 -es 01_solar 1 274 1.0 0.0 -es 02_wind_on 1 274 1.0 0.0 -es 03_wind_off 1 274 1.0 0.0 -es 04_res 1 274 1.0 0.0 -es 05_nuclear 1 274 1.0 0.0 -es 06_coal 1 274 1.0 0.0 +es 01_solar 1 274 0.0 1.0 +es 02_wind_on 1 274 0.0 1.0 +es 03_wind_off 1 274 0.0 1.0 +es 04_res 1 274 0.0 1.0 +es 05_nuclear 1 274 0.0 1.0 +es 06_coal 1 274 0.0 1.0 es 07_gas 1 274 0.0 0.0 es 08_non-res 1 274 0.0 0.0 es 09_hydro_pump 1 274 0.0 0.0 -es 01_solar 1 275 1.0 0.0 -es 02_wind_on 1 275 1.0 0.0 -es 03_wind_off 1 275 1.0 0.0 -es 04_res 1 275 1.0 0.0 -es 05_nuclear 1 275 1.0 0.0 -es 06_coal 1 275 1.0 0.0 +es 01_solar 1 275 0.0 1.0 +es 02_wind_on 1 275 0.0 1.0 +es 03_wind_off 1 275 0.0 1.0 +es 04_res 1 275 0.0 1.0 +es 05_nuclear 1 275 0.0 1.0 +es 06_coal 1 275 0.0 1.0 es 07_gas 1 275 0.0 0.0 es 08_non-res 1 275 0.0 0.0 es 09_hydro_pump 1 275 0.0 0.0 -es 01_solar 1 276 1.0 0.0 -es 02_wind_on 1 276 1.0 0.0 -es 03_wind_off 1 276 1.0 0.0 -es 04_res 1 276 1.0 0.0 -es 05_nuclear 1 276 1.0 0.0 -es 06_coal 1 276 1.0 0.0 +es 01_solar 1 276 0.0 1.0 +es 02_wind_on 1 276 0.0 1.0 +es 03_wind_off 1 276 0.0 1.0 +es 04_res 1 276 0.0 1.0 +es 05_nuclear 1 276 0.0 1.0 +es 06_coal 1 276 0.0 1.0 es 07_gas 1 276 0.0 0.0 es 08_non-res 1 276 0.0 0.0 es 09_hydro_pump 1 276 0.0 0.0 -es 01_solar 1 277 1.0 0.0 -es 02_wind_on 1 277 1.0 0.0 -es 03_wind_off 1 277 1.0 0.0 -es 04_res 1 277 1.0 0.0 -es 05_nuclear 1 277 1.0 0.0 -es 06_coal 1 277 1.0 0.0 +es 01_solar 1 277 0.0 1.0 +es 02_wind_on 1 277 0.0 1.0 +es 03_wind_off 1 277 0.0 1.0 +es 04_res 1 277 0.0 1.0 +es 05_nuclear 1 277 0.0 1.0 +es 06_coal 1 277 0.0 1.0 es 07_gas 1 277 0.0 0.0 es 08_non-res 1 277 0.0 0.0 es 09_hydro_pump 1 277 0.0 0.0 -es 01_solar 1 278 1.0 0.0 -es 02_wind_on 1 278 1.0 0.0 -es 03_wind_off 1 278 1.0 0.0 -es 04_res 1 278 1.0 0.0 -es 05_nuclear 1 278 1.0 0.0 -es 06_coal 1 278 1.0 0.0 +es 01_solar 1 278 0.0 1.0 +es 02_wind_on 1 278 0.0 1.0 +es 03_wind_off 1 278 0.0 1.0 +es 04_res 1 278 0.0 1.0 +es 05_nuclear 1 278 0.0 1.0 +es 06_coal 1 278 0.0 1.0 es 07_gas 1 278 0.0 0.0 es 08_non-res 1 278 0.0 0.0 es 09_hydro_pump 1 278 0.0 0.0 -es 01_solar 1 279 1.0 0.0 -es 02_wind_on 1 279 1.0 0.0 -es 03_wind_off 1 279 1.0 0.0 -es 04_res 1 279 1.0 0.0 -es 05_nuclear 1 279 1.0 0.0 -es 06_coal 1 279 1.0 0.0 +es 01_solar 1 279 0.0 1.0 +es 02_wind_on 1 279 0.0 1.0 +es 03_wind_off 1 279 0.0 1.0 +es 04_res 1 279 0.0 1.0 +es 05_nuclear 1 279 0.0 1.0 +es 06_coal 1 279 0.0 1.0 es 07_gas 1 279 0.0 0.0 es 08_non-res 1 279 0.0 0.0 es 09_hydro_pump 1 279 0.0 0.0 -es 01_solar 1 280 1.0 0.0 -es 02_wind_on 1 280 1.0 0.0 -es 03_wind_off 1 280 1.0 0.0 -es 04_res 1 280 1.0 0.0 -es 05_nuclear 1 280 1.0 0.0 -es 06_coal 1 280 1.0 0.0 +es 01_solar 1 280 0.0 1.0 +es 02_wind_on 1 280 0.0 1.0 +es 03_wind_off 1 280 0.0 1.0 +es 04_res 1 280 0.0 1.0 +es 05_nuclear 1 280 0.0 1.0 +es 06_coal 1 280 0.0 1.0 es 07_gas 1 280 0.0 0.0 es 08_non-res 1 280 0.0 0.0 es 09_hydro_pump 1 280 0.0 0.0 -es 01_solar 1 281 1.0 0.0 -es 02_wind_on 1 281 1.0 0.0 -es 03_wind_off 1 281 1.0 0.0 -es 04_res 1 281 1.0 0.0 -es 05_nuclear 1 281 1.0 0.0 -es 06_coal 1 281 1.0 0.0 +es 01_solar 1 281 0.0 1.0 +es 02_wind_on 1 281 0.0 1.0 +es 03_wind_off 1 281 0.0 1.0 +es 04_res 1 281 0.0 1.0 +es 05_nuclear 1 281 0.0 1.0 +es 06_coal 1 281 0.0 1.0 es 07_gas 1 281 0.0 0.0 es 08_non-res 1 281 0.0 0.0 es 09_hydro_pump 1 281 0.0 0.0 -es 01_solar 1 282 1.0 0.0 -es 02_wind_on 1 282 1.0 0.0 -es 03_wind_off 1 282 1.0 0.0 -es 04_res 1 282 1.0 0.0 -es 05_nuclear 1 282 1.0 0.0 -es 06_coal 1 282 1.0 0.0 +es 01_solar 1 282 0.0 1.0 +es 02_wind_on 1 282 0.0 1.0 +es 03_wind_off 1 282 0.0 1.0 +es 04_res 1 282 0.0 1.0 +es 05_nuclear 1 282 0.0 1.0 +es 06_coal 1 282 0.0 1.0 es 07_gas 1 282 0.0 0.0 es 08_non-res 1 282 0.0 0.0 es 09_hydro_pump 1 282 0.0 0.0 -es 01_solar 1 283 1.0 0.0 -es 02_wind_on 1 283 1.0 0.0 -es 03_wind_off 1 283 1.0 0.0 -es 04_res 1 283 1.0 0.0 -es 05_nuclear 1 283 1.0 0.0 -es 06_coal 1 283 1.0 0.0 +es 01_solar 1 283 0.0 1.0 +es 02_wind_on 1 283 0.0 1.0 +es 03_wind_off 1 283 0.0 1.0 +es 04_res 1 283 0.0 1.0 +es 05_nuclear 1 283 0.0 1.0 +es 06_coal 1 283 0.0 1.0 es 07_gas 1 283 0.0 0.0 es 08_non-res 1 283 0.0 0.0 es 09_hydro_pump 1 283 0.0 0.0 -es 01_solar 1 284 1.0 0.0 -es 02_wind_on 1 284 1.0 0.0 -es 03_wind_off 1 284 1.0 0.0 -es 04_res 1 284 1.0 0.0 -es 05_nuclear 1 284 1.0 0.0 -es 06_coal 1 284 1.0 0.0 +es 01_solar 1 284 0.0 1.0 +es 02_wind_on 1 284 0.0 1.0 +es 03_wind_off 1 284 0.0 1.0 +es 04_res 1 284 0.0 1.0 +es 05_nuclear 1 284 0.0 1.0 +es 06_coal 1 284 0.0 1.0 es 07_gas 1 284 0.0 0.0 es 08_non-res 1 284 0.0 0.0 es 09_hydro_pump 1 284 0.0 0.0 -es 01_solar 1 285 1.0 0.0 -es 02_wind_on 1 285 1.0 0.0 -es 03_wind_off 1 285 1.0 0.0 -es 04_res 1 285 1.0 0.0 -es 05_nuclear 1 285 1.0 0.0 -es 06_coal 1 285 1.0 0.0 +es 01_solar 1 285 0.0 1.0 +es 02_wind_on 1 285 0.0 1.0 +es 03_wind_off 1 285 0.0 1.0 +es 04_res 1 285 0.0 1.0 +es 05_nuclear 1 285 0.0 1.0 +es 06_coal 1 285 0.0 1.0 es 07_gas 1 285 0.0 0.0 es 08_non-res 1 285 0.0 0.0 es 09_hydro_pump 1 285 0.0 0.0 -es 01_solar 1 286 1.0 0.0 -es 02_wind_on 1 286 1.0 0.0 -es 03_wind_off 1 286 1.0 0.0 -es 04_res 1 286 1.0 0.0 -es 05_nuclear 1 286 1.0 0.0 -es 06_coal 1 286 1.0 0.0 +es 01_solar 1 286 0.0 1.0 +es 02_wind_on 1 286 0.0 1.0 +es 03_wind_off 1 286 0.0 1.0 +es 04_res 1 286 0.0 1.0 +es 05_nuclear 1 286 0.0 1.0 +es 06_coal 1 286 0.0 1.0 es 07_gas 1 286 0.0 0.0 es 08_non-res 1 286 0.0 0.0 es 09_hydro_pump 1 286 0.0 0.0 -es 01_solar 1 287 1.0 0.0 -es 02_wind_on 1 287 1.0 0.0 -es 03_wind_off 1 287 1.0 0.0 -es 04_res 1 287 1.0 0.0 -es 05_nuclear 1 287 1.0 0.0 -es 06_coal 1 287 1.0 0.0 +es 01_solar 1 287 0.0 1.0 +es 02_wind_on 1 287 0.0 1.0 +es 03_wind_off 1 287 0.0 1.0 +es 04_res 1 287 0.0 1.0 +es 05_nuclear 1 287 0.0 1.0 +es 06_coal 1 287 0.0 1.0 es 07_gas 1 287 0.0 0.0 es 08_non-res 1 287 0.0 0.0 es 09_hydro_pump 1 287 0.0 0.0 -es 01_solar 1 288 1.0 0.0 -es 02_wind_on 1 288 1.0 0.0 -es 03_wind_off 1 288 1.0 0.0 -es 04_res 1 288 1.0 0.0 -es 05_nuclear 1 288 1.0 0.0 -es 06_coal 1 288 1.0 0.0 +es 01_solar 1 288 0.0 1.0 +es 02_wind_on 1 288 0.0 1.0 +es 03_wind_off 1 288 0.0 1.0 +es 04_res 1 288 0.0 1.0 +es 05_nuclear 1 288 0.0 1.0 +es 06_coal 1 288 0.0 1.0 es 07_gas 1 288 0.0 0.0 es 08_non-res 1 288 0.0 0.0 es 09_hydro_pump 1 288 0.0 0.0 -es 01_solar 1 289 1.0 0.0 -es 02_wind_on 1 289 1.0 0.0 -es 03_wind_off 1 289 1.0 0.0 -es 04_res 1 289 1.0 0.0 -es 05_nuclear 1 289 1.0 0.0 -es 06_coal 1 289 1.0 0.0 +es 01_solar 1 289 0.0 1.0 +es 02_wind_on 1 289 0.0 1.0 +es 03_wind_off 1 289 0.0 1.0 +es 04_res 1 289 0.0 1.0 +es 05_nuclear 1 289 0.0 1.0 +es 06_coal 1 289 0.0 1.0 es 07_gas 1 289 0.0 0.0 es 08_non-res 1 289 0.0 0.0 es 09_hydro_pump 1 289 0.0 0.0 -es 01_solar 1 290 1.0 0.0 -es 02_wind_on 1 290 1.0 0.0 -es 03_wind_off 1 290 1.0 0.0 -es 04_res 1 290 1.0 0.0 -es 05_nuclear 1 290 1.0 0.0 -es 06_coal 1 290 1.0 0.0 -es 07_gas 1 290 1.0 0.0 +es 01_solar 1 290 0.0 1.0 +es 02_wind_on 1 290 0.0 1.0 +es 03_wind_off 1 290 0.0 1.0 +es 04_res 1 290 0.0 1.0 +es 05_nuclear 1 290 0.0 1.0 +es 06_coal 1 290 0.0 1.0 +es 07_gas 1 290 0.0 1.0 es 08_non-res 1 290 0.0 0.0 es 09_hydro_pump 1 290 0.0 0.0 -es 01_solar 1 291 1.0 0.0 -es 02_wind_on 1 291 1.0 0.0 -es 03_wind_off 1 291 1.0 0.0 -es 04_res 1 291 1.0 0.0 -es 05_nuclear 1 291 1.0 0.0 -es 06_coal 1 291 1.0 0.0 -es 07_gas 1 291 1.0 0.0 +es 01_solar 1 291 0.0 1.0 +es 02_wind_on 1 291 0.0 1.0 +es 03_wind_off 1 291 0.0 1.0 +es 04_res 1 291 0.0 1.0 +es 05_nuclear 1 291 0.0 1.0 +es 06_coal 1 291 0.0 1.0 +es 07_gas 1 291 0.0 1.0 es 08_non-res 1 291 0.0 0.0 es 09_hydro_pump 1 291 0.0 0.0 -es 01_solar 1 292 1.0 0.0 -es 02_wind_on 1 292 1.0 0.0 -es 03_wind_off 1 292 1.0 0.0 -es 04_res 1 292 1.0 0.0 -es 05_nuclear 1 292 1.0 0.0 -es 06_coal 1 292 1.0 0.0 -es 07_gas 1 292 1.0 0.0 +es 01_solar 1 292 0.0 1.0 +es 02_wind_on 1 292 0.0 1.0 +es 03_wind_off 1 292 0.0 1.0 +es 04_res 1 292 0.0 1.0 +es 05_nuclear 1 292 0.0 1.0 +es 06_coal 1 292 0.0 1.0 +es 07_gas 1 292 0.0 1.0 es 08_non-res 1 292 0.0 0.0 es 09_hydro_pump 1 292 0.0 0.0 -es 01_solar 1 293 1.0 0.0 -es 02_wind_on 1 293 1.0 0.0 -es 03_wind_off 1 293 1.0 0.0 -es 04_res 1 293 1.0 0.0 -es 05_nuclear 1 293 1.0 0.0 -es 06_coal 1 293 1.0 0.0 -es 07_gas 1 293 1.0 0.0 +es 01_solar 1 293 0.0 1.0 +es 02_wind_on 1 293 0.0 1.0 +es 03_wind_off 1 293 0.0 1.0 +es 04_res 1 293 0.0 1.0 +es 05_nuclear 1 293 0.0 1.0 +es 06_coal 1 293 0.0 1.0 +es 07_gas 1 293 0.0 1.0 es 08_non-res 1 293 0.0 0.0 es 09_hydro_pump 1 293 0.0 0.0 -es 01_solar 1 294 1.0 0.0 -es 02_wind_on 1 294 1.0 0.0 -es 03_wind_off 1 294 1.0 0.0 -es 04_res 1 294 1.0 0.0 -es 05_nuclear 1 294 1.0 0.0 -es 06_coal 1 294 1.0 0.0 -es 07_gas 1 294 1.0 0.0 +es 01_solar 1 294 0.0 1.0 +es 02_wind_on 1 294 0.0 1.0 +es 03_wind_off 1 294 0.0 1.0 +es 04_res 1 294 0.0 1.0 +es 05_nuclear 1 294 0.0 1.0 +es 06_coal 1 294 0.0 1.0 +es 07_gas 1 294 0.0 1.0 es 08_non-res 1 294 0.0 0.0 es 09_hydro_pump 1 294 0.0 0.0 -es 01_solar 1 295 1.0 0.0 -es 02_wind_on 1 295 1.0 0.0 -es 03_wind_off 1 295 1.0 0.0 -es 04_res 1 295 1.0 0.0 -es 05_nuclear 1 295 1.0 0.0 -es 06_coal 1 295 1.0 0.0 -es 07_gas 1 295 1.0 0.0 +es 01_solar 1 295 0.0 1.0 +es 02_wind_on 1 295 0.0 1.0 +es 03_wind_off 1 295 0.0 1.0 +es 04_res 1 295 0.0 1.0 +es 05_nuclear 1 295 0.0 1.0 +es 06_coal 1 295 0.0 1.0 +es 07_gas 1 295 0.0 1.0 es 08_non-res 1 295 0.0 0.0 es 09_hydro_pump 1 295 0.0 0.0 -es 01_solar 1 296 1.0 0.0 -es 02_wind_on 1 296 1.0 0.0 -es 03_wind_off 1 296 1.0 0.0 -es 04_res 1 296 1.0 0.0 -es 05_nuclear 1 296 1.0 0.0 -es 06_coal 1 296 1.0 0.0 -es 07_gas 1 296 1.0 0.0 +es 01_solar 1 296 0.0 1.0 +es 02_wind_on 1 296 0.0 1.0 +es 03_wind_off 1 296 0.0 1.0 +es 04_res 1 296 0.0 1.0 +es 05_nuclear 1 296 0.0 1.0 +es 06_coal 1 296 0.0 1.0 +es 07_gas 1 296 0.0 1.0 es 08_non-res 1 296 0.0 0.0 es 09_hydro_pump 1 296 0.0 0.0 -es 01_solar 1 297 1.0 0.0 -es 02_wind_on 1 297 1.0 0.0 -es 03_wind_off 1 297 1.0 0.0 -es 04_res 1 297 1.0 0.0 -es 05_nuclear 1 297 1.0 0.0 -es 06_coal 1 297 1.0 0.0 -es 07_gas 1 297 1.0 0.0 +es 01_solar 1 297 0.0 1.0 +es 02_wind_on 1 297 0.0 1.0 +es 03_wind_off 1 297 0.0 1.0 +es 04_res 1 297 0.0 1.0 +es 05_nuclear 1 297 0.0 1.0 +es 06_coal 1 297 0.0 1.0 +es 07_gas 1 297 0.0 1.0 es 08_non-res 1 297 0.0 0.0 es 09_hydro_pump 1 297 0.0 0.0 -es 01_solar 1 298 1.0 0.0 -es 02_wind_on 1 298 1.0 0.0 -es 03_wind_off 1 298 1.0 0.0 -es 04_res 1 298 1.0 0.0 -es 05_nuclear 1 298 1.0 0.0 -es 06_coal 1 298 1.0 0.0 -es 07_gas 1 298 1.0 0.0 +es 01_solar 1 298 0.0 1.0 +es 02_wind_on 1 298 0.0 1.0 +es 03_wind_off 1 298 0.0 1.0 +es 04_res 1 298 0.0 1.0 +es 05_nuclear 1 298 0.0 1.0 +es 06_coal 1 298 0.0 1.0 +es 07_gas 1 298 0.0 1.0 es 08_non-res 1 298 0.0 0.0 es 09_hydro_pump 1 298 0.0 0.0 -es 01_solar 1 299 1.0 0.0 -es 02_wind_on 1 299 1.0 0.0 -es 03_wind_off 1 299 1.0 0.0 -es 04_res 1 299 1.0 0.0 -es 05_nuclear 1 299 1.0 0.0 -es 06_coal 1 299 1.0 0.0 -es 07_gas 1 299 1.0 0.0 +es 01_solar 1 299 0.0 1.0 +es 02_wind_on 1 299 0.0 1.0 +es 03_wind_off 1 299 0.0 1.0 +es 04_res 1 299 0.0 1.0 +es 05_nuclear 1 299 0.0 1.0 +es 06_coal 1 299 0.0 1.0 +es 07_gas 1 299 0.0 1.0 es 08_non-res 1 299 0.0 0.0 es 09_hydro_pump 1 299 0.0 0.0 -es 01_solar 1 300 1.0 0.0 -es 02_wind_on 1 300 1.0 0.0 -es 03_wind_off 1 300 1.0 0.0 -es 04_res 1 300 1.0 0.0 -es 05_nuclear 1 300 1.0 0.0 -es 06_coal 1 300 1.0 0.0 -es 07_gas 1 300 1.0 0.0 +es 01_solar 1 300 0.0 1.0 +es 02_wind_on 1 300 0.0 1.0 +es 03_wind_off 1 300 0.0 1.0 +es 04_res 1 300 0.0 1.0 +es 05_nuclear 1 300 0.0 1.0 +es 06_coal 1 300 0.0 1.0 +es 07_gas 1 300 0.0 1.0 es 08_non-res 1 300 0.0 0.0 es 09_hydro_pump 1 300 0.0 0.0 -es 01_solar 1 301 1.0 0.0 -es 02_wind_on 1 301 1.0 0.0 -es 03_wind_off 1 301 1.0 0.0 -es 04_res 1 301 1.0 0.0 -es 05_nuclear 1 301 1.0 0.0 -es 06_coal 1 301 1.0 0.0 -es 07_gas 1 301 1.0 0.0 +es 01_solar 1 301 0.0 1.0 +es 02_wind_on 1 301 0.0 1.0 +es 03_wind_off 1 301 0.0 1.0 +es 04_res 1 301 0.0 1.0 +es 05_nuclear 1 301 0.0 1.0 +es 06_coal 1 301 0.0 1.0 +es 07_gas 1 301 0.0 1.0 es 08_non-res 1 301 0.0 0.0 es 09_hydro_pump 1 301 0.0 0.0 -es 01_solar 1 302 1.0 0.0 -es 02_wind_on 1 302 1.0 0.0 -es 03_wind_off 1 302 1.0 0.0 -es 04_res 1 302 1.0 0.0 -es 05_nuclear 1 302 1.0 0.0 -es 06_coal 1 302 1.0 0.0 -es 07_gas 1 302 1.0 0.0 +es 01_solar 1 302 0.0 1.0 +es 02_wind_on 1 302 0.0 1.0 +es 03_wind_off 1 302 0.0 1.0 +es 04_res 1 302 0.0 1.0 +es 05_nuclear 1 302 0.0 1.0 +es 06_coal 1 302 0.0 1.0 +es 07_gas 1 302 0.0 1.0 es 08_non-res 1 302 0.0 0.0 es 09_hydro_pump 1 302 0.0 0.0 -es 01_solar 1 303 1.0 0.0 -es 02_wind_on 1 303 1.0 0.0 -es 03_wind_off 1 303 1.0 0.0 -es 04_res 1 303 1.0 0.0 -es 05_nuclear 1 303 1.0 0.0 -es 06_coal 1 303 1.0 0.0 -es 07_gas 1 303 1.0 0.0 +es 01_solar 1 303 0.0 1.0 +es 02_wind_on 1 303 0.0 1.0 +es 03_wind_off 1 303 0.0 1.0 +es 04_res 1 303 0.0 1.0 +es 05_nuclear 1 303 0.0 1.0 +es 06_coal 1 303 0.0 1.0 +es 07_gas 1 303 0.0 1.0 es 08_non-res 1 303 0.0 0.0 es 09_hydro_pump 1 303 0.0 0.0 -es 01_solar 1 304 1.0 0.0 -es 02_wind_on 1 304 1.0 0.0 -es 03_wind_off 1 304 1.0 0.0 -es 04_res 1 304 1.0 0.0 -es 05_nuclear 1 304 1.0 0.0 -es 06_coal 1 304 1.0 0.0 -es 07_gas 1 304 1.0 0.0 +es 01_solar 1 304 0.0 1.0 +es 02_wind_on 1 304 0.0 1.0 +es 03_wind_off 1 304 0.0 1.0 +es 04_res 1 304 0.0 1.0 +es 05_nuclear 1 304 0.0 1.0 +es 06_coal 1 304 0.0 1.0 +es 07_gas 1 304 0.0 1.0 es 08_non-res 1 304 0.0 0.0 es 09_hydro_pump 1 304 0.0 0.0 -es 01_solar 1 305 1.0 0.0 -es 02_wind_on 1 305 1.0 0.0 -es 03_wind_off 1 305 1.0 0.0 -es 04_res 1 305 1.0 0.0 -es 05_nuclear 1 305 1.0 0.0 -es 06_coal 1 305 1.0 0.0 -es 07_gas 1 305 1.0 0.0 +es 01_solar 1 305 0.0 1.0 +es 02_wind_on 1 305 0.0 1.0 +es 03_wind_off 1 305 0.0 1.0 +es 04_res 1 305 0.0 1.0 +es 05_nuclear 1 305 0.0 1.0 +es 06_coal 1 305 0.0 1.0 +es 07_gas 1 305 0.0 1.0 es 08_non-res 1 305 0.0 0.0 es 09_hydro_pump 1 305 0.0 0.0 -es 01_solar 1 306 1.0 0.0 -es 02_wind_on 1 306 1.0 0.0 -es 03_wind_off 1 306 1.0 0.0 -es 04_res 1 306 1.0 0.0 -es 05_nuclear 1 306 1.0 0.0 -es 06_coal 1 306 1.0 0.0 -es 07_gas 1 306 1.0 0.0 +es 01_solar 1 306 0.0 1.0 +es 02_wind_on 1 306 0.0 1.0 +es 03_wind_off 1 306 0.0 1.0 +es 04_res 1 306 0.0 1.0 +es 05_nuclear 1 306 0.0 1.0 +es 06_coal 1 306 0.0 1.0 +es 07_gas 1 306 0.0 1.0 es 08_non-res 1 306 0.0 0.0 es 09_hydro_pump 1 306 0.0 0.0 -es 01_solar 1 307 1.0 0.0 -es 02_wind_on 1 307 1.0 0.0 -es 03_wind_off 1 307 1.0 0.0 -es 04_res 1 307 1.0 0.0 -es 05_nuclear 1 307 1.0 0.0 -es 06_coal 1 307 1.0 0.0 -es 07_gas 1 307 1.0 0.0 +es 01_solar 1 307 0.0 1.0 +es 02_wind_on 1 307 0.0 1.0 +es 03_wind_off 1 307 0.0 1.0 +es 04_res 1 307 0.0 1.0 +es 05_nuclear 1 307 0.0 1.0 +es 06_coal 1 307 0.0 1.0 +es 07_gas 1 307 0.0 1.0 es 08_non-res 1 307 0.0 0.0 es 09_hydro_pump 1 307 0.0 0.0 -es 01_solar 1 308 1.0 0.0 -es 02_wind_on 1 308 1.0 0.0 -es 03_wind_off 1 308 1.0 0.0 -es 04_res 1 308 1.0 0.0 -es 05_nuclear 1 308 1.0 0.0 -es 06_coal 1 308 1.0 0.0 -es 07_gas 1 308 1.0 0.0 +es 01_solar 1 308 0.0 1.0 +es 02_wind_on 1 308 0.0 1.0 +es 03_wind_off 1 308 0.0 1.0 +es 04_res 1 308 0.0 1.0 +es 05_nuclear 1 308 0.0 1.0 +es 06_coal 1 308 0.0 1.0 +es 07_gas 1 308 0.0 1.0 es 08_non-res 1 308 0.0 0.0 es 09_hydro_pump 1 308 0.0 0.0 -es 01_solar 1 309 1.0 0.0 -es 02_wind_on 1 309 1.0 0.0 -es 03_wind_off 1 309 1.0 0.0 -es 04_res 1 309 1.0 0.0 -es 05_nuclear 1 309 1.0 0.0 -es 06_coal 1 309 1.0 0.0 -es 07_gas 1 309 1.0 0.0 +es 01_solar 1 309 0.0 1.0 +es 02_wind_on 1 309 0.0 1.0 +es 03_wind_off 1 309 0.0 1.0 +es 04_res 1 309 0.0 1.0 +es 05_nuclear 1 309 0.0 1.0 +es 06_coal 1 309 0.0 1.0 +es 07_gas 1 309 0.0 1.0 es 08_non-res 1 309 0.0 0.0 es 09_hydro_pump 1 309 0.0 0.0 -es 01_solar 1 310 1.0 0.0 -es 02_wind_on 1 310 1.0 0.0 -es 03_wind_off 1 310 1.0 0.0 -es 04_res 1 310 1.0 0.0 -es 05_nuclear 1 310 1.0 0.0 -es 06_coal 1 310 1.0 0.0 -es 07_gas 1 310 1.0 0.0 -es 08_non-res 1 310 1.0 0.0 +es 01_solar 1 310 0.0 1.0 +es 02_wind_on 1 310 0.0 1.0 +es 03_wind_off 1 310 0.0 1.0 +es 04_res 1 310 0.0 1.0 +es 05_nuclear 1 310 0.0 1.0 +es 06_coal 1 310 0.0 1.0 +es 07_gas 1 310 0.0 1.0 +es 08_non-res 1 310 0.0 1.0 es 09_hydro_pump 1 310 0.0 0.0 -es 01_solar 1 311 1.0 0.0 -es 02_wind_on 1 311 1.0 0.0 -es 03_wind_off 1 311 1.0 0.0 -es 04_res 1 311 1.0 0.0 -es 05_nuclear 1 311 1.0 0.0 -es 06_coal 1 311 1.0 0.0 -es 07_gas 1 311 1.0 0.0 -es 08_non-res 1 311 1.0 0.0 +es 01_solar 1 311 0.0 1.0 +es 02_wind_on 1 311 0.0 1.0 +es 03_wind_off 1 311 0.0 1.0 +es 04_res 1 311 0.0 1.0 +es 05_nuclear 1 311 0.0 1.0 +es 06_coal 1 311 0.0 1.0 +es 07_gas 1 311 0.0 1.0 +es 08_non-res 1 311 0.0 1.0 es 09_hydro_pump 1 311 0.0 0.0 -es 01_solar 1 312 1.0 0.0 -es 02_wind_on 1 312 1.0 0.0 -es 03_wind_off 1 312 1.0 0.0 -es 04_res 1 312 1.0 0.0 -es 05_nuclear 1 312 1.0 0.0 -es 06_coal 1 312 1.0 0.0 -es 07_gas 1 312 1.0 0.0 -es 08_non-res 1 312 1.0 0.0 +es 01_solar 1 312 0.0 1.0 +es 02_wind_on 1 312 0.0 1.0 +es 03_wind_off 1 312 0.0 1.0 +es 04_res 1 312 0.0 1.0 +es 05_nuclear 1 312 0.0 1.0 +es 06_coal 1 312 0.0 1.0 +es 07_gas 1 312 0.0 1.0 +es 08_non-res 1 312 0.0 1.0 es 09_hydro_pump 1 312 0.0 0.0 -es 01_solar 1 313 1.0 0.0 -es 02_wind_on 1 313 1.0 0.0 -es 03_wind_off 1 313 1.0 0.0 -es 04_res 1 313 1.0 0.0 -es 05_nuclear 1 313 1.0 0.0 -es 06_coal 1 313 1.0 0.0 -es 07_gas 1 313 1.0 0.0 -es 08_non-res 1 313 1.0 0.0 +es 01_solar 1 313 0.0 1.0 +es 02_wind_on 1 313 0.0 1.0 +es 03_wind_off 1 313 0.0 1.0 +es 04_res 1 313 0.0 1.0 +es 05_nuclear 1 313 0.0 1.0 +es 06_coal 1 313 0.0 1.0 +es 07_gas 1 313 0.0 1.0 +es 08_non-res 1 313 0.0 1.0 es 09_hydro_pump 1 313 0.0 0.0 -es 01_solar 1 314 1.0 0.0 -es 02_wind_on 1 314 1.0 0.0 -es 03_wind_off 1 314 1.0 0.0 -es 04_res 1 314 1.0 0.0 -es 05_nuclear 1 314 1.0 0.0 -es 06_coal 1 314 1.0 0.0 -es 07_gas 1 314 1.0 0.0 -es 08_non-res 1 314 1.0 0.0 +es 01_solar 1 314 0.0 1.0 +es 02_wind_on 1 314 0.0 1.0 +es 03_wind_off 1 314 0.0 1.0 +es 04_res 1 314 0.0 1.0 +es 05_nuclear 1 314 0.0 1.0 +es 06_coal 1 314 0.0 1.0 +es 07_gas 1 314 0.0 1.0 +es 08_non-res 1 314 0.0 1.0 es 09_hydro_pump 1 314 0.0 0.0 -es 01_solar 1 315 1.0 0.0 -es 02_wind_on 1 315 1.0 0.0 -es 03_wind_off 1 315 1.0 0.0 -es 04_res 1 315 1.0 0.0 -es 05_nuclear 1 315 1.0 0.0 -es 06_coal 1 315 1.0 0.0 -es 07_gas 1 315 1.0 0.0 -es 08_non-res 1 315 1.0 0.0 +es 01_solar 1 315 0.0 1.0 +es 02_wind_on 1 315 0.0 1.0 +es 03_wind_off 1 315 0.0 1.0 +es 04_res 1 315 0.0 1.0 +es 05_nuclear 1 315 0.0 1.0 +es 06_coal 1 315 0.0 1.0 +es 07_gas 1 315 0.0 1.0 +es 08_non-res 1 315 0.0 1.0 es 09_hydro_pump 1 315 0.0 0.0 -es 01_solar 1 316 1.0 0.0 -es 02_wind_on 1 316 1.0 0.0 -es 03_wind_off 1 316 1.0 0.0 -es 04_res 1 316 1.0 0.0 -es 05_nuclear 1 316 1.0 0.0 -es 06_coal 1 316 1.0 0.0 -es 07_gas 1 316 1.0 0.0 -es 08_non-res 1 316 1.0 0.0 +es 01_solar 1 316 0.0 1.0 +es 02_wind_on 1 316 0.0 1.0 +es 03_wind_off 1 316 0.0 1.0 +es 04_res 1 316 0.0 1.0 +es 05_nuclear 1 316 0.0 1.0 +es 06_coal 1 316 0.0 1.0 +es 07_gas 1 316 0.0 1.0 +es 08_non-res 1 316 0.0 1.0 es 09_hydro_pump 1 316 0.0 0.0 -es 01_solar 1 317 1.0 0.0 -es 02_wind_on 1 317 1.0 0.0 -es 03_wind_off 1 317 1.0 0.0 -es 04_res 1 317 1.0 0.0 -es 05_nuclear 1 317 1.0 0.0 -es 06_coal 1 317 1.0 0.0 -es 07_gas 1 317 1.0 0.0 -es 08_non-res 1 317 1.0 0.0 +es 01_solar 1 317 0.0 1.0 +es 02_wind_on 1 317 0.0 1.0 +es 03_wind_off 1 317 0.0 1.0 +es 04_res 1 317 0.0 1.0 +es 05_nuclear 1 317 0.0 1.0 +es 06_coal 1 317 0.0 1.0 +es 07_gas 1 317 0.0 1.0 +es 08_non-res 1 317 0.0 1.0 es 09_hydro_pump 1 317 0.0 0.0 -es 01_solar 1 318 1.0 0.0 -es 02_wind_on 1 318 1.0 0.0 -es 03_wind_off 1 318 1.0 0.0 -es 04_res 1 318 1.0 0.0 -es 05_nuclear 1 318 1.0 0.0 -es 06_coal 1 318 1.0 0.0 -es 07_gas 1 318 1.0 0.0 -es 08_non-res 1 318 1.0 0.0 +es 01_solar 1 318 0.0 1.0 +es 02_wind_on 1 318 0.0 1.0 +es 03_wind_off 1 318 0.0 1.0 +es 04_res 1 318 0.0 1.0 +es 05_nuclear 1 318 0.0 1.0 +es 06_coal 1 318 0.0 1.0 +es 07_gas 1 318 0.0 1.0 +es 08_non-res 1 318 0.0 1.0 es 09_hydro_pump 1 318 0.0 0.0 -es 01_solar 1 319 1.0 0.0 -es 02_wind_on 1 319 1.0 0.0 -es 03_wind_off 1 319 1.0 0.0 -es 04_res 1 319 1.0 0.0 -es 05_nuclear 1 319 1.0 0.0 -es 06_coal 1 319 1.0 0.0 -es 07_gas 1 319 1.0 0.0 -es 08_non-res 1 319 1.0 0.0 +es 01_solar 1 319 0.0 1.0 +es 02_wind_on 1 319 0.0 1.0 +es 03_wind_off 1 319 0.0 1.0 +es 04_res 1 319 0.0 1.0 +es 05_nuclear 1 319 0.0 1.0 +es 06_coal 1 319 0.0 1.0 +es 07_gas 1 319 0.0 1.0 +es 08_non-res 1 319 0.0 1.0 es 09_hydro_pump 1 319 0.0 0.0 -es 01_solar 1 320 1.0 0.0 -es 02_wind_on 1 320 1.0 0.0 -es 03_wind_off 1 320 1.0 0.0 -es 04_res 1 320 1.0 0.0 -es 05_nuclear 1 320 1.0 0.0 -es 06_coal 1 320 1.0 0.0 -es 07_gas 1 320 1.0 0.0 -es 08_non-res 1 320 1.0 0.0 +es 01_solar 1 320 0.0 1.0 +es 02_wind_on 1 320 0.0 1.0 +es 03_wind_off 1 320 0.0 1.0 +es 04_res 1 320 0.0 1.0 +es 05_nuclear 1 320 0.0 1.0 +es 06_coal 1 320 0.0 1.0 +es 07_gas 1 320 0.0 1.0 +es 08_non-res 1 320 0.0 1.0 es 09_hydro_pump 1 320 0.0 0.0 -es 01_solar 1 321 1.0 0.0 -es 02_wind_on 1 321 1.0 0.0 -es 03_wind_off 1 321 1.0 0.0 -es 04_res 1 321 1.0 0.0 -es 05_nuclear 1 321 1.0 0.0 -es 06_coal 1 321 1.0 0.0 -es 07_gas 1 321 1.0 0.0 -es 08_non-res 1 321 1.0 0.0 +es 01_solar 1 321 0.0 1.0 +es 02_wind_on 1 321 0.0 1.0 +es 03_wind_off 1 321 0.0 1.0 +es 04_res 1 321 0.0 1.0 +es 05_nuclear 1 321 0.0 1.0 +es 06_coal 1 321 0.0 1.0 +es 07_gas 1 321 0.0 1.0 +es 08_non-res 1 321 0.0 1.0 es 09_hydro_pump 1 321 0.0 0.0 -es 01_solar 1 322 1.0 0.0 -es 02_wind_on 1 322 1.0 0.0 -es 03_wind_off 1 322 1.0 0.0 -es 04_res 1 322 1.0 0.0 -es 05_nuclear 1 322 1.0 0.0 -es 06_coal 1 322 1.0 0.0 -es 07_gas 1 322 1.0 0.0 -es 08_non-res 1 322 1.0 0.0 +es 01_solar 1 322 0.0 1.0 +es 02_wind_on 1 322 0.0 1.0 +es 03_wind_off 1 322 0.0 1.0 +es 04_res 1 322 0.0 1.0 +es 05_nuclear 1 322 0.0 1.0 +es 06_coal 1 322 0.0 1.0 +es 07_gas 1 322 0.0 1.0 +es 08_non-res 1 322 0.0 1.0 es 09_hydro_pump 1 322 0.0 0.0 -es 01_solar 1 323 1.0 0.0 -es 02_wind_on 1 323 1.0 0.0 -es 03_wind_off 1 323 1.0 0.0 -es 04_res 1 323 1.0 0.0 -es 05_nuclear 1 323 1.0 0.0 -es 06_coal 1 323 1.0 0.0 -es 07_gas 1 323 1.0 0.0 -es 08_non-res 1 323 1.0 0.0 +es 01_solar 1 323 0.0 1.0 +es 02_wind_on 1 323 0.0 1.0 +es 03_wind_off 1 323 0.0 1.0 +es 04_res 1 323 0.0 1.0 +es 05_nuclear 1 323 0.0 1.0 +es 06_coal 1 323 0.0 1.0 +es 07_gas 1 323 0.0 1.0 +es 08_non-res 1 323 0.0 1.0 es 09_hydro_pump 1 323 0.0 0.0 -es 01_solar 1 324 1.0 0.0 -es 02_wind_on 1 324 1.0 0.0 -es 03_wind_off 1 324 1.0 0.0 -es 04_res 1 324 1.0 0.0 -es 05_nuclear 1 324 1.0 0.0 -es 06_coal 1 324 1.0 0.0 -es 07_gas 1 324 1.0 0.0 -es 08_non-res 1 324 1.0 0.0 +es 01_solar 1 324 0.0 1.0 +es 02_wind_on 1 324 0.0 1.0 +es 03_wind_off 1 324 0.0 1.0 +es 04_res 1 324 0.0 1.0 +es 05_nuclear 1 324 0.0 1.0 +es 06_coal 1 324 0.0 1.0 +es 07_gas 1 324 0.0 1.0 +es 08_non-res 1 324 0.0 1.0 es 09_hydro_pump 1 324 0.0 0.0 -es 01_solar 1 325 1.0 0.0 -es 02_wind_on 1 325 1.0 0.0 -es 03_wind_off 1 325 1.0 0.0 -es 04_res 1 325 1.0 0.0 -es 05_nuclear 1 325 1.0 0.0 -es 06_coal 1 325 1.0 0.0 -es 07_gas 1 325 1.0 0.0 -es 08_non-res 1 325 1.0 0.0 +es 01_solar 1 325 0.0 1.0 +es 02_wind_on 1 325 0.0 1.0 +es 03_wind_off 1 325 0.0 1.0 +es 04_res 1 325 0.0 1.0 +es 05_nuclear 1 325 0.0 1.0 +es 06_coal 1 325 0.0 1.0 +es 07_gas 1 325 0.0 1.0 +es 08_non-res 1 325 0.0 1.0 es 09_hydro_pump 1 325 0.0 0.0 -es 01_solar 1 326 1.0 0.0 -es 02_wind_on 1 326 1.0 0.0 -es 03_wind_off 1 326 1.0 0.0 -es 04_res 1 326 1.0 0.0 -es 05_nuclear 1 326 1.0 0.0 -es 06_coal 1 326 1.0 0.0 -es 07_gas 1 326 1.0 0.0 -es 08_non-res 1 326 1.0 0.0 +es 01_solar 1 326 0.0 1.0 +es 02_wind_on 1 326 0.0 1.0 +es 03_wind_off 1 326 0.0 1.0 +es 04_res 1 326 0.0 1.0 +es 05_nuclear 1 326 0.0 1.0 +es 06_coal 1 326 0.0 1.0 +es 07_gas 1 326 0.0 1.0 +es 08_non-res 1 326 0.0 1.0 es 09_hydro_pump 1 326 0.0 0.0 -es 01_solar 1 327 1.0 0.0 -es 02_wind_on 1 327 1.0 0.0 -es 03_wind_off 1 327 1.0 0.0 -es 04_res 1 327 1.0 0.0 -es 05_nuclear 1 327 1.0 0.0 -es 06_coal 1 327 1.0 0.0 -es 07_gas 1 327 1.0 0.0 -es 08_non-res 1 327 1.0 0.0 +es 01_solar 1 327 0.0 1.0 +es 02_wind_on 1 327 0.0 1.0 +es 03_wind_off 1 327 0.0 1.0 +es 04_res 1 327 0.0 1.0 +es 05_nuclear 1 327 0.0 1.0 +es 06_coal 1 327 0.0 1.0 +es 07_gas 1 327 0.0 1.0 +es 08_non-res 1 327 0.0 1.0 es 09_hydro_pump 1 327 0.0 0.0 -es 01_solar 1 328 1.0 0.0 -es 02_wind_on 1 328 1.0 0.0 -es 03_wind_off 1 328 1.0 0.0 -es 04_res 1 328 1.0 0.0 -es 05_nuclear 1 328 1.0 0.0 -es 06_coal 1 328 1.0 0.0 -es 07_gas 1 328 1.0 0.0 -es 08_non-res 1 328 1.0 0.0 +es 01_solar 1 328 0.0 1.0 +es 02_wind_on 1 328 0.0 1.0 +es 03_wind_off 1 328 0.0 1.0 +es 04_res 1 328 0.0 1.0 +es 05_nuclear 1 328 0.0 1.0 +es 06_coal 1 328 0.0 1.0 +es 07_gas 1 328 0.0 1.0 +es 08_non-res 1 328 0.0 1.0 es 09_hydro_pump 1 328 0.0 0.0 -es 01_solar 1 329 1.0 0.0 -es 02_wind_on 1 329 1.0 0.0 -es 03_wind_off 1 329 1.0 0.0 -es 04_res 1 329 1.0 0.0 -es 05_nuclear 1 329 1.0 0.0 -es 06_coal 1 329 1.0 0.0 -es 07_gas 1 329 1.0 0.0 -es 08_non-res 1 329 1.0 0.0 +es 01_solar 1 329 0.0 1.0 +es 02_wind_on 1 329 0.0 1.0 +es 03_wind_off 1 329 0.0 1.0 +es 04_res 1 329 0.0 1.0 +es 05_nuclear 1 329 0.0 1.0 +es 06_coal 1 329 0.0 1.0 +es 07_gas 1 329 0.0 1.0 +es 08_non-res 1 329 0.0 1.0 es 09_hydro_pump 1 329 0.0 0.0 -es 01_solar 1 330 1.0 0.0 -es 02_wind_on 1 330 1.0 0.0 -es 03_wind_off 1 330 1.0 0.0 -es 04_res 1 330 1.0 0.0 -es 05_nuclear 1 330 1.0 0.0 -es 06_coal 1 330 1.0 0.0 -es 07_gas 1 330 1.0 0.0 -es 08_non-res 1 330 1.0 0.0 -es 09_hydro_pump 1 330 1.0 0.0 -es 01_solar 1 331 1.0 0.0 -es 02_wind_on 1 331 1.0 0.0 -es 03_wind_off 1 331 1.0 0.0 -es 04_res 1 331 1.0 0.0 -es 05_nuclear 1 331 1.0 0.0 -es 06_coal 1 331 1.0 0.0 -es 07_gas 1 331 1.0 0.0 -es 08_non-res 1 331 1.0 0.0 -es 09_hydro_pump 1 331 1.0 0.0 -es 01_solar 1 332 1.0 0.0 -es 02_wind_on 1 332 1.0 0.0 -es 03_wind_off 1 332 1.0 0.0 -es 04_res 1 332 1.0 0.0 -es 05_nuclear 1 332 1.0 0.0 -es 06_coal 1 332 1.0 0.0 -es 07_gas 1 332 1.0 0.0 -es 08_non-res 1 332 1.0 0.0 -es 09_hydro_pump 1 332 1.0 0.0 -es 01_solar 1 333 1.0 0.0 -es 02_wind_on 1 333 1.0 0.0 -es 03_wind_off 1 333 1.0 0.0 -es 04_res 1 333 1.0 0.0 -es 05_nuclear 1 333 1.0 0.0 -es 06_coal 1 333 1.0 0.0 -es 07_gas 1 333 1.0 0.0 -es 08_non-res 1 333 1.0 0.0 -es 09_hydro_pump 1 333 1.0 0.0 -es 01_solar 1 334 1.0 0.0 -es 02_wind_on 1 334 1.0 0.0 -es 03_wind_off 1 334 1.0 0.0 -es 04_res 1 334 1.0 0.0 -es 05_nuclear 1 334 1.0 0.0 -es 06_coal 1 334 1.0 0.0 -es 07_gas 1 334 1.0 0.0 -es 08_non-res 1 334 1.0 0.0 -es 09_hydro_pump 1 334 1.0 0.0 -es 01_solar 1 335 1.0 0.0 -es 02_wind_on 1 335 1.0 0.0 -es 03_wind_off 1 335 1.0 0.0 -es 04_res 1 335 1.0 0.0 -es 05_nuclear 1 335 1.0 0.0 -es 06_coal 1 335 1.0 0.0 -es 07_gas 1 335 1.0 0.0 -es 08_non-res 1 335 1.0 0.0 -es 09_hydro_pump 1 335 1.0 0.0 -es 01_solar 1 336 1.0 0.0 -es 02_wind_on 1 336 1.0 0.0 -es 03_wind_off 1 336 1.0 0.0 -es 04_res 1 336 1.0 0.0 -es 05_nuclear 1 336 1.0 0.0 -es 06_coal 1 336 1.0 0.0 -es 07_gas 1 336 1.0 0.0 -es 08_non-res 1 336 1.0 0.0 -es 09_hydro_pump 1 336 1.0 0.0 +es 01_solar 1 330 0.0 1.0 +es 02_wind_on 1 330 0.0 1.0 +es 03_wind_off 1 330 0.0 1.0 +es 04_res 1 330 0.0 1.0 +es 05_nuclear 1 330 0.0 1.0 +es 06_coal 1 330 0.0 1.0 +es 07_gas 1 330 0.0 1.0 +es 08_non-res 1 330 0.0 1.0 +es 09_hydro_pump 1 330 0.0 1.0 +es 01_solar 1 331 0.0 1.0 +es 02_wind_on 1 331 0.0 1.0 +es 03_wind_off 1 331 0.0 1.0 +es 04_res 1 331 0.0 1.0 +es 05_nuclear 1 331 0.0 1.0 +es 06_coal 1 331 0.0 1.0 +es 07_gas 1 331 0.0 1.0 +es 08_non-res 1 331 0.0 1.0 +es 09_hydro_pump 1 331 0.0 1.0 +es 01_solar 1 332 0.0 1.0 +es 02_wind_on 1 332 0.0 1.0 +es 03_wind_off 1 332 0.0 1.0 +es 04_res 1 332 0.0 1.0 +es 05_nuclear 1 332 0.0 1.0 +es 06_coal 1 332 0.0 1.0 +es 07_gas 1 332 0.0 1.0 +es 08_non-res 1 332 0.0 1.0 +es 09_hydro_pump 1 332 0.0 1.0 +es 01_solar 1 333 0.0 1.0 +es 02_wind_on 1 333 0.0 1.0 +es 03_wind_off 1 333 0.0 1.0 +es 04_res 1 333 0.0 1.0 +es 05_nuclear 1 333 0.0 1.0 +es 06_coal 1 333 0.0 1.0 +es 07_gas 1 333 0.0 1.0 +es 08_non-res 1 333 0.0 1.0 +es 09_hydro_pump 1 333 0.0 1.0 +es 01_solar 1 334 0.0 1.0 +es 02_wind_on 1 334 0.0 1.0 +es 03_wind_off 1 334 0.0 1.0 +es 04_res 1 334 0.0 1.0 +es 05_nuclear 1 334 0.0 1.0 +es 06_coal 1 334 0.0 1.0 +es 07_gas 1 334 0.0 1.0 +es 08_non-res 1 334 0.0 1.0 +es 09_hydro_pump 1 334 0.0 1.0 +es 01_solar 1 335 0.0 1.0 +es 02_wind_on 1 335 0.0 1.0 +es 03_wind_off 1 335 0.0 1.0 +es 04_res 1 335 0.0 1.0 +es 05_nuclear 1 335 0.0 1.0 +es 06_coal 1 335 0.0 1.0 +es 07_gas 1 335 0.0 1.0 +es 08_non-res 1 335 0.0 1.0 +es 09_hydro_pump 1 335 0.0 1.0 +es 01_solar 1 336 0.0 1.0 +es 02_wind_on 1 336 0.0 1.0 +es 03_wind_off 1 336 0.0 1.0 +es 04_res 1 336 0.0 1.0 +es 05_nuclear 1 336 0.0 1.0 +es 06_coal 1 336 0.0 1.0 +es 07_gas 1 336 0.0 1.0 +es 08_non-res 1 336 0.0 1.0 +es 09_hydro_pump 1 336 0.0 1.0 fr 01_solar 1 1 0.0 0.0 fr 02_wind_on 1 1 0.0 0.0 fr 03_wind_off 1 1 0.0 0.0 @@ -6056,7 +6056,7 @@ fr 06_coal 1 1 0.0 0.0 fr 07_gas 1 1 0.0 0.0 fr 08_non-res 1 1 0.0 0.0 fr 09_hydro_pump 1 1 0.0 0.0 -fr 01_solar 1 2 1.0 0.0 +fr 01_solar 1 2 0.0 1.0 fr 02_wind_on 1 2 0.0 0.0 fr 03_wind_off 1 2 0.0 0.0 fr 04_res 1 2 0.0 0.0 @@ -6065,7 +6065,7 @@ fr 06_coal 1 2 0.0 0.0 fr 07_gas 1 2 0.0 0.0 fr 08_non-res 1 2 0.0 0.0 fr 09_hydro_pump 1 2 0.0 0.0 -fr 01_solar 1 3 1.0 0.0 +fr 01_solar 1 3 0.0 1.0 fr 02_wind_on 1 3 0.0 0.0 fr 03_wind_off 1 3 0.0 0.0 fr 04_res 1 3 0.0 0.0 @@ -6074,7 +6074,7 @@ fr 06_coal 1 3 0.0 0.0 fr 07_gas 1 3 0.0 0.0 fr 08_non-res 1 3 0.0 0.0 fr 09_hydro_pump 1 3 0.0 0.0 -fr 01_solar 1 4 1.0 0.0 +fr 01_solar 1 4 0.0 1.0 fr 02_wind_on 1 4 0.0 0.0 fr 03_wind_off 1 4 0.0 0.0 fr 04_res 1 4 0.0 0.0 @@ -6083,7 +6083,7 @@ fr 06_coal 1 4 0.0 0.0 fr 07_gas 1 4 0.0 0.0 fr 08_non-res 1 4 0.0 0.0 fr 09_hydro_pump 1 4 0.0 0.0 -fr 01_solar 1 5 1.0 0.0 +fr 01_solar 1 5 0.0 1.0 fr 02_wind_on 1 5 0.0 0.0 fr 03_wind_off 1 5 0.0 0.0 fr 04_res 1 5 0.0 0.0 @@ -6092,7 +6092,7 @@ fr 06_coal 1 5 0.0 0.0 fr 07_gas 1 5 0.0 0.0 fr 08_non-res 1 5 0.0 0.0 fr 09_hydro_pump 1 5 0.0 0.0 -fr 01_solar 1 6 1.0 0.0 +fr 01_solar 1 6 0.0 1.0 fr 02_wind_on 1 6 0.0 0.0 fr 03_wind_off 1 6 0.0 0.0 fr 04_res 1 6 0.0 0.0 @@ -6101,7 +6101,7 @@ fr 06_coal 1 6 0.0 0.0 fr 07_gas 1 6 0.0 0.0 fr 08_non-res 1 6 0.0 0.0 fr 09_hydro_pump 1 6 0.0 0.0 -fr 01_solar 1 7 1.0 0.0 +fr 01_solar 1 7 0.0 1.0 fr 02_wind_on 1 7 0.0 0.0 fr 03_wind_off 1 7 0.0 0.0 fr 04_res 1 7 0.0 0.0 @@ -6110,7 +6110,7 @@ fr 06_coal 1 7 0.0 0.0 fr 07_gas 1 7 0.0 0.0 fr 08_non-res 1 7 0.0 0.0 fr 09_hydro_pump 1 7 0.0 0.0 -fr 01_solar 1 8 1.0 0.0 +fr 01_solar 1 8 0.0 1.0 fr 02_wind_on 1 8 0.0 0.0 fr 03_wind_off 1 8 0.0 0.0 fr 04_res 1 8 0.0 0.0 @@ -6119,7 +6119,7 @@ fr 06_coal 1 8 0.0 0.0 fr 07_gas 1 8 0.0 0.0 fr 08_non-res 1 8 0.0 0.0 fr 09_hydro_pump 1 8 0.0 0.0 -fr 01_solar 1 9 1.0 0.0 +fr 01_solar 1 9 0.0 1.0 fr 02_wind_on 1 9 0.0 0.0 fr 03_wind_off 1 9 0.0 0.0 fr 04_res 1 9 0.0 0.0 @@ -6128,7 +6128,7 @@ fr 06_coal 1 9 0.0 0.0 fr 07_gas 1 9 0.0 0.0 fr 08_non-res 1 9 0.0 0.0 fr 09_hydro_pump 1 9 0.0 0.0 -fr 01_solar 1 10 1.0 0.0 +fr 01_solar 1 10 0.0 1.0 fr 02_wind_on 1 10 0.0 0.0 fr 03_wind_off 1 10 0.0 0.0 fr 04_res 1 10 0.0 0.0 @@ -6137,7 +6137,7 @@ fr 06_coal 1 10 0.0 0.0 fr 07_gas 1 10 0.0 0.0 fr 08_non-res 1 10 0.0 0.0 fr 09_hydro_pump 1 10 0.0 0.0 -fr 01_solar 1 11 1.0 0.0 +fr 01_solar 1 11 0.0 1.0 fr 02_wind_on 1 11 0.0 0.0 fr 03_wind_off 1 11 0.0 0.0 fr 04_res 1 11 0.0 0.0 @@ -6146,7 +6146,7 @@ fr 06_coal 1 11 0.0 0.0 fr 07_gas 1 11 0.0 0.0 fr 08_non-res 1 11 0.0 0.0 fr 09_hydro_pump 1 11 0.0 0.0 -fr 01_solar 1 12 1.0 0.0 +fr 01_solar 1 12 0.0 1.0 fr 02_wind_on 1 12 0.0 0.0 fr 03_wind_off 1 12 0.0 0.0 fr 04_res 1 12 0.0 0.0 @@ -6155,7 +6155,7 @@ fr 06_coal 1 12 0.0 0.0 fr 07_gas 1 12 0.0 0.0 fr 08_non-res 1 12 0.0 0.0 fr 09_hydro_pump 1 12 0.0 0.0 -fr 01_solar 1 13 1.0 0.0 +fr 01_solar 1 13 0.0 1.0 fr 02_wind_on 1 13 0.0 0.0 fr 03_wind_off 1 13 0.0 0.0 fr 04_res 1 13 0.0 0.0 @@ -6164,7 +6164,7 @@ fr 06_coal 1 13 0.0 0.0 fr 07_gas 1 13 0.0 0.0 fr 08_non-res 1 13 0.0 0.0 fr 09_hydro_pump 1 13 0.0 0.0 -fr 01_solar 1 14 1.0 0.0 +fr 01_solar 1 14 0.0 1.0 fr 02_wind_on 1 14 0.0 0.0 fr 03_wind_off 1 14 0.0 0.0 fr 04_res 1 14 0.0 0.0 @@ -6173,7 +6173,7 @@ fr 06_coal 1 14 0.0 0.0 fr 07_gas 1 14 0.0 0.0 fr 08_non-res 1 14 0.0 0.0 fr 09_hydro_pump 1 14 0.0 0.0 -fr 01_solar 1 15 1.0 0.0 +fr 01_solar 1 15 0.0 1.0 fr 02_wind_on 1 15 0.0 0.0 fr 03_wind_off 1 15 0.0 0.0 fr 04_res 1 15 0.0 0.0 @@ -6182,7 +6182,7 @@ fr 06_coal 1 15 0.0 0.0 fr 07_gas 1 15 0.0 0.0 fr 08_non-res 1 15 0.0 0.0 fr 09_hydro_pump 1 15 0.0 0.0 -fr 01_solar 1 16 1.0 0.0 +fr 01_solar 1 16 0.0 1.0 fr 02_wind_on 1 16 0.0 0.0 fr 03_wind_off 1 16 0.0 0.0 fr 04_res 1 16 0.0 0.0 @@ -6191,7 +6191,7 @@ fr 06_coal 1 16 0.0 0.0 fr 07_gas 1 16 0.0 0.0 fr 08_non-res 1 16 0.0 0.0 fr 09_hydro_pump 1 16 0.0 0.0 -fr 01_solar 1 17 1.0 0.0 +fr 01_solar 1 17 0.0 1.0 fr 02_wind_on 1 17 0.0 0.0 fr 03_wind_off 1 17 0.0 0.0 fr 04_res 1 17 0.0 0.0 @@ -6200,7 +6200,7 @@ fr 06_coal 1 17 0.0 0.0 fr 07_gas 1 17 0.0 0.0 fr 08_non-res 1 17 0.0 0.0 fr 09_hydro_pump 1 17 0.0 0.0 -fr 01_solar 1 18 1.0 0.0 +fr 01_solar 1 18 0.0 1.0 fr 02_wind_on 1 18 0.0 0.0 fr 03_wind_off 1 18 0.0 0.0 fr 04_res 1 18 0.0 0.0 @@ -6209,7 +6209,7 @@ fr 06_coal 1 18 0.0 0.0 fr 07_gas 1 18 0.0 0.0 fr 08_non-res 1 18 0.0 0.0 fr 09_hydro_pump 1 18 0.0 0.0 -fr 01_solar 1 19 1.0 0.0 +fr 01_solar 1 19 0.0 1.0 fr 02_wind_on 1 19 0.0 0.0 fr 03_wind_off 1 19 0.0 0.0 fr 04_res 1 19 0.0 0.0 @@ -6218,7 +6218,7 @@ fr 06_coal 1 19 0.0 0.0 fr 07_gas 1 19 0.0 0.0 fr 08_non-res 1 19 0.0 0.0 fr 09_hydro_pump 1 19 0.0 0.0 -fr 01_solar 1 20 1.0 0.0 +fr 01_solar 1 20 0.0 1.0 fr 02_wind_on 1 20 0.0 0.0 fr 03_wind_off 1 20 0.0 0.0 fr 04_res 1 20 0.0 0.0 @@ -6227,7 +6227,7 @@ fr 06_coal 1 20 0.0 0.0 fr 07_gas 1 20 0.0 0.0 fr 08_non-res 1 20 0.0 0.0 fr 09_hydro_pump 1 20 0.0 0.0 -fr 01_solar 1 21 1.0 0.0 +fr 01_solar 1 21 0.0 1.0 fr 02_wind_on 1 21 0.0 0.0 fr 03_wind_off 1 21 0.0 0.0 fr 04_res 1 21 0.0 0.0 @@ -6236,8 +6236,8 @@ fr 06_coal 1 21 0.0 0.0 fr 07_gas 1 21 0.0 0.0 fr 08_non-res 1 21 0.0 0.0 fr 09_hydro_pump 1 21 0.0 0.0 -fr 01_solar 1 22 1.0 0.0 -fr 02_wind_on 1 22 1.0 0.0 +fr 01_solar 1 22 0.0 1.0 +fr 02_wind_on 1 22 0.0 1.0 fr 03_wind_off 1 22 0.0 0.0 fr 04_res 1 22 0.0 0.0 fr 05_nuclear 1 22 0.0 0.0 @@ -6245,8 +6245,8 @@ fr 06_coal 1 22 0.0 0.0 fr 07_gas 1 22 0.0 0.0 fr 08_non-res 1 22 0.0 0.0 fr 09_hydro_pump 1 22 0.0 0.0 -fr 01_solar 1 23 1.0 0.0 -fr 02_wind_on 1 23 1.0 0.0 +fr 01_solar 1 23 0.0 1.0 +fr 02_wind_on 1 23 0.0 1.0 fr 03_wind_off 1 23 0.0 0.0 fr 04_res 1 23 0.0 0.0 fr 05_nuclear 1 23 0.0 0.0 @@ -6254,8 +6254,8 @@ fr 06_coal 1 23 0.0 0.0 fr 07_gas 1 23 0.0 0.0 fr 08_non-res 1 23 0.0 0.0 fr 09_hydro_pump 1 23 0.0 0.0 -fr 01_solar 1 24 1.0 0.0 -fr 02_wind_on 1 24 1.0 0.0 +fr 01_solar 1 24 0.0 1.0 +fr 02_wind_on 1 24 0.0 1.0 fr 03_wind_off 1 24 0.0 0.0 fr 04_res 1 24 0.0 0.0 fr 05_nuclear 1 24 0.0 0.0 @@ -6263,8 +6263,8 @@ fr 06_coal 1 24 0.0 0.0 fr 07_gas 1 24 0.0 0.0 fr 08_non-res 1 24 0.0 0.0 fr 09_hydro_pump 1 24 0.0 0.0 -fr 01_solar 1 25 1.0 0.0 -fr 02_wind_on 1 25 1.0 0.0 +fr 01_solar 1 25 0.0 1.0 +fr 02_wind_on 1 25 0.0 1.0 fr 03_wind_off 1 25 0.0 0.0 fr 04_res 1 25 0.0 0.0 fr 05_nuclear 1 25 0.0 0.0 @@ -6272,8 +6272,8 @@ fr 06_coal 1 25 0.0 0.0 fr 07_gas 1 25 0.0 0.0 fr 08_non-res 1 25 0.0 0.0 fr 09_hydro_pump 1 25 0.0 0.0 -fr 01_solar 1 26 1.0 0.0 -fr 02_wind_on 1 26 1.0 0.0 +fr 01_solar 1 26 0.0 1.0 +fr 02_wind_on 1 26 0.0 1.0 fr 03_wind_off 1 26 0.0 0.0 fr 04_res 1 26 0.0 0.0 fr 05_nuclear 1 26 0.0 0.0 @@ -6281,8 +6281,8 @@ fr 06_coal 1 26 0.0 0.0 fr 07_gas 1 26 0.0 0.0 fr 08_non-res 1 26 0.0 0.0 fr 09_hydro_pump 1 26 0.0 0.0 -fr 01_solar 1 27 1.0 0.0 -fr 02_wind_on 1 27 1.0 0.0 +fr 01_solar 1 27 0.0 1.0 +fr 02_wind_on 1 27 0.0 1.0 fr 03_wind_off 1 27 0.0 0.0 fr 04_res 1 27 0.0 0.0 fr 05_nuclear 1 27 0.0 0.0 @@ -6290,8 +6290,8 @@ fr 06_coal 1 27 0.0 0.0 fr 07_gas 1 27 0.0 0.0 fr 08_non-res 1 27 0.0 0.0 fr 09_hydro_pump 1 27 0.0 0.0 -fr 01_solar 1 28 1.0 0.0 -fr 02_wind_on 1 28 1.0 0.0 +fr 01_solar 1 28 0.0 1.0 +fr 02_wind_on 1 28 0.0 1.0 fr 03_wind_off 1 28 0.0 0.0 fr 04_res 1 28 0.0 0.0 fr 05_nuclear 1 28 0.0 0.0 @@ -6299,8 +6299,8 @@ fr 06_coal 1 28 0.0 0.0 fr 07_gas 1 28 0.0 0.0 fr 08_non-res 1 28 0.0 0.0 fr 09_hydro_pump 1 28 0.0 0.0 -fr 01_solar 1 29 1.0 0.0 -fr 02_wind_on 1 29 1.0 0.0 +fr 01_solar 1 29 0.0 1.0 +fr 02_wind_on 1 29 0.0 1.0 fr 03_wind_off 1 29 0.0 0.0 fr 04_res 1 29 0.0 0.0 fr 05_nuclear 1 29 0.0 0.0 @@ -6308,8 +6308,8 @@ fr 06_coal 1 29 0.0 0.0 fr 07_gas 1 29 0.0 0.0 fr 08_non-res 1 29 0.0 0.0 fr 09_hydro_pump 1 29 0.0 0.0 -fr 01_solar 1 30 1.0 0.0 -fr 02_wind_on 1 30 1.0 0.0 +fr 01_solar 1 30 0.0 1.0 +fr 02_wind_on 1 30 0.0 1.0 fr 03_wind_off 1 30 0.0 0.0 fr 04_res 1 30 0.0 0.0 fr 05_nuclear 1 30 0.0 0.0 @@ -6317,8 +6317,8 @@ fr 06_coal 1 30 0.0 0.0 fr 07_gas 1 30 0.0 0.0 fr 08_non-res 1 30 0.0 0.0 fr 09_hydro_pump 1 30 0.0 0.0 -fr 01_solar 1 31 1.0 0.0 -fr 02_wind_on 1 31 1.0 0.0 +fr 01_solar 1 31 0.0 1.0 +fr 02_wind_on 1 31 0.0 1.0 fr 03_wind_off 1 31 0.0 0.0 fr 04_res 1 31 0.0 0.0 fr 05_nuclear 1 31 0.0 0.0 @@ -6326,8 +6326,8 @@ fr 06_coal 1 31 0.0 0.0 fr 07_gas 1 31 0.0 0.0 fr 08_non-res 1 31 0.0 0.0 fr 09_hydro_pump 1 31 0.0 0.0 -fr 01_solar 1 32 1.0 0.0 -fr 02_wind_on 1 32 1.0 0.0 +fr 01_solar 1 32 0.0 1.0 +fr 02_wind_on 1 32 0.0 1.0 fr 03_wind_off 1 32 0.0 0.0 fr 04_res 1 32 0.0 0.0 fr 05_nuclear 1 32 0.0 0.0 @@ -6335,8 +6335,8 @@ fr 06_coal 1 32 0.0 0.0 fr 07_gas 1 32 0.0 0.0 fr 08_non-res 1 32 0.0 0.0 fr 09_hydro_pump 1 32 0.0 0.0 -fr 01_solar 1 33 1.0 0.0 -fr 02_wind_on 1 33 1.0 0.0 +fr 01_solar 1 33 0.0 1.0 +fr 02_wind_on 1 33 0.0 1.0 fr 03_wind_off 1 33 0.0 0.0 fr 04_res 1 33 0.0 0.0 fr 05_nuclear 1 33 0.0 0.0 @@ -6344,8 +6344,8 @@ fr 06_coal 1 33 0.0 0.0 fr 07_gas 1 33 0.0 0.0 fr 08_non-res 1 33 0.0 0.0 fr 09_hydro_pump 1 33 0.0 0.0 -fr 01_solar 1 34 1.0 0.0 -fr 02_wind_on 1 34 1.0 0.0 +fr 01_solar 1 34 0.0 1.0 +fr 02_wind_on 1 34 0.0 1.0 fr 03_wind_off 1 34 0.0 0.0 fr 04_res 1 34 0.0 0.0 fr 05_nuclear 1 34 0.0 0.0 @@ -6353,8 +6353,8 @@ fr 06_coal 1 34 0.0 0.0 fr 07_gas 1 34 0.0 0.0 fr 08_non-res 1 34 0.0 0.0 fr 09_hydro_pump 1 34 0.0 0.0 -fr 01_solar 1 35 1.0 0.0 -fr 02_wind_on 1 35 1.0 0.0 +fr 01_solar 1 35 0.0 1.0 +fr 02_wind_on 1 35 0.0 1.0 fr 03_wind_off 1 35 0.0 0.0 fr 04_res 1 35 0.0 0.0 fr 05_nuclear 1 35 0.0 0.0 @@ -6362,8 +6362,8 @@ fr 06_coal 1 35 0.0 0.0 fr 07_gas 1 35 0.0 0.0 fr 08_non-res 1 35 0.0 0.0 fr 09_hydro_pump 1 35 0.0 0.0 -fr 01_solar 1 36 1.0 0.0 -fr 02_wind_on 1 36 1.0 0.0 +fr 01_solar 1 36 0.0 1.0 +fr 02_wind_on 1 36 0.0 1.0 fr 03_wind_off 1 36 0.0 0.0 fr 04_res 1 36 0.0 0.0 fr 05_nuclear 1 36 0.0 0.0 @@ -6371,8 +6371,8 @@ fr 06_coal 1 36 0.0 0.0 fr 07_gas 1 36 0.0 0.0 fr 08_non-res 1 36 0.0 0.0 fr 09_hydro_pump 1 36 0.0 0.0 -fr 01_solar 1 37 1.0 0.0 -fr 02_wind_on 1 37 1.0 0.0 +fr 01_solar 1 37 0.0 1.0 +fr 02_wind_on 1 37 0.0 1.0 fr 03_wind_off 1 37 0.0 0.0 fr 04_res 1 37 0.0 0.0 fr 05_nuclear 1 37 0.0 0.0 @@ -6380,8 +6380,8 @@ fr 06_coal 1 37 0.0 0.0 fr 07_gas 1 37 0.0 0.0 fr 08_non-res 1 37 0.0 0.0 fr 09_hydro_pump 1 37 0.0 0.0 -fr 01_solar 1 38 1.0 0.0 -fr 02_wind_on 1 38 1.0 0.0 +fr 01_solar 1 38 0.0 1.0 +fr 02_wind_on 1 38 0.0 1.0 fr 03_wind_off 1 38 0.0 0.0 fr 04_res 1 38 0.0 0.0 fr 05_nuclear 1 38 0.0 0.0 @@ -6389,8 +6389,8 @@ fr 06_coal 1 38 0.0 0.0 fr 07_gas 1 38 0.0 0.0 fr 08_non-res 1 38 0.0 0.0 fr 09_hydro_pump 1 38 0.0 0.0 -fr 01_solar 1 39 1.0 0.0 -fr 02_wind_on 1 39 1.0 0.0 +fr 01_solar 1 39 0.0 1.0 +fr 02_wind_on 1 39 0.0 1.0 fr 03_wind_off 1 39 0.0 0.0 fr 04_res 1 39 0.0 0.0 fr 05_nuclear 1 39 0.0 0.0 @@ -6398,8 +6398,8 @@ fr 06_coal 1 39 0.0 0.0 fr 07_gas 1 39 0.0 0.0 fr 08_non-res 1 39 0.0 0.0 fr 09_hydro_pump 1 39 0.0 0.0 -fr 01_solar 1 40 1.0 0.0 -fr 02_wind_on 1 40 1.0 0.0 +fr 01_solar 1 40 0.0 1.0 +fr 02_wind_on 1 40 0.0 1.0 fr 03_wind_off 1 40 0.0 0.0 fr 04_res 1 40 0.0 0.0 fr 05_nuclear 1 40 0.0 0.0 @@ -6407,8 +6407,8 @@ fr 06_coal 1 40 0.0 0.0 fr 07_gas 1 40 0.0 0.0 fr 08_non-res 1 40 0.0 0.0 fr 09_hydro_pump 1 40 0.0 0.0 -fr 01_solar 1 41 1.0 0.0 -fr 02_wind_on 1 41 1.0 0.0 +fr 01_solar 1 41 0.0 1.0 +fr 02_wind_on 1 41 0.0 1.0 fr 03_wind_off 1 41 0.0 0.0 fr 04_res 1 41 0.0 0.0 fr 05_nuclear 1 41 0.0 0.0 @@ -6416,1149 +6416,1149 @@ fr 06_coal 1 41 0.0 0.0 fr 07_gas 1 41 0.0 0.0 fr 08_non-res 1 41 0.0 0.0 fr 09_hydro_pump 1 41 0.0 0.0 -fr 01_solar 1 42 1.0 0.0 -fr 02_wind_on 1 42 1.0 0.0 -fr 03_wind_off 1 42 1.0 0.0 +fr 01_solar 1 42 0.0 1.0 +fr 02_wind_on 1 42 0.0 1.0 +fr 03_wind_off 1 42 0.0 1.0 fr 04_res 1 42 0.0 0.0 fr 05_nuclear 1 42 0.0 0.0 fr 06_coal 1 42 0.0 0.0 fr 07_gas 1 42 0.0 0.0 fr 08_non-res 1 42 0.0 0.0 fr 09_hydro_pump 1 42 0.0 0.0 -fr 01_solar 1 43 1.0 0.0 -fr 02_wind_on 1 43 1.0 0.0 -fr 03_wind_off 1 43 1.0 0.0 +fr 01_solar 1 43 0.0 1.0 +fr 02_wind_on 1 43 0.0 1.0 +fr 03_wind_off 1 43 0.0 1.0 fr 04_res 1 43 0.0 0.0 fr 05_nuclear 1 43 0.0 0.0 fr 06_coal 1 43 0.0 0.0 fr 07_gas 1 43 0.0 0.0 fr 08_non-res 1 43 0.0 0.0 fr 09_hydro_pump 1 43 0.0 0.0 -fr 01_solar 1 44 1.0 0.0 -fr 02_wind_on 1 44 1.0 0.0 -fr 03_wind_off 1 44 1.0 0.0 +fr 01_solar 1 44 0.0 1.0 +fr 02_wind_on 1 44 0.0 1.0 +fr 03_wind_off 1 44 0.0 1.0 fr 04_res 1 44 0.0 0.0 fr 05_nuclear 1 44 0.0 0.0 fr 06_coal 1 44 0.0 0.0 fr 07_gas 1 44 0.0 0.0 fr 08_non-res 1 44 0.0 0.0 fr 09_hydro_pump 1 44 0.0 0.0 -fr 01_solar 1 45 1.0 0.0 -fr 02_wind_on 1 45 1.0 0.0 -fr 03_wind_off 1 45 1.0 0.0 +fr 01_solar 1 45 0.0 1.0 +fr 02_wind_on 1 45 0.0 1.0 +fr 03_wind_off 1 45 0.0 1.0 fr 04_res 1 45 0.0 0.0 fr 05_nuclear 1 45 0.0 0.0 fr 06_coal 1 45 0.0 0.0 fr 07_gas 1 45 0.0 0.0 fr 08_non-res 1 45 0.0 0.0 fr 09_hydro_pump 1 45 0.0 0.0 -fr 01_solar 1 46 1.0 0.0 -fr 02_wind_on 1 46 1.0 0.0 -fr 03_wind_off 1 46 1.0 0.0 +fr 01_solar 1 46 0.0 1.0 +fr 02_wind_on 1 46 0.0 1.0 +fr 03_wind_off 1 46 0.0 1.0 fr 04_res 1 46 0.0 0.0 fr 05_nuclear 1 46 0.0 0.0 fr 06_coal 1 46 0.0 0.0 fr 07_gas 1 46 0.0 0.0 fr 08_non-res 1 46 0.0 0.0 fr 09_hydro_pump 1 46 0.0 0.0 -fr 01_solar 1 47 1.0 0.0 -fr 02_wind_on 1 47 1.0 0.0 -fr 03_wind_off 1 47 1.0 0.0 +fr 01_solar 1 47 0.0 1.0 +fr 02_wind_on 1 47 0.0 1.0 +fr 03_wind_off 1 47 0.0 1.0 fr 04_res 1 47 0.0 0.0 fr 05_nuclear 1 47 0.0 0.0 fr 06_coal 1 47 0.0 0.0 fr 07_gas 1 47 0.0 0.0 fr 08_non-res 1 47 0.0 0.0 fr 09_hydro_pump 1 47 0.0 0.0 -fr 01_solar 1 48 1.0 0.0 -fr 02_wind_on 1 48 1.0 0.0 -fr 03_wind_off 1 48 1.0 0.0 +fr 01_solar 1 48 0.0 1.0 +fr 02_wind_on 1 48 0.0 1.0 +fr 03_wind_off 1 48 0.0 1.0 fr 04_res 1 48 0.0 0.0 fr 05_nuclear 1 48 0.0 0.0 fr 06_coal 1 48 0.0 0.0 fr 07_gas 1 48 0.0 0.0 fr 08_non-res 1 48 0.0 0.0 fr 09_hydro_pump 1 48 0.0 0.0 -fr 01_solar 1 49 1.0 0.0 -fr 02_wind_on 1 49 1.0 0.0 -fr 03_wind_off 1 49 1.0 0.0 +fr 01_solar 1 49 0.0 1.0 +fr 02_wind_on 1 49 0.0 1.0 +fr 03_wind_off 1 49 0.0 1.0 fr 04_res 1 49 0.0 0.0 fr 05_nuclear 1 49 0.0 0.0 fr 06_coal 1 49 0.0 0.0 fr 07_gas 1 49 0.0 0.0 fr 08_non-res 1 49 0.0 0.0 fr 09_hydro_pump 1 49 0.0 0.0 -fr 01_solar 1 50 1.0 0.0 -fr 02_wind_on 1 50 1.0 0.0 -fr 03_wind_off 1 50 1.0 0.0 +fr 01_solar 1 50 0.0 1.0 +fr 02_wind_on 1 50 0.0 1.0 +fr 03_wind_off 1 50 0.0 1.0 fr 04_res 1 50 0.0 0.0 fr 05_nuclear 1 50 0.0 0.0 fr 06_coal 1 50 0.0 0.0 fr 07_gas 1 50 0.0 0.0 fr 08_non-res 1 50 0.0 0.0 fr 09_hydro_pump 1 50 0.0 0.0 -fr 01_solar 1 51 1.0 0.0 -fr 02_wind_on 1 51 1.0 0.0 -fr 03_wind_off 1 51 1.0 0.0 +fr 01_solar 1 51 0.0 1.0 +fr 02_wind_on 1 51 0.0 1.0 +fr 03_wind_off 1 51 0.0 1.0 fr 04_res 1 51 0.0 0.0 fr 05_nuclear 1 51 0.0 0.0 fr 06_coal 1 51 0.0 0.0 fr 07_gas 1 51 0.0 0.0 fr 08_non-res 1 51 0.0 0.0 fr 09_hydro_pump 1 51 0.0 0.0 -fr 01_solar 1 52 1.0 0.0 -fr 02_wind_on 1 52 1.0 0.0 -fr 03_wind_off 1 52 1.0 0.0 +fr 01_solar 1 52 0.0 1.0 +fr 02_wind_on 1 52 0.0 1.0 +fr 03_wind_off 1 52 0.0 1.0 fr 04_res 1 52 0.0 0.0 fr 05_nuclear 1 52 0.0 0.0 fr 06_coal 1 52 0.0 0.0 fr 07_gas 1 52 0.0 0.0 fr 08_non-res 1 52 0.0 0.0 fr 09_hydro_pump 1 52 0.0 0.0 -fr 01_solar 1 53 1.0 0.0 -fr 02_wind_on 1 53 1.0 0.0 -fr 03_wind_off 1 53 1.0 0.0 +fr 01_solar 1 53 0.0 1.0 +fr 02_wind_on 1 53 0.0 1.0 +fr 03_wind_off 1 53 0.0 1.0 fr 04_res 1 53 0.0 0.0 fr 05_nuclear 1 53 0.0 0.0 fr 06_coal 1 53 0.0 0.0 fr 07_gas 1 53 0.0 0.0 fr 08_non-res 1 53 0.0 0.0 fr 09_hydro_pump 1 53 0.0 0.0 -fr 01_solar 1 54 1.0 0.0 -fr 02_wind_on 1 54 1.0 0.0 -fr 03_wind_off 1 54 1.0 0.0 +fr 01_solar 1 54 0.0 1.0 +fr 02_wind_on 1 54 0.0 1.0 +fr 03_wind_off 1 54 0.0 1.0 fr 04_res 1 54 0.0 0.0 fr 05_nuclear 1 54 0.0 0.0 fr 06_coal 1 54 0.0 0.0 fr 07_gas 1 54 0.0 0.0 fr 08_non-res 1 54 0.0 0.0 fr 09_hydro_pump 1 54 0.0 0.0 -fr 01_solar 1 55 1.0 0.0 -fr 02_wind_on 1 55 1.0 0.0 -fr 03_wind_off 1 55 1.0 0.0 +fr 01_solar 1 55 0.0 1.0 +fr 02_wind_on 1 55 0.0 1.0 +fr 03_wind_off 1 55 0.0 1.0 fr 04_res 1 55 0.0 0.0 fr 05_nuclear 1 55 0.0 0.0 fr 06_coal 1 55 0.0 0.0 fr 07_gas 1 55 0.0 0.0 fr 08_non-res 1 55 0.0 0.0 fr 09_hydro_pump 1 55 0.0 0.0 -fr 01_solar 1 56 1.0 0.0 -fr 02_wind_on 1 56 1.0 0.0 -fr 03_wind_off 1 56 1.0 0.0 +fr 01_solar 1 56 0.0 1.0 +fr 02_wind_on 1 56 0.0 1.0 +fr 03_wind_off 1 56 0.0 1.0 fr 04_res 1 56 0.0 0.0 fr 05_nuclear 1 56 0.0 0.0 fr 06_coal 1 56 0.0 0.0 fr 07_gas 1 56 0.0 0.0 fr 08_non-res 1 56 0.0 0.0 fr 09_hydro_pump 1 56 0.0 0.0 -fr 01_solar 1 57 1.0 0.0 -fr 02_wind_on 1 57 1.0 0.0 -fr 03_wind_off 1 57 1.0 0.0 +fr 01_solar 1 57 0.0 1.0 +fr 02_wind_on 1 57 0.0 1.0 +fr 03_wind_off 1 57 0.0 1.0 fr 04_res 1 57 0.0 0.0 fr 05_nuclear 1 57 0.0 0.0 fr 06_coal 1 57 0.0 0.0 fr 07_gas 1 57 0.0 0.0 fr 08_non-res 1 57 0.0 0.0 fr 09_hydro_pump 1 57 0.0 0.0 -fr 01_solar 1 58 1.0 0.0 -fr 02_wind_on 1 58 1.0 0.0 -fr 03_wind_off 1 58 1.0 0.0 +fr 01_solar 1 58 0.0 1.0 +fr 02_wind_on 1 58 0.0 1.0 +fr 03_wind_off 1 58 0.0 1.0 fr 04_res 1 58 0.0 0.0 fr 05_nuclear 1 58 0.0 0.0 fr 06_coal 1 58 0.0 0.0 fr 07_gas 1 58 0.0 0.0 fr 08_non-res 1 58 0.0 0.0 fr 09_hydro_pump 1 58 0.0 0.0 -fr 01_solar 1 59 1.0 0.0 -fr 02_wind_on 1 59 1.0 0.0 -fr 03_wind_off 1 59 1.0 0.0 +fr 01_solar 1 59 0.0 1.0 +fr 02_wind_on 1 59 0.0 1.0 +fr 03_wind_off 1 59 0.0 1.0 fr 04_res 1 59 0.0 0.0 fr 05_nuclear 1 59 0.0 0.0 fr 06_coal 1 59 0.0 0.0 fr 07_gas 1 59 0.0 0.0 fr 08_non-res 1 59 0.0 0.0 fr 09_hydro_pump 1 59 0.0 0.0 -fr 01_solar 1 60 1.0 0.0 -fr 02_wind_on 1 60 1.0 0.0 -fr 03_wind_off 1 60 1.0 0.0 +fr 01_solar 1 60 0.0 1.0 +fr 02_wind_on 1 60 0.0 1.0 +fr 03_wind_off 1 60 0.0 1.0 fr 04_res 1 60 0.0 0.0 fr 05_nuclear 1 60 0.0 0.0 fr 06_coal 1 60 0.0 0.0 fr 07_gas 1 60 0.0 0.0 fr 08_non-res 1 60 0.0 0.0 fr 09_hydro_pump 1 60 0.0 0.0 -fr 01_solar 1 61 1.0 0.0 -fr 02_wind_on 1 61 1.0 0.0 -fr 03_wind_off 1 61 1.0 0.0 +fr 01_solar 1 61 0.0 1.0 +fr 02_wind_on 1 61 0.0 1.0 +fr 03_wind_off 1 61 0.0 1.0 fr 04_res 1 61 0.0 0.0 fr 05_nuclear 1 61 0.0 0.0 fr 06_coal 1 61 0.0 0.0 fr 07_gas 1 61 0.0 0.0 fr 08_non-res 1 61 0.0 0.0 fr 09_hydro_pump 1 61 0.0 0.0 -fr 01_solar 1 62 1.0 0.0 -fr 02_wind_on 1 62 1.0 0.0 -fr 03_wind_off 1 62 1.0 0.0 -fr 04_res 1 62 1.0 0.0 +fr 01_solar 1 62 0.0 1.0 +fr 02_wind_on 1 62 0.0 1.0 +fr 03_wind_off 1 62 0.0 1.0 +fr 04_res 1 62 0.0 1.0 fr 05_nuclear 1 62 0.0 0.0 fr 06_coal 1 62 0.0 0.0 fr 07_gas 1 62 0.0 0.0 fr 08_non-res 1 62 0.0 0.0 fr 09_hydro_pump 1 62 0.0 0.0 -fr 01_solar 1 63 1.0 0.0 -fr 02_wind_on 1 63 1.0 0.0 -fr 03_wind_off 1 63 1.0 0.0 -fr 04_res 1 63 1.0 0.0 +fr 01_solar 1 63 0.0 1.0 +fr 02_wind_on 1 63 0.0 1.0 +fr 03_wind_off 1 63 0.0 1.0 +fr 04_res 1 63 0.0 1.0 fr 05_nuclear 1 63 0.0 0.0 fr 06_coal 1 63 0.0 0.0 fr 07_gas 1 63 0.0 0.0 fr 08_non-res 1 63 0.0 0.0 fr 09_hydro_pump 1 63 0.0 0.0 -fr 01_solar 1 64 1.0 0.0 -fr 02_wind_on 1 64 1.0 0.0 -fr 03_wind_off 1 64 1.0 0.0 -fr 04_res 1 64 1.0 0.0 +fr 01_solar 1 64 0.0 1.0 +fr 02_wind_on 1 64 0.0 1.0 +fr 03_wind_off 1 64 0.0 1.0 +fr 04_res 1 64 0.0 1.0 fr 05_nuclear 1 64 0.0 0.0 fr 06_coal 1 64 0.0 0.0 fr 07_gas 1 64 0.0 0.0 fr 08_non-res 1 64 0.0 0.0 fr 09_hydro_pump 1 64 0.0 0.0 -fr 01_solar 1 65 1.0 0.0 -fr 02_wind_on 1 65 1.0 0.0 -fr 03_wind_off 1 65 1.0 0.0 -fr 04_res 1 65 1.0 0.0 +fr 01_solar 1 65 0.0 1.0 +fr 02_wind_on 1 65 0.0 1.0 +fr 03_wind_off 1 65 0.0 1.0 +fr 04_res 1 65 0.0 1.0 fr 05_nuclear 1 65 0.0 0.0 fr 06_coal 1 65 0.0 0.0 fr 07_gas 1 65 0.0 0.0 fr 08_non-res 1 65 0.0 0.0 fr 09_hydro_pump 1 65 0.0 0.0 -fr 01_solar 1 66 1.0 0.0 -fr 02_wind_on 1 66 1.0 0.0 -fr 03_wind_off 1 66 1.0 0.0 -fr 04_res 1 66 1.0 0.0 +fr 01_solar 1 66 0.0 1.0 +fr 02_wind_on 1 66 0.0 1.0 +fr 03_wind_off 1 66 0.0 1.0 +fr 04_res 1 66 0.0 1.0 fr 05_nuclear 1 66 0.0 0.0 fr 06_coal 1 66 0.0 0.0 fr 07_gas 1 66 0.0 0.0 fr 08_non-res 1 66 0.0 0.0 fr 09_hydro_pump 1 66 0.0 0.0 -fr 01_solar 1 67 1.0 0.0 -fr 02_wind_on 1 67 1.0 0.0 -fr 03_wind_off 1 67 1.0 0.0 -fr 04_res 1 67 1.0 0.0 +fr 01_solar 1 67 0.0 1.0 +fr 02_wind_on 1 67 0.0 1.0 +fr 03_wind_off 1 67 0.0 1.0 +fr 04_res 1 67 0.0 1.0 fr 05_nuclear 1 67 0.0 0.0 fr 06_coal 1 67 0.0 0.0 fr 07_gas 1 67 0.0 0.0 fr 08_non-res 1 67 0.0 0.0 fr 09_hydro_pump 1 67 0.0 0.0 -fr 01_solar 1 68 1.0 0.0 -fr 02_wind_on 1 68 1.0 0.0 -fr 03_wind_off 1 68 1.0 0.0 -fr 04_res 1 68 1.0 0.0 +fr 01_solar 1 68 0.0 1.0 +fr 02_wind_on 1 68 0.0 1.0 +fr 03_wind_off 1 68 0.0 1.0 +fr 04_res 1 68 0.0 1.0 fr 05_nuclear 1 68 0.0 0.0 fr 06_coal 1 68 0.0 0.0 fr 07_gas 1 68 0.0 0.0 fr 08_non-res 1 68 0.0 0.0 fr 09_hydro_pump 1 68 0.0 0.0 -fr 01_solar 1 69 1.0 0.0 -fr 02_wind_on 1 69 1.0 0.0 -fr 03_wind_off 1 69 1.0 0.0 -fr 04_res 1 69 1.0 0.0 +fr 01_solar 1 69 0.0 1.0 +fr 02_wind_on 1 69 0.0 1.0 +fr 03_wind_off 1 69 0.0 1.0 +fr 04_res 1 69 0.0 1.0 fr 05_nuclear 1 69 0.0 0.0 fr 06_coal 1 69 0.0 0.0 fr 07_gas 1 69 0.0 0.0 fr 08_non-res 1 69 0.0 0.0 fr 09_hydro_pump 1 69 0.0 0.0 -fr 01_solar 1 70 1.0 0.0 -fr 02_wind_on 1 70 1.0 0.0 -fr 03_wind_off 1 70 1.0 0.0 -fr 04_res 1 70 1.0 0.0 +fr 01_solar 1 70 0.0 1.0 +fr 02_wind_on 1 70 0.0 1.0 +fr 03_wind_off 1 70 0.0 1.0 +fr 04_res 1 70 0.0 1.0 fr 05_nuclear 1 70 0.0 0.0 fr 06_coal 1 70 0.0 0.0 fr 07_gas 1 70 0.0 0.0 fr 08_non-res 1 70 0.0 0.0 fr 09_hydro_pump 1 70 0.0 0.0 -fr 01_solar 1 71 1.0 0.0 -fr 02_wind_on 1 71 1.0 0.0 -fr 03_wind_off 1 71 1.0 0.0 -fr 04_res 1 71 1.0 0.0 +fr 01_solar 1 71 0.0 1.0 +fr 02_wind_on 1 71 0.0 1.0 +fr 03_wind_off 1 71 0.0 1.0 +fr 04_res 1 71 0.0 1.0 fr 05_nuclear 1 71 0.0 0.0 fr 06_coal 1 71 0.0 0.0 fr 07_gas 1 71 0.0 0.0 fr 08_non-res 1 71 0.0 0.0 fr 09_hydro_pump 1 71 0.0 0.0 -fr 01_solar 1 72 1.0 0.0 -fr 02_wind_on 1 72 1.0 0.0 -fr 03_wind_off 1 72 1.0 0.0 -fr 04_res 1 72 1.0 0.0 +fr 01_solar 1 72 0.0 1.0 +fr 02_wind_on 1 72 0.0 1.0 +fr 03_wind_off 1 72 0.0 1.0 +fr 04_res 1 72 0.0 1.0 fr 05_nuclear 1 72 0.0 0.0 fr 06_coal 1 72 0.0 0.0 fr 07_gas 1 72 0.0 0.0 fr 08_non-res 1 72 0.0 0.0 fr 09_hydro_pump 1 72 0.0 0.0 -fr 01_solar 1 73 1.0 0.0 -fr 02_wind_on 1 73 1.0 0.0 -fr 03_wind_off 1 73 1.0 0.0 -fr 04_res 1 73 1.0 0.0 +fr 01_solar 1 73 0.0 1.0 +fr 02_wind_on 1 73 0.0 1.0 +fr 03_wind_off 1 73 0.0 1.0 +fr 04_res 1 73 0.0 1.0 fr 05_nuclear 1 73 0.0 0.0 fr 06_coal 1 73 0.0 0.0 fr 07_gas 1 73 0.0 0.0 fr 08_non-res 1 73 0.0 0.0 fr 09_hydro_pump 1 73 0.0 0.0 -fr 01_solar 1 74 1.0 0.0 -fr 02_wind_on 1 74 1.0 0.0 -fr 03_wind_off 1 74 1.0 0.0 -fr 04_res 1 74 1.0 0.0 +fr 01_solar 1 74 0.0 1.0 +fr 02_wind_on 1 74 0.0 1.0 +fr 03_wind_off 1 74 0.0 1.0 +fr 04_res 1 74 0.0 1.0 fr 05_nuclear 1 74 0.0 0.0 fr 06_coal 1 74 0.0 0.0 fr 07_gas 1 74 0.0 0.0 fr 08_non-res 1 74 0.0 0.0 fr 09_hydro_pump 1 74 0.0 0.0 -fr 01_solar 1 75 1.0 0.0 -fr 02_wind_on 1 75 1.0 0.0 -fr 03_wind_off 1 75 1.0 0.0 -fr 04_res 1 75 1.0 0.0 +fr 01_solar 1 75 0.0 1.0 +fr 02_wind_on 1 75 0.0 1.0 +fr 03_wind_off 1 75 0.0 1.0 +fr 04_res 1 75 0.0 1.0 fr 05_nuclear 1 75 0.0 0.0 fr 06_coal 1 75 0.0 0.0 fr 07_gas 1 75 0.0 0.0 fr 08_non-res 1 75 0.0 0.0 fr 09_hydro_pump 1 75 0.0 0.0 -fr 01_solar 1 76 1.0 0.0 -fr 02_wind_on 1 76 1.0 0.0 -fr 03_wind_off 1 76 1.0 0.0 -fr 04_res 1 76 1.0 0.0 +fr 01_solar 1 76 0.0 1.0 +fr 02_wind_on 1 76 0.0 1.0 +fr 03_wind_off 1 76 0.0 1.0 +fr 04_res 1 76 0.0 1.0 fr 05_nuclear 1 76 0.0 0.0 fr 06_coal 1 76 0.0 0.0 fr 07_gas 1 76 0.0 0.0 fr 08_non-res 1 76 0.0 0.0 fr 09_hydro_pump 1 76 0.0 0.0 -fr 01_solar 1 77 1.0 0.0 -fr 02_wind_on 1 77 1.0 0.0 -fr 03_wind_off 1 77 1.0 0.0 -fr 04_res 1 77 1.0 0.0 +fr 01_solar 1 77 0.0 1.0 +fr 02_wind_on 1 77 0.0 1.0 +fr 03_wind_off 1 77 0.0 1.0 +fr 04_res 1 77 0.0 1.0 fr 05_nuclear 1 77 0.0 0.0 fr 06_coal 1 77 0.0 0.0 fr 07_gas 1 77 0.0 0.0 fr 08_non-res 1 77 0.0 0.0 fr 09_hydro_pump 1 77 0.0 0.0 -fr 01_solar 1 78 1.0 0.0 -fr 02_wind_on 1 78 1.0 0.0 -fr 03_wind_off 1 78 1.0 0.0 -fr 04_res 1 78 1.0 0.0 +fr 01_solar 1 78 0.0 1.0 +fr 02_wind_on 1 78 0.0 1.0 +fr 03_wind_off 1 78 0.0 1.0 +fr 04_res 1 78 0.0 1.0 fr 05_nuclear 1 78 0.0 0.0 fr 06_coal 1 78 0.0 0.0 fr 07_gas 1 78 0.0 0.0 fr 08_non-res 1 78 0.0 0.0 fr 09_hydro_pump 1 78 0.0 0.0 -fr 01_solar 1 79 1.0 0.0 -fr 02_wind_on 1 79 1.0 0.0 -fr 03_wind_off 1 79 1.0 0.0 -fr 04_res 1 79 1.0 0.0 +fr 01_solar 1 79 0.0 1.0 +fr 02_wind_on 1 79 0.0 1.0 +fr 03_wind_off 1 79 0.0 1.0 +fr 04_res 1 79 0.0 1.0 fr 05_nuclear 1 79 0.0 0.0 fr 06_coal 1 79 0.0 0.0 fr 07_gas 1 79 0.0 0.0 fr 08_non-res 1 79 0.0 0.0 fr 09_hydro_pump 1 79 0.0 0.0 -fr 01_solar 1 80 1.0 0.0 -fr 02_wind_on 1 80 1.0 0.0 -fr 03_wind_off 1 80 1.0 0.0 -fr 04_res 1 80 1.0 0.0 +fr 01_solar 1 80 0.0 1.0 +fr 02_wind_on 1 80 0.0 1.0 +fr 03_wind_off 1 80 0.0 1.0 +fr 04_res 1 80 0.0 1.0 fr 05_nuclear 1 80 0.0 0.0 fr 06_coal 1 80 0.0 0.0 fr 07_gas 1 80 0.0 0.0 fr 08_non-res 1 80 0.0 0.0 fr 09_hydro_pump 1 80 0.0 0.0 -fr 01_solar 1 81 1.0 0.0 -fr 02_wind_on 1 81 1.0 0.0 -fr 03_wind_off 1 81 1.0 0.0 -fr 04_res 1 81 1.0 0.0 +fr 01_solar 1 81 0.0 1.0 +fr 02_wind_on 1 81 0.0 1.0 +fr 03_wind_off 1 81 0.0 1.0 +fr 04_res 1 81 0.0 1.0 fr 05_nuclear 1 81 0.0 0.0 fr 06_coal 1 81 0.0 0.0 fr 07_gas 1 81 0.0 0.0 fr 08_non-res 1 81 0.0 0.0 fr 09_hydro_pump 1 81 0.0 0.0 -fr 01_solar 1 82 1.0 0.0 -fr 02_wind_on 1 82 1.0 0.0 -fr 03_wind_off 1 82 1.0 0.0 -fr 04_res 1 82 1.0 0.0 -fr 05_nuclear 1 82 1.0 0.0 +fr 01_solar 1 82 0.0 1.0 +fr 02_wind_on 1 82 0.0 1.0 +fr 03_wind_off 1 82 0.0 1.0 +fr 04_res 1 82 0.0 1.0 +fr 05_nuclear 1 82 0.0 1.0 fr 06_coal 1 82 0.0 0.0 fr 07_gas 1 82 0.0 0.0 fr 08_non-res 1 82 0.0 0.0 fr 09_hydro_pump 1 82 0.0 0.0 -fr 01_solar 1 83 1.0 0.0 -fr 02_wind_on 1 83 1.0 0.0 -fr 03_wind_off 1 83 1.0 0.0 -fr 04_res 1 83 1.0 0.0 -fr 05_nuclear 1 83 1.0 0.0 +fr 01_solar 1 83 0.0 1.0 +fr 02_wind_on 1 83 0.0 1.0 +fr 03_wind_off 1 83 0.0 1.0 +fr 04_res 1 83 0.0 1.0 +fr 05_nuclear 1 83 0.0 1.0 fr 06_coal 1 83 0.0 0.0 fr 07_gas 1 83 0.0 0.0 fr 08_non-res 1 83 0.0 0.0 fr 09_hydro_pump 1 83 0.0 0.0 -fr 01_solar 1 84 1.0 0.0 -fr 02_wind_on 1 84 1.0 0.0 -fr 03_wind_off 1 84 1.0 0.0 -fr 04_res 1 84 1.0 0.0 -fr 05_nuclear 1 84 1.0 0.0 +fr 01_solar 1 84 0.0 1.0 +fr 02_wind_on 1 84 0.0 1.0 +fr 03_wind_off 1 84 0.0 1.0 +fr 04_res 1 84 0.0 1.0 +fr 05_nuclear 1 84 0.0 1.0 fr 06_coal 1 84 0.0 0.0 fr 07_gas 1 84 0.0 0.0 fr 08_non-res 1 84 0.0 0.0 fr 09_hydro_pump 1 84 0.0 0.0 -fr 01_solar 1 85 1.0 0.0 -fr 02_wind_on 1 85 1.0 0.0 -fr 03_wind_off 1 85 1.0 0.0 -fr 04_res 1 85 1.0 0.0 -fr 05_nuclear 1 85 1.0 0.0 +fr 01_solar 1 85 0.0 1.0 +fr 02_wind_on 1 85 0.0 1.0 +fr 03_wind_off 1 85 0.0 1.0 +fr 04_res 1 85 0.0 1.0 +fr 05_nuclear 1 85 0.0 1.0 fr 06_coal 1 85 0.0 0.0 fr 07_gas 1 85 0.0 0.0 fr 08_non-res 1 85 0.0 0.0 fr 09_hydro_pump 1 85 0.0 0.0 -fr 01_solar 1 86 1.0 0.0 -fr 02_wind_on 1 86 1.0 0.0 -fr 03_wind_off 1 86 1.0 0.0 -fr 04_res 1 86 1.0 0.0 -fr 05_nuclear 1 86 1.0 0.0 +fr 01_solar 1 86 0.0 1.0 +fr 02_wind_on 1 86 0.0 1.0 +fr 03_wind_off 1 86 0.0 1.0 +fr 04_res 1 86 0.0 1.0 +fr 05_nuclear 1 86 0.0 1.0 fr 06_coal 1 86 0.0 0.0 fr 07_gas 1 86 0.0 0.0 fr 08_non-res 1 86 0.0 0.0 fr 09_hydro_pump 1 86 0.0 0.0 -fr 01_solar 1 87 1.0 0.0 -fr 02_wind_on 1 87 1.0 0.0 -fr 03_wind_off 1 87 1.0 0.0 -fr 04_res 1 87 1.0 0.0 -fr 05_nuclear 1 87 1.0 0.0 +fr 01_solar 1 87 0.0 1.0 +fr 02_wind_on 1 87 0.0 1.0 +fr 03_wind_off 1 87 0.0 1.0 +fr 04_res 1 87 0.0 1.0 +fr 05_nuclear 1 87 0.0 1.0 fr 06_coal 1 87 0.0 0.0 fr 07_gas 1 87 0.0 0.0 fr 08_non-res 1 87 0.0 0.0 fr 09_hydro_pump 1 87 0.0 0.0 -fr 01_solar 1 88 1.0 0.0 -fr 02_wind_on 1 88 1.0 0.0 -fr 03_wind_off 1 88 1.0 0.0 -fr 04_res 1 88 1.0 0.0 -fr 05_nuclear 1 88 1.0 0.0 +fr 01_solar 1 88 0.0 1.0 +fr 02_wind_on 1 88 0.0 1.0 +fr 03_wind_off 1 88 0.0 1.0 +fr 04_res 1 88 0.0 1.0 +fr 05_nuclear 1 88 0.0 1.0 fr 06_coal 1 88 0.0 0.0 fr 07_gas 1 88 0.0 0.0 fr 08_non-res 1 88 0.0 0.0 fr 09_hydro_pump 1 88 0.0 0.0 -fr 01_solar 1 89 1.0 0.0 -fr 02_wind_on 1 89 1.0 0.0 -fr 03_wind_off 1 89 1.0 0.0 -fr 04_res 1 89 1.0 0.0 -fr 05_nuclear 1 89 1.0 0.0 +fr 01_solar 1 89 0.0 1.0 +fr 02_wind_on 1 89 0.0 1.0 +fr 03_wind_off 1 89 0.0 1.0 +fr 04_res 1 89 0.0 1.0 +fr 05_nuclear 1 89 0.0 1.0 fr 06_coal 1 89 0.0 0.0 fr 07_gas 1 89 0.0 0.0 fr 08_non-res 1 89 0.0 0.0 fr 09_hydro_pump 1 89 0.0 0.0 -fr 01_solar 1 90 1.0 0.0 -fr 02_wind_on 1 90 1.0 0.0 -fr 03_wind_off 1 90 1.0 0.0 -fr 04_res 1 90 1.0 0.0 -fr 05_nuclear 1 90 1.0 0.0 +fr 01_solar 1 90 0.0 1.0 +fr 02_wind_on 1 90 0.0 1.0 +fr 03_wind_off 1 90 0.0 1.0 +fr 04_res 1 90 0.0 1.0 +fr 05_nuclear 1 90 0.0 1.0 fr 06_coal 1 90 0.0 0.0 fr 07_gas 1 90 0.0 0.0 fr 08_non-res 1 90 0.0 0.0 fr 09_hydro_pump 1 90 0.0 0.0 -fr 01_solar 1 91 1.0 0.0 -fr 02_wind_on 1 91 1.0 0.0 -fr 03_wind_off 1 91 1.0 0.0 -fr 04_res 1 91 1.0 0.0 -fr 05_nuclear 1 91 1.0 0.0 +fr 01_solar 1 91 0.0 1.0 +fr 02_wind_on 1 91 0.0 1.0 +fr 03_wind_off 1 91 0.0 1.0 +fr 04_res 1 91 0.0 1.0 +fr 05_nuclear 1 91 0.0 1.0 fr 06_coal 1 91 0.0 0.0 fr 07_gas 1 91 0.0 0.0 fr 08_non-res 1 91 0.0 0.0 fr 09_hydro_pump 1 91 0.0 0.0 -fr 01_solar 1 92 1.0 0.0 -fr 02_wind_on 1 92 1.0 0.0 -fr 03_wind_off 1 92 1.0 0.0 -fr 04_res 1 92 1.0 0.0 -fr 05_nuclear 1 92 1.0 0.0 +fr 01_solar 1 92 0.0 1.0 +fr 02_wind_on 1 92 0.0 1.0 +fr 03_wind_off 1 92 0.0 1.0 +fr 04_res 1 92 0.0 1.0 +fr 05_nuclear 1 92 0.0 1.0 fr 06_coal 1 92 0.0 0.0 fr 07_gas 1 92 0.0 0.0 fr 08_non-res 1 92 0.0 0.0 fr 09_hydro_pump 1 92 0.0 0.0 -fr 01_solar 1 93 1.0 0.0 -fr 02_wind_on 1 93 1.0 0.0 -fr 03_wind_off 1 93 1.0 0.0 -fr 04_res 1 93 1.0 0.0 -fr 05_nuclear 1 93 1.0 0.0 +fr 01_solar 1 93 0.0 1.0 +fr 02_wind_on 1 93 0.0 1.0 +fr 03_wind_off 1 93 0.0 1.0 +fr 04_res 1 93 0.0 1.0 +fr 05_nuclear 1 93 0.0 1.0 fr 06_coal 1 93 0.0 0.0 fr 07_gas 1 93 0.0 0.0 fr 08_non-res 1 93 0.0 0.0 fr 09_hydro_pump 1 93 0.0 0.0 -fr 01_solar 1 94 1.0 0.0 -fr 02_wind_on 1 94 1.0 0.0 -fr 03_wind_off 1 94 1.0 0.0 -fr 04_res 1 94 1.0 0.0 -fr 05_nuclear 1 94 1.0 0.0 +fr 01_solar 1 94 0.0 1.0 +fr 02_wind_on 1 94 0.0 1.0 +fr 03_wind_off 1 94 0.0 1.0 +fr 04_res 1 94 0.0 1.0 +fr 05_nuclear 1 94 0.0 1.0 fr 06_coal 1 94 0.0 0.0 fr 07_gas 1 94 0.0 0.0 fr 08_non-res 1 94 0.0 0.0 fr 09_hydro_pump 1 94 0.0 0.0 -fr 01_solar 1 95 1.0 0.0 -fr 02_wind_on 1 95 1.0 0.0 -fr 03_wind_off 1 95 1.0 0.0 -fr 04_res 1 95 1.0 0.0 -fr 05_nuclear 1 95 1.0 0.0 +fr 01_solar 1 95 0.0 1.0 +fr 02_wind_on 1 95 0.0 1.0 +fr 03_wind_off 1 95 0.0 1.0 +fr 04_res 1 95 0.0 1.0 +fr 05_nuclear 1 95 0.0 1.0 fr 06_coal 1 95 0.0 0.0 fr 07_gas 1 95 0.0 0.0 fr 08_non-res 1 95 0.0 0.0 fr 09_hydro_pump 1 95 0.0 0.0 -fr 01_solar 1 96 1.0 0.0 -fr 02_wind_on 1 96 1.0 0.0 -fr 03_wind_off 1 96 1.0 0.0 -fr 04_res 1 96 1.0 0.0 -fr 05_nuclear 1 96 1.0 0.0 +fr 01_solar 1 96 0.0 1.0 +fr 02_wind_on 1 96 0.0 1.0 +fr 03_wind_off 1 96 0.0 1.0 +fr 04_res 1 96 0.0 1.0 +fr 05_nuclear 1 96 0.0 1.0 fr 06_coal 1 96 0.0 0.0 fr 07_gas 1 96 0.0 0.0 fr 08_non-res 1 96 0.0 0.0 fr 09_hydro_pump 1 96 0.0 0.0 -fr 01_solar 1 97 1.0 0.0 -fr 02_wind_on 1 97 1.0 0.0 -fr 03_wind_off 1 97 1.0 0.0 -fr 04_res 1 97 1.0 0.0 -fr 05_nuclear 1 97 1.0 0.0 +fr 01_solar 1 97 0.0 1.0 +fr 02_wind_on 1 97 0.0 1.0 +fr 03_wind_off 1 97 0.0 1.0 +fr 04_res 1 97 0.0 1.0 +fr 05_nuclear 1 97 0.0 1.0 fr 06_coal 1 97 0.0 0.0 fr 07_gas 1 97 0.0 0.0 fr 08_non-res 1 97 0.0 0.0 fr 09_hydro_pump 1 97 0.0 0.0 -fr 01_solar 1 98 1.0 0.0 -fr 02_wind_on 1 98 1.0 0.0 -fr 03_wind_off 1 98 1.0 0.0 -fr 04_res 1 98 1.0 0.0 -fr 05_nuclear 1 98 1.0 0.0 +fr 01_solar 1 98 0.0 1.0 +fr 02_wind_on 1 98 0.0 1.0 +fr 03_wind_off 1 98 0.0 1.0 +fr 04_res 1 98 0.0 1.0 +fr 05_nuclear 1 98 0.0 1.0 fr 06_coal 1 98 0.0 0.0 fr 07_gas 1 98 0.0 0.0 fr 08_non-res 1 98 0.0 0.0 fr 09_hydro_pump 1 98 0.0 0.0 -fr 01_solar 1 99 1.0 0.0 -fr 02_wind_on 1 99 1.0 0.0 -fr 03_wind_off 1 99 1.0 0.0 -fr 04_res 1 99 1.0 0.0 -fr 05_nuclear 1 99 1.0 0.0 +fr 01_solar 1 99 0.0 1.0 +fr 02_wind_on 1 99 0.0 1.0 +fr 03_wind_off 1 99 0.0 1.0 +fr 04_res 1 99 0.0 1.0 +fr 05_nuclear 1 99 0.0 1.0 fr 06_coal 1 99 0.0 0.0 fr 07_gas 1 99 0.0 0.0 fr 08_non-res 1 99 0.0 0.0 fr 09_hydro_pump 1 99 0.0 0.0 -fr 01_solar 1 100 1.0 0.0 -fr 02_wind_on 1 100 1.0 0.0 -fr 03_wind_off 1 100 1.0 0.0 -fr 04_res 1 100 1.0 0.0 -fr 05_nuclear 1 100 1.0 0.0 +fr 01_solar 1 100 0.0 1.0 +fr 02_wind_on 1 100 0.0 1.0 +fr 03_wind_off 1 100 0.0 1.0 +fr 04_res 1 100 0.0 1.0 +fr 05_nuclear 1 100 0.0 1.0 fr 06_coal 1 100 0.0 0.0 fr 07_gas 1 100 0.0 0.0 fr 08_non-res 1 100 0.0 0.0 fr 09_hydro_pump 1 100 0.0 0.0 -fr 01_solar 1 101 1.0 0.0 -fr 02_wind_on 1 101 1.0 0.0 -fr 03_wind_off 1 101 1.0 0.0 -fr 04_res 1 101 1.0 0.0 -fr 05_nuclear 1 101 1.0 0.0 +fr 01_solar 1 101 0.0 1.0 +fr 02_wind_on 1 101 0.0 1.0 +fr 03_wind_off 1 101 0.0 1.0 +fr 04_res 1 101 0.0 1.0 +fr 05_nuclear 1 101 0.0 1.0 fr 06_coal 1 101 0.0 0.0 fr 07_gas 1 101 0.0 0.0 fr 08_non-res 1 101 0.0 0.0 fr 09_hydro_pump 1 101 0.0 0.0 -fr 01_solar 1 102 1.0 0.0 -fr 02_wind_on 1 102 1.0 0.0 -fr 03_wind_off 1 102 1.0 0.0 -fr 04_res 1 102 1.0 0.0 -fr 05_nuclear 1 102 1.0 0.0 -fr 06_coal 1 102 1.0 0.0 +fr 01_solar 1 102 0.0 1.0 +fr 02_wind_on 1 102 0.0 1.0 +fr 03_wind_off 1 102 0.0 1.0 +fr 04_res 1 102 0.0 1.0 +fr 05_nuclear 1 102 0.0 1.0 +fr 06_coal 1 102 0.0 1.0 fr 07_gas 1 102 0.0 0.0 fr 08_non-res 1 102 0.0 0.0 fr 09_hydro_pump 1 102 0.0 0.0 -fr 01_solar 1 103 1.0 0.0 -fr 02_wind_on 1 103 1.0 0.0 -fr 03_wind_off 1 103 1.0 0.0 -fr 04_res 1 103 1.0 0.0 -fr 05_nuclear 1 103 1.0 0.0 -fr 06_coal 1 103 1.0 0.0 +fr 01_solar 1 103 0.0 1.0 +fr 02_wind_on 1 103 0.0 1.0 +fr 03_wind_off 1 103 0.0 1.0 +fr 04_res 1 103 0.0 1.0 +fr 05_nuclear 1 103 0.0 1.0 +fr 06_coal 1 103 0.0 1.0 fr 07_gas 1 103 0.0 0.0 fr 08_non-res 1 103 0.0 0.0 fr 09_hydro_pump 1 103 0.0 0.0 -fr 01_solar 1 104 1.0 0.0 -fr 02_wind_on 1 104 1.0 0.0 -fr 03_wind_off 1 104 1.0 0.0 -fr 04_res 1 104 1.0 0.0 -fr 05_nuclear 1 104 1.0 0.0 -fr 06_coal 1 104 1.0 0.0 +fr 01_solar 1 104 0.0 1.0 +fr 02_wind_on 1 104 0.0 1.0 +fr 03_wind_off 1 104 0.0 1.0 +fr 04_res 1 104 0.0 1.0 +fr 05_nuclear 1 104 0.0 1.0 +fr 06_coal 1 104 0.0 1.0 fr 07_gas 1 104 0.0 0.0 fr 08_non-res 1 104 0.0 0.0 fr 09_hydro_pump 1 104 0.0 0.0 -fr 01_solar 1 105 1.0 0.0 -fr 02_wind_on 1 105 1.0 0.0 -fr 03_wind_off 1 105 1.0 0.0 -fr 04_res 1 105 1.0 0.0 -fr 05_nuclear 1 105 1.0 0.0 -fr 06_coal 1 105 1.0 0.0 +fr 01_solar 1 105 0.0 1.0 +fr 02_wind_on 1 105 0.0 1.0 +fr 03_wind_off 1 105 0.0 1.0 +fr 04_res 1 105 0.0 1.0 +fr 05_nuclear 1 105 0.0 1.0 +fr 06_coal 1 105 0.0 1.0 fr 07_gas 1 105 0.0 0.0 fr 08_non-res 1 105 0.0 0.0 fr 09_hydro_pump 1 105 0.0 0.0 -fr 01_solar 1 106 1.0 0.0 -fr 02_wind_on 1 106 1.0 0.0 -fr 03_wind_off 1 106 1.0 0.0 -fr 04_res 1 106 1.0 0.0 -fr 05_nuclear 1 106 1.0 0.0 -fr 06_coal 1 106 1.0 0.0 +fr 01_solar 1 106 0.0 1.0 +fr 02_wind_on 1 106 0.0 1.0 +fr 03_wind_off 1 106 0.0 1.0 +fr 04_res 1 106 0.0 1.0 +fr 05_nuclear 1 106 0.0 1.0 +fr 06_coal 1 106 0.0 1.0 fr 07_gas 1 106 0.0 0.0 fr 08_non-res 1 106 0.0 0.0 fr 09_hydro_pump 1 106 0.0 0.0 -fr 01_solar 1 107 1.0 0.0 -fr 02_wind_on 1 107 1.0 0.0 -fr 03_wind_off 1 107 1.0 0.0 -fr 04_res 1 107 1.0 0.0 -fr 05_nuclear 1 107 1.0 0.0 -fr 06_coal 1 107 1.0 0.0 +fr 01_solar 1 107 0.0 1.0 +fr 02_wind_on 1 107 0.0 1.0 +fr 03_wind_off 1 107 0.0 1.0 +fr 04_res 1 107 0.0 1.0 +fr 05_nuclear 1 107 0.0 1.0 +fr 06_coal 1 107 0.0 1.0 fr 07_gas 1 107 0.0 0.0 fr 08_non-res 1 107 0.0 0.0 fr 09_hydro_pump 1 107 0.0 0.0 -fr 01_solar 1 108 1.0 0.0 -fr 02_wind_on 1 108 1.0 0.0 -fr 03_wind_off 1 108 1.0 0.0 -fr 04_res 1 108 1.0 0.0 -fr 05_nuclear 1 108 1.0 0.0 -fr 06_coal 1 108 1.0 0.0 +fr 01_solar 1 108 0.0 1.0 +fr 02_wind_on 1 108 0.0 1.0 +fr 03_wind_off 1 108 0.0 1.0 +fr 04_res 1 108 0.0 1.0 +fr 05_nuclear 1 108 0.0 1.0 +fr 06_coal 1 108 0.0 1.0 fr 07_gas 1 108 0.0 0.0 fr 08_non-res 1 108 0.0 0.0 fr 09_hydro_pump 1 108 0.0 0.0 -fr 01_solar 1 109 1.0 0.0 -fr 02_wind_on 1 109 1.0 0.0 -fr 03_wind_off 1 109 1.0 0.0 -fr 04_res 1 109 1.0 0.0 -fr 05_nuclear 1 109 1.0 0.0 -fr 06_coal 1 109 1.0 0.0 +fr 01_solar 1 109 0.0 1.0 +fr 02_wind_on 1 109 0.0 1.0 +fr 03_wind_off 1 109 0.0 1.0 +fr 04_res 1 109 0.0 1.0 +fr 05_nuclear 1 109 0.0 1.0 +fr 06_coal 1 109 0.0 1.0 fr 07_gas 1 109 0.0 0.0 fr 08_non-res 1 109 0.0 0.0 fr 09_hydro_pump 1 109 0.0 0.0 -fr 01_solar 1 110 1.0 0.0 -fr 02_wind_on 1 110 1.0 0.0 -fr 03_wind_off 1 110 1.0 0.0 -fr 04_res 1 110 1.0 0.0 -fr 05_nuclear 1 110 1.0 0.0 -fr 06_coal 1 110 1.0 0.0 +fr 01_solar 1 110 0.0 1.0 +fr 02_wind_on 1 110 0.0 1.0 +fr 03_wind_off 1 110 0.0 1.0 +fr 04_res 1 110 0.0 1.0 +fr 05_nuclear 1 110 0.0 1.0 +fr 06_coal 1 110 0.0 1.0 fr 07_gas 1 110 0.0 0.0 fr 08_non-res 1 110 0.0 0.0 fr 09_hydro_pump 1 110 0.0 0.0 -fr 01_solar 1 111 1.0 0.0 -fr 02_wind_on 1 111 1.0 0.0 -fr 03_wind_off 1 111 1.0 0.0 -fr 04_res 1 111 1.0 0.0 -fr 05_nuclear 1 111 1.0 0.0 -fr 06_coal 1 111 1.0 0.0 +fr 01_solar 1 111 0.0 1.0 +fr 02_wind_on 1 111 0.0 1.0 +fr 03_wind_off 1 111 0.0 1.0 +fr 04_res 1 111 0.0 1.0 +fr 05_nuclear 1 111 0.0 1.0 +fr 06_coal 1 111 0.0 1.0 fr 07_gas 1 111 0.0 0.0 fr 08_non-res 1 111 0.0 0.0 fr 09_hydro_pump 1 111 0.0 0.0 -fr 01_solar 1 112 1.0 0.0 -fr 02_wind_on 1 112 1.0 0.0 -fr 03_wind_off 1 112 1.0 0.0 -fr 04_res 1 112 1.0 0.0 -fr 05_nuclear 1 112 1.0 0.0 -fr 06_coal 1 112 1.0 0.0 +fr 01_solar 1 112 0.0 1.0 +fr 02_wind_on 1 112 0.0 1.0 +fr 03_wind_off 1 112 0.0 1.0 +fr 04_res 1 112 0.0 1.0 +fr 05_nuclear 1 112 0.0 1.0 +fr 06_coal 1 112 0.0 1.0 fr 07_gas 1 112 0.0 0.0 fr 08_non-res 1 112 0.0 0.0 fr 09_hydro_pump 1 112 0.0 0.0 -fr 01_solar 1 113 1.0 0.0 -fr 02_wind_on 1 113 1.0 0.0 -fr 03_wind_off 1 113 1.0 0.0 -fr 04_res 1 113 1.0 0.0 -fr 05_nuclear 1 113 1.0 0.0 -fr 06_coal 1 113 1.0 0.0 +fr 01_solar 1 113 0.0 1.0 +fr 02_wind_on 1 113 0.0 1.0 +fr 03_wind_off 1 113 0.0 1.0 +fr 04_res 1 113 0.0 1.0 +fr 05_nuclear 1 113 0.0 1.0 +fr 06_coal 1 113 0.0 1.0 fr 07_gas 1 113 0.0 0.0 fr 08_non-res 1 113 0.0 0.0 fr 09_hydro_pump 1 113 0.0 0.0 -fr 01_solar 1 114 1.0 0.0 -fr 02_wind_on 1 114 1.0 0.0 -fr 03_wind_off 1 114 1.0 0.0 -fr 04_res 1 114 1.0 0.0 -fr 05_nuclear 1 114 1.0 0.0 -fr 06_coal 1 114 1.0 0.0 +fr 01_solar 1 114 0.0 1.0 +fr 02_wind_on 1 114 0.0 1.0 +fr 03_wind_off 1 114 0.0 1.0 +fr 04_res 1 114 0.0 1.0 +fr 05_nuclear 1 114 0.0 1.0 +fr 06_coal 1 114 0.0 1.0 fr 07_gas 1 114 0.0 0.0 fr 08_non-res 1 114 0.0 0.0 fr 09_hydro_pump 1 114 0.0 0.0 -fr 01_solar 1 115 1.0 0.0 -fr 02_wind_on 1 115 1.0 0.0 -fr 03_wind_off 1 115 1.0 0.0 -fr 04_res 1 115 1.0 0.0 -fr 05_nuclear 1 115 1.0 0.0 -fr 06_coal 1 115 1.0 0.0 +fr 01_solar 1 115 0.0 1.0 +fr 02_wind_on 1 115 0.0 1.0 +fr 03_wind_off 1 115 0.0 1.0 +fr 04_res 1 115 0.0 1.0 +fr 05_nuclear 1 115 0.0 1.0 +fr 06_coal 1 115 0.0 1.0 fr 07_gas 1 115 0.0 0.0 fr 08_non-res 1 115 0.0 0.0 fr 09_hydro_pump 1 115 0.0 0.0 -fr 01_solar 1 116 1.0 0.0 -fr 02_wind_on 1 116 1.0 0.0 -fr 03_wind_off 1 116 1.0 0.0 -fr 04_res 1 116 1.0 0.0 -fr 05_nuclear 1 116 1.0 0.0 -fr 06_coal 1 116 1.0 0.0 +fr 01_solar 1 116 0.0 1.0 +fr 02_wind_on 1 116 0.0 1.0 +fr 03_wind_off 1 116 0.0 1.0 +fr 04_res 1 116 0.0 1.0 +fr 05_nuclear 1 116 0.0 1.0 +fr 06_coal 1 116 0.0 1.0 fr 07_gas 1 116 0.0 0.0 fr 08_non-res 1 116 0.0 0.0 fr 09_hydro_pump 1 116 0.0 0.0 -fr 01_solar 1 117 1.0 0.0 -fr 02_wind_on 1 117 1.0 0.0 -fr 03_wind_off 1 117 1.0 0.0 -fr 04_res 1 117 1.0 0.0 -fr 05_nuclear 1 117 1.0 0.0 -fr 06_coal 1 117 1.0 0.0 +fr 01_solar 1 117 0.0 1.0 +fr 02_wind_on 1 117 0.0 1.0 +fr 03_wind_off 1 117 0.0 1.0 +fr 04_res 1 117 0.0 1.0 +fr 05_nuclear 1 117 0.0 1.0 +fr 06_coal 1 117 0.0 1.0 fr 07_gas 1 117 0.0 0.0 fr 08_non-res 1 117 0.0 0.0 fr 09_hydro_pump 1 117 0.0 0.0 -fr 01_solar 1 118 1.0 0.0 -fr 02_wind_on 1 118 1.0 0.0 -fr 03_wind_off 1 118 1.0 0.0 -fr 04_res 1 118 1.0 0.0 -fr 05_nuclear 1 118 1.0 0.0 -fr 06_coal 1 118 1.0 0.0 +fr 01_solar 1 118 0.0 1.0 +fr 02_wind_on 1 118 0.0 1.0 +fr 03_wind_off 1 118 0.0 1.0 +fr 04_res 1 118 0.0 1.0 +fr 05_nuclear 1 118 0.0 1.0 +fr 06_coal 1 118 0.0 1.0 fr 07_gas 1 118 0.0 0.0 fr 08_non-res 1 118 0.0 0.0 fr 09_hydro_pump 1 118 0.0 0.0 -fr 01_solar 1 119 1.0 0.0 -fr 02_wind_on 1 119 1.0 0.0 -fr 03_wind_off 1 119 1.0 0.0 -fr 04_res 1 119 1.0 0.0 -fr 05_nuclear 1 119 1.0 0.0 -fr 06_coal 1 119 1.0 0.0 +fr 01_solar 1 119 0.0 1.0 +fr 02_wind_on 1 119 0.0 1.0 +fr 03_wind_off 1 119 0.0 1.0 +fr 04_res 1 119 0.0 1.0 +fr 05_nuclear 1 119 0.0 1.0 +fr 06_coal 1 119 0.0 1.0 fr 07_gas 1 119 0.0 0.0 fr 08_non-res 1 119 0.0 0.0 fr 09_hydro_pump 1 119 0.0 0.0 -fr 01_solar 1 120 1.0 0.0 -fr 02_wind_on 1 120 1.0 0.0 -fr 03_wind_off 1 120 1.0 0.0 -fr 04_res 1 120 1.0 0.0 -fr 05_nuclear 1 120 1.0 0.0 -fr 06_coal 1 120 1.0 0.0 +fr 01_solar 1 120 0.0 1.0 +fr 02_wind_on 1 120 0.0 1.0 +fr 03_wind_off 1 120 0.0 1.0 +fr 04_res 1 120 0.0 1.0 +fr 05_nuclear 1 120 0.0 1.0 +fr 06_coal 1 120 0.0 1.0 fr 07_gas 1 120 0.0 0.0 fr 08_non-res 1 120 0.0 0.0 fr 09_hydro_pump 1 120 0.0 0.0 -fr 01_solar 1 121 1.0 0.0 -fr 02_wind_on 1 121 1.0 0.0 -fr 03_wind_off 1 121 1.0 0.0 -fr 04_res 1 121 1.0 0.0 -fr 05_nuclear 1 121 1.0 0.0 -fr 06_coal 1 121 1.0 0.0 +fr 01_solar 1 121 0.0 1.0 +fr 02_wind_on 1 121 0.0 1.0 +fr 03_wind_off 1 121 0.0 1.0 +fr 04_res 1 121 0.0 1.0 +fr 05_nuclear 1 121 0.0 1.0 +fr 06_coal 1 121 0.0 1.0 fr 07_gas 1 121 0.0 0.0 fr 08_non-res 1 121 0.0 0.0 fr 09_hydro_pump 1 121 0.0 0.0 -fr 01_solar 1 122 1.0 0.0 -fr 02_wind_on 1 122 1.0 0.0 -fr 03_wind_off 1 122 1.0 0.0 -fr 04_res 1 122 1.0 0.0 -fr 05_nuclear 1 122 1.0 0.0 -fr 06_coal 1 122 1.0 0.0 -fr 07_gas 1 122 1.0 0.0 +fr 01_solar 1 122 0.0 1.0 +fr 02_wind_on 1 122 0.0 1.0 +fr 03_wind_off 1 122 0.0 1.0 +fr 04_res 1 122 0.0 1.0 +fr 05_nuclear 1 122 0.0 1.0 +fr 06_coal 1 122 0.0 1.0 +fr 07_gas 1 122 0.0 1.0 fr 08_non-res 1 122 0.0 0.0 fr 09_hydro_pump 1 122 0.0 0.0 -fr 01_solar 1 123 1.0 0.0 -fr 02_wind_on 1 123 1.0 0.0 -fr 03_wind_off 1 123 1.0 0.0 -fr 04_res 1 123 1.0 0.0 -fr 05_nuclear 1 123 1.0 0.0 -fr 06_coal 1 123 1.0 0.0 -fr 07_gas 1 123 1.0 0.0 +fr 01_solar 1 123 0.0 1.0 +fr 02_wind_on 1 123 0.0 1.0 +fr 03_wind_off 1 123 0.0 1.0 +fr 04_res 1 123 0.0 1.0 +fr 05_nuclear 1 123 0.0 1.0 +fr 06_coal 1 123 0.0 1.0 +fr 07_gas 1 123 0.0 1.0 fr 08_non-res 1 123 0.0 0.0 fr 09_hydro_pump 1 123 0.0 0.0 -fr 01_solar 1 124 1.0 0.0 -fr 02_wind_on 1 124 1.0 0.0 -fr 03_wind_off 1 124 1.0 0.0 -fr 04_res 1 124 1.0 0.0 -fr 05_nuclear 1 124 1.0 0.0 -fr 06_coal 1 124 1.0 0.0 -fr 07_gas 1 124 1.0 0.0 +fr 01_solar 1 124 0.0 1.0 +fr 02_wind_on 1 124 0.0 1.0 +fr 03_wind_off 1 124 0.0 1.0 +fr 04_res 1 124 0.0 1.0 +fr 05_nuclear 1 124 0.0 1.0 +fr 06_coal 1 124 0.0 1.0 +fr 07_gas 1 124 0.0 1.0 fr 08_non-res 1 124 0.0 0.0 fr 09_hydro_pump 1 124 0.0 0.0 -fr 01_solar 1 125 1.0 0.0 -fr 02_wind_on 1 125 1.0 0.0 -fr 03_wind_off 1 125 1.0 0.0 -fr 04_res 1 125 1.0 0.0 -fr 05_nuclear 1 125 1.0 0.0 -fr 06_coal 1 125 1.0 0.0 -fr 07_gas 1 125 1.0 0.0 +fr 01_solar 1 125 0.0 1.0 +fr 02_wind_on 1 125 0.0 1.0 +fr 03_wind_off 1 125 0.0 1.0 +fr 04_res 1 125 0.0 1.0 +fr 05_nuclear 1 125 0.0 1.0 +fr 06_coal 1 125 0.0 1.0 +fr 07_gas 1 125 0.0 1.0 fr 08_non-res 1 125 0.0 0.0 fr 09_hydro_pump 1 125 0.0 0.0 -fr 01_solar 1 126 1.0 0.0 -fr 02_wind_on 1 126 1.0 0.0 -fr 03_wind_off 1 126 1.0 0.0 -fr 04_res 1 126 1.0 0.0 -fr 05_nuclear 1 126 1.0 0.0 -fr 06_coal 1 126 1.0 0.0 -fr 07_gas 1 126 1.0 0.0 +fr 01_solar 1 126 0.0 1.0 +fr 02_wind_on 1 126 0.0 1.0 +fr 03_wind_off 1 126 0.0 1.0 +fr 04_res 1 126 0.0 1.0 +fr 05_nuclear 1 126 0.0 1.0 +fr 06_coal 1 126 0.0 1.0 +fr 07_gas 1 126 0.0 1.0 fr 08_non-res 1 126 0.0 0.0 fr 09_hydro_pump 1 126 0.0 0.0 -fr 01_solar 1 127 1.0 0.0 -fr 02_wind_on 1 127 1.0 0.0 -fr 03_wind_off 1 127 1.0 0.0 -fr 04_res 1 127 1.0 0.0 -fr 05_nuclear 1 127 1.0 0.0 -fr 06_coal 1 127 1.0 0.0 -fr 07_gas 1 127 1.0 0.0 +fr 01_solar 1 127 0.0 1.0 +fr 02_wind_on 1 127 0.0 1.0 +fr 03_wind_off 1 127 0.0 1.0 +fr 04_res 1 127 0.0 1.0 +fr 05_nuclear 1 127 0.0 1.0 +fr 06_coal 1 127 0.0 1.0 +fr 07_gas 1 127 0.0 1.0 fr 08_non-res 1 127 0.0 0.0 fr 09_hydro_pump 1 127 0.0 0.0 -fr 01_solar 1 128 1.0 0.0 -fr 02_wind_on 1 128 1.0 0.0 -fr 03_wind_off 1 128 1.0 0.0 -fr 04_res 1 128 1.0 0.0 -fr 05_nuclear 1 128 1.0 0.0 -fr 06_coal 1 128 1.0 0.0 -fr 07_gas 1 128 1.0 0.0 +fr 01_solar 1 128 0.0 1.0 +fr 02_wind_on 1 128 0.0 1.0 +fr 03_wind_off 1 128 0.0 1.0 +fr 04_res 1 128 0.0 1.0 +fr 05_nuclear 1 128 0.0 1.0 +fr 06_coal 1 128 0.0 1.0 +fr 07_gas 1 128 0.0 1.0 fr 08_non-res 1 128 0.0 0.0 fr 09_hydro_pump 1 128 0.0 0.0 -fr 01_solar 1 129 1.0 0.0 -fr 02_wind_on 1 129 1.0 0.0 -fr 03_wind_off 1 129 1.0 0.0 -fr 04_res 1 129 1.0 0.0 -fr 05_nuclear 1 129 1.0 0.0 -fr 06_coal 1 129 1.0 0.0 -fr 07_gas 1 129 1.0 0.0 +fr 01_solar 1 129 0.0 1.0 +fr 02_wind_on 1 129 0.0 1.0 +fr 03_wind_off 1 129 0.0 1.0 +fr 04_res 1 129 0.0 1.0 +fr 05_nuclear 1 129 0.0 1.0 +fr 06_coal 1 129 0.0 1.0 +fr 07_gas 1 129 0.0 1.0 fr 08_non-res 1 129 0.0 0.0 fr 09_hydro_pump 1 129 0.0 0.0 -fr 01_solar 1 130 1.0 0.0 -fr 02_wind_on 1 130 1.0 0.0 -fr 03_wind_off 1 130 1.0 0.0 -fr 04_res 1 130 1.0 0.0 -fr 05_nuclear 1 130 1.0 0.0 -fr 06_coal 1 130 1.0 0.0 -fr 07_gas 1 130 1.0 0.0 +fr 01_solar 1 130 0.0 1.0 +fr 02_wind_on 1 130 0.0 1.0 +fr 03_wind_off 1 130 0.0 1.0 +fr 04_res 1 130 0.0 1.0 +fr 05_nuclear 1 130 0.0 1.0 +fr 06_coal 1 130 0.0 1.0 +fr 07_gas 1 130 0.0 1.0 fr 08_non-res 1 130 0.0 0.0 fr 09_hydro_pump 1 130 0.0 0.0 -fr 01_solar 1 131 1.0 0.0 -fr 02_wind_on 1 131 1.0 0.0 -fr 03_wind_off 1 131 1.0 0.0 -fr 04_res 1 131 1.0 0.0 -fr 05_nuclear 1 131 1.0 0.0 -fr 06_coal 1 131 1.0 0.0 -fr 07_gas 1 131 1.0 0.0 +fr 01_solar 1 131 0.0 1.0 +fr 02_wind_on 1 131 0.0 1.0 +fr 03_wind_off 1 131 0.0 1.0 +fr 04_res 1 131 0.0 1.0 +fr 05_nuclear 1 131 0.0 1.0 +fr 06_coal 1 131 0.0 1.0 +fr 07_gas 1 131 0.0 1.0 fr 08_non-res 1 131 0.0 0.0 fr 09_hydro_pump 1 131 0.0 0.0 -fr 01_solar 1 132 1.0 0.0 -fr 02_wind_on 1 132 1.0 0.0 -fr 03_wind_off 1 132 1.0 0.0 -fr 04_res 1 132 1.0 0.0 -fr 05_nuclear 1 132 1.0 0.0 -fr 06_coal 1 132 1.0 0.0 -fr 07_gas 1 132 1.0 0.0 +fr 01_solar 1 132 0.0 1.0 +fr 02_wind_on 1 132 0.0 1.0 +fr 03_wind_off 1 132 0.0 1.0 +fr 04_res 1 132 0.0 1.0 +fr 05_nuclear 1 132 0.0 1.0 +fr 06_coal 1 132 0.0 1.0 +fr 07_gas 1 132 0.0 1.0 fr 08_non-res 1 132 0.0 0.0 fr 09_hydro_pump 1 132 0.0 0.0 -fr 01_solar 1 133 1.0 0.0 -fr 02_wind_on 1 133 1.0 0.0 -fr 03_wind_off 1 133 1.0 0.0 -fr 04_res 1 133 1.0 0.0 -fr 05_nuclear 1 133 1.0 0.0 -fr 06_coal 1 133 1.0 0.0 -fr 07_gas 1 133 1.0 0.0 +fr 01_solar 1 133 0.0 1.0 +fr 02_wind_on 1 133 0.0 1.0 +fr 03_wind_off 1 133 0.0 1.0 +fr 04_res 1 133 0.0 1.0 +fr 05_nuclear 1 133 0.0 1.0 +fr 06_coal 1 133 0.0 1.0 +fr 07_gas 1 133 0.0 1.0 fr 08_non-res 1 133 0.0 0.0 fr 09_hydro_pump 1 133 0.0 0.0 -fr 01_solar 1 134 1.0 0.0 -fr 02_wind_on 1 134 1.0 0.0 -fr 03_wind_off 1 134 1.0 0.0 -fr 04_res 1 134 1.0 0.0 -fr 05_nuclear 1 134 1.0 0.0 -fr 06_coal 1 134 1.0 0.0 -fr 07_gas 1 134 1.0 0.0 +fr 01_solar 1 134 0.0 1.0 +fr 02_wind_on 1 134 0.0 1.0 +fr 03_wind_off 1 134 0.0 1.0 +fr 04_res 1 134 0.0 1.0 +fr 05_nuclear 1 134 0.0 1.0 +fr 06_coal 1 134 0.0 1.0 +fr 07_gas 1 134 0.0 1.0 fr 08_non-res 1 134 0.0 0.0 fr 09_hydro_pump 1 134 0.0 0.0 -fr 01_solar 1 135 1.0 0.0 -fr 02_wind_on 1 135 1.0 0.0 -fr 03_wind_off 1 135 1.0 0.0 -fr 04_res 1 135 1.0 0.0 -fr 05_nuclear 1 135 1.0 0.0 -fr 06_coal 1 135 1.0 0.0 -fr 07_gas 1 135 1.0 0.0 +fr 01_solar 1 135 0.0 1.0 +fr 02_wind_on 1 135 0.0 1.0 +fr 03_wind_off 1 135 0.0 1.0 +fr 04_res 1 135 0.0 1.0 +fr 05_nuclear 1 135 0.0 1.0 +fr 06_coal 1 135 0.0 1.0 +fr 07_gas 1 135 0.0 1.0 fr 08_non-res 1 135 0.0 0.0 fr 09_hydro_pump 1 135 0.0 0.0 -fr 01_solar 1 136 1.0 0.0 -fr 02_wind_on 1 136 1.0 0.0 -fr 03_wind_off 1 136 1.0 0.0 -fr 04_res 1 136 1.0 0.0 -fr 05_nuclear 1 136 1.0 0.0 -fr 06_coal 1 136 1.0 0.0 -fr 07_gas 1 136 1.0 0.0 +fr 01_solar 1 136 0.0 1.0 +fr 02_wind_on 1 136 0.0 1.0 +fr 03_wind_off 1 136 0.0 1.0 +fr 04_res 1 136 0.0 1.0 +fr 05_nuclear 1 136 0.0 1.0 +fr 06_coal 1 136 0.0 1.0 +fr 07_gas 1 136 0.0 1.0 fr 08_non-res 1 136 0.0 0.0 fr 09_hydro_pump 1 136 0.0 0.0 -fr 01_solar 1 137 1.0 0.0 -fr 02_wind_on 1 137 1.0 0.0 -fr 03_wind_off 1 137 1.0 0.0 -fr 04_res 1 137 1.0 0.0 -fr 05_nuclear 1 137 1.0 0.0 -fr 06_coal 1 137 1.0 0.0 -fr 07_gas 1 137 1.0 0.0 +fr 01_solar 1 137 0.0 1.0 +fr 02_wind_on 1 137 0.0 1.0 +fr 03_wind_off 1 137 0.0 1.0 +fr 04_res 1 137 0.0 1.0 +fr 05_nuclear 1 137 0.0 1.0 +fr 06_coal 1 137 0.0 1.0 +fr 07_gas 1 137 0.0 1.0 fr 08_non-res 1 137 0.0 0.0 fr 09_hydro_pump 1 137 0.0 0.0 -fr 01_solar 1 138 1.0 0.0 -fr 02_wind_on 1 138 1.0 0.0 -fr 03_wind_off 1 138 1.0 0.0 -fr 04_res 1 138 1.0 0.0 -fr 05_nuclear 1 138 1.0 0.0 -fr 06_coal 1 138 1.0 0.0 -fr 07_gas 1 138 1.0 0.0 +fr 01_solar 1 138 0.0 1.0 +fr 02_wind_on 1 138 0.0 1.0 +fr 03_wind_off 1 138 0.0 1.0 +fr 04_res 1 138 0.0 1.0 +fr 05_nuclear 1 138 0.0 1.0 +fr 06_coal 1 138 0.0 1.0 +fr 07_gas 1 138 0.0 1.0 fr 08_non-res 1 138 0.0 0.0 fr 09_hydro_pump 1 138 0.0 0.0 -fr 01_solar 1 139 1.0 0.0 -fr 02_wind_on 1 139 1.0 0.0 -fr 03_wind_off 1 139 1.0 0.0 -fr 04_res 1 139 1.0 0.0 -fr 05_nuclear 1 139 1.0 0.0 -fr 06_coal 1 139 1.0 0.0 -fr 07_gas 1 139 1.0 0.0 +fr 01_solar 1 139 0.0 1.0 +fr 02_wind_on 1 139 0.0 1.0 +fr 03_wind_off 1 139 0.0 1.0 +fr 04_res 1 139 0.0 1.0 +fr 05_nuclear 1 139 0.0 1.0 +fr 06_coal 1 139 0.0 1.0 +fr 07_gas 1 139 0.0 1.0 fr 08_non-res 1 139 0.0 0.0 fr 09_hydro_pump 1 139 0.0 0.0 -fr 01_solar 1 140 1.0 0.0 -fr 02_wind_on 1 140 1.0 0.0 -fr 03_wind_off 1 140 1.0 0.0 -fr 04_res 1 140 1.0 0.0 -fr 05_nuclear 1 140 1.0 0.0 -fr 06_coal 1 140 1.0 0.0 -fr 07_gas 1 140 1.0 0.0 +fr 01_solar 1 140 0.0 1.0 +fr 02_wind_on 1 140 0.0 1.0 +fr 03_wind_off 1 140 0.0 1.0 +fr 04_res 1 140 0.0 1.0 +fr 05_nuclear 1 140 0.0 1.0 +fr 06_coal 1 140 0.0 1.0 +fr 07_gas 1 140 0.0 1.0 fr 08_non-res 1 140 0.0 0.0 fr 09_hydro_pump 1 140 0.0 0.0 -fr 01_solar 1 141 1.0 0.0 -fr 02_wind_on 1 141 1.0 0.0 -fr 03_wind_off 1 141 1.0 0.0 -fr 04_res 1 141 1.0 0.0 -fr 05_nuclear 1 141 1.0 0.0 -fr 06_coal 1 141 1.0 0.0 -fr 07_gas 1 141 1.0 0.0 +fr 01_solar 1 141 0.0 1.0 +fr 02_wind_on 1 141 0.0 1.0 +fr 03_wind_off 1 141 0.0 1.0 +fr 04_res 1 141 0.0 1.0 +fr 05_nuclear 1 141 0.0 1.0 +fr 06_coal 1 141 0.0 1.0 +fr 07_gas 1 141 0.0 1.0 fr 08_non-res 1 141 0.0 0.0 fr 09_hydro_pump 1 141 0.0 0.0 -fr 01_solar 1 142 1.0 0.0 -fr 02_wind_on 1 142 1.0 0.0 -fr 03_wind_off 1 142 1.0 0.0 -fr 04_res 1 142 1.0 0.0 -fr 05_nuclear 1 142 1.0 0.0 -fr 06_coal 1 142 1.0 0.0 -fr 07_gas 1 142 1.0 0.0 -fr 08_non-res 1 142 1.0 0.0 +fr 01_solar 1 142 0.0 1.0 +fr 02_wind_on 1 142 0.0 1.0 +fr 03_wind_off 1 142 0.0 1.0 +fr 04_res 1 142 0.0 1.0 +fr 05_nuclear 1 142 0.0 1.0 +fr 06_coal 1 142 0.0 1.0 +fr 07_gas 1 142 0.0 1.0 +fr 08_non-res 1 142 0.0 1.0 fr 09_hydro_pump 1 142 0.0 0.0 -fr 01_solar 1 143 1.0 0.0 -fr 02_wind_on 1 143 1.0 0.0 -fr 03_wind_off 1 143 1.0 0.0 -fr 04_res 1 143 1.0 0.0 -fr 05_nuclear 1 143 1.0 0.0 -fr 06_coal 1 143 1.0 0.0 -fr 07_gas 1 143 1.0 0.0 -fr 08_non-res 1 143 1.0 0.0 +fr 01_solar 1 143 0.0 1.0 +fr 02_wind_on 1 143 0.0 1.0 +fr 03_wind_off 1 143 0.0 1.0 +fr 04_res 1 143 0.0 1.0 +fr 05_nuclear 1 143 0.0 1.0 +fr 06_coal 1 143 0.0 1.0 +fr 07_gas 1 143 0.0 1.0 +fr 08_non-res 1 143 0.0 1.0 fr 09_hydro_pump 1 143 0.0 0.0 -fr 01_solar 1 144 1.0 0.0 -fr 02_wind_on 1 144 1.0 0.0 -fr 03_wind_off 1 144 1.0 0.0 -fr 04_res 1 144 1.0 0.0 -fr 05_nuclear 1 144 1.0 0.0 -fr 06_coal 1 144 1.0 0.0 -fr 07_gas 1 144 1.0 0.0 -fr 08_non-res 1 144 1.0 0.0 +fr 01_solar 1 144 0.0 1.0 +fr 02_wind_on 1 144 0.0 1.0 +fr 03_wind_off 1 144 0.0 1.0 +fr 04_res 1 144 0.0 1.0 +fr 05_nuclear 1 144 0.0 1.0 +fr 06_coal 1 144 0.0 1.0 +fr 07_gas 1 144 0.0 1.0 +fr 08_non-res 1 144 0.0 1.0 fr 09_hydro_pump 1 144 0.0 0.0 -fr 01_solar 1 145 1.0 0.0 -fr 02_wind_on 1 145 1.0 0.0 -fr 03_wind_off 1 145 1.0 0.0 -fr 04_res 1 145 1.0 0.0 -fr 05_nuclear 1 145 1.0 0.0 -fr 06_coal 1 145 1.0 0.0 -fr 07_gas 1 145 1.0 0.0 -fr 08_non-res 1 145 1.0 0.0 +fr 01_solar 1 145 0.0 1.0 +fr 02_wind_on 1 145 0.0 1.0 +fr 03_wind_off 1 145 0.0 1.0 +fr 04_res 1 145 0.0 1.0 +fr 05_nuclear 1 145 0.0 1.0 +fr 06_coal 1 145 0.0 1.0 +fr 07_gas 1 145 0.0 1.0 +fr 08_non-res 1 145 0.0 1.0 fr 09_hydro_pump 1 145 0.0 0.0 -fr 01_solar 1 146 1.0 0.0 -fr 02_wind_on 1 146 1.0 0.0 -fr 03_wind_off 1 146 1.0 0.0 -fr 04_res 1 146 1.0 0.0 -fr 05_nuclear 1 146 1.0 0.0 -fr 06_coal 1 146 1.0 0.0 -fr 07_gas 1 146 1.0 0.0 -fr 08_non-res 1 146 1.0 0.0 +fr 01_solar 1 146 0.0 1.0 +fr 02_wind_on 1 146 0.0 1.0 +fr 03_wind_off 1 146 0.0 1.0 +fr 04_res 1 146 0.0 1.0 +fr 05_nuclear 1 146 0.0 1.0 +fr 06_coal 1 146 0.0 1.0 +fr 07_gas 1 146 0.0 1.0 +fr 08_non-res 1 146 0.0 1.0 fr 09_hydro_pump 1 146 0.0 0.0 -fr 01_solar 1 147 1.0 0.0 -fr 02_wind_on 1 147 1.0 0.0 -fr 03_wind_off 1 147 1.0 0.0 -fr 04_res 1 147 1.0 0.0 -fr 05_nuclear 1 147 1.0 0.0 -fr 06_coal 1 147 1.0 0.0 -fr 07_gas 1 147 1.0 0.0 -fr 08_non-res 1 147 1.0 0.0 +fr 01_solar 1 147 0.0 1.0 +fr 02_wind_on 1 147 0.0 1.0 +fr 03_wind_off 1 147 0.0 1.0 +fr 04_res 1 147 0.0 1.0 +fr 05_nuclear 1 147 0.0 1.0 +fr 06_coal 1 147 0.0 1.0 +fr 07_gas 1 147 0.0 1.0 +fr 08_non-res 1 147 0.0 1.0 fr 09_hydro_pump 1 147 0.0 0.0 -fr 01_solar 1 148 1.0 0.0 -fr 02_wind_on 1 148 1.0 0.0 -fr 03_wind_off 1 148 1.0 0.0 -fr 04_res 1 148 1.0 0.0 -fr 05_nuclear 1 148 1.0 0.0 -fr 06_coal 1 148 1.0 0.0 -fr 07_gas 1 148 1.0 0.0 -fr 08_non-res 1 148 1.0 0.0 +fr 01_solar 1 148 0.0 1.0 +fr 02_wind_on 1 148 0.0 1.0 +fr 03_wind_off 1 148 0.0 1.0 +fr 04_res 1 148 0.0 1.0 +fr 05_nuclear 1 148 0.0 1.0 +fr 06_coal 1 148 0.0 1.0 +fr 07_gas 1 148 0.0 1.0 +fr 08_non-res 1 148 0.0 1.0 fr 09_hydro_pump 1 148 0.0 0.0 -fr 01_solar 1 149 1.0 0.0 -fr 02_wind_on 1 149 1.0 0.0 -fr 03_wind_off 1 149 1.0 0.0 -fr 04_res 1 149 1.0 0.0 -fr 05_nuclear 1 149 1.0 0.0 -fr 06_coal 1 149 1.0 0.0 -fr 07_gas 1 149 1.0 0.0 -fr 08_non-res 1 149 1.0 0.0 +fr 01_solar 1 149 0.0 1.0 +fr 02_wind_on 1 149 0.0 1.0 +fr 03_wind_off 1 149 0.0 1.0 +fr 04_res 1 149 0.0 1.0 +fr 05_nuclear 1 149 0.0 1.0 +fr 06_coal 1 149 0.0 1.0 +fr 07_gas 1 149 0.0 1.0 +fr 08_non-res 1 149 0.0 1.0 fr 09_hydro_pump 1 149 0.0 0.0 -fr 01_solar 1 150 1.0 0.0 -fr 02_wind_on 1 150 1.0 0.0 -fr 03_wind_off 1 150 1.0 0.0 -fr 04_res 1 150 1.0 0.0 -fr 05_nuclear 1 150 1.0 0.0 -fr 06_coal 1 150 1.0 0.0 -fr 07_gas 1 150 1.0 0.0 -fr 08_non-res 1 150 1.0 0.0 +fr 01_solar 1 150 0.0 1.0 +fr 02_wind_on 1 150 0.0 1.0 +fr 03_wind_off 1 150 0.0 1.0 +fr 04_res 1 150 0.0 1.0 +fr 05_nuclear 1 150 0.0 1.0 +fr 06_coal 1 150 0.0 1.0 +fr 07_gas 1 150 0.0 1.0 +fr 08_non-res 1 150 0.0 1.0 fr 09_hydro_pump 1 150 0.0 0.0 -fr 01_solar 1 151 1.0 0.0 -fr 02_wind_on 1 151 1.0 0.0 -fr 03_wind_off 1 151 1.0 0.0 -fr 04_res 1 151 1.0 0.0 -fr 05_nuclear 1 151 1.0 0.0 -fr 06_coal 1 151 1.0 0.0 -fr 07_gas 1 151 1.0 0.0 -fr 08_non-res 1 151 1.0 0.0 +fr 01_solar 1 151 0.0 1.0 +fr 02_wind_on 1 151 0.0 1.0 +fr 03_wind_off 1 151 0.0 1.0 +fr 04_res 1 151 0.0 1.0 +fr 05_nuclear 1 151 0.0 1.0 +fr 06_coal 1 151 0.0 1.0 +fr 07_gas 1 151 0.0 1.0 +fr 08_non-res 1 151 0.0 1.0 fr 09_hydro_pump 1 151 0.0 0.0 -fr 01_solar 1 152 1.0 0.0 -fr 02_wind_on 1 152 1.0 0.0 -fr 03_wind_off 1 152 1.0 0.0 -fr 04_res 1 152 1.0 0.0 -fr 05_nuclear 1 152 1.0 0.0 -fr 06_coal 1 152 1.0 0.0 -fr 07_gas 1 152 1.0 0.0 -fr 08_non-res 1 152 1.0 0.0 +fr 01_solar 1 152 0.0 1.0 +fr 02_wind_on 1 152 0.0 1.0 +fr 03_wind_off 1 152 0.0 1.0 +fr 04_res 1 152 0.0 1.0 +fr 05_nuclear 1 152 0.0 1.0 +fr 06_coal 1 152 0.0 1.0 +fr 07_gas 1 152 0.0 1.0 +fr 08_non-res 1 152 0.0 1.0 fr 09_hydro_pump 1 152 0.0 0.0 -fr 01_solar 1 153 1.0 0.0 -fr 02_wind_on 1 153 1.0 0.0 -fr 03_wind_off 1 153 1.0 0.0 -fr 04_res 1 153 1.0 0.0 -fr 05_nuclear 1 153 1.0 0.0 -fr 06_coal 1 153 1.0 0.0 -fr 07_gas 1 153 1.0 0.0 -fr 08_non-res 1 153 1.0 0.0 +fr 01_solar 1 153 0.0 1.0 +fr 02_wind_on 1 153 0.0 1.0 +fr 03_wind_off 1 153 0.0 1.0 +fr 04_res 1 153 0.0 1.0 +fr 05_nuclear 1 153 0.0 1.0 +fr 06_coal 1 153 0.0 1.0 +fr 07_gas 1 153 0.0 1.0 +fr 08_non-res 1 153 0.0 1.0 fr 09_hydro_pump 1 153 0.0 0.0 -fr 01_solar 1 154 1.0 0.0 -fr 02_wind_on 1 154 1.0 0.0 -fr 03_wind_off 1 154 1.0 0.0 -fr 04_res 1 154 1.0 0.0 -fr 05_nuclear 1 154 1.0 0.0 -fr 06_coal 1 154 1.0 0.0 -fr 07_gas 1 154 1.0 0.0 -fr 08_non-res 1 154 1.0 0.0 +fr 01_solar 1 154 0.0 1.0 +fr 02_wind_on 1 154 0.0 1.0 +fr 03_wind_off 1 154 0.0 1.0 +fr 04_res 1 154 0.0 1.0 +fr 05_nuclear 1 154 0.0 1.0 +fr 06_coal 1 154 0.0 1.0 +fr 07_gas 1 154 0.0 1.0 +fr 08_non-res 1 154 0.0 1.0 fr 09_hydro_pump 1 154 0.0 0.0 -fr 01_solar 1 155 1.0 0.0 -fr 02_wind_on 1 155 1.0 0.0 -fr 03_wind_off 1 155 1.0 0.0 -fr 04_res 1 155 1.0 0.0 -fr 05_nuclear 1 155 1.0 0.0 -fr 06_coal 1 155 1.0 0.0 -fr 07_gas 1 155 1.0 0.0 -fr 08_non-res 1 155 1.0 0.0 +fr 01_solar 1 155 0.0 1.0 +fr 02_wind_on 1 155 0.0 1.0 +fr 03_wind_off 1 155 0.0 1.0 +fr 04_res 1 155 0.0 1.0 +fr 05_nuclear 1 155 0.0 1.0 +fr 06_coal 1 155 0.0 1.0 +fr 07_gas 1 155 0.0 1.0 +fr 08_non-res 1 155 0.0 1.0 fr 09_hydro_pump 1 155 0.0 0.0 -fr 01_solar 1 156 1.0 0.0 -fr 02_wind_on 1 156 1.0 0.0 -fr 03_wind_off 1 156 1.0 0.0 -fr 04_res 1 156 1.0 0.0 -fr 05_nuclear 1 156 1.0 0.0 -fr 06_coal 1 156 1.0 0.0 -fr 07_gas 1 156 1.0 0.0 -fr 08_non-res 1 156 1.0 0.0 +fr 01_solar 1 156 0.0 1.0 +fr 02_wind_on 1 156 0.0 1.0 +fr 03_wind_off 1 156 0.0 1.0 +fr 04_res 1 156 0.0 1.0 +fr 05_nuclear 1 156 0.0 1.0 +fr 06_coal 1 156 0.0 1.0 +fr 07_gas 1 156 0.0 1.0 +fr 08_non-res 1 156 0.0 1.0 fr 09_hydro_pump 1 156 0.0 0.0 -fr 01_solar 1 157 1.0 0.0 -fr 02_wind_on 1 157 1.0 0.0 -fr 03_wind_off 1 157 1.0 0.0 -fr 04_res 1 157 1.0 0.0 -fr 05_nuclear 1 157 1.0 0.0 -fr 06_coal 1 157 1.0 0.0 -fr 07_gas 1 157 1.0 0.0 -fr 08_non-res 1 157 1.0 0.0 +fr 01_solar 1 157 0.0 1.0 +fr 02_wind_on 1 157 0.0 1.0 +fr 03_wind_off 1 157 0.0 1.0 +fr 04_res 1 157 0.0 1.0 +fr 05_nuclear 1 157 0.0 1.0 +fr 06_coal 1 157 0.0 1.0 +fr 07_gas 1 157 0.0 1.0 +fr 08_non-res 1 157 0.0 1.0 fr 09_hydro_pump 1 157 0.0 0.0 -fr 01_solar 1 158 1.0 0.0 -fr 02_wind_on 1 158 1.0 0.0 -fr 03_wind_off 1 158 1.0 0.0 -fr 04_res 1 158 1.0 0.0 -fr 05_nuclear 1 158 1.0 0.0 -fr 06_coal 1 158 1.0 0.0 -fr 07_gas 1 158 1.0 0.0 -fr 08_non-res 1 158 1.0 0.0 +fr 01_solar 1 158 0.0 1.0 +fr 02_wind_on 1 158 0.0 1.0 +fr 03_wind_off 1 158 0.0 1.0 +fr 04_res 1 158 0.0 1.0 +fr 05_nuclear 1 158 0.0 1.0 +fr 06_coal 1 158 0.0 1.0 +fr 07_gas 1 158 0.0 1.0 +fr 08_non-res 1 158 0.0 1.0 fr 09_hydro_pump 1 158 0.0 0.0 -fr 01_solar 1 159 1.0 0.0 -fr 02_wind_on 1 159 1.0 0.0 -fr 03_wind_off 1 159 1.0 0.0 -fr 04_res 1 159 1.0 0.0 -fr 05_nuclear 1 159 1.0 0.0 -fr 06_coal 1 159 1.0 0.0 -fr 07_gas 1 159 1.0 0.0 -fr 08_non-res 1 159 1.0 0.0 +fr 01_solar 1 159 0.0 1.0 +fr 02_wind_on 1 159 0.0 1.0 +fr 03_wind_off 1 159 0.0 1.0 +fr 04_res 1 159 0.0 1.0 +fr 05_nuclear 1 159 0.0 1.0 +fr 06_coal 1 159 0.0 1.0 +fr 07_gas 1 159 0.0 1.0 +fr 08_non-res 1 159 0.0 1.0 fr 09_hydro_pump 1 159 0.0 0.0 -fr 01_solar 1 160 1.0 0.0 -fr 02_wind_on 1 160 1.0 0.0 -fr 03_wind_off 1 160 1.0 0.0 -fr 04_res 1 160 1.0 0.0 -fr 05_nuclear 1 160 1.0 0.0 -fr 06_coal 1 160 1.0 0.0 -fr 07_gas 1 160 1.0 0.0 -fr 08_non-res 1 160 1.0 0.0 +fr 01_solar 1 160 0.0 1.0 +fr 02_wind_on 1 160 0.0 1.0 +fr 03_wind_off 1 160 0.0 1.0 +fr 04_res 1 160 0.0 1.0 +fr 05_nuclear 1 160 0.0 1.0 +fr 06_coal 1 160 0.0 1.0 +fr 07_gas 1 160 0.0 1.0 +fr 08_non-res 1 160 0.0 1.0 fr 09_hydro_pump 1 160 0.0 0.0 -fr 01_solar 1 161 1.0 0.0 -fr 02_wind_on 1 161 1.0 0.0 -fr 03_wind_off 1 161 1.0 0.0 -fr 04_res 1 161 1.0 0.0 -fr 05_nuclear 1 161 1.0 0.0 -fr 06_coal 1 161 1.0 0.0 -fr 07_gas 1 161 1.0 0.0 -fr 08_non-res 1 161 1.0 0.0 +fr 01_solar 1 161 0.0 1.0 +fr 02_wind_on 1 161 0.0 1.0 +fr 03_wind_off 1 161 0.0 1.0 +fr 04_res 1 161 0.0 1.0 +fr 05_nuclear 1 161 0.0 1.0 +fr 06_coal 1 161 0.0 1.0 +fr 07_gas 1 161 0.0 1.0 +fr 08_non-res 1 161 0.0 1.0 fr 09_hydro_pump 1 161 0.0 0.0 -fr 01_solar 1 162 1.0 0.0 -fr 02_wind_on 1 162 1.0 0.0 -fr 03_wind_off 1 162 1.0 0.0 -fr 04_res 1 162 1.0 0.0 -fr 05_nuclear 1 162 1.0 0.0 -fr 06_coal 1 162 1.0 0.0 -fr 07_gas 1 162 1.0 0.0 -fr 08_non-res 1 162 1.0 0.0 -fr 09_hydro_pump 1 162 1.0 0.0 -fr 01_solar 1 163 1.0 0.0 -fr 02_wind_on 1 163 1.0 0.0 -fr 03_wind_off 1 163 1.0 0.0 -fr 04_res 1 163 1.0 0.0 -fr 05_nuclear 1 163 1.0 0.0 -fr 06_coal 1 163 1.0 0.0 -fr 07_gas 1 163 1.0 0.0 -fr 08_non-res 1 163 1.0 0.0 -fr 09_hydro_pump 1 163 1.0 0.0 -fr 01_solar 1 164 1.0 0.0 -fr 02_wind_on 1 164 1.0 0.0 -fr 03_wind_off 1 164 1.0 0.0 -fr 04_res 1 164 1.0 0.0 -fr 05_nuclear 1 164 1.0 0.0 -fr 06_coal 1 164 1.0 0.0 -fr 07_gas 1 164 1.0 0.0 -fr 08_non-res 1 164 1.0 0.0 -fr 09_hydro_pump 1 164 1.0 0.0 -fr 01_solar 1 165 1.0 0.0 -fr 02_wind_on 1 165 1.0 0.0 -fr 03_wind_off 1 165 1.0 0.0 -fr 04_res 1 165 1.0 0.0 -fr 05_nuclear 1 165 1.0 0.0 -fr 06_coal 1 165 1.0 0.0 -fr 07_gas 1 165 1.0 0.0 -fr 08_non-res 1 165 1.0 0.0 -fr 09_hydro_pump 1 165 1.0 0.0 -fr 01_solar 1 166 1.0 0.0 -fr 02_wind_on 1 166 1.0 0.0 -fr 03_wind_off 1 166 1.0 0.0 -fr 04_res 1 166 1.0 0.0 -fr 05_nuclear 1 166 1.0 0.0 -fr 06_coal 1 166 1.0 0.0 -fr 07_gas 1 166 1.0 0.0 -fr 08_non-res 1 166 1.0 0.0 -fr 09_hydro_pump 1 166 1.0 0.0 -fr 01_solar 1 167 1.0 0.0 -fr 02_wind_on 1 167 1.0 0.0 -fr 03_wind_off 1 167 1.0 0.0 -fr 04_res 1 167 1.0 0.0 -fr 05_nuclear 1 167 1.0 0.0 -fr 06_coal 1 167 1.0 0.0 -fr 07_gas 1 167 1.0 0.0 -fr 08_non-res 1 167 1.0 0.0 -fr 09_hydro_pump 1 167 1.0 0.0 -fr 01_solar 1 168 1.0 0.0 -fr 02_wind_on 1 168 1.0 0.0 -fr 03_wind_off 1 168 1.0 0.0 -fr 04_res 1 168 1.0 0.0 -fr 05_nuclear 1 168 1.0 0.0 -fr 06_coal 1 168 1.0 0.0 -fr 07_gas 1 168 1.0 0.0 -fr 08_non-res 1 168 1.0 0.0 -fr 09_hydro_pump 1 168 1.0 0.0 +fr 01_solar 1 162 0.0 1.0 +fr 02_wind_on 1 162 0.0 1.0 +fr 03_wind_off 1 162 0.0 1.0 +fr 04_res 1 162 0.0 1.0 +fr 05_nuclear 1 162 0.0 1.0 +fr 06_coal 1 162 0.0 1.0 +fr 07_gas 1 162 0.0 1.0 +fr 08_non-res 1 162 0.0 1.0 +fr 09_hydro_pump 1 162 0.0 1.0 +fr 01_solar 1 163 0.0 1.0 +fr 02_wind_on 1 163 0.0 1.0 +fr 03_wind_off 1 163 0.0 1.0 +fr 04_res 1 163 0.0 1.0 +fr 05_nuclear 1 163 0.0 1.0 +fr 06_coal 1 163 0.0 1.0 +fr 07_gas 1 163 0.0 1.0 +fr 08_non-res 1 163 0.0 1.0 +fr 09_hydro_pump 1 163 0.0 1.0 +fr 01_solar 1 164 0.0 1.0 +fr 02_wind_on 1 164 0.0 1.0 +fr 03_wind_off 1 164 0.0 1.0 +fr 04_res 1 164 0.0 1.0 +fr 05_nuclear 1 164 0.0 1.0 +fr 06_coal 1 164 0.0 1.0 +fr 07_gas 1 164 0.0 1.0 +fr 08_non-res 1 164 0.0 1.0 +fr 09_hydro_pump 1 164 0.0 1.0 +fr 01_solar 1 165 0.0 1.0 +fr 02_wind_on 1 165 0.0 1.0 +fr 03_wind_off 1 165 0.0 1.0 +fr 04_res 1 165 0.0 1.0 +fr 05_nuclear 1 165 0.0 1.0 +fr 06_coal 1 165 0.0 1.0 +fr 07_gas 1 165 0.0 1.0 +fr 08_non-res 1 165 0.0 1.0 +fr 09_hydro_pump 1 165 0.0 1.0 +fr 01_solar 1 166 0.0 1.0 +fr 02_wind_on 1 166 0.0 1.0 +fr 03_wind_off 1 166 0.0 1.0 +fr 04_res 1 166 0.0 1.0 +fr 05_nuclear 1 166 0.0 1.0 +fr 06_coal 1 166 0.0 1.0 +fr 07_gas 1 166 0.0 1.0 +fr 08_non-res 1 166 0.0 1.0 +fr 09_hydro_pump 1 166 0.0 1.0 +fr 01_solar 1 167 0.0 1.0 +fr 02_wind_on 1 167 0.0 1.0 +fr 03_wind_off 1 167 0.0 1.0 +fr 04_res 1 167 0.0 1.0 +fr 05_nuclear 1 167 0.0 1.0 +fr 06_coal 1 167 0.0 1.0 +fr 07_gas 1 167 0.0 1.0 +fr 08_non-res 1 167 0.0 1.0 +fr 09_hydro_pump 1 167 0.0 1.0 +fr 01_solar 1 168 0.0 1.0 +fr 02_wind_on 1 168 0.0 1.0 +fr 03_wind_off 1 168 0.0 1.0 +fr 04_res 1 168 0.0 1.0 +fr 05_nuclear 1 168 0.0 1.0 +fr 06_coal 1 168 0.0 1.0 +fr 07_gas 1 168 0.0 1.0 +fr 08_non-res 1 168 0.0 1.0 +fr 09_hydro_pump 1 168 0.0 1.0 fr 01_solar 1 169 0.0 0.0 fr 02_wind_on 1 169 0.0 0.0 fr 03_wind_off 1 169 0.0 0.0 @@ -7568,7 +7568,7 @@ fr 06_coal 1 169 0.0 0.0 fr 07_gas 1 169 0.0 0.0 fr 08_non-res 1 169 0.0 0.0 fr 09_hydro_pump 1 169 0.0 0.0 -fr 01_solar 1 170 1.0 0.0 +fr 01_solar 1 170 0.0 1.0 fr 02_wind_on 1 170 0.0 0.0 fr 03_wind_off 1 170 0.0 0.0 fr 04_res 1 170 0.0 0.0 @@ -7577,7 +7577,7 @@ fr 06_coal 1 170 0.0 0.0 fr 07_gas 1 170 0.0 0.0 fr 08_non-res 1 170 0.0 0.0 fr 09_hydro_pump 1 170 0.0 0.0 -fr 01_solar 1 171 1.0 0.0 +fr 01_solar 1 171 0.0 1.0 fr 02_wind_on 1 171 0.0 0.0 fr 03_wind_off 1 171 0.0 0.0 fr 04_res 1 171 0.0 0.0 @@ -7586,7 +7586,7 @@ fr 06_coal 1 171 0.0 0.0 fr 07_gas 1 171 0.0 0.0 fr 08_non-res 1 171 0.0 0.0 fr 09_hydro_pump 1 171 0.0 0.0 -fr 01_solar 1 172 1.0 0.0 +fr 01_solar 1 172 0.0 1.0 fr 02_wind_on 1 172 0.0 0.0 fr 03_wind_off 1 172 0.0 0.0 fr 04_res 1 172 0.0 0.0 @@ -7595,7 +7595,7 @@ fr 06_coal 1 172 0.0 0.0 fr 07_gas 1 172 0.0 0.0 fr 08_non-res 1 172 0.0 0.0 fr 09_hydro_pump 1 172 0.0 0.0 -fr 01_solar 1 173 1.0 0.0 +fr 01_solar 1 173 0.0 1.0 fr 02_wind_on 1 173 0.0 0.0 fr 03_wind_off 1 173 0.0 0.0 fr 04_res 1 173 0.0 0.0 @@ -7604,7 +7604,7 @@ fr 06_coal 1 173 0.0 0.0 fr 07_gas 1 173 0.0 0.0 fr 08_non-res 1 173 0.0 0.0 fr 09_hydro_pump 1 173 0.0 0.0 -fr 01_solar 1 174 1.0 0.0 +fr 01_solar 1 174 0.0 1.0 fr 02_wind_on 1 174 0.0 0.0 fr 03_wind_off 1 174 0.0 0.0 fr 04_res 1 174 0.0 0.0 @@ -7613,7 +7613,7 @@ fr 06_coal 1 174 0.0 0.0 fr 07_gas 1 174 0.0 0.0 fr 08_non-res 1 174 0.0 0.0 fr 09_hydro_pump 1 174 0.0 0.0 -fr 01_solar 1 175 1.0 0.0 +fr 01_solar 1 175 0.0 1.0 fr 02_wind_on 1 175 0.0 0.0 fr 03_wind_off 1 175 0.0 0.0 fr 04_res 1 175 0.0 0.0 @@ -7622,7 +7622,7 @@ fr 06_coal 1 175 0.0 0.0 fr 07_gas 1 175 0.0 0.0 fr 08_non-res 1 175 0.0 0.0 fr 09_hydro_pump 1 175 0.0 0.0 -fr 01_solar 1 176 1.0 0.0 +fr 01_solar 1 176 0.0 1.0 fr 02_wind_on 1 176 0.0 0.0 fr 03_wind_off 1 176 0.0 0.0 fr 04_res 1 176 0.0 0.0 @@ -7631,7 +7631,7 @@ fr 06_coal 1 176 0.0 0.0 fr 07_gas 1 176 0.0 0.0 fr 08_non-res 1 176 0.0 0.0 fr 09_hydro_pump 1 176 0.0 0.0 -fr 01_solar 1 177 1.0 0.0 +fr 01_solar 1 177 0.0 1.0 fr 02_wind_on 1 177 0.0 0.0 fr 03_wind_off 1 177 0.0 0.0 fr 04_res 1 177 0.0 0.0 @@ -7640,7 +7640,7 @@ fr 06_coal 1 177 0.0 0.0 fr 07_gas 1 177 0.0 0.0 fr 08_non-res 1 177 0.0 0.0 fr 09_hydro_pump 1 177 0.0 0.0 -fr 01_solar 1 178 1.0 0.0 +fr 01_solar 1 178 0.0 1.0 fr 02_wind_on 1 178 0.0 0.0 fr 03_wind_off 1 178 0.0 0.0 fr 04_res 1 178 0.0 0.0 @@ -7649,7 +7649,7 @@ fr 06_coal 1 178 0.0 0.0 fr 07_gas 1 178 0.0 0.0 fr 08_non-res 1 178 0.0 0.0 fr 09_hydro_pump 1 178 0.0 0.0 -fr 01_solar 1 179 1.0 0.0 +fr 01_solar 1 179 0.0 1.0 fr 02_wind_on 1 179 0.0 0.0 fr 03_wind_off 1 179 0.0 0.0 fr 04_res 1 179 0.0 0.0 @@ -7658,7 +7658,7 @@ fr 06_coal 1 179 0.0 0.0 fr 07_gas 1 179 0.0 0.0 fr 08_non-res 1 179 0.0 0.0 fr 09_hydro_pump 1 179 0.0 0.0 -fr 01_solar 1 180 1.0 0.0 +fr 01_solar 1 180 0.0 1.0 fr 02_wind_on 1 180 0.0 0.0 fr 03_wind_off 1 180 0.0 0.0 fr 04_res 1 180 0.0 0.0 @@ -7667,7 +7667,7 @@ fr 06_coal 1 180 0.0 0.0 fr 07_gas 1 180 0.0 0.0 fr 08_non-res 1 180 0.0 0.0 fr 09_hydro_pump 1 180 0.0 0.0 -fr 01_solar 1 181 1.0 0.0 +fr 01_solar 1 181 0.0 1.0 fr 02_wind_on 1 181 0.0 0.0 fr 03_wind_off 1 181 0.0 0.0 fr 04_res 1 181 0.0 0.0 @@ -7676,7 +7676,7 @@ fr 06_coal 1 181 0.0 0.0 fr 07_gas 1 181 0.0 0.0 fr 08_non-res 1 181 0.0 0.0 fr 09_hydro_pump 1 181 0.0 0.0 -fr 01_solar 1 182 1.0 0.0 +fr 01_solar 1 182 0.0 1.0 fr 02_wind_on 1 182 0.0 0.0 fr 03_wind_off 1 182 0.0 0.0 fr 04_res 1 182 0.0 0.0 @@ -7685,7 +7685,7 @@ fr 06_coal 1 182 0.0 0.0 fr 07_gas 1 182 0.0 0.0 fr 08_non-res 1 182 0.0 0.0 fr 09_hydro_pump 1 182 0.0 0.0 -fr 01_solar 1 183 1.0 0.0 +fr 01_solar 1 183 0.0 1.0 fr 02_wind_on 1 183 0.0 0.0 fr 03_wind_off 1 183 0.0 0.0 fr 04_res 1 183 0.0 0.0 @@ -7694,7 +7694,7 @@ fr 06_coal 1 183 0.0 0.0 fr 07_gas 1 183 0.0 0.0 fr 08_non-res 1 183 0.0 0.0 fr 09_hydro_pump 1 183 0.0 0.0 -fr 01_solar 1 184 1.0 0.0 +fr 01_solar 1 184 0.0 1.0 fr 02_wind_on 1 184 0.0 0.0 fr 03_wind_off 1 184 0.0 0.0 fr 04_res 1 184 0.0 0.0 @@ -7703,7 +7703,7 @@ fr 06_coal 1 184 0.0 0.0 fr 07_gas 1 184 0.0 0.0 fr 08_non-res 1 184 0.0 0.0 fr 09_hydro_pump 1 184 0.0 0.0 -fr 01_solar 1 185 1.0 0.0 +fr 01_solar 1 185 0.0 1.0 fr 02_wind_on 1 185 0.0 0.0 fr 03_wind_off 1 185 0.0 0.0 fr 04_res 1 185 0.0 0.0 @@ -7712,7 +7712,7 @@ fr 06_coal 1 185 0.0 0.0 fr 07_gas 1 185 0.0 0.0 fr 08_non-res 1 185 0.0 0.0 fr 09_hydro_pump 1 185 0.0 0.0 -fr 01_solar 1 186 1.0 0.0 +fr 01_solar 1 186 0.0 1.0 fr 02_wind_on 1 186 0.0 0.0 fr 03_wind_off 1 186 0.0 0.0 fr 04_res 1 186 0.0 0.0 @@ -7721,7 +7721,7 @@ fr 06_coal 1 186 0.0 0.0 fr 07_gas 1 186 0.0 0.0 fr 08_non-res 1 186 0.0 0.0 fr 09_hydro_pump 1 186 0.0 0.0 -fr 01_solar 1 187 1.0 0.0 +fr 01_solar 1 187 0.0 1.0 fr 02_wind_on 1 187 0.0 0.0 fr 03_wind_off 1 187 0.0 0.0 fr 04_res 1 187 0.0 0.0 @@ -7730,7 +7730,7 @@ fr 06_coal 1 187 0.0 0.0 fr 07_gas 1 187 0.0 0.0 fr 08_non-res 1 187 0.0 0.0 fr 09_hydro_pump 1 187 0.0 0.0 -fr 01_solar 1 188 1.0 0.0 +fr 01_solar 1 188 0.0 1.0 fr 02_wind_on 1 188 0.0 0.0 fr 03_wind_off 1 188 0.0 0.0 fr 04_res 1 188 0.0 0.0 @@ -7739,7 +7739,7 @@ fr 06_coal 1 188 0.0 0.0 fr 07_gas 1 188 0.0 0.0 fr 08_non-res 1 188 0.0 0.0 fr 09_hydro_pump 1 188 0.0 0.0 -fr 01_solar 1 189 1.0 0.0 +fr 01_solar 1 189 0.0 1.0 fr 02_wind_on 1 189 0.0 0.0 fr 03_wind_off 1 189 0.0 0.0 fr 04_res 1 189 0.0 0.0 @@ -7748,8 +7748,8 @@ fr 06_coal 1 189 0.0 0.0 fr 07_gas 1 189 0.0 0.0 fr 08_non-res 1 189 0.0 0.0 fr 09_hydro_pump 1 189 0.0 0.0 -fr 01_solar 1 190 1.0 0.0 -fr 02_wind_on 1 190 1.0 0.0 +fr 01_solar 1 190 0.0 1.0 +fr 02_wind_on 1 190 0.0 1.0 fr 03_wind_off 1 190 0.0 0.0 fr 04_res 1 190 0.0 0.0 fr 05_nuclear 1 190 0.0 0.0 @@ -7757,8 +7757,8 @@ fr 06_coal 1 190 0.0 0.0 fr 07_gas 1 190 0.0 0.0 fr 08_non-res 1 190 0.0 0.0 fr 09_hydro_pump 1 190 0.0 0.0 -fr 01_solar 1 191 1.0 0.0 -fr 02_wind_on 1 191 1.0 0.0 +fr 01_solar 1 191 0.0 1.0 +fr 02_wind_on 1 191 0.0 1.0 fr 03_wind_off 1 191 0.0 0.0 fr 04_res 1 191 0.0 0.0 fr 05_nuclear 1 191 0.0 0.0 @@ -7766,8 +7766,8 @@ fr 06_coal 1 191 0.0 0.0 fr 07_gas 1 191 0.0 0.0 fr 08_non-res 1 191 0.0 0.0 fr 09_hydro_pump 1 191 0.0 0.0 -fr 01_solar 1 192 1.0 0.0 -fr 02_wind_on 1 192 1.0 0.0 +fr 01_solar 1 192 0.0 1.0 +fr 02_wind_on 1 192 0.0 1.0 fr 03_wind_off 1 192 0.0 0.0 fr 04_res 1 192 0.0 0.0 fr 05_nuclear 1 192 0.0 0.0 @@ -7775,8 +7775,8 @@ fr 06_coal 1 192 0.0 0.0 fr 07_gas 1 192 0.0 0.0 fr 08_non-res 1 192 0.0 0.0 fr 09_hydro_pump 1 192 0.0 0.0 -fr 01_solar 1 193 1.0 0.0 -fr 02_wind_on 1 193 1.0 0.0 +fr 01_solar 1 193 0.0 1.0 +fr 02_wind_on 1 193 0.0 1.0 fr 03_wind_off 1 193 0.0 0.0 fr 04_res 1 193 0.0 0.0 fr 05_nuclear 1 193 0.0 0.0 @@ -7784,8 +7784,8 @@ fr 06_coal 1 193 0.0 0.0 fr 07_gas 1 193 0.0 0.0 fr 08_non-res 1 193 0.0 0.0 fr 09_hydro_pump 1 193 0.0 0.0 -fr 01_solar 1 194 1.0 0.0 -fr 02_wind_on 1 194 1.0 0.0 +fr 01_solar 1 194 0.0 1.0 +fr 02_wind_on 1 194 0.0 1.0 fr 03_wind_off 1 194 0.0 0.0 fr 04_res 1 194 0.0 0.0 fr 05_nuclear 1 194 0.0 0.0 @@ -7793,8 +7793,8 @@ fr 06_coal 1 194 0.0 0.0 fr 07_gas 1 194 0.0 0.0 fr 08_non-res 1 194 0.0 0.0 fr 09_hydro_pump 1 194 0.0 0.0 -fr 01_solar 1 195 1.0 0.0 -fr 02_wind_on 1 195 1.0 0.0 +fr 01_solar 1 195 0.0 1.0 +fr 02_wind_on 1 195 0.0 1.0 fr 03_wind_off 1 195 0.0 0.0 fr 04_res 1 195 0.0 0.0 fr 05_nuclear 1 195 0.0 0.0 @@ -7802,8 +7802,8 @@ fr 06_coal 1 195 0.0 0.0 fr 07_gas 1 195 0.0 0.0 fr 08_non-res 1 195 0.0 0.0 fr 09_hydro_pump 1 195 0.0 0.0 -fr 01_solar 1 196 1.0 0.0 -fr 02_wind_on 1 196 1.0 0.0 +fr 01_solar 1 196 0.0 1.0 +fr 02_wind_on 1 196 0.0 1.0 fr 03_wind_off 1 196 0.0 0.0 fr 04_res 1 196 0.0 0.0 fr 05_nuclear 1 196 0.0 0.0 @@ -7811,8 +7811,8 @@ fr 06_coal 1 196 0.0 0.0 fr 07_gas 1 196 0.0 0.0 fr 08_non-res 1 196 0.0 0.0 fr 09_hydro_pump 1 196 0.0 0.0 -fr 01_solar 1 197 1.0 0.0 -fr 02_wind_on 1 197 1.0 0.0 +fr 01_solar 1 197 0.0 1.0 +fr 02_wind_on 1 197 0.0 1.0 fr 03_wind_off 1 197 0.0 0.0 fr 04_res 1 197 0.0 0.0 fr 05_nuclear 1 197 0.0 0.0 @@ -7820,8 +7820,8 @@ fr 06_coal 1 197 0.0 0.0 fr 07_gas 1 197 0.0 0.0 fr 08_non-res 1 197 0.0 0.0 fr 09_hydro_pump 1 197 0.0 0.0 -fr 01_solar 1 198 1.0 0.0 -fr 02_wind_on 1 198 1.0 0.0 +fr 01_solar 1 198 0.0 1.0 +fr 02_wind_on 1 198 0.0 1.0 fr 03_wind_off 1 198 0.0 0.0 fr 04_res 1 198 0.0 0.0 fr 05_nuclear 1 198 0.0 0.0 @@ -7829,8 +7829,8 @@ fr 06_coal 1 198 0.0 0.0 fr 07_gas 1 198 0.0 0.0 fr 08_non-res 1 198 0.0 0.0 fr 09_hydro_pump 1 198 0.0 0.0 -fr 01_solar 1 199 1.0 0.0 -fr 02_wind_on 1 199 1.0 0.0 +fr 01_solar 1 199 0.0 1.0 +fr 02_wind_on 1 199 0.0 1.0 fr 03_wind_off 1 199 0.0 0.0 fr 04_res 1 199 0.0 0.0 fr 05_nuclear 1 199 0.0 0.0 @@ -7838,8 +7838,8 @@ fr 06_coal 1 199 0.0 0.0 fr 07_gas 1 199 0.0 0.0 fr 08_non-res 1 199 0.0 0.0 fr 09_hydro_pump 1 199 0.0 0.0 -fr 01_solar 1 200 1.0 0.0 -fr 02_wind_on 1 200 1.0 0.0 +fr 01_solar 1 200 0.0 1.0 +fr 02_wind_on 1 200 0.0 1.0 fr 03_wind_off 1 200 0.0 0.0 fr 04_res 1 200 0.0 0.0 fr 05_nuclear 1 200 0.0 0.0 @@ -7847,8 +7847,8 @@ fr 06_coal 1 200 0.0 0.0 fr 07_gas 1 200 0.0 0.0 fr 08_non-res 1 200 0.0 0.0 fr 09_hydro_pump 1 200 0.0 0.0 -fr 01_solar 1 201 1.0 0.0 -fr 02_wind_on 1 201 1.0 0.0 +fr 01_solar 1 201 0.0 1.0 +fr 02_wind_on 1 201 0.0 1.0 fr 03_wind_off 1 201 0.0 0.0 fr 04_res 1 201 0.0 0.0 fr 05_nuclear 1 201 0.0 0.0 @@ -7856,8 +7856,8 @@ fr 06_coal 1 201 0.0 0.0 fr 07_gas 1 201 0.0 0.0 fr 08_non-res 1 201 0.0 0.0 fr 09_hydro_pump 1 201 0.0 0.0 -fr 01_solar 1 202 1.0 0.0 -fr 02_wind_on 1 202 1.0 0.0 +fr 01_solar 1 202 0.0 1.0 +fr 02_wind_on 1 202 0.0 1.0 fr 03_wind_off 1 202 0.0 0.0 fr 04_res 1 202 0.0 0.0 fr 05_nuclear 1 202 0.0 0.0 @@ -7865,8 +7865,8 @@ fr 06_coal 1 202 0.0 0.0 fr 07_gas 1 202 0.0 0.0 fr 08_non-res 1 202 0.0 0.0 fr 09_hydro_pump 1 202 0.0 0.0 -fr 01_solar 1 203 1.0 0.0 -fr 02_wind_on 1 203 1.0 0.0 +fr 01_solar 1 203 0.0 1.0 +fr 02_wind_on 1 203 0.0 1.0 fr 03_wind_off 1 203 0.0 0.0 fr 04_res 1 203 0.0 0.0 fr 05_nuclear 1 203 0.0 0.0 @@ -7874,8 +7874,8 @@ fr 06_coal 1 203 0.0 0.0 fr 07_gas 1 203 0.0 0.0 fr 08_non-res 1 203 0.0 0.0 fr 09_hydro_pump 1 203 0.0 0.0 -fr 01_solar 1 204 1.0 0.0 -fr 02_wind_on 1 204 1.0 0.0 +fr 01_solar 1 204 0.0 1.0 +fr 02_wind_on 1 204 0.0 1.0 fr 03_wind_off 1 204 0.0 0.0 fr 04_res 1 204 0.0 0.0 fr 05_nuclear 1 204 0.0 0.0 @@ -7883,8 +7883,8 @@ fr 06_coal 1 204 0.0 0.0 fr 07_gas 1 204 0.0 0.0 fr 08_non-res 1 204 0.0 0.0 fr 09_hydro_pump 1 204 0.0 0.0 -fr 01_solar 1 205 1.0 0.0 -fr 02_wind_on 1 205 1.0 0.0 +fr 01_solar 1 205 0.0 1.0 +fr 02_wind_on 1 205 0.0 1.0 fr 03_wind_off 1 205 0.0 0.0 fr 04_res 1 205 0.0 0.0 fr 05_nuclear 1 205 0.0 0.0 @@ -7892,8 +7892,8 @@ fr 06_coal 1 205 0.0 0.0 fr 07_gas 1 205 0.0 0.0 fr 08_non-res 1 205 0.0 0.0 fr 09_hydro_pump 1 205 0.0 0.0 -fr 01_solar 1 206 1.0 0.0 -fr 02_wind_on 1 206 1.0 0.0 +fr 01_solar 1 206 0.0 1.0 +fr 02_wind_on 1 206 0.0 1.0 fr 03_wind_off 1 206 0.0 0.0 fr 04_res 1 206 0.0 0.0 fr 05_nuclear 1 206 0.0 0.0 @@ -7901,8 +7901,8 @@ fr 06_coal 1 206 0.0 0.0 fr 07_gas 1 206 0.0 0.0 fr 08_non-res 1 206 0.0 0.0 fr 09_hydro_pump 1 206 0.0 0.0 -fr 01_solar 1 207 1.0 0.0 -fr 02_wind_on 1 207 1.0 0.0 +fr 01_solar 1 207 0.0 1.0 +fr 02_wind_on 1 207 0.0 1.0 fr 03_wind_off 1 207 0.0 0.0 fr 04_res 1 207 0.0 0.0 fr 05_nuclear 1 207 0.0 0.0 @@ -7910,8 +7910,8 @@ fr 06_coal 1 207 0.0 0.0 fr 07_gas 1 207 0.0 0.0 fr 08_non-res 1 207 0.0 0.0 fr 09_hydro_pump 1 207 0.0 0.0 -fr 01_solar 1 208 1.0 0.0 -fr 02_wind_on 1 208 1.0 0.0 +fr 01_solar 1 208 0.0 1.0 +fr 02_wind_on 1 208 0.0 1.0 fr 03_wind_off 1 208 0.0 0.0 fr 04_res 1 208 0.0 0.0 fr 05_nuclear 1 208 0.0 0.0 @@ -7919,8 +7919,8 @@ fr 06_coal 1 208 0.0 0.0 fr 07_gas 1 208 0.0 0.0 fr 08_non-res 1 208 0.0 0.0 fr 09_hydro_pump 1 208 0.0 0.0 -fr 01_solar 1 209 1.0 0.0 -fr 02_wind_on 1 209 1.0 0.0 +fr 01_solar 1 209 0.0 1.0 +fr 02_wind_on 1 209 0.0 1.0 fr 03_wind_off 1 209 0.0 0.0 fr 04_res 1 209 0.0 0.0 fr 05_nuclear 1 209 0.0 0.0 @@ -7928,1149 +7928,1149 @@ fr 06_coal 1 209 0.0 0.0 fr 07_gas 1 209 0.0 0.0 fr 08_non-res 1 209 0.0 0.0 fr 09_hydro_pump 1 209 0.0 0.0 -fr 01_solar 1 210 1.0 0.0 -fr 02_wind_on 1 210 1.0 0.0 -fr 03_wind_off 1 210 1.0 0.0 +fr 01_solar 1 210 0.0 1.0 +fr 02_wind_on 1 210 0.0 1.0 +fr 03_wind_off 1 210 0.0 1.0 fr 04_res 1 210 0.0 0.0 fr 05_nuclear 1 210 0.0 0.0 fr 06_coal 1 210 0.0 0.0 fr 07_gas 1 210 0.0 0.0 fr 08_non-res 1 210 0.0 0.0 fr 09_hydro_pump 1 210 0.0 0.0 -fr 01_solar 1 211 1.0 0.0 -fr 02_wind_on 1 211 1.0 0.0 -fr 03_wind_off 1 211 1.0 0.0 +fr 01_solar 1 211 0.0 1.0 +fr 02_wind_on 1 211 0.0 1.0 +fr 03_wind_off 1 211 0.0 1.0 fr 04_res 1 211 0.0 0.0 fr 05_nuclear 1 211 0.0 0.0 fr 06_coal 1 211 0.0 0.0 fr 07_gas 1 211 0.0 0.0 fr 08_non-res 1 211 0.0 0.0 fr 09_hydro_pump 1 211 0.0 0.0 -fr 01_solar 1 212 1.0 0.0 -fr 02_wind_on 1 212 1.0 0.0 -fr 03_wind_off 1 212 1.0 0.0 +fr 01_solar 1 212 0.0 1.0 +fr 02_wind_on 1 212 0.0 1.0 +fr 03_wind_off 1 212 0.0 1.0 fr 04_res 1 212 0.0 0.0 fr 05_nuclear 1 212 0.0 0.0 fr 06_coal 1 212 0.0 0.0 fr 07_gas 1 212 0.0 0.0 fr 08_non-res 1 212 0.0 0.0 fr 09_hydro_pump 1 212 0.0 0.0 -fr 01_solar 1 213 1.0 0.0 -fr 02_wind_on 1 213 1.0 0.0 -fr 03_wind_off 1 213 1.0 0.0 +fr 01_solar 1 213 0.0 1.0 +fr 02_wind_on 1 213 0.0 1.0 +fr 03_wind_off 1 213 0.0 1.0 fr 04_res 1 213 0.0 0.0 fr 05_nuclear 1 213 0.0 0.0 fr 06_coal 1 213 0.0 0.0 fr 07_gas 1 213 0.0 0.0 fr 08_non-res 1 213 0.0 0.0 fr 09_hydro_pump 1 213 0.0 0.0 -fr 01_solar 1 214 1.0 0.0 -fr 02_wind_on 1 214 1.0 0.0 -fr 03_wind_off 1 214 1.0 0.0 +fr 01_solar 1 214 0.0 1.0 +fr 02_wind_on 1 214 0.0 1.0 +fr 03_wind_off 1 214 0.0 1.0 fr 04_res 1 214 0.0 0.0 fr 05_nuclear 1 214 0.0 0.0 fr 06_coal 1 214 0.0 0.0 fr 07_gas 1 214 0.0 0.0 fr 08_non-res 1 214 0.0 0.0 fr 09_hydro_pump 1 214 0.0 0.0 -fr 01_solar 1 215 1.0 0.0 -fr 02_wind_on 1 215 1.0 0.0 -fr 03_wind_off 1 215 1.0 0.0 +fr 01_solar 1 215 0.0 1.0 +fr 02_wind_on 1 215 0.0 1.0 +fr 03_wind_off 1 215 0.0 1.0 fr 04_res 1 215 0.0 0.0 fr 05_nuclear 1 215 0.0 0.0 fr 06_coal 1 215 0.0 0.0 fr 07_gas 1 215 0.0 0.0 fr 08_non-res 1 215 0.0 0.0 fr 09_hydro_pump 1 215 0.0 0.0 -fr 01_solar 1 216 1.0 0.0 -fr 02_wind_on 1 216 1.0 0.0 -fr 03_wind_off 1 216 1.0 0.0 +fr 01_solar 1 216 0.0 1.0 +fr 02_wind_on 1 216 0.0 1.0 +fr 03_wind_off 1 216 0.0 1.0 fr 04_res 1 216 0.0 0.0 fr 05_nuclear 1 216 0.0 0.0 fr 06_coal 1 216 0.0 0.0 fr 07_gas 1 216 0.0 0.0 fr 08_non-res 1 216 0.0 0.0 fr 09_hydro_pump 1 216 0.0 0.0 -fr 01_solar 1 217 1.0 0.0 -fr 02_wind_on 1 217 1.0 0.0 -fr 03_wind_off 1 217 1.0 0.0 +fr 01_solar 1 217 0.0 1.0 +fr 02_wind_on 1 217 0.0 1.0 +fr 03_wind_off 1 217 0.0 1.0 fr 04_res 1 217 0.0 0.0 fr 05_nuclear 1 217 0.0 0.0 fr 06_coal 1 217 0.0 0.0 fr 07_gas 1 217 0.0 0.0 fr 08_non-res 1 217 0.0 0.0 fr 09_hydro_pump 1 217 0.0 0.0 -fr 01_solar 1 218 1.0 0.0 -fr 02_wind_on 1 218 1.0 0.0 -fr 03_wind_off 1 218 1.0 0.0 +fr 01_solar 1 218 0.0 1.0 +fr 02_wind_on 1 218 0.0 1.0 +fr 03_wind_off 1 218 0.0 1.0 fr 04_res 1 218 0.0 0.0 fr 05_nuclear 1 218 0.0 0.0 fr 06_coal 1 218 0.0 0.0 fr 07_gas 1 218 0.0 0.0 fr 08_non-res 1 218 0.0 0.0 fr 09_hydro_pump 1 218 0.0 0.0 -fr 01_solar 1 219 1.0 0.0 -fr 02_wind_on 1 219 1.0 0.0 -fr 03_wind_off 1 219 1.0 0.0 +fr 01_solar 1 219 0.0 1.0 +fr 02_wind_on 1 219 0.0 1.0 +fr 03_wind_off 1 219 0.0 1.0 fr 04_res 1 219 0.0 0.0 fr 05_nuclear 1 219 0.0 0.0 fr 06_coal 1 219 0.0 0.0 fr 07_gas 1 219 0.0 0.0 fr 08_non-res 1 219 0.0 0.0 fr 09_hydro_pump 1 219 0.0 0.0 -fr 01_solar 1 220 1.0 0.0 -fr 02_wind_on 1 220 1.0 0.0 -fr 03_wind_off 1 220 1.0 0.0 +fr 01_solar 1 220 0.0 1.0 +fr 02_wind_on 1 220 0.0 1.0 +fr 03_wind_off 1 220 0.0 1.0 fr 04_res 1 220 0.0 0.0 fr 05_nuclear 1 220 0.0 0.0 fr 06_coal 1 220 0.0 0.0 fr 07_gas 1 220 0.0 0.0 fr 08_non-res 1 220 0.0 0.0 fr 09_hydro_pump 1 220 0.0 0.0 -fr 01_solar 1 221 1.0 0.0 -fr 02_wind_on 1 221 1.0 0.0 -fr 03_wind_off 1 221 1.0 0.0 +fr 01_solar 1 221 0.0 1.0 +fr 02_wind_on 1 221 0.0 1.0 +fr 03_wind_off 1 221 0.0 1.0 fr 04_res 1 221 0.0 0.0 fr 05_nuclear 1 221 0.0 0.0 fr 06_coal 1 221 0.0 0.0 fr 07_gas 1 221 0.0 0.0 fr 08_non-res 1 221 0.0 0.0 fr 09_hydro_pump 1 221 0.0 0.0 -fr 01_solar 1 222 1.0 0.0 -fr 02_wind_on 1 222 1.0 0.0 -fr 03_wind_off 1 222 1.0 0.0 +fr 01_solar 1 222 0.0 1.0 +fr 02_wind_on 1 222 0.0 1.0 +fr 03_wind_off 1 222 0.0 1.0 fr 04_res 1 222 0.0 0.0 fr 05_nuclear 1 222 0.0 0.0 fr 06_coal 1 222 0.0 0.0 fr 07_gas 1 222 0.0 0.0 fr 08_non-res 1 222 0.0 0.0 fr 09_hydro_pump 1 222 0.0 0.0 -fr 01_solar 1 223 1.0 0.0 -fr 02_wind_on 1 223 1.0 0.0 -fr 03_wind_off 1 223 1.0 0.0 +fr 01_solar 1 223 0.0 1.0 +fr 02_wind_on 1 223 0.0 1.0 +fr 03_wind_off 1 223 0.0 1.0 fr 04_res 1 223 0.0 0.0 fr 05_nuclear 1 223 0.0 0.0 fr 06_coal 1 223 0.0 0.0 fr 07_gas 1 223 0.0 0.0 fr 08_non-res 1 223 0.0 0.0 fr 09_hydro_pump 1 223 0.0 0.0 -fr 01_solar 1 224 1.0 0.0 -fr 02_wind_on 1 224 1.0 0.0 -fr 03_wind_off 1 224 1.0 0.0 +fr 01_solar 1 224 0.0 1.0 +fr 02_wind_on 1 224 0.0 1.0 +fr 03_wind_off 1 224 0.0 1.0 fr 04_res 1 224 0.0 0.0 fr 05_nuclear 1 224 0.0 0.0 fr 06_coal 1 224 0.0 0.0 fr 07_gas 1 224 0.0 0.0 fr 08_non-res 1 224 0.0 0.0 fr 09_hydro_pump 1 224 0.0 0.0 -fr 01_solar 1 225 1.0 0.0 -fr 02_wind_on 1 225 1.0 0.0 -fr 03_wind_off 1 225 1.0 0.0 +fr 01_solar 1 225 0.0 1.0 +fr 02_wind_on 1 225 0.0 1.0 +fr 03_wind_off 1 225 0.0 1.0 fr 04_res 1 225 0.0 0.0 fr 05_nuclear 1 225 0.0 0.0 fr 06_coal 1 225 0.0 0.0 fr 07_gas 1 225 0.0 0.0 fr 08_non-res 1 225 0.0 0.0 fr 09_hydro_pump 1 225 0.0 0.0 -fr 01_solar 1 226 1.0 0.0 -fr 02_wind_on 1 226 1.0 0.0 -fr 03_wind_off 1 226 1.0 0.0 +fr 01_solar 1 226 0.0 1.0 +fr 02_wind_on 1 226 0.0 1.0 +fr 03_wind_off 1 226 0.0 1.0 fr 04_res 1 226 0.0 0.0 fr 05_nuclear 1 226 0.0 0.0 fr 06_coal 1 226 0.0 0.0 fr 07_gas 1 226 0.0 0.0 fr 08_non-res 1 226 0.0 0.0 fr 09_hydro_pump 1 226 0.0 0.0 -fr 01_solar 1 227 1.0 0.0 -fr 02_wind_on 1 227 1.0 0.0 -fr 03_wind_off 1 227 1.0 0.0 +fr 01_solar 1 227 0.0 1.0 +fr 02_wind_on 1 227 0.0 1.0 +fr 03_wind_off 1 227 0.0 1.0 fr 04_res 1 227 0.0 0.0 fr 05_nuclear 1 227 0.0 0.0 fr 06_coal 1 227 0.0 0.0 fr 07_gas 1 227 0.0 0.0 fr 08_non-res 1 227 0.0 0.0 fr 09_hydro_pump 1 227 0.0 0.0 -fr 01_solar 1 228 1.0 0.0 -fr 02_wind_on 1 228 1.0 0.0 -fr 03_wind_off 1 228 1.0 0.0 +fr 01_solar 1 228 0.0 1.0 +fr 02_wind_on 1 228 0.0 1.0 +fr 03_wind_off 1 228 0.0 1.0 fr 04_res 1 228 0.0 0.0 fr 05_nuclear 1 228 0.0 0.0 fr 06_coal 1 228 0.0 0.0 fr 07_gas 1 228 0.0 0.0 fr 08_non-res 1 228 0.0 0.0 fr 09_hydro_pump 1 228 0.0 0.0 -fr 01_solar 1 229 1.0 0.0 -fr 02_wind_on 1 229 1.0 0.0 -fr 03_wind_off 1 229 1.0 0.0 +fr 01_solar 1 229 0.0 1.0 +fr 02_wind_on 1 229 0.0 1.0 +fr 03_wind_off 1 229 0.0 1.0 fr 04_res 1 229 0.0 0.0 fr 05_nuclear 1 229 0.0 0.0 fr 06_coal 1 229 0.0 0.0 fr 07_gas 1 229 0.0 0.0 fr 08_non-res 1 229 0.0 0.0 fr 09_hydro_pump 1 229 0.0 0.0 -fr 01_solar 1 230 1.0 0.0 -fr 02_wind_on 1 230 1.0 0.0 -fr 03_wind_off 1 230 1.0 0.0 -fr 04_res 1 230 1.0 0.0 +fr 01_solar 1 230 0.0 1.0 +fr 02_wind_on 1 230 0.0 1.0 +fr 03_wind_off 1 230 0.0 1.0 +fr 04_res 1 230 0.0 1.0 fr 05_nuclear 1 230 0.0 0.0 fr 06_coal 1 230 0.0 0.0 fr 07_gas 1 230 0.0 0.0 fr 08_non-res 1 230 0.0 0.0 fr 09_hydro_pump 1 230 0.0 0.0 -fr 01_solar 1 231 1.0 0.0 -fr 02_wind_on 1 231 1.0 0.0 -fr 03_wind_off 1 231 1.0 0.0 -fr 04_res 1 231 1.0 0.0 +fr 01_solar 1 231 0.0 1.0 +fr 02_wind_on 1 231 0.0 1.0 +fr 03_wind_off 1 231 0.0 1.0 +fr 04_res 1 231 0.0 1.0 fr 05_nuclear 1 231 0.0 0.0 fr 06_coal 1 231 0.0 0.0 fr 07_gas 1 231 0.0 0.0 fr 08_non-res 1 231 0.0 0.0 fr 09_hydro_pump 1 231 0.0 0.0 -fr 01_solar 1 232 1.0 0.0 -fr 02_wind_on 1 232 1.0 0.0 -fr 03_wind_off 1 232 1.0 0.0 -fr 04_res 1 232 1.0 0.0 +fr 01_solar 1 232 0.0 1.0 +fr 02_wind_on 1 232 0.0 1.0 +fr 03_wind_off 1 232 0.0 1.0 +fr 04_res 1 232 0.0 1.0 fr 05_nuclear 1 232 0.0 0.0 fr 06_coal 1 232 0.0 0.0 fr 07_gas 1 232 0.0 0.0 fr 08_non-res 1 232 0.0 0.0 fr 09_hydro_pump 1 232 0.0 0.0 -fr 01_solar 1 233 1.0 0.0 -fr 02_wind_on 1 233 1.0 0.0 -fr 03_wind_off 1 233 1.0 0.0 -fr 04_res 1 233 1.0 0.0 +fr 01_solar 1 233 0.0 1.0 +fr 02_wind_on 1 233 0.0 1.0 +fr 03_wind_off 1 233 0.0 1.0 +fr 04_res 1 233 0.0 1.0 fr 05_nuclear 1 233 0.0 0.0 fr 06_coal 1 233 0.0 0.0 fr 07_gas 1 233 0.0 0.0 fr 08_non-res 1 233 0.0 0.0 fr 09_hydro_pump 1 233 0.0 0.0 -fr 01_solar 1 234 1.0 0.0 -fr 02_wind_on 1 234 1.0 0.0 -fr 03_wind_off 1 234 1.0 0.0 -fr 04_res 1 234 1.0 0.0 +fr 01_solar 1 234 0.0 1.0 +fr 02_wind_on 1 234 0.0 1.0 +fr 03_wind_off 1 234 0.0 1.0 +fr 04_res 1 234 0.0 1.0 fr 05_nuclear 1 234 0.0 0.0 fr 06_coal 1 234 0.0 0.0 fr 07_gas 1 234 0.0 0.0 fr 08_non-res 1 234 0.0 0.0 fr 09_hydro_pump 1 234 0.0 0.0 -fr 01_solar 1 235 1.0 0.0 -fr 02_wind_on 1 235 1.0 0.0 -fr 03_wind_off 1 235 1.0 0.0 -fr 04_res 1 235 1.0 0.0 +fr 01_solar 1 235 0.0 1.0 +fr 02_wind_on 1 235 0.0 1.0 +fr 03_wind_off 1 235 0.0 1.0 +fr 04_res 1 235 0.0 1.0 fr 05_nuclear 1 235 0.0 0.0 fr 06_coal 1 235 0.0 0.0 fr 07_gas 1 235 0.0 0.0 fr 08_non-res 1 235 0.0 0.0 fr 09_hydro_pump 1 235 0.0 0.0 -fr 01_solar 1 236 1.0 0.0 -fr 02_wind_on 1 236 1.0 0.0 -fr 03_wind_off 1 236 1.0 0.0 -fr 04_res 1 236 1.0 0.0 +fr 01_solar 1 236 0.0 1.0 +fr 02_wind_on 1 236 0.0 1.0 +fr 03_wind_off 1 236 0.0 1.0 +fr 04_res 1 236 0.0 1.0 fr 05_nuclear 1 236 0.0 0.0 fr 06_coal 1 236 0.0 0.0 fr 07_gas 1 236 0.0 0.0 fr 08_non-res 1 236 0.0 0.0 fr 09_hydro_pump 1 236 0.0 0.0 -fr 01_solar 1 237 1.0 0.0 -fr 02_wind_on 1 237 1.0 0.0 -fr 03_wind_off 1 237 1.0 0.0 -fr 04_res 1 237 1.0 0.0 +fr 01_solar 1 237 0.0 1.0 +fr 02_wind_on 1 237 0.0 1.0 +fr 03_wind_off 1 237 0.0 1.0 +fr 04_res 1 237 0.0 1.0 fr 05_nuclear 1 237 0.0 0.0 fr 06_coal 1 237 0.0 0.0 fr 07_gas 1 237 0.0 0.0 fr 08_non-res 1 237 0.0 0.0 fr 09_hydro_pump 1 237 0.0 0.0 -fr 01_solar 1 238 1.0 0.0 -fr 02_wind_on 1 238 1.0 0.0 -fr 03_wind_off 1 238 1.0 0.0 -fr 04_res 1 238 1.0 0.0 +fr 01_solar 1 238 0.0 1.0 +fr 02_wind_on 1 238 0.0 1.0 +fr 03_wind_off 1 238 0.0 1.0 +fr 04_res 1 238 0.0 1.0 fr 05_nuclear 1 238 0.0 0.0 fr 06_coal 1 238 0.0 0.0 fr 07_gas 1 238 0.0 0.0 fr 08_non-res 1 238 0.0 0.0 fr 09_hydro_pump 1 238 0.0 0.0 -fr 01_solar 1 239 1.0 0.0 -fr 02_wind_on 1 239 1.0 0.0 -fr 03_wind_off 1 239 1.0 0.0 -fr 04_res 1 239 1.0 0.0 +fr 01_solar 1 239 0.0 1.0 +fr 02_wind_on 1 239 0.0 1.0 +fr 03_wind_off 1 239 0.0 1.0 +fr 04_res 1 239 0.0 1.0 fr 05_nuclear 1 239 0.0 0.0 fr 06_coal 1 239 0.0 0.0 fr 07_gas 1 239 0.0 0.0 fr 08_non-res 1 239 0.0 0.0 fr 09_hydro_pump 1 239 0.0 0.0 -fr 01_solar 1 240 1.0 0.0 -fr 02_wind_on 1 240 1.0 0.0 -fr 03_wind_off 1 240 1.0 0.0 -fr 04_res 1 240 1.0 0.0 +fr 01_solar 1 240 0.0 1.0 +fr 02_wind_on 1 240 0.0 1.0 +fr 03_wind_off 1 240 0.0 1.0 +fr 04_res 1 240 0.0 1.0 fr 05_nuclear 1 240 0.0 0.0 fr 06_coal 1 240 0.0 0.0 fr 07_gas 1 240 0.0 0.0 fr 08_non-res 1 240 0.0 0.0 fr 09_hydro_pump 1 240 0.0 0.0 -fr 01_solar 1 241 1.0 0.0 -fr 02_wind_on 1 241 1.0 0.0 -fr 03_wind_off 1 241 1.0 0.0 -fr 04_res 1 241 1.0 0.0 +fr 01_solar 1 241 0.0 1.0 +fr 02_wind_on 1 241 0.0 1.0 +fr 03_wind_off 1 241 0.0 1.0 +fr 04_res 1 241 0.0 1.0 fr 05_nuclear 1 241 0.0 0.0 fr 06_coal 1 241 0.0 0.0 fr 07_gas 1 241 0.0 0.0 fr 08_non-res 1 241 0.0 0.0 fr 09_hydro_pump 1 241 0.0 0.0 -fr 01_solar 1 242 1.0 0.0 -fr 02_wind_on 1 242 1.0 0.0 -fr 03_wind_off 1 242 1.0 0.0 -fr 04_res 1 242 1.0 0.0 +fr 01_solar 1 242 0.0 1.0 +fr 02_wind_on 1 242 0.0 1.0 +fr 03_wind_off 1 242 0.0 1.0 +fr 04_res 1 242 0.0 1.0 fr 05_nuclear 1 242 0.0 0.0 fr 06_coal 1 242 0.0 0.0 fr 07_gas 1 242 0.0 0.0 fr 08_non-res 1 242 0.0 0.0 fr 09_hydro_pump 1 242 0.0 0.0 -fr 01_solar 1 243 1.0 0.0 -fr 02_wind_on 1 243 1.0 0.0 -fr 03_wind_off 1 243 1.0 0.0 -fr 04_res 1 243 1.0 0.0 +fr 01_solar 1 243 0.0 1.0 +fr 02_wind_on 1 243 0.0 1.0 +fr 03_wind_off 1 243 0.0 1.0 +fr 04_res 1 243 0.0 1.0 fr 05_nuclear 1 243 0.0 0.0 fr 06_coal 1 243 0.0 0.0 fr 07_gas 1 243 0.0 0.0 fr 08_non-res 1 243 0.0 0.0 fr 09_hydro_pump 1 243 0.0 0.0 -fr 01_solar 1 244 1.0 0.0 -fr 02_wind_on 1 244 1.0 0.0 -fr 03_wind_off 1 244 1.0 0.0 -fr 04_res 1 244 1.0 0.0 +fr 01_solar 1 244 0.0 1.0 +fr 02_wind_on 1 244 0.0 1.0 +fr 03_wind_off 1 244 0.0 1.0 +fr 04_res 1 244 0.0 1.0 fr 05_nuclear 1 244 0.0 0.0 fr 06_coal 1 244 0.0 0.0 fr 07_gas 1 244 0.0 0.0 fr 08_non-res 1 244 0.0 0.0 fr 09_hydro_pump 1 244 0.0 0.0 -fr 01_solar 1 245 1.0 0.0 -fr 02_wind_on 1 245 1.0 0.0 -fr 03_wind_off 1 245 1.0 0.0 -fr 04_res 1 245 1.0 0.0 +fr 01_solar 1 245 0.0 1.0 +fr 02_wind_on 1 245 0.0 1.0 +fr 03_wind_off 1 245 0.0 1.0 +fr 04_res 1 245 0.0 1.0 fr 05_nuclear 1 245 0.0 0.0 fr 06_coal 1 245 0.0 0.0 fr 07_gas 1 245 0.0 0.0 fr 08_non-res 1 245 0.0 0.0 fr 09_hydro_pump 1 245 0.0 0.0 -fr 01_solar 1 246 1.0 0.0 -fr 02_wind_on 1 246 1.0 0.0 -fr 03_wind_off 1 246 1.0 0.0 -fr 04_res 1 246 1.0 0.0 +fr 01_solar 1 246 0.0 1.0 +fr 02_wind_on 1 246 0.0 1.0 +fr 03_wind_off 1 246 0.0 1.0 +fr 04_res 1 246 0.0 1.0 fr 05_nuclear 1 246 0.0 0.0 fr 06_coal 1 246 0.0 0.0 fr 07_gas 1 246 0.0 0.0 fr 08_non-res 1 246 0.0 0.0 fr 09_hydro_pump 1 246 0.0 0.0 -fr 01_solar 1 247 1.0 0.0 -fr 02_wind_on 1 247 1.0 0.0 -fr 03_wind_off 1 247 1.0 0.0 -fr 04_res 1 247 1.0 0.0 +fr 01_solar 1 247 0.0 1.0 +fr 02_wind_on 1 247 0.0 1.0 +fr 03_wind_off 1 247 0.0 1.0 +fr 04_res 1 247 0.0 1.0 fr 05_nuclear 1 247 0.0 0.0 fr 06_coal 1 247 0.0 0.0 fr 07_gas 1 247 0.0 0.0 fr 08_non-res 1 247 0.0 0.0 fr 09_hydro_pump 1 247 0.0 0.0 -fr 01_solar 1 248 1.0 0.0 -fr 02_wind_on 1 248 1.0 0.0 -fr 03_wind_off 1 248 1.0 0.0 -fr 04_res 1 248 1.0 0.0 +fr 01_solar 1 248 0.0 1.0 +fr 02_wind_on 1 248 0.0 1.0 +fr 03_wind_off 1 248 0.0 1.0 +fr 04_res 1 248 0.0 1.0 fr 05_nuclear 1 248 0.0 0.0 fr 06_coal 1 248 0.0 0.0 fr 07_gas 1 248 0.0 0.0 fr 08_non-res 1 248 0.0 0.0 fr 09_hydro_pump 1 248 0.0 0.0 -fr 01_solar 1 249 1.0 0.0 -fr 02_wind_on 1 249 1.0 0.0 -fr 03_wind_off 1 249 1.0 0.0 -fr 04_res 1 249 1.0 0.0 +fr 01_solar 1 249 0.0 1.0 +fr 02_wind_on 1 249 0.0 1.0 +fr 03_wind_off 1 249 0.0 1.0 +fr 04_res 1 249 0.0 1.0 fr 05_nuclear 1 249 0.0 0.0 fr 06_coal 1 249 0.0 0.0 fr 07_gas 1 249 0.0 0.0 fr 08_non-res 1 249 0.0 0.0 fr 09_hydro_pump 1 249 0.0 0.0 -fr 01_solar 1 250 1.0 0.0 -fr 02_wind_on 1 250 1.0 0.0 -fr 03_wind_off 1 250 1.0 0.0 -fr 04_res 1 250 1.0 0.0 -fr 05_nuclear 1 250 1.0 0.0 +fr 01_solar 1 250 0.0 1.0 +fr 02_wind_on 1 250 0.0 1.0 +fr 03_wind_off 1 250 0.0 1.0 +fr 04_res 1 250 0.0 1.0 +fr 05_nuclear 1 250 0.0 1.0 fr 06_coal 1 250 0.0 0.0 fr 07_gas 1 250 0.0 0.0 fr 08_non-res 1 250 0.0 0.0 fr 09_hydro_pump 1 250 0.0 0.0 -fr 01_solar 1 251 1.0 0.0 -fr 02_wind_on 1 251 1.0 0.0 -fr 03_wind_off 1 251 1.0 0.0 -fr 04_res 1 251 1.0 0.0 -fr 05_nuclear 1 251 1.0 0.0 +fr 01_solar 1 251 0.0 1.0 +fr 02_wind_on 1 251 0.0 1.0 +fr 03_wind_off 1 251 0.0 1.0 +fr 04_res 1 251 0.0 1.0 +fr 05_nuclear 1 251 0.0 1.0 fr 06_coal 1 251 0.0 0.0 fr 07_gas 1 251 0.0 0.0 fr 08_non-res 1 251 0.0 0.0 fr 09_hydro_pump 1 251 0.0 0.0 -fr 01_solar 1 252 1.0 0.0 -fr 02_wind_on 1 252 1.0 0.0 -fr 03_wind_off 1 252 1.0 0.0 -fr 04_res 1 252 1.0 0.0 -fr 05_nuclear 1 252 1.0 0.0 +fr 01_solar 1 252 0.0 1.0 +fr 02_wind_on 1 252 0.0 1.0 +fr 03_wind_off 1 252 0.0 1.0 +fr 04_res 1 252 0.0 1.0 +fr 05_nuclear 1 252 0.0 1.0 fr 06_coal 1 252 0.0 0.0 fr 07_gas 1 252 0.0 0.0 fr 08_non-res 1 252 0.0 0.0 fr 09_hydro_pump 1 252 0.0 0.0 -fr 01_solar 1 253 1.0 0.0 -fr 02_wind_on 1 253 1.0 0.0 -fr 03_wind_off 1 253 1.0 0.0 -fr 04_res 1 253 1.0 0.0 -fr 05_nuclear 1 253 1.0 0.0 +fr 01_solar 1 253 0.0 1.0 +fr 02_wind_on 1 253 0.0 1.0 +fr 03_wind_off 1 253 0.0 1.0 +fr 04_res 1 253 0.0 1.0 +fr 05_nuclear 1 253 0.0 1.0 fr 06_coal 1 253 0.0 0.0 fr 07_gas 1 253 0.0 0.0 fr 08_non-res 1 253 0.0 0.0 fr 09_hydro_pump 1 253 0.0 0.0 -fr 01_solar 1 254 1.0 0.0 -fr 02_wind_on 1 254 1.0 0.0 -fr 03_wind_off 1 254 1.0 0.0 -fr 04_res 1 254 1.0 0.0 -fr 05_nuclear 1 254 1.0 0.0 +fr 01_solar 1 254 0.0 1.0 +fr 02_wind_on 1 254 0.0 1.0 +fr 03_wind_off 1 254 0.0 1.0 +fr 04_res 1 254 0.0 1.0 +fr 05_nuclear 1 254 0.0 1.0 fr 06_coal 1 254 0.0 0.0 fr 07_gas 1 254 0.0 0.0 fr 08_non-res 1 254 0.0 0.0 fr 09_hydro_pump 1 254 0.0 0.0 -fr 01_solar 1 255 1.0 0.0 -fr 02_wind_on 1 255 1.0 0.0 -fr 03_wind_off 1 255 1.0 0.0 -fr 04_res 1 255 1.0 0.0 -fr 05_nuclear 1 255 1.0 0.0 +fr 01_solar 1 255 0.0 1.0 +fr 02_wind_on 1 255 0.0 1.0 +fr 03_wind_off 1 255 0.0 1.0 +fr 04_res 1 255 0.0 1.0 +fr 05_nuclear 1 255 0.0 1.0 fr 06_coal 1 255 0.0 0.0 fr 07_gas 1 255 0.0 0.0 fr 08_non-res 1 255 0.0 0.0 fr 09_hydro_pump 1 255 0.0 0.0 -fr 01_solar 1 256 1.0 0.0 -fr 02_wind_on 1 256 1.0 0.0 -fr 03_wind_off 1 256 1.0 0.0 -fr 04_res 1 256 1.0 0.0 -fr 05_nuclear 1 256 1.0 0.0 +fr 01_solar 1 256 0.0 1.0 +fr 02_wind_on 1 256 0.0 1.0 +fr 03_wind_off 1 256 0.0 1.0 +fr 04_res 1 256 0.0 1.0 +fr 05_nuclear 1 256 0.0 1.0 fr 06_coal 1 256 0.0 0.0 fr 07_gas 1 256 0.0 0.0 fr 08_non-res 1 256 0.0 0.0 fr 09_hydro_pump 1 256 0.0 0.0 -fr 01_solar 1 257 1.0 0.0 -fr 02_wind_on 1 257 1.0 0.0 -fr 03_wind_off 1 257 1.0 0.0 -fr 04_res 1 257 1.0 0.0 -fr 05_nuclear 1 257 1.0 0.0 +fr 01_solar 1 257 0.0 1.0 +fr 02_wind_on 1 257 0.0 1.0 +fr 03_wind_off 1 257 0.0 1.0 +fr 04_res 1 257 0.0 1.0 +fr 05_nuclear 1 257 0.0 1.0 fr 06_coal 1 257 0.0 0.0 fr 07_gas 1 257 0.0 0.0 fr 08_non-res 1 257 0.0 0.0 fr 09_hydro_pump 1 257 0.0 0.0 -fr 01_solar 1 258 1.0 0.0 -fr 02_wind_on 1 258 1.0 0.0 -fr 03_wind_off 1 258 1.0 0.0 -fr 04_res 1 258 1.0 0.0 -fr 05_nuclear 1 258 1.0 0.0 +fr 01_solar 1 258 0.0 1.0 +fr 02_wind_on 1 258 0.0 1.0 +fr 03_wind_off 1 258 0.0 1.0 +fr 04_res 1 258 0.0 1.0 +fr 05_nuclear 1 258 0.0 1.0 fr 06_coal 1 258 0.0 0.0 fr 07_gas 1 258 0.0 0.0 fr 08_non-res 1 258 0.0 0.0 fr 09_hydro_pump 1 258 0.0 0.0 -fr 01_solar 1 259 1.0 0.0 -fr 02_wind_on 1 259 1.0 0.0 -fr 03_wind_off 1 259 1.0 0.0 -fr 04_res 1 259 1.0 0.0 -fr 05_nuclear 1 259 1.0 0.0 +fr 01_solar 1 259 0.0 1.0 +fr 02_wind_on 1 259 0.0 1.0 +fr 03_wind_off 1 259 0.0 1.0 +fr 04_res 1 259 0.0 1.0 +fr 05_nuclear 1 259 0.0 1.0 fr 06_coal 1 259 0.0 0.0 fr 07_gas 1 259 0.0 0.0 fr 08_non-res 1 259 0.0 0.0 fr 09_hydro_pump 1 259 0.0 0.0 -fr 01_solar 1 260 1.0 0.0 -fr 02_wind_on 1 260 1.0 0.0 -fr 03_wind_off 1 260 1.0 0.0 -fr 04_res 1 260 1.0 0.0 -fr 05_nuclear 1 260 1.0 0.0 +fr 01_solar 1 260 0.0 1.0 +fr 02_wind_on 1 260 0.0 1.0 +fr 03_wind_off 1 260 0.0 1.0 +fr 04_res 1 260 0.0 1.0 +fr 05_nuclear 1 260 0.0 1.0 fr 06_coal 1 260 0.0 0.0 fr 07_gas 1 260 0.0 0.0 fr 08_non-res 1 260 0.0 0.0 fr 09_hydro_pump 1 260 0.0 0.0 -fr 01_solar 1 261 1.0 0.0 -fr 02_wind_on 1 261 1.0 0.0 -fr 03_wind_off 1 261 1.0 0.0 -fr 04_res 1 261 1.0 0.0 -fr 05_nuclear 1 261 1.0 0.0 +fr 01_solar 1 261 0.0 1.0 +fr 02_wind_on 1 261 0.0 1.0 +fr 03_wind_off 1 261 0.0 1.0 +fr 04_res 1 261 0.0 1.0 +fr 05_nuclear 1 261 0.0 1.0 fr 06_coal 1 261 0.0 0.0 fr 07_gas 1 261 0.0 0.0 fr 08_non-res 1 261 0.0 0.0 fr 09_hydro_pump 1 261 0.0 0.0 -fr 01_solar 1 262 1.0 0.0 -fr 02_wind_on 1 262 1.0 0.0 -fr 03_wind_off 1 262 1.0 0.0 -fr 04_res 1 262 1.0 0.0 -fr 05_nuclear 1 262 1.0 0.0 +fr 01_solar 1 262 0.0 1.0 +fr 02_wind_on 1 262 0.0 1.0 +fr 03_wind_off 1 262 0.0 1.0 +fr 04_res 1 262 0.0 1.0 +fr 05_nuclear 1 262 0.0 1.0 fr 06_coal 1 262 0.0 0.0 fr 07_gas 1 262 0.0 0.0 fr 08_non-res 1 262 0.0 0.0 fr 09_hydro_pump 1 262 0.0 0.0 -fr 01_solar 1 263 1.0 0.0 -fr 02_wind_on 1 263 1.0 0.0 -fr 03_wind_off 1 263 1.0 0.0 -fr 04_res 1 263 1.0 0.0 -fr 05_nuclear 1 263 1.0 0.0 +fr 01_solar 1 263 0.0 1.0 +fr 02_wind_on 1 263 0.0 1.0 +fr 03_wind_off 1 263 0.0 1.0 +fr 04_res 1 263 0.0 1.0 +fr 05_nuclear 1 263 0.0 1.0 fr 06_coal 1 263 0.0 0.0 fr 07_gas 1 263 0.0 0.0 fr 08_non-res 1 263 0.0 0.0 fr 09_hydro_pump 1 263 0.0 0.0 -fr 01_solar 1 264 1.0 0.0 -fr 02_wind_on 1 264 1.0 0.0 -fr 03_wind_off 1 264 1.0 0.0 -fr 04_res 1 264 1.0 0.0 -fr 05_nuclear 1 264 1.0 0.0 +fr 01_solar 1 264 0.0 1.0 +fr 02_wind_on 1 264 0.0 1.0 +fr 03_wind_off 1 264 0.0 1.0 +fr 04_res 1 264 0.0 1.0 +fr 05_nuclear 1 264 0.0 1.0 fr 06_coal 1 264 0.0 0.0 fr 07_gas 1 264 0.0 0.0 fr 08_non-res 1 264 0.0 0.0 fr 09_hydro_pump 1 264 0.0 0.0 -fr 01_solar 1 265 1.0 0.0 -fr 02_wind_on 1 265 1.0 0.0 -fr 03_wind_off 1 265 1.0 0.0 -fr 04_res 1 265 1.0 0.0 -fr 05_nuclear 1 265 1.0 0.0 +fr 01_solar 1 265 0.0 1.0 +fr 02_wind_on 1 265 0.0 1.0 +fr 03_wind_off 1 265 0.0 1.0 +fr 04_res 1 265 0.0 1.0 +fr 05_nuclear 1 265 0.0 1.0 fr 06_coal 1 265 0.0 0.0 fr 07_gas 1 265 0.0 0.0 fr 08_non-res 1 265 0.0 0.0 fr 09_hydro_pump 1 265 0.0 0.0 -fr 01_solar 1 266 1.0 0.0 -fr 02_wind_on 1 266 1.0 0.0 -fr 03_wind_off 1 266 1.0 0.0 -fr 04_res 1 266 1.0 0.0 -fr 05_nuclear 1 266 1.0 0.0 +fr 01_solar 1 266 0.0 1.0 +fr 02_wind_on 1 266 0.0 1.0 +fr 03_wind_off 1 266 0.0 1.0 +fr 04_res 1 266 0.0 1.0 +fr 05_nuclear 1 266 0.0 1.0 fr 06_coal 1 266 0.0 0.0 fr 07_gas 1 266 0.0 0.0 fr 08_non-res 1 266 0.0 0.0 fr 09_hydro_pump 1 266 0.0 0.0 -fr 01_solar 1 267 1.0 0.0 -fr 02_wind_on 1 267 1.0 0.0 -fr 03_wind_off 1 267 1.0 0.0 -fr 04_res 1 267 1.0 0.0 -fr 05_nuclear 1 267 1.0 0.0 +fr 01_solar 1 267 0.0 1.0 +fr 02_wind_on 1 267 0.0 1.0 +fr 03_wind_off 1 267 0.0 1.0 +fr 04_res 1 267 0.0 1.0 +fr 05_nuclear 1 267 0.0 1.0 fr 06_coal 1 267 0.0 0.0 fr 07_gas 1 267 0.0 0.0 fr 08_non-res 1 267 0.0 0.0 fr 09_hydro_pump 1 267 0.0 0.0 -fr 01_solar 1 268 1.0 0.0 -fr 02_wind_on 1 268 1.0 0.0 -fr 03_wind_off 1 268 1.0 0.0 -fr 04_res 1 268 1.0 0.0 -fr 05_nuclear 1 268 1.0 0.0 +fr 01_solar 1 268 0.0 1.0 +fr 02_wind_on 1 268 0.0 1.0 +fr 03_wind_off 1 268 0.0 1.0 +fr 04_res 1 268 0.0 1.0 +fr 05_nuclear 1 268 0.0 1.0 fr 06_coal 1 268 0.0 0.0 fr 07_gas 1 268 0.0 0.0 fr 08_non-res 1 268 0.0 0.0 fr 09_hydro_pump 1 268 0.0 0.0 -fr 01_solar 1 269 1.0 0.0 -fr 02_wind_on 1 269 1.0 0.0 -fr 03_wind_off 1 269 1.0 0.0 -fr 04_res 1 269 1.0 0.0 -fr 05_nuclear 1 269 1.0 0.0 +fr 01_solar 1 269 0.0 1.0 +fr 02_wind_on 1 269 0.0 1.0 +fr 03_wind_off 1 269 0.0 1.0 +fr 04_res 1 269 0.0 1.0 +fr 05_nuclear 1 269 0.0 1.0 fr 06_coal 1 269 0.0 0.0 fr 07_gas 1 269 0.0 0.0 fr 08_non-res 1 269 0.0 0.0 fr 09_hydro_pump 1 269 0.0 0.0 -fr 01_solar 1 270 1.0 0.0 -fr 02_wind_on 1 270 1.0 0.0 -fr 03_wind_off 1 270 1.0 0.0 -fr 04_res 1 270 1.0 0.0 -fr 05_nuclear 1 270 1.0 0.0 -fr 06_coal 1 270 1.0 0.0 +fr 01_solar 1 270 0.0 1.0 +fr 02_wind_on 1 270 0.0 1.0 +fr 03_wind_off 1 270 0.0 1.0 +fr 04_res 1 270 0.0 1.0 +fr 05_nuclear 1 270 0.0 1.0 +fr 06_coal 1 270 0.0 1.0 fr 07_gas 1 270 0.0 0.0 fr 08_non-res 1 270 0.0 0.0 fr 09_hydro_pump 1 270 0.0 0.0 -fr 01_solar 1 271 1.0 0.0 -fr 02_wind_on 1 271 1.0 0.0 -fr 03_wind_off 1 271 1.0 0.0 -fr 04_res 1 271 1.0 0.0 -fr 05_nuclear 1 271 1.0 0.0 -fr 06_coal 1 271 1.0 0.0 +fr 01_solar 1 271 0.0 1.0 +fr 02_wind_on 1 271 0.0 1.0 +fr 03_wind_off 1 271 0.0 1.0 +fr 04_res 1 271 0.0 1.0 +fr 05_nuclear 1 271 0.0 1.0 +fr 06_coal 1 271 0.0 1.0 fr 07_gas 1 271 0.0 0.0 fr 08_non-res 1 271 0.0 0.0 fr 09_hydro_pump 1 271 0.0 0.0 -fr 01_solar 1 272 1.0 0.0 -fr 02_wind_on 1 272 1.0 0.0 -fr 03_wind_off 1 272 1.0 0.0 -fr 04_res 1 272 1.0 0.0 -fr 05_nuclear 1 272 1.0 0.0 -fr 06_coal 1 272 1.0 0.0 +fr 01_solar 1 272 0.0 1.0 +fr 02_wind_on 1 272 0.0 1.0 +fr 03_wind_off 1 272 0.0 1.0 +fr 04_res 1 272 0.0 1.0 +fr 05_nuclear 1 272 0.0 1.0 +fr 06_coal 1 272 0.0 1.0 fr 07_gas 1 272 0.0 0.0 fr 08_non-res 1 272 0.0 0.0 fr 09_hydro_pump 1 272 0.0 0.0 -fr 01_solar 1 273 1.0 0.0 -fr 02_wind_on 1 273 1.0 0.0 -fr 03_wind_off 1 273 1.0 0.0 -fr 04_res 1 273 1.0 0.0 -fr 05_nuclear 1 273 1.0 0.0 -fr 06_coal 1 273 1.0 0.0 +fr 01_solar 1 273 0.0 1.0 +fr 02_wind_on 1 273 0.0 1.0 +fr 03_wind_off 1 273 0.0 1.0 +fr 04_res 1 273 0.0 1.0 +fr 05_nuclear 1 273 0.0 1.0 +fr 06_coal 1 273 0.0 1.0 fr 07_gas 1 273 0.0 0.0 fr 08_non-res 1 273 0.0 0.0 fr 09_hydro_pump 1 273 0.0 0.0 -fr 01_solar 1 274 1.0 0.0 -fr 02_wind_on 1 274 1.0 0.0 -fr 03_wind_off 1 274 1.0 0.0 -fr 04_res 1 274 1.0 0.0 -fr 05_nuclear 1 274 1.0 0.0 -fr 06_coal 1 274 1.0 0.0 +fr 01_solar 1 274 0.0 1.0 +fr 02_wind_on 1 274 0.0 1.0 +fr 03_wind_off 1 274 0.0 1.0 +fr 04_res 1 274 0.0 1.0 +fr 05_nuclear 1 274 0.0 1.0 +fr 06_coal 1 274 0.0 1.0 fr 07_gas 1 274 0.0 0.0 fr 08_non-res 1 274 0.0 0.0 fr 09_hydro_pump 1 274 0.0 0.0 -fr 01_solar 1 275 1.0 0.0 -fr 02_wind_on 1 275 1.0 0.0 -fr 03_wind_off 1 275 1.0 0.0 -fr 04_res 1 275 1.0 0.0 -fr 05_nuclear 1 275 1.0 0.0 -fr 06_coal 1 275 1.0 0.0 +fr 01_solar 1 275 0.0 1.0 +fr 02_wind_on 1 275 0.0 1.0 +fr 03_wind_off 1 275 0.0 1.0 +fr 04_res 1 275 0.0 1.0 +fr 05_nuclear 1 275 0.0 1.0 +fr 06_coal 1 275 0.0 1.0 fr 07_gas 1 275 0.0 0.0 fr 08_non-res 1 275 0.0 0.0 fr 09_hydro_pump 1 275 0.0 0.0 -fr 01_solar 1 276 1.0 0.0 -fr 02_wind_on 1 276 1.0 0.0 -fr 03_wind_off 1 276 1.0 0.0 -fr 04_res 1 276 1.0 0.0 -fr 05_nuclear 1 276 1.0 0.0 -fr 06_coal 1 276 1.0 0.0 +fr 01_solar 1 276 0.0 1.0 +fr 02_wind_on 1 276 0.0 1.0 +fr 03_wind_off 1 276 0.0 1.0 +fr 04_res 1 276 0.0 1.0 +fr 05_nuclear 1 276 0.0 1.0 +fr 06_coal 1 276 0.0 1.0 fr 07_gas 1 276 0.0 0.0 fr 08_non-res 1 276 0.0 0.0 fr 09_hydro_pump 1 276 0.0 0.0 -fr 01_solar 1 277 1.0 0.0 -fr 02_wind_on 1 277 1.0 0.0 -fr 03_wind_off 1 277 1.0 0.0 -fr 04_res 1 277 1.0 0.0 -fr 05_nuclear 1 277 1.0 0.0 -fr 06_coal 1 277 1.0 0.0 +fr 01_solar 1 277 0.0 1.0 +fr 02_wind_on 1 277 0.0 1.0 +fr 03_wind_off 1 277 0.0 1.0 +fr 04_res 1 277 0.0 1.0 +fr 05_nuclear 1 277 0.0 1.0 +fr 06_coal 1 277 0.0 1.0 fr 07_gas 1 277 0.0 0.0 fr 08_non-res 1 277 0.0 0.0 fr 09_hydro_pump 1 277 0.0 0.0 -fr 01_solar 1 278 1.0 0.0 -fr 02_wind_on 1 278 1.0 0.0 -fr 03_wind_off 1 278 1.0 0.0 -fr 04_res 1 278 1.0 0.0 -fr 05_nuclear 1 278 1.0 0.0 -fr 06_coal 1 278 1.0 0.0 +fr 01_solar 1 278 0.0 1.0 +fr 02_wind_on 1 278 0.0 1.0 +fr 03_wind_off 1 278 0.0 1.0 +fr 04_res 1 278 0.0 1.0 +fr 05_nuclear 1 278 0.0 1.0 +fr 06_coal 1 278 0.0 1.0 fr 07_gas 1 278 0.0 0.0 fr 08_non-res 1 278 0.0 0.0 fr 09_hydro_pump 1 278 0.0 0.0 -fr 01_solar 1 279 1.0 0.0 -fr 02_wind_on 1 279 1.0 0.0 -fr 03_wind_off 1 279 1.0 0.0 -fr 04_res 1 279 1.0 0.0 -fr 05_nuclear 1 279 1.0 0.0 -fr 06_coal 1 279 1.0 0.0 +fr 01_solar 1 279 0.0 1.0 +fr 02_wind_on 1 279 0.0 1.0 +fr 03_wind_off 1 279 0.0 1.0 +fr 04_res 1 279 0.0 1.0 +fr 05_nuclear 1 279 0.0 1.0 +fr 06_coal 1 279 0.0 1.0 fr 07_gas 1 279 0.0 0.0 fr 08_non-res 1 279 0.0 0.0 fr 09_hydro_pump 1 279 0.0 0.0 -fr 01_solar 1 280 1.0 0.0 -fr 02_wind_on 1 280 1.0 0.0 -fr 03_wind_off 1 280 1.0 0.0 -fr 04_res 1 280 1.0 0.0 -fr 05_nuclear 1 280 1.0 0.0 -fr 06_coal 1 280 1.0 0.0 +fr 01_solar 1 280 0.0 1.0 +fr 02_wind_on 1 280 0.0 1.0 +fr 03_wind_off 1 280 0.0 1.0 +fr 04_res 1 280 0.0 1.0 +fr 05_nuclear 1 280 0.0 1.0 +fr 06_coal 1 280 0.0 1.0 fr 07_gas 1 280 0.0 0.0 fr 08_non-res 1 280 0.0 0.0 fr 09_hydro_pump 1 280 0.0 0.0 -fr 01_solar 1 281 1.0 0.0 -fr 02_wind_on 1 281 1.0 0.0 -fr 03_wind_off 1 281 1.0 0.0 -fr 04_res 1 281 1.0 0.0 -fr 05_nuclear 1 281 1.0 0.0 -fr 06_coal 1 281 1.0 0.0 +fr 01_solar 1 281 0.0 1.0 +fr 02_wind_on 1 281 0.0 1.0 +fr 03_wind_off 1 281 0.0 1.0 +fr 04_res 1 281 0.0 1.0 +fr 05_nuclear 1 281 0.0 1.0 +fr 06_coal 1 281 0.0 1.0 fr 07_gas 1 281 0.0 0.0 fr 08_non-res 1 281 0.0 0.0 fr 09_hydro_pump 1 281 0.0 0.0 -fr 01_solar 1 282 1.0 0.0 -fr 02_wind_on 1 282 1.0 0.0 -fr 03_wind_off 1 282 1.0 0.0 -fr 04_res 1 282 1.0 0.0 -fr 05_nuclear 1 282 1.0 0.0 -fr 06_coal 1 282 1.0 0.0 +fr 01_solar 1 282 0.0 1.0 +fr 02_wind_on 1 282 0.0 1.0 +fr 03_wind_off 1 282 0.0 1.0 +fr 04_res 1 282 0.0 1.0 +fr 05_nuclear 1 282 0.0 1.0 +fr 06_coal 1 282 0.0 1.0 fr 07_gas 1 282 0.0 0.0 fr 08_non-res 1 282 0.0 0.0 fr 09_hydro_pump 1 282 0.0 0.0 -fr 01_solar 1 283 1.0 0.0 -fr 02_wind_on 1 283 1.0 0.0 -fr 03_wind_off 1 283 1.0 0.0 -fr 04_res 1 283 1.0 0.0 -fr 05_nuclear 1 283 1.0 0.0 -fr 06_coal 1 283 1.0 0.0 +fr 01_solar 1 283 0.0 1.0 +fr 02_wind_on 1 283 0.0 1.0 +fr 03_wind_off 1 283 0.0 1.0 +fr 04_res 1 283 0.0 1.0 +fr 05_nuclear 1 283 0.0 1.0 +fr 06_coal 1 283 0.0 1.0 fr 07_gas 1 283 0.0 0.0 fr 08_non-res 1 283 0.0 0.0 fr 09_hydro_pump 1 283 0.0 0.0 -fr 01_solar 1 284 1.0 0.0 -fr 02_wind_on 1 284 1.0 0.0 -fr 03_wind_off 1 284 1.0 0.0 -fr 04_res 1 284 1.0 0.0 -fr 05_nuclear 1 284 1.0 0.0 -fr 06_coal 1 284 1.0 0.0 +fr 01_solar 1 284 0.0 1.0 +fr 02_wind_on 1 284 0.0 1.0 +fr 03_wind_off 1 284 0.0 1.0 +fr 04_res 1 284 0.0 1.0 +fr 05_nuclear 1 284 0.0 1.0 +fr 06_coal 1 284 0.0 1.0 fr 07_gas 1 284 0.0 0.0 fr 08_non-res 1 284 0.0 0.0 fr 09_hydro_pump 1 284 0.0 0.0 -fr 01_solar 1 285 1.0 0.0 -fr 02_wind_on 1 285 1.0 0.0 -fr 03_wind_off 1 285 1.0 0.0 -fr 04_res 1 285 1.0 0.0 -fr 05_nuclear 1 285 1.0 0.0 -fr 06_coal 1 285 1.0 0.0 +fr 01_solar 1 285 0.0 1.0 +fr 02_wind_on 1 285 0.0 1.0 +fr 03_wind_off 1 285 0.0 1.0 +fr 04_res 1 285 0.0 1.0 +fr 05_nuclear 1 285 0.0 1.0 +fr 06_coal 1 285 0.0 1.0 fr 07_gas 1 285 0.0 0.0 fr 08_non-res 1 285 0.0 0.0 fr 09_hydro_pump 1 285 0.0 0.0 -fr 01_solar 1 286 1.0 0.0 -fr 02_wind_on 1 286 1.0 0.0 -fr 03_wind_off 1 286 1.0 0.0 -fr 04_res 1 286 1.0 0.0 -fr 05_nuclear 1 286 1.0 0.0 -fr 06_coal 1 286 1.0 0.0 +fr 01_solar 1 286 0.0 1.0 +fr 02_wind_on 1 286 0.0 1.0 +fr 03_wind_off 1 286 0.0 1.0 +fr 04_res 1 286 0.0 1.0 +fr 05_nuclear 1 286 0.0 1.0 +fr 06_coal 1 286 0.0 1.0 fr 07_gas 1 286 0.0 0.0 fr 08_non-res 1 286 0.0 0.0 fr 09_hydro_pump 1 286 0.0 0.0 -fr 01_solar 1 287 1.0 0.0 -fr 02_wind_on 1 287 1.0 0.0 -fr 03_wind_off 1 287 1.0 0.0 -fr 04_res 1 287 1.0 0.0 -fr 05_nuclear 1 287 1.0 0.0 -fr 06_coal 1 287 1.0 0.0 +fr 01_solar 1 287 0.0 1.0 +fr 02_wind_on 1 287 0.0 1.0 +fr 03_wind_off 1 287 0.0 1.0 +fr 04_res 1 287 0.0 1.0 +fr 05_nuclear 1 287 0.0 1.0 +fr 06_coal 1 287 0.0 1.0 fr 07_gas 1 287 0.0 0.0 fr 08_non-res 1 287 0.0 0.0 fr 09_hydro_pump 1 287 0.0 0.0 -fr 01_solar 1 288 1.0 0.0 -fr 02_wind_on 1 288 1.0 0.0 -fr 03_wind_off 1 288 1.0 0.0 -fr 04_res 1 288 1.0 0.0 -fr 05_nuclear 1 288 1.0 0.0 -fr 06_coal 1 288 1.0 0.0 +fr 01_solar 1 288 0.0 1.0 +fr 02_wind_on 1 288 0.0 1.0 +fr 03_wind_off 1 288 0.0 1.0 +fr 04_res 1 288 0.0 1.0 +fr 05_nuclear 1 288 0.0 1.0 +fr 06_coal 1 288 0.0 1.0 fr 07_gas 1 288 0.0 0.0 fr 08_non-res 1 288 0.0 0.0 fr 09_hydro_pump 1 288 0.0 0.0 -fr 01_solar 1 289 1.0 0.0 -fr 02_wind_on 1 289 1.0 0.0 -fr 03_wind_off 1 289 1.0 0.0 -fr 04_res 1 289 1.0 0.0 -fr 05_nuclear 1 289 1.0 0.0 -fr 06_coal 1 289 1.0 0.0 +fr 01_solar 1 289 0.0 1.0 +fr 02_wind_on 1 289 0.0 1.0 +fr 03_wind_off 1 289 0.0 1.0 +fr 04_res 1 289 0.0 1.0 +fr 05_nuclear 1 289 0.0 1.0 +fr 06_coal 1 289 0.0 1.0 fr 07_gas 1 289 0.0 0.0 fr 08_non-res 1 289 0.0 0.0 fr 09_hydro_pump 1 289 0.0 0.0 -fr 01_solar 1 290 1.0 0.0 -fr 02_wind_on 1 290 1.0 0.0 -fr 03_wind_off 1 290 1.0 0.0 -fr 04_res 1 290 1.0 0.0 -fr 05_nuclear 1 290 1.0 0.0 -fr 06_coal 1 290 1.0 0.0 -fr 07_gas 1 290 1.0 0.0 +fr 01_solar 1 290 0.0 1.0 +fr 02_wind_on 1 290 0.0 1.0 +fr 03_wind_off 1 290 0.0 1.0 +fr 04_res 1 290 0.0 1.0 +fr 05_nuclear 1 290 0.0 1.0 +fr 06_coal 1 290 0.0 1.0 +fr 07_gas 1 290 0.0 1.0 fr 08_non-res 1 290 0.0 0.0 fr 09_hydro_pump 1 290 0.0 0.0 -fr 01_solar 1 291 1.0 0.0 -fr 02_wind_on 1 291 1.0 0.0 -fr 03_wind_off 1 291 1.0 0.0 -fr 04_res 1 291 1.0 0.0 -fr 05_nuclear 1 291 1.0 0.0 -fr 06_coal 1 291 1.0 0.0 -fr 07_gas 1 291 1.0 0.0 +fr 01_solar 1 291 0.0 1.0 +fr 02_wind_on 1 291 0.0 1.0 +fr 03_wind_off 1 291 0.0 1.0 +fr 04_res 1 291 0.0 1.0 +fr 05_nuclear 1 291 0.0 1.0 +fr 06_coal 1 291 0.0 1.0 +fr 07_gas 1 291 0.0 1.0 fr 08_non-res 1 291 0.0 0.0 fr 09_hydro_pump 1 291 0.0 0.0 -fr 01_solar 1 292 1.0 0.0 -fr 02_wind_on 1 292 1.0 0.0 -fr 03_wind_off 1 292 1.0 0.0 -fr 04_res 1 292 1.0 0.0 -fr 05_nuclear 1 292 1.0 0.0 -fr 06_coal 1 292 1.0 0.0 -fr 07_gas 1 292 1.0 0.0 +fr 01_solar 1 292 0.0 1.0 +fr 02_wind_on 1 292 0.0 1.0 +fr 03_wind_off 1 292 0.0 1.0 +fr 04_res 1 292 0.0 1.0 +fr 05_nuclear 1 292 0.0 1.0 +fr 06_coal 1 292 0.0 1.0 +fr 07_gas 1 292 0.0 1.0 fr 08_non-res 1 292 0.0 0.0 fr 09_hydro_pump 1 292 0.0 0.0 -fr 01_solar 1 293 1.0 0.0 -fr 02_wind_on 1 293 1.0 0.0 -fr 03_wind_off 1 293 1.0 0.0 -fr 04_res 1 293 1.0 0.0 -fr 05_nuclear 1 293 1.0 0.0 -fr 06_coal 1 293 1.0 0.0 -fr 07_gas 1 293 1.0 0.0 +fr 01_solar 1 293 0.0 1.0 +fr 02_wind_on 1 293 0.0 1.0 +fr 03_wind_off 1 293 0.0 1.0 +fr 04_res 1 293 0.0 1.0 +fr 05_nuclear 1 293 0.0 1.0 +fr 06_coal 1 293 0.0 1.0 +fr 07_gas 1 293 0.0 1.0 fr 08_non-res 1 293 0.0 0.0 fr 09_hydro_pump 1 293 0.0 0.0 -fr 01_solar 1 294 1.0 0.0 -fr 02_wind_on 1 294 1.0 0.0 -fr 03_wind_off 1 294 1.0 0.0 -fr 04_res 1 294 1.0 0.0 -fr 05_nuclear 1 294 1.0 0.0 -fr 06_coal 1 294 1.0 0.0 -fr 07_gas 1 294 1.0 0.0 +fr 01_solar 1 294 0.0 1.0 +fr 02_wind_on 1 294 0.0 1.0 +fr 03_wind_off 1 294 0.0 1.0 +fr 04_res 1 294 0.0 1.0 +fr 05_nuclear 1 294 0.0 1.0 +fr 06_coal 1 294 0.0 1.0 +fr 07_gas 1 294 0.0 1.0 fr 08_non-res 1 294 0.0 0.0 fr 09_hydro_pump 1 294 0.0 0.0 -fr 01_solar 1 295 1.0 0.0 -fr 02_wind_on 1 295 1.0 0.0 -fr 03_wind_off 1 295 1.0 0.0 -fr 04_res 1 295 1.0 0.0 -fr 05_nuclear 1 295 1.0 0.0 -fr 06_coal 1 295 1.0 0.0 -fr 07_gas 1 295 1.0 0.0 +fr 01_solar 1 295 0.0 1.0 +fr 02_wind_on 1 295 0.0 1.0 +fr 03_wind_off 1 295 0.0 1.0 +fr 04_res 1 295 0.0 1.0 +fr 05_nuclear 1 295 0.0 1.0 +fr 06_coal 1 295 0.0 1.0 +fr 07_gas 1 295 0.0 1.0 fr 08_non-res 1 295 0.0 0.0 fr 09_hydro_pump 1 295 0.0 0.0 -fr 01_solar 1 296 1.0 0.0 -fr 02_wind_on 1 296 1.0 0.0 -fr 03_wind_off 1 296 1.0 0.0 -fr 04_res 1 296 1.0 0.0 -fr 05_nuclear 1 296 1.0 0.0 -fr 06_coal 1 296 1.0 0.0 -fr 07_gas 1 296 1.0 0.0 +fr 01_solar 1 296 0.0 1.0 +fr 02_wind_on 1 296 0.0 1.0 +fr 03_wind_off 1 296 0.0 1.0 +fr 04_res 1 296 0.0 1.0 +fr 05_nuclear 1 296 0.0 1.0 +fr 06_coal 1 296 0.0 1.0 +fr 07_gas 1 296 0.0 1.0 fr 08_non-res 1 296 0.0 0.0 fr 09_hydro_pump 1 296 0.0 0.0 -fr 01_solar 1 297 1.0 0.0 -fr 02_wind_on 1 297 1.0 0.0 -fr 03_wind_off 1 297 1.0 0.0 -fr 04_res 1 297 1.0 0.0 -fr 05_nuclear 1 297 1.0 0.0 -fr 06_coal 1 297 1.0 0.0 -fr 07_gas 1 297 1.0 0.0 +fr 01_solar 1 297 0.0 1.0 +fr 02_wind_on 1 297 0.0 1.0 +fr 03_wind_off 1 297 0.0 1.0 +fr 04_res 1 297 0.0 1.0 +fr 05_nuclear 1 297 0.0 1.0 +fr 06_coal 1 297 0.0 1.0 +fr 07_gas 1 297 0.0 1.0 fr 08_non-res 1 297 0.0 0.0 fr 09_hydro_pump 1 297 0.0 0.0 -fr 01_solar 1 298 1.0 0.0 -fr 02_wind_on 1 298 1.0 0.0 -fr 03_wind_off 1 298 1.0 0.0 -fr 04_res 1 298 1.0 0.0 -fr 05_nuclear 1 298 1.0 0.0 -fr 06_coal 1 298 1.0 0.0 -fr 07_gas 1 298 1.0 0.0 +fr 01_solar 1 298 0.0 1.0 +fr 02_wind_on 1 298 0.0 1.0 +fr 03_wind_off 1 298 0.0 1.0 +fr 04_res 1 298 0.0 1.0 +fr 05_nuclear 1 298 0.0 1.0 +fr 06_coal 1 298 0.0 1.0 +fr 07_gas 1 298 0.0 1.0 fr 08_non-res 1 298 0.0 0.0 fr 09_hydro_pump 1 298 0.0 0.0 -fr 01_solar 1 299 1.0 0.0 -fr 02_wind_on 1 299 1.0 0.0 -fr 03_wind_off 1 299 1.0 0.0 -fr 04_res 1 299 1.0 0.0 -fr 05_nuclear 1 299 1.0 0.0 -fr 06_coal 1 299 1.0 0.0 -fr 07_gas 1 299 1.0 0.0 +fr 01_solar 1 299 0.0 1.0 +fr 02_wind_on 1 299 0.0 1.0 +fr 03_wind_off 1 299 0.0 1.0 +fr 04_res 1 299 0.0 1.0 +fr 05_nuclear 1 299 0.0 1.0 +fr 06_coal 1 299 0.0 1.0 +fr 07_gas 1 299 0.0 1.0 fr 08_non-res 1 299 0.0 0.0 fr 09_hydro_pump 1 299 0.0 0.0 -fr 01_solar 1 300 1.0 0.0 -fr 02_wind_on 1 300 1.0 0.0 -fr 03_wind_off 1 300 1.0 0.0 -fr 04_res 1 300 1.0 0.0 -fr 05_nuclear 1 300 1.0 0.0 -fr 06_coal 1 300 1.0 0.0 -fr 07_gas 1 300 1.0 0.0 +fr 01_solar 1 300 0.0 1.0 +fr 02_wind_on 1 300 0.0 1.0 +fr 03_wind_off 1 300 0.0 1.0 +fr 04_res 1 300 0.0 1.0 +fr 05_nuclear 1 300 0.0 1.0 +fr 06_coal 1 300 0.0 1.0 +fr 07_gas 1 300 0.0 1.0 fr 08_non-res 1 300 0.0 0.0 fr 09_hydro_pump 1 300 0.0 0.0 -fr 01_solar 1 301 1.0 0.0 -fr 02_wind_on 1 301 1.0 0.0 -fr 03_wind_off 1 301 1.0 0.0 -fr 04_res 1 301 1.0 0.0 -fr 05_nuclear 1 301 1.0 0.0 -fr 06_coal 1 301 1.0 0.0 -fr 07_gas 1 301 1.0 0.0 +fr 01_solar 1 301 0.0 1.0 +fr 02_wind_on 1 301 0.0 1.0 +fr 03_wind_off 1 301 0.0 1.0 +fr 04_res 1 301 0.0 1.0 +fr 05_nuclear 1 301 0.0 1.0 +fr 06_coal 1 301 0.0 1.0 +fr 07_gas 1 301 0.0 1.0 fr 08_non-res 1 301 0.0 0.0 fr 09_hydro_pump 1 301 0.0 0.0 -fr 01_solar 1 302 1.0 0.0 -fr 02_wind_on 1 302 1.0 0.0 -fr 03_wind_off 1 302 1.0 0.0 -fr 04_res 1 302 1.0 0.0 -fr 05_nuclear 1 302 1.0 0.0 -fr 06_coal 1 302 1.0 0.0 -fr 07_gas 1 302 1.0 0.0 +fr 01_solar 1 302 0.0 1.0 +fr 02_wind_on 1 302 0.0 1.0 +fr 03_wind_off 1 302 0.0 1.0 +fr 04_res 1 302 0.0 1.0 +fr 05_nuclear 1 302 0.0 1.0 +fr 06_coal 1 302 0.0 1.0 +fr 07_gas 1 302 0.0 1.0 fr 08_non-res 1 302 0.0 0.0 fr 09_hydro_pump 1 302 0.0 0.0 -fr 01_solar 1 303 1.0 0.0 -fr 02_wind_on 1 303 1.0 0.0 -fr 03_wind_off 1 303 1.0 0.0 -fr 04_res 1 303 1.0 0.0 -fr 05_nuclear 1 303 1.0 0.0 -fr 06_coal 1 303 1.0 0.0 -fr 07_gas 1 303 1.0 0.0 +fr 01_solar 1 303 0.0 1.0 +fr 02_wind_on 1 303 0.0 1.0 +fr 03_wind_off 1 303 0.0 1.0 +fr 04_res 1 303 0.0 1.0 +fr 05_nuclear 1 303 0.0 1.0 +fr 06_coal 1 303 0.0 1.0 +fr 07_gas 1 303 0.0 1.0 fr 08_non-res 1 303 0.0 0.0 fr 09_hydro_pump 1 303 0.0 0.0 -fr 01_solar 1 304 1.0 0.0 -fr 02_wind_on 1 304 1.0 0.0 -fr 03_wind_off 1 304 1.0 0.0 -fr 04_res 1 304 1.0 0.0 -fr 05_nuclear 1 304 1.0 0.0 -fr 06_coal 1 304 1.0 0.0 -fr 07_gas 1 304 1.0 0.0 +fr 01_solar 1 304 0.0 1.0 +fr 02_wind_on 1 304 0.0 1.0 +fr 03_wind_off 1 304 0.0 1.0 +fr 04_res 1 304 0.0 1.0 +fr 05_nuclear 1 304 0.0 1.0 +fr 06_coal 1 304 0.0 1.0 +fr 07_gas 1 304 0.0 1.0 fr 08_non-res 1 304 0.0 0.0 fr 09_hydro_pump 1 304 0.0 0.0 -fr 01_solar 1 305 1.0 0.0 -fr 02_wind_on 1 305 1.0 0.0 -fr 03_wind_off 1 305 1.0 0.0 -fr 04_res 1 305 1.0 0.0 -fr 05_nuclear 1 305 1.0 0.0 -fr 06_coal 1 305 1.0 0.0 -fr 07_gas 1 305 1.0 0.0 +fr 01_solar 1 305 0.0 1.0 +fr 02_wind_on 1 305 0.0 1.0 +fr 03_wind_off 1 305 0.0 1.0 +fr 04_res 1 305 0.0 1.0 +fr 05_nuclear 1 305 0.0 1.0 +fr 06_coal 1 305 0.0 1.0 +fr 07_gas 1 305 0.0 1.0 fr 08_non-res 1 305 0.0 0.0 fr 09_hydro_pump 1 305 0.0 0.0 -fr 01_solar 1 306 1.0 0.0 -fr 02_wind_on 1 306 1.0 0.0 -fr 03_wind_off 1 306 1.0 0.0 -fr 04_res 1 306 1.0 0.0 -fr 05_nuclear 1 306 1.0 0.0 -fr 06_coal 1 306 1.0 0.0 -fr 07_gas 1 306 1.0 0.0 +fr 01_solar 1 306 0.0 1.0 +fr 02_wind_on 1 306 0.0 1.0 +fr 03_wind_off 1 306 0.0 1.0 +fr 04_res 1 306 0.0 1.0 +fr 05_nuclear 1 306 0.0 1.0 +fr 06_coal 1 306 0.0 1.0 +fr 07_gas 1 306 0.0 1.0 fr 08_non-res 1 306 0.0 0.0 fr 09_hydro_pump 1 306 0.0 0.0 -fr 01_solar 1 307 1.0 0.0 -fr 02_wind_on 1 307 1.0 0.0 -fr 03_wind_off 1 307 1.0 0.0 -fr 04_res 1 307 1.0 0.0 -fr 05_nuclear 1 307 1.0 0.0 -fr 06_coal 1 307 1.0 0.0 -fr 07_gas 1 307 1.0 0.0 +fr 01_solar 1 307 0.0 1.0 +fr 02_wind_on 1 307 0.0 1.0 +fr 03_wind_off 1 307 0.0 1.0 +fr 04_res 1 307 0.0 1.0 +fr 05_nuclear 1 307 0.0 1.0 +fr 06_coal 1 307 0.0 1.0 +fr 07_gas 1 307 0.0 1.0 fr 08_non-res 1 307 0.0 0.0 fr 09_hydro_pump 1 307 0.0 0.0 -fr 01_solar 1 308 1.0 0.0 -fr 02_wind_on 1 308 1.0 0.0 -fr 03_wind_off 1 308 1.0 0.0 -fr 04_res 1 308 1.0 0.0 -fr 05_nuclear 1 308 1.0 0.0 -fr 06_coal 1 308 1.0 0.0 -fr 07_gas 1 308 1.0 0.0 +fr 01_solar 1 308 0.0 1.0 +fr 02_wind_on 1 308 0.0 1.0 +fr 03_wind_off 1 308 0.0 1.0 +fr 04_res 1 308 0.0 1.0 +fr 05_nuclear 1 308 0.0 1.0 +fr 06_coal 1 308 0.0 1.0 +fr 07_gas 1 308 0.0 1.0 fr 08_non-res 1 308 0.0 0.0 fr 09_hydro_pump 1 308 0.0 0.0 -fr 01_solar 1 309 1.0 0.0 -fr 02_wind_on 1 309 1.0 0.0 -fr 03_wind_off 1 309 1.0 0.0 -fr 04_res 1 309 1.0 0.0 -fr 05_nuclear 1 309 1.0 0.0 -fr 06_coal 1 309 1.0 0.0 -fr 07_gas 1 309 1.0 0.0 +fr 01_solar 1 309 0.0 1.0 +fr 02_wind_on 1 309 0.0 1.0 +fr 03_wind_off 1 309 0.0 1.0 +fr 04_res 1 309 0.0 1.0 +fr 05_nuclear 1 309 0.0 1.0 +fr 06_coal 1 309 0.0 1.0 +fr 07_gas 1 309 0.0 1.0 fr 08_non-res 1 309 0.0 0.0 fr 09_hydro_pump 1 309 0.0 0.0 -fr 01_solar 1 310 1.0 0.0 -fr 02_wind_on 1 310 1.0 0.0 -fr 03_wind_off 1 310 1.0 0.0 -fr 04_res 1 310 1.0 0.0 -fr 05_nuclear 1 310 1.0 0.0 -fr 06_coal 1 310 1.0 0.0 -fr 07_gas 1 310 1.0 0.0 -fr 08_non-res 1 310 1.0 0.0 +fr 01_solar 1 310 0.0 1.0 +fr 02_wind_on 1 310 0.0 1.0 +fr 03_wind_off 1 310 0.0 1.0 +fr 04_res 1 310 0.0 1.0 +fr 05_nuclear 1 310 0.0 1.0 +fr 06_coal 1 310 0.0 1.0 +fr 07_gas 1 310 0.0 1.0 +fr 08_non-res 1 310 0.0 1.0 fr 09_hydro_pump 1 310 0.0 0.0 -fr 01_solar 1 311 1.0 0.0 -fr 02_wind_on 1 311 1.0 0.0 -fr 03_wind_off 1 311 1.0 0.0 -fr 04_res 1 311 1.0 0.0 -fr 05_nuclear 1 311 1.0 0.0 -fr 06_coal 1 311 1.0 0.0 -fr 07_gas 1 311 1.0 0.0 -fr 08_non-res 1 311 1.0 0.0 +fr 01_solar 1 311 0.0 1.0 +fr 02_wind_on 1 311 0.0 1.0 +fr 03_wind_off 1 311 0.0 1.0 +fr 04_res 1 311 0.0 1.0 +fr 05_nuclear 1 311 0.0 1.0 +fr 06_coal 1 311 0.0 1.0 +fr 07_gas 1 311 0.0 1.0 +fr 08_non-res 1 311 0.0 1.0 fr 09_hydro_pump 1 311 0.0 0.0 -fr 01_solar 1 312 1.0 0.0 -fr 02_wind_on 1 312 1.0 0.0 -fr 03_wind_off 1 312 1.0 0.0 -fr 04_res 1 312 1.0 0.0 -fr 05_nuclear 1 312 1.0 0.0 -fr 06_coal 1 312 1.0 0.0 -fr 07_gas 1 312 1.0 0.0 -fr 08_non-res 1 312 1.0 0.0 +fr 01_solar 1 312 0.0 1.0 +fr 02_wind_on 1 312 0.0 1.0 +fr 03_wind_off 1 312 0.0 1.0 +fr 04_res 1 312 0.0 1.0 +fr 05_nuclear 1 312 0.0 1.0 +fr 06_coal 1 312 0.0 1.0 +fr 07_gas 1 312 0.0 1.0 +fr 08_non-res 1 312 0.0 1.0 fr 09_hydro_pump 1 312 0.0 0.0 -fr 01_solar 1 313 1.0 0.0 -fr 02_wind_on 1 313 1.0 0.0 -fr 03_wind_off 1 313 1.0 0.0 -fr 04_res 1 313 1.0 0.0 -fr 05_nuclear 1 313 1.0 0.0 -fr 06_coal 1 313 1.0 0.0 -fr 07_gas 1 313 1.0 0.0 -fr 08_non-res 1 313 1.0 0.0 +fr 01_solar 1 313 0.0 1.0 +fr 02_wind_on 1 313 0.0 1.0 +fr 03_wind_off 1 313 0.0 1.0 +fr 04_res 1 313 0.0 1.0 +fr 05_nuclear 1 313 0.0 1.0 +fr 06_coal 1 313 0.0 1.0 +fr 07_gas 1 313 0.0 1.0 +fr 08_non-res 1 313 0.0 1.0 fr 09_hydro_pump 1 313 0.0 0.0 -fr 01_solar 1 314 1.0 0.0 -fr 02_wind_on 1 314 1.0 0.0 -fr 03_wind_off 1 314 1.0 0.0 -fr 04_res 1 314 1.0 0.0 -fr 05_nuclear 1 314 1.0 0.0 -fr 06_coal 1 314 1.0 0.0 -fr 07_gas 1 314 1.0 0.0 -fr 08_non-res 1 314 1.0 0.0 +fr 01_solar 1 314 0.0 1.0 +fr 02_wind_on 1 314 0.0 1.0 +fr 03_wind_off 1 314 0.0 1.0 +fr 04_res 1 314 0.0 1.0 +fr 05_nuclear 1 314 0.0 1.0 +fr 06_coal 1 314 0.0 1.0 +fr 07_gas 1 314 0.0 1.0 +fr 08_non-res 1 314 0.0 1.0 fr 09_hydro_pump 1 314 0.0 0.0 -fr 01_solar 1 315 1.0 0.0 -fr 02_wind_on 1 315 1.0 0.0 -fr 03_wind_off 1 315 1.0 0.0 -fr 04_res 1 315 1.0 0.0 -fr 05_nuclear 1 315 1.0 0.0 -fr 06_coal 1 315 1.0 0.0 -fr 07_gas 1 315 1.0 0.0 -fr 08_non-res 1 315 1.0 0.0 +fr 01_solar 1 315 0.0 1.0 +fr 02_wind_on 1 315 0.0 1.0 +fr 03_wind_off 1 315 0.0 1.0 +fr 04_res 1 315 0.0 1.0 +fr 05_nuclear 1 315 0.0 1.0 +fr 06_coal 1 315 0.0 1.0 +fr 07_gas 1 315 0.0 1.0 +fr 08_non-res 1 315 0.0 1.0 fr 09_hydro_pump 1 315 0.0 0.0 -fr 01_solar 1 316 1.0 0.0 -fr 02_wind_on 1 316 1.0 0.0 -fr 03_wind_off 1 316 1.0 0.0 -fr 04_res 1 316 1.0 0.0 -fr 05_nuclear 1 316 1.0 0.0 -fr 06_coal 1 316 1.0 0.0 -fr 07_gas 1 316 1.0 0.0 -fr 08_non-res 1 316 1.0 0.0 +fr 01_solar 1 316 0.0 1.0 +fr 02_wind_on 1 316 0.0 1.0 +fr 03_wind_off 1 316 0.0 1.0 +fr 04_res 1 316 0.0 1.0 +fr 05_nuclear 1 316 0.0 1.0 +fr 06_coal 1 316 0.0 1.0 +fr 07_gas 1 316 0.0 1.0 +fr 08_non-res 1 316 0.0 1.0 fr 09_hydro_pump 1 316 0.0 0.0 -fr 01_solar 1 317 1.0 0.0 -fr 02_wind_on 1 317 1.0 0.0 -fr 03_wind_off 1 317 1.0 0.0 -fr 04_res 1 317 1.0 0.0 -fr 05_nuclear 1 317 1.0 0.0 -fr 06_coal 1 317 1.0 0.0 -fr 07_gas 1 317 1.0 0.0 -fr 08_non-res 1 317 1.0 0.0 +fr 01_solar 1 317 0.0 1.0 +fr 02_wind_on 1 317 0.0 1.0 +fr 03_wind_off 1 317 0.0 1.0 +fr 04_res 1 317 0.0 1.0 +fr 05_nuclear 1 317 0.0 1.0 +fr 06_coal 1 317 0.0 1.0 +fr 07_gas 1 317 0.0 1.0 +fr 08_non-res 1 317 0.0 1.0 fr 09_hydro_pump 1 317 0.0 0.0 -fr 01_solar 1 318 1.0 0.0 -fr 02_wind_on 1 318 1.0 0.0 -fr 03_wind_off 1 318 1.0 0.0 -fr 04_res 1 318 1.0 0.0 -fr 05_nuclear 1 318 1.0 0.0 -fr 06_coal 1 318 1.0 0.0 -fr 07_gas 1 318 1.0 0.0 -fr 08_non-res 1 318 1.0 0.0 +fr 01_solar 1 318 0.0 1.0 +fr 02_wind_on 1 318 0.0 1.0 +fr 03_wind_off 1 318 0.0 1.0 +fr 04_res 1 318 0.0 1.0 +fr 05_nuclear 1 318 0.0 1.0 +fr 06_coal 1 318 0.0 1.0 +fr 07_gas 1 318 0.0 1.0 +fr 08_non-res 1 318 0.0 1.0 fr 09_hydro_pump 1 318 0.0 0.0 -fr 01_solar 1 319 1.0 0.0 -fr 02_wind_on 1 319 1.0 0.0 -fr 03_wind_off 1 319 1.0 0.0 -fr 04_res 1 319 1.0 0.0 -fr 05_nuclear 1 319 1.0 0.0 -fr 06_coal 1 319 1.0 0.0 -fr 07_gas 1 319 1.0 0.0 -fr 08_non-res 1 319 1.0 0.0 +fr 01_solar 1 319 0.0 1.0 +fr 02_wind_on 1 319 0.0 1.0 +fr 03_wind_off 1 319 0.0 1.0 +fr 04_res 1 319 0.0 1.0 +fr 05_nuclear 1 319 0.0 1.0 +fr 06_coal 1 319 0.0 1.0 +fr 07_gas 1 319 0.0 1.0 +fr 08_non-res 1 319 0.0 1.0 fr 09_hydro_pump 1 319 0.0 0.0 -fr 01_solar 1 320 1.0 0.0 -fr 02_wind_on 1 320 1.0 0.0 -fr 03_wind_off 1 320 1.0 0.0 -fr 04_res 1 320 1.0 0.0 -fr 05_nuclear 1 320 1.0 0.0 -fr 06_coal 1 320 1.0 0.0 -fr 07_gas 1 320 1.0 0.0 -fr 08_non-res 1 320 1.0 0.0 +fr 01_solar 1 320 0.0 1.0 +fr 02_wind_on 1 320 0.0 1.0 +fr 03_wind_off 1 320 0.0 1.0 +fr 04_res 1 320 0.0 1.0 +fr 05_nuclear 1 320 0.0 1.0 +fr 06_coal 1 320 0.0 1.0 +fr 07_gas 1 320 0.0 1.0 +fr 08_non-res 1 320 0.0 1.0 fr 09_hydro_pump 1 320 0.0 0.0 -fr 01_solar 1 321 1.0 0.0 -fr 02_wind_on 1 321 1.0 0.0 -fr 03_wind_off 1 321 1.0 0.0 -fr 04_res 1 321 1.0 0.0 -fr 05_nuclear 1 321 1.0 0.0 -fr 06_coal 1 321 1.0 0.0 -fr 07_gas 1 321 1.0 0.0 -fr 08_non-res 1 321 1.0 0.0 +fr 01_solar 1 321 0.0 1.0 +fr 02_wind_on 1 321 0.0 1.0 +fr 03_wind_off 1 321 0.0 1.0 +fr 04_res 1 321 0.0 1.0 +fr 05_nuclear 1 321 0.0 1.0 +fr 06_coal 1 321 0.0 1.0 +fr 07_gas 1 321 0.0 1.0 +fr 08_non-res 1 321 0.0 1.0 fr 09_hydro_pump 1 321 0.0 0.0 -fr 01_solar 1 322 1.0 0.0 -fr 02_wind_on 1 322 1.0 0.0 -fr 03_wind_off 1 322 1.0 0.0 -fr 04_res 1 322 1.0 0.0 -fr 05_nuclear 1 322 1.0 0.0 -fr 06_coal 1 322 1.0 0.0 -fr 07_gas 1 322 1.0 0.0 -fr 08_non-res 1 322 1.0 0.0 +fr 01_solar 1 322 0.0 1.0 +fr 02_wind_on 1 322 0.0 1.0 +fr 03_wind_off 1 322 0.0 1.0 +fr 04_res 1 322 0.0 1.0 +fr 05_nuclear 1 322 0.0 1.0 +fr 06_coal 1 322 0.0 1.0 +fr 07_gas 1 322 0.0 1.0 +fr 08_non-res 1 322 0.0 1.0 fr 09_hydro_pump 1 322 0.0 0.0 -fr 01_solar 1 323 1.0 0.0 -fr 02_wind_on 1 323 1.0 0.0 -fr 03_wind_off 1 323 1.0 0.0 -fr 04_res 1 323 1.0 0.0 -fr 05_nuclear 1 323 1.0 0.0 -fr 06_coal 1 323 1.0 0.0 -fr 07_gas 1 323 1.0 0.0 -fr 08_non-res 1 323 1.0 0.0 +fr 01_solar 1 323 0.0 1.0 +fr 02_wind_on 1 323 0.0 1.0 +fr 03_wind_off 1 323 0.0 1.0 +fr 04_res 1 323 0.0 1.0 +fr 05_nuclear 1 323 0.0 1.0 +fr 06_coal 1 323 0.0 1.0 +fr 07_gas 1 323 0.0 1.0 +fr 08_non-res 1 323 0.0 1.0 fr 09_hydro_pump 1 323 0.0 0.0 -fr 01_solar 1 324 1.0 0.0 -fr 02_wind_on 1 324 1.0 0.0 -fr 03_wind_off 1 324 1.0 0.0 -fr 04_res 1 324 1.0 0.0 -fr 05_nuclear 1 324 1.0 0.0 -fr 06_coal 1 324 1.0 0.0 -fr 07_gas 1 324 1.0 0.0 -fr 08_non-res 1 324 1.0 0.0 +fr 01_solar 1 324 0.0 1.0 +fr 02_wind_on 1 324 0.0 1.0 +fr 03_wind_off 1 324 0.0 1.0 +fr 04_res 1 324 0.0 1.0 +fr 05_nuclear 1 324 0.0 1.0 +fr 06_coal 1 324 0.0 1.0 +fr 07_gas 1 324 0.0 1.0 +fr 08_non-res 1 324 0.0 1.0 fr 09_hydro_pump 1 324 0.0 0.0 -fr 01_solar 1 325 1.0 0.0 -fr 02_wind_on 1 325 1.0 0.0 -fr 03_wind_off 1 325 1.0 0.0 -fr 04_res 1 325 1.0 0.0 -fr 05_nuclear 1 325 1.0 0.0 -fr 06_coal 1 325 1.0 0.0 -fr 07_gas 1 325 1.0 0.0 -fr 08_non-res 1 325 1.0 0.0 +fr 01_solar 1 325 0.0 1.0 +fr 02_wind_on 1 325 0.0 1.0 +fr 03_wind_off 1 325 0.0 1.0 +fr 04_res 1 325 0.0 1.0 +fr 05_nuclear 1 325 0.0 1.0 +fr 06_coal 1 325 0.0 1.0 +fr 07_gas 1 325 0.0 1.0 +fr 08_non-res 1 325 0.0 1.0 fr 09_hydro_pump 1 325 0.0 0.0 -fr 01_solar 1 326 1.0 0.0 -fr 02_wind_on 1 326 1.0 0.0 -fr 03_wind_off 1 326 1.0 0.0 -fr 04_res 1 326 1.0 0.0 -fr 05_nuclear 1 326 1.0 0.0 -fr 06_coal 1 326 1.0 0.0 -fr 07_gas 1 326 1.0 0.0 -fr 08_non-res 1 326 1.0 0.0 +fr 01_solar 1 326 0.0 1.0 +fr 02_wind_on 1 326 0.0 1.0 +fr 03_wind_off 1 326 0.0 1.0 +fr 04_res 1 326 0.0 1.0 +fr 05_nuclear 1 326 0.0 1.0 +fr 06_coal 1 326 0.0 1.0 +fr 07_gas 1 326 0.0 1.0 +fr 08_non-res 1 326 0.0 1.0 fr 09_hydro_pump 1 326 0.0 0.0 -fr 01_solar 1 327 1.0 0.0 -fr 02_wind_on 1 327 1.0 0.0 -fr 03_wind_off 1 327 1.0 0.0 -fr 04_res 1 327 1.0 0.0 -fr 05_nuclear 1 327 1.0 0.0 -fr 06_coal 1 327 1.0 0.0 -fr 07_gas 1 327 1.0 0.0 -fr 08_non-res 1 327 1.0 0.0 +fr 01_solar 1 327 0.0 1.0 +fr 02_wind_on 1 327 0.0 1.0 +fr 03_wind_off 1 327 0.0 1.0 +fr 04_res 1 327 0.0 1.0 +fr 05_nuclear 1 327 0.0 1.0 +fr 06_coal 1 327 0.0 1.0 +fr 07_gas 1 327 0.0 1.0 +fr 08_non-res 1 327 0.0 1.0 fr 09_hydro_pump 1 327 0.0 0.0 -fr 01_solar 1 328 1.0 0.0 -fr 02_wind_on 1 328 1.0 0.0 -fr 03_wind_off 1 328 1.0 0.0 -fr 04_res 1 328 1.0 0.0 -fr 05_nuclear 1 328 1.0 0.0 -fr 06_coal 1 328 1.0 0.0 -fr 07_gas 1 328 1.0 0.0 -fr 08_non-res 1 328 1.0 0.0 +fr 01_solar 1 328 0.0 1.0 +fr 02_wind_on 1 328 0.0 1.0 +fr 03_wind_off 1 328 0.0 1.0 +fr 04_res 1 328 0.0 1.0 +fr 05_nuclear 1 328 0.0 1.0 +fr 06_coal 1 328 0.0 1.0 +fr 07_gas 1 328 0.0 1.0 +fr 08_non-res 1 328 0.0 1.0 fr 09_hydro_pump 1 328 0.0 0.0 -fr 01_solar 1 329 1.0 0.0 -fr 02_wind_on 1 329 1.0 0.0 -fr 03_wind_off 1 329 1.0 0.0 -fr 04_res 1 329 1.0 0.0 -fr 05_nuclear 1 329 1.0 0.0 -fr 06_coal 1 329 1.0 0.0 -fr 07_gas 1 329 1.0 0.0 -fr 08_non-res 1 329 1.0 0.0 +fr 01_solar 1 329 0.0 1.0 +fr 02_wind_on 1 329 0.0 1.0 +fr 03_wind_off 1 329 0.0 1.0 +fr 04_res 1 329 0.0 1.0 +fr 05_nuclear 1 329 0.0 1.0 +fr 06_coal 1 329 0.0 1.0 +fr 07_gas 1 329 0.0 1.0 +fr 08_non-res 1 329 0.0 1.0 fr 09_hydro_pump 1 329 0.0 0.0 -fr 01_solar 1 330 1.0 0.0 -fr 02_wind_on 1 330 1.0 0.0 -fr 03_wind_off 1 330 1.0 0.0 -fr 04_res 1 330 1.0 0.0 -fr 05_nuclear 1 330 1.0 0.0 -fr 06_coal 1 330 1.0 0.0 -fr 07_gas 1 330 1.0 0.0 -fr 08_non-res 1 330 1.0 0.0 -fr 09_hydro_pump 1 330 1.0 0.0 -fr 01_solar 1 331 1.0 0.0 -fr 02_wind_on 1 331 1.0 0.0 -fr 03_wind_off 1 331 1.0 0.0 -fr 04_res 1 331 1.0 0.0 -fr 05_nuclear 1 331 1.0 0.0 -fr 06_coal 1 331 1.0 0.0 -fr 07_gas 1 331 1.0 0.0 -fr 08_non-res 1 331 1.0 0.0 -fr 09_hydro_pump 1 331 1.0 0.0 -fr 01_solar 1 332 1.0 0.0 -fr 02_wind_on 1 332 1.0 0.0 -fr 03_wind_off 1 332 1.0 0.0 -fr 04_res 1 332 1.0 0.0 -fr 05_nuclear 1 332 1.0 0.0 -fr 06_coal 1 332 1.0 0.0 -fr 07_gas 1 332 1.0 0.0 -fr 08_non-res 1 332 1.0 0.0 -fr 09_hydro_pump 1 332 1.0 0.0 -fr 01_solar 1 333 1.0 0.0 -fr 02_wind_on 1 333 1.0 0.0 -fr 03_wind_off 1 333 1.0 0.0 -fr 04_res 1 333 1.0 0.0 -fr 05_nuclear 1 333 1.0 0.0 -fr 06_coal 1 333 1.0 0.0 -fr 07_gas 1 333 1.0 0.0 -fr 08_non-res 1 333 1.0 0.0 -fr 09_hydro_pump 1 333 1.0 0.0 -fr 01_solar 1 334 1.0 0.0 -fr 02_wind_on 1 334 1.0 0.0 -fr 03_wind_off 1 334 1.0 0.0 -fr 04_res 1 334 1.0 0.0 -fr 05_nuclear 1 334 1.0 0.0 -fr 06_coal 1 334 1.0 0.0 -fr 07_gas 1 334 1.0 0.0 -fr 08_non-res 1 334 1.0 0.0 -fr 09_hydro_pump 1 334 1.0 0.0 -fr 01_solar 1 335 1.0 0.0 -fr 02_wind_on 1 335 1.0 0.0 -fr 03_wind_off 1 335 1.0 0.0 -fr 04_res 1 335 1.0 0.0 -fr 05_nuclear 1 335 1.0 0.0 -fr 06_coal 1 335 1.0 0.0 -fr 07_gas 1 335 1.0 0.0 -fr 08_non-res 1 335 1.0 0.0 -fr 09_hydro_pump 1 335 1.0 0.0 -fr 01_solar 1 336 1.0 0.0 -fr 02_wind_on 1 336 1.0 0.0 -fr 03_wind_off 1 336 1.0 0.0 -fr 04_res 1 336 1.0 0.0 -fr 05_nuclear 1 336 1.0 0.0 -fr 06_coal 1 336 1.0 0.0 -fr 07_gas 1 336 1.0 0.0 -fr 08_non-res 1 336 1.0 0.0 -fr 09_hydro_pump 1 336 1.0 0.0 +fr 01_solar 1 330 0.0 1.0 +fr 02_wind_on 1 330 0.0 1.0 +fr 03_wind_off 1 330 0.0 1.0 +fr 04_res 1 330 0.0 1.0 +fr 05_nuclear 1 330 0.0 1.0 +fr 06_coal 1 330 0.0 1.0 +fr 07_gas 1 330 0.0 1.0 +fr 08_non-res 1 330 0.0 1.0 +fr 09_hydro_pump 1 330 0.0 1.0 +fr 01_solar 1 331 0.0 1.0 +fr 02_wind_on 1 331 0.0 1.0 +fr 03_wind_off 1 331 0.0 1.0 +fr 04_res 1 331 0.0 1.0 +fr 05_nuclear 1 331 0.0 1.0 +fr 06_coal 1 331 0.0 1.0 +fr 07_gas 1 331 0.0 1.0 +fr 08_non-res 1 331 0.0 1.0 +fr 09_hydro_pump 1 331 0.0 1.0 +fr 01_solar 1 332 0.0 1.0 +fr 02_wind_on 1 332 0.0 1.0 +fr 03_wind_off 1 332 0.0 1.0 +fr 04_res 1 332 0.0 1.0 +fr 05_nuclear 1 332 0.0 1.0 +fr 06_coal 1 332 0.0 1.0 +fr 07_gas 1 332 0.0 1.0 +fr 08_non-res 1 332 0.0 1.0 +fr 09_hydro_pump 1 332 0.0 1.0 +fr 01_solar 1 333 0.0 1.0 +fr 02_wind_on 1 333 0.0 1.0 +fr 03_wind_off 1 333 0.0 1.0 +fr 04_res 1 333 0.0 1.0 +fr 05_nuclear 1 333 0.0 1.0 +fr 06_coal 1 333 0.0 1.0 +fr 07_gas 1 333 0.0 1.0 +fr 08_non-res 1 333 0.0 1.0 +fr 09_hydro_pump 1 333 0.0 1.0 +fr 01_solar 1 334 0.0 1.0 +fr 02_wind_on 1 334 0.0 1.0 +fr 03_wind_off 1 334 0.0 1.0 +fr 04_res 1 334 0.0 1.0 +fr 05_nuclear 1 334 0.0 1.0 +fr 06_coal 1 334 0.0 1.0 +fr 07_gas 1 334 0.0 1.0 +fr 08_non-res 1 334 0.0 1.0 +fr 09_hydro_pump 1 334 0.0 1.0 +fr 01_solar 1 335 0.0 1.0 +fr 02_wind_on 1 335 0.0 1.0 +fr 03_wind_off 1 335 0.0 1.0 +fr 04_res 1 335 0.0 1.0 +fr 05_nuclear 1 335 0.0 1.0 +fr 06_coal 1 335 0.0 1.0 +fr 07_gas 1 335 0.0 1.0 +fr 08_non-res 1 335 0.0 1.0 +fr 09_hydro_pump 1 335 0.0 1.0 +fr 01_solar 1 336 0.0 1.0 +fr 02_wind_on 1 336 0.0 1.0 +fr 03_wind_off 1 336 0.0 1.0 +fr 04_res 1 336 0.0 1.0 +fr 05_nuclear 1 336 0.0 1.0 +fr 06_coal 1 336 0.0 1.0 +fr 07_gas 1 336 0.0 1.0 +fr 08_non-res 1 336 0.0 1.0 +fr 09_hydro_pump 1 336 0.0 1.0 it 01_solar 1 1 0.0 0.0 it 02_wind_on 1 1 0.0 0.0 it 03_wind_off 1 1 0.0 0.0 @@ -9080,7 +9080,7 @@ it 06_coal 1 1 0.0 0.0 it 07_gas 1 1 0.0 0.0 it 08_non-res 1 1 0.0 0.0 it 09_hydro_pump 1 1 0.0 0.0 -it 01_solar 1 2 1.0 0.0 +it 01_solar 1 2 0.0 1.0 it 02_wind_on 1 2 0.0 0.0 it 03_wind_off 1 2 0.0 0.0 it 04_res 1 2 0.0 0.0 @@ -9089,7 +9089,7 @@ it 06_coal 1 2 0.0 0.0 it 07_gas 1 2 0.0 0.0 it 08_non-res 1 2 0.0 0.0 it 09_hydro_pump 1 2 0.0 0.0 -it 01_solar 1 3 1.0 0.0 +it 01_solar 1 3 0.0 1.0 it 02_wind_on 1 3 0.0 0.0 it 03_wind_off 1 3 0.0 0.0 it 04_res 1 3 0.0 0.0 @@ -9098,7 +9098,7 @@ it 06_coal 1 3 0.0 0.0 it 07_gas 1 3 0.0 0.0 it 08_non-res 1 3 0.0 0.0 it 09_hydro_pump 1 3 0.0 0.0 -it 01_solar 1 4 1.0 0.0 +it 01_solar 1 4 0.0 1.0 it 02_wind_on 1 4 0.0 0.0 it 03_wind_off 1 4 0.0 0.0 it 04_res 1 4 0.0 0.0 @@ -9107,7 +9107,7 @@ it 06_coal 1 4 0.0 0.0 it 07_gas 1 4 0.0 0.0 it 08_non-res 1 4 0.0 0.0 it 09_hydro_pump 1 4 0.0 0.0 -it 01_solar 1 5 1.0 0.0 +it 01_solar 1 5 0.0 1.0 it 02_wind_on 1 5 0.0 0.0 it 03_wind_off 1 5 0.0 0.0 it 04_res 1 5 0.0 0.0 @@ -9116,7 +9116,7 @@ it 06_coal 1 5 0.0 0.0 it 07_gas 1 5 0.0 0.0 it 08_non-res 1 5 0.0 0.0 it 09_hydro_pump 1 5 0.0 0.0 -it 01_solar 1 6 1.0 0.0 +it 01_solar 1 6 0.0 1.0 it 02_wind_on 1 6 0.0 0.0 it 03_wind_off 1 6 0.0 0.0 it 04_res 1 6 0.0 0.0 @@ -9125,7 +9125,7 @@ it 06_coal 1 6 0.0 0.0 it 07_gas 1 6 0.0 0.0 it 08_non-res 1 6 0.0 0.0 it 09_hydro_pump 1 6 0.0 0.0 -it 01_solar 1 7 1.0 0.0 +it 01_solar 1 7 0.0 1.0 it 02_wind_on 1 7 0.0 0.0 it 03_wind_off 1 7 0.0 0.0 it 04_res 1 7 0.0 0.0 @@ -9134,7 +9134,7 @@ it 06_coal 1 7 0.0 0.0 it 07_gas 1 7 0.0 0.0 it 08_non-res 1 7 0.0 0.0 it 09_hydro_pump 1 7 0.0 0.0 -it 01_solar 1 8 1.0 0.0 +it 01_solar 1 8 0.0 1.0 it 02_wind_on 1 8 0.0 0.0 it 03_wind_off 1 8 0.0 0.0 it 04_res 1 8 0.0 0.0 @@ -9143,7 +9143,7 @@ it 06_coal 1 8 0.0 0.0 it 07_gas 1 8 0.0 0.0 it 08_non-res 1 8 0.0 0.0 it 09_hydro_pump 1 8 0.0 0.0 -it 01_solar 1 9 1.0 0.0 +it 01_solar 1 9 0.0 1.0 it 02_wind_on 1 9 0.0 0.0 it 03_wind_off 1 9 0.0 0.0 it 04_res 1 9 0.0 0.0 @@ -9152,7 +9152,7 @@ it 06_coal 1 9 0.0 0.0 it 07_gas 1 9 0.0 0.0 it 08_non-res 1 9 0.0 0.0 it 09_hydro_pump 1 9 0.0 0.0 -it 01_solar 1 10 1.0 0.0 +it 01_solar 1 10 0.0 1.0 it 02_wind_on 1 10 0.0 0.0 it 03_wind_off 1 10 0.0 0.0 it 04_res 1 10 0.0 0.0 @@ -9161,7 +9161,7 @@ it 06_coal 1 10 0.0 0.0 it 07_gas 1 10 0.0 0.0 it 08_non-res 1 10 0.0 0.0 it 09_hydro_pump 1 10 0.0 0.0 -it 01_solar 1 11 1.0 0.0 +it 01_solar 1 11 0.0 1.0 it 02_wind_on 1 11 0.0 0.0 it 03_wind_off 1 11 0.0 0.0 it 04_res 1 11 0.0 0.0 @@ -9170,7 +9170,7 @@ it 06_coal 1 11 0.0 0.0 it 07_gas 1 11 0.0 0.0 it 08_non-res 1 11 0.0 0.0 it 09_hydro_pump 1 11 0.0 0.0 -it 01_solar 1 12 1.0 0.0 +it 01_solar 1 12 0.0 1.0 it 02_wind_on 1 12 0.0 0.0 it 03_wind_off 1 12 0.0 0.0 it 04_res 1 12 0.0 0.0 @@ -9179,7 +9179,7 @@ it 06_coal 1 12 0.0 0.0 it 07_gas 1 12 0.0 0.0 it 08_non-res 1 12 0.0 0.0 it 09_hydro_pump 1 12 0.0 0.0 -it 01_solar 1 13 1.0 0.0 +it 01_solar 1 13 0.0 1.0 it 02_wind_on 1 13 0.0 0.0 it 03_wind_off 1 13 0.0 0.0 it 04_res 1 13 0.0 0.0 @@ -9188,7 +9188,7 @@ it 06_coal 1 13 0.0 0.0 it 07_gas 1 13 0.0 0.0 it 08_non-res 1 13 0.0 0.0 it 09_hydro_pump 1 13 0.0 0.0 -it 01_solar 1 14 1.0 0.0 +it 01_solar 1 14 0.0 1.0 it 02_wind_on 1 14 0.0 0.0 it 03_wind_off 1 14 0.0 0.0 it 04_res 1 14 0.0 0.0 @@ -9197,7 +9197,7 @@ it 06_coal 1 14 0.0 0.0 it 07_gas 1 14 0.0 0.0 it 08_non-res 1 14 0.0 0.0 it 09_hydro_pump 1 14 0.0 0.0 -it 01_solar 1 15 1.0 0.0 +it 01_solar 1 15 0.0 1.0 it 02_wind_on 1 15 0.0 0.0 it 03_wind_off 1 15 0.0 0.0 it 04_res 1 15 0.0 0.0 @@ -9206,7 +9206,7 @@ it 06_coal 1 15 0.0 0.0 it 07_gas 1 15 0.0 0.0 it 08_non-res 1 15 0.0 0.0 it 09_hydro_pump 1 15 0.0 0.0 -it 01_solar 1 16 1.0 0.0 +it 01_solar 1 16 0.0 1.0 it 02_wind_on 1 16 0.0 0.0 it 03_wind_off 1 16 0.0 0.0 it 04_res 1 16 0.0 0.0 @@ -9215,7 +9215,7 @@ it 06_coal 1 16 0.0 0.0 it 07_gas 1 16 0.0 0.0 it 08_non-res 1 16 0.0 0.0 it 09_hydro_pump 1 16 0.0 0.0 -it 01_solar 1 17 1.0 0.0 +it 01_solar 1 17 0.0 1.0 it 02_wind_on 1 17 0.0 0.0 it 03_wind_off 1 17 0.0 0.0 it 04_res 1 17 0.0 0.0 @@ -9224,7 +9224,7 @@ it 06_coal 1 17 0.0 0.0 it 07_gas 1 17 0.0 0.0 it 08_non-res 1 17 0.0 0.0 it 09_hydro_pump 1 17 0.0 0.0 -it 01_solar 1 18 1.0 0.0 +it 01_solar 1 18 0.0 1.0 it 02_wind_on 1 18 0.0 0.0 it 03_wind_off 1 18 0.0 0.0 it 04_res 1 18 0.0 0.0 @@ -9233,7 +9233,7 @@ it 06_coal 1 18 0.0 0.0 it 07_gas 1 18 0.0 0.0 it 08_non-res 1 18 0.0 0.0 it 09_hydro_pump 1 18 0.0 0.0 -it 01_solar 1 19 1.0 0.0 +it 01_solar 1 19 0.0 1.0 it 02_wind_on 1 19 0.0 0.0 it 03_wind_off 1 19 0.0 0.0 it 04_res 1 19 0.0 0.0 @@ -9242,7 +9242,7 @@ it 06_coal 1 19 0.0 0.0 it 07_gas 1 19 0.0 0.0 it 08_non-res 1 19 0.0 0.0 it 09_hydro_pump 1 19 0.0 0.0 -it 01_solar 1 20 1.0 0.0 +it 01_solar 1 20 0.0 1.0 it 02_wind_on 1 20 0.0 0.0 it 03_wind_off 1 20 0.0 0.0 it 04_res 1 20 0.0 0.0 @@ -9251,7 +9251,7 @@ it 06_coal 1 20 0.0 0.0 it 07_gas 1 20 0.0 0.0 it 08_non-res 1 20 0.0 0.0 it 09_hydro_pump 1 20 0.0 0.0 -it 01_solar 1 21 1.0 0.0 +it 01_solar 1 21 0.0 1.0 it 02_wind_on 1 21 0.0 0.0 it 03_wind_off 1 21 0.0 0.0 it 04_res 1 21 0.0 0.0 @@ -9260,8 +9260,8 @@ it 06_coal 1 21 0.0 0.0 it 07_gas 1 21 0.0 0.0 it 08_non-res 1 21 0.0 0.0 it 09_hydro_pump 1 21 0.0 0.0 -it 01_solar 1 22 1.0 0.0 -it 02_wind_on 1 22 1.0 0.0 +it 01_solar 1 22 0.0 1.0 +it 02_wind_on 1 22 0.0 1.0 it 03_wind_off 1 22 0.0 0.0 it 04_res 1 22 0.0 0.0 it 05_nuclear 1 22 0.0 0.0 @@ -9269,8 +9269,8 @@ it 06_coal 1 22 0.0 0.0 it 07_gas 1 22 0.0 0.0 it 08_non-res 1 22 0.0 0.0 it 09_hydro_pump 1 22 0.0 0.0 -it 01_solar 1 23 1.0 0.0 -it 02_wind_on 1 23 1.0 0.0 +it 01_solar 1 23 0.0 1.0 +it 02_wind_on 1 23 0.0 1.0 it 03_wind_off 1 23 0.0 0.0 it 04_res 1 23 0.0 0.0 it 05_nuclear 1 23 0.0 0.0 @@ -9278,8 +9278,8 @@ it 06_coal 1 23 0.0 0.0 it 07_gas 1 23 0.0 0.0 it 08_non-res 1 23 0.0 0.0 it 09_hydro_pump 1 23 0.0 0.0 -it 01_solar 1 24 1.0 0.0 -it 02_wind_on 1 24 1.0 0.0 +it 01_solar 1 24 0.0 1.0 +it 02_wind_on 1 24 0.0 1.0 it 03_wind_off 1 24 0.0 0.0 it 04_res 1 24 0.0 0.0 it 05_nuclear 1 24 0.0 0.0 @@ -9287,8 +9287,8 @@ it 06_coal 1 24 0.0 0.0 it 07_gas 1 24 0.0 0.0 it 08_non-res 1 24 0.0 0.0 it 09_hydro_pump 1 24 0.0 0.0 -it 01_solar 1 25 1.0 0.0 -it 02_wind_on 1 25 1.0 0.0 +it 01_solar 1 25 0.0 1.0 +it 02_wind_on 1 25 0.0 1.0 it 03_wind_off 1 25 0.0 0.0 it 04_res 1 25 0.0 0.0 it 05_nuclear 1 25 0.0 0.0 @@ -9296,8 +9296,8 @@ it 06_coal 1 25 0.0 0.0 it 07_gas 1 25 0.0 0.0 it 08_non-res 1 25 0.0 0.0 it 09_hydro_pump 1 25 0.0 0.0 -it 01_solar 1 26 1.0 0.0 -it 02_wind_on 1 26 1.0 0.0 +it 01_solar 1 26 0.0 1.0 +it 02_wind_on 1 26 0.0 1.0 it 03_wind_off 1 26 0.0 0.0 it 04_res 1 26 0.0 0.0 it 05_nuclear 1 26 0.0 0.0 @@ -9305,8 +9305,8 @@ it 06_coal 1 26 0.0 0.0 it 07_gas 1 26 0.0 0.0 it 08_non-res 1 26 0.0 0.0 it 09_hydro_pump 1 26 0.0 0.0 -it 01_solar 1 27 1.0 0.0 -it 02_wind_on 1 27 1.0 0.0 +it 01_solar 1 27 0.0 1.0 +it 02_wind_on 1 27 0.0 1.0 it 03_wind_off 1 27 0.0 0.0 it 04_res 1 27 0.0 0.0 it 05_nuclear 1 27 0.0 0.0 @@ -9314,8 +9314,8 @@ it 06_coal 1 27 0.0 0.0 it 07_gas 1 27 0.0 0.0 it 08_non-res 1 27 0.0 0.0 it 09_hydro_pump 1 27 0.0 0.0 -it 01_solar 1 28 1.0 0.0 -it 02_wind_on 1 28 1.0 0.0 +it 01_solar 1 28 0.0 1.0 +it 02_wind_on 1 28 0.0 1.0 it 03_wind_off 1 28 0.0 0.0 it 04_res 1 28 0.0 0.0 it 05_nuclear 1 28 0.0 0.0 @@ -9323,8 +9323,8 @@ it 06_coal 1 28 0.0 0.0 it 07_gas 1 28 0.0 0.0 it 08_non-res 1 28 0.0 0.0 it 09_hydro_pump 1 28 0.0 0.0 -it 01_solar 1 29 1.0 0.0 -it 02_wind_on 1 29 1.0 0.0 +it 01_solar 1 29 0.0 1.0 +it 02_wind_on 1 29 0.0 1.0 it 03_wind_off 1 29 0.0 0.0 it 04_res 1 29 0.0 0.0 it 05_nuclear 1 29 0.0 0.0 @@ -9332,8 +9332,8 @@ it 06_coal 1 29 0.0 0.0 it 07_gas 1 29 0.0 0.0 it 08_non-res 1 29 0.0 0.0 it 09_hydro_pump 1 29 0.0 0.0 -it 01_solar 1 30 1.0 0.0 -it 02_wind_on 1 30 1.0 0.0 +it 01_solar 1 30 0.0 1.0 +it 02_wind_on 1 30 0.0 1.0 it 03_wind_off 1 30 0.0 0.0 it 04_res 1 30 0.0 0.0 it 05_nuclear 1 30 0.0 0.0 @@ -9341,8 +9341,8 @@ it 06_coal 1 30 0.0 0.0 it 07_gas 1 30 0.0 0.0 it 08_non-res 1 30 0.0 0.0 it 09_hydro_pump 1 30 0.0 0.0 -it 01_solar 1 31 1.0 0.0 -it 02_wind_on 1 31 1.0 0.0 +it 01_solar 1 31 0.0 1.0 +it 02_wind_on 1 31 0.0 1.0 it 03_wind_off 1 31 0.0 0.0 it 04_res 1 31 0.0 0.0 it 05_nuclear 1 31 0.0 0.0 @@ -9350,8 +9350,8 @@ it 06_coal 1 31 0.0 0.0 it 07_gas 1 31 0.0 0.0 it 08_non-res 1 31 0.0 0.0 it 09_hydro_pump 1 31 0.0 0.0 -it 01_solar 1 32 1.0 0.0 -it 02_wind_on 1 32 1.0 0.0 +it 01_solar 1 32 0.0 1.0 +it 02_wind_on 1 32 0.0 1.0 it 03_wind_off 1 32 0.0 0.0 it 04_res 1 32 0.0 0.0 it 05_nuclear 1 32 0.0 0.0 @@ -9359,8 +9359,8 @@ it 06_coal 1 32 0.0 0.0 it 07_gas 1 32 0.0 0.0 it 08_non-res 1 32 0.0 0.0 it 09_hydro_pump 1 32 0.0 0.0 -it 01_solar 1 33 1.0 0.0 -it 02_wind_on 1 33 1.0 0.0 +it 01_solar 1 33 0.0 1.0 +it 02_wind_on 1 33 0.0 1.0 it 03_wind_off 1 33 0.0 0.0 it 04_res 1 33 0.0 0.0 it 05_nuclear 1 33 0.0 0.0 @@ -9368,8 +9368,8 @@ it 06_coal 1 33 0.0 0.0 it 07_gas 1 33 0.0 0.0 it 08_non-res 1 33 0.0 0.0 it 09_hydro_pump 1 33 0.0 0.0 -it 01_solar 1 34 1.0 0.0 -it 02_wind_on 1 34 1.0 0.0 +it 01_solar 1 34 0.0 1.0 +it 02_wind_on 1 34 0.0 1.0 it 03_wind_off 1 34 0.0 0.0 it 04_res 1 34 0.0 0.0 it 05_nuclear 1 34 0.0 0.0 @@ -9377,8 +9377,8 @@ it 06_coal 1 34 0.0 0.0 it 07_gas 1 34 0.0 0.0 it 08_non-res 1 34 0.0 0.0 it 09_hydro_pump 1 34 0.0 0.0 -it 01_solar 1 35 1.0 0.0 -it 02_wind_on 1 35 1.0 0.0 +it 01_solar 1 35 0.0 1.0 +it 02_wind_on 1 35 0.0 1.0 it 03_wind_off 1 35 0.0 0.0 it 04_res 1 35 0.0 0.0 it 05_nuclear 1 35 0.0 0.0 @@ -9386,8 +9386,8 @@ it 06_coal 1 35 0.0 0.0 it 07_gas 1 35 0.0 0.0 it 08_non-res 1 35 0.0 0.0 it 09_hydro_pump 1 35 0.0 0.0 -it 01_solar 1 36 1.0 0.0 -it 02_wind_on 1 36 1.0 0.0 +it 01_solar 1 36 0.0 1.0 +it 02_wind_on 1 36 0.0 1.0 it 03_wind_off 1 36 0.0 0.0 it 04_res 1 36 0.0 0.0 it 05_nuclear 1 36 0.0 0.0 @@ -9395,8 +9395,8 @@ it 06_coal 1 36 0.0 0.0 it 07_gas 1 36 0.0 0.0 it 08_non-res 1 36 0.0 0.0 it 09_hydro_pump 1 36 0.0 0.0 -it 01_solar 1 37 1.0 0.0 -it 02_wind_on 1 37 1.0 0.0 +it 01_solar 1 37 0.0 1.0 +it 02_wind_on 1 37 0.0 1.0 it 03_wind_off 1 37 0.0 0.0 it 04_res 1 37 0.0 0.0 it 05_nuclear 1 37 0.0 0.0 @@ -9404,8 +9404,8 @@ it 06_coal 1 37 0.0 0.0 it 07_gas 1 37 0.0 0.0 it 08_non-res 1 37 0.0 0.0 it 09_hydro_pump 1 37 0.0 0.0 -it 01_solar 1 38 1.0 0.0 -it 02_wind_on 1 38 1.0 0.0 +it 01_solar 1 38 0.0 1.0 +it 02_wind_on 1 38 0.0 1.0 it 03_wind_off 1 38 0.0 0.0 it 04_res 1 38 0.0 0.0 it 05_nuclear 1 38 0.0 0.0 @@ -9413,8 +9413,8 @@ it 06_coal 1 38 0.0 0.0 it 07_gas 1 38 0.0 0.0 it 08_non-res 1 38 0.0 0.0 it 09_hydro_pump 1 38 0.0 0.0 -it 01_solar 1 39 1.0 0.0 -it 02_wind_on 1 39 1.0 0.0 +it 01_solar 1 39 0.0 1.0 +it 02_wind_on 1 39 0.0 1.0 it 03_wind_off 1 39 0.0 0.0 it 04_res 1 39 0.0 0.0 it 05_nuclear 1 39 0.0 0.0 @@ -9422,8 +9422,8 @@ it 06_coal 1 39 0.0 0.0 it 07_gas 1 39 0.0 0.0 it 08_non-res 1 39 0.0 0.0 it 09_hydro_pump 1 39 0.0 0.0 -it 01_solar 1 40 1.0 0.0 -it 02_wind_on 1 40 1.0 0.0 +it 01_solar 1 40 0.0 1.0 +it 02_wind_on 1 40 0.0 1.0 it 03_wind_off 1 40 0.0 0.0 it 04_res 1 40 0.0 0.0 it 05_nuclear 1 40 0.0 0.0 @@ -9431,8 +9431,8 @@ it 06_coal 1 40 0.0 0.0 it 07_gas 1 40 0.0 0.0 it 08_non-res 1 40 0.0 0.0 it 09_hydro_pump 1 40 0.0 0.0 -it 01_solar 1 41 1.0 0.0 -it 02_wind_on 1 41 1.0 0.0 +it 01_solar 1 41 0.0 1.0 +it 02_wind_on 1 41 0.0 1.0 it 03_wind_off 1 41 0.0 0.0 it 04_res 1 41 0.0 0.0 it 05_nuclear 1 41 0.0 0.0 @@ -9440,1149 +9440,1149 @@ it 06_coal 1 41 0.0 0.0 it 07_gas 1 41 0.0 0.0 it 08_non-res 1 41 0.0 0.0 it 09_hydro_pump 1 41 0.0 0.0 -it 01_solar 1 42 1.0 0.0 -it 02_wind_on 1 42 1.0 0.0 -it 03_wind_off 1 42 1.0 0.0 +it 01_solar 1 42 0.0 1.0 +it 02_wind_on 1 42 0.0 1.0 +it 03_wind_off 1 42 0.0 1.0 it 04_res 1 42 0.0 0.0 it 05_nuclear 1 42 0.0 0.0 it 06_coal 1 42 0.0 0.0 it 07_gas 1 42 0.0 0.0 it 08_non-res 1 42 0.0 0.0 it 09_hydro_pump 1 42 0.0 0.0 -it 01_solar 1 43 1.0 0.0 -it 02_wind_on 1 43 1.0 0.0 -it 03_wind_off 1 43 1.0 0.0 +it 01_solar 1 43 0.0 1.0 +it 02_wind_on 1 43 0.0 1.0 +it 03_wind_off 1 43 0.0 1.0 it 04_res 1 43 0.0 0.0 it 05_nuclear 1 43 0.0 0.0 it 06_coal 1 43 0.0 0.0 it 07_gas 1 43 0.0 0.0 it 08_non-res 1 43 0.0 0.0 it 09_hydro_pump 1 43 0.0 0.0 -it 01_solar 1 44 1.0 0.0 -it 02_wind_on 1 44 1.0 0.0 -it 03_wind_off 1 44 1.0 0.0 +it 01_solar 1 44 0.0 1.0 +it 02_wind_on 1 44 0.0 1.0 +it 03_wind_off 1 44 0.0 1.0 it 04_res 1 44 0.0 0.0 it 05_nuclear 1 44 0.0 0.0 it 06_coal 1 44 0.0 0.0 it 07_gas 1 44 0.0 0.0 it 08_non-res 1 44 0.0 0.0 it 09_hydro_pump 1 44 0.0 0.0 -it 01_solar 1 45 1.0 0.0 -it 02_wind_on 1 45 1.0 0.0 -it 03_wind_off 1 45 1.0 0.0 +it 01_solar 1 45 0.0 1.0 +it 02_wind_on 1 45 0.0 1.0 +it 03_wind_off 1 45 0.0 1.0 it 04_res 1 45 0.0 0.0 it 05_nuclear 1 45 0.0 0.0 it 06_coal 1 45 0.0 0.0 it 07_gas 1 45 0.0 0.0 it 08_non-res 1 45 0.0 0.0 it 09_hydro_pump 1 45 0.0 0.0 -it 01_solar 1 46 1.0 0.0 -it 02_wind_on 1 46 1.0 0.0 -it 03_wind_off 1 46 1.0 0.0 +it 01_solar 1 46 0.0 1.0 +it 02_wind_on 1 46 0.0 1.0 +it 03_wind_off 1 46 0.0 1.0 it 04_res 1 46 0.0 0.0 it 05_nuclear 1 46 0.0 0.0 it 06_coal 1 46 0.0 0.0 it 07_gas 1 46 0.0 0.0 it 08_non-res 1 46 0.0 0.0 it 09_hydro_pump 1 46 0.0 0.0 -it 01_solar 1 47 1.0 0.0 -it 02_wind_on 1 47 1.0 0.0 -it 03_wind_off 1 47 1.0 0.0 +it 01_solar 1 47 0.0 1.0 +it 02_wind_on 1 47 0.0 1.0 +it 03_wind_off 1 47 0.0 1.0 it 04_res 1 47 0.0 0.0 it 05_nuclear 1 47 0.0 0.0 it 06_coal 1 47 0.0 0.0 it 07_gas 1 47 0.0 0.0 it 08_non-res 1 47 0.0 0.0 it 09_hydro_pump 1 47 0.0 0.0 -it 01_solar 1 48 1.0 0.0 -it 02_wind_on 1 48 1.0 0.0 -it 03_wind_off 1 48 1.0 0.0 +it 01_solar 1 48 0.0 1.0 +it 02_wind_on 1 48 0.0 1.0 +it 03_wind_off 1 48 0.0 1.0 it 04_res 1 48 0.0 0.0 it 05_nuclear 1 48 0.0 0.0 it 06_coal 1 48 0.0 0.0 it 07_gas 1 48 0.0 0.0 it 08_non-res 1 48 0.0 0.0 it 09_hydro_pump 1 48 0.0 0.0 -it 01_solar 1 49 1.0 0.0 -it 02_wind_on 1 49 1.0 0.0 -it 03_wind_off 1 49 1.0 0.0 +it 01_solar 1 49 0.0 1.0 +it 02_wind_on 1 49 0.0 1.0 +it 03_wind_off 1 49 0.0 1.0 it 04_res 1 49 0.0 0.0 it 05_nuclear 1 49 0.0 0.0 it 06_coal 1 49 0.0 0.0 it 07_gas 1 49 0.0 0.0 it 08_non-res 1 49 0.0 0.0 it 09_hydro_pump 1 49 0.0 0.0 -it 01_solar 1 50 1.0 0.0 -it 02_wind_on 1 50 1.0 0.0 -it 03_wind_off 1 50 1.0 0.0 +it 01_solar 1 50 0.0 1.0 +it 02_wind_on 1 50 0.0 1.0 +it 03_wind_off 1 50 0.0 1.0 it 04_res 1 50 0.0 0.0 it 05_nuclear 1 50 0.0 0.0 it 06_coal 1 50 0.0 0.0 it 07_gas 1 50 0.0 0.0 it 08_non-res 1 50 0.0 0.0 it 09_hydro_pump 1 50 0.0 0.0 -it 01_solar 1 51 1.0 0.0 -it 02_wind_on 1 51 1.0 0.0 -it 03_wind_off 1 51 1.0 0.0 +it 01_solar 1 51 0.0 1.0 +it 02_wind_on 1 51 0.0 1.0 +it 03_wind_off 1 51 0.0 1.0 it 04_res 1 51 0.0 0.0 it 05_nuclear 1 51 0.0 0.0 it 06_coal 1 51 0.0 0.0 it 07_gas 1 51 0.0 0.0 it 08_non-res 1 51 0.0 0.0 it 09_hydro_pump 1 51 0.0 0.0 -it 01_solar 1 52 1.0 0.0 -it 02_wind_on 1 52 1.0 0.0 -it 03_wind_off 1 52 1.0 0.0 +it 01_solar 1 52 0.0 1.0 +it 02_wind_on 1 52 0.0 1.0 +it 03_wind_off 1 52 0.0 1.0 it 04_res 1 52 0.0 0.0 it 05_nuclear 1 52 0.0 0.0 it 06_coal 1 52 0.0 0.0 it 07_gas 1 52 0.0 0.0 it 08_non-res 1 52 0.0 0.0 it 09_hydro_pump 1 52 0.0 0.0 -it 01_solar 1 53 1.0 0.0 -it 02_wind_on 1 53 1.0 0.0 -it 03_wind_off 1 53 1.0 0.0 +it 01_solar 1 53 0.0 1.0 +it 02_wind_on 1 53 0.0 1.0 +it 03_wind_off 1 53 0.0 1.0 it 04_res 1 53 0.0 0.0 it 05_nuclear 1 53 0.0 0.0 it 06_coal 1 53 0.0 0.0 it 07_gas 1 53 0.0 0.0 it 08_non-res 1 53 0.0 0.0 it 09_hydro_pump 1 53 0.0 0.0 -it 01_solar 1 54 1.0 0.0 -it 02_wind_on 1 54 1.0 0.0 -it 03_wind_off 1 54 1.0 0.0 +it 01_solar 1 54 0.0 1.0 +it 02_wind_on 1 54 0.0 1.0 +it 03_wind_off 1 54 0.0 1.0 it 04_res 1 54 0.0 0.0 it 05_nuclear 1 54 0.0 0.0 it 06_coal 1 54 0.0 0.0 it 07_gas 1 54 0.0 0.0 it 08_non-res 1 54 0.0 0.0 it 09_hydro_pump 1 54 0.0 0.0 -it 01_solar 1 55 1.0 0.0 -it 02_wind_on 1 55 1.0 0.0 -it 03_wind_off 1 55 1.0 0.0 +it 01_solar 1 55 0.0 1.0 +it 02_wind_on 1 55 0.0 1.0 +it 03_wind_off 1 55 0.0 1.0 it 04_res 1 55 0.0 0.0 it 05_nuclear 1 55 0.0 0.0 it 06_coal 1 55 0.0 0.0 it 07_gas 1 55 0.0 0.0 it 08_non-res 1 55 0.0 0.0 it 09_hydro_pump 1 55 0.0 0.0 -it 01_solar 1 56 1.0 0.0 -it 02_wind_on 1 56 1.0 0.0 -it 03_wind_off 1 56 1.0 0.0 +it 01_solar 1 56 0.0 1.0 +it 02_wind_on 1 56 0.0 1.0 +it 03_wind_off 1 56 0.0 1.0 it 04_res 1 56 0.0 0.0 it 05_nuclear 1 56 0.0 0.0 it 06_coal 1 56 0.0 0.0 it 07_gas 1 56 0.0 0.0 it 08_non-res 1 56 0.0 0.0 it 09_hydro_pump 1 56 0.0 0.0 -it 01_solar 1 57 1.0 0.0 -it 02_wind_on 1 57 1.0 0.0 -it 03_wind_off 1 57 1.0 0.0 +it 01_solar 1 57 0.0 1.0 +it 02_wind_on 1 57 0.0 1.0 +it 03_wind_off 1 57 0.0 1.0 it 04_res 1 57 0.0 0.0 it 05_nuclear 1 57 0.0 0.0 it 06_coal 1 57 0.0 0.0 it 07_gas 1 57 0.0 0.0 it 08_non-res 1 57 0.0 0.0 it 09_hydro_pump 1 57 0.0 0.0 -it 01_solar 1 58 1.0 0.0 -it 02_wind_on 1 58 1.0 0.0 -it 03_wind_off 1 58 1.0 0.0 +it 01_solar 1 58 0.0 1.0 +it 02_wind_on 1 58 0.0 1.0 +it 03_wind_off 1 58 0.0 1.0 it 04_res 1 58 0.0 0.0 it 05_nuclear 1 58 0.0 0.0 it 06_coal 1 58 0.0 0.0 it 07_gas 1 58 0.0 0.0 it 08_non-res 1 58 0.0 0.0 it 09_hydro_pump 1 58 0.0 0.0 -it 01_solar 1 59 1.0 0.0 -it 02_wind_on 1 59 1.0 0.0 -it 03_wind_off 1 59 1.0 0.0 +it 01_solar 1 59 0.0 1.0 +it 02_wind_on 1 59 0.0 1.0 +it 03_wind_off 1 59 0.0 1.0 it 04_res 1 59 0.0 0.0 it 05_nuclear 1 59 0.0 0.0 it 06_coal 1 59 0.0 0.0 it 07_gas 1 59 0.0 0.0 it 08_non-res 1 59 0.0 0.0 it 09_hydro_pump 1 59 0.0 0.0 -it 01_solar 1 60 1.0 0.0 -it 02_wind_on 1 60 1.0 0.0 -it 03_wind_off 1 60 1.0 0.0 +it 01_solar 1 60 0.0 1.0 +it 02_wind_on 1 60 0.0 1.0 +it 03_wind_off 1 60 0.0 1.0 it 04_res 1 60 0.0 0.0 it 05_nuclear 1 60 0.0 0.0 it 06_coal 1 60 0.0 0.0 it 07_gas 1 60 0.0 0.0 it 08_non-res 1 60 0.0 0.0 it 09_hydro_pump 1 60 0.0 0.0 -it 01_solar 1 61 1.0 0.0 -it 02_wind_on 1 61 1.0 0.0 -it 03_wind_off 1 61 1.0 0.0 +it 01_solar 1 61 0.0 1.0 +it 02_wind_on 1 61 0.0 1.0 +it 03_wind_off 1 61 0.0 1.0 it 04_res 1 61 0.0 0.0 it 05_nuclear 1 61 0.0 0.0 it 06_coal 1 61 0.0 0.0 it 07_gas 1 61 0.0 0.0 it 08_non-res 1 61 0.0 0.0 it 09_hydro_pump 1 61 0.0 0.0 -it 01_solar 1 62 1.0 0.0 -it 02_wind_on 1 62 1.0 0.0 -it 03_wind_off 1 62 1.0 0.0 -it 04_res 1 62 1.0 0.0 +it 01_solar 1 62 0.0 1.0 +it 02_wind_on 1 62 0.0 1.0 +it 03_wind_off 1 62 0.0 1.0 +it 04_res 1 62 0.0 1.0 it 05_nuclear 1 62 0.0 0.0 it 06_coal 1 62 0.0 0.0 it 07_gas 1 62 0.0 0.0 it 08_non-res 1 62 0.0 0.0 it 09_hydro_pump 1 62 0.0 0.0 -it 01_solar 1 63 1.0 0.0 -it 02_wind_on 1 63 1.0 0.0 -it 03_wind_off 1 63 1.0 0.0 -it 04_res 1 63 1.0 0.0 +it 01_solar 1 63 0.0 1.0 +it 02_wind_on 1 63 0.0 1.0 +it 03_wind_off 1 63 0.0 1.0 +it 04_res 1 63 0.0 1.0 it 05_nuclear 1 63 0.0 0.0 it 06_coal 1 63 0.0 0.0 it 07_gas 1 63 0.0 0.0 it 08_non-res 1 63 0.0 0.0 it 09_hydro_pump 1 63 0.0 0.0 -it 01_solar 1 64 1.0 0.0 -it 02_wind_on 1 64 1.0 0.0 -it 03_wind_off 1 64 1.0 0.0 -it 04_res 1 64 1.0 0.0 +it 01_solar 1 64 0.0 1.0 +it 02_wind_on 1 64 0.0 1.0 +it 03_wind_off 1 64 0.0 1.0 +it 04_res 1 64 0.0 1.0 it 05_nuclear 1 64 0.0 0.0 it 06_coal 1 64 0.0 0.0 it 07_gas 1 64 0.0 0.0 it 08_non-res 1 64 0.0 0.0 it 09_hydro_pump 1 64 0.0 0.0 -it 01_solar 1 65 1.0 0.0 -it 02_wind_on 1 65 1.0 0.0 -it 03_wind_off 1 65 1.0 0.0 -it 04_res 1 65 1.0 0.0 +it 01_solar 1 65 0.0 1.0 +it 02_wind_on 1 65 0.0 1.0 +it 03_wind_off 1 65 0.0 1.0 +it 04_res 1 65 0.0 1.0 it 05_nuclear 1 65 0.0 0.0 it 06_coal 1 65 0.0 0.0 it 07_gas 1 65 0.0 0.0 it 08_non-res 1 65 0.0 0.0 it 09_hydro_pump 1 65 0.0 0.0 -it 01_solar 1 66 1.0 0.0 -it 02_wind_on 1 66 1.0 0.0 -it 03_wind_off 1 66 1.0 0.0 -it 04_res 1 66 1.0 0.0 +it 01_solar 1 66 0.0 1.0 +it 02_wind_on 1 66 0.0 1.0 +it 03_wind_off 1 66 0.0 1.0 +it 04_res 1 66 0.0 1.0 it 05_nuclear 1 66 0.0 0.0 it 06_coal 1 66 0.0 0.0 it 07_gas 1 66 0.0 0.0 it 08_non-res 1 66 0.0 0.0 it 09_hydro_pump 1 66 0.0 0.0 -it 01_solar 1 67 1.0 0.0 -it 02_wind_on 1 67 1.0 0.0 -it 03_wind_off 1 67 1.0 0.0 -it 04_res 1 67 1.0 0.0 +it 01_solar 1 67 0.0 1.0 +it 02_wind_on 1 67 0.0 1.0 +it 03_wind_off 1 67 0.0 1.0 +it 04_res 1 67 0.0 1.0 it 05_nuclear 1 67 0.0 0.0 it 06_coal 1 67 0.0 0.0 it 07_gas 1 67 0.0 0.0 it 08_non-res 1 67 0.0 0.0 it 09_hydro_pump 1 67 0.0 0.0 -it 01_solar 1 68 1.0 0.0 -it 02_wind_on 1 68 1.0 0.0 -it 03_wind_off 1 68 1.0 0.0 -it 04_res 1 68 1.0 0.0 +it 01_solar 1 68 0.0 1.0 +it 02_wind_on 1 68 0.0 1.0 +it 03_wind_off 1 68 0.0 1.0 +it 04_res 1 68 0.0 1.0 it 05_nuclear 1 68 0.0 0.0 it 06_coal 1 68 0.0 0.0 it 07_gas 1 68 0.0 0.0 it 08_non-res 1 68 0.0 0.0 it 09_hydro_pump 1 68 0.0 0.0 -it 01_solar 1 69 1.0 0.0 -it 02_wind_on 1 69 1.0 0.0 -it 03_wind_off 1 69 1.0 0.0 -it 04_res 1 69 1.0 0.0 +it 01_solar 1 69 0.0 1.0 +it 02_wind_on 1 69 0.0 1.0 +it 03_wind_off 1 69 0.0 1.0 +it 04_res 1 69 0.0 1.0 it 05_nuclear 1 69 0.0 0.0 it 06_coal 1 69 0.0 0.0 it 07_gas 1 69 0.0 0.0 it 08_non-res 1 69 0.0 0.0 it 09_hydro_pump 1 69 0.0 0.0 -it 01_solar 1 70 1.0 0.0 -it 02_wind_on 1 70 1.0 0.0 -it 03_wind_off 1 70 1.0 0.0 -it 04_res 1 70 1.0 0.0 +it 01_solar 1 70 0.0 1.0 +it 02_wind_on 1 70 0.0 1.0 +it 03_wind_off 1 70 0.0 1.0 +it 04_res 1 70 0.0 1.0 it 05_nuclear 1 70 0.0 0.0 it 06_coal 1 70 0.0 0.0 it 07_gas 1 70 0.0 0.0 it 08_non-res 1 70 0.0 0.0 it 09_hydro_pump 1 70 0.0 0.0 -it 01_solar 1 71 1.0 0.0 -it 02_wind_on 1 71 1.0 0.0 -it 03_wind_off 1 71 1.0 0.0 -it 04_res 1 71 1.0 0.0 +it 01_solar 1 71 0.0 1.0 +it 02_wind_on 1 71 0.0 1.0 +it 03_wind_off 1 71 0.0 1.0 +it 04_res 1 71 0.0 1.0 it 05_nuclear 1 71 0.0 0.0 it 06_coal 1 71 0.0 0.0 it 07_gas 1 71 0.0 0.0 it 08_non-res 1 71 0.0 0.0 it 09_hydro_pump 1 71 0.0 0.0 -it 01_solar 1 72 1.0 0.0 -it 02_wind_on 1 72 1.0 0.0 -it 03_wind_off 1 72 1.0 0.0 -it 04_res 1 72 1.0 0.0 +it 01_solar 1 72 0.0 1.0 +it 02_wind_on 1 72 0.0 1.0 +it 03_wind_off 1 72 0.0 1.0 +it 04_res 1 72 0.0 1.0 it 05_nuclear 1 72 0.0 0.0 it 06_coal 1 72 0.0 0.0 it 07_gas 1 72 0.0 0.0 it 08_non-res 1 72 0.0 0.0 it 09_hydro_pump 1 72 0.0 0.0 -it 01_solar 1 73 1.0 0.0 -it 02_wind_on 1 73 1.0 0.0 -it 03_wind_off 1 73 1.0 0.0 -it 04_res 1 73 1.0 0.0 +it 01_solar 1 73 0.0 1.0 +it 02_wind_on 1 73 0.0 1.0 +it 03_wind_off 1 73 0.0 1.0 +it 04_res 1 73 0.0 1.0 it 05_nuclear 1 73 0.0 0.0 it 06_coal 1 73 0.0 0.0 it 07_gas 1 73 0.0 0.0 it 08_non-res 1 73 0.0 0.0 it 09_hydro_pump 1 73 0.0 0.0 -it 01_solar 1 74 1.0 0.0 -it 02_wind_on 1 74 1.0 0.0 -it 03_wind_off 1 74 1.0 0.0 -it 04_res 1 74 1.0 0.0 +it 01_solar 1 74 0.0 1.0 +it 02_wind_on 1 74 0.0 1.0 +it 03_wind_off 1 74 0.0 1.0 +it 04_res 1 74 0.0 1.0 it 05_nuclear 1 74 0.0 0.0 it 06_coal 1 74 0.0 0.0 it 07_gas 1 74 0.0 0.0 it 08_non-res 1 74 0.0 0.0 it 09_hydro_pump 1 74 0.0 0.0 -it 01_solar 1 75 1.0 0.0 -it 02_wind_on 1 75 1.0 0.0 -it 03_wind_off 1 75 1.0 0.0 -it 04_res 1 75 1.0 0.0 +it 01_solar 1 75 0.0 1.0 +it 02_wind_on 1 75 0.0 1.0 +it 03_wind_off 1 75 0.0 1.0 +it 04_res 1 75 0.0 1.0 it 05_nuclear 1 75 0.0 0.0 it 06_coal 1 75 0.0 0.0 it 07_gas 1 75 0.0 0.0 it 08_non-res 1 75 0.0 0.0 it 09_hydro_pump 1 75 0.0 0.0 -it 01_solar 1 76 1.0 0.0 -it 02_wind_on 1 76 1.0 0.0 -it 03_wind_off 1 76 1.0 0.0 -it 04_res 1 76 1.0 0.0 +it 01_solar 1 76 0.0 1.0 +it 02_wind_on 1 76 0.0 1.0 +it 03_wind_off 1 76 0.0 1.0 +it 04_res 1 76 0.0 1.0 it 05_nuclear 1 76 0.0 0.0 it 06_coal 1 76 0.0 0.0 it 07_gas 1 76 0.0 0.0 it 08_non-res 1 76 0.0 0.0 it 09_hydro_pump 1 76 0.0 0.0 -it 01_solar 1 77 1.0 0.0 -it 02_wind_on 1 77 1.0 0.0 -it 03_wind_off 1 77 1.0 0.0 -it 04_res 1 77 1.0 0.0 +it 01_solar 1 77 0.0 1.0 +it 02_wind_on 1 77 0.0 1.0 +it 03_wind_off 1 77 0.0 1.0 +it 04_res 1 77 0.0 1.0 it 05_nuclear 1 77 0.0 0.0 it 06_coal 1 77 0.0 0.0 it 07_gas 1 77 0.0 0.0 it 08_non-res 1 77 0.0 0.0 it 09_hydro_pump 1 77 0.0 0.0 -it 01_solar 1 78 1.0 0.0 -it 02_wind_on 1 78 1.0 0.0 -it 03_wind_off 1 78 1.0 0.0 -it 04_res 1 78 1.0 0.0 +it 01_solar 1 78 0.0 1.0 +it 02_wind_on 1 78 0.0 1.0 +it 03_wind_off 1 78 0.0 1.0 +it 04_res 1 78 0.0 1.0 it 05_nuclear 1 78 0.0 0.0 it 06_coal 1 78 0.0 0.0 it 07_gas 1 78 0.0 0.0 it 08_non-res 1 78 0.0 0.0 it 09_hydro_pump 1 78 0.0 0.0 -it 01_solar 1 79 1.0 0.0 -it 02_wind_on 1 79 1.0 0.0 -it 03_wind_off 1 79 1.0 0.0 -it 04_res 1 79 1.0 0.0 +it 01_solar 1 79 0.0 1.0 +it 02_wind_on 1 79 0.0 1.0 +it 03_wind_off 1 79 0.0 1.0 +it 04_res 1 79 0.0 1.0 it 05_nuclear 1 79 0.0 0.0 it 06_coal 1 79 0.0 0.0 it 07_gas 1 79 0.0 0.0 it 08_non-res 1 79 0.0 0.0 it 09_hydro_pump 1 79 0.0 0.0 -it 01_solar 1 80 1.0 0.0 -it 02_wind_on 1 80 1.0 0.0 -it 03_wind_off 1 80 1.0 0.0 -it 04_res 1 80 1.0 0.0 +it 01_solar 1 80 0.0 1.0 +it 02_wind_on 1 80 0.0 1.0 +it 03_wind_off 1 80 0.0 1.0 +it 04_res 1 80 0.0 1.0 it 05_nuclear 1 80 0.0 0.0 it 06_coal 1 80 0.0 0.0 it 07_gas 1 80 0.0 0.0 it 08_non-res 1 80 0.0 0.0 it 09_hydro_pump 1 80 0.0 0.0 -it 01_solar 1 81 1.0 0.0 -it 02_wind_on 1 81 1.0 0.0 -it 03_wind_off 1 81 1.0 0.0 -it 04_res 1 81 1.0 0.0 +it 01_solar 1 81 0.0 1.0 +it 02_wind_on 1 81 0.0 1.0 +it 03_wind_off 1 81 0.0 1.0 +it 04_res 1 81 0.0 1.0 it 05_nuclear 1 81 0.0 0.0 it 06_coal 1 81 0.0 0.0 it 07_gas 1 81 0.0 0.0 it 08_non-res 1 81 0.0 0.0 it 09_hydro_pump 1 81 0.0 0.0 -it 01_solar 1 82 1.0 0.0 -it 02_wind_on 1 82 1.0 0.0 -it 03_wind_off 1 82 1.0 0.0 -it 04_res 1 82 1.0 0.0 -it 05_nuclear 1 82 1.0 0.0 +it 01_solar 1 82 0.0 1.0 +it 02_wind_on 1 82 0.0 1.0 +it 03_wind_off 1 82 0.0 1.0 +it 04_res 1 82 0.0 1.0 +it 05_nuclear 1 82 0.0 1.0 it 06_coal 1 82 0.0 0.0 it 07_gas 1 82 0.0 0.0 it 08_non-res 1 82 0.0 0.0 it 09_hydro_pump 1 82 0.0 0.0 -it 01_solar 1 83 1.0 0.0 -it 02_wind_on 1 83 1.0 0.0 -it 03_wind_off 1 83 1.0 0.0 -it 04_res 1 83 1.0 0.0 -it 05_nuclear 1 83 1.0 0.0 +it 01_solar 1 83 0.0 1.0 +it 02_wind_on 1 83 0.0 1.0 +it 03_wind_off 1 83 0.0 1.0 +it 04_res 1 83 0.0 1.0 +it 05_nuclear 1 83 0.0 1.0 it 06_coal 1 83 0.0 0.0 it 07_gas 1 83 0.0 0.0 it 08_non-res 1 83 0.0 0.0 it 09_hydro_pump 1 83 0.0 0.0 -it 01_solar 1 84 1.0 0.0 -it 02_wind_on 1 84 1.0 0.0 -it 03_wind_off 1 84 1.0 0.0 -it 04_res 1 84 1.0 0.0 -it 05_nuclear 1 84 1.0 0.0 +it 01_solar 1 84 0.0 1.0 +it 02_wind_on 1 84 0.0 1.0 +it 03_wind_off 1 84 0.0 1.0 +it 04_res 1 84 0.0 1.0 +it 05_nuclear 1 84 0.0 1.0 it 06_coal 1 84 0.0 0.0 it 07_gas 1 84 0.0 0.0 it 08_non-res 1 84 0.0 0.0 it 09_hydro_pump 1 84 0.0 0.0 -it 01_solar 1 85 1.0 0.0 -it 02_wind_on 1 85 1.0 0.0 -it 03_wind_off 1 85 1.0 0.0 -it 04_res 1 85 1.0 0.0 -it 05_nuclear 1 85 1.0 0.0 +it 01_solar 1 85 0.0 1.0 +it 02_wind_on 1 85 0.0 1.0 +it 03_wind_off 1 85 0.0 1.0 +it 04_res 1 85 0.0 1.0 +it 05_nuclear 1 85 0.0 1.0 it 06_coal 1 85 0.0 0.0 it 07_gas 1 85 0.0 0.0 it 08_non-res 1 85 0.0 0.0 it 09_hydro_pump 1 85 0.0 0.0 -it 01_solar 1 86 1.0 0.0 -it 02_wind_on 1 86 1.0 0.0 -it 03_wind_off 1 86 1.0 0.0 -it 04_res 1 86 1.0 0.0 -it 05_nuclear 1 86 1.0 0.0 +it 01_solar 1 86 0.0 1.0 +it 02_wind_on 1 86 0.0 1.0 +it 03_wind_off 1 86 0.0 1.0 +it 04_res 1 86 0.0 1.0 +it 05_nuclear 1 86 0.0 1.0 it 06_coal 1 86 0.0 0.0 it 07_gas 1 86 0.0 0.0 it 08_non-res 1 86 0.0 0.0 it 09_hydro_pump 1 86 0.0 0.0 -it 01_solar 1 87 1.0 0.0 -it 02_wind_on 1 87 1.0 0.0 -it 03_wind_off 1 87 1.0 0.0 -it 04_res 1 87 1.0 0.0 -it 05_nuclear 1 87 1.0 0.0 +it 01_solar 1 87 0.0 1.0 +it 02_wind_on 1 87 0.0 1.0 +it 03_wind_off 1 87 0.0 1.0 +it 04_res 1 87 0.0 1.0 +it 05_nuclear 1 87 0.0 1.0 it 06_coal 1 87 0.0 0.0 it 07_gas 1 87 0.0 0.0 it 08_non-res 1 87 0.0 0.0 it 09_hydro_pump 1 87 0.0 0.0 -it 01_solar 1 88 1.0 0.0 -it 02_wind_on 1 88 1.0 0.0 -it 03_wind_off 1 88 1.0 0.0 -it 04_res 1 88 1.0 0.0 -it 05_nuclear 1 88 1.0 0.0 +it 01_solar 1 88 0.0 1.0 +it 02_wind_on 1 88 0.0 1.0 +it 03_wind_off 1 88 0.0 1.0 +it 04_res 1 88 0.0 1.0 +it 05_nuclear 1 88 0.0 1.0 it 06_coal 1 88 0.0 0.0 it 07_gas 1 88 0.0 0.0 it 08_non-res 1 88 0.0 0.0 it 09_hydro_pump 1 88 0.0 0.0 -it 01_solar 1 89 1.0 0.0 -it 02_wind_on 1 89 1.0 0.0 -it 03_wind_off 1 89 1.0 0.0 -it 04_res 1 89 1.0 0.0 -it 05_nuclear 1 89 1.0 0.0 +it 01_solar 1 89 0.0 1.0 +it 02_wind_on 1 89 0.0 1.0 +it 03_wind_off 1 89 0.0 1.0 +it 04_res 1 89 0.0 1.0 +it 05_nuclear 1 89 0.0 1.0 it 06_coal 1 89 0.0 0.0 it 07_gas 1 89 0.0 0.0 it 08_non-res 1 89 0.0 0.0 it 09_hydro_pump 1 89 0.0 0.0 -it 01_solar 1 90 1.0 0.0 -it 02_wind_on 1 90 1.0 0.0 -it 03_wind_off 1 90 1.0 0.0 -it 04_res 1 90 1.0 0.0 -it 05_nuclear 1 90 1.0 0.0 +it 01_solar 1 90 0.0 1.0 +it 02_wind_on 1 90 0.0 1.0 +it 03_wind_off 1 90 0.0 1.0 +it 04_res 1 90 0.0 1.0 +it 05_nuclear 1 90 0.0 1.0 it 06_coal 1 90 0.0 0.0 it 07_gas 1 90 0.0 0.0 it 08_non-res 1 90 0.0 0.0 it 09_hydro_pump 1 90 0.0 0.0 -it 01_solar 1 91 1.0 0.0 -it 02_wind_on 1 91 1.0 0.0 -it 03_wind_off 1 91 1.0 0.0 -it 04_res 1 91 1.0 0.0 -it 05_nuclear 1 91 1.0 0.0 +it 01_solar 1 91 0.0 1.0 +it 02_wind_on 1 91 0.0 1.0 +it 03_wind_off 1 91 0.0 1.0 +it 04_res 1 91 0.0 1.0 +it 05_nuclear 1 91 0.0 1.0 it 06_coal 1 91 0.0 0.0 it 07_gas 1 91 0.0 0.0 it 08_non-res 1 91 0.0 0.0 it 09_hydro_pump 1 91 0.0 0.0 -it 01_solar 1 92 1.0 0.0 -it 02_wind_on 1 92 1.0 0.0 -it 03_wind_off 1 92 1.0 0.0 -it 04_res 1 92 1.0 0.0 -it 05_nuclear 1 92 1.0 0.0 +it 01_solar 1 92 0.0 1.0 +it 02_wind_on 1 92 0.0 1.0 +it 03_wind_off 1 92 0.0 1.0 +it 04_res 1 92 0.0 1.0 +it 05_nuclear 1 92 0.0 1.0 it 06_coal 1 92 0.0 0.0 it 07_gas 1 92 0.0 0.0 it 08_non-res 1 92 0.0 0.0 it 09_hydro_pump 1 92 0.0 0.0 -it 01_solar 1 93 1.0 0.0 -it 02_wind_on 1 93 1.0 0.0 -it 03_wind_off 1 93 1.0 0.0 -it 04_res 1 93 1.0 0.0 -it 05_nuclear 1 93 1.0 0.0 +it 01_solar 1 93 0.0 1.0 +it 02_wind_on 1 93 0.0 1.0 +it 03_wind_off 1 93 0.0 1.0 +it 04_res 1 93 0.0 1.0 +it 05_nuclear 1 93 0.0 1.0 it 06_coal 1 93 0.0 0.0 it 07_gas 1 93 0.0 0.0 it 08_non-res 1 93 0.0 0.0 it 09_hydro_pump 1 93 0.0 0.0 -it 01_solar 1 94 1.0 0.0 -it 02_wind_on 1 94 1.0 0.0 -it 03_wind_off 1 94 1.0 0.0 -it 04_res 1 94 1.0 0.0 -it 05_nuclear 1 94 1.0 0.0 +it 01_solar 1 94 0.0 1.0 +it 02_wind_on 1 94 0.0 1.0 +it 03_wind_off 1 94 0.0 1.0 +it 04_res 1 94 0.0 1.0 +it 05_nuclear 1 94 0.0 1.0 it 06_coal 1 94 0.0 0.0 it 07_gas 1 94 0.0 0.0 it 08_non-res 1 94 0.0 0.0 it 09_hydro_pump 1 94 0.0 0.0 -it 01_solar 1 95 1.0 0.0 -it 02_wind_on 1 95 1.0 0.0 -it 03_wind_off 1 95 1.0 0.0 -it 04_res 1 95 1.0 0.0 -it 05_nuclear 1 95 1.0 0.0 +it 01_solar 1 95 0.0 1.0 +it 02_wind_on 1 95 0.0 1.0 +it 03_wind_off 1 95 0.0 1.0 +it 04_res 1 95 0.0 1.0 +it 05_nuclear 1 95 0.0 1.0 it 06_coal 1 95 0.0 0.0 it 07_gas 1 95 0.0 0.0 it 08_non-res 1 95 0.0 0.0 it 09_hydro_pump 1 95 0.0 0.0 -it 01_solar 1 96 1.0 0.0 -it 02_wind_on 1 96 1.0 0.0 -it 03_wind_off 1 96 1.0 0.0 -it 04_res 1 96 1.0 0.0 -it 05_nuclear 1 96 1.0 0.0 +it 01_solar 1 96 0.0 1.0 +it 02_wind_on 1 96 0.0 1.0 +it 03_wind_off 1 96 0.0 1.0 +it 04_res 1 96 0.0 1.0 +it 05_nuclear 1 96 0.0 1.0 it 06_coal 1 96 0.0 0.0 it 07_gas 1 96 0.0 0.0 it 08_non-res 1 96 0.0 0.0 it 09_hydro_pump 1 96 0.0 0.0 -it 01_solar 1 97 1.0 0.0 -it 02_wind_on 1 97 1.0 0.0 -it 03_wind_off 1 97 1.0 0.0 -it 04_res 1 97 1.0 0.0 -it 05_nuclear 1 97 1.0 0.0 +it 01_solar 1 97 0.0 1.0 +it 02_wind_on 1 97 0.0 1.0 +it 03_wind_off 1 97 0.0 1.0 +it 04_res 1 97 0.0 1.0 +it 05_nuclear 1 97 0.0 1.0 it 06_coal 1 97 0.0 0.0 it 07_gas 1 97 0.0 0.0 it 08_non-res 1 97 0.0 0.0 it 09_hydro_pump 1 97 0.0 0.0 -it 01_solar 1 98 1.0 0.0 -it 02_wind_on 1 98 1.0 0.0 -it 03_wind_off 1 98 1.0 0.0 -it 04_res 1 98 1.0 0.0 -it 05_nuclear 1 98 1.0 0.0 +it 01_solar 1 98 0.0 1.0 +it 02_wind_on 1 98 0.0 1.0 +it 03_wind_off 1 98 0.0 1.0 +it 04_res 1 98 0.0 1.0 +it 05_nuclear 1 98 0.0 1.0 it 06_coal 1 98 0.0 0.0 it 07_gas 1 98 0.0 0.0 it 08_non-res 1 98 0.0 0.0 it 09_hydro_pump 1 98 0.0 0.0 -it 01_solar 1 99 1.0 0.0 -it 02_wind_on 1 99 1.0 0.0 -it 03_wind_off 1 99 1.0 0.0 -it 04_res 1 99 1.0 0.0 -it 05_nuclear 1 99 1.0 0.0 +it 01_solar 1 99 0.0 1.0 +it 02_wind_on 1 99 0.0 1.0 +it 03_wind_off 1 99 0.0 1.0 +it 04_res 1 99 0.0 1.0 +it 05_nuclear 1 99 0.0 1.0 it 06_coal 1 99 0.0 0.0 it 07_gas 1 99 0.0 0.0 it 08_non-res 1 99 0.0 0.0 it 09_hydro_pump 1 99 0.0 0.0 -it 01_solar 1 100 1.0 0.0 -it 02_wind_on 1 100 1.0 0.0 -it 03_wind_off 1 100 1.0 0.0 -it 04_res 1 100 1.0 0.0 -it 05_nuclear 1 100 1.0 0.0 +it 01_solar 1 100 0.0 1.0 +it 02_wind_on 1 100 0.0 1.0 +it 03_wind_off 1 100 0.0 1.0 +it 04_res 1 100 0.0 1.0 +it 05_nuclear 1 100 0.0 1.0 it 06_coal 1 100 0.0 0.0 it 07_gas 1 100 0.0 0.0 it 08_non-res 1 100 0.0 0.0 it 09_hydro_pump 1 100 0.0 0.0 -it 01_solar 1 101 1.0 0.0 -it 02_wind_on 1 101 1.0 0.0 -it 03_wind_off 1 101 1.0 0.0 -it 04_res 1 101 1.0 0.0 -it 05_nuclear 1 101 1.0 0.0 +it 01_solar 1 101 0.0 1.0 +it 02_wind_on 1 101 0.0 1.0 +it 03_wind_off 1 101 0.0 1.0 +it 04_res 1 101 0.0 1.0 +it 05_nuclear 1 101 0.0 1.0 it 06_coal 1 101 0.0 0.0 it 07_gas 1 101 0.0 0.0 it 08_non-res 1 101 0.0 0.0 it 09_hydro_pump 1 101 0.0 0.0 -it 01_solar 1 102 1.0 0.0 -it 02_wind_on 1 102 1.0 0.0 -it 03_wind_off 1 102 1.0 0.0 -it 04_res 1 102 1.0 0.0 -it 05_nuclear 1 102 1.0 0.0 -it 06_coal 1 102 1.0 0.0 +it 01_solar 1 102 0.0 1.0 +it 02_wind_on 1 102 0.0 1.0 +it 03_wind_off 1 102 0.0 1.0 +it 04_res 1 102 0.0 1.0 +it 05_nuclear 1 102 0.0 1.0 +it 06_coal 1 102 0.0 1.0 it 07_gas 1 102 0.0 0.0 it 08_non-res 1 102 0.0 0.0 it 09_hydro_pump 1 102 0.0 0.0 -it 01_solar 1 103 1.0 0.0 -it 02_wind_on 1 103 1.0 0.0 -it 03_wind_off 1 103 1.0 0.0 -it 04_res 1 103 1.0 0.0 -it 05_nuclear 1 103 1.0 0.0 -it 06_coal 1 103 1.0 0.0 +it 01_solar 1 103 0.0 1.0 +it 02_wind_on 1 103 0.0 1.0 +it 03_wind_off 1 103 0.0 1.0 +it 04_res 1 103 0.0 1.0 +it 05_nuclear 1 103 0.0 1.0 +it 06_coal 1 103 0.0 1.0 it 07_gas 1 103 0.0 0.0 it 08_non-res 1 103 0.0 0.0 it 09_hydro_pump 1 103 0.0 0.0 -it 01_solar 1 104 1.0 0.0 -it 02_wind_on 1 104 1.0 0.0 -it 03_wind_off 1 104 1.0 0.0 -it 04_res 1 104 1.0 0.0 -it 05_nuclear 1 104 1.0 0.0 -it 06_coal 1 104 1.0 0.0 +it 01_solar 1 104 0.0 1.0 +it 02_wind_on 1 104 0.0 1.0 +it 03_wind_off 1 104 0.0 1.0 +it 04_res 1 104 0.0 1.0 +it 05_nuclear 1 104 0.0 1.0 +it 06_coal 1 104 0.0 1.0 it 07_gas 1 104 0.0 0.0 it 08_non-res 1 104 0.0 0.0 it 09_hydro_pump 1 104 0.0 0.0 -it 01_solar 1 105 1.0 0.0 -it 02_wind_on 1 105 1.0 0.0 -it 03_wind_off 1 105 1.0 0.0 -it 04_res 1 105 1.0 0.0 -it 05_nuclear 1 105 1.0 0.0 -it 06_coal 1 105 1.0 0.0 +it 01_solar 1 105 0.0 1.0 +it 02_wind_on 1 105 0.0 1.0 +it 03_wind_off 1 105 0.0 1.0 +it 04_res 1 105 0.0 1.0 +it 05_nuclear 1 105 0.0 1.0 +it 06_coal 1 105 0.0 1.0 it 07_gas 1 105 0.0 0.0 it 08_non-res 1 105 0.0 0.0 it 09_hydro_pump 1 105 0.0 0.0 -it 01_solar 1 106 1.0 0.0 -it 02_wind_on 1 106 1.0 0.0 -it 03_wind_off 1 106 1.0 0.0 -it 04_res 1 106 1.0 0.0 -it 05_nuclear 1 106 1.0 0.0 -it 06_coal 1 106 1.0 0.0 +it 01_solar 1 106 0.0 1.0 +it 02_wind_on 1 106 0.0 1.0 +it 03_wind_off 1 106 0.0 1.0 +it 04_res 1 106 0.0 1.0 +it 05_nuclear 1 106 0.0 1.0 +it 06_coal 1 106 0.0 1.0 it 07_gas 1 106 0.0 0.0 it 08_non-res 1 106 0.0 0.0 it 09_hydro_pump 1 106 0.0 0.0 -it 01_solar 1 107 1.0 0.0 -it 02_wind_on 1 107 1.0 0.0 -it 03_wind_off 1 107 1.0 0.0 -it 04_res 1 107 1.0 0.0 -it 05_nuclear 1 107 1.0 0.0 -it 06_coal 1 107 1.0 0.0 +it 01_solar 1 107 0.0 1.0 +it 02_wind_on 1 107 0.0 1.0 +it 03_wind_off 1 107 0.0 1.0 +it 04_res 1 107 0.0 1.0 +it 05_nuclear 1 107 0.0 1.0 +it 06_coal 1 107 0.0 1.0 it 07_gas 1 107 0.0 0.0 it 08_non-res 1 107 0.0 0.0 it 09_hydro_pump 1 107 0.0 0.0 -it 01_solar 1 108 1.0 0.0 -it 02_wind_on 1 108 1.0 0.0 -it 03_wind_off 1 108 1.0 0.0 -it 04_res 1 108 1.0 0.0 -it 05_nuclear 1 108 1.0 0.0 -it 06_coal 1 108 1.0 0.0 +it 01_solar 1 108 0.0 1.0 +it 02_wind_on 1 108 0.0 1.0 +it 03_wind_off 1 108 0.0 1.0 +it 04_res 1 108 0.0 1.0 +it 05_nuclear 1 108 0.0 1.0 +it 06_coal 1 108 0.0 1.0 it 07_gas 1 108 0.0 0.0 it 08_non-res 1 108 0.0 0.0 it 09_hydro_pump 1 108 0.0 0.0 -it 01_solar 1 109 1.0 0.0 -it 02_wind_on 1 109 1.0 0.0 -it 03_wind_off 1 109 1.0 0.0 -it 04_res 1 109 1.0 0.0 -it 05_nuclear 1 109 1.0 0.0 -it 06_coal 1 109 1.0 0.0 +it 01_solar 1 109 0.0 1.0 +it 02_wind_on 1 109 0.0 1.0 +it 03_wind_off 1 109 0.0 1.0 +it 04_res 1 109 0.0 1.0 +it 05_nuclear 1 109 0.0 1.0 +it 06_coal 1 109 0.0 1.0 it 07_gas 1 109 0.0 0.0 it 08_non-res 1 109 0.0 0.0 it 09_hydro_pump 1 109 0.0 0.0 -it 01_solar 1 110 1.0 0.0 -it 02_wind_on 1 110 1.0 0.0 -it 03_wind_off 1 110 1.0 0.0 -it 04_res 1 110 1.0 0.0 -it 05_nuclear 1 110 1.0 0.0 -it 06_coal 1 110 1.0 0.0 +it 01_solar 1 110 0.0 1.0 +it 02_wind_on 1 110 0.0 1.0 +it 03_wind_off 1 110 0.0 1.0 +it 04_res 1 110 0.0 1.0 +it 05_nuclear 1 110 0.0 1.0 +it 06_coal 1 110 0.0 1.0 it 07_gas 1 110 0.0 0.0 it 08_non-res 1 110 0.0 0.0 it 09_hydro_pump 1 110 0.0 0.0 -it 01_solar 1 111 1.0 0.0 -it 02_wind_on 1 111 1.0 0.0 -it 03_wind_off 1 111 1.0 0.0 -it 04_res 1 111 1.0 0.0 -it 05_nuclear 1 111 1.0 0.0 -it 06_coal 1 111 1.0 0.0 +it 01_solar 1 111 0.0 1.0 +it 02_wind_on 1 111 0.0 1.0 +it 03_wind_off 1 111 0.0 1.0 +it 04_res 1 111 0.0 1.0 +it 05_nuclear 1 111 0.0 1.0 +it 06_coal 1 111 0.0 1.0 it 07_gas 1 111 0.0 0.0 it 08_non-res 1 111 0.0 0.0 it 09_hydro_pump 1 111 0.0 0.0 -it 01_solar 1 112 1.0 0.0 -it 02_wind_on 1 112 1.0 0.0 -it 03_wind_off 1 112 1.0 0.0 -it 04_res 1 112 1.0 0.0 -it 05_nuclear 1 112 1.0 0.0 -it 06_coal 1 112 1.0 0.0 +it 01_solar 1 112 0.0 1.0 +it 02_wind_on 1 112 0.0 1.0 +it 03_wind_off 1 112 0.0 1.0 +it 04_res 1 112 0.0 1.0 +it 05_nuclear 1 112 0.0 1.0 +it 06_coal 1 112 0.0 1.0 it 07_gas 1 112 0.0 0.0 it 08_non-res 1 112 0.0 0.0 it 09_hydro_pump 1 112 0.0 0.0 -it 01_solar 1 113 1.0 0.0 -it 02_wind_on 1 113 1.0 0.0 -it 03_wind_off 1 113 1.0 0.0 -it 04_res 1 113 1.0 0.0 -it 05_nuclear 1 113 1.0 0.0 -it 06_coal 1 113 1.0 0.0 +it 01_solar 1 113 0.0 1.0 +it 02_wind_on 1 113 0.0 1.0 +it 03_wind_off 1 113 0.0 1.0 +it 04_res 1 113 0.0 1.0 +it 05_nuclear 1 113 0.0 1.0 +it 06_coal 1 113 0.0 1.0 it 07_gas 1 113 0.0 0.0 it 08_non-res 1 113 0.0 0.0 it 09_hydro_pump 1 113 0.0 0.0 -it 01_solar 1 114 1.0 0.0 -it 02_wind_on 1 114 1.0 0.0 -it 03_wind_off 1 114 1.0 0.0 -it 04_res 1 114 1.0 0.0 -it 05_nuclear 1 114 1.0 0.0 -it 06_coal 1 114 1.0 0.0 +it 01_solar 1 114 0.0 1.0 +it 02_wind_on 1 114 0.0 1.0 +it 03_wind_off 1 114 0.0 1.0 +it 04_res 1 114 0.0 1.0 +it 05_nuclear 1 114 0.0 1.0 +it 06_coal 1 114 0.0 1.0 it 07_gas 1 114 0.0 0.0 it 08_non-res 1 114 0.0 0.0 it 09_hydro_pump 1 114 0.0 0.0 -it 01_solar 1 115 1.0 0.0 -it 02_wind_on 1 115 1.0 0.0 -it 03_wind_off 1 115 1.0 0.0 -it 04_res 1 115 1.0 0.0 -it 05_nuclear 1 115 1.0 0.0 -it 06_coal 1 115 1.0 0.0 +it 01_solar 1 115 0.0 1.0 +it 02_wind_on 1 115 0.0 1.0 +it 03_wind_off 1 115 0.0 1.0 +it 04_res 1 115 0.0 1.0 +it 05_nuclear 1 115 0.0 1.0 +it 06_coal 1 115 0.0 1.0 it 07_gas 1 115 0.0 0.0 it 08_non-res 1 115 0.0 0.0 it 09_hydro_pump 1 115 0.0 0.0 -it 01_solar 1 116 1.0 0.0 -it 02_wind_on 1 116 1.0 0.0 -it 03_wind_off 1 116 1.0 0.0 -it 04_res 1 116 1.0 0.0 -it 05_nuclear 1 116 1.0 0.0 -it 06_coal 1 116 1.0 0.0 +it 01_solar 1 116 0.0 1.0 +it 02_wind_on 1 116 0.0 1.0 +it 03_wind_off 1 116 0.0 1.0 +it 04_res 1 116 0.0 1.0 +it 05_nuclear 1 116 0.0 1.0 +it 06_coal 1 116 0.0 1.0 it 07_gas 1 116 0.0 0.0 it 08_non-res 1 116 0.0 0.0 it 09_hydro_pump 1 116 0.0 0.0 -it 01_solar 1 117 1.0 0.0 -it 02_wind_on 1 117 1.0 0.0 -it 03_wind_off 1 117 1.0 0.0 -it 04_res 1 117 1.0 0.0 -it 05_nuclear 1 117 1.0 0.0 -it 06_coal 1 117 1.0 0.0 +it 01_solar 1 117 0.0 1.0 +it 02_wind_on 1 117 0.0 1.0 +it 03_wind_off 1 117 0.0 1.0 +it 04_res 1 117 0.0 1.0 +it 05_nuclear 1 117 0.0 1.0 +it 06_coal 1 117 0.0 1.0 it 07_gas 1 117 0.0 0.0 it 08_non-res 1 117 0.0 0.0 it 09_hydro_pump 1 117 0.0 0.0 -it 01_solar 1 118 1.0 0.0 -it 02_wind_on 1 118 1.0 0.0 -it 03_wind_off 1 118 1.0 0.0 -it 04_res 1 118 1.0 0.0 -it 05_nuclear 1 118 1.0 0.0 -it 06_coal 1 118 1.0 0.0 +it 01_solar 1 118 0.0 1.0 +it 02_wind_on 1 118 0.0 1.0 +it 03_wind_off 1 118 0.0 1.0 +it 04_res 1 118 0.0 1.0 +it 05_nuclear 1 118 0.0 1.0 +it 06_coal 1 118 0.0 1.0 it 07_gas 1 118 0.0 0.0 it 08_non-res 1 118 0.0 0.0 it 09_hydro_pump 1 118 0.0 0.0 -it 01_solar 1 119 1.0 0.0 -it 02_wind_on 1 119 1.0 0.0 -it 03_wind_off 1 119 1.0 0.0 -it 04_res 1 119 1.0 0.0 -it 05_nuclear 1 119 1.0 0.0 -it 06_coal 1 119 1.0 0.0 +it 01_solar 1 119 0.0 1.0 +it 02_wind_on 1 119 0.0 1.0 +it 03_wind_off 1 119 0.0 1.0 +it 04_res 1 119 0.0 1.0 +it 05_nuclear 1 119 0.0 1.0 +it 06_coal 1 119 0.0 1.0 it 07_gas 1 119 0.0 0.0 it 08_non-res 1 119 0.0 0.0 it 09_hydro_pump 1 119 0.0 0.0 -it 01_solar 1 120 1.0 0.0 -it 02_wind_on 1 120 1.0 0.0 -it 03_wind_off 1 120 1.0 0.0 -it 04_res 1 120 1.0 0.0 -it 05_nuclear 1 120 1.0 0.0 -it 06_coal 1 120 1.0 0.0 +it 01_solar 1 120 0.0 1.0 +it 02_wind_on 1 120 0.0 1.0 +it 03_wind_off 1 120 0.0 1.0 +it 04_res 1 120 0.0 1.0 +it 05_nuclear 1 120 0.0 1.0 +it 06_coal 1 120 0.0 1.0 it 07_gas 1 120 0.0 0.0 it 08_non-res 1 120 0.0 0.0 it 09_hydro_pump 1 120 0.0 0.0 -it 01_solar 1 121 1.0 0.0 -it 02_wind_on 1 121 1.0 0.0 -it 03_wind_off 1 121 1.0 0.0 -it 04_res 1 121 1.0 0.0 -it 05_nuclear 1 121 1.0 0.0 -it 06_coal 1 121 1.0 0.0 +it 01_solar 1 121 0.0 1.0 +it 02_wind_on 1 121 0.0 1.0 +it 03_wind_off 1 121 0.0 1.0 +it 04_res 1 121 0.0 1.0 +it 05_nuclear 1 121 0.0 1.0 +it 06_coal 1 121 0.0 1.0 it 07_gas 1 121 0.0 0.0 it 08_non-res 1 121 0.0 0.0 it 09_hydro_pump 1 121 0.0 0.0 -it 01_solar 1 122 1.0 0.0 -it 02_wind_on 1 122 1.0 0.0 -it 03_wind_off 1 122 1.0 0.0 -it 04_res 1 122 1.0 0.0 -it 05_nuclear 1 122 1.0 0.0 -it 06_coal 1 122 1.0 0.0 -it 07_gas 1 122 1.0 0.0 +it 01_solar 1 122 0.0 1.0 +it 02_wind_on 1 122 0.0 1.0 +it 03_wind_off 1 122 0.0 1.0 +it 04_res 1 122 0.0 1.0 +it 05_nuclear 1 122 0.0 1.0 +it 06_coal 1 122 0.0 1.0 +it 07_gas 1 122 0.0 1.0 it 08_non-res 1 122 0.0 0.0 it 09_hydro_pump 1 122 0.0 0.0 -it 01_solar 1 123 1.0 0.0 -it 02_wind_on 1 123 1.0 0.0 -it 03_wind_off 1 123 1.0 0.0 -it 04_res 1 123 1.0 0.0 -it 05_nuclear 1 123 1.0 0.0 -it 06_coal 1 123 1.0 0.0 -it 07_gas 1 123 1.0 0.0 +it 01_solar 1 123 0.0 1.0 +it 02_wind_on 1 123 0.0 1.0 +it 03_wind_off 1 123 0.0 1.0 +it 04_res 1 123 0.0 1.0 +it 05_nuclear 1 123 0.0 1.0 +it 06_coal 1 123 0.0 1.0 +it 07_gas 1 123 0.0 1.0 it 08_non-res 1 123 0.0 0.0 it 09_hydro_pump 1 123 0.0 0.0 -it 01_solar 1 124 1.0 0.0 -it 02_wind_on 1 124 1.0 0.0 -it 03_wind_off 1 124 1.0 0.0 -it 04_res 1 124 1.0 0.0 -it 05_nuclear 1 124 1.0 0.0 -it 06_coal 1 124 1.0 0.0 -it 07_gas 1 124 1.0 0.0 +it 01_solar 1 124 0.0 1.0 +it 02_wind_on 1 124 0.0 1.0 +it 03_wind_off 1 124 0.0 1.0 +it 04_res 1 124 0.0 1.0 +it 05_nuclear 1 124 0.0 1.0 +it 06_coal 1 124 0.0 1.0 +it 07_gas 1 124 0.0 1.0 it 08_non-res 1 124 0.0 0.0 it 09_hydro_pump 1 124 0.0 0.0 -it 01_solar 1 125 1.0 0.0 -it 02_wind_on 1 125 1.0 0.0 -it 03_wind_off 1 125 1.0 0.0 -it 04_res 1 125 1.0 0.0 -it 05_nuclear 1 125 1.0 0.0 -it 06_coal 1 125 1.0 0.0 -it 07_gas 1 125 1.0 0.0 +it 01_solar 1 125 0.0 1.0 +it 02_wind_on 1 125 0.0 1.0 +it 03_wind_off 1 125 0.0 1.0 +it 04_res 1 125 0.0 1.0 +it 05_nuclear 1 125 0.0 1.0 +it 06_coal 1 125 0.0 1.0 +it 07_gas 1 125 0.0 1.0 it 08_non-res 1 125 0.0 0.0 it 09_hydro_pump 1 125 0.0 0.0 -it 01_solar 1 126 1.0 0.0 -it 02_wind_on 1 126 1.0 0.0 -it 03_wind_off 1 126 1.0 0.0 -it 04_res 1 126 1.0 0.0 -it 05_nuclear 1 126 1.0 0.0 -it 06_coal 1 126 1.0 0.0 -it 07_gas 1 126 1.0 0.0 +it 01_solar 1 126 0.0 1.0 +it 02_wind_on 1 126 0.0 1.0 +it 03_wind_off 1 126 0.0 1.0 +it 04_res 1 126 0.0 1.0 +it 05_nuclear 1 126 0.0 1.0 +it 06_coal 1 126 0.0 1.0 +it 07_gas 1 126 0.0 1.0 it 08_non-res 1 126 0.0 0.0 it 09_hydro_pump 1 126 0.0 0.0 -it 01_solar 1 127 1.0 0.0 -it 02_wind_on 1 127 1.0 0.0 -it 03_wind_off 1 127 1.0 0.0 -it 04_res 1 127 1.0 0.0 -it 05_nuclear 1 127 1.0 0.0 -it 06_coal 1 127 1.0 0.0 -it 07_gas 1 127 1.0 0.0 +it 01_solar 1 127 0.0 1.0 +it 02_wind_on 1 127 0.0 1.0 +it 03_wind_off 1 127 0.0 1.0 +it 04_res 1 127 0.0 1.0 +it 05_nuclear 1 127 0.0 1.0 +it 06_coal 1 127 0.0 1.0 +it 07_gas 1 127 0.0 1.0 it 08_non-res 1 127 0.0 0.0 it 09_hydro_pump 1 127 0.0 0.0 -it 01_solar 1 128 1.0 0.0 -it 02_wind_on 1 128 1.0 0.0 -it 03_wind_off 1 128 1.0 0.0 -it 04_res 1 128 1.0 0.0 -it 05_nuclear 1 128 1.0 0.0 -it 06_coal 1 128 1.0 0.0 -it 07_gas 1 128 1.0 0.0 +it 01_solar 1 128 0.0 1.0 +it 02_wind_on 1 128 0.0 1.0 +it 03_wind_off 1 128 0.0 1.0 +it 04_res 1 128 0.0 1.0 +it 05_nuclear 1 128 0.0 1.0 +it 06_coal 1 128 0.0 1.0 +it 07_gas 1 128 0.0 1.0 it 08_non-res 1 128 0.0 0.0 it 09_hydro_pump 1 128 0.0 0.0 -it 01_solar 1 129 1.0 0.0 -it 02_wind_on 1 129 1.0 0.0 -it 03_wind_off 1 129 1.0 0.0 -it 04_res 1 129 1.0 0.0 -it 05_nuclear 1 129 1.0 0.0 -it 06_coal 1 129 1.0 0.0 -it 07_gas 1 129 1.0 0.0 +it 01_solar 1 129 0.0 1.0 +it 02_wind_on 1 129 0.0 1.0 +it 03_wind_off 1 129 0.0 1.0 +it 04_res 1 129 0.0 1.0 +it 05_nuclear 1 129 0.0 1.0 +it 06_coal 1 129 0.0 1.0 +it 07_gas 1 129 0.0 1.0 it 08_non-res 1 129 0.0 0.0 it 09_hydro_pump 1 129 0.0 0.0 -it 01_solar 1 130 1.0 0.0 -it 02_wind_on 1 130 1.0 0.0 -it 03_wind_off 1 130 1.0 0.0 -it 04_res 1 130 1.0 0.0 -it 05_nuclear 1 130 1.0 0.0 -it 06_coal 1 130 1.0 0.0 -it 07_gas 1 130 1.0 0.0 +it 01_solar 1 130 0.0 1.0 +it 02_wind_on 1 130 0.0 1.0 +it 03_wind_off 1 130 0.0 1.0 +it 04_res 1 130 0.0 1.0 +it 05_nuclear 1 130 0.0 1.0 +it 06_coal 1 130 0.0 1.0 +it 07_gas 1 130 0.0 1.0 it 08_non-res 1 130 0.0 0.0 it 09_hydro_pump 1 130 0.0 0.0 -it 01_solar 1 131 1.0 0.0 -it 02_wind_on 1 131 1.0 0.0 -it 03_wind_off 1 131 1.0 0.0 -it 04_res 1 131 1.0 0.0 -it 05_nuclear 1 131 1.0 0.0 -it 06_coal 1 131 1.0 0.0 -it 07_gas 1 131 1.0 0.0 +it 01_solar 1 131 0.0 1.0 +it 02_wind_on 1 131 0.0 1.0 +it 03_wind_off 1 131 0.0 1.0 +it 04_res 1 131 0.0 1.0 +it 05_nuclear 1 131 0.0 1.0 +it 06_coal 1 131 0.0 1.0 +it 07_gas 1 131 0.0 1.0 it 08_non-res 1 131 0.0 0.0 it 09_hydro_pump 1 131 0.0 0.0 -it 01_solar 1 132 1.0 0.0 -it 02_wind_on 1 132 1.0 0.0 -it 03_wind_off 1 132 1.0 0.0 -it 04_res 1 132 1.0 0.0 -it 05_nuclear 1 132 1.0 0.0 -it 06_coal 1 132 1.0 0.0 -it 07_gas 1 132 1.0 0.0 +it 01_solar 1 132 0.0 1.0 +it 02_wind_on 1 132 0.0 1.0 +it 03_wind_off 1 132 0.0 1.0 +it 04_res 1 132 0.0 1.0 +it 05_nuclear 1 132 0.0 1.0 +it 06_coal 1 132 0.0 1.0 +it 07_gas 1 132 0.0 1.0 it 08_non-res 1 132 0.0 0.0 it 09_hydro_pump 1 132 0.0 0.0 -it 01_solar 1 133 1.0 0.0 -it 02_wind_on 1 133 1.0 0.0 -it 03_wind_off 1 133 1.0 0.0 -it 04_res 1 133 1.0 0.0 -it 05_nuclear 1 133 1.0 0.0 -it 06_coal 1 133 1.0 0.0 -it 07_gas 1 133 1.0 0.0 +it 01_solar 1 133 0.0 1.0 +it 02_wind_on 1 133 0.0 1.0 +it 03_wind_off 1 133 0.0 1.0 +it 04_res 1 133 0.0 1.0 +it 05_nuclear 1 133 0.0 1.0 +it 06_coal 1 133 0.0 1.0 +it 07_gas 1 133 0.0 1.0 it 08_non-res 1 133 0.0 0.0 it 09_hydro_pump 1 133 0.0 0.0 -it 01_solar 1 134 1.0 0.0 -it 02_wind_on 1 134 1.0 0.0 -it 03_wind_off 1 134 1.0 0.0 -it 04_res 1 134 1.0 0.0 -it 05_nuclear 1 134 1.0 0.0 -it 06_coal 1 134 1.0 0.0 -it 07_gas 1 134 1.0 0.0 +it 01_solar 1 134 0.0 1.0 +it 02_wind_on 1 134 0.0 1.0 +it 03_wind_off 1 134 0.0 1.0 +it 04_res 1 134 0.0 1.0 +it 05_nuclear 1 134 0.0 1.0 +it 06_coal 1 134 0.0 1.0 +it 07_gas 1 134 0.0 1.0 it 08_non-res 1 134 0.0 0.0 it 09_hydro_pump 1 134 0.0 0.0 -it 01_solar 1 135 1.0 0.0 -it 02_wind_on 1 135 1.0 0.0 -it 03_wind_off 1 135 1.0 0.0 -it 04_res 1 135 1.0 0.0 -it 05_nuclear 1 135 1.0 0.0 -it 06_coal 1 135 1.0 0.0 -it 07_gas 1 135 1.0 0.0 +it 01_solar 1 135 0.0 1.0 +it 02_wind_on 1 135 0.0 1.0 +it 03_wind_off 1 135 0.0 1.0 +it 04_res 1 135 0.0 1.0 +it 05_nuclear 1 135 0.0 1.0 +it 06_coal 1 135 0.0 1.0 +it 07_gas 1 135 0.0 1.0 it 08_non-res 1 135 0.0 0.0 it 09_hydro_pump 1 135 0.0 0.0 -it 01_solar 1 136 1.0 0.0 -it 02_wind_on 1 136 1.0 0.0 -it 03_wind_off 1 136 1.0 0.0 -it 04_res 1 136 1.0 0.0 -it 05_nuclear 1 136 1.0 0.0 -it 06_coal 1 136 1.0 0.0 -it 07_gas 1 136 1.0 0.0 +it 01_solar 1 136 0.0 1.0 +it 02_wind_on 1 136 0.0 1.0 +it 03_wind_off 1 136 0.0 1.0 +it 04_res 1 136 0.0 1.0 +it 05_nuclear 1 136 0.0 1.0 +it 06_coal 1 136 0.0 1.0 +it 07_gas 1 136 0.0 1.0 it 08_non-res 1 136 0.0 0.0 it 09_hydro_pump 1 136 0.0 0.0 -it 01_solar 1 137 1.0 0.0 -it 02_wind_on 1 137 1.0 0.0 -it 03_wind_off 1 137 1.0 0.0 -it 04_res 1 137 1.0 0.0 -it 05_nuclear 1 137 1.0 0.0 -it 06_coal 1 137 1.0 0.0 -it 07_gas 1 137 1.0 0.0 +it 01_solar 1 137 0.0 1.0 +it 02_wind_on 1 137 0.0 1.0 +it 03_wind_off 1 137 0.0 1.0 +it 04_res 1 137 0.0 1.0 +it 05_nuclear 1 137 0.0 1.0 +it 06_coal 1 137 0.0 1.0 +it 07_gas 1 137 0.0 1.0 it 08_non-res 1 137 0.0 0.0 it 09_hydro_pump 1 137 0.0 0.0 -it 01_solar 1 138 1.0 0.0 -it 02_wind_on 1 138 1.0 0.0 -it 03_wind_off 1 138 1.0 0.0 -it 04_res 1 138 1.0 0.0 -it 05_nuclear 1 138 1.0 0.0 -it 06_coal 1 138 1.0 0.0 -it 07_gas 1 138 1.0 0.0 +it 01_solar 1 138 0.0 1.0 +it 02_wind_on 1 138 0.0 1.0 +it 03_wind_off 1 138 0.0 1.0 +it 04_res 1 138 0.0 1.0 +it 05_nuclear 1 138 0.0 1.0 +it 06_coal 1 138 0.0 1.0 +it 07_gas 1 138 0.0 1.0 it 08_non-res 1 138 0.0 0.0 it 09_hydro_pump 1 138 0.0 0.0 -it 01_solar 1 139 1.0 0.0 -it 02_wind_on 1 139 1.0 0.0 -it 03_wind_off 1 139 1.0 0.0 -it 04_res 1 139 1.0 0.0 -it 05_nuclear 1 139 1.0 0.0 -it 06_coal 1 139 1.0 0.0 -it 07_gas 1 139 1.0 0.0 +it 01_solar 1 139 0.0 1.0 +it 02_wind_on 1 139 0.0 1.0 +it 03_wind_off 1 139 0.0 1.0 +it 04_res 1 139 0.0 1.0 +it 05_nuclear 1 139 0.0 1.0 +it 06_coal 1 139 0.0 1.0 +it 07_gas 1 139 0.0 1.0 it 08_non-res 1 139 0.0 0.0 it 09_hydro_pump 1 139 0.0 0.0 -it 01_solar 1 140 1.0 0.0 -it 02_wind_on 1 140 1.0 0.0 -it 03_wind_off 1 140 1.0 0.0 -it 04_res 1 140 1.0 0.0 -it 05_nuclear 1 140 1.0 0.0 -it 06_coal 1 140 1.0 0.0 -it 07_gas 1 140 1.0 0.0 +it 01_solar 1 140 0.0 1.0 +it 02_wind_on 1 140 0.0 1.0 +it 03_wind_off 1 140 0.0 1.0 +it 04_res 1 140 0.0 1.0 +it 05_nuclear 1 140 0.0 1.0 +it 06_coal 1 140 0.0 1.0 +it 07_gas 1 140 0.0 1.0 it 08_non-res 1 140 0.0 0.0 it 09_hydro_pump 1 140 0.0 0.0 -it 01_solar 1 141 1.0 0.0 -it 02_wind_on 1 141 1.0 0.0 -it 03_wind_off 1 141 1.0 0.0 -it 04_res 1 141 1.0 0.0 -it 05_nuclear 1 141 1.0 0.0 -it 06_coal 1 141 1.0 0.0 -it 07_gas 1 141 1.0 0.0 +it 01_solar 1 141 0.0 1.0 +it 02_wind_on 1 141 0.0 1.0 +it 03_wind_off 1 141 0.0 1.0 +it 04_res 1 141 0.0 1.0 +it 05_nuclear 1 141 0.0 1.0 +it 06_coal 1 141 0.0 1.0 +it 07_gas 1 141 0.0 1.0 it 08_non-res 1 141 0.0 0.0 it 09_hydro_pump 1 141 0.0 0.0 -it 01_solar 1 142 1.0 0.0 -it 02_wind_on 1 142 1.0 0.0 -it 03_wind_off 1 142 1.0 0.0 -it 04_res 1 142 1.0 0.0 -it 05_nuclear 1 142 1.0 0.0 -it 06_coal 1 142 1.0 0.0 -it 07_gas 1 142 1.0 0.0 -it 08_non-res 1 142 1.0 0.0 +it 01_solar 1 142 0.0 1.0 +it 02_wind_on 1 142 0.0 1.0 +it 03_wind_off 1 142 0.0 1.0 +it 04_res 1 142 0.0 1.0 +it 05_nuclear 1 142 0.0 1.0 +it 06_coal 1 142 0.0 1.0 +it 07_gas 1 142 0.0 1.0 +it 08_non-res 1 142 0.0 1.0 it 09_hydro_pump 1 142 0.0 0.0 -it 01_solar 1 143 1.0 0.0 -it 02_wind_on 1 143 1.0 0.0 -it 03_wind_off 1 143 1.0 0.0 -it 04_res 1 143 1.0 0.0 -it 05_nuclear 1 143 1.0 0.0 -it 06_coal 1 143 1.0 0.0 -it 07_gas 1 143 1.0 0.0 -it 08_non-res 1 143 1.0 0.0 +it 01_solar 1 143 0.0 1.0 +it 02_wind_on 1 143 0.0 1.0 +it 03_wind_off 1 143 0.0 1.0 +it 04_res 1 143 0.0 1.0 +it 05_nuclear 1 143 0.0 1.0 +it 06_coal 1 143 0.0 1.0 +it 07_gas 1 143 0.0 1.0 +it 08_non-res 1 143 0.0 1.0 it 09_hydro_pump 1 143 0.0 0.0 -it 01_solar 1 144 1.0 0.0 -it 02_wind_on 1 144 1.0 0.0 -it 03_wind_off 1 144 1.0 0.0 -it 04_res 1 144 1.0 0.0 -it 05_nuclear 1 144 1.0 0.0 -it 06_coal 1 144 1.0 0.0 -it 07_gas 1 144 1.0 0.0 -it 08_non-res 1 144 1.0 0.0 +it 01_solar 1 144 0.0 1.0 +it 02_wind_on 1 144 0.0 1.0 +it 03_wind_off 1 144 0.0 1.0 +it 04_res 1 144 0.0 1.0 +it 05_nuclear 1 144 0.0 1.0 +it 06_coal 1 144 0.0 1.0 +it 07_gas 1 144 0.0 1.0 +it 08_non-res 1 144 0.0 1.0 it 09_hydro_pump 1 144 0.0 0.0 -it 01_solar 1 145 1.0 0.0 -it 02_wind_on 1 145 1.0 0.0 -it 03_wind_off 1 145 1.0 0.0 -it 04_res 1 145 1.0 0.0 -it 05_nuclear 1 145 1.0 0.0 -it 06_coal 1 145 1.0 0.0 -it 07_gas 1 145 1.0 0.0 -it 08_non-res 1 145 1.0 0.0 +it 01_solar 1 145 0.0 1.0 +it 02_wind_on 1 145 0.0 1.0 +it 03_wind_off 1 145 0.0 1.0 +it 04_res 1 145 0.0 1.0 +it 05_nuclear 1 145 0.0 1.0 +it 06_coal 1 145 0.0 1.0 +it 07_gas 1 145 0.0 1.0 +it 08_non-res 1 145 0.0 1.0 it 09_hydro_pump 1 145 0.0 0.0 -it 01_solar 1 146 1.0 0.0 -it 02_wind_on 1 146 1.0 0.0 -it 03_wind_off 1 146 1.0 0.0 -it 04_res 1 146 1.0 0.0 -it 05_nuclear 1 146 1.0 0.0 -it 06_coal 1 146 1.0 0.0 -it 07_gas 1 146 1.0 0.0 -it 08_non-res 1 146 1.0 0.0 +it 01_solar 1 146 0.0 1.0 +it 02_wind_on 1 146 0.0 1.0 +it 03_wind_off 1 146 0.0 1.0 +it 04_res 1 146 0.0 1.0 +it 05_nuclear 1 146 0.0 1.0 +it 06_coal 1 146 0.0 1.0 +it 07_gas 1 146 0.0 1.0 +it 08_non-res 1 146 0.0 1.0 it 09_hydro_pump 1 146 0.0 0.0 -it 01_solar 1 147 1.0 0.0 -it 02_wind_on 1 147 1.0 0.0 -it 03_wind_off 1 147 1.0 0.0 -it 04_res 1 147 1.0 0.0 -it 05_nuclear 1 147 1.0 0.0 -it 06_coal 1 147 1.0 0.0 -it 07_gas 1 147 1.0 0.0 -it 08_non-res 1 147 1.0 0.0 +it 01_solar 1 147 0.0 1.0 +it 02_wind_on 1 147 0.0 1.0 +it 03_wind_off 1 147 0.0 1.0 +it 04_res 1 147 0.0 1.0 +it 05_nuclear 1 147 0.0 1.0 +it 06_coal 1 147 0.0 1.0 +it 07_gas 1 147 0.0 1.0 +it 08_non-res 1 147 0.0 1.0 it 09_hydro_pump 1 147 0.0 0.0 -it 01_solar 1 148 1.0 0.0 -it 02_wind_on 1 148 1.0 0.0 -it 03_wind_off 1 148 1.0 0.0 -it 04_res 1 148 1.0 0.0 -it 05_nuclear 1 148 1.0 0.0 -it 06_coal 1 148 1.0 0.0 -it 07_gas 1 148 1.0 0.0 -it 08_non-res 1 148 1.0 0.0 +it 01_solar 1 148 0.0 1.0 +it 02_wind_on 1 148 0.0 1.0 +it 03_wind_off 1 148 0.0 1.0 +it 04_res 1 148 0.0 1.0 +it 05_nuclear 1 148 0.0 1.0 +it 06_coal 1 148 0.0 1.0 +it 07_gas 1 148 0.0 1.0 +it 08_non-res 1 148 0.0 1.0 it 09_hydro_pump 1 148 0.0 0.0 -it 01_solar 1 149 1.0 0.0 -it 02_wind_on 1 149 1.0 0.0 -it 03_wind_off 1 149 1.0 0.0 -it 04_res 1 149 1.0 0.0 -it 05_nuclear 1 149 1.0 0.0 -it 06_coal 1 149 1.0 0.0 -it 07_gas 1 149 1.0 0.0 -it 08_non-res 1 149 1.0 0.0 +it 01_solar 1 149 0.0 1.0 +it 02_wind_on 1 149 0.0 1.0 +it 03_wind_off 1 149 0.0 1.0 +it 04_res 1 149 0.0 1.0 +it 05_nuclear 1 149 0.0 1.0 +it 06_coal 1 149 0.0 1.0 +it 07_gas 1 149 0.0 1.0 +it 08_non-res 1 149 0.0 1.0 it 09_hydro_pump 1 149 0.0 0.0 -it 01_solar 1 150 1.0 0.0 -it 02_wind_on 1 150 1.0 0.0 -it 03_wind_off 1 150 1.0 0.0 -it 04_res 1 150 1.0 0.0 -it 05_nuclear 1 150 1.0 0.0 -it 06_coal 1 150 1.0 0.0 -it 07_gas 1 150 1.0 0.0 -it 08_non-res 1 150 1.0 0.0 +it 01_solar 1 150 0.0 1.0 +it 02_wind_on 1 150 0.0 1.0 +it 03_wind_off 1 150 0.0 1.0 +it 04_res 1 150 0.0 1.0 +it 05_nuclear 1 150 0.0 1.0 +it 06_coal 1 150 0.0 1.0 +it 07_gas 1 150 0.0 1.0 +it 08_non-res 1 150 0.0 1.0 it 09_hydro_pump 1 150 0.0 0.0 -it 01_solar 1 151 1.0 0.0 -it 02_wind_on 1 151 1.0 0.0 -it 03_wind_off 1 151 1.0 0.0 -it 04_res 1 151 1.0 0.0 -it 05_nuclear 1 151 1.0 0.0 -it 06_coal 1 151 1.0 0.0 -it 07_gas 1 151 1.0 0.0 -it 08_non-res 1 151 1.0 0.0 +it 01_solar 1 151 0.0 1.0 +it 02_wind_on 1 151 0.0 1.0 +it 03_wind_off 1 151 0.0 1.0 +it 04_res 1 151 0.0 1.0 +it 05_nuclear 1 151 0.0 1.0 +it 06_coal 1 151 0.0 1.0 +it 07_gas 1 151 0.0 1.0 +it 08_non-res 1 151 0.0 1.0 it 09_hydro_pump 1 151 0.0 0.0 -it 01_solar 1 152 1.0 0.0 -it 02_wind_on 1 152 1.0 0.0 -it 03_wind_off 1 152 1.0 0.0 -it 04_res 1 152 1.0 0.0 -it 05_nuclear 1 152 1.0 0.0 -it 06_coal 1 152 1.0 0.0 -it 07_gas 1 152 1.0 0.0 -it 08_non-res 1 152 1.0 0.0 +it 01_solar 1 152 0.0 1.0 +it 02_wind_on 1 152 0.0 1.0 +it 03_wind_off 1 152 0.0 1.0 +it 04_res 1 152 0.0 1.0 +it 05_nuclear 1 152 0.0 1.0 +it 06_coal 1 152 0.0 1.0 +it 07_gas 1 152 0.0 1.0 +it 08_non-res 1 152 0.0 1.0 it 09_hydro_pump 1 152 0.0 0.0 -it 01_solar 1 153 1.0 0.0 -it 02_wind_on 1 153 1.0 0.0 -it 03_wind_off 1 153 1.0 0.0 -it 04_res 1 153 1.0 0.0 -it 05_nuclear 1 153 1.0 0.0 -it 06_coal 1 153 1.0 0.0 -it 07_gas 1 153 1.0 0.0 -it 08_non-res 1 153 1.0 0.0 +it 01_solar 1 153 0.0 1.0 +it 02_wind_on 1 153 0.0 1.0 +it 03_wind_off 1 153 0.0 1.0 +it 04_res 1 153 0.0 1.0 +it 05_nuclear 1 153 0.0 1.0 +it 06_coal 1 153 0.0 1.0 +it 07_gas 1 153 0.0 1.0 +it 08_non-res 1 153 0.0 1.0 it 09_hydro_pump 1 153 0.0 0.0 -it 01_solar 1 154 1.0 0.0 -it 02_wind_on 1 154 1.0 0.0 -it 03_wind_off 1 154 1.0 0.0 -it 04_res 1 154 1.0 0.0 -it 05_nuclear 1 154 1.0 0.0 -it 06_coal 1 154 1.0 0.0 -it 07_gas 1 154 1.0 0.0 -it 08_non-res 1 154 1.0 0.0 +it 01_solar 1 154 0.0 1.0 +it 02_wind_on 1 154 0.0 1.0 +it 03_wind_off 1 154 0.0 1.0 +it 04_res 1 154 0.0 1.0 +it 05_nuclear 1 154 0.0 1.0 +it 06_coal 1 154 0.0 1.0 +it 07_gas 1 154 0.0 1.0 +it 08_non-res 1 154 0.0 1.0 it 09_hydro_pump 1 154 0.0 0.0 -it 01_solar 1 155 1.0 0.0 -it 02_wind_on 1 155 1.0 0.0 -it 03_wind_off 1 155 1.0 0.0 -it 04_res 1 155 1.0 0.0 -it 05_nuclear 1 155 1.0 0.0 -it 06_coal 1 155 1.0 0.0 -it 07_gas 1 155 1.0 0.0 -it 08_non-res 1 155 1.0 0.0 +it 01_solar 1 155 0.0 1.0 +it 02_wind_on 1 155 0.0 1.0 +it 03_wind_off 1 155 0.0 1.0 +it 04_res 1 155 0.0 1.0 +it 05_nuclear 1 155 0.0 1.0 +it 06_coal 1 155 0.0 1.0 +it 07_gas 1 155 0.0 1.0 +it 08_non-res 1 155 0.0 1.0 it 09_hydro_pump 1 155 0.0 0.0 -it 01_solar 1 156 1.0 0.0 -it 02_wind_on 1 156 1.0 0.0 -it 03_wind_off 1 156 1.0 0.0 -it 04_res 1 156 1.0 0.0 -it 05_nuclear 1 156 1.0 0.0 -it 06_coal 1 156 1.0 0.0 -it 07_gas 1 156 1.0 0.0 -it 08_non-res 1 156 1.0 0.0 +it 01_solar 1 156 0.0 1.0 +it 02_wind_on 1 156 0.0 1.0 +it 03_wind_off 1 156 0.0 1.0 +it 04_res 1 156 0.0 1.0 +it 05_nuclear 1 156 0.0 1.0 +it 06_coal 1 156 0.0 1.0 +it 07_gas 1 156 0.0 1.0 +it 08_non-res 1 156 0.0 1.0 it 09_hydro_pump 1 156 0.0 0.0 -it 01_solar 1 157 1.0 0.0 -it 02_wind_on 1 157 1.0 0.0 -it 03_wind_off 1 157 1.0 0.0 -it 04_res 1 157 1.0 0.0 -it 05_nuclear 1 157 1.0 0.0 -it 06_coal 1 157 1.0 0.0 -it 07_gas 1 157 1.0 0.0 -it 08_non-res 1 157 1.0 0.0 +it 01_solar 1 157 0.0 1.0 +it 02_wind_on 1 157 0.0 1.0 +it 03_wind_off 1 157 0.0 1.0 +it 04_res 1 157 0.0 1.0 +it 05_nuclear 1 157 0.0 1.0 +it 06_coal 1 157 0.0 1.0 +it 07_gas 1 157 0.0 1.0 +it 08_non-res 1 157 0.0 1.0 it 09_hydro_pump 1 157 0.0 0.0 -it 01_solar 1 158 1.0 0.0 -it 02_wind_on 1 158 1.0 0.0 -it 03_wind_off 1 158 1.0 0.0 -it 04_res 1 158 1.0 0.0 -it 05_nuclear 1 158 1.0 0.0 -it 06_coal 1 158 1.0 0.0 -it 07_gas 1 158 1.0 0.0 -it 08_non-res 1 158 1.0 0.0 +it 01_solar 1 158 0.0 1.0 +it 02_wind_on 1 158 0.0 1.0 +it 03_wind_off 1 158 0.0 1.0 +it 04_res 1 158 0.0 1.0 +it 05_nuclear 1 158 0.0 1.0 +it 06_coal 1 158 0.0 1.0 +it 07_gas 1 158 0.0 1.0 +it 08_non-res 1 158 0.0 1.0 it 09_hydro_pump 1 158 0.0 0.0 -it 01_solar 1 159 1.0 0.0 -it 02_wind_on 1 159 1.0 0.0 -it 03_wind_off 1 159 1.0 0.0 -it 04_res 1 159 1.0 0.0 -it 05_nuclear 1 159 1.0 0.0 -it 06_coal 1 159 1.0 0.0 -it 07_gas 1 159 1.0 0.0 -it 08_non-res 1 159 1.0 0.0 +it 01_solar 1 159 0.0 1.0 +it 02_wind_on 1 159 0.0 1.0 +it 03_wind_off 1 159 0.0 1.0 +it 04_res 1 159 0.0 1.0 +it 05_nuclear 1 159 0.0 1.0 +it 06_coal 1 159 0.0 1.0 +it 07_gas 1 159 0.0 1.0 +it 08_non-res 1 159 0.0 1.0 it 09_hydro_pump 1 159 0.0 0.0 -it 01_solar 1 160 1.0 0.0 -it 02_wind_on 1 160 1.0 0.0 -it 03_wind_off 1 160 1.0 0.0 -it 04_res 1 160 1.0 0.0 -it 05_nuclear 1 160 1.0 0.0 -it 06_coal 1 160 1.0 0.0 -it 07_gas 1 160 1.0 0.0 -it 08_non-res 1 160 1.0 0.0 +it 01_solar 1 160 0.0 1.0 +it 02_wind_on 1 160 0.0 1.0 +it 03_wind_off 1 160 0.0 1.0 +it 04_res 1 160 0.0 1.0 +it 05_nuclear 1 160 0.0 1.0 +it 06_coal 1 160 0.0 1.0 +it 07_gas 1 160 0.0 1.0 +it 08_non-res 1 160 0.0 1.0 it 09_hydro_pump 1 160 0.0 0.0 -it 01_solar 1 161 1.0 0.0 -it 02_wind_on 1 161 1.0 0.0 -it 03_wind_off 1 161 1.0 0.0 -it 04_res 1 161 1.0 0.0 -it 05_nuclear 1 161 1.0 0.0 -it 06_coal 1 161 1.0 0.0 -it 07_gas 1 161 1.0 0.0 -it 08_non-res 1 161 1.0 0.0 +it 01_solar 1 161 0.0 1.0 +it 02_wind_on 1 161 0.0 1.0 +it 03_wind_off 1 161 0.0 1.0 +it 04_res 1 161 0.0 1.0 +it 05_nuclear 1 161 0.0 1.0 +it 06_coal 1 161 0.0 1.0 +it 07_gas 1 161 0.0 1.0 +it 08_non-res 1 161 0.0 1.0 it 09_hydro_pump 1 161 0.0 0.0 -it 01_solar 1 162 1.0 0.0 -it 02_wind_on 1 162 1.0 0.0 -it 03_wind_off 1 162 1.0 0.0 -it 04_res 1 162 1.0 0.0 -it 05_nuclear 1 162 1.0 0.0 -it 06_coal 1 162 1.0 0.0 -it 07_gas 1 162 1.0 0.0 -it 08_non-res 1 162 1.0 0.0 -it 09_hydro_pump 1 162 1.0 0.0 -it 01_solar 1 163 1.0 0.0 -it 02_wind_on 1 163 1.0 0.0 -it 03_wind_off 1 163 1.0 0.0 -it 04_res 1 163 1.0 0.0 -it 05_nuclear 1 163 1.0 0.0 -it 06_coal 1 163 1.0 0.0 -it 07_gas 1 163 1.0 0.0 -it 08_non-res 1 163 1.0 0.0 -it 09_hydro_pump 1 163 1.0 0.0 -it 01_solar 1 164 1.0 0.0 -it 02_wind_on 1 164 1.0 0.0 -it 03_wind_off 1 164 1.0 0.0 -it 04_res 1 164 1.0 0.0 -it 05_nuclear 1 164 1.0 0.0 -it 06_coal 1 164 1.0 0.0 -it 07_gas 1 164 1.0 0.0 -it 08_non-res 1 164 1.0 0.0 -it 09_hydro_pump 1 164 1.0 0.0 -it 01_solar 1 165 1.0 0.0 -it 02_wind_on 1 165 1.0 0.0 -it 03_wind_off 1 165 1.0 0.0 -it 04_res 1 165 1.0 0.0 -it 05_nuclear 1 165 1.0 0.0 -it 06_coal 1 165 1.0 0.0 -it 07_gas 1 165 1.0 0.0 -it 08_non-res 1 165 1.0 0.0 -it 09_hydro_pump 1 165 1.0 0.0 -it 01_solar 1 166 1.0 0.0 -it 02_wind_on 1 166 1.0 0.0 -it 03_wind_off 1 166 1.0 0.0 -it 04_res 1 166 1.0 0.0 -it 05_nuclear 1 166 1.0 0.0 -it 06_coal 1 166 1.0 0.0 -it 07_gas 1 166 1.0 0.0 -it 08_non-res 1 166 1.0 0.0 -it 09_hydro_pump 1 166 1.0 0.0 -it 01_solar 1 167 1.0 0.0 -it 02_wind_on 1 167 1.0 0.0 -it 03_wind_off 1 167 1.0 0.0 -it 04_res 1 167 1.0 0.0 -it 05_nuclear 1 167 1.0 0.0 -it 06_coal 1 167 1.0 0.0 -it 07_gas 1 167 1.0 0.0 -it 08_non-res 1 167 1.0 0.0 -it 09_hydro_pump 1 167 1.0 0.0 -it 01_solar 1 168 1.0 0.0 -it 02_wind_on 1 168 1.0 0.0 -it 03_wind_off 1 168 1.0 0.0 -it 04_res 1 168 1.0 0.0 -it 05_nuclear 1 168 1.0 0.0 -it 06_coal 1 168 1.0 0.0 -it 07_gas 1 168 1.0 0.0 -it 08_non-res 1 168 1.0 0.0 -it 09_hydro_pump 1 168 1.0 0.0 +it 01_solar 1 162 0.0 1.0 +it 02_wind_on 1 162 0.0 1.0 +it 03_wind_off 1 162 0.0 1.0 +it 04_res 1 162 0.0 1.0 +it 05_nuclear 1 162 0.0 1.0 +it 06_coal 1 162 0.0 1.0 +it 07_gas 1 162 0.0 1.0 +it 08_non-res 1 162 0.0 1.0 +it 09_hydro_pump 1 162 0.0 1.0 +it 01_solar 1 163 0.0 1.0 +it 02_wind_on 1 163 0.0 1.0 +it 03_wind_off 1 163 0.0 1.0 +it 04_res 1 163 0.0 1.0 +it 05_nuclear 1 163 0.0 1.0 +it 06_coal 1 163 0.0 1.0 +it 07_gas 1 163 0.0 1.0 +it 08_non-res 1 163 0.0 1.0 +it 09_hydro_pump 1 163 0.0 1.0 +it 01_solar 1 164 0.0 1.0 +it 02_wind_on 1 164 0.0 1.0 +it 03_wind_off 1 164 0.0 1.0 +it 04_res 1 164 0.0 1.0 +it 05_nuclear 1 164 0.0 1.0 +it 06_coal 1 164 0.0 1.0 +it 07_gas 1 164 0.0 1.0 +it 08_non-res 1 164 0.0 1.0 +it 09_hydro_pump 1 164 0.0 1.0 +it 01_solar 1 165 0.0 1.0 +it 02_wind_on 1 165 0.0 1.0 +it 03_wind_off 1 165 0.0 1.0 +it 04_res 1 165 0.0 1.0 +it 05_nuclear 1 165 0.0 1.0 +it 06_coal 1 165 0.0 1.0 +it 07_gas 1 165 0.0 1.0 +it 08_non-res 1 165 0.0 1.0 +it 09_hydro_pump 1 165 0.0 1.0 +it 01_solar 1 166 0.0 1.0 +it 02_wind_on 1 166 0.0 1.0 +it 03_wind_off 1 166 0.0 1.0 +it 04_res 1 166 0.0 1.0 +it 05_nuclear 1 166 0.0 1.0 +it 06_coal 1 166 0.0 1.0 +it 07_gas 1 166 0.0 1.0 +it 08_non-res 1 166 0.0 1.0 +it 09_hydro_pump 1 166 0.0 1.0 +it 01_solar 1 167 0.0 1.0 +it 02_wind_on 1 167 0.0 1.0 +it 03_wind_off 1 167 0.0 1.0 +it 04_res 1 167 0.0 1.0 +it 05_nuclear 1 167 0.0 1.0 +it 06_coal 1 167 0.0 1.0 +it 07_gas 1 167 0.0 1.0 +it 08_non-res 1 167 0.0 1.0 +it 09_hydro_pump 1 167 0.0 1.0 +it 01_solar 1 168 0.0 1.0 +it 02_wind_on 1 168 0.0 1.0 +it 03_wind_off 1 168 0.0 1.0 +it 04_res 1 168 0.0 1.0 +it 05_nuclear 1 168 0.0 1.0 +it 06_coal 1 168 0.0 1.0 +it 07_gas 1 168 0.0 1.0 +it 08_non-res 1 168 0.0 1.0 +it 09_hydro_pump 1 168 0.0 1.0 it 01_solar 1 169 0.0 0.0 it 02_wind_on 1 169 0.0 0.0 it 03_wind_off 1 169 0.0 0.0 @@ -10592,7 +10592,7 @@ it 06_coal 1 169 0.0 0.0 it 07_gas 1 169 0.0 0.0 it 08_non-res 1 169 0.0 0.0 it 09_hydro_pump 1 169 0.0 0.0 -it 01_solar 1 170 1.0 0.0 +it 01_solar 1 170 0.0 1.0 it 02_wind_on 1 170 0.0 0.0 it 03_wind_off 1 170 0.0 0.0 it 04_res 1 170 0.0 0.0 @@ -10601,7 +10601,7 @@ it 06_coal 1 170 0.0 0.0 it 07_gas 1 170 0.0 0.0 it 08_non-res 1 170 0.0 0.0 it 09_hydro_pump 1 170 0.0 0.0 -it 01_solar 1 171 1.0 0.0 +it 01_solar 1 171 0.0 1.0 it 02_wind_on 1 171 0.0 0.0 it 03_wind_off 1 171 0.0 0.0 it 04_res 1 171 0.0 0.0 @@ -10610,7 +10610,7 @@ it 06_coal 1 171 0.0 0.0 it 07_gas 1 171 0.0 0.0 it 08_non-res 1 171 0.0 0.0 it 09_hydro_pump 1 171 0.0 0.0 -it 01_solar 1 172 1.0 0.0 +it 01_solar 1 172 0.0 1.0 it 02_wind_on 1 172 0.0 0.0 it 03_wind_off 1 172 0.0 0.0 it 04_res 1 172 0.0 0.0 @@ -10619,7 +10619,7 @@ it 06_coal 1 172 0.0 0.0 it 07_gas 1 172 0.0 0.0 it 08_non-res 1 172 0.0 0.0 it 09_hydro_pump 1 172 0.0 0.0 -it 01_solar 1 173 1.0 0.0 +it 01_solar 1 173 0.0 1.0 it 02_wind_on 1 173 0.0 0.0 it 03_wind_off 1 173 0.0 0.0 it 04_res 1 173 0.0 0.0 @@ -10628,7 +10628,7 @@ it 06_coal 1 173 0.0 0.0 it 07_gas 1 173 0.0 0.0 it 08_non-res 1 173 0.0 0.0 it 09_hydro_pump 1 173 0.0 0.0 -it 01_solar 1 174 1.0 0.0 +it 01_solar 1 174 0.0 1.0 it 02_wind_on 1 174 0.0 0.0 it 03_wind_off 1 174 0.0 0.0 it 04_res 1 174 0.0 0.0 @@ -10637,7 +10637,7 @@ it 06_coal 1 174 0.0 0.0 it 07_gas 1 174 0.0 0.0 it 08_non-res 1 174 0.0 0.0 it 09_hydro_pump 1 174 0.0 0.0 -it 01_solar 1 175 1.0 0.0 +it 01_solar 1 175 0.0 1.0 it 02_wind_on 1 175 0.0 0.0 it 03_wind_off 1 175 0.0 0.0 it 04_res 1 175 0.0 0.0 @@ -10646,7 +10646,7 @@ it 06_coal 1 175 0.0 0.0 it 07_gas 1 175 0.0 0.0 it 08_non-res 1 175 0.0 0.0 it 09_hydro_pump 1 175 0.0 0.0 -it 01_solar 1 176 1.0 0.0 +it 01_solar 1 176 0.0 1.0 it 02_wind_on 1 176 0.0 0.0 it 03_wind_off 1 176 0.0 0.0 it 04_res 1 176 0.0 0.0 @@ -10655,7 +10655,7 @@ it 06_coal 1 176 0.0 0.0 it 07_gas 1 176 0.0 0.0 it 08_non-res 1 176 0.0 0.0 it 09_hydro_pump 1 176 0.0 0.0 -it 01_solar 1 177 1.0 0.0 +it 01_solar 1 177 0.0 1.0 it 02_wind_on 1 177 0.0 0.0 it 03_wind_off 1 177 0.0 0.0 it 04_res 1 177 0.0 0.0 @@ -10664,7 +10664,7 @@ it 06_coal 1 177 0.0 0.0 it 07_gas 1 177 0.0 0.0 it 08_non-res 1 177 0.0 0.0 it 09_hydro_pump 1 177 0.0 0.0 -it 01_solar 1 178 1.0 0.0 +it 01_solar 1 178 0.0 1.0 it 02_wind_on 1 178 0.0 0.0 it 03_wind_off 1 178 0.0 0.0 it 04_res 1 178 0.0 0.0 @@ -10673,7 +10673,7 @@ it 06_coal 1 178 0.0 0.0 it 07_gas 1 178 0.0 0.0 it 08_non-res 1 178 0.0 0.0 it 09_hydro_pump 1 178 0.0 0.0 -it 01_solar 1 179 1.0 0.0 +it 01_solar 1 179 0.0 1.0 it 02_wind_on 1 179 0.0 0.0 it 03_wind_off 1 179 0.0 0.0 it 04_res 1 179 0.0 0.0 @@ -10682,7 +10682,7 @@ it 06_coal 1 179 0.0 0.0 it 07_gas 1 179 0.0 0.0 it 08_non-res 1 179 0.0 0.0 it 09_hydro_pump 1 179 0.0 0.0 -it 01_solar 1 180 1.0 0.0 +it 01_solar 1 180 0.0 1.0 it 02_wind_on 1 180 0.0 0.0 it 03_wind_off 1 180 0.0 0.0 it 04_res 1 180 0.0 0.0 @@ -10691,7 +10691,7 @@ it 06_coal 1 180 0.0 0.0 it 07_gas 1 180 0.0 0.0 it 08_non-res 1 180 0.0 0.0 it 09_hydro_pump 1 180 0.0 0.0 -it 01_solar 1 181 1.0 0.0 +it 01_solar 1 181 0.0 1.0 it 02_wind_on 1 181 0.0 0.0 it 03_wind_off 1 181 0.0 0.0 it 04_res 1 181 0.0 0.0 @@ -10700,7 +10700,7 @@ it 06_coal 1 181 0.0 0.0 it 07_gas 1 181 0.0 0.0 it 08_non-res 1 181 0.0 0.0 it 09_hydro_pump 1 181 0.0 0.0 -it 01_solar 1 182 1.0 0.0 +it 01_solar 1 182 0.0 1.0 it 02_wind_on 1 182 0.0 0.0 it 03_wind_off 1 182 0.0 0.0 it 04_res 1 182 0.0 0.0 @@ -10709,7 +10709,7 @@ it 06_coal 1 182 0.0 0.0 it 07_gas 1 182 0.0 0.0 it 08_non-res 1 182 0.0 0.0 it 09_hydro_pump 1 182 0.0 0.0 -it 01_solar 1 183 1.0 0.0 +it 01_solar 1 183 0.0 1.0 it 02_wind_on 1 183 0.0 0.0 it 03_wind_off 1 183 0.0 0.0 it 04_res 1 183 0.0 0.0 @@ -10718,7 +10718,7 @@ it 06_coal 1 183 0.0 0.0 it 07_gas 1 183 0.0 0.0 it 08_non-res 1 183 0.0 0.0 it 09_hydro_pump 1 183 0.0 0.0 -it 01_solar 1 184 1.0 0.0 +it 01_solar 1 184 0.0 1.0 it 02_wind_on 1 184 0.0 0.0 it 03_wind_off 1 184 0.0 0.0 it 04_res 1 184 0.0 0.0 @@ -10727,7 +10727,7 @@ it 06_coal 1 184 0.0 0.0 it 07_gas 1 184 0.0 0.0 it 08_non-res 1 184 0.0 0.0 it 09_hydro_pump 1 184 0.0 0.0 -it 01_solar 1 185 1.0 0.0 +it 01_solar 1 185 0.0 1.0 it 02_wind_on 1 185 0.0 0.0 it 03_wind_off 1 185 0.0 0.0 it 04_res 1 185 0.0 0.0 @@ -10736,7 +10736,7 @@ it 06_coal 1 185 0.0 0.0 it 07_gas 1 185 0.0 0.0 it 08_non-res 1 185 0.0 0.0 it 09_hydro_pump 1 185 0.0 0.0 -it 01_solar 1 186 1.0 0.0 +it 01_solar 1 186 0.0 1.0 it 02_wind_on 1 186 0.0 0.0 it 03_wind_off 1 186 0.0 0.0 it 04_res 1 186 0.0 0.0 @@ -10745,7 +10745,7 @@ it 06_coal 1 186 0.0 0.0 it 07_gas 1 186 0.0 0.0 it 08_non-res 1 186 0.0 0.0 it 09_hydro_pump 1 186 0.0 0.0 -it 01_solar 1 187 1.0 0.0 +it 01_solar 1 187 0.0 1.0 it 02_wind_on 1 187 0.0 0.0 it 03_wind_off 1 187 0.0 0.0 it 04_res 1 187 0.0 0.0 @@ -10754,7 +10754,7 @@ it 06_coal 1 187 0.0 0.0 it 07_gas 1 187 0.0 0.0 it 08_non-res 1 187 0.0 0.0 it 09_hydro_pump 1 187 0.0 0.0 -it 01_solar 1 188 1.0 0.0 +it 01_solar 1 188 0.0 1.0 it 02_wind_on 1 188 0.0 0.0 it 03_wind_off 1 188 0.0 0.0 it 04_res 1 188 0.0 0.0 @@ -10763,7 +10763,7 @@ it 06_coal 1 188 0.0 0.0 it 07_gas 1 188 0.0 0.0 it 08_non-res 1 188 0.0 0.0 it 09_hydro_pump 1 188 0.0 0.0 -it 01_solar 1 189 1.0 0.0 +it 01_solar 1 189 0.0 1.0 it 02_wind_on 1 189 0.0 0.0 it 03_wind_off 1 189 0.0 0.0 it 04_res 1 189 0.0 0.0 @@ -10772,8 +10772,8 @@ it 06_coal 1 189 0.0 0.0 it 07_gas 1 189 0.0 0.0 it 08_non-res 1 189 0.0 0.0 it 09_hydro_pump 1 189 0.0 0.0 -it 01_solar 1 190 1.0 0.0 -it 02_wind_on 1 190 1.0 0.0 +it 01_solar 1 190 0.0 1.0 +it 02_wind_on 1 190 0.0 1.0 it 03_wind_off 1 190 0.0 0.0 it 04_res 1 190 0.0 0.0 it 05_nuclear 1 190 0.0 0.0 @@ -10781,8 +10781,8 @@ it 06_coal 1 190 0.0 0.0 it 07_gas 1 190 0.0 0.0 it 08_non-res 1 190 0.0 0.0 it 09_hydro_pump 1 190 0.0 0.0 -it 01_solar 1 191 1.0 0.0 -it 02_wind_on 1 191 1.0 0.0 +it 01_solar 1 191 0.0 1.0 +it 02_wind_on 1 191 0.0 1.0 it 03_wind_off 1 191 0.0 0.0 it 04_res 1 191 0.0 0.0 it 05_nuclear 1 191 0.0 0.0 @@ -10790,8 +10790,8 @@ it 06_coal 1 191 0.0 0.0 it 07_gas 1 191 0.0 0.0 it 08_non-res 1 191 0.0 0.0 it 09_hydro_pump 1 191 0.0 0.0 -it 01_solar 1 192 1.0 0.0 -it 02_wind_on 1 192 1.0 0.0 +it 01_solar 1 192 0.0 1.0 +it 02_wind_on 1 192 0.0 1.0 it 03_wind_off 1 192 0.0 0.0 it 04_res 1 192 0.0 0.0 it 05_nuclear 1 192 0.0 0.0 @@ -10799,8 +10799,8 @@ it 06_coal 1 192 0.0 0.0 it 07_gas 1 192 0.0 0.0 it 08_non-res 1 192 0.0 0.0 it 09_hydro_pump 1 192 0.0 0.0 -it 01_solar 1 193 1.0 0.0 -it 02_wind_on 1 193 1.0 0.0 +it 01_solar 1 193 0.0 1.0 +it 02_wind_on 1 193 0.0 1.0 it 03_wind_off 1 193 0.0 0.0 it 04_res 1 193 0.0 0.0 it 05_nuclear 1 193 0.0 0.0 @@ -10808,8 +10808,8 @@ it 06_coal 1 193 0.0 0.0 it 07_gas 1 193 0.0 0.0 it 08_non-res 1 193 0.0 0.0 it 09_hydro_pump 1 193 0.0 0.0 -it 01_solar 1 194 1.0 0.0 -it 02_wind_on 1 194 1.0 0.0 +it 01_solar 1 194 0.0 1.0 +it 02_wind_on 1 194 0.0 1.0 it 03_wind_off 1 194 0.0 0.0 it 04_res 1 194 0.0 0.0 it 05_nuclear 1 194 0.0 0.0 @@ -10817,8 +10817,8 @@ it 06_coal 1 194 0.0 0.0 it 07_gas 1 194 0.0 0.0 it 08_non-res 1 194 0.0 0.0 it 09_hydro_pump 1 194 0.0 0.0 -it 01_solar 1 195 1.0 0.0 -it 02_wind_on 1 195 1.0 0.0 +it 01_solar 1 195 0.0 1.0 +it 02_wind_on 1 195 0.0 1.0 it 03_wind_off 1 195 0.0 0.0 it 04_res 1 195 0.0 0.0 it 05_nuclear 1 195 0.0 0.0 @@ -10826,8 +10826,8 @@ it 06_coal 1 195 0.0 0.0 it 07_gas 1 195 0.0 0.0 it 08_non-res 1 195 0.0 0.0 it 09_hydro_pump 1 195 0.0 0.0 -it 01_solar 1 196 1.0 0.0 -it 02_wind_on 1 196 1.0 0.0 +it 01_solar 1 196 0.0 1.0 +it 02_wind_on 1 196 0.0 1.0 it 03_wind_off 1 196 0.0 0.0 it 04_res 1 196 0.0 0.0 it 05_nuclear 1 196 0.0 0.0 @@ -10835,8 +10835,8 @@ it 06_coal 1 196 0.0 0.0 it 07_gas 1 196 0.0 0.0 it 08_non-res 1 196 0.0 0.0 it 09_hydro_pump 1 196 0.0 0.0 -it 01_solar 1 197 1.0 0.0 -it 02_wind_on 1 197 1.0 0.0 +it 01_solar 1 197 0.0 1.0 +it 02_wind_on 1 197 0.0 1.0 it 03_wind_off 1 197 0.0 0.0 it 04_res 1 197 0.0 0.0 it 05_nuclear 1 197 0.0 0.0 @@ -10844,8 +10844,8 @@ it 06_coal 1 197 0.0 0.0 it 07_gas 1 197 0.0 0.0 it 08_non-res 1 197 0.0 0.0 it 09_hydro_pump 1 197 0.0 0.0 -it 01_solar 1 198 1.0 0.0 -it 02_wind_on 1 198 1.0 0.0 +it 01_solar 1 198 0.0 1.0 +it 02_wind_on 1 198 0.0 1.0 it 03_wind_off 1 198 0.0 0.0 it 04_res 1 198 0.0 0.0 it 05_nuclear 1 198 0.0 0.0 @@ -10853,8 +10853,8 @@ it 06_coal 1 198 0.0 0.0 it 07_gas 1 198 0.0 0.0 it 08_non-res 1 198 0.0 0.0 it 09_hydro_pump 1 198 0.0 0.0 -it 01_solar 1 199 1.0 0.0 -it 02_wind_on 1 199 1.0 0.0 +it 01_solar 1 199 0.0 1.0 +it 02_wind_on 1 199 0.0 1.0 it 03_wind_off 1 199 0.0 0.0 it 04_res 1 199 0.0 0.0 it 05_nuclear 1 199 0.0 0.0 @@ -10862,8 +10862,8 @@ it 06_coal 1 199 0.0 0.0 it 07_gas 1 199 0.0 0.0 it 08_non-res 1 199 0.0 0.0 it 09_hydro_pump 1 199 0.0 0.0 -it 01_solar 1 200 1.0 0.0 -it 02_wind_on 1 200 1.0 0.0 +it 01_solar 1 200 0.0 1.0 +it 02_wind_on 1 200 0.0 1.0 it 03_wind_off 1 200 0.0 0.0 it 04_res 1 200 0.0 0.0 it 05_nuclear 1 200 0.0 0.0 @@ -10871,8 +10871,8 @@ it 06_coal 1 200 0.0 0.0 it 07_gas 1 200 0.0 0.0 it 08_non-res 1 200 0.0 0.0 it 09_hydro_pump 1 200 0.0 0.0 -it 01_solar 1 201 1.0 0.0 -it 02_wind_on 1 201 1.0 0.0 +it 01_solar 1 201 0.0 1.0 +it 02_wind_on 1 201 0.0 1.0 it 03_wind_off 1 201 0.0 0.0 it 04_res 1 201 0.0 0.0 it 05_nuclear 1 201 0.0 0.0 @@ -10880,8 +10880,8 @@ it 06_coal 1 201 0.0 0.0 it 07_gas 1 201 0.0 0.0 it 08_non-res 1 201 0.0 0.0 it 09_hydro_pump 1 201 0.0 0.0 -it 01_solar 1 202 1.0 0.0 -it 02_wind_on 1 202 1.0 0.0 +it 01_solar 1 202 0.0 1.0 +it 02_wind_on 1 202 0.0 1.0 it 03_wind_off 1 202 0.0 0.0 it 04_res 1 202 0.0 0.0 it 05_nuclear 1 202 0.0 0.0 @@ -10889,8 +10889,8 @@ it 06_coal 1 202 0.0 0.0 it 07_gas 1 202 0.0 0.0 it 08_non-res 1 202 0.0 0.0 it 09_hydro_pump 1 202 0.0 0.0 -it 01_solar 1 203 1.0 0.0 -it 02_wind_on 1 203 1.0 0.0 +it 01_solar 1 203 0.0 1.0 +it 02_wind_on 1 203 0.0 1.0 it 03_wind_off 1 203 0.0 0.0 it 04_res 1 203 0.0 0.0 it 05_nuclear 1 203 0.0 0.0 @@ -10898,8 +10898,8 @@ it 06_coal 1 203 0.0 0.0 it 07_gas 1 203 0.0 0.0 it 08_non-res 1 203 0.0 0.0 it 09_hydro_pump 1 203 0.0 0.0 -it 01_solar 1 204 1.0 0.0 -it 02_wind_on 1 204 1.0 0.0 +it 01_solar 1 204 0.0 1.0 +it 02_wind_on 1 204 0.0 1.0 it 03_wind_off 1 204 0.0 0.0 it 04_res 1 204 0.0 0.0 it 05_nuclear 1 204 0.0 0.0 @@ -10907,8 +10907,8 @@ it 06_coal 1 204 0.0 0.0 it 07_gas 1 204 0.0 0.0 it 08_non-res 1 204 0.0 0.0 it 09_hydro_pump 1 204 0.0 0.0 -it 01_solar 1 205 1.0 0.0 -it 02_wind_on 1 205 1.0 0.0 +it 01_solar 1 205 0.0 1.0 +it 02_wind_on 1 205 0.0 1.0 it 03_wind_off 1 205 0.0 0.0 it 04_res 1 205 0.0 0.0 it 05_nuclear 1 205 0.0 0.0 @@ -10916,8 +10916,8 @@ it 06_coal 1 205 0.0 0.0 it 07_gas 1 205 0.0 0.0 it 08_non-res 1 205 0.0 0.0 it 09_hydro_pump 1 205 0.0 0.0 -it 01_solar 1 206 1.0 0.0 -it 02_wind_on 1 206 1.0 0.0 +it 01_solar 1 206 0.0 1.0 +it 02_wind_on 1 206 0.0 1.0 it 03_wind_off 1 206 0.0 0.0 it 04_res 1 206 0.0 0.0 it 05_nuclear 1 206 0.0 0.0 @@ -10925,8 +10925,8 @@ it 06_coal 1 206 0.0 0.0 it 07_gas 1 206 0.0 0.0 it 08_non-res 1 206 0.0 0.0 it 09_hydro_pump 1 206 0.0 0.0 -it 01_solar 1 207 1.0 0.0 -it 02_wind_on 1 207 1.0 0.0 +it 01_solar 1 207 0.0 1.0 +it 02_wind_on 1 207 0.0 1.0 it 03_wind_off 1 207 0.0 0.0 it 04_res 1 207 0.0 0.0 it 05_nuclear 1 207 0.0 0.0 @@ -10934,8 +10934,8 @@ it 06_coal 1 207 0.0 0.0 it 07_gas 1 207 0.0 0.0 it 08_non-res 1 207 0.0 0.0 it 09_hydro_pump 1 207 0.0 0.0 -it 01_solar 1 208 1.0 0.0 -it 02_wind_on 1 208 1.0 0.0 +it 01_solar 1 208 0.0 1.0 +it 02_wind_on 1 208 0.0 1.0 it 03_wind_off 1 208 0.0 0.0 it 04_res 1 208 0.0 0.0 it 05_nuclear 1 208 0.0 0.0 @@ -10943,8 +10943,8 @@ it 06_coal 1 208 0.0 0.0 it 07_gas 1 208 0.0 0.0 it 08_non-res 1 208 0.0 0.0 it 09_hydro_pump 1 208 0.0 0.0 -it 01_solar 1 209 1.0 0.0 -it 02_wind_on 1 209 1.0 0.0 +it 01_solar 1 209 0.0 1.0 +it 02_wind_on 1 209 0.0 1.0 it 03_wind_off 1 209 0.0 0.0 it 04_res 1 209 0.0 0.0 it 05_nuclear 1 209 0.0 0.0 @@ -10952,1149 +10952,1149 @@ it 06_coal 1 209 0.0 0.0 it 07_gas 1 209 0.0 0.0 it 08_non-res 1 209 0.0 0.0 it 09_hydro_pump 1 209 0.0 0.0 -it 01_solar 1 210 1.0 0.0 -it 02_wind_on 1 210 1.0 0.0 -it 03_wind_off 1 210 1.0 0.0 +it 01_solar 1 210 0.0 1.0 +it 02_wind_on 1 210 0.0 1.0 +it 03_wind_off 1 210 0.0 1.0 it 04_res 1 210 0.0 0.0 it 05_nuclear 1 210 0.0 0.0 it 06_coal 1 210 0.0 0.0 it 07_gas 1 210 0.0 0.0 it 08_non-res 1 210 0.0 0.0 it 09_hydro_pump 1 210 0.0 0.0 -it 01_solar 1 211 1.0 0.0 -it 02_wind_on 1 211 1.0 0.0 -it 03_wind_off 1 211 1.0 0.0 +it 01_solar 1 211 0.0 1.0 +it 02_wind_on 1 211 0.0 1.0 +it 03_wind_off 1 211 0.0 1.0 it 04_res 1 211 0.0 0.0 it 05_nuclear 1 211 0.0 0.0 it 06_coal 1 211 0.0 0.0 it 07_gas 1 211 0.0 0.0 it 08_non-res 1 211 0.0 0.0 it 09_hydro_pump 1 211 0.0 0.0 -it 01_solar 1 212 1.0 0.0 -it 02_wind_on 1 212 1.0 0.0 -it 03_wind_off 1 212 1.0 0.0 +it 01_solar 1 212 0.0 1.0 +it 02_wind_on 1 212 0.0 1.0 +it 03_wind_off 1 212 0.0 1.0 it 04_res 1 212 0.0 0.0 it 05_nuclear 1 212 0.0 0.0 it 06_coal 1 212 0.0 0.0 it 07_gas 1 212 0.0 0.0 it 08_non-res 1 212 0.0 0.0 it 09_hydro_pump 1 212 0.0 0.0 -it 01_solar 1 213 1.0 0.0 -it 02_wind_on 1 213 1.0 0.0 -it 03_wind_off 1 213 1.0 0.0 +it 01_solar 1 213 0.0 1.0 +it 02_wind_on 1 213 0.0 1.0 +it 03_wind_off 1 213 0.0 1.0 it 04_res 1 213 0.0 0.0 it 05_nuclear 1 213 0.0 0.0 it 06_coal 1 213 0.0 0.0 it 07_gas 1 213 0.0 0.0 it 08_non-res 1 213 0.0 0.0 it 09_hydro_pump 1 213 0.0 0.0 -it 01_solar 1 214 1.0 0.0 -it 02_wind_on 1 214 1.0 0.0 -it 03_wind_off 1 214 1.0 0.0 +it 01_solar 1 214 0.0 1.0 +it 02_wind_on 1 214 0.0 1.0 +it 03_wind_off 1 214 0.0 1.0 it 04_res 1 214 0.0 0.0 it 05_nuclear 1 214 0.0 0.0 it 06_coal 1 214 0.0 0.0 it 07_gas 1 214 0.0 0.0 it 08_non-res 1 214 0.0 0.0 it 09_hydro_pump 1 214 0.0 0.0 -it 01_solar 1 215 1.0 0.0 -it 02_wind_on 1 215 1.0 0.0 -it 03_wind_off 1 215 1.0 0.0 +it 01_solar 1 215 0.0 1.0 +it 02_wind_on 1 215 0.0 1.0 +it 03_wind_off 1 215 0.0 1.0 it 04_res 1 215 0.0 0.0 it 05_nuclear 1 215 0.0 0.0 it 06_coal 1 215 0.0 0.0 it 07_gas 1 215 0.0 0.0 it 08_non-res 1 215 0.0 0.0 it 09_hydro_pump 1 215 0.0 0.0 -it 01_solar 1 216 1.0 0.0 -it 02_wind_on 1 216 1.0 0.0 -it 03_wind_off 1 216 1.0 0.0 +it 01_solar 1 216 0.0 1.0 +it 02_wind_on 1 216 0.0 1.0 +it 03_wind_off 1 216 0.0 1.0 it 04_res 1 216 0.0 0.0 it 05_nuclear 1 216 0.0 0.0 it 06_coal 1 216 0.0 0.0 it 07_gas 1 216 0.0 0.0 it 08_non-res 1 216 0.0 0.0 it 09_hydro_pump 1 216 0.0 0.0 -it 01_solar 1 217 1.0 0.0 -it 02_wind_on 1 217 1.0 0.0 -it 03_wind_off 1 217 1.0 0.0 +it 01_solar 1 217 0.0 1.0 +it 02_wind_on 1 217 0.0 1.0 +it 03_wind_off 1 217 0.0 1.0 it 04_res 1 217 0.0 0.0 it 05_nuclear 1 217 0.0 0.0 it 06_coal 1 217 0.0 0.0 it 07_gas 1 217 0.0 0.0 it 08_non-res 1 217 0.0 0.0 it 09_hydro_pump 1 217 0.0 0.0 -it 01_solar 1 218 1.0 0.0 -it 02_wind_on 1 218 1.0 0.0 -it 03_wind_off 1 218 1.0 0.0 +it 01_solar 1 218 0.0 1.0 +it 02_wind_on 1 218 0.0 1.0 +it 03_wind_off 1 218 0.0 1.0 it 04_res 1 218 0.0 0.0 it 05_nuclear 1 218 0.0 0.0 it 06_coal 1 218 0.0 0.0 it 07_gas 1 218 0.0 0.0 it 08_non-res 1 218 0.0 0.0 it 09_hydro_pump 1 218 0.0 0.0 -it 01_solar 1 219 1.0 0.0 -it 02_wind_on 1 219 1.0 0.0 -it 03_wind_off 1 219 1.0 0.0 +it 01_solar 1 219 0.0 1.0 +it 02_wind_on 1 219 0.0 1.0 +it 03_wind_off 1 219 0.0 1.0 it 04_res 1 219 0.0 0.0 it 05_nuclear 1 219 0.0 0.0 it 06_coal 1 219 0.0 0.0 it 07_gas 1 219 0.0 0.0 it 08_non-res 1 219 0.0 0.0 it 09_hydro_pump 1 219 0.0 0.0 -it 01_solar 1 220 1.0 0.0 -it 02_wind_on 1 220 1.0 0.0 -it 03_wind_off 1 220 1.0 0.0 +it 01_solar 1 220 0.0 1.0 +it 02_wind_on 1 220 0.0 1.0 +it 03_wind_off 1 220 0.0 1.0 it 04_res 1 220 0.0 0.0 it 05_nuclear 1 220 0.0 0.0 it 06_coal 1 220 0.0 0.0 it 07_gas 1 220 0.0 0.0 it 08_non-res 1 220 0.0 0.0 it 09_hydro_pump 1 220 0.0 0.0 -it 01_solar 1 221 1.0 0.0 -it 02_wind_on 1 221 1.0 0.0 -it 03_wind_off 1 221 1.0 0.0 +it 01_solar 1 221 0.0 1.0 +it 02_wind_on 1 221 0.0 1.0 +it 03_wind_off 1 221 0.0 1.0 it 04_res 1 221 0.0 0.0 it 05_nuclear 1 221 0.0 0.0 it 06_coal 1 221 0.0 0.0 it 07_gas 1 221 0.0 0.0 it 08_non-res 1 221 0.0 0.0 it 09_hydro_pump 1 221 0.0 0.0 -it 01_solar 1 222 1.0 0.0 -it 02_wind_on 1 222 1.0 0.0 -it 03_wind_off 1 222 1.0 0.0 +it 01_solar 1 222 0.0 1.0 +it 02_wind_on 1 222 0.0 1.0 +it 03_wind_off 1 222 0.0 1.0 it 04_res 1 222 0.0 0.0 it 05_nuclear 1 222 0.0 0.0 it 06_coal 1 222 0.0 0.0 it 07_gas 1 222 0.0 0.0 it 08_non-res 1 222 0.0 0.0 it 09_hydro_pump 1 222 0.0 0.0 -it 01_solar 1 223 1.0 0.0 -it 02_wind_on 1 223 1.0 0.0 -it 03_wind_off 1 223 1.0 0.0 +it 01_solar 1 223 0.0 1.0 +it 02_wind_on 1 223 0.0 1.0 +it 03_wind_off 1 223 0.0 1.0 it 04_res 1 223 0.0 0.0 it 05_nuclear 1 223 0.0 0.0 it 06_coal 1 223 0.0 0.0 it 07_gas 1 223 0.0 0.0 it 08_non-res 1 223 0.0 0.0 it 09_hydro_pump 1 223 0.0 0.0 -it 01_solar 1 224 1.0 0.0 -it 02_wind_on 1 224 1.0 0.0 -it 03_wind_off 1 224 1.0 0.0 +it 01_solar 1 224 0.0 1.0 +it 02_wind_on 1 224 0.0 1.0 +it 03_wind_off 1 224 0.0 1.0 it 04_res 1 224 0.0 0.0 it 05_nuclear 1 224 0.0 0.0 it 06_coal 1 224 0.0 0.0 it 07_gas 1 224 0.0 0.0 it 08_non-res 1 224 0.0 0.0 it 09_hydro_pump 1 224 0.0 0.0 -it 01_solar 1 225 1.0 0.0 -it 02_wind_on 1 225 1.0 0.0 -it 03_wind_off 1 225 1.0 0.0 +it 01_solar 1 225 0.0 1.0 +it 02_wind_on 1 225 0.0 1.0 +it 03_wind_off 1 225 0.0 1.0 it 04_res 1 225 0.0 0.0 it 05_nuclear 1 225 0.0 0.0 it 06_coal 1 225 0.0 0.0 it 07_gas 1 225 0.0 0.0 it 08_non-res 1 225 0.0 0.0 it 09_hydro_pump 1 225 0.0 0.0 -it 01_solar 1 226 1.0 0.0 -it 02_wind_on 1 226 1.0 0.0 -it 03_wind_off 1 226 1.0 0.0 +it 01_solar 1 226 0.0 1.0 +it 02_wind_on 1 226 0.0 1.0 +it 03_wind_off 1 226 0.0 1.0 it 04_res 1 226 0.0 0.0 it 05_nuclear 1 226 0.0 0.0 it 06_coal 1 226 0.0 0.0 it 07_gas 1 226 0.0 0.0 it 08_non-res 1 226 0.0 0.0 it 09_hydro_pump 1 226 0.0 0.0 -it 01_solar 1 227 1.0 0.0 -it 02_wind_on 1 227 1.0 0.0 -it 03_wind_off 1 227 1.0 0.0 +it 01_solar 1 227 0.0 1.0 +it 02_wind_on 1 227 0.0 1.0 +it 03_wind_off 1 227 0.0 1.0 it 04_res 1 227 0.0 0.0 it 05_nuclear 1 227 0.0 0.0 it 06_coal 1 227 0.0 0.0 it 07_gas 1 227 0.0 0.0 it 08_non-res 1 227 0.0 0.0 it 09_hydro_pump 1 227 0.0 0.0 -it 01_solar 1 228 1.0 0.0 -it 02_wind_on 1 228 1.0 0.0 -it 03_wind_off 1 228 1.0 0.0 +it 01_solar 1 228 0.0 1.0 +it 02_wind_on 1 228 0.0 1.0 +it 03_wind_off 1 228 0.0 1.0 it 04_res 1 228 0.0 0.0 it 05_nuclear 1 228 0.0 0.0 it 06_coal 1 228 0.0 0.0 it 07_gas 1 228 0.0 0.0 it 08_non-res 1 228 0.0 0.0 it 09_hydro_pump 1 228 0.0 0.0 -it 01_solar 1 229 1.0 0.0 -it 02_wind_on 1 229 1.0 0.0 -it 03_wind_off 1 229 1.0 0.0 +it 01_solar 1 229 0.0 1.0 +it 02_wind_on 1 229 0.0 1.0 +it 03_wind_off 1 229 0.0 1.0 it 04_res 1 229 0.0 0.0 it 05_nuclear 1 229 0.0 0.0 it 06_coal 1 229 0.0 0.0 it 07_gas 1 229 0.0 0.0 it 08_non-res 1 229 0.0 0.0 it 09_hydro_pump 1 229 0.0 0.0 -it 01_solar 1 230 1.0 0.0 -it 02_wind_on 1 230 1.0 0.0 -it 03_wind_off 1 230 1.0 0.0 -it 04_res 1 230 1.0 0.0 +it 01_solar 1 230 0.0 1.0 +it 02_wind_on 1 230 0.0 1.0 +it 03_wind_off 1 230 0.0 1.0 +it 04_res 1 230 0.0 1.0 it 05_nuclear 1 230 0.0 0.0 it 06_coal 1 230 0.0 0.0 it 07_gas 1 230 0.0 0.0 it 08_non-res 1 230 0.0 0.0 it 09_hydro_pump 1 230 0.0 0.0 -it 01_solar 1 231 1.0 0.0 -it 02_wind_on 1 231 1.0 0.0 -it 03_wind_off 1 231 1.0 0.0 -it 04_res 1 231 1.0 0.0 +it 01_solar 1 231 0.0 1.0 +it 02_wind_on 1 231 0.0 1.0 +it 03_wind_off 1 231 0.0 1.0 +it 04_res 1 231 0.0 1.0 it 05_nuclear 1 231 0.0 0.0 it 06_coal 1 231 0.0 0.0 it 07_gas 1 231 0.0 0.0 it 08_non-res 1 231 0.0 0.0 it 09_hydro_pump 1 231 0.0 0.0 -it 01_solar 1 232 1.0 0.0 -it 02_wind_on 1 232 1.0 0.0 -it 03_wind_off 1 232 1.0 0.0 -it 04_res 1 232 1.0 0.0 +it 01_solar 1 232 0.0 1.0 +it 02_wind_on 1 232 0.0 1.0 +it 03_wind_off 1 232 0.0 1.0 +it 04_res 1 232 0.0 1.0 it 05_nuclear 1 232 0.0 0.0 it 06_coal 1 232 0.0 0.0 it 07_gas 1 232 0.0 0.0 it 08_non-res 1 232 0.0 0.0 it 09_hydro_pump 1 232 0.0 0.0 -it 01_solar 1 233 1.0 0.0 -it 02_wind_on 1 233 1.0 0.0 -it 03_wind_off 1 233 1.0 0.0 -it 04_res 1 233 1.0 0.0 +it 01_solar 1 233 0.0 1.0 +it 02_wind_on 1 233 0.0 1.0 +it 03_wind_off 1 233 0.0 1.0 +it 04_res 1 233 0.0 1.0 it 05_nuclear 1 233 0.0 0.0 it 06_coal 1 233 0.0 0.0 it 07_gas 1 233 0.0 0.0 it 08_non-res 1 233 0.0 0.0 it 09_hydro_pump 1 233 0.0 0.0 -it 01_solar 1 234 1.0 0.0 -it 02_wind_on 1 234 1.0 0.0 -it 03_wind_off 1 234 1.0 0.0 -it 04_res 1 234 1.0 0.0 +it 01_solar 1 234 0.0 1.0 +it 02_wind_on 1 234 0.0 1.0 +it 03_wind_off 1 234 0.0 1.0 +it 04_res 1 234 0.0 1.0 it 05_nuclear 1 234 0.0 0.0 it 06_coal 1 234 0.0 0.0 it 07_gas 1 234 0.0 0.0 it 08_non-res 1 234 0.0 0.0 it 09_hydro_pump 1 234 0.0 0.0 -it 01_solar 1 235 1.0 0.0 -it 02_wind_on 1 235 1.0 0.0 -it 03_wind_off 1 235 1.0 0.0 -it 04_res 1 235 1.0 0.0 +it 01_solar 1 235 0.0 1.0 +it 02_wind_on 1 235 0.0 1.0 +it 03_wind_off 1 235 0.0 1.0 +it 04_res 1 235 0.0 1.0 it 05_nuclear 1 235 0.0 0.0 it 06_coal 1 235 0.0 0.0 it 07_gas 1 235 0.0 0.0 it 08_non-res 1 235 0.0 0.0 it 09_hydro_pump 1 235 0.0 0.0 -it 01_solar 1 236 1.0 0.0 -it 02_wind_on 1 236 1.0 0.0 -it 03_wind_off 1 236 1.0 0.0 -it 04_res 1 236 1.0 0.0 +it 01_solar 1 236 0.0 1.0 +it 02_wind_on 1 236 0.0 1.0 +it 03_wind_off 1 236 0.0 1.0 +it 04_res 1 236 0.0 1.0 it 05_nuclear 1 236 0.0 0.0 it 06_coal 1 236 0.0 0.0 it 07_gas 1 236 0.0 0.0 it 08_non-res 1 236 0.0 0.0 it 09_hydro_pump 1 236 0.0 0.0 -it 01_solar 1 237 1.0 0.0 -it 02_wind_on 1 237 1.0 0.0 -it 03_wind_off 1 237 1.0 0.0 -it 04_res 1 237 1.0 0.0 +it 01_solar 1 237 0.0 1.0 +it 02_wind_on 1 237 0.0 1.0 +it 03_wind_off 1 237 0.0 1.0 +it 04_res 1 237 0.0 1.0 it 05_nuclear 1 237 0.0 0.0 it 06_coal 1 237 0.0 0.0 it 07_gas 1 237 0.0 0.0 it 08_non-res 1 237 0.0 0.0 it 09_hydro_pump 1 237 0.0 0.0 -it 01_solar 1 238 1.0 0.0 -it 02_wind_on 1 238 1.0 0.0 -it 03_wind_off 1 238 1.0 0.0 -it 04_res 1 238 1.0 0.0 +it 01_solar 1 238 0.0 1.0 +it 02_wind_on 1 238 0.0 1.0 +it 03_wind_off 1 238 0.0 1.0 +it 04_res 1 238 0.0 1.0 it 05_nuclear 1 238 0.0 0.0 it 06_coal 1 238 0.0 0.0 it 07_gas 1 238 0.0 0.0 it 08_non-res 1 238 0.0 0.0 it 09_hydro_pump 1 238 0.0 0.0 -it 01_solar 1 239 1.0 0.0 -it 02_wind_on 1 239 1.0 0.0 -it 03_wind_off 1 239 1.0 0.0 -it 04_res 1 239 1.0 0.0 +it 01_solar 1 239 0.0 1.0 +it 02_wind_on 1 239 0.0 1.0 +it 03_wind_off 1 239 0.0 1.0 +it 04_res 1 239 0.0 1.0 it 05_nuclear 1 239 0.0 0.0 it 06_coal 1 239 0.0 0.0 it 07_gas 1 239 0.0 0.0 it 08_non-res 1 239 0.0 0.0 it 09_hydro_pump 1 239 0.0 0.0 -it 01_solar 1 240 1.0 0.0 -it 02_wind_on 1 240 1.0 0.0 -it 03_wind_off 1 240 1.0 0.0 -it 04_res 1 240 1.0 0.0 +it 01_solar 1 240 0.0 1.0 +it 02_wind_on 1 240 0.0 1.0 +it 03_wind_off 1 240 0.0 1.0 +it 04_res 1 240 0.0 1.0 it 05_nuclear 1 240 0.0 0.0 it 06_coal 1 240 0.0 0.0 it 07_gas 1 240 0.0 0.0 it 08_non-res 1 240 0.0 0.0 it 09_hydro_pump 1 240 0.0 0.0 -it 01_solar 1 241 1.0 0.0 -it 02_wind_on 1 241 1.0 0.0 -it 03_wind_off 1 241 1.0 0.0 -it 04_res 1 241 1.0 0.0 +it 01_solar 1 241 0.0 1.0 +it 02_wind_on 1 241 0.0 1.0 +it 03_wind_off 1 241 0.0 1.0 +it 04_res 1 241 0.0 1.0 it 05_nuclear 1 241 0.0 0.0 it 06_coal 1 241 0.0 0.0 it 07_gas 1 241 0.0 0.0 it 08_non-res 1 241 0.0 0.0 it 09_hydro_pump 1 241 0.0 0.0 -it 01_solar 1 242 1.0 0.0 -it 02_wind_on 1 242 1.0 0.0 -it 03_wind_off 1 242 1.0 0.0 -it 04_res 1 242 1.0 0.0 +it 01_solar 1 242 0.0 1.0 +it 02_wind_on 1 242 0.0 1.0 +it 03_wind_off 1 242 0.0 1.0 +it 04_res 1 242 0.0 1.0 it 05_nuclear 1 242 0.0 0.0 it 06_coal 1 242 0.0 0.0 it 07_gas 1 242 0.0 0.0 it 08_non-res 1 242 0.0 0.0 it 09_hydro_pump 1 242 0.0 0.0 -it 01_solar 1 243 1.0 0.0 -it 02_wind_on 1 243 1.0 0.0 -it 03_wind_off 1 243 1.0 0.0 -it 04_res 1 243 1.0 0.0 +it 01_solar 1 243 0.0 1.0 +it 02_wind_on 1 243 0.0 1.0 +it 03_wind_off 1 243 0.0 1.0 +it 04_res 1 243 0.0 1.0 it 05_nuclear 1 243 0.0 0.0 it 06_coal 1 243 0.0 0.0 it 07_gas 1 243 0.0 0.0 it 08_non-res 1 243 0.0 0.0 it 09_hydro_pump 1 243 0.0 0.0 -it 01_solar 1 244 1.0 0.0 -it 02_wind_on 1 244 1.0 0.0 -it 03_wind_off 1 244 1.0 0.0 -it 04_res 1 244 1.0 0.0 +it 01_solar 1 244 0.0 1.0 +it 02_wind_on 1 244 0.0 1.0 +it 03_wind_off 1 244 0.0 1.0 +it 04_res 1 244 0.0 1.0 it 05_nuclear 1 244 0.0 0.0 it 06_coal 1 244 0.0 0.0 it 07_gas 1 244 0.0 0.0 it 08_non-res 1 244 0.0 0.0 it 09_hydro_pump 1 244 0.0 0.0 -it 01_solar 1 245 1.0 0.0 -it 02_wind_on 1 245 1.0 0.0 -it 03_wind_off 1 245 1.0 0.0 -it 04_res 1 245 1.0 0.0 +it 01_solar 1 245 0.0 1.0 +it 02_wind_on 1 245 0.0 1.0 +it 03_wind_off 1 245 0.0 1.0 +it 04_res 1 245 0.0 1.0 it 05_nuclear 1 245 0.0 0.0 it 06_coal 1 245 0.0 0.0 it 07_gas 1 245 0.0 0.0 it 08_non-res 1 245 0.0 0.0 it 09_hydro_pump 1 245 0.0 0.0 -it 01_solar 1 246 1.0 0.0 -it 02_wind_on 1 246 1.0 0.0 -it 03_wind_off 1 246 1.0 0.0 -it 04_res 1 246 1.0 0.0 +it 01_solar 1 246 0.0 1.0 +it 02_wind_on 1 246 0.0 1.0 +it 03_wind_off 1 246 0.0 1.0 +it 04_res 1 246 0.0 1.0 it 05_nuclear 1 246 0.0 0.0 it 06_coal 1 246 0.0 0.0 it 07_gas 1 246 0.0 0.0 it 08_non-res 1 246 0.0 0.0 it 09_hydro_pump 1 246 0.0 0.0 -it 01_solar 1 247 1.0 0.0 -it 02_wind_on 1 247 1.0 0.0 -it 03_wind_off 1 247 1.0 0.0 -it 04_res 1 247 1.0 0.0 +it 01_solar 1 247 0.0 1.0 +it 02_wind_on 1 247 0.0 1.0 +it 03_wind_off 1 247 0.0 1.0 +it 04_res 1 247 0.0 1.0 it 05_nuclear 1 247 0.0 0.0 it 06_coal 1 247 0.0 0.0 it 07_gas 1 247 0.0 0.0 it 08_non-res 1 247 0.0 0.0 it 09_hydro_pump 1 247 0.0 0.0 -it 01_solar 1 248 1.0 0.0 -it 02_wind_on 1 248 1.0 0.0 -it 03_wind_off 1 248 1.0 0.0 -it 04_res 1 248 1.0 0.0 +it 01_solar 1 248 0.0 1.0 +it 02_wind_on 1 248 0.0 1.0 +it 03_wind_off 1 248 0.0 1.0 +it 04_res 1 248 0.0 1.0 it 05_nuclear 1 248 0.0 0.0 it 06_coal 1 248 0.0 0.0 it 07_gas 1 248 0.0 0.0 it 08_non-res 1 248 0.0 0.0 it 09_hydro_pump 1 248 0.0 0.0 -it 01_solar 1 249 1.0 0.0 -it 02_wind_on 1 249 1.0 0.0 -it 03_wind_off 1 249 1.0 0.0 -it 04_res 1 249 1.0 0.0 +it 01_solar 1 249 0.0 1.0 +it 02_wind_on 1 249 0.0 1.0 +it 03_wind_off 1 249 0.0 1.0 +it 04_res 1 249 0.0 1.0 it 05_nuclear 1 249 0.0 0.0 it 06_coal 1 249 0.0 0.0 it 07_gas 1 249 0.0 0.0 it 08_non-res 1 249 0.0 0.0 it 09_hydro_pump 1 249 0.0 0.0 -it 01_solar 1 250 1.0 0.0 -it 02_wind_on 1 250 1.0 0.0 -it 03_wind_off 1 250 1.0 0.0 -it 04_res 1 250 1.0 0.0 -it 05_nuclear 1 250 1.0 0.0 +it 01_solar 1 250 0.0 1.0 +it 02_wind_on 1 250 0.0 1.0 +it 03_wind_off 1 250 0.0 1.0 +it 04_res 1 250 0.0 1.0 +it 05_nuclear 1 250 0.0 1.0 it 06_coal 1 250 0.0 0.0 it 07_gas 1 250 0.0 0.0 it 08_non-res 1 250 0.0 0.0 it 09_hydro_pump 1 250 0.0 0.0 -it 01_solar 1 251 1.0 0.0 -it 02_wind_on 1 251 1.0 0.0 -it 03_wind_off 1 251 1.0 0.0 -it 04_res 1 251 1.0 0.0 -it 05_nuclear 1 251 1.0 0.0 +it 01_solar 1 251 0.0 1.0 +it 02_wind_on 1 251 0.0 1.0 +it 03_wind_off 1 251 0.0 1.0 +it 04_res 1 251 0.0 1.0 +it 05_nuclear 1 251 0.0 1.0 it 06_coal 1 251 0.0 0.0 it 07_gas 1 251 0.0 0.0 it 08_non-res 1 251 0.0 0.0 it 09_hydro_pump 1 251 0.0 0.0 -it 01_solar 1 252 1.0 0.0 -it 02_wind_on 1 252 1.0 0.0 -it 03_wind_off 1 252 1.0 0.0 -it 04_res 1 252 1.0 0.0 -it 05_nuclear 1 252 1.0 0.0 +it 01_solar 1 252 0.0 1.0 +it 02_wind_on 1 252 0.0 1.0 +it 03_wind_off 1 252 0.0 1.0 +it 04_res 1 252 0.0 1.0 +it 05_nuclear 1 252 0.0 1.0 it 06_coal 1 252 0.0 0.0 it 07_gas 1 252 0.0 0.0 it 08_non-res 1 252 0.0 0.0 it 09_hydro_pump 1 252 0.0 0.0 -it 01_solar 1 253 1.0 0.0 -it 02_wind_on 1 253 1.0 0.0 -it 03_wind_off 1 253 1.0 0.0 -it 04_res 1 253 1.0 0.0 -it 05_nuclear 1 253 1.0 0.0 +it 01_solar 1 253 0.0 1.0 +it 02_wind_on 1 253 0.0 1.0 +it 03_wind_off 1 253 0.0 1.0 +it 04_res 1 253 0.0 1.0 +it 05_nuclear 1 253 0.0 1.0 it 06_coal 1 253 0.0 0.0 it 07_gas 1 253 0.0 0.0 it 08_non-res 1 253 0.0 0.0 it 09_hydro_pump 1 253 0.0 0.0 -it 01_solar 1 254 1.0 0.0 -it 02_wind_on 1 254 1.0 0.0 -it 03_wind_off 1 254 1.0 0.0 -it 04_res 1 254 1.0 0.0 -it 05_nuclear 1 254 1.0 0.0 +it 01_solar 1 254 0.0 1.0 +it 02_wind_on 1 254 0.0 1.0 +it 03_wind_off 1 254 0.0 1.0 +it 04_res 1 254 0.0 1.0 +it 05_nuclear 1 254 0.0 1.0 it 06_coal 1 254 0.0 0.0 it 07_gas 1 254 0.0 0.0 it 08_non-res 1 254 0.0 0.0 it 09_hydro_pump 1 254 0.0 0.0 -it 01_solar 1 255 1.0 0.0 -it 02_wind_on 1 255 1.0 0.0 -it 03_wind_off 1 255 1.0 0.0 -it 04_res 1 255 1.0 0.0 -it 05_nuclear 1 255 1.0 0.0 +it 01_solar 1 255 0.0 1.0 +it 02_wind_on 1 255 0.0 1.0 +it 03_wind_off 1 255 0.0 1.0 +it 04_res 1 255 0.0 1.0 +it 05_nuclear 1 255 0.0 1.0 it 06_coal 1 255 0.0 0.0 it 07_gas 1 255 0.0 0.0 it 08_non-res 1 255 0.0 0.0 it 09_hydro_pump 1 255 0.0 0.0 -it 01_solar 1 256 1.0 0.0 -it 02_wind_on 1 256 1.0 0.0 -it 03_wind_off 1 256 1.0 0.0 -it 04_res 1 256 1.0 0.0 -it 05_nuclear 1 256 1.0 0.0 +it 01_solar 1 256 0.0 1.0 +it 02_wind_on 1 256 0.0 1.0 +it 03_wind_off 1 256 0.0 1.0 +it 04_res 1 256 0.0 1.0 +it 05_nuclear 1 256 0.0 1.0 it 06_coal 1 256 0.0 0.0 it 07_gas 1 256 0.0 0.0 it 08_non-res 1 256 0.0 0.0 it 09_hydro_pump 1 256 0.0 0.0 -it 01_solar 1 257 1.0 0.0 -it 02_wind_on 1 257 1.0 0.0 -it 03_wind_off 1 257 1.0 0.0 -it 04_res 1 257 1.0 0.0 -it 05_nuclear 1 257 1.0 0.0 +it 01_solar 1 257 0.0 1.0 +it 02_wind_on 1 257 0.0 1.0 +it 03_wind_off 1 257 0.0 1.0 +it 04_res 1 257 0.0 1.0 +it 05_nuclear 1 257 0.0 1.0 it 06_coal 1 257 0.0 0.0 it 07_gas 1 257 0.0 0.0 it 08_non-res 1 257 0.0 0.0 it 09_hydro_pump 1 257 0.0 0.0 -it 01_solar 1 258 1.0 0.0 -it 02_wind_on 1 258 1.0 0.0 -it 03_wind_off 1 258 1.0 0.0 -it 04_res 1 258 1.0 0.0 -it 05_nuclear 1 258 1.0 0.0 +it 01_solar 1 258 0.0 1.0 +it 02_wind_on 1 258 0.0 1.0 +it 03_wind_off 1 258 0.0 1.0 +it 04_res 1 258 0.0 1.0 +it 05_nuclear 1 258 0.0 1.0 it 06_coal 1 258 0.0 0.0 it 07_gas 1 258 0.0 0.0 it 08_non-res 1 258 0.0 0.0 it 09_hydro_pump 1 258 0.0 0.0 -it 01_solar 1 259 1.0 0.0 -it 02_wind_on 1 259 1.0 0.0 -it 03_wind_off 1 259 1.0 0.0 -it 04_res 1 259 1.0 0.0 -it 05_nuclear 1 259 1.0 0.0 +it 01_solar 1 259 0.0 1.0 +it 02_wind_on 1 259 0.0 1.0 +it 03_wind_off 1 259 0.0 1.0 +it 04_res 1 259 0.0 1.0 +it 05_nuclear 1 259 0.0 1.0 it 06_coal 1 259 0.0 0.0 it 07_gas 1 259 0.0 0.0 it 08_non-res 1 259 0.0 0.0 it 09_hydro_pump 1 259 0.0 0.0 -it 01_solar 1 260 1.0 0.0 -it 02_wind_on 1 260 1.0 0.0 -it 03_wind_off 1 260 1.0 0.0 -it 04_res 1 260 1.0 0.0 -it 05_nuclear 1 260 1.0 0.0 +it 01_solar 1 260 0.0 1.0 +it 02_wind_on 1 260 0.0 1.0 +it 03_wind_off 1 260 0.0 1.0 +it 04_res 1 260 0.0 1.0 +it 05_nuclear 1 260 0.0 1.0 it 06_coal 1 260 0.0 0.0 it 07_gas 1 260 0.0 0.0 it 08_non-res 1 260 0.0 0.0 it 09_hydro_pump 1 260 0.0 0.0 -it 01_solar 1 261 1.0 0.0 -it 02_wind_on 1 261 1.0 0.0 -it 03_wind_off 1 261 1.0 0.0 -it 04_res 1 261 1.0 0.0 -it 05_nuclear 1 261 1.0 0.0 +it 01_solar 1 261 0.0 1.0 +it 02_wind_on 1 261 0.0 1.0 +it 03_wind_off 1 261 0.0 1.0 +it 04_res 1 261 0.0 1.0 +it 05_nuclear 1 261 0.0 1.0 it 06_coal 1 261 0.0 0.0 it 07_gas 1 261 0.0 0.0 it 08_non-res 1 261 0.0 0.0 it 09_hydro_pump 1 261 0.0 0.0 -it 01_solar 1 262 1.0 0.0 -it 02_wind_on 1 262 1.0 0.0 -it 03_wind_off 1 262 1.0 0.0 -it 04_res 1 262 1.0 0.0 -it 05_nuclear 1 262 1.0 0.0 +it 01_solar 1 262 0.0 1.0 +it 02_wind_on 1 262 0.0 1.0 +it 03_wind_off 1 262 0.0 1.0 +it 04_res 1 262 0.0 1.0 +it 05_nuclear 1 262 0.0 1.0 it 06_coal 1 262 0.0 0.0 it 07_gas 1 262 0.0 0.0 it 08_non-res 1 262 0.0 0.0 it 09_hydro_pump 1 262 0.0 0.0 -it 01_solar 1 263 1.0 0.0 -it 02_wind_on 1 263 1.0 0.0 -it 03_wind_off 1 263 1.0 0.0 -it 04_res 1 263 1.0 0.0 -it 05_nuclear 1 263 1.0 0.0 +it 01_solar 1 263 0.0 1.0 +it 02_wind_on 1 263 0.0 1.0 +it 03_wind_off 1 263 0.0 1.0 +it 04_res 1 263 0.0 1.0 +it 05_nuclear 1 263 0.0 1.0 it 06_coal 1 263 0.0 0.0 it 07_gas 1 263 0.0 0.0 it 08_non-res 1 263 0.0 0.0 it 09_hydro_pump 1 263 0.0 0.0 -it 01_solar 1 264 1.0 0.0 -it 02_wind_on 1 264 1.0 0.0 -it 03_wind_off 1 264 1.0 0.0 -it 04_res 1 264 1.0 0.0 -it 05_nuclear 1 264 1.0 0.0 +it 01_solar 1 264 0.0 1.0 +it 02_wind_on 1 264 0.0 1.0 +it 03_wind_off 1 264 0.0 1.0 +it 04_res 1 264 0.0 1.0 +it 05_nuclear 1 264 0.0 1.0 it 06_coal 1 264 0.0 0.0 it 07_gas 1 264 0.0 0.0 it 08_non-res 1 264 0.0 0.0 it 09_hydro_pump 1 264 0.0 0.0 -it 01_solar 1 265 1.0 0.0 -it 02_wind_on 1 265 1.0 0.0 -it 03_wind_off 1 265 1.0 0.0 -it 04_res 1 265 1.0 0.0 -it 05_nuclear 1 265 1.0 0.0 +it 01_solar 1 265 0.0 1.0 +it 02_wind_on 1 265 0.0 1.0 +it 03_wind_off 1 265 0.0 1.0 +it 04_res 1 265 0.0 1.0 +it 05_nuclear 1 265 0.0 1.0 it 06_coal 1 265 0.0 0.0 it 07_gas 1 265 0.0 0.0 it 08_non-res 1 265 0.0 0.0 it 09_hydro_pump 1 265 0.0 0.0 -it 01_solar 1 266 1.0 0.0 -it 02_wind_on 1 266 1.0 0.0 -it 03_wind_off 1 266 1.0 0.0 -it 04_res 1 266 1.0 0.0 -it 05_nuclear 1 266 1.0 0.0 +it 01_solar 1 266 0.0 1.0 +it 02_wind_on 1 266 0.0 1.0 +it 03_wind_off 1 266 0.0 1.0 +it 04_res 1 266 0.0 1.0 +it 05_nuclear 1 266 0.0 1.0 it 06_coal 1 266 0.0 0.0 it 07_gas 1 266 0.0 0.0 it 08_non-res 1 266 0.0 0.0 it 09_hydro_pump 1 266 0.0 0.0 -it 01_solar 1 267 1.0 0.0 -it 02_wind_on 1 267 1.0 0.0 -it 03_wind_off 1 267 1.0 0.0 -it 04_res 1 267 1.0 0.0 -it 05_nuclear 1 267 1.0 0.0 +it 01_solar 1 267 0.0 1.0 +it 02_wind_on 1 267 0.0 1.0 +it 03_wind_off 1 267 0.0 1.0 +it 04_res 1 267 0.0 1.0 +it 05_nuclear 1 267 0.0 1.0 it 06_coal 1 267 0.0 0.0 it 07_gas 1 267 0.0 0.0 it 08_non-res 1 267 0.0 0.0 it 09_hydro_pump 1 267 0.0 0.0 -it 01_solar 1 268 1.0 0.0 -it 02_wind_on 1 268 1.0 0.0 -it 03_wind_off 1 268 1.0 0.0 -it 04_res 1 268 1.0 0.0 -it 05_nuclear 1 268 1.0 0.0 +it 01_solar 1 268 0.0 1.0 +it 02_wind_on 1 268 0.0 1.0 +it 03_wind_off 1 268 0.0 1.0 +it 04_res 1 268 0.0 1.0 +it 05_nuclear 1 268 0.0 1.0 it 06_coal 1 268 0.0 0.0 it 07_gas 1 268 0.0 0.0 it 08_non-res 1 268 0.0 0.0 it 09_hydro_pump 1 268 0.0 0.0 -it 01_solar 1 269 1.0 0.0 -it 02_wind_on 1 269 1.0 0.0 -it 03_wind_off 1 269 1.0 0.0 -it 04_res 1 269 1.0 0.0 -it 05_nuclear 1 269 1.0 0.0 +it 01_solar 1 269 0.0 1.0 +it 02_wind_on 1 269 0.0 1.0 +it 03_wind_off 1 269 0.0 1.0 +it 04_res 1 269 0.0 1.0 +it 05_nuclear 1 269 0.0 1.0 it 06_coal 1 269 0.0 0.0 it 07_gas 1 269 0.0 0.0 it 08_non-res 1 269 0.0 0.0 it 09_hydro_pump 1 269 0.0 0.0 -it 01_solar 1 270 1.0 0.0 -it 02_wind_on 1 270 1.0 0.0 -it 03_wind_off 1 270 1.0 0.0 -it 04_res 1 270 1.0 0.0 -it 05_nuclear 1 270 1.0 0.0 -it 06_coal 1 270 1.0 0.0 +it 01_solar 1 270 0.0 1.0 +it 02_wind_on 1 270 0.0 1.0 +it 03_wind_off 1 270 0.0 1.0 +it 04_res 1 270 0.0 1.0 +it 05_nuclear 1 270 0.0 1.0 +it 06_coal 1 270 0.0 1.0 it 07_gas 1 270 0.0 0.0 it 08_non-res 1 270 0.0 0.0 it 09_hydro_pump 1 270 0.0 0.0 -it 01_solar 1 271 1.0 0.0 -it 02_wind_on 1 271 1.0 0.0 -it 03_wind_off 1 271 1.0 0.0 -it 04_res 1 271 1.0 0.0 -it 05_nuclear 1 271 1.0 0.0 -it 06_coal 1 271 1.0 0.0 +it 01_solar 1 271 0.0 1.0 +it 02_wind_on 1 271 0.0 1.0 +it 03_wind_off 1 271 0.0 1.0 +it 04_res 1 271 0.0 1.0 +it 05_nuclear 1 271 0.0 1.0 +it 06_coal 1 271 0.0 1.0 it 07_gas 1 271 0.0 0.0 it 08_non-res 1 271 0.0 0.0 it 09_hydro_pump 1 271 0.0 0.0 -it 01_solar 1 272 1.0 0.0 -it 02_wind_on 1 272 1.0 0.0 -it 03_wind_off 1 272 1.0 0.0 -it 04_res 1 272 1.0 0.0 -it 05_nuclear 1 272 1.0 0.0 -it 06_coal 1 272 1.0 0.0 +it 01_solar 1 272 0.0 1.0 +it 02_wind_on 1 272 0.0 1.0 +it 03_wind_off 1 272 0.0 1.0 +it 04_res 1 272 0.0 1.0 +it 05_nuclear 1 272 0.0 1.0 +it 06_coal 1 272 0.0 1.0 it 07_gas 1 272 0.0 0.0 it 08_non-res 1 272 0.0 0.0 it 09_hydro_pump 1 272 0.0 0.0 -it 01_solar 1 273 1.0 0.0 -it 02_wind_on 1 273 1.0 0.0 -it 03_wind_off 1 273 1.0 0.0 -it 04_res 1 273 1.0 0.0 -it 05_nuclear 1 273 1.0 0.0 -it 06_coal 1 273 1.0 0.0 +it 01_solar 1 273 0.0 1.0 +it 02_wind_on 1 273 0.0 1.0 +it 03_wind_off 1 273 0.0 1.0 +it 04_res 1 273 0.0 1.0 +it 05_nuclear 1 273 0.0 1.0 +it 06_coal 1 273 0.0 1.0 it 07_gas 1 273 0.0 0.0 it 08_non-res 1 273 0.0 0.0 it 09_hydro_pump 1 273 0.0 0.0 -it 01_solar 1 274 1.0 0.0 -it 02_wind_on 1 274 1.0 0.0 -it 03_wind_off 1 274 1.0 0.0 -it 04_res 1 274 1.0 0.0 -it 05_nuclear 1 274 1.0 0.0 -it 06_coal 1 274 1.0 0.0 +it 01_solar 1 274 0.0 1.0 +it 02_wind_on 1 274 0.0 1.0 +it 03_wind_off 1 274 0.0 1.0 +it 04_res 1 274 0.0 1.0 +it 05_nuclear 1 274 0.0 1.0 +it 06_coal 1 274 0.0 1.0 it 07_gas 1 274 0.0 0.0 it 08_non-res 1 274 0.0 0.0 it 09_hydro_pump 1 274 0.0 0.0 -it 01_solar 1 275 1.0 0.0 -it 02_wind_on 1 275 1.0 0.0 -it 03_wind_off 1 275 1.0 0.0 -it 04_res 1 275 1.0 0.0 -it 05_nuclear 1 275 1.0 0.0 -it 06_coal 1 275 1.0 0.0 +it 01_solar 1 275 0.0 1.0 +it 02_wind_on 1 275 0.0 1.0 +it 03_wind_off 1 275 0.0 1.0 +it 04_res 1 275 0.0 1.0 +it 05_nuclear 1 275 0.0 1.0 +it 06_coal 1 275 0.0 1.0 it 07_gas 1 275 0.0 0.0 it 08_non-res 1 275 0.0 0.0 it 09_hydro_pump 1 275 0.0 0.0 -it 01_solar 1 276 1.0 0.0 -it 02_wind_on 1 276 1.0 0.0 -it 03_wind_off 1 276 1.0 0.0 -it 04_res 1 276 1.0 0.0 -it 05_nuclear 1 276 1.0 0.0 -it 06_coal 1 276 1.0 0.0 +it 01_solar 1 276 0.0 1.0 +it 02_wind_on 1 276 0.0 1.0 +it 03_wind_off 1 276 0.0 1.0 +it 04_res 1 276 0.0 1.0 +it 05_nuclear 1 276 0.0 1.0 +it 06_coal 1 276 0.0 1.0 it 07_gas 1 276 0.0 0.0 it 08_non-res 1 276 0.0 0.0 it 09_hydro_pump 1 276 0.0 0.0 -it 01_solar 1 277 1.0 0.0 -it 02_wind_on 1 277 1.0 0.0 -it 03_wind_off 1 277 1.0 0.0 -it 04_res 1 277 1.0 0.0 -it 05_nuclear 1 277 1.0 0.0 -it 06_coal 1 277 1.0 0.0 +it 01_solar 1 277 0.0 1.0 +it 02_wind_on 1 277 0.0 1.0 +it 03_wind_off 1 277 0.0 1.0 +it 04_res 1 277 0.0 1.0 +it 05_nuclear 1 277 0.0 1.0 +it 06_coal 1 277 0.0 1.0 it 07_gas 1 277 0.0 0.0 it 08_non-res 1 277 0.0 0.0 it 09_hydro_pump 1 277 0.0 0.0 -it 01_solar 1 278 1.0 0.0 -it 02_wind_on 1 278 1.0 0.0 -it 03_wind_off 1 278 1.0 0.0 -it 04_res 1 278 1.0 0.0 -it 05_nuclear 1 278 1.0 0.0 -it 06_coal 1 278 1.0 0.0 +it 01_solar 1 278 0.0 1.0 +it 02_wind_on 1 278 0.0 1.0 +it 03_wind_off 1 278 0.0 1.0 +it 04_res 1 278 0.0 1.0 +it 05_nuclear 1 278 0.0 1.0 +it 06_coal 1 278 0.0 1.0 it 07_gas 1 278 0.0 0.0 it 08_non-res 1 278 0.0 0.0 it 09_hydro_pump 1 278 0.0 0.0 -it 01_solar 1 279 1.0 0.0 -it 02_wind_on 1 279 1.0 0.0 -it 03_wind_off 1 279 1.0 0.0 -it 04_res 1 279 1.0 0.0 -it 05_nuclear 1 279 1.0 0.0 -it 06_coal 1 279 1.0 0.0 +it 01_solar 1 279 0.0 1.0 +it 02_wind_on 1 279 0.0 1.0 +it 03_wind_off 1 279 0.0 1.0 +it 04_res 1 279 0.0 1.0 +it 05_nuclear 1 279 0.0 1.0 +it 06_coal 1 279 0.0 1.0 it 07_gas 1 279 0.0 0.0 it 08_non-res 1 279 0.0 0.0 it 09_hydro_pump 1 279 0.0 0.0 -it 01_solar 1 280 1.0 0.0 -it 02_wind_on 1 280 1.0 0.0 -it 03_wind_off 1 280 1.0 0.0 -it 04_res 1 280 1.0 0.0 -it 05_nuclear 1 280 1.0 0.0 -it 06_coal 1 280 1.0 0.0 +it 01_solar 1 280 0.0 1.0 +it 02_wind_on 1 280 0.0 1.0 +it 03_wind_off 1 280 0.0 1.0 +it 04_res 1 280 0.0 1.0 +it 05_nuclear 1 280 0.0 1.0 +it 06_coal 1 280 0.0 1.0 it 07_gas 1 280 0.0 0.0 it 08_non-res 1 280 0.0 0.0 it 09_hydro_pump 1 280 0.0 0.0 -it 01_solar 1 281 1.0 0.0 -it 02_wind_on 1 281 1.0 0.0 -it 03_wind_off 1 281 1.0 0.0 -it 04_res 1 281 1.0 0.0 -it 05_nuclear 1 281 1.0 0.0 -it 06_coal 1 281 1.0 0.0 +it 01_solar 1 281 0.0 1.0 +it 02_wind_on 1 281 0.0 1.0 +it 03_wind_off 1 281 0.0 1.0 +it 04_res 1 281 0.0 1.0 +it 05_nuclear 1 281 0.0 1.0 +it 06_coal 1 281 0.0 1.0 it 07_gas 1 281 0.0 0.0 it 08_non-res 1 281 0.0 0.0 it 09_hydro_pump 1 281 0.0 0.0 -it 01_solar 1 282 1.0 0.0 -it 02_wind_on 1 282 1.0 0.0 -it 03_wind_off 1 282 1.0 0.0 -it 04_res 1 282 1.0 0.0 -it 05_nuclear 1 282 1.0 0.0 -it 06_coal 1 282 1.0 0.0 +it 01_solar 1 282 0.0 1.0 +it 02_wind_on 1 282 0.0 1.0 +it 03_wind_off 1 282 0.0 1.0 +it 04_res 1 282 0.0 1.0 +it 05_nuclear 1 282 0.0 1.0 +it 06_coal 1 282 0.0 1.0 it 07_gas 1 282 0.0 0.0 it 08_non-res 1 282 0.0 0.0 it 09_hydro_pump 1 282 0.0 0.0 -it 01_solar 1 283 1.0 0.0 -it 02_wind_on 1 283 1.0 0.0 -it 03_wind_off 1 283 1.0 0.0 -it 04_res 1 283 1.0 0.0 -it 05_nuclear 1 283 1.0 0.0 -it 06_coal 1 283 1.0 0.0 +it 01_solar 1 283 0.0 1.0 +it 02_wind_on 1 283 0.0 1.0 +it 03_wind_off 1 283 0.0 1.0 +it 04_res 1 283 0.0 1.0 +it 05_nuclear 1 283 0.0 1.0 +it 06_coal 1 283 0.0 1.0 it 07_gas 1 283 0.0 0.0 it 08_non-res 1 283 0.0 0.0 it 09_hydro_pump 1 283 0.0 0.0 -it 01_solar 1 284 1.0 0.0 -it 02_wind_on 1 284 1.0 0.0 -it 03_wind_off 1 284 1.0 0.0 -it 04_res 1 284 1.0 0.0 -it 05_nuclear 1 284 1.0 0.0 -it 06_coal 1 284 1.0 0.0 +it 01_solar 1 284 0.0 1.0 +it 02_wind_on 1 284 0.0 1.0 +it 03_wind_off 1 284 0.0 1.0 +it 04_res 1 284 0.0 1.0 +it 05_nuclear 1 284 0.0 1.0 +it 06_coal 1 284 0.0 1.0 it 07_gas 1 284 0.0 0.0 it 08_non-res 1 284 0.0 0.0 it 09_hydro_pump 1 284 0.0 0.0 -it 01_solar 1 285 1.0 0.0 -it 02_wind_on 1 285 1.0 0.0 -it 03_wind_off 1 285 1.0 0.0 -it 04_res 1 285 1.0 0.0 -it 05_nuclear 1 285 1.0 0.0 -it 06_coal 1 285 1.0 0.0 +it 01_solar 1 285 0.0 1.0 +it 02_wind_on 1 285 0.0 1.0 +it 03_wind_off 1 285 0.0 1.0 +it 04_res 1 285 0.0 1.0 +it 05_nuclear 1 285 0.0 1.0 +it 06_coal 1 285 0.0 1.0 it 07_gas 1 285 0.0 0.0 it 08_non-res 1 285 0.0 0.0 it 09_hydro_pump 1 285 0.0 0.0 -it 01_solar 1 286 1.0 0.0 -it 02_wind_on 1 286 1.0 0.0 -it 03_wind_off 1 286 1.0 0.0 -it 04_res 1 286 1.0 0.0 -it 05_nuclear 1 286 1.0 0.0 -it 06_coal 1 286 1.0 0.0 +it 01_solar 1 286 0.0 1.0 +it 02_wind_on 1 286 0.0 1.0 +it 03_wind_off 1 286 0.0 1.0 +it 04_res 1 286 0.0 1.0 +it 05_nuclear 1 286 0.0 1.0 +it 06_coal 1 286 0.0 1.0 it 07_gas 1 286 0.0 0.0 it 08_non-res 1 286 0.0 0.0 it 09_hydro_pump 1 286 0.0 0.0 -it 01_solar 1 287 1.0 0.0 -it 02_wind_on 1 287 1.0 0.0 -it 03_wind_off 1 287 1.0 0.0 -it 04_res 1 287 1.0 0.0 -it 05_nuclear 1 287 1.0 0.0 -it 06_coal 1 287 1.0 0.0 +it 01_solar 1 287 0.0 1.0 +it 02_wind_on 1 287 0.0 1.0 +it 03_wind_off 1 287 0.0 1.0 +it 04_res 1 287 0.0 1.0 +it 05_nuclear 1 287 0.0 1.0 +it 06_coal 1 287 0.0 1.0 it 07_gas 1 287 0.0 0.0 it 08_non-res 1 287 0.0 0.0 it 09_hydro_pump 1 287 0.0 0.0 -it 01_solar 1 288 1.0 0.0 -it 02_wind_on 1 288 1.0 0.0 -it 03_wind_off 1 288 1.0 0.0 -it 04_res 1 288 1.0 0.0 -it 05_nuclear 1 288 1.0 0.0 -it 06_coal 1 288 1.0 0.0 +it 01_solar 1 288 0.0 1.0 +it 02_wind_on 1 288 0.0 1.0 +it 03_wind_off 1 288 0.0 1.0 +it 04_res 1 288 0.0 1.0 +it 05_nuclear 1 288 0.0 1.0 +it 06_coal 1 288 0.0 1.0 it 07_gas 1 288 0.0 0.0 it 08_non-res 1 288 0.0 0.0 it 09_hydro_pump 1 288 0.0 0.0 -it 01_solar 1 289 1.0 0.0 -it 02_wind_on 1 289 1.0 0.0 -it 03_wind_off 1 289 1.0 0.0 -it 04_res 1 289 1.0 0.0 -it 05_nuclear 1 289 1.0 0.0 -it 06_coal 1 289 1.0 0.0 +it 01_solar 1 289 0.0 1.0 +it 02_wind_on 1 289 0.0 1.0 +it 03_wind_off 1 289 0.0 1.0 +it 04_res 1 289 0.0 1.0 +it 05_nuclear 1 289 0.0 1.0 +it 06_coal 1 289 0.0 1.0 it 07_gas 1 289 0.0 0.0 it 08_non-res 1 289 0.0 0.0 it 09_hydro_pump 1 289 0.0 0.0 -it 01_solar 1 290 1.0 0.0 -it 02_wind_on 1 290 1.0 0.0 -it 03_wind_off 1 290 1.0 0.0 -it 04_res 1 290 1.0 0.0 -it 05_nuclear 1 290 1.0 0.0 -it 06_coal 1 290 1.0 0.0 -it 07_gas 1 290 1.0 0.0 +it 01_solar 1 290 0.0 1.0 +it 02_wind_on 1 290 0.0 1.0 +it 03_wind_off 1 290 0.0 1.0 +it 04_res 1 290 0.0 1.0 +it 05_nuclear 1 290 0.0 1.0 +it 06_coal 1 290 0.0 1.0 +it 07_gas 1 290 0.0 1.0 it 08_non-res 1 290 0.0 0.0 it 09_hydro_pump 1 290 0.0 0.0 -it 01_solar 1 291 1.0 0.0 -it 02_wind_on 1 291 1.0 0.0 -it 03_wind_off 1 291 1.0 0.0 -it 04_res 1 291 1.0 0.0 -it 05_nuclear 1 291 1.0 0.0 -it 06_coal 1 291 1.0 0.0 -it 07_gas 1 291 1.0 0.0 +it 01_solar 1 291 0.0 1.0 +it 02_wind_on 1 291 0.0 1.0 +it 03_wind_off 1 291 0.0 1.0 +it 04_res 1 291 0.0 1.0 +it 05_nuclear 1 291 0.0 1.0 +it 06_coal 1 291 0.0 1.0 +it 07_gas 1 291 0.0 1.0 it 08_non-res 1 291 0.0 0.0 it 09_hydro_pump 1 291 0.0 0.0 -it 01_solar 1 292 1.0 0.0 -it 02_wind_on 1 292 1.0 0.0 -it 03_wind_off 1 292 1.0 0.0 -it 04_res 1 292 1.0 0.0 -it 05_nuclear 1 292 1.0 0.0 -it 06_coal 1 292 1.0 0.0 -it 07_gas 1 292 1.0 0.0 +it 01_solar 1 292 0.0 1.0 +it 02_wind_on 1 292 0.0 1.0 +it 03_wind_off 1 292 0.0 1.0 +it 04_res 1 292 0.0 1.0 +it 05_nuclear 1 292 0.0 1.0 +it 06_coal 1 292 0.0 1.0 +it 07_gas 1 292 0.0 1.0 it 08_non-res 1 292 0.0 0.0 it 09_hydro_pump 1 292 0.0 0.0 -it 01_solar 1 293 1.0 0.0 -it 02_wind_on 1 293 1.0 0.0 -it 03_wind_off 1 293 1.0 0.0 -it 04_res 1 293 1.0 0.0 -it 05_nuclear 1 293 1.0 0.0 -it 06_coal 1 293 1.0 0.0 -it 07_gas 1 293 1.0 0.0 +it 01_solar 1 293 0.0 1.0 +it 02_wind_on 1 293 0.0 1.0 +it 03_wind_off 1 293 0.0 1.0 +it 04_res 1 293 0.0 1.0 +it 05_nuclear 1 293 0.0 1.0 +it 06_coal 1 293 0.0 1.0 +it 07_gas 1 293 0.0 1.0 it 08_non-res 1 293 0.0 0.0 it 09_hydro_pump 1 293 0.0 0.0 -it 01_solar 1 294 1.0 0.0 -it 02_wind_on 1 294 1.0 0.0 -it 03_wind_off 1 294 1.0 0.0 -it 04_res 1 294 1.0 0.0 -it 05_nuclear 1 294 1.0 0.0 -it 06_coal 1 294 1.0 0.0 -it 07_gas 1 294 1.0 0.0 +it 01_solar 1 294 0.0 1.0 +it 02_wind_on 1 294 0.0 1.0 +it 03_wind_off 1 294 0.0 1.0 +it 04_res 1 294 0.0 1.0 +it 05_nuclear 1 294 0.0 1.0 +it 06_coal 1 294 0.0 1.0 +it 07_gas 1 294 0.0 1.0 it 08_non-res 1 294 0.0 0.0 it 09_hydro_pump 1 294 0.0 0.0 -it 01_solar 1 295 1.0 0.0 -it 02_wind_on 1 295 1.0 0.0 -it 03_wind_off 1 295 1.0 0.0 -it 04_res 1 295 1.0 0.0 -it 05_nuclear 1 295 1.0 0.0 -it 06_coal 1 295 1.0 0.0 -it 07_gas 1 295 1.0 0.0 +it 01_solar 1 295 0.0 1.0 +it 02_wind_on 1 295 0.0 1.0 +it 03_wind_off 1 295 0.0 1.0 +it 04_res 1 295 0.0 1.0 +it 05_nuclear 1 295 0.0 1.0 +it 06_coal 1 295 0.0 1.0 +it 07_gas 1 295 0.0 1.0 it 08_non-res 1 295 0.0 0.0 it 09_hydro_pump 1 295 0.0 0.0 -it 01_solar 1 296 1.0 0.0 -it 02_wind_on 1 296 1.0 0.0 -it 03_wind_off 1 296 1.0 0.0 -it 04_res 1 296 1.0 0.0 -it 05_nuclear 1 296 1.0 0.0 -it 06_coal 1 296 1.0 0.0 -it 07_gas 1 296 1.0 0.0 +it 01_solar 1 296 0.0 1.0 +it 02_wind_on 1 296 0.0 1.0 +it 03_wind_off 1 296 0.0 1.0 +it 04_res 1 296 0.0 1.0 +it 05_nuclear 1 296 0.0 1.0 +it 06_coal 1 296 0.0 1.0 +it 07_gas 1 296 0.0 1.0 it 08_non-res 1 296 0.0 0.0 it 09_hydro_pump 1 296 0.0 0.0 -it 01_solar 1 297 1.0 0.0 -it 02_wind_on 1 297 1.0 0.0 -it 03_wind_off 1 297 1.0 0.0 -it 04_res 1 297 1.0 0.0 -it 05_nuclear 1 297 1.0 0.0 -it 06_coal 1 297 1.0 0.0 -it 07_gas 1 297 1.0 0.0 +it 01_solar 1 297 0.0 1.0 +it 02_wind_on 1 297 0.0 1.0 +it 03_wind_off 1 297 0.0 1.0 +it 04_res 1 297 0.0 1.0 +it 05_nuclear 1 297 0.0 1.0 +it 06_coal 1 297 0.0 1.0 +it 07_gas 1 297 0.0 1.0 it 08_non-res 1 297 0.0 0.0 it 09_hydro_pump 1 297 0.0 0.0 -it 01_solar 1 298 1.0 0.0 -it 02_wind_on 1 298 1.0 0.0 -it 03_wind_off 1 298 1.0 0.0 -it 04_res 1 298 1.0 0.0 -it 05_nuclear 1 298 1.0 0.0 -it 06_coal 1 298 1.0 0.0 -it 07_gas 1 298 1.0 0.0 +it 01_solar 1 298 0.0 1.0 +it 02_wind_on 1 298 0.0 1.0 +it 03_wind_off 1 298 0.0 1.0 +it 04_res 1 298 0.0 1.0 +it 05_nuclear 1 298 0.0 1.0 +it 06_coal 1 298 0.0 1.0 +it 07_gas 1 298 0.0 1.0 it 08_non-res 1 298 0.0 0.0 it 09_hydro_pump 1 298 0.0 0.0 -it 01_solar 1 299 1.0 0.0 -it 02_wind_on 1 299 1.0 0.0 -it 03_wind_off 1 299 1.0 0.0 -it 04_res 1 299 1.0 0.0 -it 05_nuclear 1 299 1.0 0.0 -it 06_coal 1 299 1.0 0.0 -it 07_gas 1 299 1.0 0.0 +it 01_solar 1 299 0.0 1.0 +it 02_wind_on 1 299 0.0 1.0 +it 03_wind_off 1 299 0.0 1.0 +it 04_res 1 299 0.0 1.0 +it 05_nuclear 1 299 0.0 1.0 +it 06_coal 1 299 0.0 1.0 +it 07_gas 1 299 0.0 1.0 it 08_non-res 1 299 0.0 0.0 it 09_hydro_pump 1 299 0.0 0.0 -it 01_solar 1 300 1.0 0.0 -it 02_wind_on 1 300 1.0 0.0 -it 03_wind_off 1 300 1.0 0.0 -it 04_res 1 300 1.0 0.0 -it 05_nuclear 1 300 1.0 0.0 -it 06_coal 1 300 1.0 0.0 -it 07_gas 1 300 1.0 0.0 +it 01_solar 1 300 0.0 1.0 +it 02_wind_on 1 300 0.0 1.0 +it 03_wind_off 1 300 0.0 1.0 +it 04_res 1 300 0.0 1.0 +it 05_nuclear 1 300 0.0 1.0 +it 06_coal 1 300 0.0 1.0 +it 07_gas 1 300 0.0 1.0 it 08_non-res 1 300 0.0 0.0 it 09_hydro_pump 1 300 0.0 0.0 -it 01_solar 1 301 1.0 0.0 -it 02_wind_on 1 301 1.0 0.0 -it 03_wind_off 1 301 1.0 0.0 -it 04_res 1 301 1.0 0.0 -it 05_nuclear 1 301 1.0 0.0 -it 06_coal 1 301 1.0 0.0 -it 07_gas 1 301 1.0 0.0 +it 01_solar 1 301 0.0 1.0 +it 02_wind_on 1 301 0.0 1.0 +it 03_wind_off 1 301 0.0 1.0 +it 04_res 1 301 0.0 1.0 +it 05_nuclear 1 301 0.0 1.0 +it 06_coal 1 301 0.0 1.0 +it 07_gas 1 301 0.0 1.0 it 08_non-res 1 301 0.0 0.0 it 09_hydro_pump 1 301 0.0 0.0 -it 01_solar 1 302 1.0 0.0 -it 02_wind_on 1 302 1.0 0.0 -it 03_wind_off 1 302 1.0 0.0 -it 04_res 1 302 1.0 0.0 -it 05_nuclear 1 302 1.0 0.0 -it 06_coal 1 302 1.0 0.0 -it 07_gas 1 302 1.0 0.0 +it 01_solar 1 302 0.0 1.0 +it 02_wind_on 1 302 0.0 1.0 +it 03_wind_off 1 302 0.0 1.0 +it 04_res 1 302 0.0 1.0 +it 05_nuclear 1 302 0.0 1.0 +it 06_coal 1 302 0.0 1.0 +it 07_gas 1 302 0.0 1.0 it 08_non-res 1 302 0.0 0.0 it 09_hydro_pump 1 302 0.0 0.0 -it 01_solar 1 303 1.0 0.0 -it 02_wind_on 1 303 1.0 0.0 -it 03_wind_off 1 303 1.0 0.0 -it 04_res 1 303 1.0 0.0 -it 05_nuclear 1 303 1.0 0.0 -it 06_coal 1 303 1.0 0.0 -it 07_gas 1 303 1.0 0.0 +it 01_solar 1 303 0.0 1.0 +it 02_wind_on 1 303 0.0 1.0 +it 03_wind_off 1 303 0.0 1.0 +it 04_res 1 303 0.0 1.0 +it 05_nuclear 1 303 0.0 1.0 +it 06_coal 1 303 0.0 1.0 +it 07_gas 1 303 0.0 1.0 it 08_non-res 1 303 0.0 0.0 it 09_hydro_pump 1 303 0.0 0.0 -it 01_solar 1 304 1.0 0.0 -it 02_wind_on 1 304 1.0 0.0 -it 03_wind_off 1 304 1.0 0.0 -it 04_res 1 304 1.0 0.0 -it 05_nuclear 1 304 1.0 0.0 -it 06_coal 1 304 1.0 0.0 -it 07_gas 1 304 1.0 0.0 +it 01_solar 1 304 0.0 1.0 +it 02_wind_on 1 304 0.0 1.0 +it 03_wind_off 1 304 0.0 1.0 +it 04_res 1 304 0.0 1.0 +it 05_nuclear 1 304 0.0 1.0 +it 06_coal 1 304 0.0 1.0 +it 07_gas 1 304 0.0 1.0 it 08_non-res 1 304 0.0 0.0 it 09_hydro_pump 1 304 0.0 0.0 -it 01_solar 1 305 1.0 0.0 -it 02_wind_on 1 305 1.0 0.0 -it 03_wind_off 1 305 1.0 0.0 -it 04_res 1 305 1.0 0.0 -it 05_nuclear 1 305 1.0 0.0 -it 06_coal 1 305 1.0 0.0 -it 07_gas 1 305 1.0 0.0 +it 01_solar 1 305 0.0 1.0 +it 02_wind_on 1 305 0.0 1.0 +it 03_wind_off 1 305 0.0 1.0 +it 04_res 1 305 0.0 1.0 +it 05_nuclear 1 305 0.0 1.0 +it 06_coal 1 305 0.0 1.0 +it 07_gas 1 305 0.0 1.0 it 08_non-res 1 305 0.0 0.0 it 09_hydro_pump 1 305 0.0 0.0 -it 01_solar 1 306 1.0 0.0 -it 02_wind_on 1 306 1.0 0.0 -it 03_wind_off 1 306 1.0 0.0 -it 04_res 1 306 1.0 0.0 -it 05_nuclear 1 306 1.0 0.0 -it 06_coal 1 306 1.0 0.0 -it 07_gas 1 306 1.0 0.0 +it 01_solar 1 306 0.0 1.0 +it 02_wind_on 1 306 0.0 1.0 +it 03_wind_off 1 306 0.0 1.0 +it 04_res 1 306 0.0 1.0 +it 05_nuclear 1 306 0.0 1.0 +it 06_coal 1 306 0.0 1.0 +it 07_gas 1 306 0.0 1.0 it 08_non-res 1 306 0.0 0.0 it 09_hydro_pump 1 306 0.0 0.0 -it 01_solar 1 307 1.0 0.0 -it 02_wind_on 1 307 1.0 0.0 -it 03_wind_off 1 307 1.0 0.0 -it 04_res 1 307 1.0 0.0 -it 05_nuclear 1 307 1.0 0.0 -it 06_coal 1 307 1.0 0.0 -it 07_gas 1 307 1.0 0.0 +it 01_solar 1 307 0.0 1.0 +it 02_wind_on 1 307 0.0 1.0 +it 03_wind_off 1 307 0.0 1.0 +it 04_res 1 307 0.0 1.0 +it 05_nuclear 1 307 0.0 1.0 +it 06_coal 1 307 0.0 1.0 +it 07_gas 1 307 0.0 1.0 it 08_non-res 1 307 0.0 0.0 it 09_hydro_pump 1 307 0.0 0.0 -it 01_solar 1 308 1.0 0.0 -it 02_wind_on 1 308 1.0 0.0 -it 03_wind_off 1 308 1.0 0.0 -it 04_res 1 308 1.0 0.0 -it 05_nuclear 1 308 1.0 0.0 -it 06_coal 1 308 1.0 0.0 -it 07_gas 1 308 1.0 0.0 +it 01_solar 1 308 0.0 1.0 +it 02_wind_on 1 308 0.0 1.0 +it 03_wind_off 1 308 0.0 1.0 +it 04_res 1 308 0.0 1.0 +it 05_nuclear 1 308 0.0 1.0 +it 06_coal 1 308 0.0 1.0 +it 07_gas 1 308 0.0 1.0 it 08_non-res 1 308 0.0 0.0 it 09_hydro_pump 1 308 0.0 0.0 -it 01_solar 1 309 1.0 0.0 -it 02_wind_on 1 309 1.0 0.0 -it 03_wind_off 1 309 1.0 0.0 -it 04_res 1 309 1.0 0.0 -it 05_nuclear 1 309 1.0 0.0 -it 06_coal 1 309 1.0 0.0 -it 07_gas 1 309 1.0 0.0 +it 01_solar 1 309 0.0 1.0 +it 02_wind_on 1 309 0.0 1.0 +it 03_wind_off 1 309 0.0 1.0 +it 04_res 1 309 0.0 1.0 +it 05_nuclear 1 309 0.0 1.0 +it 06_coal 1 309 0.0 1.0 +it 07_gas 1 309 0.0 1.0 it 08_non-res 1 309 0.0 0.0 it 09_hydro_pump 1 309 0.0 0.0 -it 01_solar 1 310 1.0 0.0 -it 02_wind_on 1 310 1.0 0.0 -it 03_wind_off 1 310 1.0 0.0 -it 04_res 1 310 1.0 0.0 -it 05_nuclear 1 310 1.0 0.0 -it 06_coal 1 310 1.0 0.0 -it 07_gas 1 310 1.0 0.0 -it 08_non-res 1 310 1.0 0.0 +it 01_solar 1 310 0.0 1.0 +it 02_wind_on 1 310 0.0 1.0 +it 03_wind_off 1 310 0.0 1.0 +it 04_res 1 310 0.0 1.0 +it 05_nuclear 1 310 0.0 1.0 +it 06_coal 1 310 0.0 1.0 +it 07_gas 1 310 0.0 1.0 +it 08_non-res 1 310 0.0 1.0 it 09_hydro_pump 1 310 0.0 0.0 -it 01_solar 1 311 1.0 0.0 -it 02_wind_on 1 311 1.0 0.0 -it 03_wind_off 1 311 1.0 0.0 -it 04_res 1 311 1.0 0.0 -it 05_nuclear 1 311 1.0 0.0 -it 06_coal 1 311 1.0 0.0 -it 07_gas 1 311 1.0 0.0 -it 08_non-res 1 311 1.0 0.0 +it 01_solar 1 311 0.0 1.0 +it 02_wind_on 1 311 0.0 1.0 +it 03_wind_off 1 311 0.0 1.0 +it 04_res 1 311 0.0 1.0 +it 05_nuclear 1 311 0.0 1.0 +it 06_coal 1 311 0.0 1.0 +it 07_gas 1 311 0.0 1.0 +it 08_non-res 1 311 0.0 1.0 it 09_hydro_pump 1 311 0.0 0.0 -it 01_solar 1 312 1.0 0.0 -it 02_wind_on 1 312 1.0 0.0 -it 03_wind_off 1 312 1.0 0.0 -it 04_res 1 312 1.0 0.0 -it 05_nuclear 1 312 1.0 0.0 -it 06_coal 1 312 1.0 0.0 -it 07_gas 1 312 1.0 0.0 -it 08_non-res 1 312 1.0 0.0 +it 01_solar 1 312 0.0 1.0 +it 02_wind_on 1 312 0.0 1.0 +it 03_wind_off 1 312 0.0 1.0 +it 04_res 1 312 0.0 1.0 +it 05_nuclear 1 312 0.0 1.0 +it 06_coal 1 312 0.0 1.0 +it 07_gas 1 312 0.0 1.0 +it 08_non-res 1 312 0.0 1.0 it 09_hydro_pump 1 312 0.0 0.0 -it 01_solar 1 313 1.0 0.0 -it 02_wind_on 1 313 1.0 0.0 -it 03_wind_off 1 313 1.0 0.0 -it 04_res 1 313 1.0 0.0 -it 05_nuclear 1 313 1.0 0.0 -it 06_coal 1 313 1.0 0.0 -it 07_gas 1 313 1.0 0.0 -it 08_non-res 1 313 1.0 0.0 +it 01_solar 1 313 0.0 1.0 +it 02_wind_on 1 313 0.0 1.0 +it 03_wind_off 1 313 0.0 1.0 +it 04_res 1 313 0.0 1.0 +it 05_nuclear 1 313 0.0 1.0 +it 06_coal 1 313 0.0 1.0 +it 07_gas 1 313 0.0 1.0 +it 08_non-res 1 313 0.0 1.0 it 09_hydro_pump 1 313 0.0 0.0 -it 01_solar 1 314 1.0 0.0 -it 02_wind_on 1 314 1.0 0.0 -it 03_wind_off 1 314 1.0 0.0 -it 04_res 1 314 1.0 0.0 -it 05_nuclear 1 314 1.0 0.0 -it 06_coal 1 314 1.0 0.0 -it 07_gas 1 314 1.0 0.0 -it 08_non-res 1 314 1.0 0.0 +it 01_solar 1 314 0.0 1.0 +it 02_wind_on 1 314 0.0 1.0 +it 03_wind_off 1 314 0.0 1.0 +it 04_res 1 314 0.0 1.0 +it 05_nuclear 1 314 0.0 1.0 +it 06_coal 1 314 0.0 1.0 +it 07_gas 1 314 0.0 1.0 +it 08_non-res 1 314 0.0 1.0 it 09_hydro_pump 1 314 0.0 0.0 -it 01_solar 1 315 1.0 0.0 -it 02_wind_on 1 315 1.0 0.0 -it 03_wind_off 1 315 1.0 0.0 -it 04_res 1 315 1.0 0.0 -it 05_nuclear 1 315 1.0 0.0 -it 06_coal 1 315 1.0 0.0 -it 07_gas 1 315 1.0 0.0 -it 08_non-res 1 315 1.0 0.0 +it 01_solar 1 315 0.0 1.0 +it 02_wind_on 1 315 0.0 1.0 +it 03_wind_off 1 315 0.0 1.0 +it 04_res 1 315 0.0 1.0 +it 05_nuclear 1 315 0.0 1.0 +it 06_coal 1 315 0.0 1.0 +it 07_gas 1 315 0.0 1.0 +it 08_non-res 1 315 0.0 1.0 it 09_hydro_pump 1 315 0.0 0.0 -it 01_solar 1 316 1.0 0.0 -it 02_wind_on 1 316 1.0 0.0 -it 03_wind_off 1 316 1.0 0.0 -it 04_res 1 316 1.0 0.0 -it 05_nuclear 1 316 1.0 0.0 -it 06_coal 1 316 1.0 0.0 -it 07_gas 1 316 1.0 0.0 -it 08_non-res 1 316 1.0 0.0 +it 01_solar 1 316 0.0 1.0 +it 02_wind_on 1 316 0.0 1.0 +it 03_wind_off 1 316 0.0 1.0 +it 04_res 1 316 0.0 1.0 +it 05_nuclear 1 316 0.0 1.0 +it 06_coal 1 316 0.0 1.0 +it 07_gas 1 316 0.0 1.0 +it 08_non-res 1 316 0.0 1.0 it 09_hydro_pump 1 316 0.0 0.0 -it 01_solar 1 317 1.0 0.0 -it 02_wind_on 1 317 1.0 0.0 -it 03_wind_off 1 317 1.0 0.0 -it 04_res 1 317 1.0 0.0 -it 05_nuclear 1 317 1.0 0.0 -it 06_coal 1 317 1.0 0.0 -it 07_gas 1 317 1.0 0.0 -it 08_non-res 1 317 1.0 0.0 +it 01_solar 1 317 0.0 1.0 +it 02_wind_on 1 317 0.0 1.0 +it 03_wind_off 1 317 0.0 1.0 +it 04_res 1 317 0.0 1.0 +it 05_nuclear 1 317 0.0 1.0 +it 06_coal 1 317 0.0 1.0 +it 07_gas 1 317 0.0 1.0 +it 08_non-res 1 317 0.0 1.0 it 09_hydro_pump 1 317 0.0 0.0 -it 01_solar 1 318 1.0 0.0 -it 02_wind_on 1 318 1.0 0.0 -it 03_wind_off 1 318 1.0 0.0 -it 04_res 1 318 1.0 0.0 -it 05_nuclear 1 318 1.0 0.0 -it 06_coal 1 318 1.0 0.0 -it 07_gas 1 318 1.0 0.0 -it 08_non-res 1 318 1.0 0.0 +it 01_solar 1 318 0.0 1.0 +it 02_wind_on 1 318 0.0 1.0 +it 03_wind_off 1 318 0.0 1.0 +it 04_res 1 318 0.0 1.0 +it 05_nuclear 1 318 0.0 1.0 +it 06_coal 1 318 0.0 1.0 +it 07_gas 1 318 0.0 1.0 +it 08_non-res 1 318 0.0 1.0 it 09_hydro_pump 1 318 0.0 0.0 -it 01_solar 1 319 1.0 0.0 -it 02_wind_on 1 319 1.0 0.0 -it 03_wind_off 1 319 1.0 0.0 -it 04_res 1 319 1.0 0.0 -it 05_nuclear 1 319 1.0 0.0 -it 06_coal 1 319 1.0 0.0 -it 07_gas 1 319 1.0 0.0 -it 08_non-res 1 319 1.0 0.0 +it 01_solar 1 319 0.0 1.0 +it 02_wind_on 1 319 0.0 1.0 +it 03_wind_off 1 319 0.0 1.0 +it 04_res 1 319 0.0 1.0 +it 05_nuclear 1 319 0.0 1.0 +it 06_coal 1 319 0.0 1.0 +it 07_gas 1 319 0.0 1.0 +it 08_non-res 1 319 0.0 1.0 it 09_hydro_pump 1 319 0.0 0.0 -it 01_solar 1 320 1.0 0.0 -it 02_wind_on 1 320 1.0 0.0 -it 03_wind_off 1 320 1.0 0.0 -it 04_res 1 320 1.0 0.0 -it 05_nuclear 1 320 1.0 0.0 -it 06_coal 1 320 1.0 0.0 -it 07_gas 1 320 1.0 0.0 -it 08_non-res 1 320 1.0 0.0 +it 01_solar 1 320 0.0 1.0 +it 02_wind_on 1 320 0.0 1.0 +it 03_wind_off 1 320 0.0 1.0 +it 04_res 1 320 0.0 1.0 +it 05_nuclear 1 320 0.0 1.0 +it 06_coal 1 320 0.0 1.0 +it 07_gas 1 320 0.0 1.0 +it 08_non-res 1 320 0.0 1.0 it 09_hydro_pump 1 320 0.0 0.0 -it 01_solar 1 321 1.0 0.0 -it 02_wind_on 1 321 1.0 0.0 -it 03_wind_off 1 321 1.0 0.0 -it 04_res 1 321 1.0 0.0 -it 05_nuclear 1 321 1.0 0.0 -it 06_coal 1 321 1.0 0.0 -it 07_gas 1 321 1.0 0.0 -it 08_non-res 1 321 1.0 0.0 +it 01_solar 1 321 0.0 1.0 +it 02_wind_on 1 321 0.0 1.0 +it 03_wind_off 1 321 0.0 1.0 +it 04_res 1 321 0.0 1.0 +it 05_nuclear 1 321 0.0 1.0 +it 06_coal 1 321 0.0 1.0 +it 07_gas 1 321 0.0 1.0 +it 08_non-res 1 321 0.0 1.0 it 09_hydro_pump 1 321 0.0 0.0 -it 01_solar 1 322 1.0 0.0 -it 02_wind_on 1 322 1.0 0.0 -it 03_wind_off 1 322 1.0 0.0 -it 04_res 1 322 1.0 0.0 -it 05_nuclear 1 322 1.0 0.0 -it 06_coal 1 322 1.0 0.0 -it 07_gas 1 322 1.0 0.0 -it 08_non-res 1 322 1.0 0.0 +it 01_solar 1 322 0.0 1.0 +it 02_wind_on 1 322 0.0 1.0 +it 03_wind_off 1 322 0.0 1.0 +it 04_res 1 322 0.0 1.0 +it 05_nuclear 1 322 0.0 1.0 +it 06_coal 1 322 0.0 1.0 +it 07_gas 1 322 0.0 1.0 +it 08_non-res 1 322 0.0 1.0 it 09_hydro_pump 1 322 0.0 0.0 -it 01_solar 1 323 1.0 0.0 -it 02_wind_on 1 323 1.0 0.0 -it 03_wind_off 1 323 1.0 0.0 -it 04_res 1 323 1.0 0.0 -it 05_nuclear 1 323 1.0 0.0 -it 06_coal 1 323 1.0 0.0 -it 07_gas 1 323 1.0 0.0 -it 08_non-res 1 323 1.0 0.0 +it 01_solar 1 323 0.0 1.0 +it 02_wind_on 1 323 0.0 1.0 +it 03_wind_off 1 323 0.0 1.0 +it 04_res 1 323 0.0 1.0 +it 05_nuclear 1 323 0.0 1.0 +it 06_coal 1 323 0.0 1.0 +it 07_gas 1 323 0.0 1.0 +it 08_non-res 1 323 0.0 1.0 it 09_hydro_pump 1 323 0.0 0.0 -it 01_solar 1 324 1.0 0.0 -it 02_wind_on 1 324 1.0 0.0 -it 03_wind_off 1 324 1.0 0.0 -it 04_res 1 324 1.0 0.0 -it 05_nuclear 1 324 1.0 0.0 -it 06_coal 1 324 1.0 0.0 -it 07_gas 1 324 1.0 0.0 -it 08_non-res 1 324 1.0 0.0 +it 01_solar 1 324 0.0 1.0 +it 02_wind_on 1 324 0.0 1.0 +it 03_wind_off 1 324 0.0 1.0 +it 04_res 1 324 0.0 1.0 +it 05_nuclear 1 324 0.0 1.0 +it 06_coal 1 324 0.0 1.0 +it 07_gas 1 324 0.0 1.0 +it 08_non-res 1 324 0.0 1.0 it 09_hydro_pump 1 324 0.0 0.0 -it 01_solar 1 325 1.0 0.0 -it 02_wind_on 1 325 1.0 0.0 -it 03_wind_off 1 325 1.0 0.0 -it 04_res 1 325 1.0 0.0 -it 05_nuclear 1 325 1.0 0.0 -it 06_coal 1 325 1.0 0.0 -it 07_gas 1 325 1.0 0.0 -it 08_non-res 1 325 1.0 0.0 +it 01_solar 1 325 0.0 1.0 +it 02_wind_on 1 325 0.0 1.0 +it 03_wind_off 1 325 0.0 1.0 +it 04_res 1 325 0.0 1.0 +it 05_nuclear 1 325 0.0 1.0 +it 06_coal 1 325 0.0 1.0 +it 07_gas 1 325 0.0 1.0 +it 08_non-res 1 325 0.0 1.0 it 09_hydro_pump 1 325 0.0 0.0 -it 01_solar 1 326 1.0 0.0 -it 02_wind_on 1 326 1.0 0.0 -it 03_wind_off 1 326 1.0 0.0 -it 04_res 1 326 1.0 0.0 -it 05_nuclear 1 326 1.0 0.0 -it 06_coal 1 326 1.0 0.0 -it 07_gas 1 326 1.0 0.0 -it 08_non-res 1 326 1.0 0.0 +it 01_solar 1 326 0.0 1.0 +it 02_wind_on 1 326 0.0 1.0 +it 03_wind_off 1 326 0.0 1.0 +it 04_res 1 326 0.0 1.0 +it 05_nuclear 1 326 0.0 1.0 +it 06_coal 1 326 0.0 1.0 +it 07_gas 1 326 0.0 1.0 +it 08_non-res 1 326 0.0 1.0 it 09_hydro_pump 1 326 0.0 0.0 -it 01_solar 1 327 1.0 0.0 -it 02_wind_on 1 327 1.0 0.0 -it 03_wind_off 1 327 1.0 0.0 -it 04_res 1 327 1.0 0.0 -it 05_nuclear 1 327 1.0 0.0 -it 06_coal 1 327 1.0 0.0 -it 07_gas 1 327 1.0 0.0 -it 08_non-res 1 327 1.0 0.0 +it 01_solar 1 327 0.0 1.0 +it 02_wind_on 1 327 0.0 1.0 +it 03_wind_off 1 327 0.0 1.0 +it 04_res 1 327 0.0 1.0 +it 05_nuclear 1 327 0.0 1.0 +it 06_coal 1 327 0.0 1.0 +it 07_gas 1 327 0.0 1.0 +it 08_non-res 1 327 0.0 1.0 it 09_hydro_pump 1 327 0.0 0.0 -it 01_solar 1 328 1.0 0.0 -it 02_wind_on 1 328 1.0 0.0 -it 03_wind_off 1 328 1.0 0.0 -it 04_res 1 328 1.0 0.0 -it 05_nuclear 1 328 1.0 0.0 -it 06_coal 1 328 1.0 0.0 -it 07_gas 1 328 1.0 0.0 -it 08_non-res 1 328 1.0 0.0 +it 01_solar 1 328 0.0 1.0 +it 02_wind_on 1 328 0.0 1.0 +it 03_wind_off 1 328 0.0 1.0 +it 04_res 1 328 0.0 1.0 +it 05_nuclear 1 328 0.0 1.0 +it 06_coal 1 328 0.0 1.0 +it 07_gas 1 328 0.0 1.0 +it 08_non-res 1 328 0.0 1.0 it 09_hydro_pump 1 328 0.0 0.0 -it 01_solar 1 329 1.0 0.0 -it 02_wind_on 1 329 1.0 0.0 -it 03_wind_off 1 329 1.0 0.0 -it 04_res 1 329 1.0 0.0 -it 05_nuclear 1 329 1.0 0.0 -it 06_coal 1 329 1.0 0.0 -it 07_gas 1 329 1.0 0.0 -it 08_non-res 1 329 1.0 0.0 +it 01_solar 1 329 0.0 1.0 +it 02_wind_on 1 329 0.0 1.0 +it 03_wind_off 1 329 0.0 1.0 +it 04_res 1 329 0.0 1.0 +it 05_nuclear 1 329 0.0 1.0 +it 06_coal 1 329 0.0 1.0 +it 07_gas 1 329 0.0 1.0 +it 08_non-res 1 329 0.0 1.0 it 09_hydro_pump 1 329 0.0 0.0 -it 01_solar 1 330 1.0 0.0 -it 02_wind_on 1 330 1.0 0.0 -it 03_wind_off 1 330 1.0 0.0 -it 04_res 1 330 1.0 0.0 -it 05_nuclear 1 330 1.0 0.0 -it 06_coal 1 330 1.0 0.0 -it 07_gas 1 330 1.0 0.0 -it 08_non-res 1 330 1.0 0.0 -it 09_hydro_pump 1 330 1.0 0.0 -it 01_solar 1 331 1.0 0.0 -it 02_wind_on 1 331 1.0 0.0 -it 03_wind_off 1 331 1.0 0.0 -it 04_res 1 331 1.0 0.0 -it 05_nuclear 1 331 1.0 0.0 -it 06_coal 1 331 1.0 0.0 -it 07_gas 1 331 1.0 0.0 -it 08_non-res 1 331 1.0 0.0 -it 09_hydro_pump 1 331 1.0 0.0 -it 01_solar 1 332 1.0 0.0 -it 02_wind_on 1 332 1.0 0.0 -it 03_wind_off 1 332 1.0 0.0 -it 04_res 1 332 1.0 0.0 -it 05_nuclear 1 332 1.0 0.0 -it 06_coal 1 332 1.0 0.0 -it 07_gas 1 332 1.0 0.0 -it 08_non-res 1 332 1.0 0.0 -it 09_hydro_pump 1 332 1.0 0.0 -it 01_solar 1 333 1.0 0.0 -it 02_wind_on 1 333 1.0 0.0 -it 03_wind_off 1 333 1.0 0.0 -it 04_res 1 333 1.0 0.0 -it 05_nuclear 1 333 1.0 0.0 -it 06_coal 1 333 1.0 0.0 -it 07_gas 1 333 1.0 0.0 -it 08_non-res 1 333 1.0 0.0 -it 09_hydro_pump 1 333 1.0 0.0 -it 01_solar 1 334 1.0 0.0 -it 02_wind_on 1 334 1.0 0.0 -it 03_wind_off 1 334 1.0 0.0 -it 04_res 1 334 1.0 0.0 -it 05_nuclear 1 334 1.0 0.0 -it 06_coal 1 334 1.0 0.0 -it 07_gas 1 334 1.0 0.0 -it 08_non-res 1 334 1.0 0.0 -it 09_hydro_pump 1 334 1.0 0.0 -it 01_solar 1 335 1.0 0.0 -it 02_wind_on 1 335 1.0 0.0 -it 03_wind_off 1 335 1.0 0.0 -it 04_res 1 335 1.0 0.0 -it 05_nuclear 1 335 1.0 0.0 -it 06_coal 1 335 1.0 0.0 -it 07_gas 1 335 1.0 0.0 -it 08_non-res 1 335 1.0 0.0 -it 09_hydro_pump 1 335 1.0 0.0 -it 01_solar 1 336 1.0 0.0 -it 02_wind_on 1 336 1.0 0.0 -it 03_wind_off 1 336 1.0 0.0 -it 04_res 1 336 1.0 0.0 -it 05_nuclear 1 336 1.0 0.0 -it 06_coal 1 336 1.0 0.0 -it 07_gas 1 336 1.0 0.0 -it 08_non-res 1 336 1.0 0.0 -it 09_hydro_pump 1 336 1.0 0.0 +it 01_solar 1 330 0.0 1.0 +it 02_wind_on 1 330 0.0 1.0 +it 03_wind_off 1 330 0.0 1.0 +it 04_res 1 330 0.0 1.0 +it 05_nuclear 1 330 0.0 1.0 +it 06_coal 1 330 0.0 1.0 +it 07_gas 1 330 0.0 1.0 +it 08_non-res 1 330 0.0 1.0 +it 09_hydro_pump 1 330 0.0 1.0 +it 01_solar 1 331 0.0 1.0 +it 02_wind_on 1 331 0.0 1.0 +it 03_wind_off 1 331 0.0 1.0 +it 04_res 1 331 0.0 1.0 +it 05_nuclear 1 331 0.0 1.0 +it 06_coal 1 331 0.0 1.0 +it 07_gas 1 331 0.0 1.0 +it 08_non-res 1 331 0.0 1.0 +it 09_hydro_pump 1 331 0.0 1.0 +it 01_solar 1 332 0.0 1.0 +it 02_wind_on 1 332 0.0 1.0 +it 03_wind_off 1 332 0.0 1.0 +it 04_res 1 332 0.0 1.0 +it 05_nuclear 1 332 0.0 1.0 +it 06_coal 1 332 0.0 1.0 +it 07_gas 1 332 0.0 1.0 +it 08_non-res 1 332 0.0 1.0 +it 09_hydro_pump 1 332 0.0 1.0 +it 01_solar 1 333 0.0 1.0 +it 02_wind_on 1 333 0.0 1.0 +it 03_wind_off 1 333 0.0 1.0 +it 04_res 1 333 0.0 1.0 +it 05_nuclear 1 333 0.0 1.0 +it 06_coal 1 333 0.0 1.0 +it 07_gas 1 333 0.0 1.0 +it 08_non-res 1 333 0.0 1.0 +it 09_hydro_pump 1 333 0.0 1.0 +it 01_solar 1 334 0.0 1.0 +it 02_wind_on 1 334 0.0 1.0 +it 03_wind_off 1 334 0.0 1.0 +it 04_res 1 334 0.0 1.0 +it 05_nuclear 1 334 0.0 1.0 +it 06_coal 1 334 0.0 1.0 +it 07_gas 1 334 0.0 1.0 +it 08_non-res 1 334 0.0 1.0 +it 09_hydro_pump 1 334 0.0 1.0 +it 01_solar 1 335 0.0 1.0 +it 02_wind_on 1 335 0.0 1.0 +it 03_wind_off 1 335 0.0 1.0 +it 04_res 1 335 0.0 1.0 +it 05_nuclear 1 335 0.0 1.0 +it 06_coal 1 335 0.0 1.0 +it 07_gas 1 335 0.0 1.0 +it 08_non-res 1 335 0.0 1.0 +it 09_hydro_pump 1 335 0.0 1.0 +it 01_solar 1 336 0.0 1.0 +it 02_wind_on 1 336 0.0 1.0 +it 03_wind_off 1 336 0.0 1.0 +it 04_res 1 336 0.0 1.0 +it 05_nuclear 1 336 0.0 1.0 +it 06_coal 1 336 0.0 1.0 +it 07_gas 1 336 0.0 1.0 +it 08_non-res 1 336 0.0 1.0 +it 09_hydro_pump 1 336 0.0 1.0 de 01_solar 2 1 0.0 0.0 de 02_wind_on 2 1 0.0 0.0 de 03_wind_off 2 1 0.0 0.0 @@ -12104,7 +12104,7 @@ de 06_coal 2 1 0.0 0.0 de 07_gas 2 1 0.0 0.0 de 08_non-res 2 1 0.0 0.0 de 09_hydro_pump 2 1 0.0 0.0 -de 01_solar 2 2 1.0 0.0 +de 01_solar 2 2 0.0 1.0 de 02_wind_on 2 2 0.0 0.0 de 03_wind_off 2 2 0.0 0.0 de 04_res 2 2 0.0 0.0 @@ -12113,7 +12113,7 @@ de 06_coal 2 2 0.0 0.0 de 07_gas 2 2 0.0 0.0 de 08_non-res 2 2 0.0 0.0 de 09_hydro_pump 2 2 0.0 0.0 -de 01_solar 2 3 1.0 0.0 +de 01_solar 2 3 0.0 1.0 de 02_wind_on 2 3 0.0 0.0 de 03_wind_off 2 3 0.0 0.0 de 04_res 2 3 0.0 0.0 @@ -12122,7 +12122,7 @@ de 06_coal 2 3 0.0 0.0 de 07_gas 2 3 0.0 0.0 de 08_non-res 2 3 0.0 0.0 de 09_hydro_pump 2 3 0.0 0.0 -de 01_solar 2 4 1.0 0.0 +de 01_solar 2 4 0.0 1.0 de 02_wind_on 2 4 0.0 0.0 de 03_wind_off 2 4 0.0 0.0 de 04_res 2 4 0.0 0.0 @@ -12131,7 +12131,7 @@ de 06_coal 2 4 0.0 0.0 de 07_gas 2 4 0.0 0.0 de 08_non-res 2 4 0.0 0.0 de 09_hydro_pump 2 4 0.0 0.0 -de 01_solar 2 5 1.0 0.0 +de 01_solar 2 5 0.0 1.0 de 02_wind_on 2 5 0.0 0.0 de 03_wind_off 2 5 0.0 0.0 de 04_res 2 5 0.0 0.0 @@ -12140,7 +12140,7 @@ de 06_coal 2 5 0.0 0.0 de 07_gas 2 5 0.0 0.0 de 08_non-res 2 5 0.0 0.0 de 09_hydro_pump 2 5 0.0 0.0 -de 01_solar 2 6 1.0 0.0 +de 01_solar 2 6 0.0 1.0 de 02_wind_on 2 6 0.0 0.0 de 03_wind_off 2 6 0.0 0.0 de 04_res 2 6 0.0 0.0 @@ -12149,7 +12149,7 @@ de 06_coal 2 6 0.0 0.0 de 07_gas 2 6 0.0 0.0 de 08_non-res 2 6 0.0 0.0 de 09_hydro_pump 2 6 0.0 0.0 -de 01_solar 2 7 1.0 0.0 +de 01_solar 2 7 0.0 1.0 de 02_wind_on 2 7 0.0 0.0 de 03_wind_off 2 7 0.0 0.0 de 04_res 2 7 0.0 0.0 @@ -12158,7 +12158,7 @@ de 06_coal 2 7 0.0 0.0 de 07_gas 2 7 0.0 0.0 de 08_non-res 2 7 0.0 0.0 de 09_hydro_pump 2 7 0.0 0.0 -de 01_solar 2 8 1.0 0.0 +de 01_solar 2 8 0.0 1.0 de 02_wind_on 2 8 0.0 0.0 de 03_wind_off 2 8 0.0 0.0 de 04_res 2 8 0.0 0.0 @@ -12167,7 +12167,7 @@ de 06_coal 2 8 0.0 0.0 de 07_gas 2 8 0.0 0.0 de 08_non-res 2 8 0.0 0.0 de 09_hydro_pump 2 8 0.0 0.0 -de 01_solar 2 9 1.0 0.0 +de 01_solar 2 9 0.0 1.0 de 02_wind_on 2 9 0.0 0.0 de 03_wind_off 2 9 0.0 0.0 de 04_res 2 9 0.0 0.0 @@ -12176,7 +12176,7 @@ de 06_coal 2 9 0.0 0.0 de 07_gas 2 9 0.0 0.0 de 08_non-res 2 9 0.0 0.0 de 09_hydro_pump 2 9 0.0 0.0 -de 01_solar 2 10 1.0 0.0 +de 01_solar 2 10 0.0 1.0 de 02_wind_on 2 10 0.0 0.0 de 03_wind_off 2 10 0.0 0.0 de 04_res 2 10 0.0 0.0 @@ -12185,7 +12185,7 @@ de 06_coal 2 10 0.0 0.0 de 07_gas 2 10 0.0 0.0 de 08_non-res 2 10 0.0 0.0 de 09_hydro_pump 2 10 0.0 0.0 -de 01_solar 2 11 1.0 0.0 +de 01_solar 2 11 0.0 1.0 de 02_wind_on 2 11 0.0 0.0 de 03_wind_off 2 11 0.0 0.0 de 04_res 2 11 0.0 0.0 @@ -12194,7 +12194,7 @@ de 06_coal 2 11 0.0 0.0 de 07_gas 2 11 0.0 0.0 de 08_non-res 2 11 0.0 0.0 de 09_hydro_pump 2 11 0.0 0.0 -de 01_solar 2 12 1.0 0.0 +de 01_solar 2 12 0.0 1.0 de 02_wind_on 2 12 0.0 0.0 de 03_wind_off 2 12 0.0 0.0 de 04_res 2 12 0.0 0.0 @@ -12203,7 +12203,7 @@ de 06_coal 2 12 0.0 0.0 de 07_gas 2 12 0.0 0.0 de 08_non-res 2 12 0.0 0.0 de 09_hydro_pump 2 12 0.0 0.0 -de 01_solar 2 13 1.0 0.0 +de 01_solar 2 13 0.0 1.0 de 02_wind_on 2 13 0.0 0.0 de 03_wind_off 2 13 0.0 0.0 de 04_res 2 13 0.0 0.0 @@ -12212,7 +12212,7 @@ de 06_coal 2 13 0.0 0.0 de 07_gas 2 13 0.0 0.0 de 08_non-res 2 13 0.0 0.0 de 09_hydro_pump 2 13 0.0 0.0 -de 01_solar 2 14 1.0 0.0 +de 01_solar 2 14 0.0 1.0 de 02_wind_on 2 14 0.0 0.0 de 03_wind_off 2 14 0.0 0.0 de 04_res 2 14 0.0 0.0 @@ -12221,7 +12221,7 @@ de 06_coal 2 14 0.0 0.0 de 07_gas 2 14 0.0 0.0 de 08_non-res 2 14 0.0 0.0 de 09_hydro_pump 2 14 0.0 0.0 -de 01_solar 2 15 1.0 0.0 +de 01_solar 2 15 0.0 1.0 de 02_wind_on 2 15 0.0 0.0 de 03_wind_off 2 15 0.0 0.0 de 04_res 2 15 0.0 0.0 @@ -12230,7 +12230,7 @@ de 06_coal 2 15 0.0 0.0 de 07_gas 2 15 0.0 0.0 de 08_non-res 2 15 0.0 0.0 de 09_hydro_pump 2 15 0.0 0.0 -de 01_solar 2 16 1.0 0.0 +de 01_solar 2 16 0.0 1.0 de 02_wind_on 2 16 0.0 0.0 de 03_wind_off 2 16 0.0 0.0 de 04_res 2 16 0.0 0.0 @@ -12239,7 +12239,7 @@ de 06_coal 2 16 0.0 0.0 de 07_gas 2 16 0.0 0.0 de 08_non-res 2 16 0.0 0.0 de 09_hydro_pump 2 16 0.0 0.0 -de 01_solar 2 17 1.0 0.0 +de 01_solar 2 17 0.0 1.0 de 02_wind_on 2 17 0.0 0.0 de 03_wind_off 2 17 0.0 0.0 de 04_res 2 17 0.0 0.0 @@ -12248,7 +12248,7 @@ de 06_coal 2 17 0.0 0.0 de 07_gas 2 17 0.0 0.0 de 08_non-res 2 17 0.0 0.0 de 09_hydro_pump 2 17 0.0 0.0 -de 01_solar 2 18 1.0 0.0 +de 01_solar 2 18 0.0 1.0 de 02_wind_on 2 18 0.0 0.0 de 03_wind_off 2 18 0.0 0.0 de 04_res 2 18 0.0 0.0 @@ -12257,7 +12257,7 @@ de 06_coal 2 18 0.0 0.0 de 07_gas 2 18 0.0 0.0 de 08_non-res 2 18 0.0 0.0 de 09_hydro_pump 2 18 0.0 0.0 -de 01_solar 2 19 1.0 0.0 +de 01_solar 2 19 0.0 1.0 de 02_wind_on 2 19 0.0 0.0 de 03_wind_off 2 19 0.0 0.0 de 04_res 2 19 0.0 0.0 @@ -12266,7 +12266,7 @@ de 06_coal 2 19 0.0 0.0 de 07_gas 2 19 0.0 0.0 de 08_non-res 2 19 0.0 0.0 de 09_hydro_pump 2 19 0.0 0.0 -de 01_solar 2 20 1.0 0.0 +de 01_solar 2 20 0.0 1.0 de 02_wind_on 2 20 0.0 0.0 de 03_wind_off 2 20 0.0 0.0 de 04_res 2 20 0.0 0.0 @@ -12275,7 +12275,7 @@ de 06_coal 2 20 0.0 0.0 de 07_gas 2 20 0.0 0.0 de 08_non-res 2 20 0.0 0.0 de 09_hydro_pump 2 20 0.0 0.0 -de 01_solar 2 21 1.0 0.0 +de 01_solar 2 21 0.0 1.0 de 02_wind_on 2 21 0.0 0.0 de 03_wind_off 2 21 0.0 0.0 de 04_res 2 21 0.0 0.0 @@ -12284,8 +12284,8 @@ de 06_coal 2 21 0.0 0.0 de 07_gas 2 21 0.0 0.0 de 08_non-res 2 21 0.0 0.0 de 09_hydro_pump 2 21 0.0 0.0 -de 01_solar 2 22 1.0 0.0 -de 02_wind_on 2 22 1.0 0.0 +de 01_solar 2 22 0.0 1.0 +de 02_wind_on 2 22 0.0 1.0 de 03_wind_off 2 22 0.0 0.0 de 04_res 2 22 0.0 0.0 de 05_nuclear 2 22 0.0 0.0 @@ -12293,8 +12293,8 @@ de 06_coal 2 22 0.0 0.0 de 07_gas 2 22 0.0 0.0 de 08_non-res 2 22 0.0 0.0 de 09_hydro_pump 2 22 0.0 0.0 -de 01_solar 2 23 1.0 0.0 -de 02_wind_on 2 23 1.0 0.0 +de 01_solar 2 23 0.0 1.0 +de 02_wind_on 2 23 0.0 1.0 de 03_wind_off 2 23 0.0 0.0 de 04_res 2 23 0.0 0.0 de 05_nuclear 2 23 0.0 0.0 @@ -12302,8 +12302,8 @@ de 06_coal 2 23 0.0 0.0 de 07_gas 2 23 0.0 0.0 de 08_non-res 2 23 0.0 0.0 de 09_hydro_pump 2 23 0.0 0.0 -de 01_solar 2 24 1.0 0.0 -de 02_wind_on 2 24 1.0 0.0 +de 01_solar 2 24 0.0 1.0 +de 02_wind_on 2 24 0.0 1.0 de 03_wind_off 2 24 0.0 0.0 de 04_res 2 24 0.0 0.0 de 05_nuclear 2 24 0.0 0.0 @@ -12311,8 +12311,8 @@ de 06_coal 2 24 0.0 0.0 de 07_gas 2 24 0.0 0.0 de 08_non-res 2 24 0.0 0.0 de 09_hydro_pump 2 24 0.0 0.0 -de 01_solar 2 25 1.0 0.0 -de 02_wind_on 2 25 1.0 0.0 +de 01_solar 2 25 0.0 1.0 +de 02_wind_on 2 25 0.0 1.0 de 03_wind_off 2 25 0.0 0.0 de 04_res 2 25 0.0 0.0 de 05_nuclear 2 25 0.0 0.0 @@ -12320,8 +12320,8 @@ de 06_coal 2 25 0.0 0.0 de 07_gas 2 25 0.0 0.0 de 08_non-res 2 25 0.0 0.0 de 09_hydro_pump 2 25 0.0 0.0 -de 01_solar 2 26 1.0 0.0 -de 02_wind_on 2 26 1.0 0.0 +de 01_solar 2 26 0.0 1.0 +de 02_wind_on 2 26 0.0 1.0 de 03_wind_off 2 26 0.0 0.0 de 04_res 2 26 0.0 0.0 de 05_nuclear 2 26 0.0 0.0 @@ -12329,8 +12329,8 @@ de 06_coal 2 26 0.0 0.0 de 07_gas 2 26 0.0 0.0 de 08_non-res 2 26 0.0 0.0 de 09_hydro_pump 2 26 0.0 0.0 -de 01_solar 2 27 1.0 0.0 -de 02_wind_on 2 27 1.0 0.0 +de 01_solar 2 27 0.0 1.0 +de 02_wind_on 2 27 0.0 1.0 de 03_wind_off 2 27 0.0 0.0 de 04_res 2 27 0.0 0.0 de 05_nuclear 2 27 0.0 0.0 @@ -12338,8 +12338,8 @@ de 06_coal 2 27 0.0 0.0 de 07_gas 2 27 0.0 0.0 de 08_non-res 2 27 0.0 0.0 de 09_hydro_pump 2 27 0.0 0.0 -de 01_solar 2 28 1.0 0.0 -de 02_wind_on 2 28 1.0 0.0 +de 01_solar 2 28 0.0 1.0 +de 02_wind_on 2 28 0.0 1.0 de 03_wind_off 2 28 0.0 0.0 de 04_res 2 28 0.0 0.0 de 05_nuclear 2 28 0.0 0.0 @@ -12347,8 +12347,8 @@ de 06_coal 2 28 0.0 0.0 de 07_gas 2 28 0.0 0.0 de 08_non-res 2 28 0.0 0.0 de 09_hydro_pump 2 28 0.0 0.0 -de 01_solar 2 29 1.0 0.0 -de 02_wind_on 2 29 1.0 0.0 +de 01_solar 2 29 0.0 1.0 +de 02_wind_on 2 29 0.0 1.0 de 03_wind_off 2 29 0.0 0.0 de 04_res 2 29 0.0 0.0 de 05_nuclear 2 29 0.0 0.0 @@ -12356,8 +12356,8 @@ de 06_coal 2 29 0.0 0.0 de 07_gas 2 29 0.0 0.0 de 08_non-res 2 29 0.0 0.0 de 09_hydro_pump 2 29 0.0 0.0 -de 01_solar 2 30 1.0 0.0 -de 02_wind_on 2 30 1.0 0.0 +de 01_solar 2 30 0.0 1.0 +de 02_wind_on 2 30 0.0 1.0 de 03_wind_off 2 30 0.0 0.0 de 04_res 2 30 0.0 0.0 de 05_nuclear 2 30 0.0 0.0 @@ -12365,8 +12365,8 @@ de 06_coal 2 30 0.0 0.0 de 07_gas 2 30 0.0 0.0 de 08_non-res 2 30 0.0 0.0 de 09_hydro_pump 2 30 0.0 0.0 -de 01_solar 2 31 1.0 0.0 -de 02_wind_on 2 31 1.0 0.0 +de 01_solar 2 31 0.0 1.0 +de 02_wind_on 2 31 0.0 1.0 de 03_wind_off 2 31 0.0 0.0 de 04_res 2 31 0.0 0.0 de 05_nuclear 2 31 0.0 0.0 @@ -12374,8 +12374,8 @@ de 06_coal 2 31 0.0 0.0 de 07_gas 2 31 0.0 0.0 de 08_non-res 2 31 0.0 0.0 de 09_hydro_pump 2 31 0.0 0.0 -de 01_solar 2 32 1.0 0.0 -de 02_wind_on 2 32 1.0 0.0 +de 01_solar 2 32 0.0 1.0 +de 02_wind_on 2 32 0.0 1.0 de 03_wind_off 2 32 0.0 0.0 de 04_res 2 32 0.0 0.0 de 05_nuclear 2 32 0.0 0.0 @@ -12383,8 +12383,8 @@ de 06_coal 2 32 0.0 0.0 de 07_gas 2 32 0.0 0.0 de 08_non-res 2 32 0.0 0.0 de 09_hydro_pump 2 32 0.0 0.0 -de 01_solar 2 33 1.0 0.0 -de 02_wind_on 2 33 1.0 0.0 +de 01_solar 2 33 0.0 1.0 +de 02_wind_on 2 33 0.0 1.0 de 03_wind_off 2 33 0.0 0.0 de 04_res 2 33 0.0 0.0 de 05_nuclear 2 33 0.0 0.0 @@ -12392,8 +12392,8 @@ de 06_coal 2 33 0.0 0.0 de 07_gas 2 33 0.0 0.0 de 08_non-res 2 33 0.0 0.0 de 09_hydro_pump 2 33 0.0 0.0 -de 01_solar 2 34 1.0 0.0 -de 02_wind_on 2 34 1.0 0.0 +de 01_solar 2 34 0.0 1.0 +de 02_wind_on 2 34 0.0 1.0 de 03_wind_off 2 34 0.0 0.0 de 04_res 2 34 0.0 0.0 de 05_nuclear 2 34 0.0 0.0 @@ -12401,8 +12401,8 @@ de 06_coal 2 34 0.0 0.0 de 07_gas 2 34 0.0 0.0 de 08_non-res 2 34 0.0 0.0 de 09_hydro_pump 2 34 0.0 0.0 -de 01_solar 2 35 1.0 0.0 -de 02_wind_on 2 35 1.0 0.0 +de 01_solar 2 35 0.0 1.0 +de 02_wind_on 2 35 0.0 1.0 de 03_wind_off 2 35 0.0 0.0 de 04_res 2 35 0.0 0.0 de 05_nuclear 2 35 0.0 0.0 @@ -12410,8 +12410,8 @@ de 06_coal 2 35 0.0 0.0 de 07_gas 2 35 0.0 0.0 de 08_non-res 2 35 0.0 0.0 de 09_hydro_pump 2 35 0.0 0.0 -de 01_solar 2 36 1.0 0.0 -de 02_wind_on 2 36 1.0 0.0 +de 01_solar 2 36 0.0 1.0 +de 02_wind_on 2 36 0.0 1.0 de 03_wind_off 2 36 0.0 0.0 de 04_res 2 36 0.0 0.0 de 05_nuclear 2 36 0.0 0.0 @@ -12419,8 +12419,8 @@ de 06_coal 2 36 0.0 0.0 de 07_gas 2 36 0.0 0.0 de 08_non-res 2 36 0.0 0.0 de 09_hydro_pump 2 36 0.0 0.0 -de 01_solar 2 37 1.0 0.0 -de 02_wind_on 2 37 1.0 0.0 +de 01_solar 2 37 0.0 1.0 +de 02_wind_on 2 37 0.0 1.0 de 03_wind_off 2 37 0.0 0.0 de 04_res 2 37 0.0 0.0 de 05_nuclear 2 37 0.0 0.0 @@ -12428,8 +12428,8 @@ de 06_coal 2 37 0.0 0.0 de 07_gas 2 37 0.0 0.0 de 08_non-res 2 37 0.0 0.0 de 09_hydro_pump 2 37 0.0 0.0 -de 01_solar 2 38 1.0 0.0 -de 02_wind_on 2 38 1.0 0.0 +de 01_solar 2 38 0.0 1.0 +de 02_wind_on 2 38 0.0 1.0 de 03_wind_off 2 38 0.0 0.0 de 04_res 2 38 0.0 0.0 de 05_nuclear 2 38 0.0 0.0 @@ -12437,8 +12437,8 @@ de 06_coal 2 38 0.0 0.0 de 07_gas 2 38 0.0 0.0 de 08_non-res 2 38 0.0 0.0 de 09_hydro_pump 2 38 0.0 0.0 -de 01_solar 2 39 1.0 0.0 -de 02_wind_on 2 39 1.0 0.0 +de 01_solar 2 39 0.0 1.0 +de 02_wind_on 2 39 0.0 1.0 de 03_wind_off 2 39 0.0 0.0 de 04_res 2 39 0.0 0.0 de 05_nuclear 2 39 0.0 0.0 @@ -12446,8 +12446,8 @@ de 06_coal 2 39 0.0 0.0 de 07_gas 2 39 0.0 0.0 de 08_non-res 2 39 0.0 0.0 de 09_hydro_pump 2 39 0.0 0.0 -de 01_solar 2 40 1.0 0.0 -de 02_wind_on 2 40 1.0 0.0 +de 01_solar 2 40 0.0 1.0 +de 02_wind_on 2 40 0.0 1.0 de 03_wind_off 2 40 0.0 0.0 de 04_res 2 40 0.0 0.0 de 05_nuclear 2 40 0.0 0.0 @@ -12455,8 +12455,8 @@ de 06_coal 2 40 0.0 0.0 de 07_gas 2 40 0.0 0.0 de 08_non-res 2 40 0.0 0.0 de 09_hydro_pump 2 40 0.0 0.0 -de 01_solar 2 41 1.0 0.0 -de 02_wind_on 2 41 1.0 0.0 +de 01_solar 2 41 0.0 1.0 +de 02_wind_on 2 41 0.0 1.0 de 03_wind_off 2 41 0.0 0.0 de 04_res 2 41 0.0 0.0 de 05_nuclear 2 41 0.0 0.0 @@ -12464,1149 +12464,1149 @@ de 06_coal 2 41 0.0 0.0 de 07_gas 2 41 0.0 0.0 de 08_non-res 2 41 0.0 0.0 de 09_hydro_pump 2 41 0.0 0.0 -de 01_solar 2 42 1.0 0.0 -de 02_wind_on 2 42 1.0 0.0 -de 03_wind_off 2 42 1.0 0.0 +de 01_solar 2 42 0.0 1.0 +de 02_wind_on 2 42 0.0 1.0 +de 03_wind_off 2 42 0.0 1.0 de 04_res 2 42 0.0 0.0 de 05_nuclear 2 42 0.0 0.0 de 06_coal 2 42 0.0 0.0 de 07_gas 2 42 0.0 0.0 de 08_non-res 2 42 0.0 0.0 de 09_hydro_pump 2 42 0.0 0.0 -de 01_solar 2 43 1.0 0.0 -de 02_wind_on 2 43 1.0 0.0 -de 03_wind_off 2 43 1.0 0.0 +de 01_solar 2 43 0.0 1.0 +de 02_wind_on 2 43 0.0 1.0 +de 03_wind_off 2 43 0.0 1.0 de 04_res 2 43 0.0 0.0 de 05_nuclear 2 43 0.0 0.0 de 06_coal 2 43 0.0 0.0 de 07_gas 2 43 0.0 0.0 de 08_non-res 2 43 0.0 0.0 de 09_hydro_pump 2 43 0.0 0.0 -de 01_solar 2 44 1.0 0.0 -de 02_wind_on 2 44 1.0 0.0 -de 03_wind_off 2 44 1.0 0.0 +de 01_solar 2 44 0.0 1.0 +de 02_wind_on 2 44 0.0 1.0 +de 03_wind_off 2 44 0.0 1.0 de 04_res 2 44 0.0 0.0 de 05_nuclear 2 44 0.0 0.0 de 06_coal 2 44 0.0 0.0 de 07_gas 2 44 0.0 0.0 de 08_non-res 2 44 0.0 0.0 de 09_hydro_pump 2 44 0.0 0.0 -de 01_solar 2 45 1.0 0.0 -de 02_wind_on 2 45 1.0 0.0 -de 03_wind_off 2 45 1.0 0.0 +de 01_solar 2 45 0.0 1.0 +de 02_wind_on 2 45 0.0 1.0 +de 03_wind_off 2 45 0.0 1.0 de 04_res 2 45 0.0 0.0 de 05_nuclear 2 45 0.0 0.0 de 06_coal 2 45 0.0 0.0 de 07_gas 2 45 0.0 0.0 de 08_non-res 2 45 0.0 0.0 de 09_hydro_pump 2 45 0.0 0.0 -de 01_solar 2 46 1.0 0.0 -de 02_wind_on 2 46 1.0 0.0 -de 03_wind_off 2 46 1.0 0.0 +de 01_solar 2 46 0.0 1.0 +de 02_wind_on 2 46 0.0 1.0 +de 03_wind_off 2 46 0.0 1.0 de 04_res 2 46 0.0 0.0 de 05_nuclear 2 46 0.0 0.0 de 06_coal 2 46 0.0 0.0 de 07_gas 2 46 0.0 0.0 de 08_non-res 2 46 0.0 0.0 de 09_hydro_pump 2 46 0.0 0.0 -de 01_solar 2 47 1.0 0.0 -de 02_wind_on 2 47 1.0 0.0 -de 03_wind_off 2 47 1.0 0.0 +de 01_solar 2 47 0.0 1.0 +de 02_wind_on 2 47 0.0 1.0 +de 03_wind_off 2 47 0.0 1.0 de 04_res 2 47 0.0 0.0 de 05_nuclear 2 47 0.0 0.0 de 06_coal 2 47 0.0 0.0 de 07_gas 2 47 0.0 0.0 de 08_non-res 2 47 0.0 0.0 de 09_hydro_pump 2 47 0.0 0.0 -de 01_solar 2 48 1.0 0.0 -de 02_wind_on 2 48 1.0 0.0 -de 03_wind_off 2 48 1.0 0.0 +de 01_solar 2 48 0.0 1.0 +de 02_wind_on 2 48 0.0 1.0 +de 03_wind_off 2 48 0.0 1.0 de 04_res 2 48 0.0 0.0 de 05_nuclear 2 48 0.0 0.0 de 06_coal 2 48 0.0 0.0 de 07_gas 2 48 0.0 0.0 de 08_non-res 2 48 0.0 0.0 de 09_hydro_pump 2 48 0.0 0.0 -de 01_solar 2 49 1.0 0.0 -de 02_wind_on 2 49 1.0 0.0 -de 03_wind_off 2 49 1.0 0.0 +de 01_solar 2 49 0.0 1.0 +de 02_wind_on 2 49 0.0 1.0 +de 03_wind_off 2 49 0.0 1.0 de 04_res 2 49 0.0 0.0 de 05_nuclear 2 49 0.0 0.0 de 06_coal 2 49 0.0 0.0 de 07_gas 2 49 0.0 0.0 de 08_non-res 2 49 0.0 0.0 de 09_hydro_pump 2 49 0.0 0.0 -de 01_solar 2 50 1.0 0.0 -de 02_wind_on 2 50 1.0 0.0 -de 03_wind_off 2 50 1.0 0.0 +de 01_solar 2 50 0.0 1.0 +de 02_wind_on 2 50 0.0 1.0 +de 03_wind_off 2 50 0.0 1.0 de 04_res 2 50 0.0 0.0 de 05_nuclear 2 50 0.0 0.0 de 06_coal 2 50 0.0 0.0 de 07_gas 2 50 0.0 0.0 de 08_non-res 2 50 0.0 0.0 de 09_hydro_pump 2 50 0.0 0.0 -de 01_solar 2 51 1.0 0.0 -de 02_wind_on 2 51 1.0 0.0 -de 03_wind_off 2 51 1.0 0.0 +de 01_solar 2 51 0.0 1.0 +de 02_wind_on 2 51 0.0 1.0 +de 03_wind_off 2 51 0.0 1.0 de 04_res 2 51 0.0 0.0 de 05_nuclear 2 51 0.0 0.0 de 06_coal 2 51 0.0 0.0 de 07_gas 2 51 0.0 0.0 de 08_non-res 2 51 0.0 0.0 de 09_hydro_pump 2 51 0.0 0.0 -de 01_solar 2 52 1.0 0.0 -de 02_wind_on 2 52 1.0 0.0 -de 03_wind_off 2 52 1.0 0.0 +de 01_solar 2 52 0.0 1.0 +de 02_wind_on 2 52 0.0 1.0 +de 03_wind_off 2 52 0.0 1.0 de 04_res 2 52 0.0 0.0 de 05_nuclear 2 52 0.0 0.0 de 06_coal 2 52 0.0 0.0 de 07_gas 2 52 0.0 0.0 de 08_non-res 2 52 0.0 0.0 de 09_hydro_pump 2 52 0.0 0.0 -de 01_solar 2 53 1.0 0.0 -de 02_wind_on 2 53 1.0 0.0 -de 03_wind_off 2 53 1.0 0.0 +de 01_solar 2 53 0.0 1.0 +de 02_wind_on 2 53 0.0 1.0 +de 03_wind_off 2 53 0.0 1.0 de 04_res 2 53 0.0 0.0 de 05_nuclear 2 53 0.0 0.0 de 06_coal 2 53 0.0 0.0 de 07_gas 2 53 0.0 0.0 de 08_non-res 2 53 0.0 0.0 de 09_hydro_pump 2 53 0.0 0.0 -de 01_solar 2 54 1.0 0.0 -de 02_wind_on 2 54 1.0 0.0 -de 03_wind_off 2 54 1.0 0.0 +de 01_solar 2 54 0.0 1.0 +de 02_wind_on 2 54 0.0 1.0 +de 03_wind_off 2 54 0.0 1.0 de 04_res 2 54 0.0 0.0 de 05_nuclear 2 54 0.0 0.0 de 06_coal 2 54 0.0 0.0 de 07_gas 2 54 0.0 0.0 de 08_non-res 2 54 0.0 0.0 de 09_hydro_pump 2 54 0.0 0.0 -de 01_solar 2 55 1.0 0.0 -de 02_wind_on 2 55 1.0 0.0 -de 03_wind_off 2 55 1.0 0.0 +de 01_solar 2 55 0.0 1.0 +de 02_wind_on 2 55 0.0 1.0 +de 03_wind_off 2 55 0.0 1.0 de 04_res 2 55 0.0 0.0 de 05_nuclear 2 55 0.0 0.0 de 06_coal 2 55 0.0 0.0 de 07_gas 2 55 0.0 0.0 de 08_non-res 2 55 0.0 0.0 de 09_hydro_pump 2 55 0.0 0.0 -de 01_solar 2 56 1.0 0.0 -de 02_wind_on 2 56 1.0 0.0 -de 03_wind_off 2 56 1.0 0.0 +de 01_solar 2 56 0.0 1.0 +de 02_wind_on 2 56 0.0 1.0 +de 03_wind_off 2 56 0.0 1.0 de 04_res 2 56 0.0 0.0 de 05_nuclear 2 56 0.0 0.0 de 06_coal 2 56 0.0 0.0 de 07_gas 2 56 0.0 0.0 de 08_non-res 2 56 0.0 0.0 de 09_hydro_pump 2 56 0.0 0.0 -de 01_solar 2 57 1.0 0.0 -de 02_wind_on 2 57 1.0 0.0 -de 03_wind_off 2 57 1.0 0.0 +de 01_solar 2 57 0.0 1.0 +de 02_wind_on 2 57 0.0 1.0 +de 03_wind_off 2 57 0.0 1.0 de 04_res 2 57 0.0 0.0 de 05_nuclear 2 57 0.0 0.0 de 06_coal 2 57 0.0 0.0 de 07_gas 2 57 0.0 0.0 de 08_non-res 2 57 0.0 0.0 de 09_hydro_pump 2 57 0.0 0.0 -de 01_solar 2 58 1.0 0.0 -de 02_wind_on 2 58 1.0 0.0 -de 03_wind_off 2 58 1.0 0.0 +de 01_solar 2 58 0.0 1.0 +de 02_wind_on 2 58 0.0 1.0 +de 03_wind_off 2 58 0.0 1.0 de 04_res 2 58 0.0 0.0 de 05_nuclear 2 58 0.0 0.0 de 06_coal 2 58 0.0 0.0 de 07_gas 2 58 0.0 0.0 de 08_non-res 2 58 0.0 0.0 de 09_hydro_pump 2 58 0.0 0.0 -de 01_solar 2 59 1.0 0.0 -de 02_wind_on 2 59 1.0 0.0 -de 03_wind_off 2 59 1.0 0.0 +de 01_solar 2 59 0.0 1.0 +de 02_wind_on 2 59 0.0 1.0 +de 03_wind_off 2 59 0.0 1.0 de 04_res 2 59 0.0 0.0 de 05_nuclear 2 59 0.0 0.0 de 06_coal 2 59 0.0 0.0 de 07_gas 2 59 0.0 0.0 de 08_non-res 2 59 0.0 0.0 de 09_hydro_pump 2 59 0.0 0.0 -de 01_solar 2 60 1.0 0.0 -de 02_wind_on 2 60 1.0 0.0 -de 03_wind_off 2 60 1.0 0.0 +de 01_solar 2 60 0.0 1.0 +de 02_wind_on 2 60 0.0 1.0 +de 03_wind_off 2 60 0.0 1.0 de 04_res 2 60 0.0 0.0 de 05_nuclear 2 60 0.0 0.0 de 06_coal 2 60 0.0 0.0 de 07_gas 2 60 0.0 0.0 de 08_non-res 2 60 0.0 0.0 de 09_hydro_pump 2 60 0.0 0.0 -de 01_solar 2 61 1.0 0.0 -de 02_wind_on 2 61 1.0 0.0 -de 03_wind_off 2 61 1.0 0.0 +de 01_solar 2 61 0.0 1.0 +de 02_wind_on 2 61 0.0 1.0 +de 03_wind_off 2 61 0.0 1.0 de 04_res 2 61 0.0 0.0 de 05_nuclear 2 61 0.0 0.0 de 06_coal 2 61 0.0 0.0 de 07_gas 2 61 0.0 0.0 de 08_non-res 2 61 0.0 0.0 de 09_hydro_pump 2 61 0.0 0.0 -de 01_solar 2 62 1.0 0.0 -de 02_wind_on 2 62 1.0 0.0 -de 03_wind_off 2 62 1.0 0.0 -de 04_res 2 62 1.0 0.0 +de 01_solar 2 62 0.0 1.0 +de 02_wind_on 2 62 0.0 1.0 +de 03_wind_off 2 62 0.0 1.0 +de 04_res 2 62 0.0 1.0 de 05_nuclear 2 62 0.0 0.0 de 06_coal 2 62 0.0 0.0 de 07_gas 2 62 0.0 0.0 de 08_non-res 2 62 0.0 0.0 de 09_hydro_pump 2 62 0.0 0.0 -de 01_solar 2 63 1.0 0.0 -de 02_wind_on 2 63 1.0 0.0 -de 03_wind_off 2 63 1.0 0.0 -de 04_res 2 63 1.0 0.0 +de 01_solar 2 63 0.0 1.0 +de 02_wind_on 2 63 0.0 1.0 +de 03_wind_off 2 63 0.0 1.0 +de 04_res 2 63 0.0 1.0 de 05_nuclear 2 63 0.0 0.0 de 06_coal 2 63 0.0 0.0 de 07_gas 2 63 0.0 0.0 de 08_non-res 2 63 0.0 0.0 de 09_hydro_pump 2 63 0.0 0.0 -de 01_solar 2 64 1.0 0.0 -de 02_wind_on 2 64 1.0 0.0 -de 03_wind_off 2 64 1.0 0.0 -de 04_res 2 64 1.0 0.0 +de 01_solar 2 64 0.0 1.0 +de 02_wind_on 2 64 0.0 1.0 +de 03_wind_off 2 64 0.0 1.0 +de 04_res 2 64 0.0 1.0 de 05_nuclear 2 64 0.0 0.0 de 06_coal 2 64 0.0 0.0 de 07_gas 2 64 0.0 0.0 de 08_non-res 2 64 0.0 0.0 de 09_hydro_pump 2 64 0.0 0.0 -de 01_solar 2 65 1.0 0.0 -de 02_wind_on 2 65 1.0 0.0 -de 03_wind_off 2 65 1.0 0.0 -de 04_res 2 65 1.0 0.0 +de 01_solar 2 65 0.0 1.0 +de 02_wind_on 2 65 0.0 1.0 +de 03_wind_off 2 65 0.0 1.0 +de 04_res 2 65 0.0 1.0 de 05_nuclear 2 65 0.0 0.0 de 06_coal 2 65 0.0 0.0 de 07_gas 2 65 0.0 0.0 de 08_non-res 2 65 0.0 0.0 de 09_hydro_pump 2 65 0.0 0.0 -de 01_solar 2 66 1.0 0.0 -de 02_wind_on 2 66 1.0 0.0 -de 03_wind_off 2 66 1.0 0.0 -de 04_res 2 66 1.0 0.0 +de 01_solar 2 66 0.0 1.0 +de 02_wind_on 2 66 0.0 1.0 +de 03_wind_off 2 66 0.0 1.0 +de 04_res 2 66 0.0 1.0 de 05_nuclear 2 66 0.0 0.0 de 06_coal 2 66 0.0 0.0 de 07_gas 2 66 0.0 0.0 de 08_non-res 2 66 0.0 0.0 de 09_hydro_pump 2 66 0.0 0.0 -de 01_solar 2 67 1.0 0.0 -de 02_wind_on 2 67 1.0 0.0 -de 03_wind_off 2 67 1.0 0.0 -de 04_res 2 67 1.0 0.0 +de 01_solar 2 67 0.0 1.0 +de 02_wind_on 2 67 0.0 1.0 +de 03_wind_off 2 67 0.0 1.0 +de 04_res 2 67 0.0 1.0 de 05_nuclear 2 67 0.0 0.0 de 06_coal 2 67 0.0 0.0 de 07_gas 2 67 0.0 0.0 de 08_non-res 2 67 0.0 0.0 de 09_hydro_pump 2 67 0.0 0.0 -de 01_solar 2 68 1.0 0.0 -de 02_wind_on 2 68 1.0 0.0 -de 03_wind_off 2 68 1.0 0.0 -de 04_res 2 68 1.0 0.0 +de 01_solar 2 68 0.0 1.0 +de 02_wind_on 2 68 0.0 1.0 +de 03_wind_off 2 68 0.0 1.0 +de 04_res 2 68 0.0 1.0 de 05_nuclear 2 68 0.0 0.0 de 06_coal 2 68 0.0 0.0 de 07_gas 2 68 0.0 0.0 de 08_non-res 2 68 0.0 0.0 de 09_hydro_pump 2 68 0.0 0.0 -de 01_solar 2 69 1.0 0.0 -de 02_wind_on 2 69 1.0 0.0 -de 03_wind_off 2 69 1.0 0.0 -de 04_res 2 69 1.0 0.0 +de 01_solar 2 69 0.0 1.0 +de 02_wind_on 2 69 0.0 1.0 +de 03_wind_off 2 69 0.0 1.0 +de 04_res 2 69 0.0 1.0 de 05_nuclear 2 69 0.0 0.0 de 06_coal 2 69 0.0 0.0 de 07_gas 2 69 0.0 0.0 de 08_non-res 2 69 0.0 0.0 de 09_hydro_pump 2 69 0.0 0.0 -de 01_solar 2 70 1.0 0.0 -de 02_wind_on 2 70 1.0 0.0 -de 03_wind_off 2 70 1.0 0.0 -de 04_res 2 70 1.0 0.0 +de 01_solar 2 70 0.0 1.0 +de 02_wind_on 2 70 0.0 1.0 +de 03_wind_off 2 70 0.0 1.0 +de 04_res 2 70 0.0 1.0 de 05_nuclear 2 70 0.0 0.0 de 06_coal 2 70 0.0 0.0 de 07_gas 2 70 0.0 0.0 de 08_non-res 2 70 0.0 0.0 de 09_hydro_pump 2 70 0.0 0.0 -de 01_solar 2 71 1.0 0.0 -de 02_wind_on 2 71 1.0 0.0 -de 03_wind_off 2 71 1.0 0.0 -de 04_res 2 71 1.0 0.0 +de 01_solar 2 71 0.0 1.0 +de 02_wind_on 2 71 0.0 1.0 +de 03_wind_off 2 71 0.0 1.0 +de 04_res 2 71 0.0 1.0 de 05_nuclear 2 71 0.0 0.0 de 06_coal 2 71 0.0 0.0 de 07_gas 2 71 0.0 0.0 de 08_non-res 2 71 0.0 0.0 de 09_hydro_pump 2 71 0.0 0.0 -de 01_solar 2 72 1.0 0.0 -de 02_wind_on 2 72 1.0 0.0 -de 03_wind_off 2 72 1.0 0.0 -de 04_res 2 72 1.0 0.0 +de 01_solar 2 72 0.0 1.0 +de 02_wind_on 2 72 0.0 1.0 +de 03_wind_off 2 72 0.0 1.0 +de 04_res 2 72 0.0 1.0 de 05_nuclear 2 72 0.0 0.0 de 06_coal 2 72 0.0 0.0 de 07_gas 2 72 0.0 0.0 de 08_non-res 2 72 0.0 0.0 de 09_hydro_pump 2 72 0.0 0.0 -de 01_solar 2 73 1.0 0.0 -de 02_wind_on 2 73 1.0 0.0 -de 03_wind_off 2 73 1.0 0.0 -de 04_res 2 73 1.0 0.0 +de 01_solar 2 73 0.0 1.0 +de 02_wind_on 2 73 0.0 1.0 +de 03_wind_off 2 73 0.0 1.0 +de 04_res 2 73 0.0 1.0 de 05_nuclear 2 73 0.0 0.0 de 06_coal 2 73 0.0 0.0 de 07_gas 2 73 0.0 0.0 de 08_non-res 2 73 0.0 0.0 de 09_hydro_pump 2 73 0.0 0.0 -de 01_solar 2 74 1.0 0.0 -de 02_wind_on 2 74 1.0 0.0 -de 03_wind_off 2 74 1.0 0.0 -de 04_res 2 74 1.0 0.0 +de 01_solar 2 74 0.0 1.0 +de 02_wind_on 2 74 0.0 1.0 +de 03_wind_off 2 74 0.0 1.0 +de 04_res 2 74 0.0 1.0 de 05_nuclear 2 74 0.0 0.0 de 06_coal 2 74 0.0 0.0 de 07_gas 2 74 0.0 0.0 de 08_non-res 2 74 0.0 0.0 de 09_hydro_pump 2 74 0.0 0.0 -de 01_solar 2 75 1.0 0.0 -de 02_wind_on 2 75 1.0 0.0 -de 03_wind_off 2 75 1.0 0.0 -de 04_res 2 75 1.0 0.0 +de 01_solar 2 75 0.0 1.0 +de 02_wind_on 2 75 0.0 1.0 +de 03_wind_off 2 75 0.0 1.0 +de 04_res 2 75 0.0 1.0 de 05_nuclear 2 75 0.0 0.0 de 06_coal 2 75 0.0 0.0 de 07_gas 2 75 0.0 0.0 de 08_non-res 2 75 0.0 0.0 de 09_hydro_pump 2 75 0.0 0.0 -de 01_solar 2 76 1.0 0.0 -de 02_wind_on 2 76 1.0 0.0 -de 03_wind_off 2 76 1.0 0.0 -de 04_res 2 76 1.0 0.0 +de 01_solar 2 76 0.0 1.0 +de 02_wind_on 2 76 0.0 1.0 +de 03_wind_off 2 76 0.0 1.0 +de 04_res 2 76 0.0 1.0 de 05_nuclear 2 76 0.0 0.0 de 06_coal 2 76 0.0 0.0 de 07_gas 2 76 0.0 0.0 de 08_non-res 2 76 0.0 0.0 de 09_hydro_pump 2 76 0.0 0.0 -de 01_solar 2 77 1.0 0.0 -de 02_wind_on 2 77 1.0 0.0 -de 03_wind_off 2 77 1.0 0.0 -de 04_res 2 77 1.0 0.0 +de 01_solar 2 77 0.0 1.0 +de 02_wind_on 2 77 0.0 1.0 +de 03_wind_off 2 77 0.0 1.0 +de 04_res 2 77 0.0 1.0 de 05_nuclear 2 77 0.0 0.0 de 06_coal 2 77 0.0 0.0 de 07_gas 2 77 0.0 0.0 de 08_non-res 2 77 0.0 0.0 de 09_hydro_pump 2 77 0.0 0.0 -de 01_solar 2 78 1.0 0.0 -de 02_wind_on 2 78 1.0 0.0 -de 03_wind_off 2 78 1.0 0.0 -de 04_res 2 78 1.0 0.0 +de 01_solar 2 78 0.0 1.0 +de 02_wind_on 2 78 0.0 1.0 +de 03_wind_off 2 78 0.0 1.0 +de 04_res 2 78 0.0 1.0 de 05_nuclear 2 78 0.0 0.0 de 06_coal 2 78 0.0 0.0 de 07_gas 2 78 0.0 0.0 de 08_non-res 2 78 0.0 0.0 de 09_hydro_pump 2 78 0.0 0.0 -de 01_solar 2 79 1.0 0.0 -de 02_wind_on 2 79 1.0 0.0 -de 03_wind_off 2 79 1.0 0.0 -de 04_res 2 79 1.0 0.0 +de 01_solar 2 79 0.0 1.0 +de 02_wind_on 2 79 0.0 1.0 +de 03_wind_off 2 79 0.0 1.0 +de 04_res 2 79 0.0 1.0 de 05_nuclear 2 79 0.0 0.0 de 06_coal 2 79 0.0 0.0 de 07_gas 2 79 0.0 0.0 de 08_non-res 2 79 0.0 0.0 de 09_hydro_pump 2 79 0.0 0.0 -de 01_solar 2 80 1.0 0.0 -de 02_wind_on 2 80 1.0 0.0 -de 03_wind_off 2 80 1.0 0.0 -de 04_res 2 80 1.0 0.0 +de 01_solar 2 80 0.0 1.0 +de 02_wind_on 2 80 0.0 1.0 +de 03_wind_off 2 80 0.0 1.0 +de 04_res 2 80 0.0 1.0 de 05_nuclear 2 80 0.0 0.0 de 06_coal 2 80 0.0 0.0 de 07_gas 2 80 0.0 0.0 de 08_non-res 2 80 0.0 0.0 de 09_hydro_pump 2 80 0.0 0.0 -de 01_solar 2 81 1.0 0.0 -de 02_wind_on 2 81 1.0 0.0 -de 03_wind_off 2 81 1.0 0.0 -de 04_res 2 81 1.0 0.0 +de 01_solar 2 81 0.0 1.0 +de 02_wind_on 2 81 0.0 1.0 +de 03_wind_off 2 81 0.0 1.0 +de 04_res 2 81 0.0 1.0 de 05_nuclear 2 81 0.0 0.0 de 06_coal 2 81 0.0 0.0 de 07_gas 2 81 0.0 0.0 de 08_non-res 2 81 0.0 0.0 de 09_hydro_pump 2 81 0.0 0.0 -de 01_solar 2 82 1.0 0.0 -de 02_wind_on 2 82 1.0 0.0 -de 03_wind_off 2 82 1.0 0.0 -de 04_res 2 82 1.0 0.0 -de 05_nuclear 2 82 1.0 0.0 +de 01_solar 2 82 0.0 1.0 +de 02_wind_on 2 82 0.0 1.0 +de 03_wind_off 2 82 0.0 1.0 +de 04_res 2 82 0.0 1.0 +de 05_nuclear 2 82 0.0 1.0 de 06_coal 2 82 0.0 0.0 de 07_gas 2 82 0.0 0.0 de 08_non-res 2 82 0.0 0.0 de 09_hydro_pump 2 82 0.0 0.0 -de 01_solar 2 83 1.0 0.0 -de 02_wind_on 2 83 1.0 0.0 -de 03_wind_off 2 83 1.0 0.0 -de 04_res 2 83 1.0 0.0 -de 05_nuclear 2 83 1.0 0.0 +de 01_solar 2 83 0.0 1.0 +de 02_wind_on 2 83 0.0 1.0 +de 03_wind_off 2 83 0.0 1.0 +de 04_res 2 83 0.0 1.0 +de 05_nuclear 2 83 0.0 1.0 de 06_coal 2 83 0.0 0.0 de 07_gas 2 83 0.0 0.0 de 08_non-res 2 83 0.0 0.0 de 09_hydro_pump 2 83 0.0 0.0 -de 01_solar 2 84 1.0 0.0 -de 02_wind_on 2 84 1.0 0.0 -de 03_wind_off 2 84 1.0 0.0 -de 04_res 2 84 1.0 0.0 -de 05_nuclear 2 84 1.0 0.0 +de 01_solar 2 84 0.0 1.0 +de 02_wind_on 2 84 0.0 1.0 +de 03_wind_off 2 84 0.0 1.0 +de 04_res 2 84 0.0 1.0 +de 05_nuclear 2 84 0.0 1.0 de 06_coal 2 84 0.0 0.0 de 07_gas 2 84 0.0 0.0 de 08_non-res 2 84 0.0 0.0 de 09_hydro_pump 2 84 0.0 0.0 -de 01_solar 2 85 1.0 0.0 -de 02_wind_on 2 85 1.0 0.0 -de 03_wind_off 2 85 1.0 0.0 -de 04_res 2 85 1.0 0.0 -de 05_nuclear 2 85 1.0 0.0 +de 01_solar 2 85 0.0 1.0 +de 02_wind_on 2 85 0.0 1.0 +de 03_wind_off 2 85 0.0 1.0 +de 04_res 2 85 0.0 1.0 +de 05_nuclear 2 85 0.0 1.0 de 06_coal 2 85 0.0 0.0 de 07_gas 2 85 0.0 0.0 de 08_non-res 2 85 0.0 0.0 de 09_hydro_pump 2 85 0.0 0.0 -de 01_solar 2 86 1.0 0.0 -de 02_wind_on 2 86 1.0 0.0 -de 03_wind_off 2 86 1.0 0.0 -de 04_res 2 86 1.0 0.0 -de 05_nuclear 2 86 1.0 0.0 +de 01_solar 2 86 0.0 1.0 +de 02_wind_on 2 86 0.0 1.0 +de 03_wind_off 2 86 0.0 1.0 +de 04_res 2 86 0.0 1.0 +de 05_nuclear 2 86 0.0 1.0 de 06_coal 2 86 0.0 0.0 de 07_gas 2 86 0.0 0.0 de 08_non-res 2 86 0.0 0.0 de 09_hydro_pump 2 86 0.0 0.0 -de 01_solar 2 87 1.0 0.0 -de 02_wind_on 2 87 1.0 0.0 -de 03_wind_off 2 87 1.0 0.0 -de 04_res 2 87 1.0 0.0 -de 05_nuclear 2 87 1.0 0.0 +de 01_solar 2 87 0.0 1.0 +de 02_wind_on 2 87 0.0 1.0 +de 03_wind_off 2 87 0.0 1.0 +de 04_res 2 87 0.0 1.0 +de 05_nuclear 2 87 0.0 1.0 de 06_coal 2 87 0.0 0.0 de 07_gas 2 87 0.0 0.0 de 08_non-res 2 87 0.0 0.0 de 09_hydro_pump 2 87 0.0 0.0 -de 01_solar 2 88 1.0 0.0 -de 02_wind_on 2 88 1.0 0.0 -de 03_wind_off 2 88 1.0 0.0 -de 04_res 2 88 1.0 0.0 -de 05_nuclear 2 88 1.0 0.0 +de 01_solar 2 88 0.0 1.0 +de 02_wind_on 2 88 0.0 1.0 +de 03_wind_off 2 88 0.0 1.0 +de 04_res 2 88 0.0 1.0 +de 05_nuclear 2 88 0.0 1.0 de 06_coal 2 88 0.0 0.0 de 07_gas 2 88 0.0 0.0 de 08_non-res 2 88 0.0 0.0 de 09_hydro_pump 2 88 0.0 0.0 -de 01_solar 2 89 1.0 0.0 -de 02_wind_on 2 89 1.0 0.0 -de 03_wind_off 2 89 1.0 0.0 -de 04_res 2 89 1.0 0.0 -de 05_nuclear 2 89 1.0 0.0 +de 01_solar 2 89 0.0 1.0 +de 02_wind_on 2 89 0.0 1.0 +de 03_wind_off 2 89 0.0 1.0 +de 04_res 2 89 0.0 1.0 +de 05_nuclear 2 89 0.0 1.0 de 06_coal 2 89 0.0 0.0 de 07_gas 2 89 0.0 0.0 de 08_non-res 2 89 0.0 0.0 de 09_hydro_pump 2 89 0.0 0.0 -de 01_solar 2 90 1.0 0.0 -de 02_wind_on 2 90 1.0 0.0 -de 03_wind_off 2 90 1.0 0.0 -de 04_res 2 90 1.0 0.0 -de 05_nuclear 2 90 1.0 0.0 +de 01_solar 2 90 0.0 1.0 +de 02_wind_on 2 90 0.0 1.0 +de 03_wind_off 2 90 0.0 1.0 +de 04_res 2 90 0.0 1.0 +de 05_nuclear 2 90 0.0 1.0 de 06_coal 2 90 0.0 0.0 de 07_gas 2 90 0.0 0.0 de 08_non-res 2 90 0.0 0.0 de 09_hydro_pump 2 90 0.0 0.0 -de 01_solar 2 91 1.0 0.0 -de 02_wind_on 2 91 1.0 0.0 -de 03_wind_off 2 91 1.0 0.0 -de 04_res 2 91 1.0 0.0 -de 05_nuclear 2 91 1.0 0.0 +de 01_solar 2 91 0.0 1.0 +de 02_wind_on 2 91 0.0 1.0 +de 03_wind_off 2 91 0.0 1.0 +de 04_res 2 91 0.0 1.0 +de 05_nuclear 2 91 0.0 1.0 de 06_coal 2 91 0.0 0.0 de 07_gas 2 91 0.0 0.0 de 08_non-res 2 91 0.0 0.0 de 09_hydro_pump 2 91 0.0 0.0 -de 01_solar 2 92 1.0 0.0 -de 02_wind_on 2 92 1.0 0.0 -de 03_wind_off 2 92 1.0 0.0 -de 04_res 2 92 1.0 0.0 -de 05_nuclear 2 92 1.0 0.0 +de 01_solar 2 92 0.0 1.0 +de 02_wind_on 2 92 0.0 1.0 +de 03_wind_off 2 92 0.0 1.0 +de 04_res 2 92 0.0 1.0 +de 05_nuclear 2 92 0.0 1.0 de 06_coal 2 92 0.0 0.0 de 07_gas 2 92 0.0 0.0 de 08_non-res 2 92 0.0 0.0 de 09_hydro_pump 2 92 0.0 0.0 -de 01_solar 2 93 1.0 0.0 -de 02_wind_on 2 93 1.0 0.0 -de 03_wind_off 2 93 1.0 0.0 -de 04_res 2 93 1.0 0.0 -de 05_nuclear 2 93 1.0 0.0 +de 01_solar 2 93 0.0 1.0 +de 02_wind_on 2 93 0.0 1.0 +de 03_wind_off 2 93 0.0 1.0 +de 04_res 2 93 0.0 1.0 +de 05_nuclear 2 93 0.0 1.0 de 06_coal 2 93 0.0 0.0 de 07_gas 2 93 0.0 0.0 de 08_non-res 2 93 0.0 0.0 de 09_hydro_pump 2 93 0.0 0.0 -de 01_solar 2 94 1.0 0.0 -de 02_wind_on 2 94 1.0 0.0 -de 03_wind_off 2 94 1.0 0.0 -de 04_res 2 94 1.0 0.0 -de 05_nuclear 2 94 1.0 0.0 +de 01_solar 2 94 0.0 1.0 +de 02_wind_on 2 94 0.0 1.0 +de 03_wind_off 2 94 0.0 1.0 +de 04_res 2 94 0.0 1.0 +de 05_nuclear 2 94 0.0 1.0 de 06_coal 2 94 0.0 0.0 de 07_gas 2 94 0.0 0.0 de 08_non-res 2 94 0.0 0.0 de 09_hydro_pump 2 94 0.0 0.0 -de 01_solar 2 95 1.0 0.0 -de 02_wind_on 2 95 1.0 0.0 -de 03_wind_off 2 95 1.0 0.0 -de 04_res 2 95 1.0 0.0 -de 05_nuclear 2 95 1.0 0.0 +de 01_solar 2 95 0.0 1.0 +de 02_wind_on 2 95 0.0 1.0 +de 03_wind_off 2 95 0.0 1.0 +de 04_res 2 95 0.0 1.0 +de 05_nuclear 2 95 0.0 1.0 de 06_coal 2 95 0.0 0.0 de 07_gas 2 95 0.0 0.0 de 08_non-res 2 95 0.0 0.0 de 09_hydro_pump 2 95 0.0 0.0 -de 01_solar 2 96 1.0 0.0 -de 02_wind_on 2 96 1.0 0.0 -de 03_wind_off 2 96 1.0 0.0 -de 04_res 2 96 1.0 0.0 -de 05_nuclear 2 96 1.0 0.0 +de 01_solar 2 96 0.0 1.0 +de 02_wind_on 2 96 0.0 1.0 +de 03_wind_off 2 96 0.0 1.0 +de 04_res 2 96 0.0 1.0 +de 05_nuclear 2 96 0.0 1.0 de 06_coal 2 96 0.0 0.0 de 07_gas 2 96 0.0 0.0 de 08_non-res 2 96 0.0 0.0 de 09_hydro_pump 2 96 0.0 0.0 -de 01_solar 2 97 1.0 0.0 -de 02_wind_on 2 97 1.0 0.0 -de 03_wind_off 2 97 1.0 0.0 -de 04_res 2 97 1.0 0.0 -de 05_nuclear 2 97 1.0 0.0 +de 01_solar 2 97 0.0 1.0 +de 02_wind_on 2 97 0.0 1.0 +de 03_wind_off 2 97 0.0 1.0 +de 04_res 2 97 0.0 1.0 +de 05_nuclear 2 97 0.0 1.0 de 06_coal 2 97 0.0 0.0 de 07_gas 2 97 0.0 0.0 de 08_non-res 2 97 0.0 0.0 de 09_hydro_pump 2 97 0.0 0.0 -de 01_solar 2 98 1.0 0.0 -de 02_wind_on 2 98 1.0 0.0 -de 03_wind_off 2 98 1.0 0.0 -de 04_res 2 98 1.0 0.0 -de 05_nuclear 2 98 1.0 0.0 +de 01_solar 2 98 0.0 1.0 +de 02_wind_on 2 98 0.0 1.0 +de 03_wind_off 2 98 0.0 1.0 +de 04_res 2 98 0.0 1.0 +de 05_nuclear 2 98 0.0 1.0 de 06_coal 2 98 0.0 0.0 de 07_gas 2 98 0.0 0.0 de 08_non-res 2 98 0.0 0.0 de 09_hydro_pump 2 98 0.0 0.0 -de 01_solar 2 99 1.0 0.0 -de 02_wind_on 2 99 1.0 0.0 -de 03_wind_off 2 99 1.0 0.0 -de 04_res 2 99 1.0 0.0 -de 05_nuclear 2 99 1.0 0.0 +de 01_solar 2 99 0.0 1.0 +de 02_wind_on 2 99 0.0 1.0 +de 03_wind_off 2 99 0.0 1.0 +de 04_res 2 99 0.0 1.0 +de 05_nuclear 2 99 0.0 1.0 de 06_coal 2 99 0.0 0.0 de 07_gas 2 99 0.0 0.0 de 08_non-res 2 99 0.0 0.0 de 09_hydro_pump 2 99 0.0 0.0 -de 01_solar 2 100 1.0 0.0 -de 02_wind_on 2 100 1.0 0.0 -de 03_wind_off 2 100 1.0 0.0 -de 04_res 2 100 1.0 0.0 -de 05_nuclear 2 100 1.0 0.0 +de 01_solar 2 100 0.0 1.0 +de 02_wind_on 2 100 0.0 1.0 +de 03_wind_off 2 100 0.0 1.0 +de 04_res 2 100 0.0 1.0 +de 05_nuclear 2 100 0.0 1.0 de 06_coal 2 100 0.0 0.0 de 07_gas 2 100 0.0 0.0 de 08_non-res 2 100 0.0 0.0 de 09_hydro_pump 2 100 0.0 0.0 -de 01_solar 2 101 1.0 0.0 -de 02_wind_on 2 101 1.0 0.0 -de 03_wind_off 2 101 1.0 0.0 -de 04_res 2 101 1.0 0.0 -de 05_nuclear 2 101 1.0 0.0 +de 01_solar 2 101 0.0 1.0 +de 02_wind_on 2 101 0.0 1.0 +de 03_wind_off 2 101 0.0 1.0 +de 04_res 2 101 0.0 1.0 +de 05_nuclear 2 101 0.0 1.0 de 06_coal 2 101 0.0 0.0 de 07_gas 2 101 0.0 0.0 de 08_non-res 2 101 0.0 0.0 de 09_hydro_pump 2 101 0.0 0.0 -de 01_solar 2 102 1.0 0.0 -de 02_wind_on 2 102 1.0 0.0 -de 03_wind_off 2 102 1.0 0.0 -de 04_res 2 102 1.0 0.0 -de 05_nuclear 2 102 1.0 0.0 -de 06_coal 2 102 1.0 0.0 +de 01_solar 2 102 0.0 1.0 +de 02_wind_on 2 102 0.0 1.0 +de 03_wind_off 2 102 0.0 1.0 +de 04_res 2 102 0.0 1.0 +de 05_nuclear 2 102 0.0 1.0 +de 06_coal 2 102 0.0 1.0 de 07_gas 2 102 0.0 0.0 de 08_non-res 2 102 0.0 0.0 de 09_hydro_pump 2 102 0.0 0.0 -de 01_solar 2 103 1.0 0.0 -de 02_wind_on 2 103 1.0 0.0 -de 03_wind_off 2 103 1.0 0.0 -de 04_res 2 103 1.0 0.0 -de 05_nuclear 2 103 1.0 0.0 -de 06_coal 2 103 1.0 0.0 +de 01_solar 2 103 0.0 1.0 +de 02_wind_on 2 103 0.0 1.0 +de 03_wind_off 2 103 0.0 1.0 +de 04_res 2 103 0.0 1.0 +de 05_nuclear 2 103 0.0 1.0 +de 06_coal 2 103 0.0 1.0 de 07_gas 2 103 0.0 0.0 de 08_non-res 2 103 0.0 0.0 de 09_hydro_pump 2 103 0.0 0.0 -de 01_solar 2 104 1.0 0.0 -de 02_wind_on 2 104 1.0 0.0 -de 03_wind_off 2 104 1.0 0.0 -de 04_res 2 104 1.0 0.0 -de 05_nuclear 2 104 1.0 0.0 -de 06_coal 2 104 1.0 0.0 +de 01_solar 2 104 0.0 1.0 +de 02_wind_on 2 104 0.0 1.0 +de 03_wind_off 2 104 0.0 1.0 +de 04_res 2 104 0.0 1.0 +de 05_nuclear 2 104 0.0 1.0 +de 06_coal 2 104 0.0 1.0 de 07_gas 2 104 0.0 0.0 de 08_non-res 2 104 0.0 0.0 de 09_hydro_pump 2 104 0.0 0.0 -de 01_solar 2 105 1.0 0.0 -de 02_wind_on 2 105 1.0 0.0 -de 03_wind_off 2 105 1.0 0.0 -de 04_res 2 105 1.0 0.0 -de 05_nuclear 2 105 1.0 0.0 -de 06_coal 2 105 1.0 0.0 +de 01_solar 2 105 0.0 1.0 +de 02_wind_on 2 105 0.0 1.0 +de 03_wind_off 2 105 0.0 1.0 +de 04_res 2 105 0.0 1.0 +de 05_nuclear 2 105 0.0 1.0 +de 06_coal 2 105 0.0 1.0 de 07_gas 2 105 0.0 0.0 de 08_non-res 2 105 0.0 0.0 de 09_hydro_pump 2 105 0.0 0.0 -de 01_solar 2 106 1.0 0.0 -de 02_wind_on 2 106 1.0 0.0 -de 03_wind_off 2 106 1.0 0.0 -de 04_res 2 106 1.0 0.0 -de 05_nuclear 2 106 1.0 0.0 -de 06_coal 2 106 1.0 0.0 +de 01_solar 2 106 0.0 1.0 +de 02_wind_on 2 106 0.0 1.0 +de 03_wind_off 2 106 0.0 1.0 +de 04_res 2 106 0.0 1.0 +de 05_nuclear 2 106 0.0 1.0 +de 06_coal 2 106 0.0 1.0 de 07_gas 2 106 0.0 0.0 de 08_non-res 2 106 0.0 0.0 de 09_hydro_pump 2 106 0.0 0.0 -de 01_solar 2 107 1.0 0.0 -de 02_wind_on 2 107 1.0 0.0 -de 03_wind_off 2 107 1.0 0.0 -de 04_res 2 107 1.0 0.0 -de 05_nuclear 2 107 1.0 0.0 -de 06_coal 2 107 1.0 0.0 +de 01_solar 2 107 0.0 1.0 +de 02_wind_on 2 107 0.0 1.0 +de 03_wind_off 2 107 0.0 1.0 +de 04_res 2 107 0.0 1.0 +de 05_nuclear 2 107 0.0 1.0 +de 06_coal 2 107 0.0 1.0 de 07_gas 2 107 0.0 0.0 de 08_non-res 2 107 0.0 0.0 de 09_hydro_pump 2 107 0.0 0.0 -de 01_solar 2 108 1.0 0.0 -de 02_wind_on 2 108 1.0 0.0 -de 03_wind_off 2 108 1.0 0.0 -de 04_res 2 108 1.0 0.0 -de 05_nuclear 2 108 1.0 0.0 -de 06_coal 2 108 1.0 0.0 +de 01_solar 2 108 0.0 1.0 +de 02_wind_on 2 108 0.0 1.0 +de 03_wind_off 2 108 0.0 1.0 +de 04_res 2 108 0.0 1.0 +de 05_nuclear 2 108 0.0 1.0 +de 06_coal 2 108 0.0 1.0 de 07_gas 2 108 0.0 0.0 de 08_non-res 2 108 0.0 0.0 de 09_hydro_pump 2 108 0.0 0.0 -de 01_solar 2 109 1.0 0.0 -de 02_wind_on 2 109 1.0 0.0 -de 03_wind_off 2 109 1.0 0.0 -de 04_res 2 109 1.0 0.0 -de 05_nuclear 2 109 1.0 0.0 -de 06_coal 2 109 1.0 0.0 +de 01_solar 2 109 0.0 1.0 +de 02_wind_on 2 109 0.0 1.0 +de 03_wind_off 2 109 0.0 1.0 +de 04_res 2 109 0.0 1.0 +de 05_nuclear 2 109 0.0 1.0 +de 06_coal 2 109 0.0 1.0 de 07_gas 2 109 0.0 0.0 de 08_non-res 2 109 0.0 0.0 de 09_hydro_pump 2 109 0.0 0.0 -de 01_solar 2 110 1.0 0.0 -de 02_wind_on 2 110 1.0 0.0 -de 03_wind_off 2 110 1.0 0.0 -de 04_res 2 110 1.0 0.0 -de 05_nuclear 2 110 1.0 0.0 -de 06_coal 2 110 1.0 0.0 +de 01_solar 2 110 0.0 1.0 +de 02_wind_on 2 110 0.0 1.0 +de 03_wind_off 2 110 0.0 1.0 +de 04_res 2 110 0.0 1.0 +de 05_nuclear 2 110 0.0 1.0 +de 06_coal 2 110 0.0 1.0 de 07_gas 2 110 0.0 0.0 de 08_non-res 2 110 0.0 0.0 de 09_hydro_pump 2 110 0.0 0.0 -de 01_solar 2 111 1.0 0.0 -de 02_wind_on 2 111 1.0 0.0 -de 03_wind_off 2 111 1.0 0.0 -de 04_res 2 111 1.0 0.0 -de 05_nuclear 2 111 1.0 0.0 -de 06_coal 2 111 1.0 0.0 +de 01_solar 2 111 0.0 1.0 +de 02_wind_on 2 111 0.0 1.0 +de 03_wind_off 2 111 0.0 1.0 +de 04_res 2 111 0.0 1.0 +de 05_nuclear 2 111 0.0 1.0 +de 06_coal 2 111 0.0 1.0 de 07_gas 2 111 0.0 0.0 de 08_non-res 2 111 0.0 0.0 de 09_hydro_pump 2 111 0.0 0.0 -de 01_solar 2 112 1.0 0.0 -de 02_wind_on 2 112 1.0 0.0 -de 03_wind_off 2 112 1.0 0.0 -de 04_res 2 112 1.0 0.0 -de 05_nuclear 2 112 1.0 0.0 -de 06_coal 2 112 1.0 0.0 +de 01_solar 2 112 0.0 1.0 +de 02_wind_on 2 112 0.0 1.0 +de 03_wind_off 2 112 0.0 1.0 +de 04_res 2 112 0.0 1.0 +de 05_nuclear 2 112 0.0 1.0 +de 06_coal 2 112 0.0 1.0 de 07_gas 2 112 0.0 0.0 de 08_non-res 2 112 0.0 0.0 de 09_hydro_pump 2 112 0.0 0.0 -de 01_solar 2 113 1.0 0.0 -de 02_wind_on 2 113 1.0 0.0 -de 03_wind_off 2 113 1.0 0.0 -de 04_res 2 113 1.0 0.0 -de 05_nuclear 2 113 1.0 0.0 -de 06_coal 2 113 1.0 0.0 +de 01_solar 2 113 0.0 1.0 +de 02_wind_on 2 113 0.0 1.0 +de 03_wind_off 2 113 0.0 1.0 +de 04_res 2 113 0.0 1.0 +de 05_nuclear 2 113 0.0 1.0 +de 06_coal 2 113 0.0 1.0 de 07_gas 2 113 0.0 0.0 de 08_non-res 2 113 0.0 0.0 de 09_hydro_pump 2 113 0.0 0.0 -de 01_solar 2 114 1.0 0.0 -de 02_wind_on 2 114 1.0 0.0 -de 03_wind_off 2 114 1.0 0.0 -de 04_res 2 114 1.0 0.0 -de 05_nuclear 2 114 1.0 0.0 -de 06_coal 2 114 1.0 0.0 +de 01_solar 2 114 0.0 1.0 +de 02_wind_on 2 114 0.0 1.0 +de 03_wind_off 2 114 0.0 1.0 +de 04_res 2 114 0.0 1.0 +de 05_nuclear 2 114 0.0 1.0 +de 06_coal 2 114 0.0 1.0 de 07_gas 2 114 0.0 0.0 de 08_non-res 2 114 0.0 0.0 de 09_hydro_pump 2 114 0.0 0.0 -de 01_solar 2 115 1.0 0.0 -de 02_wind_on 2 115 1.0 0.0 -de 03_wind_off 2 115 1.0 0.0 -de 04_res 2 115 1.0 0.0 -de 05_nuclear 2 115 1.0 0.0 -de 06_coal 2 115 1.0 0.0 +de 01_solar 2 115 0.0 1.0 +de 02_wind_on 2 115 0.0 1.0 +de 03_wind_off 2 115 0.0 1.0 +de 04_res 2 115 0.0 1.0 +de 05_nuclear 2 115 0.0 1.0 +de 06_coal 2 115 0.0 1.0 de 07_gas 2 115 0.0 0.0 de 08_non-res 2 115 0.0 0.0 de 09_hydro_pump 2 115 0.0 0.0 -de 01_solar 2 116 1.0 0.0 -de 02_wind_on 2 116 1.0 0.0 -de 03_wind_off 2 116 1.0 0.0 -de 04_res 2 116 1.0 0.0 -de 05_nuclear 2 116 1.0 0.0 -de 06_coal 2 116 1.0 0.0 +de 01_solar 2 116 0.0 1.0 +de 02_wind_on 2 116 0.0 1.0 +de 03_wind_off 2 116 0.0 1.0 +de 04_res 2 116 0.0 1.0 +de 05_nuclear 2 116 0.0 1.0 +de 06_coal 2 116 0.0 1.0 de 07_gas 2 116 0.0 0.0 de 08_non-res 2 116 0.0 0.0 de 09_hydro_pump 2 116 0.0 0.0 -de 01_solar 2 117 1.0 0.0 -de 02_wind_on 2 117 1.0 0.0 -de 03_wind_off 2 117 1.0 0.0 -de 04_res 2 117 1.0 0.0 -de 05_nuclear 2 117 1.0 0.0 -de 06_coal 2 117 1.0 0.0 +de 01_solar 2 117 0.0 1.0 +de 02_wind_on 2 117 0.0 1.0 +de 03_wind_off 2 117 0.0 1.0 +de 04_res 2 117 0.0 1.0 +de 05_nuclear 2 117 0.0 1.0 +de 06_coal 2 117 0.0 1.0 de 07_gas 2 117 0.0 0.0 de 08_non-res 2 117 0.0 0.0 de 09_hydro_pump 2 117 0.0 0.0 -de 01_solar 2 118 1.0 0.0 -de 02_wind_on 2 118 1.0 0.0 -de 03_wind_off 2 118 1.0 0.0 -de 04_res 2 118 1.0 0.0 -de 05_nuclear 2 118 1.0 0.0 -de 06_coal 2 118 1.0 0.0 +de 01_solar 2 118 0.0 1.0 +de 02_wind_on 2 118 0.0 1.0 +de 03_wind_off 2 118 0.0 1.0 +de 04_res 2 118 0.0 1.0 +de 05_nuclear 2 118 0.0 1.0 +de 06_coal 2 118 0.0 1.0 de 07_gas 2 118 0.0 0.0 de 08_non-res 2 118 0.0 0.0 de 09_hydro_pump 2 118 0.0 0.0 -de 01_solar 2 119 1.0 0.0 -de 02_wind_on 2 119 1.0 0.0 -de 03_wind_off 2 119 1.0 0.0 -de 04_res 2 119 1.0 0.0 -de 05_nuclear 2 119 1.0 0.0 -de 06_coal 2 119 1.0 0.0 +de 01_solar 2 119 0.0 1.0 +de 02_wind_on 2 119 0.0 1.0 +de 03_wind_off 2 119 0.0 1.0 +de 04_res 2 119 0.0 1.0 +de 05_nuclear 2 119 0.0 1.0 +de 06_coal 2 119 0.0 1.0 de 07_gas 2 119 0.0 0.0 de 08_non-res 2 119 0.0 0.0 de 09_hydro_pump 2 119 0.0 0.0 -de 01_solar 2 120 1.0 0.0 -de 02_wind_on 2 120 1.0 0.0 -de 03_wind_off 2 120 1.0 0.0 -de 04_res 2 120 1.0 0.0 -de 05_nuclear 2 120 1.0 0.0 -de 06_coal 2 120 1.0 0.0 +de 01_solar 2 120 0.0 1.0 +de 02_wind_on 2 120 0.0 1.0 +de 03_wind_off 2 120 0.0 1.0 +de 04_res 2 120 0.0 1.0 +de 05_nuclear 2 120 0.0 1.0 +de 06_coal 2 120 0.0 1.0 de 07_gas 2 120 0.0 0.0 de 08_non-res 2 120 0.0 0.0 de 09_hydro_pump 2 120 0.0 0.0 -de 01_solar 2 121 1.0 0.0 -de 02_wind_on 2 121 1.0 0.0 -de 03_wind_off 2 121 1.0 0.0 -de 04_res 2 121 1.0 0.0 -de 05_nuclear 2 121 1.0 0.0 -de 06_coal 2 121 1.0 0.0 +de 01_solar 2 121 0.0 1.0 +de 02_wind_on 2 121 0.0 1.0 +de 03_wind_off 2 121 0.0 1.0 +de 04_res 2 121 0.0 1.0 +de 05_nuclear 2 121 0.0 1.0 +de 06_coal 2 121 0.0 1.0 de 07_gas 2 121 0.0 0.0 de 08_non-res 2 121 0.0 0.0 de 09_hydro_pump 2 121 0.0 0.0 -de 01_solar 2 122 1.0 0.0 -de 02_wind_on 2 122 1.0 0.0 -de 03_wind_off 2 122 1.0 0.0 -de 04_res 2 122 1.0 0.0 -de 05_nuclear 2 122 1.0 0.0 -de 06_coal 2 122 1.0 0.0 -de 07_gas 2 122 1.0 0.0 +de 01_solar 2 122 0.0 1.0 +de 02_wind_on 2 122 0.0 1.0 +de 03_wind_off 2 122 0.0 1.0 +de 04_res 2 122 0.0 1.0 +de 05_nuclear 2 122 0.0 1.0 +de 06_coal 2 122 0.0 1.0 +de 07_gas 2 122 0.0 1.0 de 08_non-res 2 122 0.0 0.0 de 09_hydro_pump 2 122 0.0 0.0 -de 01_solar 2 123 1.0 0.0 -de 02_wind_on 2 123 1.0 0.0 -de 03_wind_off 2 123 1.0 0.0 -de 04_res 2 123 1.0 0.0 -de 05_nuclear 2 123 1.0 0.0 -de 06_coal 2 123 1.0 0.0 -de 07_gas 2 123 1.0 0.0 +de 01_solar 2 123 0.0 1.0 +de 02_wind_on 2 123 0.0 1.0 +de 03_wind_off 2 123 0.0 1.0 +de 04_res 2 123 0.0 1.0 +de 05_nuclear 2 123 0.0 1.0 +de 06_coal 2 123 0.0 1.0 +de 07_gas 2 123 0.0 1.0 de 08_non-res 2 123 0.0 0.0 de 09_hydro_pump 2 123 0.0 0.0 -de 01_solar 2 124 1.0 0.0 -de 02_wind_on 2 124 1.0 0.0 -de 03_wind_off 2 124 1.0 0.0 -de 04_res 2 124 1.0 0.0 -de 05_nuclear 2 124 1.0 0.0 -de 06_coal 2 124 1.0 0.0 -de 07_gas 2 124 1.0 0.0 +de 01_solar 2 124 0.0 1.0 +de 02_wind_on 2 124 0.0 1.0 +de 03_wind_off 2 124 0.0 1.0 +de 04_res 2 124 0.0 1.0 +de 05_nuclear 2 124 0.0 1.0 +de 06_coal 2 124 0.0 1.0 +de 07_gas 2 124 0.0 1.0 de 08_non-res 2 124 0.0 0.0 de 09_hydro_pump 2 124 0.0 0.0 -de 01_solar 2 125 1.0 0.0 -de 02_wind_on 2 125 1.0 0.0 -de 03_wind_off 2 125 1.0 0.0 -de 04_res 2 125 1.0 0.0 -de 05_nuclear 2 125 1.0 0.0 -de 06_coal 2 125 1.0 0.0 -de 07_gas 2 125 1.0 0.0 +de 01_solar 2 125 0.0 1.0 +de 02_wind_on 2 125 0.0 1.0 +de 03_wind_off 2 125 0.0 1.0 +de 04_res 2 125 0.0 1.0 +de 05_nuclear 2 125 0.0 1.0 +de 06_coal 2 125 0.0 1.0 +de 07_gas 2 125 0.0 1.0 de 08_non-res 2 125 0.0 0.0 de 09_hydro_pump 2 125 0.0 0.0 -de 01_solar 2 126 1.0 0.0 -de 02_wind_on 2 126 1.0 0.0 -de 03_wind_off 2 126 1.0 0.0 -de 04_res 2 126 1.0 0.0 -de 05_nuclear 2 126 1.0 0.0 -de 06_coal 2 126 1.0 0.0 -de 07_gas 2 126 1.0 0.0 +de 01_solar 2 126 0.0 1.0 +de 02_wind_on 2 126 0.0 1.0 +de 03_wind_off 2 126 0.0 1.0 +de 04_res 2 126 0.0 1.0 +de 05_nuclear 2 126 0.0 1.0 +de 06_coal 2 126 0.0 1.0 +de 07_gas 2 126 0.0 1.0 de 08_non-res 2 126 0.0 0.0 de 09_hydro_pump 2 126 0.0 0.0 -de 01_solar 2 127 1.0 0.0 -de 02_wind_on 2 127 1.0 0.0 -de 03_wind_off 2 127 1.0 0.0 -de 04_res 2 127 1.0 0.0 -de 05_nuclear 2 127 1.0 0.0 -de 06_coal 2 127 1.0 0.0 -de 07_gas 2 127 1.0 0.0 +de 01_solar 2 127 0.0 1.0 +de 02_wind_on 2 127 0.0 1.0 +de 03_wind_off 2 127 0.0 1.0 +de 04_res 2 127 0.0 1.0 +de 05_nuclear 2 127 0.0 1.0 +de 06_coal 2 127 0.0 1.0 +de 07_gas 2 127 0.0 1.0 de 08_non-res 2 127 0.0 0.0 de 09_hydro_pump 2 127 0.0 0.0 -de 01_solar 2 128 1.0 0.0 -de 02_wind_on 2 128 1.0 0.0 -de 03_wind_off 2 128 1.0 0.0 -de 04_res 2 128 1.0 0.0 -de 05_nuclear 2 128 1.0 0.0 -de 06_coal 2 128 1.0 0.0 -de 07_gas 2 128 1.0 0.0 +de 01_solar 2 128 0.0 1.0 +de 02_wind_on 2 128 0.0 1.0 +de 03_wind_off 2 128 0.0 1.0 +de 04_res 2 128 0.0 1.0 +de 05_nuclear 2 128 0.0 1.0 +de 06_coal 2 128 0.0 1.0 +de 07_gas 2 128 0.0 1.0 de 08_non-res 2 128 0.0 0.0 de 09_hydro_pump 2 128 0.0 0.0 -de 01_solar 2 129 1.0 0.0 -de 02_wind_on 2 129 1.0 0.0 -de 03_wind_off 2 129 1.0 0.0 -de 04_res 2 129 1.0 0.0 -de 05_nuclear 2 129 1.0 0.0 -de 06_coal 2 129 1.0 0.0 -de 07_gas 2 129 1.0 0.0 +de 01_solar 2 129 0.0 1.0 +de 02_wind_on 2 129 0.0 1.0 +de 03_wind_off 2 129 0.0 1.0 +de 04_res 2 129 0.0 1.0 +de 05_nuclear 2 129 0.0 1.0 +de 06_coal 2 129 0.0 1.0 +de 07_gas 2 129 0.0 1.0 de 08_non-res 2 129 0.0 0.0 de 09_hydro_pump 2 129 0.0 0.0 -de 01_solar 2 130 1.0 0.0 -de 02_wind_on 2 130 1.0 0.0 -de 03_wind_off 2 130 1.0 0.0 -de 04_res 2 130 1.0 0.0 -de 05_nuclear 2 130 1.0 0.0 -de 06_coal 2 130 1.0 0.0 -de 07_gas 2 130 1.0 0.0 +de 01_solar 2 130 0.0 1.0 +de 02_wind_on 2 130 0.0 1.0 +de 03_wind_off 2 130 0.0 1.0 +de 04_res 2 130 0.0 1.0 +de 05_nuclear 2 130 0.0 1.0 +de 06_coal 2 130 0.0 1.0 +de 07_gas 2 130 0.0 1.0 de 08_non-res 2 130 0.0 0.0 de 09_hydro_pump 2 130 0.0 0.0 -de 01_solar 2 131 1.0 0.0 -de 02_wind_on 2 131 1.0 0.0 -de 03_wind_off 2 131 1.0 0.0 -de 04_res 2 131 1.0 0.0 -de 05_nuclear 2 131 1.0 0.0 -de 06_coal 2 131 1.0 0.0 -de 07_gas 2 131 1.0 0.0 +de 01_solar 2 131 0.0 1.0 +de 02_wind_on 2 131 0.0 1.0 +de 03_wind_off 2 131 0.0 1.0 +de 04_res 2 131 0.0 1.0 +de 05_nuclear 2 131 0.0 1.0 +de 06_coal 2 131 0.0 1.0 +de 07_gas 2 131 0.0 1.0 de 08_non-res 2 131 0.0 0.0 de 09_hydro_pump 2 131 0.0 0.0 -de 01_solar 2 132 1.0 0.0 -de 02_wind_on 2 132 1.0 0.0 -de 03_wind_off 2 132 1.0 0.0 -de 04_res 2 132 1.0 0.0 -de 05_nuclear 2 132 1.0 0.0 -de 06_coal 2 132 1.0 0.0 -de 07_gas 2 132 1.0 0.0 +de 01_solar 2 132 0.0 1.0 +de 02_wind_on 2 132 0.0 1.0 +de 03_wind_off 2 132 0.0 1.0 +de 04_res 2 132 0.0 1.0 +de 05_nuclear 2 132 0.0 1.0 +de 06_coal 2 132 0.0 1.0 +de 07_gas 2 132 0.0 1.0 de 08_non-res 2 132 0.0 0.0 de 09_hydro_pump 2 132 0.0 0.0 -de 01_solar 2 133 1.0 0.0 -de 02_wind_on 2 133 1.0 0.0 -de 03_wind_off 2 133 1.0 0.0 -de 04_res 2 133 1.0 0.0 -de 05_nuclear 2 133 1.0 0.0 -de 06_coal 2 133 1.0 0.0 -de 07_gas 2 133 1.0 0.0 +de 01_solar 2 133 0.0 1.0 +de 02_wind_on 2 133 0.0 1.0 +de 03_wind_off 2 133 0.0 1.0 +de 04_res 2 133 0.0 1.0 +de 05_nuclear 2 133 0.0 1.0 +de 06_coal 2 133 0.0 1.0 +de 07_gas 2 133 0.0 1.0 de 08_non-res 2 133 0.0 0.0 de 09_hydro_pump 2 133 0.0 0.0 -de 01_solar 2 134 1.0 0.0 -de 02_wind_on 2 134 1.0 0.0 -de 03_wind_off 2 134 1.0 0.0 -de 04_res 2 134 1.0 0.0 -de 05_nuclear 2 134 1.0 0.0 -de 06_coal 2 134 1.0 0.0 -de 07_gas 2 134 1.0 0.0 +de 01_solar 2 134 0.0 1.0 +de 02_wind_on 2 134 0.0 1.0 +de 03_wind_off 2 134 0.0 1.0 +de 04_res 2 134 0.0 1.0 +de 05_nuclear 2 134 0.0 1.0 +de 06_coal 2 134 0.0 1.0 +de 07_gas 2 134 0.0 1.0 de 08_non-res 2 134 0.0 0.0 de 09_hydro_pump 2 134 0.0 0.0 -de 01_solar 2 135 1.0 0.0 -de 02_wind_on 2 135 1.0 0.0 -de 03_wind_off 2 135 1.0 0.0 -de 04_res 2 135 1.0 0.0 -de 05_nuclear 2 135 1.0 0.0 -de 06_coal 2 135 1.0 0.0 -de 07_gas 2 135 1.0 0.0 +de 01_solar 2 135 0.0 1.0 +de 02_wind_on 2 135 0.0 1.0 +de 03_wind_off 2 135 0.0 1.0 +de 04_res 2 135 0.0 1.0 +de 05_nuclear 2 135 0.0 1.0 +de 06_coal 2 135 0.0 1.0 +de 07_gas 2 135 0.0 1.0 de 08_non-res 2 135 0.0 0.0 de 09_hydro_pump 2 135 0.0 0.0 -de 01_solar 2 136 1.0 0.0 -de 02_wind_on 2 136 1.0 0.0 -de 03_wind_off 2 136 1.0 0.0 -de 04_res 2 136 1.0 0.0 -de 05_nuclear 2 136 1.0 0.0 -de 06_coal 2 136 1.0 0.0 -de 07_gas 2 136 1.0 0.0 +de 01_solar 2 136 0.0 1.0 +de 02_wind_on 2 136 0.0 1.0 +de 03_wind_off 2 136 0.0 1.0 +de 04_res 2 136 0.0 1.0 +de 05_nuclear 2 136 0.0 1.0 +de 06_coal 2 136 0.0 1.0 +de 07_gas 2 136 0.0 1.0 de 08_non-res 2 136 0.0 0.0 de 09_hydro_pump 2 136 0.0 0.0 -de 01_solar 2 137 1.0 0.0 -de 02_wind_on 2 137 1.0 0.0 -de 03_wind_off 2 137 1.0 0.0 -de 04_res 2 137 1.0 0.0 -de 05_nuclear 2 137 1.0 0.0 -de 06_coal 2 137 1.0 0.0 -de 07_gas 2 137 1.0 0.0 +de 01_solar 2 137 0.0 1.0 +de 02_wind_on 2 137 0.0 1.0 +de 03_wind_off 2 137 0.0 1.0 +de 04_res 2 137 0.0 1.0 +de 05_nuclear 2 137 0.0 1.0 +de 06_coal 2 137 0.0 1.0 +de 07_gas 2 137 0.0 1.0 de 08_non-res 2 137 0.0 0.0 de 09_hydro_pump 2 137 0.0 0.0 -de 01_solar 2 138 1.0 0.0 -de 02_wind_on 2 138 1.0 0.0 -de 03_wind_off 2 138 1.0 0.0 -de 04_res 2 138 1.0 0.0 -de 05_nuclear 2 138 1.0 0.0 -de 06_coal 2 138 1.0 0.0 -de 07_gas 2 138 1.0 0.0 +de 01_solar 2 138 0.0 1.0 +de 02_wind_on 2 138 0.0 1.0 +de 03_wind_off 2 138 0.0 1.0 +de 04_res 2 138 0.0 1.0 +de 05_nuclear 2 138 0.0 1.0 +de 06_coal 2 138 0.0 1.0 +de 07_gas 2 138 0.0 1.0 de 08_non-res 2 138 0.0 0.0 de 09_hydro_pump 2 138 0.0 0.0 -de 01_solar 2 139 1.0 0.0 -de 02_wind_on 2 139 1.0 0.0 -de 03_wind_off 2 139 1.0 0.0 -de 04_res 2 139 1.0 0.0 -de 05_nuclear 2 139 1.0 0.0 -de 06_coal 2 139 1.0 0.0 -de 07_gas 2 139 1.0 0.0 +de 01_solar 2 139 0.0 1.0 +de 02_wind_on 2 139 0.0 1.0 +de 03_wind_off 2 139 0.0 1.0 +de 04_res 2 139 0.0 1.0 +de 05_nuclear 2 139 0.0 1.0 +de 06_coal 2 139 0.0 1.0 +de 07_gas 2 139 0.0 1.0 de 08_non-res 2 139 0.0 0.0 de 09_hydro_pump 2 139 0.0 0.0 -de 01_solar 2 140 1.0 0.0 -de 02_wind_on 2 140 1.0 0.0 -de 03_wind_off 2 140 1.0 0.0 -de 04_res 2 140 1.0 0.0 -de 05_nuclear 2 140 1.0 0.0 -de 06_coal 2 140 1.0 0.0 -de 07_gas 2 140 1.0 0.0 +de 01_solar 2 140 0.0 1.0 +de 02_wind_on 2 140 0.0 1.0 +de 03_wind_off 2 140 0.0 1.0 +de 04_res 2 140 0.0 1.0 +de 05_nuclear 2 140 0.0 1.0 +de 06_coal 2 140 0.0 1.0 +de 07_gas 2 140 0.0 1.0 de 08_non-res 2 140 0.0 0.0 de 09_hydro_pump 2 140 0.0 0.0 -de 01_solar 2 141 1.0 0.0 -de 02_wind_on 2 141 1.0 0.0 -de 03_wind_off 2 141 1.0 0.0 -de 04_res 2 141 1.0 0.0 -de 05_nuclear 2 141 1.0 0.0 -de 06_coal 2 141 1.0 0.0 -de 07_gas 2 141 1.0 0.0 +de 01_solar 2 141 0.0 1.0 +de 02_wind_on 2 141 0.0 1.0 +de 03_wind_off 2 141 0.0 1.0 +de 04_res 2 141 0.0 1.0 +de 05_nuclear 2 141 0.0 1.0 +de 06_coal 2 141 0.0 1.0 +de 07_gas 2 141 0.0 1.0 de 08_non-res 2 141 0.0 0.0 de 09_hydro_pump 2 141 0.0 0.0 -de 01_solar 2 142 1.0 0.0 -de 02_wind_on 2 142 1.0 0.0 -de 03_wind_off 2 142 1.0 0.0 -de 04_res 2 142 1.0 0.0 -de 05_nuclear 2 142 1.0 0.0 -de 06_coal 2 142 1.0 0.0 -de 07_gas 2 142 1.0 0.0 -de 08_non-res 2 142 1.0 0.0 +de 01_solar 2 142 0.0 1.0 +de 02_wind_on 2 142 0.0 1.0 +de 03_wind_off 2 142 0.0 1.0 +de 04_res 2 142 0.0 1.0 +de 05_nuclear 2 142 0.0 1.0 +de 06_coal 2 142 0.0 1.0 +de 07_gas 2 142 0.0 1.0 +de 08_non-res 2 142 0.0 1.0 de 09_hydro_pump 2 142 0.0 0.0 -de 01_solar 2 143 1.0 0.0 -de 02_wind_on 2 143 1.0 0.0 -de 03_wind_off 2 143 1.0 0.0 -de 04_res 2 143 1.0 0.0 -de 05_nuclear 2 143 1.0 0.0 -de 06_coal 2 143 1.0 0.0 -de 07_gas 2 143 1.0 0.0 -de 08_non-res 2 143 1.0 0.0 +de 01_solar 2 143 0.0 1.0 +de 02_wind_on 2 143 0.0 1.0 +de 03_wind_off 2 143 0.0 1.0 +de 04_res 2 143 0.0 1.0 +de 05_nuclear 2 143 0.0 1.0 +de 06_coal 2 143 0.0 1.0 +de 07_gas 2 143 0.0 1.0 +de 08_non-res 2 143 0.0 1.0 de 09_hydro_pump 2 143 0.0 0.0 -de 01_solar 2 144 1.0 0.0 -de 02_wind_on 2 144 1.0 0.0 -de 03_wind_off 2 144 1.0 0.0 -de 04_res 2 144 1.0 0.0 -de 05_nuclear 2 144 1.0 0.0 -de 06_coal 2 144 1.0 0.0 -de 07_gas 2 144 1.0 0.0 -de 08_non-res 2 144 1.0 0.0 +de 01_solar 2 144 0.0 1.0 +de 02_wind_on 2 144 0.0 1.0 +de 03_wind_off 2 144 0.0 1.0 +de 04_res 2 144 0.0 1.0 +de 05_nuclear 2 144 0.0 1.0 +de 06_coal 2 144 0.0 1.0 +de 07_gas 2 144 0.0 1.0 +de 08_non-res 2 144 0.0 1.0 de 09_hydro_pump 2 144 0.0 0.0 -de 01_solar 2 145 1.0 0.0 -de 02_wind_on 2 145 1.0 0.0 -de 03_wind_off 2 145 1.0 0.0 -de 04_res 2 145 1.0 0.0 -de 05_nuclear 2 145 1.0 0.0 -de 06_coal 2 145 1.0 0.0 -de 07_gas 2 145 1.0 0.0 -de 08_non-res 2 145 1.0 0.0 +de 01_solar 2 145 0.0 1.0 +de 02_wind_on 2 145 0.0 1.0 +de 03_wind_off 2 145 0.0 1.0 +de 04_res 2 145 0.0 1.0 +de 05_nuclear 2 145 0.0 1.0 +de 06_coal 2 145 0.0 1.0 +de 07_gas 2 145 0.0 1.0 +de 08_non-res 2 145 0.0 1.0 de 09_hydro_pump 2 145 0.0 0.0 -de 01_solar 2 146 1.0 0.0 -de 02_wind_on 2 146 1.0 0.0 -de 03_wind_off 2 146 1.0 0.0 -de 04_res 2 146 1.0 0.0 -de 05_nuclear 2 146 1.0 0.0 -de 06_coal 2 146 1.0 0.0 -de 07_gas 2 146 1.0 0.0 -de 08_non-res 2 146 1.0 0.0 +de 01_solar 2 146 0.0 1.0 +de 02_wind_on 2 146 0.0 1.0 +de 03_wind_off 2 146 0.0 1.0 +de 04_res 2 146 0.0 1.0 +de 05_nuclear 2 146 0.0 1.0 +de 06_coal 2 146 0.0 1.0 +de 07_gas 2 146 0.0 1.0 +de 08_non-res 2 146 0.0 1.0 de 09_hydro_pump 2 146 0.0 0.0 -de 01_solar 2 147 1.0 0.0 -de 02_wind_on 2 147 1.0 0.0 -de 03_wind_off 2 147 1.0 0.0 -de 04_res 2 147 1.0 0.0 -de 05_nuclear 2 147 1.0 0.0 -de 06_coal 2 147 1.0 0.0 -de 07_gas 2 147 1.0 0.0 -de 08_non-res 2 147 1.0 0.0 +de 01_solar 2 147 0.0 1.0 +de 02_wind_on 2 147 0.0 1.0 +de 03_wind_off 2 147 0.0 1.0 +de 04_res 2 147 0.0 1.0 +de 05_nuclear 2 147 0.0 1.0 +de 06_coal 2 147 0.0 1.0 +de 07_gas 2 147 0.0 1.0 +de 08_non-res 2 147 0.0 1.0 de 09_hydro_pump 2 147 0.0 0.0 -de 01_solar 2 148 1.0 0.0 -de 02_wind_on 2 148 1.0 0.0 -de 03_wind_off 2 148 1.0 0.0 -de 04_res 2 148 1.0 0.0 -de 05_nuclear 2 148 1.0 0.0 -de 06_coal 2 148 1.0 0.0 -de 07_gas 2 148 1.0 0.0 -de 08_non-res 2 148 1.0 0.0 +de 01_solar 2 148 0.0 1.0 +de 02_wind_on 2 148 0.0 1.0 +de 03_wind_off 2 148 0.0 1.0 +de 04_res 2 148 0.0 1.0 +de 05_nuclear 2 148 0.0 1.0 +de 06_coal 2 148 0.0 1.0 +de 07_gas 2 148 0.0 1.0 +de 08_non-res 2 148 0.0 1.0 de 09_hydro_pump 2 148 0.0 0.0 -de 01_solar 2 149 1.0 0.0 -de 02_wind_on 2 149 1.0 0.0 -de 03_wind_off 2 149 1.0 0.0 -de 04_res 2 149 1.0 0.0 -de 05_nuclear 2 149 1.0 0.0 -de 06_coal 2 149 1.0 0.0 -de 07_gas 2 149 1.0 0.0 -de 08_non-res 2 149 1.0 0.0 +de 01_solar 2 149 0.0 1.0 +de 02_wind_on 2 149 0.0 1.0 +de 03_wind_off 2 149 0.0 1.0 +de 04_res 2 149 0.0 1.0 +de 05_nuclear 2 149 0.0 1.0 +de 06_coal 2 149 0.0 1.0 +de 07_gas 2 149 0.0 1.0 +de 08_non-res 2 149 0.0 1.0 de 09_hydro_pump 2 149 0.0 0.0 -de 01_solar 2 150 1.0 0.0 -de 02_wind_on 2 150 1.0 0.0 -de 03_wind_off 2 150 1.0 0.0 -de 04_res 2 150 1.0 0.0 -de 05_nuclear 2 150 1.0 0.0 -de 06_coal 2 150 1.0 0.0 -de 07_gas 2 150 1.0 0.0 -de 08_non-res 2 150 1.0 0.0 +de 01_solar 2 150 0.0 1.0 +de 02_wind_on 2 150 0.0 1.0 +de 03_wind_off 2 150 0.0 1.0 +de 04_res 2 150 0.0 1.0 +de 05_nuclear 2 150 0.0 1.0 +de 06_coal 2 150 0.0 1.0 +de 07_gas 2 150 0.0 1.0 +de 08_non-res 2 150 0.0 1.0 de 09_hydro_pump 2 150 0.0 0.0 -de 01_solar 2 151 1.0 0.0 -de 02_wind_on 2 151 1.0 0.0 -de 03_wind_off 2 151 1.0 0.0 -de 04_res 2 151 1.0 0.0 -de 05_nuclear 2 151 1.0 0.0 -de 06_coal 2 151 1.0 0.0 -de 07_gas 2 151 1.0 0.0 -de 08_non-res 2 151 1.0 0.0 +de 01_solar 2 151 0.0 1.0 +de 02_wind_on 2 151 0.0 1.0 +de 03_wind_off 2 151 0.0 1.0 +de 04_res 2 151 0.0 1.0 +de 05_nuclear 2 151 0.0 1.0 +de 06_coal 2 151 0.0 1.0 +de 07_gas 2 151 0.0 1.0 +de 08_non-res 2 151 0.0 1.0 de 09_hydro_pump 2 151 0.0 0.0 -de 01_solar 2 152 1.0 0.0 -de 02_wind_on 2 152 1.0 0.0 -de 03_wind_off 2 152 1.0 0.0 -de 04_res 2 152 1.0 0.0 -de 05_nuclear 2 152 1.0 0.0 -de 06_coal 2 152 1.0 0.0 -de 07_gas 2 152 1.0 0.0 -de 08_non-res 2 152 1.0 0.0 +de 01_solar 2 152 0.0 1.0 +de 02_wind_on 2 152 0.0 1.0 +de 03_wind_off 2 152 0.0 1.0 +de 04_res 2 152 0.0 1.0 +de 05_nuclear 2 152 0.0 1.0 +de 06_coal 2 152 0.0 1.0 +de 07_gas 2 152 0.0 1.0 +de 08_non-res 2 152 0.0 1.0 de 09_hydro_pump 2 152 0.0 0.0 -de 01_solar 2 153 1.0 0.0 -de 02_wind_on 2 153 1.0 0.0 -de 03_wind_off 2 153 1.0 0.0 -de 04_res 2 153 1.0 0.0 -de 05_nuclear 2 153 1.0 0.0 -de 06_coal 2 153 1.0 0.0 -de 07_gas 2 153 1.0 0.0 -de 08_non-res 2 153 1.0 0.0 +de 01_solar 2 153 0.0 1.0 +de 02_wind_on 2 153 0.0 1.0 +de 03_wind_off 2 153 0.0 1.0 +de 04_res 2 153 0.0 1.0 +de 05_nuclear 2 153 0.0 1.0 +de 06_coal 2 153 0.0 1.0 +de 07_gas 2 153 0.0 1.0 +de 08_non-res 2 153 0.0 1.0 de 09_hydro_pump 2 153 0.0 0.0 -de 01_solar 2 154 1.0 0.0 -de 02_wind_on 2 154 1.0 0.0 -de 03_wind_off 2 154 1.0 0.0 -de 04_res 2 154 1.0 0.0 -de 05_nuclear 2 154 1.0 0.0 -de 06_coal 2 154 1.0 0.0 -de 07_gas 2 154 1.0 0.0 -de 08_non-res 2 154 1.0 0.0 +de 01_solar 2 154 0.0 1.0 +de 02_wind_on 2 154 0.0 1.0 +de 03_wind_off 2 154 0.0 1.0 +de 04_res 2 154 0.0 1.0 +de 05_nuclear 2 154 0.0 1.0 +de 06_coal 2 154 0.0 1.0 +de 07_gas 2 154 0.0 1.0 +de 08_non-res 2 154 0.0 1.0 de 09_hydro_pump 2 154 0.0 0.0 -de 01_solar 2 155 1.0 0.0 -de 02_wind_on 2 155 1.0 0.0 -de 03_wind_off 2 155 1.0 0.0 -de 04_res 2 155 1.0 0.0 -de 05_nuclear 2 155 1.0 0.0 -de 06_coal 2 155 1.0 0.0 -de 07_gas 2 155 1.0 0.0 -de 08_non-res 2 155 1.0 0.0 +de 01_solar 2 155 0.0 1.0 +de 02_wind_on 2 155 0.0 1.0 +de 03_wind_off 2 155 0.0 1.0 +de 04_res 2 155 0.0 1.0 +de 05_nuclear 2 155 0.0 1.0 +de 06_coal 2 155 0.0 1.0 +de 07_gas 2 155 0.0 1.0 +de 08_non-res 2 155 0.0 1.0 de 09_hydro_pump 2 155 0.0 0.0 -de 01_solar 2 156 1.0 0.0 -de 02_wind_on 2 156 1.0 0.0 -de 03_wind_off 2 156 1.0 0.0 -de 04_res 2 156 1.0 0.0 -de 05_nuclear 2 156 1.0 0.0 -de 06_coal 2 156 1.0 0.0 -de 07_gas 2 156 1.0 0.0 -de 08_non-res 2 156 1.0 0.0 +de 01_solar 2 156 0.0 1.0 +de 02_wind_on 2 156 0.0 1.0 +de 03_wind_off 2 156 0.0 1.0 +de 04_res 2 156 0.0 1.0 +de 05_nuclear 2 156 0.0 1.0 +de 06_coal 2 156 0.0 1.0 +de 07_gas 2 156 0.0 1.0 +de 08_non-res 2 156 0.0 1.0 de 09_hydro_pump 2 156 0.0 0.0 -de 01_solar 2 157 1.0 0.0 -de 02_wind_on 2 157 1.0 0.0 -de 03_wind_off 2 157 1.0 0.0 -de 04_res 2 157 1.0 0.0 -de 05_nuclear 2 157 1.0 0.0 -de 06_coal 2 157 1.0 0.0 -de 07_gas 2 157 1.0 0.0 -de 08_non-res 2 157 1.0 0.0 +de 01_solar 2 157 0.0 1.0 +de 02_wind_on 2 157 0.0 1.0 +de 03_wind_off 2 157 0.0 1.0 +de 04_res 2 157 0.0 1.0 +de 05_nuclear 2 157 0.0 1.0 +de 06_coal 2 157 0.0 1.0 +de 07_gas 2 157 0.0 1.0 +de 08_non-res 2 157 0.0 1.0 de 09_hydro_pump 2 157 0.0 0.0 -de 01_solar 2 158 1.0 0.0 -de 02_wind_on 2 158 1.0 0.0 -de 03_wind_off 2 158 1.0 0.0 -de 04_res 2 158 1.0 0.0 -de 05_nuclear 2 158 1.0 0.0 -de 06_coal 2 158 1.0 0.0 -de 07_gas 2 158 1.0 0.0 -de 08_non-res 2 158 1.0 0.0 +de 01_solar 2 158 0.0 1.0 +de 02_wind_on 2 158 0.0 1.0 +de 03_wind_off 2 158 0.0 1.0 +de 04_res 2 158 0.0 1.0 +de 05_nuclear 2 158 0.0 1.0 +de 06_coal 2 158 0.0 1.0 +de 07_gas 2 158 0.0 1.0 +de 08_non-res 2 158 0.0 1.0 de 09_hydro_pump 2 158 0.0 0.0 -de 01_solar 2 159 1.0 0.0 -de 02_wind_on 2 159 1.0 0.0 -de 03_wind_off 2 159 1.0 0.0 -de 04_res 2 159 1.0 0.0 -de 05_nuclear 2 159 1.0 0.0 -de 06_coal 2 159 1.0 0.0 -de 07_gas 2 159 1.0 0.0 -de 08_non-res 2 159 1.0 0.0 +de 01_solar 2 159 0.0 1.0 +de 02_wind_on 2 159 0.0 1.0 +de 03_wind_off 2 159 0.0 1.0 +de 04_res 2 159 0.0 1.0 +de 05_nuclear 2 159 0.0 1.0 +de 06_coal 2 159 0.0 1.0 +de 07_gas 2 159 0.0 1.0 +de 08_non-res 2 159 0.0 1.0 de 09_hydro_pump 2 159 0.0 0.0 -de 01_solar 2 160 1.0 0.0 -de 02_wind_on 2 160 1.0 0.0 -de 03_wind_off 2 160 1.0 0.0 -de 04_res 2 160 1.0 0.0 -de 05_nuclear 2 160 1.0 0.0 -de 06_coal 2 160 1.0 0.0 -de 07_gas 2 160 1.0 0.0 -de 08_non-res 2 160 1.0 0.0 +de 01_solar 2 160 0.0 1.0 +de 02_wind_on 2 160 0.0 1.0 +de 03_wind_off 2 160 0.0 1.0 +de 04_res 2 160 0.0 1.0 +de 05_nuclear 2 160 0.0 1.0 +de 06_coal 2 160 0.0 1.0 +de 07_gas 2 160 0.0 1.0 +de 08_non-res 2 160 0.0 1.0 de 09_hydro_pump 2 160 0.0 0.0 -de 01_solar 2 161 1.0 0.0 -de 02_wind_on 2 161 1.0 0.0 -de 03_wind_off 2 161 1.0 0.0 -de 04_res 2 161 1.0 0.0 -de 05_nuclear 2 161 1.0 0.0 -de 06_coal 2 161 1.0 0.0 -de 07_gas 2 161 1.0 0.0 -de 08_non-res 2 161 1.0 0.0 +de 01_solar 2 161 0.0 1.0 +de 02_wind_on 2 161 0.0 1.0 +de 03_wind_off 2 161 0.0 1.0 +de 04_res 2 161 0.0 1.0 +de 05_nuclear 2 161 0.0 1.0 +de 06_coal 2 161 0.0 1.0 +de 07_gas 2 161 0.0 1.0 +de 08_non-res 2 161 0.0 1.0 de 09_hydro_pump 2 161 0.0 0.0 -de 01_solar 2 162 1.0 0.0 -de 02_wind_on 2 162 1.0 0.0 -de 03_wind_off 2 162 1.0 0.0 -de 04_res 2 162 1.0 0.0 -de 05_nuclear 2 162 1.0 0.0 -de 06_coal 2 162 1.0 0.0 -de 07_gas 2 162 1.0 0.0 -de 08_non-res 2 162 1.0 0.0 -de 09_hydro_pump 2 162 1.0 0.0 -de 01_solar 2 163 1.0 0.0 -de 02_wind_on 2 163 1.0 0.0 -de 03_wind_off 2 163 1.0 0.0 -de 04_res 2 163 1.0 0.0 -de 05_nuclear 2 163 1.0 0.0 -de 06_coal 2 163 1.0 0.0 -de 07_gas 2 163 1.0 0.0 -de 08_non-res 2 163 1.0 0.0 -de 09_hydro_pump 2 163 1.0 0.0 -de 01_solar 2 164 1.0 0.0 -de 02_wind_on 2 164 1.0 0.0 -de 03_wind_off 2 164 1.0 0.0 -de 04_res 2 164 1.0 0.0 -de 05_nuclear 2 164 1.0 0.0 -de 06_coal 2 164 1.0 0.0 -de 07_gas 2 164 1.0 0.0 -de 08_non-res 2 164 1.0 0.0 -de 09_hydro_pump 2 164 1.0 0.0 -de 01_solar 2 165 1.0 0.0 -de 02_wind_on 2 165 1.0 0.0 -de 03_wind_off 2 165 1.0 0.0 -de 04_res 2 165 1.0 0.0 -de 05_nuclear 2 165 1.0 0.0 -de 06_coal 2 165 1.0 0.0 -de 07_gas 2 165 1.0 0.0 -de 08_non-res 2 165 1.0 0.0 -de 09_hydro_pump 2 165 1.0 0.0 -de 01_solar 2 166 1.0 0.0 -de 02_wind_on 2 166 1.0 0.0 -de 03_wind_off 2 166 1.0 0.0 -de 04_res 2 166 1.0 0.0 -de 05_nuclear 2 166 1.0 0.0 -de 06_coal 2 166 1.0 0.0 -de 07_gas 2 166 1.0 0.0 -de 08_non-res 2 166 1.0 0.0 -de 09_hydro_pump 2 166 1.0 0.0 -de 01_solar 2 167 1.0 0.0 -de 02_wind_on 2 167 1.0 0.0 -de 03_wind_off 2 167 1.0 0.0 -de 04_res 2 167 1.0 0.0 -de 05_nuclear 2 167 1.0 0.0 -de 06_coal 2 167 1.0 0.0 -de 07_gas 2 167 1.0 0.0 -de 08_non-res 2 167 1.0 0.0 -de 09_hydro_pump 2 167 1.0 0.0 -de 01_solar 2 168 1.0 0.0 -de 02_wind_on 2 168 1.0 0.0 -de 03_wind_off 2 168 1.0 0.0 -de 04_res 2 168 1.0 0.0 -de 05_nuclear 2 168 1.0 0.0 -de 06_coal 2 168 1.0 0.0 -de 07_gas 2 168 1.0 0.0 -de 08_non-res 2 168 1.0 0.0 -de 09_hydro_pump 2 168 1.0 0.0 +de 01_solar 2 162 0.0 1.0 +de 02_wind_on 2 162 0.0 1.0 +de 03_wind_off 2 162 0.0 1.0 +de 04_res 2 162 0.0 1.0 +de 05_nuclear 2 162 0.0 1.0 +de 06_coal 2 162 0.0 1.0 +de 07_gas 2 162 0.0 1.0 +de 08_non-res 2 162 0.0 1.0 +de 09_hydro_pump 2 162 0.0 1.0 +de 01_solar 2 163 0.0 1.0 +de 02_wind_on 2 163 0.0 1.0 +de 03_wind_off 2 163 0.0 1.0 +de 04_res 2 163 0.0 1.0 +de 05_nuclear 2 163 0.0 1.0 +de 06_coal 2 163 0.0 1.0 +de 07_gas 2 163 0.0 1.0 +de 08_non-res 2 163 0.0 1.0 +de 09_hydro_pump 2 163 0.0 1.0 +de 01_solar 2 164 0.0 1.0 +de 02_wind_on 2 164 0.0 1.0 +de 03_wind_off 2 164 0.0 1.0 +de 04_res 2 164 0.0 1.0 +de 05_nuclear 2 164 0.0 1.0 +de 06_coal 2 164 0.0 1.0 +de 07_gas 2 164 0.0 1.0 +de 08_non-res 2 164 0.0 1.0 +de 09_hydro_pump 2 164 0.0 1.0 +de 01_solar 2 165 0.0 1.0 +de 02_wind_on 2 165 0.0 1.0 +de 03_wind_off 2 165 0.0 1.0 +de 04_res 2 165 0.0 1.0 +de 05_nuclear 2 165 0.0 1.0 +de 06_coal 2 165 0.0 1.0 +de 07_gas 2 165 0.0 1.0 +de 08_non-res 2 165 0.0 1.0 +de 09_hydro_pump 2 165 0.0 1.0 +de 01_solar 2 166 0.0 1.0 +de 02_wind_on 2 166 0.0 1.0 +de 03_wind_off 2 166 0.0 1.0 +de 04_res 2 166 0.0 1.0 +de 05_nuclear 2 166 0.0 1.0 +de 06_coal 2 166 0.0 1.0 +de 07_gas 2 166 0.0 1.0 +de 08_non-res 2 166 0.0 1.0 +de 09_hydro_pump 2 166 0.0 1.0 +de 01_solar 2 167 0.0 1.0 +de 02_wind_on 2 167 0.0 1.0 +de 03_wind_off 2 167 0.0 1.0 +de 04_res 2 167 0.0 1.0 +de 05_nuclear 2 167 0.0 1.0 +de 06_coal 2 167 0.0 1.0 +de 07_gas 2 167 0.0 1.0 +de 08_non-res 2 167 0.0 1.0 +de 09_hydro_pump 2 167 0.0 1.0 +de 01_solar 2 168 0.0 1.0 +de 02_wind_on 2 168 0.0 1.0 +de 03_wind_off 2 168 0.0 1.0 +de 04_res 2 168 0.0 1.0 +de 05_nuclear 2 168 0.0 1.0 +de 06_coal 2 168 0.0 1.0 +de 07_gas 2 168 0.0 1.0 +de 08_non-res 2 168 0.0 1.0 +de 09_hydro_pump 2 168 0.0 1.0 de 01_solar 2 169 0.0 0.0 de 02_wind_on 2 169 0.0 0.0 de 03_wind_off 2 169 0.0 0.0 @@ -13616,7 +13616,7 @@ de 06_coal 2 169 0.0 0.0 de 07_gas 2 169 0.0 0.0 de 08_non-res 2 169 0.0 0.0 de 09_hydro_pump 2 169 0.0 0.0 -de 01_solar 2 170 1.0 0.0 +de 01_solar 2 170 0.0 1.0 de 02_wind_on 2 170 0.0 0.0 de 03_wind_off 2 170 0.0 0.0 de 04_res 2 170 0.0 0.0 @@ -13625,7 +13625,7 @@ de 06_coal 2 170 0.0 0.0 de 07_gas 2 170 0.0 0.0 de 08_non-res 2 170 0.0 0.0 de 09_hydro_pump 2 170 0.0 0.0 -de 01_solar 2 171 1.0 0.0 +de 01_solar 2 171 0.0 1.0 de 02_wind_on 2 171 0.0 0.0 de 03_wind_off 2 171 0.0 0.0 de 04_res 2 171 0.0 0.0 @@ -13634,7 +13634,7 @@ de 06_coal 2 171 0.0 0.0 de 07_gas 2 171 0.0 0.0 de 08_non-res 2 171 0.0 0.0 de 09_hydro_pump 2 171 0.0 0.0 -de 01_solar 2 172 1.0 0.0 +de 01_solar 2 172 0.0 1.0 de 02_wind_on 2 172 0.0 0.0 de 03_wind_off 2 172 0.0 0.0 de 04_res 2 172 0.0 0.0 @@ -13643,7 +13643,7 @@ de 06_coal 2 172 0.0 0.0 de 07_gas 2 172 0.0 0.0 de 08_non-res 2 172 0.0 0.0 de 09_hydro_pump 2 172 0.0 0.0 -de 01_solar 2 173 1.0 0.0 +de 01_solar 2 173 0.0 1.0 de 02_wind_on 2 173 0.0 0.0 de 03_wind_off 2 173 0.0 0.0 de 04_res 2 173 0.0 0.0 @@ -13652,7 +13652,7 @@ de 06_coal 2 173 0.0 0.0 de 07_gas 2 173 0.0 0.0 de 08_non-res 2 173 0.0 0.0 de 09_hydro_pump 2 173 0.0 0.0 -de 01_solar 2 174 1.0 0.0 +de 01_solar 2 174 0.0 1.0 de 02_wind_on 2 174 0.0 0.0 de 03_wind_off 2 174 0.0 0.0 de 04_res 2 174 0.0 0.0 @@ -13661,7 +13661,7 @@ de 06_coal 2 174 0.0 0.0 de 07_gas 2 174 0.0 0.0 de 08_non-res 2 174 0.0 0.0 de 09_hydro_pump 2 174 0.0 0.0 -de 01_solar 2 175 1.0 0.0 +de 01_solar 2 175 0.0 1.0 de 02_wind_on 2 175 0.0 0.0 de 03_wind_off 2 175 0.0 0.0 de 04_res 2 175 0.0 0.0 @@ -13670,7 +13670,7 @@ de 06_coal 2 175 0.0 0.0 de 07_gas 2 175 0.0 0.0 de 08_non-res 2 175 0.0 0.0 de 09_hydro_pump 2 175 0.0 0.0 -de 01_solar 2 176 1.0 0.0 +de 01_solar 2 176 0.0 1.0 de 02_wind_on 2 176 0.0 0.0 de 03_wind_off 2 176 0.0 0.0 de 04_res 2 176 0.0 0.0 @@ -13679,7 +13679,7 @@ de 06_coal 2 176 0.0 0.0 de 07_gas 2 176 0.0 0.0 de 08_non-res 2 176 0.0 0.0 de 09_hydro_pump 2 176 0.0 0.0 -de 01_solar 2 177 1.0 0.0 +de 01_solar 2 177 0.0 1.0 de 02_wind_on 2 177 0.0 0.0 de 03_wind_off 2 177 0.0 0.0 de 04_res 2 177 0.0 0.0 @@ -13688,7 +13688,7 @@ de 06_coal 2 177 0.0 0.0 de 07_gas 2 177 0.0 0.0 de 08_non-res 2 177 0.0 0.0 de 09_hydro_pump 2 177 0.0 0.0 -de 01_solar 2 178 1.0 0.0 +de 01_solar 2 178 0.0 1.0 de 02_wind_on 2 178 0.0 0.0 de 03_wind_off 2 178 0.0 0.0 de 04_res 2 178 0.0 0.0 @@ -13697,7 +13697,7 @@ de 06_coal 2 178 0.0 0.0 de 07_gas 2 178 0.0 0.0 de 08_non-res 2 178 0.0 0.0 de 09_hydro_pump 2 178 0.0 0.0 -de 01_solar 2 179 1.0 0.0 +de 01_solar 2 179 0.0 1.0 de 02_wind_on 2 179 0.0 0.0 de 03_wind_off 2 179 0.0 0.0 de 04_res 2 179 0.0 0.0 @@ -13706,7 +13706,7 @@ de 06_coal 2 179 0.0 0.0 de 07_gas 2 179 0.0 0.0 de 08_non-res 2 179 0.0 0.0 de 09_hydro_pump 2 179 0.0 0.0 -de 01_solar 2 180 1.0 0.0 +de 01_solar 2 180 0.0 1.0 de 02_wind_on 2 180 0.0 0.0 de 03_wind_off 2 180 0.0 0.0 de 04_res 2 180 0.0 0.0 @@ -13715,7 +13715,7 @@ de 06_coal 2 180 0.0 0.0 de 07_gas 2 180 0.0 0.0 de 08_non-res 2 180 0.0 0.0 de 09_hydro_pump 2 180 0.0 0.0 -de 01_solar 2 181 1.0 0.0 +de 01_solar 2 181 0.0 1.0 de 02_wind_on 2 181 0.0 0.0 de 03_wind_off 2 181 0.0 0.0 de 04_res 2 181 0.0 0.0 @@ -13724,7 +13724,7 @@ de 06_coal 2 181 0.0 0.0 de 07_gas 2 181 0.0 0.0 de 08_non-res 2 181 0.0 0.0 de 09_hydro_pump 2 181 0.0 0.0 -de 01_solar 2 182 1.0 0.0 +de 01_solar 2 182 0.0 1.0 de 02_wind_on 2 182 0.0 0.0 de 03_wind_off 2 182 0.0 0.0 de 04_res 2 182 0.0 0.0 @@ -13733,7 +13733,7 @@ de 06_coal 2 182 0.0 0.0 de 07_gas 2 182 0.0 0.0 de 08_non-res 2 182 0.0 0.0 de 09_hydro_pump 2 182 0.0 0.0 -de 01_solar 2 183 1.0 0.0 +de 01_solar 2 183 0.0 1.0 de 02_wind_on 2 183 0.0 0.0 de 03_wind_off 2 183 0.0 0.0 de 04_res 2 183 0.0 0.0 @@ -13742,7 +13742,7 @@ de 06_coal 2 183 0.0 0.0 de 07_gas 2 183 0.0 0.0 de 08_non-res 2 183 0.0 0.0 de 09_hydro_pump 2 183 0.0 0.0 -de 01_solar 2 184 1.0 0.0 +de 01_solar 2 184 0.0 1.0 de 02_wind_on 2 184 0.0 0.0 de 03_wind_off 2 184 0.0 0.0 de 04_res 2 184 0.0 0.0 @@ -13751,7 +13751,7 @@ de 06_coal 2 184 0.0 0.0 de 07_gas 2 184 0.0 0.0 de 08_non-res 2 184 0.0 0.0 de 09_hydro_pump 2 184 0.0 0.0 -de 01_solar 2 185 1.0 0.0 +de 01_solar 2 185 0.0 1.0 de 02_wind_on 2 185 0.0 0.0 de 03_wind_off 2 185 0.0 0.0 de 04_res 2 185 0.0 0.0 @@ -13760,7 +13760,7 @@ de 06_coal 2 185 0.0 0.0 de 07_gas 2 185 0.0 0.0 de 08_non-res 2 185 0.0 0.0 de 09_hydro_pump 2 185 0.0 0.0 -de 01_solar 2 186 1.0 0.0 +de 01_solar 2 186 0.0 1.0 de 02_wind_on 2 186 0.0 0.0 de 03_wind_off 2 186 0.0 0.0 de 04_res 2 186 0.0 0.0 @@ -13769,7 +13769,7 @@ de 06_coal 2 186 0.0 0.0 de 07_gas 2 186 0.0 0.0 de 08_non-res 2 186 0.0 0.0 de 09_hydro_pump 2 186 0.0 0.0 -de 01_solar 2 187 1.0 0.0 +de 01_solar 2 187 0.0 1.0 de 02_wind_on 2 187 0.0 0.0 de 03_wind_off 2 187 0.0 0.0 de 04_res 2 187 0.0 0.0 @@ -13778,7 +13778,7 @@ de 06_coal 2 187 0.0 0.0 de 07_gas 2 187 0.0 0.0 de 08_non-res 2 187 0.0 0.0 de 09_hydro_pump 2 187 0.0 0.0 -de 01_solar 2 188 1.0 0.0 +de 01_solar 2 188 0.0 1.0 de 02_wind_on 2 188 0.0 0.0 de 03_wind_off 2 188 0.0 0.0 de 04_res 2 188 0.0 0.0 @@ -13787,7 +13787,7 @@ de 06_coal 2 188 0.0 0.0 de 07_gas 2 188 0.0 0.0 de 08_non-res 2 188 0.0 0.0 de 09_hydro_pump 2 188 0.0 0.0 -de 01_solar 2 189 1.0 0.0 +de 01_solar 2 189 0.0 1.0 de 02_wind_on 2 189 0.0 0.0 de 03_wind_off 2 189 0.0 0.0 de 04_res 2 189 0.0 0.0 @@ -13796,8 +13796,8 @@ de 06_coal 2 189 0.0 0.0 de 07_gas 2 189 0.0 0.0 de 08_non-res 2 189 0.0 0.0 de 09_hydro_pump 2 189 0.0 0.0 -de 01_solar 2 190 1.0 0.0 -de 02_wind_on 2 190 1.0 0.0 +de 01_solar 2 190 0.0 1.0 +de 02_wind_on 2 190 0.0 1.0 de 03_wind_off 2 190 0.0 0.0 de 04_res 2 190 0.0 0.0 de 05_nuclear 2 190 0.0 0.0 @@ -13805,8 +13805,8 @@ de 06_coal 2 190 0.0 0.0 de 07_gas 2 190 0.0 0.0 de 08_non-res 2 190 0.0 0.0 de 09_hydro_pump 2 190 0.0 0.0 -de 01_solar 2 191 1.0 0.0 -de 02_wind_on 2 191 1.0 0.0 +de 01_solar 2 191 0.0 1.0 +de 02_wind_on 2 191 0.0 1.0 de 03_wind_off 2 191 0.0 0.0 de 04_res 2 191 0.0 0.0 de 05_nuclear 2 191 0.0 0.0 @@ -13814,8 +13814,8 @@ de 06_coal 2 191 0.0 0.0 de 07_gas 2 191 0.0 0.0 de 08_non-res 2 191 0.0 0.0 de 09_hydro_pump 2 191 0.0 0.0 -de 01_solar 2 192 1.0 0.0 -de 02_wind_on 2 192 1.0 0.0 +de 01_solar 2 192 0.0 1.0 +de 02_wind_on 2 192 0.0 1.0 de 03_wind_off 2 192 0.0 0.0 de 04_res 2 192 0.0 0.0 de 05_nuclear 2 192 0.0 0.0 @@ -13823,8 +13823,8 @@ de 06_coal 2 192 0.0 0.0 de 07_gas 2 192 0.0 0.0 de 08_non-res 2 192 0.0 0.0 de 09_hydro_pump 2 192 0.0 0.0 -de 01_solar 2 193 1.0 0.0 -de 02_wind_on 2 193 1.0 0.0 +de 01_solar 2 193 0.0 1.0 +de 02_wind_on 2 193 0.0 1.0 de 03_wind_off 2 193 0.0 0.0 de 04_res 2 193 0.0 0.0 de 05_nuclear 2 193 0.0 0.0 @@ -13832,8 +13832,8 @@ de 06_coal 2 193 0.0 0.0 de 07_gas 2 193 0.0 0.0 de 08_non-res 2 193 0.0 0.0 de 09_hydro_pump 2 193 0.0 0.0 -de 01_solar 2 194 1.0 0.0 -de 02_wind_on 2 194 1.0 0.0 +de 01_solar 2 194 0.0 1.0 +de 02_wind_on 2 194 0.0 1.0 de 03_wind_off 2 194 0.0 0.0 de 04_res 2 194 0.0 0.0 de 05_nuclear 2 194 0.0 0.0 @@ -13841,8 +13841,8 @@ de 06_coal 2 194 0.0 0.0 de 07_gas 2 194 0.0 0.0 de 08_non-res 2 194 0.0 0.0 de 09_hydro_pump 2 194 0.0 0.0 -de 01_solar 2 195 1.0 0.0 -de 02_wind_on 2 195 1.0 0.0 +de 01_solar 2 195 0.0 1.0 +de 02_wind_on 2 195 0.0 1.0 de 03_wind_off 2 195 0.0 0.0 de 04_res 2 195 0.0 0.0 de 05_nuclear 2 195 0.0 0.0 @@ -13850,8 +13850,8 @@ de 06_coal 2 195 0.0 0.0 de 07_gas 2 195 0.0 0.0 de 08_non-res 2 195 0.0 0.0 de 09_hydro_pump 2 195 0.0 0.0 -de 01_solar 2 196 1.0 0.0 -de 02_wind_on 2 196 1.0 0.0 +de 01_solar 2 196 0.0 1.0 +de 02_wind_on 2 196 0.0 1.0 de 03_wind_off 2 196 0.0 0.0 de 04_res 2 196 0.0 0.0 de 05_nuclear 2 196 0.0 0.0 @@ -13859,8 +13859,8 @@ de 06_coal 2 196 0.0 0.0 de 07_gas 2 196 0.0 0.0 de 08_non-res 2 196 0.0 0.0 de 09_hydro_pump 2 196 0.0 0.0 -de 01_solar 2 197 1.0 0.0 -de 02_wind_on 2 197 1.0 0.0 +de 01_solar 2 197 0.0 1.0 +de 02_wind_on 2 197 0.0 1.0 de 03_wind_off 2 197 0.0 0.0 de 04_res 2 197 0.0 0.0 de 05_nuclear 2 197 0.0 0.0 @@ -13868,8 +13868,8 @@ de 06_coal 2 197 0.0 0.0 de 07_gas 2 197 0.0 0.0 de 08_non-res 2 197 0.0 0.0 de 09_hydro_pump 2 197 0.0 0.0 -de 01_solar 2 198 1.0 0.0 -de 02_wind_on 2 198 1.0 0.0 +de 01_solar 2 198 0.0 1.0 +de 02_wind_on 2 198 0.0 1.0 de 03_wind_off 2 198 0.0 0.0 de 04_res 2 198 0.0 0.0 de 05_nuclear 2 198 0.0 0.0 @@ -13877,8 +13877,8 @@ de 06_coal 2 198 0.0 0.0 de 07_gas 2 198 0.0 0.0 de 08_non-res 2 198 0.0 0.0 de 09_hydro_pump 2 198 0.0 0.0 -de 01_solar 2 199 1.0 0.0 -de 02_wind_on 2 199 1.0 0.0 +de 01_solar 2 199 0.0 1.0 +de 02_wind_on 2 199 0.0 1.0 de 03_wind_off 2 199 0.0 0.0 de 04_res 2 199 0.0 0.0 de 05_nuclear 2 199 0.0 0.0 @@ -13886,8 +13886,8 @@ de 06_coal 2 199 0.0 0.0 de 07_gas 2 199 0.0 0.0 de 08_non-res 2 199 0.0 0.0 de 09_hydro_pump 2 199 0.0 0.0 -de 01_solar 2 200 1.0 0.0 -de 02_wind_on 2 200 1.0 0.0 +de 01_solar 2 200 0.0 1.0 +de 02_wind_on 2 200 0.0 1.0 de 03_wind_off 2 200 0.0 0.0 de 04_res 2 200 0.0 0.0 de 05_nuclear 2 200 0.0 0.0 @@ -13895,8 +13895,8 @@ de 06_coal 2 200 0.0 0.0 de 07_gas 2 200 0.0 0.0 de 08_non-res 2 200 0.0 0.0 de 09_hydro_pump 2 200 0.0 0.0 -de 01_solar 2 201 1.0 0.0 -de 02_wind_on 2 201 1.0 0.0 +de 01_solar 2 201 0.0 1.0 +de 02_wind_on 2 201 0.0 1.0 de 03_wind_off 2 201 0.0 0.0 de 04_res 2 201 0.0 0.0 de 05_nuclear 2 201 0.0 0.0 @@ -13904,8 +13904,8 @@ de 06_coal 2 201 0.0 0.0 de 07_gas 2 201 0.0 0.0 de 08_non-res 2 201 0.0 0.0 de 09_hydro_pump 2 201 0.0 0.0 -de 01_solar 2 202 1.0 0.0 -de 02_wind_on 2 202 1.0 0.0 +de 01_solar 2 202 0.0 1.0 +de 02_wind_on 2 202 0.0 1.0 de 03_wind_off 2 202 0.0 0.0 de 04_res 2 202 0.0 0.0 de 05_nuclear 2 202 0.0 0.0 @@ -13913,8 +13913,8 @@ de 06_coal 2 202 0.0 0.0 de 07_gas 2 202 0.0 0.0 de 08_non-res 2 202 0.0 0.0 de 09_hydro_pump 2 202 0.0 0.0 -de 01_solar 2 203 1.0 0.0 -de 02_wind_on 2 203 1.0 0.0 +de 01_solar 2 203 0.0 1.0 +de 02_wind_on 2 203 0.0 1.0 de 03_wind_off 2 203 0.0 0.0 de 04_res 2 203 0.0 0.0 de 05_nuclear 2 203 0.0 0.0 @@ -13922,8 +13922,8 @@ de 06_coal 2 203 0.0 0.0 de 07_gas 2 203 0.0 0.0 de 08_non-res 2 203 0.0 0.0 de 09_hydro_pump 2 203 0.0 0.0 -de 01_solar 2 204 1.0 0.0 -de 02_wind_on 2 204 1.0 0.0 +de 01_solar 2 204 0.0 1.0 +de 02_wind_on 2 204 0.0 1.0 de 03_wind_off 2 204 0.0 0.0 de 04_res 2 204 0.0 0.0 de 05_nuclear 2 204 0.0 0.0 @@ -13931,8 +13931,8 @@ de 06_coal 2 204 0.0 0.0 de 07_gas 2 204 0.0 0.0 de 08_non-res 2 204 0.0 0.0 de 09_hydro_pump 2 204 0.0 0.0 -de 01_solar 2 205 1.0 0.0 -de 02_wind_on 2 205 1.0 0.0 +de 01_solar 2 205 0.0 1.0 +de 02_wind_on 2 205 0.0 1.0 de 03_wind_off 2 205 0.0 0.0 de 04_res 2 205 0.0 0.0 de 05_nuclear 2 205 0.0 0.0 @@ -13940,8 +13940,8 @@ de 06_coal 2 205 0.0 0.0 de 07_gas 2 205 0.0 0.0 de 08_non-res 2 205 0.0 0.0 de 09_hydro_pump 2 205 0.0 0.0 -de 01_solar 2 206 1.0 0.0 -de 02_wind_on 2 206 1.0 0.0 +de 01_solar 2 206 0.0 1.0 +de 02_wind_on 2 206 0.0 1.0 de 03_wind_off 2 206 0.0 0.0 de 04_res 2 206 0.0 0.0 de 05_nuclear 2 206 0.0 0.0 @@ -13949,8 +13949,8 @@ de 06_coal 2 206 0.0 0.0 de 07_gas 2 206 0.0 0.0 de 08_non-res 2 206 0.0 0.0 de 09_hydro_pump 2 206 0.0 0.0 -de 01_solar 2 207 1.0 0.0 -de 02_wind_on 2 207 1.0 0.0 +de 01_solar 2 207 0.0 1.0 +de 02_wind_on 2 207 0.0 1.0 de 03_wind_off 2 207 0.0 0.0 de 04_res 2 207 0.0 0.0 de 05_nuclear 2 207 0.0 0.0 @@ -13958,8 +13958,8 @@ de 06_coal 2 207 0.0 0.0 de 07_gas 2 207 0.0 0.0 de 08_non-res 2 207 0.0 0.0 de 09_hydro_pump 2 207 0.0 0.0 -de 01_solar 2 208 1.0 0.0 -de 02_wind_on 2 208 1.0 0.0 +de 01_solar 2 208 0.0 1.0 +de 02_wind_on 2 208 0.0 1.0 de 03_wind_off 2 208 0.0 0.0 de 04_res 2 208 0.0 0.0 de 05_nuclear 2 208 0.0 0.0 @@ -13967,8 +13967,8 @@ de 06_coal 2 208 0.0 0.0 de 07_gas 2 208 0.0 0.0 de 08_non-res 2 208 0.0 0.0 de 09_hydro_pump 2 208 0.0 0.0 -de 01_solar 2 209 1.0 0.0 -de 02_wind_on 2 209 1.0 0.0 +de 01_solar 2 209 0.0 1.0 +de 02_wind_on 2 209 0.0 1.0 de 03_wind_off 2 209 0.0 0.0 de 04_res 2 209 0.0 0.0 de 05_nuclear 2 209 0.0 0.0 @@ -13976,1149 +13976,1149 @@ de 06_coal 2 209 0.0 0.0 de 07_gas 2 209 0.0 0.0 de 08_non-res 2 209 0.0 0.0 de 09_hydro_pump 2 209 0.0 0.0 -de 01_solar 2 210 1.0 0.0 -de 02_wind_on 2 210 1.0 0.0 -de 03_wind_off 2 210 1.0 0.0 +de 01_solar 2 210 0.0 1.0 +de 02_wind_on 2 210 0.0 1.0 +de 03_wind_off 2 210 0.0 1.0 de 04_res 2 210 0.0 0.0 de 05_nuclear 2 210 0.0 0.0 de 06_coal 2 210 0.0 0.0 de 07_gas 2 210 0.0 0.0 de 08_non-res 2 210 0.0 0.0 de 09_hydro_pump 2 210 0.0 0.0 -de 01_solar 2 211 1.0 0.0 -de 02_wind_on 2 211 1.0 0.0 -de 03_wind_off 2 211 1.0 0.0 +de 01_solar 2 211 0.0 1.0 +de 02_wind_on 2 211 0.0 1.0 +de 03_wind_off 2 211 0.0 1.0 de 04_res 2 211 0.0 0.0 de 05_nuclear 2 211 0.0 0.0 de 06_coal 2 211 0.0 0.0 de 07_gas 2 211 0.0 0.0 de 08_non-res 2 211 0.0 0.0 de 09_hydro_pump 2 211 0.0 0.0 -de 01_solar 2 212 1.0 0.0 -de 02_wind_on 2 212 1.0 0.0 -de 03_wind_off 2 212 1.0 0.0 +de 01_solar 2 212 0.0 1.0 +de 02_wind_on 2 212 0.0 1.0 +de 03_wind_off 2 212 0.0 1.0 de 04_res 2 212 0.0 0.0 de 05_nuclear 2 212 0.0 0.0 de 06_coal 2 212 0.0 0.0 de 07_gas 2 212 0.0 0.0 de 08_non-res 2 212 0.0 0.0 de 09_hydro_pump 2 212 0.0 0.0 -de 01_solar 2 213 1.0 0.0 -de 02_wind_on 2 213 1.0 0.0 -de 03_wind_off 2 213 1.0 0.0 +de 01_solar 2 213 0.0 1.0 +de 02_wind_on 2 213 0.0 1.0 +de 03_wind_off 2 213 0.0 1.0 de 04_res 2 213 0.0 0.0 de 05_nuclear 2 213 0.0 0.0 de 06_coal 2 213 0.0 0.0 de 07_gas 2 213 0.0 0.0 de 08_non-res 2 213 0.0 0.0 de 09_hydro_pump 2 213 0.0 0.0 -de 01_solar 2 214 1.0 0.0 -de 02_wind_on 2 214 1.0 0.0 -de 03_wind_off 2 214 1.0 0.0 +de 01_solar 2 214 0.0 1.0 +de 02_wind_on 2 214 0.0 1.0 +de 03_wind_off 2 214 0.0 1.0 de 04_res 2 214 0.0 0.0 de 05_nuclear 2 214 0.0 0.0 de 06_coal 2 214 0.0 0.0 de 07_gas 2 214 0.0 0.0 de 08_non-res 2 214 0.0 0.0 de 09_hydro_pump 2 214 0.0 0.0 -de 01_solar 2 215 1.0 0.0 -de 02_wind_on 2 215 1.0 0.0 -de 03_wind_off 2 215 1.0 0.0 +de 01_solar 2 215 0.0 1.0 +de 02_wind_on 2 215 0.0 1.0 +de 03_wind_off 2 215 0.0 1.0 de 04_res 2 215 0.0 0.0 de 05_nuclear 2 215 0.0 0.0 de 06_coal 2 215 0.0 0.0 de 07_gas 2 215 0.0 0.0 de 08_non-res 2 215 0.0 0.0 de 09_hydro_pump 2 215 0.0 0.0 -de 01_solar 2 216 1.0 0.0 -de 02_wind_on 2 216 1.0 0.0 -de 03_wind_off 2 216 1.0 0.0 +de 01_solar 2 216 0.0 1.0 +de 02_wind_on 2 216 0.0 1.0 +de 03_wind_off 2 216 0.0 1.0 de 04_res 2 216 0.0 0.0 de 05_nuclear 2 216 0.0 0.0 de 06_coal 2 216 0.0 0.0 de 07_gas 2 216 0.0 0.0 de 08_non-res 2 216 0.0 0.0 de 09_hydro_pump 2 216 0.0 0.0 -de 01_solar 2 217 1.0 0.0 -de 02_wind_on 2 217 1.0 0.0 -de 03_wind_off 2 217 1.0 0.0 +de 01_solar 2 217 0.0 1.0 +de 02_wind_on 2 217 0.0 1.0 +de 03_wind_off 2 217 0.0 1.0 de 04_res 2 217 0.0 0.0 de 05_nuclear 2 217 0.0 0.0 de 06_coal 2 217 0.0 0.0 de 07_gas 2 217 0.0 0.0 de 08_non-res 2 217 0.0 0.0 de 09_hydro_pump 2 217 0.0 0.0 -de 01_solar 2 218 1.0 0.0 -de 02_wind_on 2 218 1.0 0.0 -de 03_wind_off 2 218 1.0 0.0 +de 01_solar 2 218 0.0 1.0 +de 02_wind_on 2 218 0.0 1.0 +de 03_wind_off 2 218 0.0 1.0 de 04_res 2 218 0.0 0.0 de 05_nuclear 2 218 0.0 0.0 de 06_coal 2 218 0.0 0.0 de 07_gas 2 218 0.0 0.0 de 08_non-res 2 218 0.0 0.0 de 09_hydro_pump 2 218 0.0 0.0 -de 01_solar 2 219 1.0 0.0 -de 02_wind_on 2 219 1.0 0.0 -de 03_wind_off 2 219 1.0 0.0 +de 01_solar 2 219 0.0 1.0 +de 02_wind_on 2 219 0.0 1.0 +de 03_wind_off 2 219 0.0 1.0 de 04_res 2 219 0.0 0.0 de 05_nuclear 2 219 0.0 0.0 de 06_coal 2 219 0.0 0.0 de 07_gas 2 219 0.0 0.0 de 08_non-res 2 219 0.0 0.0 de 09_hydro_pump 2 219 0.0 0.0 -de 01_solar 2 220 1.0 0.0 -de 02_wind_on 2 220 1.0 0.0 -de 03_wind_off 2 220 1.0 0.0 +de 01_solar 2 220 0.0 1.0 +de 02_wind_on 2 220 0.0 1.0 +de 03_wind_off 2 220 0.0 1.0 de 04_res 2 220 0.0 0.0 de 05_nuclear 2 220 0.0 0.0 de 06_coal 2 220 0.0 0.0 de 07_gas 2 220 0.0 0.0 de 08_non-res 2 220 0.0 0.0 de 09_hydro_pump 2 220 0.0 0.0 -de 01_solar 2 221 1.0 0.0 -de 02_wind_on 2 221 1.0 0.0 -de 03_wind_off 2 221 1.0 0.0 +de 01_solar 2 221 0.0 1.0 +de 02_wind_on 2 221 0.0 1.0 +de 03_wind_off 2 221 0.0 1.0 de 04_res 2 221 0.0 0.0 de 05_nuclear 2 221 0.0 0.0 de 06_coal 2 221 0.0 0.0 de 07_gas 2 221 0.0 0.0 de 08_non-res 2 221 0.0 0.0 de 09_hydro_pump 2 221 0.0 0.0 -de 01_solar 2 222 1.0 0.0 -de 02_wind_on 2 222 1.0 0.0 -de 03_wind_off 2 222 1.0 0.0 +de 01_solar 2 222 0.0 1.0 +de 02_wind_on 2 222 0.0 1.0 +de 03_wind_off 2 222 0.0 1.0 de 04_res 2 222 0.0 0.0 de 05_nuclear 2 222 0.0 0.0 de 06_coal 2 222 0.0 0.0 de 07_gas 2 222 0.0 0.0 de 08_non-res 2 222 0.0 0.0 de 09_hydro_pump 2 222 0.0 0.0 -de 01_solar 2 223 1.0 0.0 -de 02_wind_on 2 223 1.0 0.0 -de 03_wind_off 2 223 1.0 0.0 +de 01_solar 2 223 0.0 1.0 +de 02_wind_on 2 223 0.0 1.0 +de 03_wind_off 2 223 0.0 1.0 de 04_res 2 223 0.0 0.0 de 05_nuclear 2 223 0.0 0.0 de 06_coal 2 223 0.0 0.0 de 07_gas 2 223 0.0 0.0 de 08_non-res 2 223 0.0 0.0 de 09_hydro_pump 2 223 0.0 0.0 -de 01_solar 2 224 1.0 0.0 -de 02_wind_on 2 224 1.0 0.0 -de 03_wind_off 2 224 1.0 0.0 +de 01_solar 2 224 0.0 1.0 +de 02_wind_on 2 224 0.0 1.0 +de 03_wind_off 2 224 0.0 1.0 de 04_res 2 224 0.0 0.0 de 05_nuclear 2 224 0.0 0.0 de 06_coal 2 224 0.0 0.0 de 07_gas 2 224 0.0 0.0 de 08_non-res 2 224 0.0 0.0 de 09_hydro_pump 2 224 0.0 0.0 -de 01_solar 2 225 1.0 0.0 -de 02_wind_on 2 225 1.0 0.0 -de 03_wind_off 2 225 1.0 0.0 +de 01_solar 2 225 0.0 1.0 +de 02_wind_on 2 225 0.0 1.0 +de 03_wind_off 2 225 0.0 1.0 de 04_res 2 225 0.0 0.0 de 05_nuclear 2 225 0.0 0.0 de 06_coal 2 225 0.0 0.0 de 07_gas 2 225 0.0 0.0 de 08_non-res 2 225 0.0 0.0 de 09_hydro_pump 2 225 0.0 0.0 -de 01_solar 2 226 1.0 0.0 -de 02_wind_on 2 226 1.0 0.0 -de 03_wind_off 2 226 1.0 0.0 +de 01_solar 2 226 0.0 1.0 +de 02_wind_on 2 226 0.0 1.0 +de 03_wind_off 2 226 0.0 1.0 de 04_res 2 226 0.0 0.0 de 05_nuclear 2 226 0.0 0.0 de 06_coal 2 226 0.0 0.0 de 07_gas 2 226 0.0 0.0 de 08_non-res 2 226 0.0 0.0 de 09_hydro_pump 2 226 0.0 0.0 -de 01_solar 2 227 1.0 0.0 -de 02_wind_on 2 227 1.0 0.0 -de 03_wind_off 2 227 1.0 0.0 +de 01_solar 2 227 0.0 1.0 +de 02_wind_on 2 227 0.0 1.0 +de 03_wind_off 2 227 0.0 1.0 de 04_res 2 227 0.0 0.0 de 05_nuclear 2 227 0.0 0.0 de 06_coal 2 227 0.0 0.0 de 07_gas 2 227 0.0 0.0 de 08_non-res 2 227 0.0 0.0 de 09_hydro_pump 2 227 0.0 0.0 -de 01_solar 2 228 1.0 0.0 -de 02_wind_on 2 228 1.0 0.0 -de 03_wind_off 2 228 1.0 0.0 +de 01_solar 2 228 0.0 1.0 +de 02_wind_on 2 228 0.0 1.0 +de 03_wind_off 2 228 0.0 1.0 de 04_res 2 228 0.0 0.0 de 05_nuclear 2 228 0.0 0.0 de 06_coal 2 228 0.0 0.0 de 07_gas 2 228 0.0 0.0 de 08_non-res 2 228 0.0 0.0 de 09_hydro_pump 2 228 0.0 0.0 -de 01_solar 2 229 1.0 0.0 -de 02_wind_on 2 229 1.0 0.0 -de 03_wind_off 2 229 1.0 0.0 +de 01_solar 2 229 0.0 1.0 +de 02_wind_on 2 229 0.0 1.0 +de 03_wind_off 2 229 0.0 1.0 de 04_res 2 229 0.0 0.0 de 05_nuclear 2 229 0.0 0.0 de 06_coal 2 229 0.0 0.0 de 07_gas 2 229 0.0 0.0 de 08_non-res 2 229 0.0 0.0 de 09_hydro_pump 2 229 0.0 0.0 -de 01_solar 2 230 1.0 0.0 -de 02_wind_on 2 230 1.0 0.0 -de 03_wind_off 2 230 1.0 0.0 -de 04_res 2 230 1.0 0.0 +de 01_solar 2 230 0.0 1.0 +de 02_wind_on 2 230 0.0 1.0 +de 03_wind_off 2 230 0.0 1.0 +de 04_res 2 230 0.0 1.0 de 05_nuclear 2 230 0.0 0.0 de 06_coal 2 230 0.0 0.0 de 07_gas 2 230 0.0 0.0 de 08_non-res 2 230 0.0 0.0 de 09_hydro_pump 2 230 0.0 0.0 -de 01_solar 2 231 1.0 0.0 -de 02_wind_on 2 231 1.0 0.0 -de 03_wind_off 2 231 1.0 0.0 -de 04_res 2 231 1.0 0.0 +de 01_solar 2 231 0.0 1.0 +de 02_wind_on 2 231 0.0 1.0 +de 03_wind_off 2 231 0.0 1.0 +de 04_res 2 231 0.0 1.0 de 05_nuclear 2 231 0.0 0.0 de 06_coal 2 231 0.0 0.0 de 07_gas 2 231 0.0 0.0 de 08_non-res 2 231 0.0 0.0 de 09_hydro_pump 2 231 0.0 0.0 -de 01_solar 2 232 1.0 0.0 -de 02_wind_on 2 232 1.0 0.0 -de 03_wind_off 2 232 1.0 0.0 -de 04_res 2 232 1.0 0.0 +de 01_solar 2 232 0.0 1.0 +de 02_wind_on 2 232 0.0 1.0 +de 03_wind_off 2 232 0.0 1.0 +de 04_res 2 232 0.0 1.0 de 05_nuclear 2 232 0.0 0.0 de 06_coal 2 232 0.0 0.0 de 07_gas 2 232 0.0 0.0 de 08_non-res 2 232 0.0 0.0 de 09_hydro_pump 2 232 0.0 0.0 -de 01_solar 2 233 1.0 0.0 -de 02_wind_on 2 233 1.0 0.0 -de 03_wind_off 2 233 1.0 0.0 -de 04_res 2 233 1.0 0.0 +de 01_solar 2 233 0.0 1.0 +de 02_wind_on 2 233 0.0 1.0 +de 03_wind_off 2 233 0.0 1.0 +de 04_res 2 233 0.0 1.0 de 05_nuclear 2 233 0.0 0.0 de 06_coal 2 233 0.0 0.0 de 07_gas 2 233 0.0 0.0 de 08_non-res 2 233 0.0 0.0 de 09_hydro_pump 2 233 0.0 0.0 -de 01_solar 2 234 1.0 0.0 -de 02_wind_on 2 234 1.0 0.0 -de 03_wind_off 2 234 1.0 0.0 -de 04_res 2 234 1.0 0.0 +de 01_solar 2 234 0.0 1.0 +de 02_wind_on 2 234 0.0 1.0 +de 03_wind_off 2 234 0.0 1.0 +de 04_res 2 234 0.0 1.0 de 05_nuclear 2 234 0.0 0.0 de 06_coal 2 234 0.0 0.0 de 07_gas 2 234 0.0 0.0 de 08_non-res 2 234 0.0 0.0 de 09_hydro_pump 2 234 0.0 0.0 -de 01_solar 2 235 1.0 0.0 -de 02_wind_on 2 235 1.0 0.0 -de 03_wind_off 2 235 1.0 0.0 -de 04_res 2 235 1.0 0.0 +de 01_solar 2 235 0.0 1.0 +de 02_wind_on 2 235 0.0 1.0 +de 03_wind_off 2 235 0.0 1.0 +de 04_res 2 235 0.0 1.0 de 05_nuclear 2 235 0.0 0.0 de 06_coal 2 235 0.0 0.0 de 07_gas 2 235 0.0 0.0 de 08_non-res 2 235 0.0 0.0 de 09_hydro_pump 2 235 0.0 0.0 -de 01_solar 2 236 1.0 0.0 -de 02_wind_on 2 236 1.0 0.0 -de 03_wind_off 2 236 1.0 0.0 -de 04_res 2 236 1.0 0.0 +de 01_solar 2 236 0.0 1.0 +de 02_wind_on 2 236 0.0 1.0 +de 03_wind_off 2 236 0.0 1.0 +de 04_res 2 236 0.0 1.0 de 05_nuclear 2 236 0.0 0.0 de 06_coal 2 236 0.0 0.0 de 07_gas 2 236 0.0 0.0 de 08_non-res 2 236 0.0 0.0 de 09_hydro_pump 2 236 0.0 0.0 -de 01_solar 2 237 1.0 0.0 -de 02_wind_on 2 237 1.0 0.0 -de 03_wind_off 2 237 1.0 0.0 -de 04_res 2 237 1.0 0.0 +de 01_solar 2 237 0.0 1.0 +de 02_wind_on 2 237 0.0 1.0 +de 03_wind_off 2 237 0.0 1.0 +de 04_res 2 237 0.0 1.0 de 05_nuclear 2 237 0.0 0.0 de 06_coal 2 237 0.0 0.0 de 07_gas 2 237 0.0 0.0 de 08_non-res 2 237 0.0 0.0 de 09_hydro_pump 2 237 0.0 0.0 -de 01_solar 2 238 1.0 0.0 -de 02_wind_on 2 238 1.0 0.0 -de 03_wind_off 2 238 1.0 0.0 -de 04_res 2 238 1.0 0.0 +de 01_solar 2 238 0.0 1.0 +de 02_wind_on 2 238 0.0 1.0 +de 03_wind_off 2 238 0.0 1.0 +de 04_res 2 238 0.0 1.0 de 05_nuclear 2 238 0.0 0.0 de 06_coal 2 238 0.0 0.0 de 07_gas 2 238 0.0 0.0 de 08_non-res 2 238 0.0 0.0 de 09_hydro_pump 2 238 0.0 0.0 -de 01_solar 2 239 1.0 0.0 -de 02_wind_on 2 239 1.0 0.0 -de 03_wind_off 2 239 1.0 0.0 -de 04_res 2 239 1.0 0.0 +de 01_solar 2 239 0.0 1.0 +de 02_wind_on 2 239 0.0 1.0 +de 03_wind_off 2 239 0.0 1.0 +de 04_res 2 239 0.0 1.0 de 05_nuclear 2 239 0.0 0.0 de 06_coal 2 239 0.0 0.0 de 07_gas 2 239 0.0 0.0 de 08_non-res 2 239 0.0 0.0 de 09_hydro_pump 2 239 0.0 0.0 -de 01_solar 2 240 1.0 0.0 -de 02_wind_on 2 240 1.0 0.0 -de 03_wind_off 2 240 1.0 0.0 -de 04_res 2 240 1.0 0.0 +de 01_solar 2 240 0.0 1.0 +de 02_wind_on 2 240 0.0 1.0 +de 03_wind_off 2 240 0.0 1.0 +de 04_res 2 240 0.0 1.0 de 05_nuclear 2 240 0.0 0.0 de 06_coal 2 240 0.0 0.0 de 07_gas 2 240 0.0 0.0 de 08_non-res 2 240 0.0 0.0 de 09_hydro_pump 2 240 0.0 0.0 -de 01_solar 2 241 1.0 0.0 -de 02_wind_on 2 241 1.0 0.0 -de 03_wind_off 2 241 1.0 0.0 -de 04_res 2 241 1.0 0.0 +de 01_solar 2 241 0.0 1.0 +de 02_wind_on 2 241 0.0 1.0 +de 03_wind_off 2 241 0.0 1.0 +de 04_res 2 241 0.0 1.0 de 05_nuclear 2 241 0.0 0.0 de 06_coal 2 241 0.0 0.0 de 07_gas 2 241 0.0 0.0 de 08_non-res 2 241 0.0 0.0 de 09_hydro_pump 2 241 0.0 0.0 -de 01_solar 2 242 1.0 0.0 -de 02_wind_on 2 242 1.0 0.0 -de 03_wind_off 2 242 1.0 0.0 -de 04_res 2 242 1.0 0.0 +de 01_solar 2 242 0.0 1.0 +de 02_wind_on 2 242 0.0 1.0 +de 03_wind_off 2 242 0.0 1.0 +de 04_res 2 242 0.0 1.0 de 05_nuclear 2 242 0.0 0.0 de 06_coal 2 242 0.0 0.0 de 07_gas 2 242 0.0 0.0 de 08_non-res 2 242 0.0 0.0 de 09_hydro_pump 2 242 0.0 0.0 -de 01_solar 2 243 1.0 0.0 -de 02_wind_on 2 243 1.0 0.0 -de 03_wind_off 2 243 1.0 0.0 -de 04_res 2 243 1.0 0.0 +de 01_solar 2 243 0.0 1.0 +de 02_wind_on 2 243 0.0 1.0 +de 03_wind_off 2 243 0.0 1.0 +de 04_res 2 243 0.0 1.0 de 05_nuclear 2 243 0.0 0.0 de 06_coal 2 243 0.0 0.0 de 07_gas 2 243 0.0 0.0 de 08_non-res 2 243 0.0 0.0 de 09_hydro_pump 2 243 0.0 0.0 -de 01_solar 2 244 1.0 0.0 -de 02_wind_on 2 244 1.0 0.0 -de 03_wind_off 2 244 1.0 0.0 -de 04_res 2 244 1.0 0.0 +de 01_solar 2 244 0.0 1.0 +de 02_wind_on 2 244 0.0 1.0 +de 03_wind_off 2 244 0.0 1.0 +de 04_res 2 244 0.0 1.0 de 05_nuclear 2 244 0.0 0.0 de 06_coal 2 244 0.0 0.0 de 07_gas 2 244 0.0 0.0 de 08_non-res 2 244 0.0 0.0 de 09_hydro_pump 2 244 0.0 0.0 -de 01_solar 2 245 1.0 0.0 -de 02_wind_on 2 245 1.0 0.0 -de 03_wind_off 2 245 1.0 0.0 -de 04_res 2 245 1.0 0.0 +de 01_solar 2 245 0.0 1.0 +de 02_wind_on 2 245 0.0 1.0 +de 03_wind_off 2 245 0.0 1.0 +de 04_res 2 245 0.0 1.0 de 05_nuclear 2 245 0.0 0.0 de 06_coal 2 245 0.0 0.0 de 07_gas 2 245 0.0 0.0 de 08_non-res 2 245 0.0 0.0 de 09_hydro_pump 2 245 0.0 0.0 -de 01_solar 2 246 1.0 0.0 -de 02_wind_on 2 246 1.0 0.0 -de 03_wind_off 2 246 1.0 0.0 -de 04_res 2 246 1.0 0.0 +de 01_solar 2 246 0.0 1.0 +de 02_wind_on 2 246 0.0 1.0 +de 03_wind_off 2 246 0.0 1.0 +de 04_res 2 246 0.0 1.0 de 05_nuclear 2 246 0.0 0.0 de 06_coal 2 246 0.0 0.0 de 07_gas 2 246 0.0 0.0 de 08_non-res 2 246 0.0 0.0 de 09_hydro_pump 2 246 0.0 0.0 -de 01_solar 2 247 1.0 0.0 -de 02_wind_on 2 247 1.0 0.0 -de 03_wind_off 2 247 1.0 0.0 -de 04_res 2 247 1.0 0.0 +de 01_solar 2 247 0.0 1.0 +de 02_wind_on 2 247 0.0 1.0 +de 03_wind_off 2 247 0.0 1.0 +de 04_res 2 247 0.0 1.0 de 05_nuclear 2 247 0.0 0.0 de 06_coal 2 247 0.0 0.0 de 07_gas 2 247 0.0 0.0 de 08_non-res 2 247 0.0 0.0 de 09_hydro_pump 2 247 0.0 0.0 -de 01_solar 2 248 1.0 0.0 -de 02_wind_on 2 248 1.0 0.0 -de 03_wind_off 2 248 1.0 0.0 -de 04_res 2 248 1.0 0.0 +de 01_solar 2 248 0.0 1.0 +de 02_wind_on 2 248 0.0 1.0 +de 03_wind_off 2 248 0.0 1.0 +de 04_res 2 248 0.0 1.0 de 05_nuclear 2 248 0.0 0.0 de 06_coal 2 248 0.0 0.0 de 07_gas 2 248 0.0 0.0 de 08_non-res 2 248 0.0 0.0 de 09_hydro_pump 2 248 0.0 0.0 -de 01_solar 2 249 1.0 0.0 -de 02_wind_on 2 249 1.0 0.0 -de 03_wind_off 2 249 1.0 0.0 -de 04_res 2 249 1.0 0.0 +de 01_solar 2 249 0.0 1.0 +de 02_wind_on 2 249 0.0 1.0 +de 03_wind_off 2 249 0.0 1.0 +de 04_res 2 249 0.0 1.0 de 05_nuclear 2 249 0.0 0.0 de 06_coal 2 249 0.0 0.0 de 07_gas 2 249 0.0 0.0 de 08_non-res 2 249 0.0 0.0 de 09_hydro_pump 2 249 0.0 0.0 -de 01_solar 2 250 1.0 0.0 -de 02_wind_on 2 250 1.0 0.0 -de 03_wind_off 2 250 1.0 0.0 -de 04_res 2 250 1.0 0.0 -de 05_nuclear 2 250 1.0 0.0 +de 01_solar 2 250 0.0 1.0 +de 02_wind_on 2 250 0.0 1.0 +de 03_wind_off 2 250 0.0 1.0 +de 04_res 2 250 0.0 1.0 +de 05_nuclear 2 250 0.0 1.0 de 06_coal 2 250 0.0 0.0 de 07_gas 2 250 0.0 0.0 de 08_non-res 2 250 0.0 0.0 de 09_hydro_pump 2 250 0.0 0.0 -de 01_solar 2 251 1.0 0.0 -de 02_wind_on 2 251 1.0 0.0 -de 03_wind_off 2 251 1.0 0.0 -de 04_res 2 251 1.0 0.0 -de 05_nuclear 2 251 1.0 0.0 +de 01_solar 2 251 0.0 1.0 +de 02_wind_on 2 251 0.0 1.0 +de 03_wind_off 2 251 0.0 1.0 +de 04_res 2 251 0.0 1.0 +de 05_nuclear 2 251 0.0 1.0 de 06_coal 2 251 0.0 0.0 de 07_gas 2 251 0.0 0.0 de 08_non-res 2 251 0.0 0.0 de 09_hydro_pump 2 251 0.0 0.0 -de 01_solar 2 252 1.0 0.0 -de 02_wind_on 2 252 1.0 0.0 -de 03_wind_off 2 252 1.0 0.0 -de 04_res 2 252 1.0 0.0 -de 05_nuclear 2 252 1.0 0.0 +de 01_solar 2 252 0.0 1.0 +de 02_wind_on 2 252 0.0 1.0 +de 03_wind_off 2 252 0.0 1.0 +de 04_res 2 252 0.0 1.0 +de 05_nuclear 2 252 0.0 1.0 de 06_coal 2 252 0.0 0.0 de 07_gas 2 252 0.0 0.0 de 08_non-res 2 252 0.0 0.0 de 09_hydro_pump 2 252 0.0 0.0 -de 01_solar 2 253 1.0 0.0 -de 02_wind_on 2 253 1.0 0.0 -de 03_wind_off 2 253 1.0 0.0 -de 04_res 2 253 1.0 0.0 -de 05_nuclear 2 253 1.0 0.0 +de 01_solar 2 253 0.0 1.0 +de 02_wind_on 2 253 0.0 1.0 +de 03_wind_off 2 253 0.0 1.0 +de 04_res 2 253 0.0 1.0 +de 05_nuclear 2 253 0.0 1.0 de 06_coal 2 253 0.0 0.0 de 07_gas 2 253 0.0 0.0 de 08_non-res 2 253 0.0 0.0 de 09_hydro_pump 2 253 0.0 0.0 -de 01_solar 2 254 1.0 0.0 -de 02_wind_on 2 254 1.0 0.0 -de 03_wind_off 2 254 1.0 0.0 -de 04_res 2 254 1.0 0.0 -de 05_nuclear 2 254 1.0 0.0 +de 01_solar 2 254 0.0 1.0 +de 02_wind_on 2 254 0.0 1.0 +de 03_wind_off 2 254 0.0 1.0 +de 04_res 2 254 0.0 1.0 +de 05_nuclear 2 254 0.0 1.0 de 06_coal 2 254 0.0 0.0 de 07_gas 2 254 0.0 0.0 de 08_non-res 2 254 0.0 0.0 de 09_hydro_pump 2 254 0.0 0.0 -de 01_solar 2 255 1.0 0.0 -de 02_wind_on 2 255 1.0 0.0 -de 03_wind_off 2 255 1.0 0.0 -de 04_res 2 255 1.0 0.0 -de 05_nuclear 2 255 1.0 0.0 +de 01_solar 2 255 0.0 1.0 +de 02_wind_on 2 255 0.0 1.0 +de 03_wind_off 2 255 0.0 1.0 +de 04_res 2 255 0.0 1.0 +de 05_nuclear 2 255 0.0 1.0 de 06_coal 2 255 0.0 0.0 de 07_gas 2 255 0.0 0.0 de 08_non-res 2 255 0.0 0.0 de 09_hydro_pump 2 255 0.0 0.0 -de 01_solar 2 256 1.0 0.0 -de 02_wind_on 2 256 1.0 0.0 -de 03_wind_off 2 256 1.0 0.0 -de 04_res 2 256 1.0 0.0 -de 05_nuclear 2 256 1.0 0.0 +de 01_solar 2 256 0.0 1.0 +de 02_wind_on 2 256 0.0 1.0 +de 03_wind_off 2 256 0.0 1.0 +de 04_res 2 256 0.0 1.0 +de 05_nuclear 2 256 0.0 1.0 de 06_coal 2 256 0.0 0.0 de 07_gas 2 256 0.0 0.0 de 08_non-res 2 256 0.0 0.0 de 09_hydro_pump 2 256 0.0 0.0 -de 01_solar 2 257 1.0 0.0 -de 02_wind_on 2 257 1.0 0.0 -de 03_wind_off 2 257 1.0 0.0 -de 04_res 2 257 1.0 0.0 -de 05_nuclear 2 257 1.0 0.0 +de 01_solar 2 257 0.0 1.0 +de 02_wind_on 2 257 0.0 1.0 +de 03_wind_off 2 257 0.0 1.0 +de 04_res 2 257 0.0 1.0 +de 05_nuclear 2 257 0.0 1.0 de 06_coal 2 257 0.0 0.0 de 07_gas 2 257 0.0 0.0 de 08_non-res 2 257 0.0 0.0 de 09_hydro_pump 2 257 0.0 0.0 -de 01_solar 2 258 1.0 0.0 -de 02_wind_on 2 258 1.0 0.0 -de 03_wind_off 2 258 1.0 0.0 -de 04_res 2 258 1.0 0.0 -de 05_nuclear 2 258 1.0 0.0 +de 01_solar 2 258 0.0 1.0 +de 02_wind_on 2 258 0.0 1.0 +de 03_wind_off 2 258 0.0 1.0 +de 04_res 2 258 0.0 1.0 +de 05_nuclear 2 258 0.0 1.0 de 06_coal 2 258 0.0 0.0 de 07_gas 2 258 0.0 0.0 de 08_non-res 2 258 0.0 0.0 de 09_hydro_pump 2 258 0.0 0.0 -de 01_solar 2 259 1.0 0.0 -de 02_wind_on 2 259 1.0 0.0 -de 03_wind_off 2 259 1.0 0.0 -de 04_res 2 259 1.0 0.0 -de 05_nuclear 2 259 1.0 0.0 +de 01_solar 2 259 0.0 1.0 +de 02_wind_on 2 259 0.0 1.0 +de 03_wind_off 2 259 0.0 1.0 +de 04_res 2 259 0.0 1.0 +de 05_nuclear 2 259 0.0 1.0 de 06_coal 2 259 0.0 0.0 de 07_gas 2 259 0.0 0.0 de 08_non-res 2 259 0.0 0.0 de 09_hydro_pump 2 259 0.0 0.0 -de 01_solar 2 260 1.0 0.0 -de 02_wind_on 2 260 1.0 0.0 -de 03_wind_off 2 260 1.0 0.0 -de 04_res 2 260 1.0 0.0 -de 05_nuclear 2 260 1.0 0.0 +de 01_solar 2 260 0.0 1.0 +de 02_wind_on 2 260 0.0 1.0 +de 03_wind_off 2 260 0.0 1.0 +de 04_res 2 260 0.0 1.0 +de 05_nuclear 2 260 0.0 1.0 de 06_coal 2 260 0.0 0.0 de 07_gas 2 260 0.0 0.0 de 08_non-res 2 260 0.0 0.0 de 09_hydro_pump 2 260 0.0 0.0 -de 01_solar 2 261 1.0 0.0 -de 02_wind_on 2 261 1.0 0.0 -de 03_wind_off 2 261 1.0 0.0 -de 04_res 2 261 1.0 0.0 -de 05_nuclear 2 261 1.0 0.0 +de 01_solar 2 261 0.0 1.0 +de 02_wind_on 2 261 0.0 1.0 +de 03_wind_off 2 261 0.0 1.0 +de 04_res 2 261 0.0 1.0 +de 05_nuclear 2 261 0.0 1.0 de 06_coal 2 261 0.0 0.0 de 07_gas 2 261 0.0 0.0 de 08_non-res 2 261 0.0 0.0 de 09_hydro_pump 2 261 0.0 0.0 -de 01_solar 2 262 1.0 0.0 -de 02_wind_on 2 262 1.0 0.0 -de 03_wind_off 2 262 1.0 0.0 -de 04_res 2 262 1.0 0.0 -de 05_nuclear 2 262 1.0 0.0 +de 01_solar 2 262 0.0 1.0 +de 02_wind_on 2 262 0.0 1.0 +de 03_wind_off 2 262 0.0 1.0 +de 04_res 2 262 0.0 1.0 +de 05_nuclear 2 262 0.0 1.0 de 06_coal 2 262 0.0 0.0 de 07_gas 2 262 0.0 0.0 de 08_non-res 2 262 0.0 0.0 de 09_hydro_pump 2 262 0.0 0.0 -de 01_solar 2 263 1.0 0.0 -de 02_wind_on 2 263 1.0 0.0 -de 03_wind_off 2 263 1.0 0.0 -de 04_res 2 263 1.0 0.0 -de 05_nuclear 2 263 1.0 0.0 +de 01_solar 2 263 0.0 1.0 +de 02_wind_on 2 263 0.0 1.0 +de 03_wind_off 2 263 0.0 1.0 +de 04_res 2 263 0.0 1.0 +de 05_nuclear 2 263 0.0 1.0 de 06_coal 2 263 0.0 0.0 de 07_gas 2 263 0.0 0.0 de 08_non-res 2 263 0.0 0.0 de 09_hydro_pump 2 263 0.0 0.0 -de 01_solar 2 264 1.0 0.0 -de 02_wind_on 2 264 1.0 0.0 -de 03_wind_off 2 264 1.0 0.0 -de 04_res 2 264 1.0 0.0 -de 05_nuclear 2 264 1.0 0.0 +de 01_solar 2 264 0.0 1.0 +de 02_wind_on 2 264 0.0 1.0 +de 03_wind_off 2 264 0.0 1.0 +de 04_res 2 264 0.0 1.0 +de 05_nuclear 2 264 0.0 1.0 de 06_coal 2 264 0.0 0.0 de 07_gas 2 264 0.0 0.0 de 08_non-res 2 264 0.0 0.0 de 09_hydro_pump 2 264 0.0 0.0 -de 01_solar 2 265 1.0 0.0 -de 02_wind_on 2 265 1.0 0.0 -de 03_wind_off 2 265 1.0 0.0 -de 04_res 2 265 1.0 0.0 -de 05_nuclear 2 265 1.0 0.0 +de 01_solar 2 265 0.0 1.0 +de 02_wind_on 2 265 0.0 1.0 +de 03_wind_off 2 265 0.0 1.0 +de 04_res 2 265 0.0 1.0 +de 05_nuclear 2 265 0.0 1.0 de 06_coal 2 265 0.0 0.0 de 07_gas 2 265 0.0 0.0 de 08_non-res 2 265 0.0 0.0 de 09_hydro_pump 2 265 0.0 0.0 -de 01_solar 2 266 1.0 0.0 -de 02_wind_on 2 266 1.0 0.0 -de 03_wind_off 2 266 1.0 0.0 -de 04_res 2 266 1.0 0.0 -de 05_nuclear 2 266 1.0 0.0 +de 01_solar 2 266 0.0 1.0 +de 02_wind_on 2 266 0.0 1.0 +de 03_wind_off 2 266 0.0 1.0 +de 04_res 2 266 0.0 1.0 +de 05_nuclear 2 266 0.0 1.0 de 06_coal 2 266 0.0 0.0 de 07_gas 2 266 0.0 0.0 de 08_non-res 2 266 0.0 0.0 de 09_hydro_pump 2 266 0.0 0.0 -de 01_solar 2 267 1.0 0.0 -de 02_wind_on 2 267 1.0 0.0 -de 03_wind_off 2 267 1.0 0.0 -de 04_res 2 267 1.0 0.0 -de 05_nuclear 2 267 1.0 0.0 +de 01_solar 2 267 0.0 1.0 +de 02_wind_on 2 267 0.0 1.0 +de 03_wind_off 2 267 0.0 1.0 +de 04_res 2 267 0.0 1.0 +de 05_nuclear 2 267 0.0 1.0 de 06_coal 2 267 0.0 0.0 de 07_gas 2 267 0.0 0.0 de 08_non-res 2 267 0.0 0.0 de 09_hydro_pump 2 267 0.0 0.0 -de 01_solar 2 268 1.0 0.0 -de 02_wind_on 2 268 1.0 0.0 -de 03_wind_off 2 268 1.0 0.0 -de 04_res 2 268 1.0 0.0 -de 05_nuclear 2 268 1.0 0.0 +de 01_solar 2 268 0.0 1.0 +de 02_wind_on 2 268 0.0 1.0 +de 03_wind_off 2 268 0.0 1.0 +de 04_res 2 268 0.0 1.0 +de 05_nuclear 2 268 0.0 1.0 de 06_coal 2 268 0.0 0.0 de 07_gas 2 268 0.0 0.0 de 08_non-res 2 268 0.0 0.0 de 09_hydro_pump 2 268 0.0 0.0 -de 01_solar 2 269 1.0 0.0 -de 02_wind_on 2 269 1.0 0.0 -de 03_wind_off 2 269 1.0 0.0 -de 04_res 2 269 1.0 0.0 -de 05_nuclear 2 269 1.0 0.0 +de 01_solar 2 269 0.0 1.0 +de 02_wind_on 2 269 0.0 1.0 +de 03_wind_off 2 269 0.0 1.0 +de 04_res 2 269 0.0 1.0 +de 05_nuclear 2 269 0.0 1.0 de 06_coal 2 269 0.0 0.0 de 07_gas 2 269 0.0 0.0 de 08_non-res 2 269 0.0 0.0 de 09_hydro_pump 2 269 0.0 0.0 -de 01_solar 2 270 1.0 0.0 -de 02_wind_on 2 270 1.0 0.0 -de 03_wind_off 2 270 1.0 0.0 -de 04_res 2 270 1.0 0.0 -de 05_nuclear 2 270 1.0 0.0 -de 06_coal 2 270 1.0 0.0 +de 01_solar 2 270 0.0 1.0 +de 02_wind_on 2 270 0.0 1.0 +de 03_wind_off 2 270 0.0 1.0 +de 04_res 2 270 0.0 1.0 +de 05_nuclear 2 270 0.0 1.0 +de 06_coal 2 270 0.0 1.0 de 07_gas 2 270 0.0 0.0 de 08_non-res 2 270 0.0 0.0 de 09_hydro_pump 2 270 0.0 0.0 -de 01_solar 2 271 1.0 0.0 -de 02_wind_on 2 271 1.0 0.0 -de 03_wind_off 2 271 1.0 0.0 -de 04_res 2 271 1.0 0.0 -de 05_nuclear 2 271 1.0 0.0 -de 06_coal 2 271 1.0 0.0 +de 01_solar 2 271 0.0 1.0 +de 02_wind_on 2 271 0.0 1.0 +de 03_wind_off 2 271 0.0 1.0 +de 04_res 2 271 0.0 1.0 +de 05_nuclear 2 271 0.0 1.0 +de 06_coal 2 271 0.0 1.0 de 07_gas 2 271 0.0 0.0 de 08_non-res 2 271 0.0 0.0 de 09_hydro_pump 2 271 0.0 0.0 -de 01_solar 2 272 1.0 0.0 -de 02_wind_on 2 272 1.0 0.0 -de 03_wind_off 2 272 1.0 0.0 -de 04_res 2 272 1.0 0.0 -de 05_nuclear 2 272 1.0 0.0 -de 06_coal 2 272 1.0 0.0 +de 01_solar 2 272 0.0 1.0 +de 02_wind_on 2 272 0.0 1.0 +de 03_wind_off 2 272 0.0 1.0 +de 04_res 2 272 0.0 1.0 +de 05_nuclear 2 272 0.0 1.0 +de 06_coal 2 272 0.0 1.0 de 07_gas 2 272 0.0 0.0 de 08_non-res 2 272 0.0 0.0 de 09_hydro_pump 2 272 0.0 0.0 -de 01_solar 2 273 1.0 0.0 -de 02_wind_on 2 273 1.0 0.0 -de 03_wind_off 2 273 1.0 0.0 -de 04_res 2 273 1.0 0.0 -de 05_nuclear 2 273 1.0 0.0 -de 06_coal 2 273 1.0 0.0 +de 01_solar 2 273 0.0 1.0 +de 02_wind_on 2 273 0.0 1.0 +de 03_wind_off 2 273 0.0 1.0 +de 04_res 2 273 0.0 1.0 +de 05_nuclear 2 273 0.0 1.0 +de 06_coal 2 273 0.0 1.0 de 07_gas 2 273 0.0 0.0 de 08_non-res 2 273 0.0 0.0 de 09_hydro_pump 2 273 0.0 0.0 -de 01_solar 2 274 1.0 0.0 -de 02_wind_on 2 274 1.0 0.0 -de 03_wind_off 2 274 1.0 0.0 -de 04_res 2 274 1.0 0.0 -de 05_nuclear 2 274 1.0 0.0 -de 06_coal 2 274 1.0 0.0 +de 01_solar 2 274 0.0 1.0 +de 02_wind_on 2 274 0.0 1.0 +de 03_wind_off 2 274 0.0 1.0 +de 04_res 2 274 0.0 1.0 +de 05_nuclear 2 274 0.0 1.0 +de 06_coal 2 274 0.0 1.0 de 07_gas 2 274 0.0 0.0 de 08_non-res 2 274 0.0 0.0 de 09_hydro_pump 2 274 0.0 0.0 -de 01_solar 2 275 1.0 0.0 -de 02_wind_on 2 275 1.0 0.0 -de 03_wind_off 2 275 1.0 0.0 -de 04_res 2 275 1.0 0.0 -de 05_nuclear 2 275 1.0 0.0 -de 06_coal 2 275 1.0 0.0 +de 01_solar 2 275 0.0 1.0 +de 02_wind_on 2 275 0.0 1.0 +de 03_wind_off 2 275 0.0 1.0 +de 04_res 2 275 0.0 1.0 +de 05_nuclear 2 275 0.0 1.0 +de 06_coal 2 275 0.0 1.0 de 07_gas 2 275 0.0 0.0 de 08_non-res 2 275 0.0 0.0 de 09_hydro_pump 2 275 0.0 0.0 -de 01_solar 2 276 1.0 0.0 -de 02_wind_on 2 276 1.0 0.0 -de 03_wind_off 2 276 1.0 0.0 -de 04_res 2 276 1.0 0.0 -de 05_nuclear 2 276 1.0 0.0 -de 06_coal 2 276 1.0 0.0 +de 01_solar 2 276 0.0 1.0 +de 02_wind_on 2 276 0.0 1.0 +de 03_wind_off 2 276 0.0 1.0 +de 04_res 2 276 0.0 1.0 +de 05_nuclear 2 276 0.0 1.0 +de 06_coal 2 276 0.0 1.0 de 07_gas 2 276 0.0 0.0 de 08_non-res 2 276 0.0 0.0 de 09_hydro_pump 2 276 0.0 0.0 -de 01_solar 2 277 1.0 0.0 -de 02_wind_on 2 277 1.0 0.0 -de 03_wind_off 2 277 1.0 0.0 -de 04_res 2 277 1.0 0.0 -de 05_nuclear 2 277 1.0 0.0 -de 06_coal 2 277 1.0 0.0 +de 01_solar 2 277 0.0 1.0 +de 02_wind_on 2 277 0.0 1.0 +de 03_wind_off 2 277 0.0 1.0 +de 04_res 2 277 0.0 1.0 +de 05_nuclear 2 277 0.0 1.0 +de 06_coal 2 277 0.0 1.0 de 07_gas 2 277 0.0 0.0 de 08_non-res 2 277 0.0 0.0 de 09_hydro_pump 2 277 0.0 0.0 -de 01_solar 2 278 1.0 0.0 -de 02_wind_on 2 278 1.0 0.0 -de 03_wind_off 2 278 1.0 0.0 -de 04_res 2 278 1.0 0.0 -de 05_nuclear 2 278 1.0 0.0 -de 06_coal 2 278 1.0 0.0 +de 01_solar 2 278 0.0 1.0 +de 02_wind_on 2 278 0.0 1.0 +de 03_wind_off 2 278 0.0 1.0 +de 04_res 2 278 0.0 1.0 +de 05_nuclear 2 278 0.0 1.0 +de 06_coal 2 278 0.0 1.0 de 07_gas 2 278 0.0 0.0 de 08_non-res 2 278 0.0 0.0 de 09_hydro_pump 2 278 0.0 0.0 -de 01_solar 2 279 1.0 0.0 -de 02_wind_on 2 279 1.0 0.0 -de 03_wind_off 2 279 1.0 0.0 -de 04_res 2 279 1.0 0.0 -de 05_nuclear 2 279 1.0 0.0 -de 06_coal 2 279 1.0 0.0 +de 01_solar 2 279 0.0 1.0 +de 02_wind_on 2 279 0.0 1.0 +de 03_wind_off 2 279 0.0 1.0 +de 04_res 2 279 0.0 1.0 +de 05_nuclear 2 279 0.0 1.0 +de 06_coal 2 279 0.0 1.0 de 07_gas 2 279 0.0 0.0 de 08_non-res 2 279 0.0 0.0 de 09_hydro_pump 2 279 0.0 0.0 -de 01_solar 2 280 1.0 0.0 -de 02_wind_on 2 280 1.0 0.0 -de 03_wind_off 2 280 1.0 0.0 -de 04_res 2 280 1.0 0.0 -de 05_nuclear 2 280 1.0 0.0 -de 06_coal 2 280 1.0 0.0 +de 01_solar 2 280 0.0 1.0 +de 02_wind_on 2 280 0.0 1.0 +de 03_wind_off 2 280 0.0 1.0 +de 04_res 2 280 0.0 1.0 +de 05_nuclear 2 280 0.0 1.0 +de 06_coal 2 280 0.0 1.0 de 07_gas 2 280 0.0 0.0 de 08_non-res 2 280 0.0 0.0 de 09_hydro_pump 2 280 0.0 0.0 -de 01_solar 2 281 1.0 0.0 -de 02_wind_on 2 281 1.0 0.0 -de 03_wind_off 2 281 1.0 0.0 -de 04_res 2 281 1.0 0.0 -de 05_nuclear 2 281 1.0 0.0 -de 06_coal 2 281 1.0 0.0 +de 01_solar 2 281 0.0 1.0 +de 02_wind_on 2 281 0.0 1.0 +de 03_wind_off 2 281 0.0 1.0 +de 04_res 2 281 0.0 1.0 +de 05_nuclear 2 281 0.0 1.0 +de 06_coal 2 281 0.0 1.0 de 07_gas 2 281 0.0 0.0 de 08_non-res 2 281 0.0 0.0 de 09_hydro_pump 2 281 0.0 0.0 -de 01_solar 2 282 1.0 0.0 -de 02_wind_on 2 282 1.0 0.0 -de 03_wind_off 2 282 1.0 0.0 -de 04_res 2 282 1.0 0.0 -de 05_nuclear 2 282 1.0 0.0 -de 06_coal 2 282 1.0 0.0 +de 01_solar 2 282 0.0 1.0 +de 02_wind_on 2 282 0.0 1.0 +de 03_wind_off 2 282 0.0 1.0 +de 04_res 2 282 0.0 1.0 +de 05_nuclear 2 282 0.0 1.0 +de 06_coal 2 282 0.0 1.0 de 07_gas 2 282 0.0 0.0 de 08_non-res 2 282 0.0 0.0 de 09_hydro_pump 2 282 0.0 0.0 -de 01_solar 2 283 1.0 0.0 -de 02_wind_on 2 283 1.0 0.0 -de 03_wind_off 2 283 1.0 0.0 -de 04_res 2 283 1.0 0.0 -de 05_nuclear 2 283 1.0 0.0 -de 06_coal 2 283 1.0 0.0 +de 01_solar 2 283 0.0 1.0 +de 02_wind_on 2 283 0.0 1.0 +de 03_wind_off 2 283 0.0 1.0 +de 04_res 2 283 0.0 1.0 +de 05_nuclear 2 283 0.0 1.0 +de 06_coal 2 283 0.0 1.0 de 07_gas 2 283 0.0 0.0 de 08_non-res 2 283 0.0 0.0 de 09_hydro_pump 2 283 0.0 0.0 -de 01_solar 2 284 1.0 0.0 -de 02_wind_on 2 284 1.0 0.0 -de 03_wind_off 2 284 1.0 0.0 -de 04_res 2 284 1.0 0.0 -de 05_nuclear 2 284 1.0 0.0 -de 06_coal 2 284 1.0 0.0 +de 01_solar 2 284 0.0 1.0 +de 02_wind_on 2 284 0.0 1.0 +de 03_wind_off 2 284 0.0 1.0 +de 04_res 2 284 0.0 1.0 +de 05_nuclear 2 284 0.0 1.0 +de 06_coal 2 284 0.0 1.0 de 07_gas 2 284 0.0 0.0 de 08_non-res 2 284 0.0 0.0 de 09_hydro_pump 2 284 0.0 0.0 -de 01_solar 2 285 1.0 0.0 -de 02_wind_on 2 285 1.0 0.0 -de 03_wind_off 2 285 1.0 0.0 -de 04_res 2 285 1.0 0.0 -de 05_nuclear 2 285 1.0 0.0 -de 06_coal 2 285 1.0 0.0 +de 01_solar 2 285 0.0 1.0 +de 02_wind_on 2 285 0.0 1.0 +de 03_wind_off 2 285 0.0 1.0 +de 04_res 2 285 0.0 1.0 +de 05_nuclear 2 285 0.0 1.0 +de 06_coal 2 285 0.0 1.0 de 07_gas 2 285 0.0 0.0 de 08_non-res 2 285 0.0 0.0 de 09_hydro_pump 2 285 0.0 0.0 -de 01_solar 2 286 1.0 0.0 -de 02_wind_on 2 286 1.0 0.0 -de 03_wind_off 2 286 1.0 0.0 -de 04_res 2 286 1.0 0.0 -de 05_nuclear 2 286 1.0 0.0 -de 06_coal 2 286 1.0 0.0 +de 01_solar 2 286 0.0 1.0 +de 02_wind_on 2 286 0.0 1.0 +de 03_wind_off 2 286 0.0 1.0 +de 04_res 2 286 0.0 1.0 +de 05_nuclear 2 286 0.0 1.0 +de 06_coal 2 286 0.0 1.0 de 07_gas 2 286 0.0 0.0 de 08_non-res 2 286 0.0 0.0 de 09_hydro_pump 2 286 0.0 0.0 -de 01_solar 2 287 1.0 0.0 -de 02_wind_on 2 287 1.0 0.0 -de 03_wind_off 2 287 1.0 0.0 -de 04_res 2 287 1.0 0.0 -de 05_nuclear 2 287 1.0 0.0 -de 06_coal 2 287 1.0 0.0 +de 01_solar 2 287 0.0 1.0 +de 02_wind_on 2 287 0.0 1.0 +de 03_wind_off 2 287 0.0 1.0 +de 04_res 2 287 0.0 1.0 +de 05_nuclear 2 287 0.0 1.0 +de 06_coal 2 287 0.0 1.0 de 07_gas 2 287 0.0 0.0 de 08_non-res 2 287 0.0 0.0 de 09_hydro_pump 2 287 0.0 0.0 -de 01_solar 2 288 1.0 0.0 -de 02_wind_on 2 288 1.0 0.0 -de 03_wind_off 2 288 1.0 0.0 -de 04_res 2 288 1.0 0.0 -de 05_nuclear 2 288 1.0 0.0 -de 06_coal 2 288 1.0 0.0 +de 01_solar 2 288 0.0 1.0 +de 02_wind_on 2 288 0.0 1.0 +de 03_wind_off 2 288 0.0 1.0 +de 04_res 2 288 0.0 1.0 +de 05_nuclear 2 288 0.0 1.0 +de 06_coal 2 288 0.0 1.0 de 07_gas 2 288 0.0 0.0 de 08_non-res 2 288 0.0 0.0 de 09_hydro_pump 2 288 0.0 0.0 -de 01_solar 2 289 1.0 0.0 -de 02_wind_on 2 289 1.0 0.0 -de 03_wind_off 2 289 1.0 0.0 -de 04_res 2 289 1.0 0.0 -de 05_nuclear 2 289 1.0 0.0 -de 06_coal 2 289 1.0 0.0 +de 01_solar 2 289 0.0 1.0 +de 02_wind_on 2 289 0.0 1.0 +de 03_wind_off 2 289 0.0 1.0 +de 04_res 2 289 0.0 1.0 +de 05_nuclear 2 289 0.0 1.0 +de 06_coal 2 289 0.0 1.0 de 07_gas 2 289 0.0 0.0 de 08_non-res 2 289 0.0 0.0 de 09_hydro_pump 2 289 0.0 0.0 -de 01_solar 2 290 1.0 0.0 -de 02_wind_on 2 290 1.0 0.0 -de 03_wind_off 2 290 1.0 0.0 -de 04_res 2 290 1.0 0.0 -de 05_nuclear 2 290 1.0 0.0 -de 06_coal 2 290 1.0 0.0 -de 07_gas 2 290 1.0 0.0 +de 01_solar 2 290 0.0 1.0 +de 02_wind_on 2 290 0.0 1.0 +de 03_wind_off 2 290 0.0 1.0 +de 04_res 2 290 0.0 1.0 +de 05_nuclear 2 290 0.0 1.0 +de 06_coal 2 290 0.0 1.0 +de 07_gas 2 290 0.0 1.0 de 08_non-res 2 290 0.0 0.0 de 09_hydro_pump 2 290 0.0 0.0 -de 01_solar 2 291 1.0 0.0 -de 02_wind_on 2 291 1.0 0.0 -de 03_wind_off 2 291 1.0 0.0 -de 04_res 2 291 1.0 0.0 -de 05_nuclear 2 291 1.0 0.0 -de 06_coal 2 291 1.0 0.0 -de 07_gas 2 291 1.0 0.0 +de 01_solar 2 291 0.0 1.0 +de 02_wind_on 2 291 0.0 1.0 +de 03_wind_off 2 291 0.0 1.0 +de 04_res 2 291 0.0 1.0 +de 05_nuclear 2 291 0.0 1.0 +de 06_coal 2 291 0.0 1.0 +de 07_gas 2 291 0.0 1.0 de 08_non-res 2 291 0.0 0.0 de 09_hydro_pump 2 291 0.0 0.0 -de 01_solar 2 292 1.0 0.0 -de 02_wind_on 2 292 1.0 0.0 -de 03_wind_off 2 292 1.0 0.0 -de 04_res 2 292 1.0 0.0 -de 05_nuclear 2 292 1.0 0.0 -de 06_coal 2 292 1.0 0.0 -de 07_gas 2 292 1.0 0.0 +de 01_solar 2 292 0.0 1.0 +de 02_wind_on 2 292 0.0 1.0 +de 03_wind_off 2 292 0.0 1.0 +de 04_res 2 292 0.0 1.0 +de 05_nuclear 2 292 0.0 1.0 +de 06_coal 2 292 0.0 1.0 +de 07_gas 2 292 0.0 1.0 de 08_non-res 2 292 0.0 0.0 de 09_hydro_pump 2 292 0.0 0.0 -de 01_solar 2 293 1.0 0.0 -de 02_wind_on 2 293 1.0 0.0 -de 03_wind_off 2 293 1.0 0.0 -de 04_res 2 293 1.0 0.0 -de 05_nuclear 2 293 1.0 0.0 -de 06_coal 2 293 1.0 0.0 -de 07_gas 2 293 1.0 0.0 +de 01_solar 2 293 0.0 1.0 +de 02_wind_on 2 293 0.0 1.0 +de 03_wind_off 2 293 0.0 1.0 +de 04_res 2 293 0.0 1.0 +de 05_nuclear 2 293 0.0 1.0 +de 06_coal 2 293 0.0 1.0 +de 07_gas 2 293 0.0 1.0 de 08_non-res 2 293 0.0 0.0 de 09_hydro_pump 2 293 0.0 0.0 -de 01_solar 2 294 1.0 0.0 -de 02_wind_on 2 294 1.0 0.0 -de 03_wind_off 2 294 1.0 0.0 -de 04_res 2 294 1.0 0.0 -de 05_nuclear 2 294 1.0 0.0 -de 06_coal 2 294 1.0 0.0 -de 07_gas 2 294 1.0 0.0 +de 01_solar 2 294 0.0 1.0 +de 02_wind_on 2 294 0.0 1.0 +de 03_wind_off 2 294 0.0 1.0 +de 04_res 2 294 0.0 1.0 +de 05_nuclear 2 294 0.0 1.0 +de 06_coal 2 294 0.0 1.0 +de 07_gas 2 294 0.0 1.0 de 08_non-res 2 294 0.0 0.0 de 09_hydro_pump 2 294 0.0 0.0 -de 01_solar 2 295 1.0 0.0 -de 02_wind_on 2 295 1.0 0.0 -de 03_wind_off 2 295 1.0 0.0 -de 04_res 2 295 1.0 0.0 -de 05_nuclear 2 295 1.0 0.0 -de 06_coal 2 295 1.0 0.0 -de 07_gas 2 295 1.0 0.0 +de 01_solar 2 295 0.0 1.0 +de 02_wind_on 2 295 0.0 1.0 +de 03_wind_off 2 295 0.0 1.0 +de 04_res 2 295 0.0 1.0 +de 05_nuclear 2 295 0.0 1.0 +de 06_coal 2 295 0.0 1.0 +de 07_gas 2 295 0.0 1.0 de 08_non-res 2 295 0.0 0.0 de 09_hydro_pump 2 295 0.0 0.0 -de 01_solar 2 296 1.0 0.0 -de 02_wind_on 2 296 1.0 0.0 -de 03_wind_off 2 296 1.0 0.0 -de 04_res 2 296 1.0 0.0 -de 05_nuclear 2 296 1.0 0.0 -de 06_coal 2 296 1.0 0.0 -de 07_gas 2 296 1.0 0.0 +de 01_solar 2 296 0.0 1.0 +de 02_wind_on 2 296 0.0 1.0 +de 03_wind_off 2 296 0.0 1.0 +de 04_res 2 296 0.0 1.0 +de 05_nuclear 2 296 0.0 1.0 +de 06_coal 2 296 0.0 1.0 +de 07_gas 2 296 0.0 1.0 de 08_non-res 2 296 0.0 0.0 de 09_hydro_pump 2 296 0.0 0.0 -de 01_solar 2 297 1.0 0.0 -de 02_wind_on 2 297 1.0 0.0 -de 03_wind_off 2 297 1.0 0.0 -de 04_res 2 297 1.0 0.0 -de 05_nuclear 2 297 1.0 0.0 -de 06_coal 2 297 1.0 0.0 -de 07_gas 2 297 1.0 0.0 +de 01_solar 2 297 0.0 1.0 +de 02_wind_on 2 297 0.0 1.0 +de 03_wind_off 2 297 0.0 1.0 +de 04_res 2 297 0.0 1.0 +de 05_nuclear 2 297 0.0 1.0 +de 06_coal 2 297 0.0 1.0 +de 07_gas 2 297 0.0 1.0 de 08_non-res 2 297 0.0 0.0 de 09_hydro_pump 2 297 0.0 0.0 -de 01_solar 2 298 1.0 0.0 -de 02_wind_on 2 298 1.0 0.0 -de 03_wind_off 2 298 1.0 0.0 -de 04_res 2 298 1.0 0.0 -de 05_nuclear 2 298 1.0 0.0 -de 06_coal 2 298 1.0 0.0 -de 07_gas 2 298 1.0 0.0 +de 01_solar 2 298 0.0 1.0 +de 02_wind_on 2 298 0.0 1.0 +de 03_wind_off 2 298 0.0 1.0 +de 04_res 2 298 0.0 1.0 +de 05_nuclear 2 298 0.0 1.0 +de 06_coal 2 298 0.0 1.0 +de 07_gas 2 298 0.0 1.0 de 08_non-res 2 298 0.0 0.0 de 09_hydro_pump 2 298 0.0 0.0 -de 01_solar 2 299 1.0 0.0 -de 02_wind_on 2 299 1.0 0.0 -de 03_wind_off 2 299 1.0 0.0 -de 04_res 2 299 1.0 0.0 -de 05_nuclear 2 299 1.0 0.0 -de 06_coal 2 299 1.0 0.0 -de 07_gas 2 299 1.0 0.0 +de 01_solar 2 299 0.0 1.0 +de 02_wind_on 2 299 0.0 1.0 +de 03_wind_off 2 299 0.0 1.0 +de 04_res 2 299 0.0 1.0 +de 05_nuclear 2 299 0.0 1.0 +de 06_coal 2 299 0.0 1.0 +de 07_gas 2 299 0.0 1.0 de 08_non-res 2 299 0.0 0.0 de 09_hydro_pump 2 299 0.0 0.0 -de 01_solar 2 300 1.0 0.0 -de 02_wind_on 2 300 1.0 0.0 -de 03_wind_off 2 300 1.0 0.0 -de 04_res 2 300 1.0 0.0 -de 05_nuclear 2 300 1.0 0.0 -de 06_coal 2 300 1.0 0.0 -de 07_gas 2 300 1.0 0.0 +de 01_solar 2 300 0.0 1.0 +de 02_wind_on 2 300 0.0 1.0 +de 03_wind_off 2 300 0.0 1.0 +de 04_res 2 300 0.0 1.0 +de 05_nuclear 2 300 0.0 1.0 +de 06_coal 2 300 0.0 1.0 +de 07_gas 2 300 0.0 1.0 de 08_non-res 2 300 0.0 0.0 de 09_hydro_pump 2 300 0.0 0.0 -de 01_solar 2 301 1.0 0.0 -de 02_wind_on 2 301 1.0 0.0 -de 03_wind_off 2 301 1.0 0.0 -de 04_res 2 301 1.0 0.0 -de 05_nuclear 2 301 1.0 0.0 -de 06_coal 2 301 1.0 0.0 -de 07_gas 2 301 1.0 0.0 +de 01_solar 2 301 0.0 1.0 +de 02_wind_on 2 301 0.0 1.0 +de 03_wind_off 2 301 0.0 1.0 +de 04_res 2 301 0.0 1.0 +de 05_nuclear 2 301 0.0 1.0 +de 06_coal 2 301 0.0 1.0 +de 07_gas 2 301 0.0 1.0 de 08_non-res 2 301 0.0 0.0 de 09_hydro_pump 2 301 0.0 0.0 -de 01_solar 2 302 1.0 0.0 -de 02_wind_on 2 302 1.0 0.0 -de 03_wind_off 2 302 1.0 0.0 -de 04_res 2 302 1.0 0.0 -de 05_nuclear 2 302 1.0 0.0 -de 06_coal 2 302 1.0 0.0 -de 07_gas 2 302 1.0 0.0 +de 01_solar 2 302 0.0 1.0 +de 02_wind_on 2 302 0.0 1.0 +de 03_wind_off 2 302 0.0 1.0 +de 04_res 2 302 0.0 1.0 +de 05_nuclear 2 302 0.0 1.0 +de 06_coal 2 302 0.0 1.0 +de 07_gas 2 302 0.0 1.0 de 08_non-res 2 302 0.0 0.0 de 09_hydro_pump 2 302 0.0 0.0 -de 01_solar 2 303 1.0 0.0 -de 02_wind_on 2 303 1.0 0.0 -de 03_wind_off 2 303 1.0 0.0 -de 04_res 2 303 1.0 0.0 -de 05_nuclear 2 303 1.0 0.0 -de 06_coal 2 303 1.0 0.0 -de 07_gas 2 303 1.0 0.0 +de 01_solar 2 303 0.0 1.0 +de 02_wind_on 2 303 0.0 1.0 +de 03_wind_off 2 303 0.0 1.0 +de 04_res 2 303 0.0 1.0 +de 05_nuclear 2 303 0.0 1.0 +de 06_coal 2 303 0.0 1.0 +de 07_gas 2 303 0.0 1.0 de 08_non-res 2 303 0.0 0.0 de 09_hydro_pump 2 303 0.0 0.0 -de 01_solar 2 304 1.0 0.0 -de 02_wind_on 2 304 1.0 0.0 -de 03_wind_off 2 304 1.0 0.0 -de 04_res 2 304 1.0 0.0 -de 05_nuclear 2 304 1.0 0.0 -de 06_coal 2 304 1.0 0.0 -de 07_gas 2 304 1.0 0.0 +de 01_solar 2 304 0.0 1.0 +de 02_wind_on 2 304 0.0 1.0 +de 03_wind_off 2 304 0.0 1.0 +de 04_res 2 304 0.0 1.0 +de 05_nuclear 2 304 0.0 1.0 +de 06_coal 2 304 0.0 1.0 +de 07_gas 2 304 0.0 1.0 de 08_non-res 2 304 0.0 0.0 de 09_hydro_pump 2 304 0.0 0.0 -de 01_solar 2 305 1.0 0.0 -de 02_wind_on 2 305 1.0 0.0 -de 03_wind_off 2 305 1.0 0.0 -de 04_res 2 305 1.0 0.0 -de 05_nuclear 2 305 1.0 0.0 -de 06_coal 2 305 1.0 0.0 -de 07_gas 2 305 1.0 0.0 +de 01_solar 2 305 0.0 1.0 +de 02_wind_on 2 305 0.0 1.0 +de 03_wind_off 2 305 0.0 1.0 +de 04_res 2 305 0.0 1.0 +de 05_nuclear 2 305 0.0 1.0 +de 06_coal 2 305 0.0 1.0 +de 07_gas 2 305 0.0 1.0 de 08_non-res 2 305 0.0 0.0 de 09_hydro_pump 2 305 0.0 0.0 -de 01_solar 2 306 1.0 0.0 -de 02_wind_on 2 306 1.0 0.0 -de 03_wind_off 2 306 1.0 0.0 -de 04_res 2 306 1.0 0.0 -de 05_nuclear 2 306 1.0 0.0 -de 06_coal 2 306 1.0 0.0 -de 07_gas 2 306 1.0 0.0 +de 01_solar 2 306 0.0 1.0 +de 02_wind_on 2 306 0.0 1.0 +de 03_wind_off 2 306 0.0 1.0 +de 04_res 2 306 0.0 1.0 +de 05_nuclear 2 306 0.0 1.0 +de 06_coal 2 306 0.0 1.0 +de 07_gas 2 306 0.0 1.0 de 08_non-res 2 306 0.0 0.0 de 09_hydro_pump 2 306 0.0 0.0 -de 01_solar 2 307 1.0 0.0 -de 02_wind_on 2 307 1.0 0.0 -de 03_wind_off 2 307 1.0 0.0 -de 04_res 2 307 1.0 0.0 -de 05_nuclear 2 307 1.0 0.0 -de 06_coal 2 307 1.0 0.0 -de 07_gas 2 307 1.0 0.0 +de 01_solar 2 307 0.0 1.0 +de 02_wind_on 2 307 0.0 1.0 +de 03_wind_off 2 307 0.0 1.0 +de 04_res 2 307 0.0 1.0 +de 05_nuclear 2 307 0.0 1.0 +de 06_coal 2 307 0.0 1.0 +de 07_gas 2 307 0.0 1.0 de 08_non-res 2 307 0.0 0.0 de 09_hydro_pump 2 307 0.0 0.0 -de 01_solar 2 308 1.0 0.0 -de 02_wind_on 2 308 1.0 0.0 -de 03_wind_off 2 308 1.0 0.0 -de 04_res 2 308 1.0 0.0 -de 05_nuclear 2 308 1.0 0.0 -de 06_coal 2 308 1.0 0.0 -de 07_gas 2 308 1.0 0.0 +de 01_solar 2 308 0.0 1.0 +de 02_wind_on 2 308 0.0 1.0 +de 03_wind_off 2 308 0.0 1.0 +de 04_res 2 308 0.0 1.0 +de 05_nuclear 2 308 0.0 1.0 +de 06_coal 2 308 0.0 1.0 +de 07_gas 2 308 0.0 1.0 de 08_non-res 2 308 0.0 0.0 de 09_hydro_pump 2 308 0.0 0.0 -de 01_solar 2 309 1.0 0.0 -de 02_wind_on 2 309 1.0 0.0 -de 03_wind_off 2 309 1.0 0.0 -de 04_res 2 309 1.0 0.0 -de 05_nuclear 2 309 1.0 0.0 -de 06_coal 2 309 1.0 0.0 -de 07_gas 2 309 1.0 0.0 +de 01_solar 2 309 0.0 1.0 +de 02_wind_on 2 309 0.0 1.0 +de 03_wind_off 2 309 0.0 1.0 +de 04_res 2 309 0.0 1.0 +de 05_nuclear 2 309 0.0 1.0 +de 06_coal 2 309 0.0 1.0 +de 07_gas 2 309 0.0 1.0 de 08_non-res 2 309 0.0 0.0 de 09_hydro_pump 2 309 0.0 0.0 -de 01_solar 2 310 1.0 0.0 -de 02_wind_on 2 310 1.0 0.0 -de 03_wind_off 2 310 1.0 0.0 -de 04_res 2 310 1.0 0.0 -de 05_nuclear 2 310 1.0 0.0 -de 06_coal 2 310 1.0 0.0 -de 07_gas 2 310 1.0 0.0 -de 08_non-res 2 310 1.0 0.0 +de 01_solar 2 310 0.0 1.0 +de 02_wind_on 2 310 0.0 1.0 +de 03_wind_off 2 310 0.0 1.0 +de 04_res 2 310 0.0 1.0 +de 05_nuclear 2 310 0.0 1.0 +de 06_coal 2 310 0.0 1.0 +de 07_gas 2 310 0.0 1.0 +de 08_non-res 2 310 0.0 1.0 de 09_hydro_pump 2 310 0.0 0.0 -de 01_solar 2 311 1.0 0.0 -de 02_wind_on 2 311 1.0 0.0 -de 03_wind_off 2 311 1.0 0.0 -de 04_res 2 311 1.0 0.0 -de 05_nuclear 2 311 1.0 0.0 -de 06_coal 2 311 1.0 0.0 -de 07_gas 2 311 1.0 0.0 -de 08_non-res 2 311 1.0 0.0 +de 01_solar 2 311 0.0 1.0 +de 02_wind_on 2 311 0.0 1.0 +de 03_wind_off 2 311 0.0 1.0 +de 04_res 2 311 0.0 1.0 +de 05_nuclear 2 311 0.0 1.0 +de 06_coal 2 311 0.0 1.0 +de 07_gas 2 311 0.0 1.0 +de 08_non-res 2 311 0.0 1.0 de 09_hydro_pump 2 311 0.0 0.0 -de 01_solar 2 312 1.0 0.0 -de 02_wind_on 2 312 1.0 0.0 -de 03_wind_off 2 312 1.0 0.0 -de 04_res 2 312 1.0 0.0 -de 05_nuclear 2 312 1.0 0.0 -de 06_coal 2 312 1.0 0.0 -de 07_gas 2 312 1.0 0.0 -de 08_non-res 2 312 1.0 0.0 +de 01_solar 2 312 0.0 1.0 +de 02_wind_on 2 312 0.0 1.0 +de 03_wind_off 2 312 0.0 1.0 +de 04_res 2 312 0.0 1.0 +de 05_nuclear 2 312 0.0 1.0 +de 06_coal 2 312 0.0 1.0 +de 07_gas 2 312 0.0 1.0 +de 08_non-res 2 312 0.0 1.0 de 09_hydro_pump 2 312 0.0 0.0 -de 01_solar 2 313 1.0 0.0 -de 02_wind_on 2 313 1.0 0.0 -de 03_wind_off 2 313 1.0 0.0 -de 04_res 2 313 1.0 0.0 -de 05_nuclear 2 313 1.0 0.0 -de 06_coal 2 313 1.0 0.0 -de 07_gas 2 313 1.0 0.0 -de 08_non-res 2 313 1.0 0.0 +de 01_solar 2 313 0.0 1.0 +de 02_wind_on 2 313 0.0 1.0 +de 03_wind_off 2 313 0.0 1.0 +de 04_res 2 313 0.0 1.0 +de 05_nuclear 2 313 0.0 1.0 +de 06_coal 2 313 0.0 1.0 +de 07_gas 2 313 0.0 1.0 +de 08_non-res 2 313 0.0 1.0 de 09_hydro_pump 2 313 0.0 0.0 -de 01_solar 2 314 1.0 0.0 -de 02_wind_on 2 314 1.0 0.0 -de 03_wind_off 2 314 1.0 0.0 -de 04_res 2 314 1.0 0.0 -de 05_nuclear 2 314 1.0 0.0 -de 06_coal 2 314 1.0 0.0 -de 07_gas 2 314 1.0 0.0 -de 08_non-res 2 314 1.0 0.0 +de 01_solar 2 314 0.0 1.0 +de 02_wind_on 2 314 0.0 1.0 +de 03_wind_off 2 314 0.0 1.0 +de 04_res 2 314 0.0 1.0 +de 05_nuclear 2 314 0.0 1.0 +de 06_coal 2 314 0.0 1.0 +de 07_gas 2 314 0.0 1.0 +de 08_non-res 2 314 0.0 1.0 de 09_hydro_pump 2 314 0.0 0.0 -de 01_solar 2 315 1.0 0.0 -de 02_wind_on 2 315 1.0 0.0 -de 03_wind_off 2 315 1.0 0.0 -de 04_res 2 315 1.0 0.0 -de 05_nuclear 2 315 1.0 0.0 -de 06_coal 2 315 1.0 0.0 -de 07_gas 2 315 1.0 0.0 -de 08_non-res 2 315 1.0 0.0 +de 01_solar 2 315 0.0 1.0 +de 02_wind_on 2 315 0.0 1.0 +de 03_wind_off 2 315 0.0 1.0 +de 04_res 2 315 0.0 1.0 +de 05_nuclear 2 315 0.0 1.0 +de 06_coal 2 315 0.0 1.0 +de 07_gas 2 315 0.0 1.0 +de 08_non-res 2 315 0.0 1.0 de 09_hydro_pump 2 315 0.0 0.0 -de 01_solar 2 316 1.0 0.0 -de 02_wind_on 2 316 1.0 0.0 -de 03_wind_off 2 316 1.0 0.0 -de 04_res 2 316 1.0 0.0 -de 05_nuclear 2 316 1.0 0.0 -de 06_coal 2 316 1.0 0.0 -de 07_gas 2 316 1.0 0.0 -de 08_non-res 2 316 1.0 0.0 +de 01_solar 2 316 0.0 1.0 +de 02_wind_on 2 316 0.0 1.0 +de 03_wind_off 2 316 0.0 1.0 +de 04_res 2 316 0.0 1.0 +de 05_nuclear 2 316 0.0 1.0 +de 06_coal 2 316 0.0 1.0 +de 07_gas 2 316 0.0 1.0 +de 08_non-res 2 316 0.0 1.0 de 09_hydro_pump 2 316 0.0 0.0 -de 01_solar 2 317 1.0 0.0 -de 02_wind_on 2 317 1.0 0.0 -de 03_wind_off 2 317 1.0 0.0 -de 04_res 2 317 1.0 0.0 -de 05_nuclear 2 317 1.0 0.0 -de 06_coal 2 317 1.0 0.0 -de 07_gas 2 317 1.0 0.0 -de 08_non-res 2 317 1.0 0.0 +de 01_solar 2 317 0.0 1.0 +de 02_wind_on 2 317 0.0 1.0 +de 03_wind_off 2 317 0.0 1.0 +de 04_res 2 317 0.0 1.0 +de 05_nuclear 2 317 0.0 1.0 +de 06_coal 2 317 0.0 1.0 +de 07_gas 2 317 0.0 1.0 +de 08_non-res 2 317 0.0 1.0 de 09_hydro_pump 2 317 0.0 0.0 -de 01_solar 2 318 1.0 0.0 -de 02_wind_on 2 318 1.0 0.0 -de 03_wind_off 2 318 1.0 0.0 -de 04_res 2 318 1.0 0.0 -de 05_nuclear 2 318 1.0 0.0 -de 06_coal 2 318 1.0 0.0 -de 07_gas 2 318 1.0 0.0 -de 08_non-res 2 318 1.0 0.0 +de 01_solar 2 318 0.0 1.0 +de 02_wind_on 2 318 0.0 1.0 +de 03_wind_off 2 318 0.0 1.0 +de 04_res 2 318 0.0 1.0 +de 05_nuclear 2 318 0.0 1.0 +de 06_coal 2 318 0.0 1.0 +de 07_gas 2 318 0.0 1.0 +de 08_non-res 2 318 0.0 1.0 de 09_hydro_pump 2 318 0.0 0.0 -de 01_solar 2 319 1.0 0.0 -de 02_wind_on 2 319 1.0 0.0 -de 03_wind_off 2 319 1.0 0.0 -de 04_res 2 319 1.0 0.0 -de 05_nuclear 2 319 1.0 0.0 -de 06_coal 2 319 1.0 0.0 -de 07_gas 2 319 1.0 0.0 -de 08_non-res 2 319 1.0 0.0 +de 01_solar 2 319 0.0 1.0 +de 02_wind_on 2 319 0.0 1.0 +de 03_wind_off 2 319 0.0 1.0 +de 04_res 2 319 0.0 1.0 +de 05_nuclear 2 319 0.0 1.0 +de 06_coal 2 319 0.0 1.0 +de 07_gas 2 319 0.0 1.0 +de 08_non-res 2 319 0.0 1.0 de 09_hydro_pump 2 319 0.0 0.0 -de 01_solar 2 320 1.0 0.0 -de 02_wind_on 2 320 1.0 0.0 -de 03_wind_off 2 320 1.0 0.0 -de 04_res 2 320 1.0 0.0 -de 05_nuclear 2 320 1.0 0.0 -de 06_coal 2 320 1.0 0.0 -de 07_gas 2 320 1.0 0.0 -de 08_non-res 2 320 1.0 0.0 +de 01_solar 2 320 0.0 1.0 +de 02_wind_on 2 320 0.0 1.0 +de 03_wind_off 2 320 0.0 1.0 +de 04_res 2 320 0.0 1.0 +de 05_nuclear 2 320 0.0 1.0 +de 06_coal 2 320 0.0 1.0 +de 07_gas 2 320 0.0 1.0 +de 08_non-res 2 320 0.0 1.0 de 09_hydro_pump 2 320 0.0 0.0 -de 01_solar 2 321 1.0 0.0 -de 02_wind_on 2 321 1.0 0.0 -de 03_wind_off 2 321 1.0 0.0 -de 04_res 2 321 1.0 0.0 -de 05_nuclear 2 321 1.0 0.0 -de 06_coal 2 321 1.0 0.0 -de 07_gas 2 321 1.0 0.0 -de 08_non-res 2 321 1.0 0.0 +de 01_solar 2 321 0.0 1.0 +de 02_wind_on 2 321 0.0 1.0 +de 03_wind_off 2 321 0.0 1.0 +de 04_res 2 321 0.0 1.0 +de 05_nuclear 2 321 0.0 1.0 +de 06_coal 2 321 0.0 1.0 +de 07_gas 2 321 0.0 1.0 +de 08_non-res 2 321 0.0 1.0 de 09_hydro_pump 2 321 0.0 0.0 -de 01_solar 2 322 1.0 0.0 -de 02_wind_on 2 322 1.0 0.0 -de 03_wind_off 2 322 1.0 0.0 -de 04_res 2 322 1.0 0.0 -de 05_nuclear 2 322 1.0 0.0 -de 06_coal 2 322 1.0 0.0 -de 07_gas 2 322 1.0 0.0 -de 08_non-res 2 322 1.0 0.0 +de 01_solar 2 322 0.0 1.0 +de 02_wind_on 2 322 0.0 1.0 +de 03_wind_off 2 322 0.0 1.0 +de 04_res 2 322 0.0 1.0 +de 05_nuclear 2 322 0.0 1.0 +de 06_coal 2 322 0.0 1.0 +de 07_gas 2 322 0.0 1.0 +de 08_non-res 2 322 0.0 1.0 de 09_hydro_pump 2 322 0.0 0.0 -de 01_solar 2 323 1.0 0.0 -de 02_wind_on 2 323 1.0 0.0 -de 03_wind_off 2 323 1.0 0.0 -de 04_res 2 323 1.0 0.0 -de 05_nuclear 2 323 1.0 0.0 -de 06_coal 2 323 1.0 0.0 -de 07_gas 2 323 1.0 0.0 -de 08_non-res 2 323 1.0 0.0 +de 01_solar 2 323 0.0 1.0 +de 02_wind_on 2 323 0.0 1.0 +de 03_wind_off 2 323 0.0 1.0 +de 04_res 2 323 0.0 1.0 +de 05_nuclear 2 323 0.0 1.0 +de 06_coal 2 323 0.0 1.0 +de 07_gas 2 323 0.0 1.0 +de 08_non-res 2 323 0.0 1.0 de 09_hydro_pump 2 323 0.0 0.0 -de 01_solar 2 324 1.0 0.0 -de 02_wind_on 2 324 1.0 0.0 -de 03_wind_off 2 324 1.0 0.0 -de 04_res 2 324 1.0 0.0 -de 05_nuclear 2 324 1.0 0.0 -de 06_coal 2 324 1.0 0.0 -de 07_gas 2 324 1.0 0.0 -de 08_non-res 2 324 1.0 0.0 +de 01_solar 2 324 0.0 1.0 +de 02_wind_on 2 324 0.0 1.0 +de 03_wind_off 2 324 0.0 1.0 +de 04_res 2 324 0.0 1.0 +de 05_nuclear 2 324 0.0 1.0 +de 06_coal 2 324 0.0 1.0 +de 07_gas 2 324 0.0 1.0 +de 08_non-res 2 324 0.0 1.0 de 09_hydro_pump 2 324 0.0 0.0 -de 01_solar 2 325 1.0 0.0 -de 02_wind_on 2 325 1.0 0.0 -de 03_wind_off 2 325 1.0 0.0 -de 04_res 2 325 1.0 0.0 -de 05_nuclear 2 325 1.0 0.0 -de 06_coal 2 325 1.0 0.0 -de 07_gas 2 325 1.0 0.0 -de 08_non-res 2 325 1.0 0.0 +de 01_solar 2 325 0.0 1.0 +de 02_wind_on 2 325 0.0 1.0 +de 03_wind_off 2 325 0.0 1.0 +de 04_res 2 325 0.0 1.0 +de 05_nuclear 2 325 0.0 1.0 +de 06_coal 2 325 0.0 1.0 +de 07_gas 2 325 0.0 1.0 +de 08_non-res 2 325 0.0 1.0 de 09_hydro_pump 2 325 0.0 0.0 -de 01_solar 2 326 1.0 0.0 -de 02_wind_on 2 326 1.0 0.0 -de 03_wind_off 2 326 1.0 0.0 -de 04_res 2 326 1.0 0.0 -de 05_nuclear 2 326 1.0 0.0 -de 06_coal 2 326 1.0 0.0 -de 07_gas 2 326 1.0 0.0 -de 08_non-res 2 326 1.0 0.0 +de 01_solar 2 326 0.0 1.0 +de 02_wind_on 2 326 0.0 1.0 +de 03_wind_off 2 326 0.0 1.0 +de 04_res 2 326 0.0 1.0 +de 05_nuclear 2 326 0.0 1.0 +de 06_coal 2 326 0.0 1.0 +de 07_gas 2 326 0.0 1.0 +de 08_non-res 2 326 0.0 1.0 de 09_hydro_pump 2 326 0.0 0.0 -de 01_solar 2 327 1.0 0.0 -de 02_wind_on 2 327 1.0 0.0 -de 03_wind_off 2 327 1.0 0.0 -de 04_res 2 327 1.0 0.0 -de 05_nuclear 2 327 1.0 0.0 -de 06_coal 2 327 1.0 0.0 -de 07_gas 2 327 1.0 0.0 -de 08_non-res 2 327 1.0 0.0 +de 01_solar 2 327 0.0 1.0 +de 02_wind_on 2 327 0.0 1.0 +de 03_wind_off 2 327 0.0 1.0 +de 04_res 2 327 0.0 1.0 +de 05_nuclear 2 327 0.0 1.0 +de 06_coal 2 327 0.0 1.0 +de 07_gas 2 327 0.0 1.0 +de 08_non-res 2 327 0.0 1.0 de 09_hydro_pump 2 327 0.0 0.0 -de 01_solar 2 328 1.0 0.0 -de 02_wind_on 2 328 1.0 0.0 -de 03_wind_off 2 328 1.0 0.0 -de 04_res 2 328 1.0 0.0 -de 05_nuclear 2 328 1.0 0.0 -de 06_coal 2 328 1.0 0.0 -de 07_gas 2 328 1.0 0.0 -de 08_non-res 2 328 1.0 0.0 +de 01_solar 2 328 0.0 1.0 +de 02_wind_on 2 328 0.0 1.0 +de 03_wind_off 2 328 0.0 1.0 +de 04_res 2 328 0.0 1.0 +de 05_nuclear 2 328 0.0 1.0 +de 06_coal 2 328 0.0 1.0 +de 07_gas 2 328 0.0 1.0 +de 08_non-res 2 328 0.0 1.0 de 09_hydro_pump 2 328 0.0 0.0 -de 01_solar 2 329 1.0 0.0 -de 02_wind_on 2 329 1.0 0.0 -de 03_wind_off 2 329 1.0 0.0 -de 04_res 2 329 1.0 0.0 -de 05_nuclear 2 329 1.0 0.0 -de 06_coal 2 329 1.0 0.0 -de 07_gas 2 329 1.0 0.0 -de 08_non-res 2 329 1.0 0.0 +de 01_solar 2 329 0.0 1.0 +de 02_wind_on 2 329 0.0 1.0 +de 03_wind_off 2 329 0.0 1.0 +de 04_res 2 329 0.0 1.0 +de 05_nuclear 2 329 0.0 1.0 +de 06_coal 2 329 0.0 1.0 +de 07_gas 2 329 0.0 1.0 +de 08_non-res 2 329 0.0 1.0 de 09_hydro_pump 2 329 0.0 0.0 -de 01_solar 2 330 1.0 0.0 -de 02_wind_on 2 330 1.0 0.0 -de 03_wind_off 2 330 1.0 0.0 -de 04_res 2 330 1.0 0.0 -de 05_nuclear 2 330 1.0 0.0 -de 06_coal 2 330 1.0 0.0 -de 07_gas 2 330 1.0 0.0 -de 08_non-res 2 330 1.0 0.0 -de 09_hydro_pump 2 330 1.0 0.0 -de 01_solar 2 331 1.0 0.0 -de 02_wind_on 2 331 1.0 0.0 -de 03_wind_off 2 331 1.0 0.0 -de 04_res 2 331 1.0 0.0 -de 05_nuclear 2 331 1.0 0.0 -de 06_coal 2 331 1.0 0.0 -de 07_gas 2 331 1.0 0.0 -de 08_non-res 2 331 1.0 0.0 -de 09_hydro_pump 2 331 1.0 0.0 -de 01_solar 2 332 1.0 0.0 -de 02_wind_on 2 332 1.0 0.0 -de 03_wind_off 2 332 1.0 0.0 -de 04_res 2 332 1.0 0.0 -de 05_nuclear 2 332 1.0 0.0 -de 06_coal 2 332 1.0 0.0 -de 07_gas 2 332 1.0 0.0 -de 08_non-res 2 332 1.0 0.0 -de 09_hydro_pump 2 332 1.0 0.0 -de 01_solar 2 333 1.0 0.0 -de 02_wind_on 2 333 1.0 0.0 -de 03_wind_off 2 333 1.0 0.0 -de 04_res 2 333 1.0 0.0 -de 05_nuclear 2 333 1.0 0.0 -de 06_coal 2 333 1.0 0.0 -de 07_gas 2 333 1.0 0.0 -de 08_non-res 2 333 1.0 0.0 -de 09_hydro_pump 2 333 1.0 0.0 -de 01_solar 2 334 1.0 0.0 -de 02_wind_on 2 334 1.0 0.0 -de 03_wind_off 2 334 1.0 0.0 -de 04_res 2 334 1.0 0.0 -de 05_nuclear 2 334 1.0 0.0 -de 06_coal 2 334 1.0 0.0 -de 07_gas 2 334 1.0 0.0 -de 08_non-res 2 334 1.0 0.0 -de 09_hydro_pump 2 334 1.0 0.0 -de 01_solar 2 335 1.0 0.0 -de 02_wind_on 2 335 1.0 0.0 -de 03_wind_off 2 335 1.0 0.0 -de 04_res 2 335 1.0 0.0 -de 05_nuclear 2 335 1.0 0.0 -de 06_coal 2 335 1.0 0.0 -de 07_gas 2 335 1.0 0.0 -de 08_non-res 2 335 1.0 0.0 -de 09_hydro_pump 2 335 1.0 0.0 -de 01_solar 2 336 1.0 0.0 -de 02_wind_on 2 336 1.0 0.0 -de 03_wind_off 2 336 1.0 0.0 -de 04_res 2 336 1.0 0.0 -de 05_nuclear 2 336 1.0 0.0 -de 06_coal 2 336 1.0 0.0 -de 07_gas 2 336 1.0 0.0 -de 08_non-res 2 336 1.0 0.0 -de 09_hydro_pump 2 336 1.0 0.0 +de 01_solar 2 330 0.0 1.0 +de 02_wind_on 2 330 0.0 1.0 +de 03_wind_off 2 330 0.0 1.0 +de 04_res 2 330 0.0 1.0 +de 05_nuclear 2 330 0.0 1.0 +de 06_coal 2 330 0.0 1.0 +de 07_gas 2 330 0.0 1.0 +de 08_non-res 2 330 0.0 1.0 +de 09_hydro_pump 2 330 0.0 1.0 +de 01_solar 2 331 0.0 1.0 +de 02_wind_on 2 331 0.0 1.0 +de 03_wind_off 2 331 0.0 1.0 +de 04_res 2 331 0.0 1.0 +de 05_nuclear 2 331 0.0 1.0 +de 06_coal 2 331 0.0 1.0 +de 07_gas 2 331 0.0 1.0 +de 08_non-res 2 331 0.0 1.0 +de 09_hydro_pump 2 331 0.0 1.0 +de 01_solar 2 332 0.0 1.0 +de 02_wind_on 2 332 0.0 1.0 +de 03_wind_off 2 332 0.0 1.0 +de 04_res 2 332 0.0 1.0 +de 05_nuclear 2 332 0.0 1.0 +de 06_coal 2 332 0.0 1.0 +de 07_gas 2 332 0.0 1.0 +de 08_non-res 2 332 0.0 1.0 +de 09_hydro_pump 2 332 0.0 1.0 +de 01_solar 2 333 0.0 1.0 +de 02_wind_on 2 333 0.0 1.0 +de 03_wind_off 2 333 0.0 1.0 +de 04_res 2 333 0.0 1.0 +de 05_nuclear 2 333 0.0 1.0 +de 06_coal 2 333 0.0 1.0 +de 07_gas 2 333 0.0 1.0 +de 08_non-res 2 333 0.0 1.0 +de 09_hydro_pump 2 333 0.0 1.0 +de 01_solar 2 334 0.0 1.0 +de 02_wind_on 2 334 0.0 1.0 +de 03_wind_off 2 334 0.0 1.0 +de 04_res 2 334 0.0 1.0 +de 05_nuclear 2 334 0.0 1.0 +de 06_coal 2 334 0.0 1.0 +de 07_gas 2 334 0.0 1.0 +de 08_non-res 2 334 0.0 1.0 +de 09_hydro_pump 2 334 0.0 1.0 +de 01_solar 2 335 0.0 1.0 +de 02_wind_on 2 335 0.0 1.0 +de 03_wind_off 2 335 0.0 1.0 +de 04_res 2 335 0.0 1.0 +de 05_nuclear 2 335 0.0 1.0 +de 06_coal 2 335 0.0 1.0 +de 07_gas 2 335 0.0 1.0 +de 08_non-res 2 335 0.0 1.0 +de 09_hydro_pump 2 335 0.0 1.0 +de 01_solar 2 336 0.0 1.0 +de 02_wind_on 2 336 0.0 1.0 +de 03_wind_off 2 336 0.0 1.0 +de 04_res 2 336 0.0 1.0 +de 05_nuclear 2 336 0.0 1.0 +de 06_coal 2 336 0.0 1.0 +de 07_gas 2 336 0.0 1.0 +de 08_non-res 2 336 0.0 1.0 +de 09_hydro_pump 2 336 0.0 1.0 es 01_solar 2 1 0.0 0.0 es 02_wind_on 2 1 0.0 0.0 es 03_wind_off 2 1 0.0 0.0 @@ -15128,7 +15128,7 @@ es 06_coal 2 1 0.0 0.0 es 07_gas 2 1 0.0 0.0 es 08_non-res 2 1 0.0 0.0 es 09_hydro_pump 2 1 0.0 0.0 -es 01_solar 2 2 1.0 0.0 +es 01_solar 2 2 0.0 1.0 es 02_wind_on 2 2 0.0 0.0 es 03_wind_off 2 2 0.0 0.0 es 04_res 2 2 0.0 0.0 @@ -15137,7 +15137,7 @@ es 06_coal 2 2 0.0 0.0 es 07_gas 2 2 0.0 0.0 es 08_non-res 2 2 0.0 0.0 es 09_hydro_pump 2 2 0.0 0.0 -es 01_solar 2 3 1.0 0.0 +es 01_solar 2 3 0.0 1.0 es 02_wind_on 2 3 0.0 0.0 es 03_wind_off 2 3 0.0 0.0 es 04_res 2 3 0.0 0.0 @@ -15146,7 +15146,7 @@ es 06_coal 2 3 0.0 0.0 es 07_gas 2 3 0.0 0.0 es 08_non-res 2 3 0.0 0.0 es 09_hydro_pump 2 3 0.0 0.0 -es 01_solar 2 4 1.0 0.0 +es 01_solar 2 4 0.0 1.0 es 02_wind_on 2 4 0.0 0.0 es 03_wind_off 2 4 0.0 0.0 es 04_res 2 4 0.0 0.0 @@ -15155,7 +15155,7 @@ es 06_coal 2 4 0.0 0.0 es 07_gas 2 4 0.0 0.0 es 08_non-res 2 4 0.0 0.0 es 09_hydro_pump 2 4 0.0 0.0 -es 01_solar 2 5 1.0 0.0 +es 01_solar 2 5 0.0 1.0 es 02_wind_on 2 5 0.0 0.0 es 03_wind_off 2 5 0.0 0.0 es 04_res 2 5 0.0 0.0 @@ -15164,7 +15164,7 @@ es 06_coal 2 5 0.0 0.0 es 07_gas 2 5 0.0 0.0 es 08_non-res 2 5 0.0 0.0 es 09_hydro_pump 2 5 0.0 0.0 -es 01_solar 2 6 1.0 0.0 +es 01_solar 2 6 0.0 1.0 es 02_wind_on 2 6 0.0 0.0 es 03_wind_off 2 6 0.0 0.0 es 04_res 2 6 0.0 0.0 @@ -15173,7 +15173,7 @@ es 06_coal 2 6 0.0 0.0 es 07_gas 2 6 0.0 0.0 es 08_non-res 2 6 0.0 0.0 es 09_hydro_pump 2 6 0.0 0.0 -es 01_solar 2 7 1.0 0.0 +es 01_solar 2 7 0.0 1.0 es 02_wind_on 2 7 0.0 0.0 es 03_wind_off 2 7 0.0 0.0 es 04_res 2 7 0.0 0.0 @@ -15182,7 +15182,7 @@ es 06_coal 2 7 0.0 0.0 es 07_gas 2 7 0.0 0.0 es 08_non-res 2 7 0.0 0.0 es 09_hydro_pump 2 7 0.0 0.0 -es 01_solar 2 8 1.0 0.0 +es 01_solar 2 8 0.0 1.0 es 02_wind_on 2 8 0.0 0.0 es 03_wind_off 2 8 0.0 0.0 es 04_res 2 8 0.0 0.0 @@ -15191,7 +15191,7 @@ es 06_coal 2 8 0.0 0.0 es 07_gas 2 8 0.0 0.0 es 08_non-res 2 8 0.0 0.0 es 09_hydro_pump 2 8 0.0 0.0 -es 01_solar 2 9 1.0 0.0 +es 01_solar 2 9 0.0 1.0 es 02_wind_on 2 9 0.0 0.0 es 03_wind_off 2 9 0.0 0.0 es 04_res 2 9 0.0 0.0 @@ -15200,7 +15200,7 @@ es 06_coal 2 9 0.0 0.0 es 07_gas 2 9 0.0 0.0 es 08_non-res 2 9 0.0 0.0 es 09_hydro_pump 2 9 0.0 0.0 -es 01_solar 2 10 1.0 0.0 +es 01_solar 2 10 0.0 1.0 es 02_wind_on 2 10 0.0 0.0 es 03_wind_off 2 10 0.0 0.0 es 04_res 2 10 0.0 0.0 @@ -15209,7 +15209,7 @@ es 06_coal 2 10 0.0 0.0 es 07_gas 2 10 0.0 0.0 es 08_non-res 2 10 0.0 0.0 es 09_hydro_pump 2 10 0.0 0.0 -es 01_solar 2 11 1.0 0.0 +es 01_solar 2 11 0.0 1.0 es 02_wind_on 2 11 0.0 0.0 es 03_wind_off 2 11 0.0 0.0 es 04_res 2 11 0.0 0.0 @@ -15218,7 +15218,7 @@ es 06_coal 2 11 0.0 0.0 es 07_gas 2 11 0.0 0.0 es 08_non-res 2 11 0.0 0.0 es 09_hydro_pump 2 11 0.0 0.0 -es 01_solar 2 12 1.0 0.0 +es 01_solar 2 12 0.0 1.0 es 02_wind_on 2 12 0.0 0.0 es 03_wind_off 2 12 0.0 0.0 es 04_res 2 12 0.0 0.0 @@ -15227,7 +15227,7 @@ es 06_coal 2 12 0.0 0.0 es 07_gas 2 12 0.0 0.0 es 08_non-res 2 12 0.0 0.0 es 09_hydro_pump 2 12 0.0 0.0 -es 01_solar 2 13 1.0 0.0 +es 01_solar 2 13 0.0 1.0 es 02_wind_on 2 13 0.0 0.0 es 03_wind_off 2 13 0.0 0.0 es 04_res 2 13 0.0 0.0 @@ -15236,7 +15236,7 @@ es 06_coal 2 13 0.0 0.0 es 07_gas 2 13 0.0 0.0 es 08_non-res 2 13 0.0 0.0 es 09_hydro_pump 2 13 0.0 0.0 -es 01_solar 2 14 1.0 0.0 +es 01_solar 2 14 0.0 1.0 es 02_wind_on 2 14 0.0 0.0 es 03_wind_off 2 14 0.0 0.0 es 04_res 2 14 0.0 0.0 @@ -15245,7 +15245,7 @@ es 06_coal 2 14 0.0 0.0 es 07_gas 2 14 0.0 0.0 es 08_non-res 2 14 0.0 0.0 es 09_hydro_pump 2 14 0.0 0.0 -es 01_solar 2 15 1.0 0.0 +es 01_solar 2 15 0.0 1.0 es 02_wind_on 2 15 0.0 0.0 es 03_wind_off 2 15 0.0 0.0 es 04_res 2 15 0.0 0.0 @@ -15254,7 +15254,7 @@ es 06_coal 2 15 0.0 0.0 es 07_gas 2 15 0.0 0.0 es 08_non-res 2 15 0.0 0.0 es 09_hydro_pump 2 15 0.0 0.0 -es 01_solar 2 16 1.0 0.0 +es 01_solar 2 16 0.0 1.0 es 02_wind_on 2 16 0.0 0.0 es 03_wind_off 2 16 0.0 0.0 es 04_res 2 16 0.0 0.0 @@ -15263,7 +15263,7 @@ es 06_coal 2 16 0.0 0.0 es 07_gas 2 16 0.0 0.0 es 08_non-res 2 16 0.0 0.0 es 09_hydro_pump 2 16 0.0 0.0 -es 01_solar 2 17 1.0 0.0 +es 01_solar 2 17 0.0 1.0 es 02_wind_on 2 17 0.0 0.0 es 03_wind_off 2 17 0.0 0.0 es 04_res 2 17 0.0 0.0 @@ -15272,7 +15272,7 @@ es 06_coal 2 17 0.0 0.0 es 07_gas 2 17 0.0 0.0 es 08_non-res 2 17 0.0 0.0 es 09_hydro_pump 2 17 0.0 0.0 -es 01_solar 2 18 1.0 0.0 +es 01_solar 2 18 0.0 1.0 es 02_wind_on 2 18 0.0 0.0 es 03_wind_off 2 18 0.0 0.0 es 04_res 2 18 0.0 0.0 @@ -15281,7 +15281,7 @@ es 06_coal 2 18 0.0 0.0 es 07_gas 2 18 0.0 0.0 es 08_non-res 2 18 0.0 0.0 es 09_hydro_pump 2 18 0.0 0.0 -es 01_solar 2 19 1.0 0.0 +es 01_solar 2 19 0.0 1.0 es 02_wind_on 2 19 0.0 0.0 es 03_wind_off 2 19 0.0 0.0 es 04_res 2 19 0.0 0.0 @@ -15290,7 +15290,7 @@ es 06_coal 2 19 0.0 0.0 es 07_gas 2 19 0.0 0.0 es 08_non-res 2 19 0.0 0.0 es 09_hydro_pump 2 19 0.0 0.0 -es 01_solar 2 20 1.0 0.0 +es 01_solar 2 20 0.0 1.0 es 02_wind_on 2 20 0.0 0.0 es 03_wind_off 2 20 0.0 0.0 es 04_res 2 20 0.0 0.0 @@ -15299,7 +15299,7 @@ es 06_coal 2 20 0.0 0.0 es 07_gas 2 20 0.0 0.0 es 08_non-res 2 20 0.0 0.0 es 09_hydro_pump 2 20 0.0 0.0 -es 01_solar 2 21 1.0 0.0 +es 01_solar 2 21 0.0 1.0 es 02_wind_on 2 21 0.0 0.0 es 03_wind_off 2 21 0.0 0.0 es 04_res 2 21 0.0 0.0 @@ -15308,8 +15308,8 @@ es 06_coal 2 21 0.0 0.0 es 07_gas 2 21 0.0 0.0 es 08_non-res 2 21 0.0 0.0 es 09_hydro_pump 2 21 0.0 0.0 -es 01_solar 2 22 1.0 0.0 -es 02_wind_on 2 22 1.0 0.0 +es 01_solar 2 22 0.0 1.0 +es 02_wind_on 2 22 0.0 1.0 es 03_wind_off 2 22 0.0 0.0 es 04_res 2 22 0.0 0.0 es 05_nuclear 2 22 0.0 0.0 @@ -15317,8 +15317,8 @@ es 06_coal 2 22 0.0 0.0 es 07_gas 2 22 0.0 0.0 es 08_non-res 2 22 0.0 0.0 es 09_hydro_pump 2 22 0.0 0.0 -es 01_solar 2 23 1.0 0.0 -es 02_wind_on 2 23 1.0 0.0 +es 01_solar 2 23 0.0 1.0 +es 02_wind_on 2 23 0.0 1.0 es 03_wind_off 2 23 0.0 0.0 es 04_res 2 23 0.0 0.0 es 05_nuclear 2 23 0.0 0.0 @@ -15326,8 +15326,8 @@ es 06_coal 2 23 0.0 0.0 es 07_gas 2 23 0.0 0.0 es 08_non-res 2 23 0.0 0.0 es 09_hydro_pump 2 23 0.0 0.0 -es 01_solar 2 24 1.0 0.0 -es 02_wind_on 2 24 1.0 0.0 +es 01_solar 2 24 0.0 1.0 +es 02_wind_on 2 24 0.0 1.0 es 03_wind_off 2 24 0.0 0.0 es 04_res 2 24 0.0 0.0 es 05_nuclear 2 24 0.0 0.0 @@ -15335,8 +15335,8 @@ es 06_coal 2 24 0.0 0.0 es 07_gas 2 24 0.0 0.0 es 08_non-res 2 24 0.0 0.0 es 09_hydro_pump 2 24 0.0 0.0 -es 01_solar 2 25 1.0 0.0 -es 02_wind_on 2 25 1.0 0.0 +es 01_solar 2 25 0.0 1.0 +es 02_wind_on 2 25 0.0 1.0 es 03_wind_off 2 25 0.0 0.0 es 04_res 2 25 0.0 0.0 es 05_nuclear 2 25 0.0 0.0 @@ -15344,8 +15344,8 @@ es 06_coal 2 25 0.0 0.0 es 07_gas 2 25 0.0 0.0 es 08_non-res 2 25 0.0 0.0 es 09_hydro_pump 2 25 0.0 0.0 -es 01_solar 2 26 1.0 0.0 -es 02_wind_on 2 26 1.0 0.0 +es 01_solar 2 26 0.0 1.0 +es 02_wind_on 2 26 0.0 1.0 es 03_wind_off 2 26 0.0 0.0 es 04_res 2 26 0.0 0.0 es 05_nuclear 2 26 0.0 0.0 @@ -15353,8 +15353,8 @@ es 06_coal 2 26 0.0 0.0 es 07_gas 2 26 0.0 0.0 es 08_non-res 2 26 0.0 0.0 es 09_hydro_pump 2 26 0.0 0.0 -es 01_solar 2 27 1.0 0.0 -es 02_wind_on 2 27 1.0 0.0 +es 01_solar 2 27 0.0 1.0 +es 02_wind_on 2 27 0.0 1.0 es 03_wind_off 2 27 0.0 0.0 es 04_res 2 27 0.0 0.0 es 05_nuclear 2 27 0.0 0.0 @@ -15362,8 +15362,8 @@ es 06_coal 2 27 0.0 0.0 es 07_gas 2 27 0.0 0.0 es 08_non-res 2 27 0.0 0.0 es 09_hydro_pump 2 27 0.0 0.0 -es 01_solar 2 28 1.0 0.0 -es 02_wind_on 2 28 1.0 0.0 +es 01_solar 2 28 0.0 1.0 +es 02_wind_on 2 28 0.0 1.0 es 03_wind_off 2 28 0.0 0.0 es 04_res 2 28 0.0 0.0 es 05_nuclear 2 28 0.0 0.0 @@ -15371,8 +15371,8 @@ es 06_coal 2 28 0.0 0.0 es 07_gas 2 28 0.0 0.0 es 08_non-res 2 28 0.0 0.0 es 09_hydro_pump 2 28 0.0 0.0 -es 01_solar 2 29 1.0 0.0 -es 02_wind_on 2 29 1.0 0.0 +es 01_solar 2 29 0.0 1.0 +es 02_wind_on 2 29 0.0 1.0 es 03_wind_off 2 29 0.0 0.0 es 04_res 2 29 0.0 0.0 es 05_nuclear 2 29 0.0 0.0 @@ -15380,8 +15380,8 @@ es 06_coal 2 29 0.0 0.0 es 07_gas 2 29 0.0 0.0 es 08_non-res 2 29 0.0 0.0 es 09_hydro_pump 2 29 0.0 0.0 -es 01_solar 2 30 1.0 0.0 -es 02_wind_on 2 30 1.0 0.0 +es 01_solar 2 30 0.0 1.0 +es 02_wind_on 2 30 0.0 1.0 es 03_wind_off 2 30 0.0 0.0 es 04_res 2 30 0.0 0.0 es 05_nuclear 2 30 0.0 0.0 @@ -15389,8 +15389,8 @@ es 06_coal 2 30 0.0 0.0 es 07_gas 2 30 0.0 0.0 es 08_non-res 2 30 0.0 0.0 es 09_hydro_pump 2 30 0.0 0.0 -es 01_solar 2 31 1.0 0.0 -es 02_wind_on 2 31 1.0 0.0 +es 01_solar 2 31 0.0 1.0 +es 02_wind_on 2 31 0.0 1.0 es 03_wind_off 2 31 0.0 0.0 es 04_res 2 31 0.0 0.0 es 05_nuclear 2 31 0.0 0.0 @@ -15398,8 +15398,8 @@ es 06_coal 2 31 0.0 0.0 es 07_gas 2 31 0.0 0.0 es 08_non-res 2 31 0.0 0.0 es 09_hydro_pump 2 31 0.0 0.0 -es 01_solar 2 32 1.0 0.0 -es 02_wind_on 2 32 1.0 0.0 +es 01_solar 2 32 0.0 1.0 +es 02_wind_on 2 32 0.0 1.0 es 03_wind_off 2 32 0.0 0.0 es 04_res 2 32 0.0 0.0 es 05_nuclear 2 32 0.0 0.0 @@ -15407,8 +15407,8 @@ es 06_coal 2 32 0.0 0.0 es 07_gas 2 32 0.0 0.0 es 08_non-res 2 32 0.0 0.0 es 09_hydro_pump 2 32 0.0 0.0 -es 01_solar 2 33 1.0 0.0 -es 02_wind_on 2 33 1.0 0.0 +es 01_solar 2 33 0.0 1.0 +es 02_wind_on 2 33 0.0 1.0 es 03_wind_off 2 33 0.0 0.0 es 04_res 2 33 0.0 0.0 es 05_nuclear 2 33 0.0 0.0 @@ -15416,8 +15416,8 @@ es 06_coal 2 33 0.0 0.0 es 07_gas 2 33 0.0 0.0 es 08_non-res 2 33 0.0 0.0 es 09_hydro_pump 2 33 0.0 0.0 -es 01_solar 2 34 1.0 0.0 -es 02_wind_on 2 34 1.0 0.0 +es 01_solar 2 34 0.0 1.0 +es 02_wind_on 2 34 0.0 1.0 es 03_wind_off 2 34 0.0 0.0 es 04_res 2 34 0.0 0.0 es 05_nuclear 2 34 0.0 0.0 @@ -15425,8 +15425,8 @@ es 06_coal 2 34 0.0 0.0 es 07_gas 2 34 0.0 0.0 es 08_non-res 2 34 0.0 0.0 es 09_hydro_pump 2 34 0.0 0.0 -es 01_solar 2 35 1.0 0.0 -es 02_wind_on 2 35 1.0 0.0 +es 01_solar 2 35 0.0 1.0 +es 02_wind_on 2 35 0.0 1.0 es 03_wind_off 2 35 0.0 0.0 es 04_res 2 35 0.0 0.0 es 05_nuclear 2 35 0.0 0.0 @@ -15434,8 +15434,8 @@ es 06_coal 2 35 0.0 0.0 es 07_gas 2 35 0.0 0.0 es 08_non-res 2 35 0.0 0.0 es 09_hydro_pump 2 35 0.0 0.0 -es 01_solar 2 36 1.0 0.0 -es 02_wind_on 2 36 1.0 0.0 +es 01_solar 2 36 0.0 1.0 +es 02_wind_on 2 36 0.0 1.0 es 03_wind_off 2 36 0.0 0.0 es 04_res 2 36 0.0 0.0 es 05_nuclear 2 36 0.0 0.0 @@ -15443,8 +15443,8 @@ es 06_coal 2 36 0.0 0.0 es 07_gas 2 36 0.0 0.0 es 08_non-res 2 36 0.0 0.0 es 09_hydro_pump 2 36 0.0 0.0 -es 01_solar 2 37 1.0 0.0 -es 02_wind_on 2 37 1.0 0.0 +es 01_solar 2 37 0.0 1.0 +es 02_wind_on 2 37 0.0 1.0 es 03_wind_off 2 37 0.0 0.0 es 04_res 2 37 0.0 0.0 es 05_nuclear 2 37 0.0 0.0 @@ -15452,8 +15452,8 @@ es 06_coal 2 37 0.0 0.0 es 07_gas 2 37 0.0 0.0 es 08_non-res 2 37 0.0 0.0 es 09_hydro_pump 2 37 0.0 0.0 -es 01_solar 2 38 1.0 0.0 -es 02_wind_on 2 38 1.0 0.0 +es 01_solar 2 38 0.0 1.0 +es 02_wind_on 2 38 0.0 1.0 es 03_wind_off 2 38 0.0 0.0 es 04_res 2 38 0.0 0.0 es 05_nuclear 2 38 0.0 0.0 @@ -15461,8 +15461,8 @@ es 06_coal 2 38 0.0 0.0 es 07_gas 2 38 0.0 0.0 es 08_non-res 2 38 0.0 0.0 es 09_hydro_pump 2 38 0.0 0.0 -es 01_solar 2 39 1.0 0.0 -es 02_wind_on 2 39 1.0 0.0 +es 01_solar 2 39 0.0 1.0 +es 02_wind_on 2 39 0.0 1.0 es 03_wind_off 2 39 0.0 0.0 es 04_res 2 39 0.0 0.0 es 05_nuclear 2 39 0.0 0.0 @@ -15470,8 +15470,8 @@ es 06_coal 2 39 0.0 0.0 es 07_gas 2 39 0.0 0.0 es 08_non-res 2 39 0.0 0.0 es 09_hydro_pump 2 39 0.0 0.0 -es 01_solar 2 40 1.0 0.0 -es 02_wind_on 2 40 1.0 0.0 +es 01_solar 2 40 0.0 1.0 +es 02_wind_on 2 40 0.0 1.0 es 03_wind_off 2 40 0.0 0.0 es 04_res 2 40 0.0 0.0 es 05_nuclear 2 40 0.0 0.0 @@ -15479,8 +15479,8 @@ es 06_coal 2 40 0.0 0.0 es 07_gas 2 40 0.0 0.0 es 08_non-res 2 40 0.0 0.0 es 09_hydro_pump 2 40 0.0 0.0 -es 01_solar 2 41 1.0 0.0 -es 02_wind_on 2 41 1.0 0.0 +es 01_solar 2 41 0.0 1.0 +es 02_wind_on 2 41 0.0 1.0 es 03_wind_off 2 41 0.0 0.0 es 04_res 2 41 0.0 0.0 es 05_nuclear 2 41 0.0 0.0 @@ -15488,1149 +15488,1149 @@ es 06_coal 2 41 0.0 0.0 es 07_gas 2 41 0.0 0.0 es 08_non-res 2 41 0.0 0.0 es 09_hydro_pump 2 41 0.0 0.0 -es 01_solar 2 42 1.0 0.0 -es 02_wind_on 2 42 1.0 0.0 -es 03_wind_off 2 42 1.0 0.0 +es 01_solar 2 42 0.0 1.0 +es 02_wind_on 2 42 0.0 1.0 +es 03_wind_off 2 42 0.0 1.0 es 04_res 2 42 0.0 0.0 es 05_nuclear 2 42 0.0 0.0 es 06_coal 2 42 0.0 0.0 es 07_gas 2 42 0.0 0.0 es 08_non-res 2 42 0.0 0.0 es 09_hydro_pump 2 42 0.0 0.0 -es 01_solar 2 43 1.0 0.0 -es 02_wind_on 2 43 1.0 0.0 -es 03_wind_off 2 43 1.0 0.0 +es 01_solar 2 43 0.0 1.0 +es 02_wind_on 2 43 0.0 1.0 +es 03_wind_off 2 43 0.0 1.0 es 04_res 2 43 0.0 0.0 es 05_nuclear 2 43 0.0 0.0 es 06_coal 2 43 0.0 0.0 es 07_gas 2 43 0.0 0.0 es 08_non-res 2 43 0.0 0.0 es 09_hydro_pump 2 43 0.0 0.0 -es 01_solar 2 44 1.0 0.0 -es 02_wind_on 2 44 1.0 0.0 -es 03_wind_off 2 44 1.0 0.0 +es 01_solar 2 44 0.0 1.0 +es 02_wind_on 2 44 0.0 1.0 +es 03_wind_off 2 44 0.0 1.0 es 04_res 2 44 0.0 0.0 es 05_nuclear 2 44 0.0 0.0 es 06_coal 2 44 0.0 0.0 es 07_gas 2 44 0.0 0.0 es 08_non-res 2 44 0.0 0.0 es 09_hydro_pump 2 44 0.0 0.0 -es 01_solar 2 45 1.0 0.0 -es 02_wind_on 2 45 1.0 0.0 -es 03_wind_off 2 45 1.0 0.0 +es 01_solar 2 45 0.0 1.0 +es 02_wind_on 2 45 0.0 1.0 +es 03_wind_off 2 45 0.0 1.0 es 04_res 2 45 0.0 0.0 es 05_nuclear 2 45 0.0 0.0 es 06_coal 2 45 0.0 0.0 es 07_gas 2 45 0.0 0.0 es 08_non-res 2 45 0.0 0.0 es 09_hydro_pump 2 45 0.0 0.0 -es 01_solar 2 46 1.0 0.0 -es 02_wind_on 2 46 1.0 0.0 -es 03_wind_off 2 46 1.0 0.0 +es 01_solar 2 46 0.0 1.0 +es 02_wind_on 2 46 0.0 1.0 +es 03_wind_off 2 46 0.0 1.0 es 04_res 2 46 0.0 0.0 es 05_nuclear 2 46 0.0 0.0 es 06_coal 2 46 0.0 0.0 es 07_gas 2 46 0.0 0.0 es 08_non-res 2 46 0.0 0.0 es 09_hydro_pump 2 46 0.0 0.0 -es 01_solar 2 47 1.0 0.0 -es 02_wind_on 2 47 1.0 0.0 -es 03_wind_off 2 47 1.0 0.0 +es 01_solar 2 47 0.0 1.0 +es 02_wind_on 2 47 0.0 1.0 +es 03_wind_off 2 47 0.0 1.0 es 04_res 2 47 0.0 0.0 es 05_nuclear 2 47 0.0 0.0 es 06_coal 2 47 0.0 0.0 es 07_gas 2 47 0.0 0.0 es 08_non-res 2 47 0.0 0.0 es 09_hydro_pump 2 47 0.0 0.0 -es 01_solar 2 48 1.0 0.0 -es 02_wind_on 2 48 1.0 0.0 -es 03_wind_off 2 48 1.0 0.0 +es 01_solar 2 48 0.0 1.0 +es 02_wind_on 2 48 0.0 1.0 +es 03_wind_off 2 48 0.0 1.0 es 04_res 2 48 0.0 0.0 es 05_nuclear 2 48 0.0 0.0 es 06_coal 2 48 0.0 0.0 es 07_gas 2 48 0.0 0.0 es 08_non-res 2 48 0.0 0.0 es 09_hydro_pump 2 48 0.0 0.0 -es 01_solar 2 49 1.0 0.0 -es 02_wind_on 2 49 1.0 0.0 -es 03_wind_off 2 49 1.0 0.0 +es 01_solar 2 49 0.0 1.0 +es 02_wind_on 2 49 0.0 1.0 +es 03_wind_off 2 49 0.0 1.0 es 04_res 2 49 0.0 0.0 es 05_nuclear 2 49 0.0 0.0 es 06_coal 2 49 0.0 0.0 es 07_gas 2 49 0.0 0.0 es 08_non-res 2 49 0.0 0.0 es 09_hydro_pump 2 49 0.0 0.0 -es 01_solar 2 50 1.0 0.0 -es 02_wind_on 2 50 1.0 0.0 -es 03_wind_off 2 50 1.0 0.0 +es 01_solar 2 50 0.0 1.0 +es 02_wind_on 2 50 0.0 1.0 +es 03_wind_off 2 50 0.0 1.0 es 04_res 2 50 0.0 0.0 es 05_nuclear 2 50 0.0 0.0 es 06_coal 2 50 0.0 0.0 es 07_gas 2 50 0.0 0.0 es 08_non-res 2 50 0.0 0.0 es 09_hydro_pump 2 50 0.0 0.0 -es 01_solar 2 51 1.0 0.0 -es 02_wind_on 2 51 1.0 0.0 -es 03_wind_off 2 51 1.0 0.0 +es 01_solar 2 51 0.0 1.0 +es 02_wind_on 2 51 0.0 1.0 +es 03_wind_off 2 51 0.0 1.0 es 04_res 2 51 0.0 0.0 es 05_nuclear 2 51 0.0 0.0 es 06_coal 2 51 0.0 0.0 es 07_gas 2 51 0.0 0.0 es 08_non-res 2 51 0.0 0.0 es 09_hydro_pump 2 51 0.0 0.0 -es 01_solar 2 52 1.0 0.0 -es 02_wind_on 2 52 1.0 0.0 -es 03_wind_off 2 52 1.0 0.0 +es 01_solar 2 52 0.0 1.0 +es 02_wind_on 2 52 0.0 1.0 +es 03_wind_off 2 52 0.0 1.0 es 04_res 2 52 0.0 0.0 es 05_nuclear 2 52 0.0 0.0 es 06_coal 2 52 0.0 0.0 es 07_gas 2 52 0.0 0.0 es 08_non-res 2 52 0.0 0.0 es 09_hydro_pump 2 52 0.0 0.0 -es 01_solar 2 53 1.0 0.0 -es 02_wind_on 2 53 1.0 0.0 -es 03_wind_off 2 53 1.0 0.0 +es 01_solar 2 53 0.0 1.0 +es 02_wind_on 2 53 0.0 1.0 +es 03_wind_off 2 53 0.0 1.0 es 04_res 2 53 0.0 0.0 es 05_nuclear 2 53 0.0 0.0 es 06_coal 2 53 0.0 0.0 es 07_gas 2 53 0.0 0.0 es 08_non-res 2 53 0.0 0.0 es 09_hydro_pump 2 53 0.0 0.0 -es 01_solar 2 54 1.0 0.0 -es 02_wind_on 2 54 1.0 0.0 -es 03_wind_off 2 54 1.0 0.0 +es 01_solar 2 54 0.0 1.0 +es 02_wind_on 2 54 0.0 1.0 +es 03_wind_off 2 54 0.0 1.0 es 04_res 2 54 0.0 0.0 es 05_nuclear 2 54 0.0 0.0 es 06_coal 2 54 0.0 0.0 es 07_gas 2 54 0.0 0.0 es 08_non-res 2 54 0.0 0.0 es 09_hydro_pump 2 54 0.0 0.0 -es 01_solar 2 55 1.0 0.0 -es 02_wind_on 2 55 1.0 0.0 -es 03_wind_off 2 55 1.0 0.0 +es 01_solar 2 55 0.0 1.0 +es 02_wind_on 2 55 0.0 1.0 +es 03_wind_off 2 55 0.0 1.0 es 04_res 2 55 0.0 0.0 es 05_nuclear 2 55 0.0 0.0 es 06_coal 2 55 0.0 0.0 es 07_gas 2 55 0.0 0.0 es 08_non-res 2 55 0.0 0.0 es 09_hydro_pump 2 55 0.0 0.0 -es 01_solar 2 56 1.0 0.0 -es 02_wind_on 2 56 1.0 0.0 -es 03_wind_off 2 56 1.0 0.0 +es 01_solar 2 56 0.0 1.0 +es 02_wind_on 2 56 0.0 1.0 +es 03_wind_off 2 56 0.0 1.0 es 04_res 2 56 0.0 0.0 es 05_nuclear 2 56 0.0 0.0 es 06_coal 2 56 0.0 0.0 es 07_gas 2 56 0.0 0.0 es 08_non-res 2 56 0.0 0.0 es 09_hydro_pump 2 56 0.0 0.0 -es 01_solar 2 57 1.0 0.0 -es 02_wind_on 2 57 1.0 0.0 -es 03_wind_off 2 57 1.0 0.0 +es 01_solar 2 57 0.0 1.0 +es 02_wind_on 2 57 0.0 1.0 +es 03_wind_off 2 57 0.0 1.0 es 04_res 2 57 0.0 0.0 es 05_nuclear 2 57 0.0 0.0 es 06_coal 2 57 0.0 0.0 es 07_gas 2 57 0.0 0.0 es 08_non-res 2 57 0.0 0.0 es 09_hydro_pump 2 57 0.0 0.0 -es 01_solar 2 58 1.0 0.0 -es 02_wind_on 2 58 1.0 0.0 -es 03_wind_off 2 58 1.0 0.0 +es 01_solar 2 58 0.0 1.0 +es 02_wind_on 2 58 0.0 1.0 +es 03_wind_off 2 58 0.0 1.0 es 04_res 2 58 0.0 0.0 es 05_nuclear 2 58 0.0 0.0 es 06_coal 2 58 0.0 0.0 es 07_gas 2 58 0.0 0.0 es 08_non-res 2 58 0.0 0.0 es 09_hydro_pump 2 58 0.0 0.0 -es 01_solar 2 59 1.0 0.0 -es 02_wind_on 2 59 1.0 0.0 -es 03_wind_off 2 59 1.0 0.0 +es 01_solar 2 59 0.0 1.0 +es 02_wind_on 2 59 0.0 1.0 +es 03_wind_off 2 59 0.0 1.0 es 04_res 2 59 0.0 0.0 es 05_nuclear 2 59 0.0 0.0 es 06_coal 2 59 0.0 0.0 es 07_gas 2 59 0.0 0.0 es 08_non-res 2 59 0.0 0.0 es 09_hydro_pump 2 59 0.0 0.0 -es 01_solar 2 60 1.0 0.0 -es 02_wind_on 2 60 1.0 0.0 -es 03_wind_off 2 60 1.0 0.0 +es 01_solar 2 60 0.0 1.0 +es 02_wind_on 2 60 0.0 1.0 +es 03_wind_off 2 60 0.0 1.0 es 04_res 2 60 0.0 0.0 es 05_nuclear 2 60 0.0 0.0 es 06_coal 2 60 0.0 0.0 es 07_gas 2 60 0.0 0.0 es 08_non-res 2 60 0.0 0.0 es 09_hydro_pump 2 60 0.0 0.0 -es 01_solar 2 61 1.0 0.0 -es 02_wind_on 2 61 1.0 0.0 -es 03_wind_off 2 61 1.0 0.0 +es 01_solar 2 61 0.0 1.0 +es 02_wind_on 2 61 0.0 1.0 +es 03_wind_off 2 61 0.0 1.0 es 04_res 2 61 0.0 0.0 es 05_nuclear 2 61 0.0 0.0 es 06_coal 2 61 0.0 0.0 es 07_gas 2 61 0.0 0.0 es 08_non-res 2 61 0.0 0.0 es 09_hydro_pump 2 61 0.0 0.0 -es 01_solar 2 62 1.0 0.0 -es 02_wind_on 2 62 1.0 0.0 -es 03_wind_off 2 62 1.0 0.0 -es 04_res 2 62 1.0 0.0 +es 01_solar 2 62 0.0 1.0 +es 02_wind_on 2 62 0.0 1.0 +es 03_wind_off 2 62 0.0 1.0 +es 04_res 2 62 0.0 1.0 es 05_nuclear 2 62 0.0 0.0 es 06_coal 2 62 0.0 0.0 es 07_gas 2 62 0.0 0.0 es 08_non-res 2 62 0.0 0.0 es 09_hydro_pump 2 62 0.0 0.0 -es 01_solar 2 63 1.0 0.0 -es 02_wind_on 2 63 1.0 0.0 -es 03_wind_off 2 63 1.0 0.0 -es 04_res 2 63 1.0 0.0 +es 01_solar 2 63 0.0 1.0 +es 02_wind_on 2 63 0.0 1.0 +es 03_wind_off 2 63 0.0 1.0 +es 04_res 2 63 0.0 1.0 es 05_nuclear 2 63 0.0 0.0 es 06_coal 2 63 0.0 0.0 es 07_gas 2 63 0.0 0.0 es 08_non-res 2 63 0.0 0.0 es 09_hydro_pump 2 63 0.0 0.0 -es 01_solar 2 64 1.0 0.0 -es 02_wind_on 2 64 1.0 0.0 -es 03_wind_off 2 64 1.0 0.0 -es 04_res 2 64 1.0 0.0 +es 01_solar 2 64 0.0 1.0 +es 02_wind_on 2 64 0.0 1.0 +es 03_wind_off 2 64 0.0 1.0 +es 04_res 2 64 0.0 1.0 es 05_nuclear 2 64 0.0 0.0 es 06_coal 2 64 0.0 0.0 es 07_gas 2 64 0.0 0.0 es 08_non-res 2 64 0.0 0.0 es 09_hydro_pump 2 64 0.0 0.0 -es 01_solar 2 65 1.0 0.0 -es 02_wind_on 2 65 1.0 0.0 -es 03_wind_off 2 65 1.0 0.0 -es 04_res 2 65 1.0 0.0 +es 01_solar 2 65 0.0 1.0 +es 02_wind_on 2 65 0.0 1.0 +es 03_wind_off 2 65 0.0 1.0 +es 04_res 2 65 0.0 1.0 es 05_nuclear 2 65 0.0 0.0 es 06_coal 2 65 0.0 0.0 es 07_gas 2 65 0.0 0.0 es 08_non-res 2 65 0.0 0.0 es 09_hydro_pump 2 65 0.0 0.0 -es 01_solar 2 66 1.0 0.0 -es 02_wind_on 2 66 1.0 0.0 -es 03_wind_off 2 66 1.0 0.0 -es 04_res 2 66 1.0 0.0 +es 01_solar 2 66 0.0 1.0 +es 02_wind_on 2 66 0.0 1.0 +es 03_wind_off 2 66 0.0 1.0 +es 04_res 2 66 0.0 1.0 es 05_nuclear 2 66 0.0 0.0 es 06_coal 2 66 0.0 0.0 es 07_gas 2 66 0.0 0.0 es 08_non-res 2 66 0.0 0.0 es 09_hydro_pump 2 66 0.0 0.0 -es 01_solar 2 67 1.0 0.0 -es 02_wind_on 2 67 1.0 0.0 -es 03_wind_off 2 67 1.0 0.0 -es 04_res 2 67 1.0 0.0 +es 01_solar 2 67 0.0 1.0 +es 02_wind_on 2 67 0.0 1.0 +es 03_wind_off 2 67 0.0 1.0 +es 04_res 2 67 0.0 1.0 es 05_nuclear 2 67 0.0 0.0 es 06_coal 2 67 0.0 0.0 es 07_gas 2 67 0.0 0.0 es 08_non-res 2 67 0.0 0.0 es 09_hydro_pump 2 67 0.0 0.0 -es 01_solar 2 68 1.0 0.0 -es 02_wind_on 2 68 1.0 0.0 -es 03_wind_off 2 68 1.0 0.0 -es 04_res 2 68 1.0 0.0 +es 01_solar 2 68 0.0 1.0 +es 02_wind_on 2 68 0.0 1.0 +es 03_wind_off 2 68 0.0 1.0 +es 04_res 2 68 0.0 1.0 es 05_nuclear 2 68 0.0 0.0 es 06_coal 2 68 0.0 0.0 es 07_gas 2 68 0.0 0.0 es 08_non-res 2 68 0.0 0.0 es 09_hydro_pump 2 68 0.0 0.0 -es 01_solar 2 69 1.0 0.0 -es 02_wind_on 2 69 1.0 0.0 -es 03_wind_off 2 69 1.0 0.0 -es 04_res 2 69 1.0 0.0 +es 01_solar 2 69 0.0 1.0 +es 02_wind_on 2 69 0.0 1.0 +es 03_wind_off 2 69 0.0 1.0 +es 04_res 2 69 0.0 1.0 es 05_nuclear 2 69 0.0 0.0 es 06_coal 2 69 0.0 0.0 es 07_gas 2 69 0.0 0.0 es 08_non-res 2 69 0.0 0.0 es 09_hydro_pump 2 69 0.0 0.0 -es 01_solar 2 70 1.0 0.0 -es 02_wind_on 2 70 1.0 0.0 -es 03_wind_off 2 70 1.0 0.0 -es 04_res 2 70 1.0 0.0 +es 01_solar 2 70 0.0 1.0 +es 02_wind_on 2 70 0.0 1.0 +es 03_wind_off 2 70 0.0 1.0 +es 04_res 2 70 0.0 1.0 es 05_nuclear 2 70 0.0 0.0 es 06_coal 2 70 0.0 0.0 es 07_gas 2 70 0.0 0.0 es 08_non-res 2 70 0.0 0.0 es 09_hydro_pump 2 70 0.0 0.0 -es 01_solar 2 71 1.0 0.0 -es 02_wind_on 2 71 1.0 0.0 -es 03_wind_off 2 71 1.0 0.0 -es 04_res 2 71 1.0 0.0 +es 01_solar 2 71 0.0 1.0 +es 02_wind_on 2 71 0.0 1.0 +es 03_wind_off 2 71 0.0 1.0 +es 04_res 2 71 0.0 1.0 es 05_nuclear 2 71 0.0 0.0 es 06_coal 2 71 0.0 0.0 es 07_gas 2 71 0.0 0.0 es 08_non-res 2 71 0.0 0.0 es 09_hydro_pump 2 71 0.0 0.0 -es 01_solar 2 72 1.0 0.0 -es 02_wind_on 2 72 1.0 0.0 -es 03_wind_off 2 72 1.0 0.0 -es 04_res 2 72 1.0 0.0 +es 01_solar 2 72 0.0 1.0 +es 02_wind_on 2 72 0.0 1.0 +es 03_wind_off 2 72 0.0 1.0 +es 04_res 2 72 0.0 1.0 es 05_nuclear 2 72 0.0 0.0 es 06_coal 2 72 0.0 0.0 es 07_gas 2 72 0.0 0.0 es 08_non-res 2 72 0.0 0.0 es 09_hydro_pump 2 72 0.0 0.0 -es 01_solar 2 73 1.0 0.0 -es 02_wind_on 2 73 1.0 0.0 -es 03_wind_off 2 73 1.0 0.0 -es 04_res 2 73 1.0 0.0 +es 01_solar 2 73 0.0 1.0 +es 02_wind_on 2 73 0.0 1.0 +es 03_wind_off 2 73 0.0 1.0 +es 04_res 2 73 0.0 1.0 es 05_nuclear 2 73 0.0 0.0 es 06_coal 2 73 0.0 0.0 es 07_gas 2 73 0.0 0.0 es 08_non-res 2 73 0.0 0.0 es 09_hydro_pump 2 73 0.0 0.0 -es 01_solar 2 74 1.0 0.0 -es 02_wind_on 2 74 1.0 0.0 -es 03_wind_off 2 74 1.0 0.0 -es 04_res 2 74 1.0 0.0 +es 01_solar 2 74 0.0 1.0 +es 02_wind_on 2 74 0.0 1.0 +es 03_wind_off 2 74 0.0 1.0 +es 04_res 2 74 0.0 1.0 es 05_nuclear 2 74 0.0 0.0 es 06_coal 2 74 0.0 0.0 es 07_gas 2 74 0.0 0.0 es 08_non-res 2 74 0.0 0.0 es 09_hydro_pump 2 74 0.0 0.0 -es 01_solar 2 75 1.0 0.0 -es 02_wind_on 2 75 1.0 0.0 -es 03_wind_off 2 75 1.0 0.0 -es 04_res 2 75 1.0 0.0 +es 01_solar 2 75 0.0 1.0 +es 02_wind_on 2 75 0.0 1.0 +es 03_wind_off 2 75 0.0 1.0 +es 04_res 2 75 0.0 1.0 es 05_nuclear 2 75 0.0 0.0 es 06_coal 2 75 0.0 0.0 es 07_gas 2 75 0.0 0.0 es 08_non-res 2 75 0.0 0.0 es 09_hydro_pump 2 75 0.0 0.0 -es 01_solar 2 76 1.0 0.0 -es 02_wind_on 2 76 1.0 0.0 -es 03_wind_off 2 76 1.0 0.0 -es 04_res 2 76 1.0 0.0 +es 01_solar 2 76 0.0 1.0 +es 02_wind_on 2 76 0.0 1.0 +es 03_wind_off 2 76 0.0 1.0 +es 04_res 2 76 0.0 1.0 es 05_nuclear 2 76 0.0 0.0 es 06_coal 2 76 0.0 0.0 es 07_gas 2 76 0.0 0.0 es 08_non-res 2 76 0.0 0.0 es 09_hydro_pump 2 76 0.0 0.0 -es 01_solar 2 77 1.0 0.0 -es 02_wind_on 2 77 1.0 0.0 -es 03_wind_off 2 77 1.0 0.0 -es 04_res 2 77 1.0 0.0 +es 01_solar 2 77 0.0 1.0 +es 02_wind_on 2 77 0.0 1.0 +es 03_wind_off 2 77 0.0 1.0 +es 04_res 2 77 0.0 1.0 es 05_nuclear 2 77 0.0 0.0 es 06_coal 2 77 0.0 0.0 es 07_gas 2 77 0.0 0.0 es 08_non-res 2 77 0.0 0.0 es 09_hydro_pump 2 77 0.0 0.0 -es 01_solar 2 78 1.0 0.0 -es 02_wind_on 2 78 1.0 0.0 -es 03_wind_off 2 78 1.0 0.0 -es 04_res 2 78 1.0 0.0 +es 01_solar 2 78 0.0 1.0 +es 02_wind_on 2 78 0.0 1.0 +es 03_wind_off 2 78 0.0 1.0 +es 04_res 2 78 0.0 1.0 es 05_nuclear 2 78 0.0 0.0 es 06_coal 2 78 0.0 0.0 es 07_gas 2 78 0.0 0.0 es 08_non-res 2 78 0.0 0.0 es 09_hydro_pump 2 78 0.0 0.0 -es 01_solar 2 79 1.0 0.0 -es 02_wind_on 2 79 1.0 0.0 -es 03_wind_off 2 79 1.0 0.0 -es 04_res 2 79 1.0 0.0 +es 01_solar 2 79 0.0 1.0 +es 02_wind_on 2 79 0.0 1.0 +es 03_wind_off 2 79 0.0 1.0 +es 04_res 2 79 0.0 1.0 es 05_nuclear 2 79 0.0 0.0 es 06_coal 2 79 0.0 0.0 es 07_gas 2 79 0.0 0.0 es 08_non-res 2 79 0.0 0.0 es 09_hydro_pump 2 79 0.0 0.0 -es 01_solar 2 80 1.0 0.0 -es 02_wind_on 2 80 1.0 0.0 -es 03_wind_off 2 80 1.0 0.0 -es 04_res 2 80 1.0 0.0 +es 01_solar 2 80 0.0 1.0 +es 02_wind_on 2 80 0.0 1.0 +es 03_wind_off 2 80 0.0 1.0 +es 04_res 2 80 0.0 1.0 es 05_nuclear 2 80 0.0 0.0 es 06_coal 2 80 0.0 0.0 es 07_gas 2 80 0.0 0.0 es 08_non-res 2 80 0.0 0.0 es 09_hydro_pump 2 80 0.0 0.0 -es 01_solar 2 81 1.0 0.0 -es 02_wind_on 2 81 1.0 0.0 -es 03_wind_off 2 81 1.0 0.0 -es 04_res 2 81 1.0 0.0 +es 01_solar 2 81 0.0 1.0 +es 02_wind_on 2 81 0.0 1.0 +es 03_wind_off 2 81 0.0 1.0 +es 04_res 2 81 0.0 1.0 es 05_nuclear 2 81 0.0 0.0 es 06_coal 2 81 0.0 0.0 es 07_gas 2 81 0.0 0.0 es 08_non-res 2 81 0.0 0.0 es 09_hydro_pump 2 81 0.0 0.0 -es 01_solar 2 82 1.0 0.0 -es 02_wind_on 2 82 1.0 0.0 -es 03_wind_off 2 82 1.0 0.0 -es 04_res 2 82 1.0 0.0 -es 05_nuclear 2 82 1.0 0.0 +es 01_solar 2 82 0.0 1.0 +es 02_wind_on 2 82 0.0 1.0 +es 03_wind_off 2 82 0.0 1.0 +es 04_res 2 82 0.0 1.0 +es 05_nuclear 2 82 0.0 1.0 es 06_coal 2 82 0.0 0.0 es 07_gas 2 82 0.0 0.0 es 08_non-res 2 82 0.0 0.0 es 09_hydro_pump 2 82 0.0 0.0 -es 01_solar 2 83 1.0 0.0 -es 02_wind_on 2 83 1.0 0.0 -es 03_wind_off 2 83 1.0 0.0 -es 04_res 2 83 1.0 0.0 -es 05_nuclear 2 83 1.0 0.0 +es 01_solar 2 83 0.0 1.0 +es 02_wind_on 2 83 0.0 1.0 +es 03_wind_off 2 83 0.0 1.0 +es 04_res 2 83 0.0 1.0 +es 05_nuclear 2 83 0.0 1.0 es 06_coal 2 83 0.0 0.0 es 07_gas 2 83 0.0 0.0 es 08_non-res 2 83 0.0 0.0 es 09_hydro_pump 2 83 0.0 0.0 -es 01_solar 2 84 1.0 0.0 -es 02_wind_on 2 84 1.0 0.0 -es 03_wind_off 2 84 1.0 0.0 -es 04_res 2 84 1.0 0.0 -es 05_nuclear 2 84 1.0 0.0 +es 01_solar 2 84 0.0 1.0 +es 02_wind_on 2 84 0.0 1.0 +es 03_wind_off 2 84 0.0 1.0 +es 04_res 2 84 0.0 1.0 +es 05_nuclear 2 84 0.0 1.0 es 06_coal 2 84 0.0 0.0 es 07_gas 2 84 0.0 0.0 es 08_non-res 2 84 0.0 0.0 es 09_hydro_pump 2 84 0.0 0.0 -es 01_solar 2 85 1.0 0.0 -es 02_wind_on 2 85 1.0 0.0 -es 03_wind_off 2 85 1.0 0.0 -es 04_res 2 85 1.0 0.0 -es 05_nuclear 2 85 1.0 0.0 +es 01_solar 2 85 0.0 1.0 +es 02_wind_on 2 85 0.0 1.0 +es 03_wind_off 2 85 0.0 1.0 +es 04_res 2 85 0.0 1.0 +es 05_nuclear 2 85 0.0 1.0 es 06_coal 2 85 0.0 0.0 es 07_gas 2 85 0.0 0.0 es 08_non-res 2 85 0.0 0.0 es 09_hydro_pump 2 85 0.0 0.0 -es 01_solar 2 86 1.0 0.0 -es 02_wind_on 2 86 1.0 0.0 -es 03_wind_off 2 86 1.0 0.0 -es 04_res 2 86 1.0 0.0 -es 05_nuclear 2 86 1.0 0.0 +es 01_solar 2 86 0.0 1.0 +es 02_wind_on 2 86 0.0 1.0 +es 03_wind_off 2 86 0.0 1.0 +es 04_res 2 86 0.0 1.0 +es 05_nuclear 2 86 0.0 1.0 es 06_coal 2 86 0.0 0.0 es 07_gas 2 86 0.0 0.0 es 08_non-res 2 86 0.0 0.0 es 09_hydro_pump 2 86 0.0 0.0 -es 01_solar 2 87 1.0 0.0 -es 02_wind_on 2 87 1.0 0.0 -es 03_wind_off 2 87 1.0 0.0 -es 04_res 2 87 1.0 0.0 -es 05_nuclear 2 87 1.0 0.0 +es 01_solar 2 87 0.0 1.0 +es 02_wind_on 2 87 0.0 1.0 +es 03_wind_off 2 87 0.0 1.0 +es 04_res 2 87 0.0 1.0 +es 05_nuclear 2 87 0.0 1.0 es 06_coal 2 87 0.0 0.0 es 07_gas 2 87 0.0 0.0 es 08_non-res 2 87 0.0 0.0 es 09_hydro_pump 2 87 0.0 0.0 -es 01_solar 2 88 1.0 0.0 -es 02_wind_on 2 88 1.0 0.0 -es 03_wind_off 2 88 1.0 0.0 -es 04_res 2 88 1.0 0.0 -es 05_nuclear 2 88 1.0 0.0 +es 01_solar 2 88 0.0 1.0 +es 02_wind_on 2 88 0.0 1.0 +es 03_wind_off 2 88 0.0 1.0 +es 04_res 2 88 0.0 1.0 +es 05_nuclear 2 88 0.0 1.0 es 06_coal 2 88 0.0 0.0 es 07_gas 2 88 0.0 0.0 es 08_non-res 2 88 0.0 0.0 es 09_hydro_pump 2 88 0.0 0.0 -es 01_solar 2 89 1.0 0.0 -es 02_wind_on 2 89 1.0 0.0 -es 03_wind_off 2 89 1.0 0.0 -es 04_res 2 89 1.0 0.0 -es 05_nuclear 2 89 1.0 0.0 +es 01_solar 2 89 0.0 1.0 +es 02_wind_on 2 89 0.0 1.0 +es 03_wind_off 2 89 0.0 1.0 +es 04_res 2 89 0.0 1.0 +es 05_nuclear 2 89 0.0 1.0 es 06_coal 2 89 0.0 0.0 es 07_gas 2 89 0.0 0.0 es 08_non-res 2 89 0.0 0.0 es 09_hydro_pump 2 89 0.0 0.0 -es 01_solar 2 90 1.0 0.0 -es 02_wind_on 2 90 1.0 0.0 -es 03_wind_off 2 90 1.0 0.0 -es 04_res 2 90 1.0 0.0 -es 05_nuclear 2 90 1.0 0.0 +es 01_solar 2 90 0.0 1.0 +es 02_wind_on 2 90 0.0 1.0 +es 03_wind_off 2 90 0.0 1.0 +es 04_res 2 90 0.0 1.0 +es 05_nuclear 2 90 0.0 1.0 es 06_coal 2 90 0.0 0.0 es 07_gas 2 90 0.0 0.0 es 08_non-res 2 90 0.0 0.0 es 09_hydro_pump 2 90 0.0 0.0 -es 01_solar 2 91 1.0 0.0 -es 02_wind_on 2 91 1.0 0.0 -es 03_wind_off 2 91 1.0 0.0 -es 04_res 2 91 1.0 0.0 -es 05_nuclear 2 91 1.0 0.0 +es 01_solar 2 91 0.0 1.0 +es 02_wind_on 2 91 0.0 1.0 +es 03_wind_off 2 91 0.0 1.0 +es 04_res 2 91 0.0 1.0 +es 05_nuclear 2 91 0.0 1.0 es 06_coal 2 91 0.0 0.0 es 07_gas 2 91 0.0 0.0 es 08_non-res 2 91 0.0 0.0 es 09_hydro_pump 2 91 0.0 0.0 -es 01_solar 2 92 1.0 0.0 -es 02_wind_on 2 92 1.0 0.0 -es 03_wind_off 2 92 1.0 0.0 -es 04_res 2 92 1.0 0.0 -es 05_nuclear 2 92 1.0 0.0 +es 01_solar 2 92 0.0 1.0 +es 02_wind_on 2 92 0.0 1.0 +es 03_wind_off 2 92 0.0 1.0 +es 04_res 2 92 0.0 1.0 +es 05_nuclear 2 92 0.0 1.0 es 06_coal 2 92 0.0 0.0 es 07_gas 2 92 0.0 0.0 es 08_non-res 2 92 0.0 0.0 es 09_hydro_pump 2 92 0.0 0.0 -es 01_solar 2 93 1.0 0.0 -es 02_wind_on 2 93 1.0 0.0 -es 03_wind_off 2 93 1.0 0.0 -es 04_res 2 93 1.0 0.0 -es 05_nuclear 2 93 1.0 0.0 +es 01_solar 2 93 0.0 1.0 +es 02_wind_on 2 93 0.0 1.0 +es 03_wind_off 2 93 0.0 1.0 +es 04_res 2 93 0.0 1.0 +es 05_nuclear 2 93 0.0 1.0 es 06_coal 2 93 0.0 0.0 es 07_gas 2 93 0.0 0.0 es 08_non-res 2 93 0.0 0.0 es 09_hydro_pump 2 93 0.0 0.0 -es 01_solar 2 94 1.0 0.0 -es 02_wind_on 2 94 1.0 0.0 -es 03_wind_off 2 94 1.0 0.0 -es 04_res 2 94 1.0 0.0 -es 05_nuclear 2 94 1.0 0.0 +es 01_solar 2 94 0.0 1.0 +es 02_wind_on 2 94 0.0 1.0 +es 03_wind_off 2 94 0.0 1.0 +es 04_res 2 94 0.0 1.0 +es 05_nuclear 2 94 0.0 1.0 es 06_coal 2 94 0.0 0.0 es 07_gas 2 94 0.0 0.0 es 08_non-res 2 94 0.0 0.0 es 09_hydro_pump 2 94 0.0 0.0 -es 01_solar 2 95 1.0 0.0 -es 02_wind_on 2 95 1.0 0.0 -es 03_wind_off 2 95 1.0 0.0 -es 04_res 2 95 1.0 0.0 -es 05_nuclear 2 95 1.0 0.0 +es 01_solar 2 95 0.0 1.0 +es 02_wind_on 2 95 0.0 1.0 +es 03_wind_off 2 95 0.0 1.0 +es 04_res 2 95 0.0 1.0 +es 05_nuclear 2 95 0.0 1.0 es 06_coal 2 95 0.0 0.0 es 07_gas 2 95 0.0 0.0 es 08_non-res 2 95 0.0 0.0 es 09_hydro_pump 2 95 0.0 0.0 -es 01_solar 2 96 1.0 0.0 -es 02_wind_on 2 96 1.0 0.0 -es 03_wind_off 2 96 1.0 0.0 -es 04_res 2 96 1.0 0.0 -es 05_nuclear 2 96 1.0 0.0 +es 01_solar 2 96 0.0 1.0 +es 02_wind_on 2 96 0.0 1.0 +es 03_wind_off 2 96 0.0 1.0 +es 04_res 2 96 0.0 1.0 +es 05_nuclear 2 96 0.0 1.0 es 06_coal 2 96 0.0 0.0 es 07_gas 2 96 0.0 0.0 es 08_non-res 2 96 0.0 0.0 es 09_hydro_pump 2 96 0.0 0.0 -es 01_solar 2 97 1.0 0.0 -es 02_wind_on 2 97 1.0 0.0 -es 03_wind_off 2 97 1.0 0.0 -es 04_res 2 97 1.0 0.0 -es 05_nuclear 2 97 1.0 0.0 +es 01_solar 2 97 0.0 1.0 +es 02_wind_on 2 97 0.0 1.0 +es 03_wind_off 2 97 0.0 1.0 +es 04_res 2 97 0.0 1.0 +es 05_nuclear 2 97 0.0 1.0 es 06_coal 2 97 0.0 0.0 es 07_gas 2 97 0.0 0.0 es 08_non-res 2 97 0.0 0.0 es 09_hydro_pump 2 97 0.0 0.0 -es 01_solar 2 98 1.0 0.0 -es 02_wind_on 2 98 1.0 0.0 -es 03_wind_off 2 98 1.0 0.0 -es 04_res 2 98 1.0 0.0 -es 05_nuclear 2 98 1.0 0.0 +es 01_solar 2 98 0.0 1.0 +es 02_wind_on 2 98 0.0 1.0 +es 03_wind_off 2 98 0.0 1.0 +es 04_res 2 98 0.0 1.0 +es 05_nuclear 2 98 0.0 1.0 es 06_coal 2 98 0.0 0.0 es 07_gas 2 98 0.0 0.0 es 08_non-res 2 98 0.0 0.0 es 09_hydro_pump 2 98 0.0 0.0 -es 01_solar 2 99 1.0 0.0 -es 02_wind_on 2 99 1.0 0.0 -es 03_wind_off 2 99 1.0 0.0 -es 04_res 2 99 1.0 0.0 -es 05_nuclear 2 99 1.0 0.0 +es 01_solar 2 99 0.0 1.0 +es 02_wind_on 2 99 0.0 1.0 +es 03_wind_off 2 99 0.0 1.0 +es 04_res 2 99 0.0 1.0 +es 05_nuclear 2 99 0.0 1.0 es 06_coal 2 99 0.0 0.0 es 07_gas 2 99 0.0 0.0 es 08_non-res 2 99 0.0 0.0 es 09_hydro_pump 2 99 0.0 0.0 -es 01_solar 2 100 1.0 0.0 -es 02_wind_on 2 100 1.0 0.0 -es 03_wind_off 2 100 1.0 0.0 -es 04_res 2 100 1.0 0.0 -es 05_nuclear 2 100 1.0 0.0 +es 01_solar 2 100 0.0 1.0 +es 02_wind_on 2 100 0.0 1.0 +es 03_wind_off 2 100 0.0 1.0 +es 04_res 2 100 0.0 1.0 +es 05_nuclear 2 100 0.0 1.0 es 06_coal 2 100 0.0 0.0 es 07_gas 2 100 0.0 0.0 es 08_non-res 2 100 0.0 0.0 es 09_hydro_pump 2 100 0.0 0.0 -es 01_solar 2 101 1.0 0.0 -es 02_wind_on 2 101 1.0 0.0 -es 03_wind_off 2 101 1.0 0.0 -es 04_res 2 101 1.0 0.0 -es 05_nuclear 2 101 1.0 0.0 +es 01_solar 2 101 0.0 1.0 +es 02_wind_on 2 101 0.0 1.0 +es 03_wind_off 2 101 0.0 1.0 +es 04_res 2 101 0.0 1.0 +es 05_nuclear 2 101 0.0 1.0 es 06_coal 2 101 0.0 0.0 es 07_gas 2 101 0.0 0.0 es 08_non-res 2 101 0.0 0.0 es 09_hydro_pump 2 101 0.0 0.0 -es 01_solar 2 102 1.0 0.0 -es 02_wind_on 2 102 1.0 0.0 -es 03_wind_off 2 102 1.0 0.0 -es 04_res 2 102 1.0 0.0 -es 05_nuclear 2 102 1.0 0.0 -es 06_coal 2 102 1.0 0.0 +es 01_solar 2 102 0.0 1.0 +es 02_wind_on 2 102 0.0 1.0 +es 03_wind_off 2 102 0.0 1.0 +es 04_res 2 102 0.0 1.0 +es 05_nuclear 2 102 0.0 1.0 +es 06_coal 2 102 0.0 1.0 es 07_gas 2 102 0.0 0.0 es 08_non-res 2 102 0.0 0.0 es 09_hydro_pump 2 102 0.0 0.0 -es 01_solar 2 103 1.0 0.0 -es 02_wind_on 2 103 1.0 0.0 -es 03_wind_off 2 103 1.0 0.0 -es 04_res 2 103 1.0 0.0 -es 05_nuclear 2 103 1.0 0.0 -es 06_coal 2 103 1.0 0.0 +es 01_solar 2 103 0.0 1.0 +es 02_wind_on 2 103 0.0 1.0 +es 03_wind_off 2 103 0.0 1.0 +es 04_res 2 103 0.0 1.0 +es 05_nuclear 2 103 0.0 1.0 +es 06_coal 2 103 0.0 1.0 es 07_gas 2 103 0.0 0.0 es 08_non-res 2 103 0.0 0.0 es 09_hydro_pump 2 103 0.0 0.0 -es 01_solar 2 104 1.0 0.0 -es 02_wind_on 2 104 1.0 0.0 -es 03_wind_off 2 104 1.0 0.0 -es 04_res 2 104 1.0 0.0 -es 05_nuclear 2 104 1.0 0.0 -es 06_coal 2 104 1.0 0.0 +es 01_solar 2 104 0.0 1.0 +es 02_wind_on 2 104 0.0 1.0 +es 03_wind_off 2 104 0.0 1.0 +es 04_res 2 104 0.0 1.0 +es 05_nuclear 2 104 0.0 1.0 +es 06_coal 2 104 0.0 1.0 es 07_gas 2 104 0.0 0.0 es 08_non-res 2 104 0.0 0.0 es 09_hydro_pump 2 104 0.0 0.0 -es 01_solar 2 105 1.0 0.0 -es 02_wind_on 2 105 1.0 0.0 -es 03_wind_off 2 105 1.0 0.0 -es 04_res 2 105 1.0 0.0 -es 05_nuclear 2 105 1.0 0.0 -es 06_coal 2 105 1.0 0.0 +es 01_solar 2 105 0.0 1.0 +es 02_wind_on 2 105 0.0 1.0 +es 03_wind_off 2 105 0.0 1.0 +es 04_res 2 105 0.0 1.0 +es 05_nuclear 2 105 0.0 1.0 +es 06_coal 2 105 0.0 1.0 es 07_gas 2 105 0.0 0.0 es 08_non-res 2 105 0.0 0.0 es 09_hydro_pump 2 105 0.0 0.0 -es 01_solar 2 106 1.0 0.0 -es 02_wind_on 2 106 1.0 0.0 -es 03_wind_off 2 106 1.0 0.0 -es 04_res 2 106 1.0 0.0 -es 05_nuclear 2 106 1.0 0.0 -es 06_coal 2 106 1.0 0.0 +es 01_solar 2 106 0.0 1.0 +es 02_wind_on 2 106 0.0 1.0 +es 03_wind_off 2 106 0.0 1.0 +es 04_res 2 106 0.0 1.0 +es 05_nuclear 2 106 0.0 1.0 +es 06_coal 2 106 0.0 1.0 es 07_gas 2 106 0.0 0.0 es 08_non-res 2 106 0.0 0.0 es 09_hydro_pump 2 106 0.0 0.0 -es 01_solar 2 107 1.0 0.0 -es 02_wind_on 2 107 1.0 0.0 -es 03_wind_off 2 107 1.0 0.0 -es 04_res 2 107 1.0 0.0 -es 05_nuclear 2 107 1.0 0.0 -es 06_coal 2 107 1.0 0.0 +es 01_solar 2 107 0.0 1.0 +es 02_wind_on 2 107 0.0 1.0 +es 03_wind_off 2 107 0.0 1.0 +es 04_res 2 107 0.0 1.0 +es 05_nuclear 2 107 0.0 1.0 +es 06_coal 2 107 0.0 1.0 es 07_gas 2 107 0.0 0.0 es 08_non-res 2 107 0.0 0.0 es 09_hydro_pump 2 107 0.0 0.0 -es 01_solar 2 108 1.0 0.0 -es 02_wind_on 2 108 1.0 0.0 -es 03_wind_off 2 108 1.0 0.0 -es 04_res 2 108 1.0 0.0 -es 05_nuclear 2 108 1.0 0.0 -es 06_coal 2 108 1.0 0.0 +es 01_solar 2 108 0.0 1.0 +es 02_wind_on 2 108 0.0 1.0 +es 03_wind_off 2 108 0.0 1.0 +es 04_res 2 108 0.0 1.0 +es 05_nuclear 2 108 0.0 1.0 +es 06_coal 2 108 0.0 1.0 es 07_gas 2 108 0.0 0.0 es 08_non-res 2 108 0.0 0.0 es 09_hydro_pump 2 108 0.0 0.0 -es 01_solar 2 109 1.0 0.0 -es 02_wind_on 2 109 1.0 0.0 -es 03_wind_off 2 109 1.0 0.0 -es 04_res 2 109 1.0 0.0 -es 05_nuclear 2 109 1.0 0.0 -es 06_coal 2 109 1.0 0.0 +es 01_solar 2 109 0.0 1.0 +es 02_wind_on 2 109 0.0 1.0 +es 03_wind_off 2 109 0.0 1.0 +es 04_res 2 109 0.0 1.0 +es 05_nuclear 2 109 0.0 1.0 +es 06_coal 2 109 0.0 1.0 es 07_gas 2 109 0.0 0.0 es 08_non-res 2 109 0.0 0.0 es 09_hydro_pump 2 109 0.0 0.0 -es 01_solar 2 110 1.0 0.0 -es 02_wind_on 2 110 1.0 0.0 -es 03_wind_off 2 110 1.0 0.0 -es 04_res 2 110 1.0 0.0 -es 05_nuclear 2 110 1.0 0.0 -es 06_coal 2 110 1.0 0.0 +es 01_solar 2 110 0.0 1.0 +es 02_wind_on 2 110 0.0 1.0 +es 03_wind_off 2 110 0.0 1.0 +es 04_res 2 110 0.0 1.0 +es 05_nuclear 2 110 0.0 1.0 +es 06_coal 2 110 0.0 1.0 es 07_gas 2 110 0.0 0.0 es 08_non-res 2 110 0.0 0.0 es 09_hydro_pump 2 110 0.0 0.0 -es 01_solar 2 111 1.0 0.0 -es 02_wind_on 2 111 1.0 0.0 -es 03_wind_off 2 111 1.0 0.0 -es 04_res 2 111 1.0 0.0 -es 05_nuclear 2 111 1.0 0.0 -es 06_coal 2 111 1.0 0.0 +es 01_solar 2 111 0.0 1.0 +es 02_wind_on 2 111 0.0 1.0 +es 03_wind_off 2 111 0.0 1.0 +es 04_res 2 111 0.0 1.0 +es 05_nuclear 2 111 0.0 1.0 +es 06_coal 2 111 0.0 1.0 es 07_gas 2 111 0.0 0.0 es 08_non-res 2 111 0.0 0.0 es 09_hydro_pump 2 111 0.0 0.0 -es 01_solar 2 112 1.0 0.0 -es 02_wind_on 2 112 1.0 0.0 -es 03_wind_off 2 112 1.0 0.0 -es 04_res 2 112 1.0 0.0 -es 05_nuclear 2 112 1.0 0.0 -es 06_coal 2 112 1.0 0.0 +es 01_solar 2 112 0.0 1.0 +es 02_wind_on 2 112 0.0 1.0 +es 03_wind_off 2 112 0.0 1.0 +es 04_res 2 112 0.0 1.0 +es 05_nuclear 2 112 0.0 1.0 +es 06_coal 2 112 0.0 1.0 es 07_gas 2 112 0.0 0.0 es 08_non-res 2 112 0.0 0.0 es 09_hydro_pump 2 112 0.0 0.0 -es 01_solar 2 113 1.0 0.0 -es 02_wind_on 2 113 1.0 0.0 -es 03_wind_off 2 113 1.0 0.0 -es 04_res 2 113 1.0 0.0 -es 05_nuclear 2 113 1.0 0.0 -es 06_coal 2 113 1.0 0.0 +es 01_solar 2 113 0.0 1.0 +es 02_wind_on 2 113 0.0 1.0 +es 03_wind_off 2 113 0.0 1.0 +es 04_res 2 113 0.0 1.0 +es 05_nuclear 2 113 0.0 1.0 +es 06_coal 2 113 0.0 1.0 es 07_gas 2 113 0.0 0.0 es 08_non-res 2 113 0.0 0.0 es 09_hydro_pump 2 113 0.0 0.0 -es 01_solar 2 114 1.0 0.0 -es 02_wind_on 2 114 1.0 0.0 -es 03_wind_off 2 114 1.0 0.0 -es 04_res 2 114 1.0 0.0 -es 05_nuclear 2 114 1.0 0.0 -es 06_coal 2 114 1.0 0.0 +es 01_solar 2 114 0.0 1.0 +es 02_wind_on 2 114 0.0 1.0 +es 03_wind_off 2 114 0.0 1.0 +es 04_res 2 114 0.0 1.0 +es 05_nuclear 2 114 0.0 1.0 +es 06_coal 2 114 0.0 1.0 es 07_gas 2 114 0.0 0.0 es 08_non-res 2 114 0.0 0.0 es 09_hydro_pump 2 114 0.0 0.0 -es 01_solar 2 115 1.0 0.0 -es 02_wind_on 2 115 1.0 0.0 -es 03_wind_off 2 115 1.0 0.0 -es 04_res 2 115 1.0 0.0 -es 05_nuclear 2 115 1.0 0.0 -es 06_coal 2 115 1.0 0.0 +es 01_solar 2 115 0.0 1.0 +es 02_wind_on 2 115 0.0 1.0 +es 03_wind_off 2 115 0.0 1.0 +es 04_res 2 115 0.0 1.0 +es 05_nuclear 2 115 0.0 1.0 +es 06_coal 2 115 0.0 1.0 es 07_gas 2 115 0.0 0.0 es 08_non-res 2 115 0.0 0.0 es 09_hydro_pump 2 115 0.0 0.0 -es 01_solar 2 116 1.0 0.0 -es 02_wind_on 2 116 1.0 0.0 -es 03_wind_off 2 116 1.0 0.0 -es 04_res 2 116 1.0 0.0 -es 05_nuclear 2 116 1.0 0.0 -es 06_coal 2 116 1.0 0.0 +es 01_solar 2 116 0.0 1.0 +es 02_wind_on 2 116 0.0 1.0 +es 03_wind_off 2 116 0.0 1.0 +es 04_res 2 116 0.0 1.0 +es 05_nuclear 2 116 0.0 1.0 +es 06_coal 2 116 0.0 1.0 es 07_gas 2 116 0.0 0.0 es 08_non-res 2 116 0.0 0.0 es 09_hydro_pump 2 116 0.0 0.0 -es 01_solar 2 117 1.0 0.0 -es 02_wind_on 2 117 1.0 0.0 -es 03_wind_off 2 117 1.0 0.0 -es 04_res 2 117 1.0 0.0 -es 05_nuclear 2 117 1.0 0.0 -es 06_coal 2 117 1.0 0.0 +es 01_solar 2 117 0.0 1.0 +es 02_wind_on 2 117 0.0 1.0 +es 03_wind_off 2 117 0.0 1.0 +es 04_res 2 117 0.0 1.0 +es 05_nuclear 2 117 0.0 1.0 +es 06_coal 2 117 0.0 1.0 es 07_gas 2 117 0.0 0.0 es 08_non-res 2 117 0.0 0.0 es 09_hydro_pump 2 117 0.0 0.0 -es 01_solar 2 118 1.0 0.0 -es 02_wind_on 2 118 1.0 0.0 -es 03_wind_off 2 118 1.0 0.0 -es 04_res 2 118 1.0 0.0 -es 05_nuclear 2 118 1.0 0.0 -es 06_coal 2 118 1.0 0.0 +es 01_solar 2 118 0.0 1.0 +es 02_wind_on 2 118 0.0 1.0 +es 03_wind_off 2 118 0.0 1.0 +es 04_res 2 118 0.0 1.0 +es 05_nuclear 2 118 0.0 1.0 +es 06_coal 2 118 0.0 1.0 es 07_gas 2 118 0.0 0.0 es 08_non-res 2 118 0.0 0.0 es 09_hydro_pump 2 118 0.0 0.0 -es 01_solar 2 119 1.0 0.0 -es 02_wind_on 2 119 1.0 0.0 -es 03_wind_off 2 119 1.0 0.0 -es 04_res 2 119 1.0 0.0 -es 05_nuclear 2 119 1.0 0.0 -es 06_coal 2 119 1.0 0.0 +es 01_solar 2 119 0.0 1.0 +es 02_wind_on 2 119 0.0 1.0 +es 03_wind_off 2 119 0.0 1.0 +es 04_res 2 119 0.0 1.0 +es 05_nuclear 2 119 0.0 1.0 +es 06_coal 2 119 0.0 1.0 es 07_gas 2 119 0.0 0.0 es 08_non-res 2 119 0.0 0.0 es 09_hydro_pump 2 119 0.0 0.0 -es 01_solar 2 120 1.0 0.0 -es 02_wind_on 2 120 1.0 0.0 -es 03_wind_off 2 120 1.0 0.0 -es 04_res 2 120 1.0 0.0 -es 05_nuclear 2 120 1.0 0.0 -es 06_coal 2 120 1.0 0.0 +es 01_solar 2 120 0.0 1.0 +es 02_wind_on 2 120 0.0 1.0 +es 03_wind_off 2 120 0.0 1.0 +es 04_res 2 120 0.0 1.0 +es 05_nuclear 2 120 0.0 1.0 +es 06_coal 2 120 0.0 1.0 es 07_gas 2 120 0.0 0.0 es 08_non-res 2 120 0.0 0.0 es 09_hydro_pump 2 120 0.0 0.0 -es 01_solar 2 121 1.0 0.0 -es 02_wind_on 2 121 1.0 0.0 -es 03_wind_off 2 121 1.0 0.0 -es 04_res 2 121 1.0 0.0 -es 05_nuclear 2 121 1.0 0.0 -es 06_coal 2 121 1.0 0.0 +es 01_solar 2 121 0.0 1.0 +es 02_wind_on 2 121 0.0 1.0 +es 03_wind_off 2 121 0.0 1.0 +es 04_res 2 121 0.0 1.0 +es 05_nuclear 2 121 0.0 1.0 +es 06_coal 2 121 0.0 1.0 es 07_gas 2 121 0.0 0.0 es 08_non-res 2 121 0.0 0.0 es 09_hydro_pump 2 121 0.0 0.0 -es 01_solar 2 122 1.0 0.0 -es 02_wind_on 2 122 1.0 0.0 -es 03_wind_off 2 122 1.0 0.0 -es 04_res 2 122 1.0 0.0 -es 05_nuclear 2 122 1.0 0.0 -es 06_coal 2 122 1.0 0.0 -es 07_gas 2 122 1.0 0.0 +es 01_solar 2 122 0.0 1.0 +es 02_wind_on 2 122 0.0 1.0 +es 03_wind_off 2 122 0.0 1.0 +es 04_res 2 122 0.0 1.0 +es 05_nuclear 2 122 0.0 1.0 +es 06_coal 2 122 0.0 1.0 +es 07_gas 2 122 0.0 1.0 es 08_non-res 2 122 0.0 0.0 es 09_hydro_pump 2 122 0.0 0.0 -es 01_solar 2 123 1.0 0.0 -es 02_wind_on 2 123 1.0 0.0 -es 03_wind_off 2 123 1.0 0.0 -es 04_res 2 123 1.0 0.0 -es 05_nuclear 2 123 1.0 0.0 -es 06_coal 2 123 1.0 0.0 -es 07_gas 2 123 1.0 0.0 +es 01_solar 2 123 0.0 1.0 +es 02_wind_on 2 123 0.0 1.0 +es 03_wind_off 2 123 0.0 1.0 +es 04_res 2 123 0.0 1.0 +es 05_nuclear 2 123 0.0 1.0 +es 06_coal 2 123 0.0 1.0 +es 07_gas 2 123 0.0 1.0 es 08_non-res 2 123 0.0 0.0 es 09_hydro_pump 2 123 0.0 0.0 -es 01_solar 2 124 1.0 0.0 -es 02_wind_on 2 124 1.0 0.0 -es 03_wind_off 2 124 1.0 0.0 -es 04_res 2 124 1.0 0.0 -es 05_nuclear 2 124 1.0 0.0 -es 06_coal 2 124 1.0 0.0 -es 07_gas 2 124 1.0 0.0 +es 01_solar 2 124 0.0 1.0 +es 02_wind_on 2 124 0.0 1.0 +es 03_wind_off 2 124 0.0 1.0 +es 04_res 2 124 0.0 1.0 +es 05_nuclear 2 124 0.0 1.0 +es 06_coal 2 124 0.0 1.0 +es 07_gas 2 124 0.0 1.0 es 08_non-res 2 124 0.0 0.0 es 09_hydro_pump 2 124 0.0 0.0 -es 01_solar 2 125 1.0 0.0 -es 02_wind_on 2 125 1.0 0.0 -es 03_wind_off 2 125 1.0 0.0 -es 04_res 2 125 1.0 0.0 -es 05_nuclear 2 125 1.0 0.0 -es 06_coal 2 125 1.0 0.0 -es 07_gas 2 125 1.0 0.0 +es 01_solar 2 125 0.0 1.0 +es 02_wind_on 2 125 0.0 1.0 +es 03_wind_off 2 125 0.0 1.0 +es 04_res 2 125 0.0 1.0 +es 05_nuclear 2 125 0.0 1.0 +es 06_coal 2 125 0.0 1.0 +es 07_gas 2 125 0.0 1.0 es 08_non-res 2 125 0.0 0.0 es 09_hydro_pump 2 125 0.0 0.0 -es 01_solar 2 126 1.0 0.0 -es 02_wind_on 2 126 1.0 0.0 -es 03_wind_off 2 126 1.0 0.0 -es 04_res 2 126 1.0 0.0 -es 05_nuclear 2 126 1.0 0.0 -es 06_coal 2 126 1.0 0.0 -es 07_gas 2 126 1.0 0.0 +es 01_solar 2 126 0.0 1.0 +es 02_wind_on 2 126 0.0 1.0 +es 03_wind_off 2 126 0.0 1.0 +es 04_res 2 126 0.0 1.0 +es 05_nuclear 2 126 0.0 1.0 +es 06_coal 2 126 0.0 1.0 +es 07_gas 2 126 0.0 1.0 es 08_non-res 2 126 0.0 0.0 es 09_hydro_pump 2 126 0.0 0.0 -es 01_solar 2 127 1.0 0.0 -es 02_wind_on 2 127 1.0 0.0 -es 03_wind_off 2 127 1.0 0.0 -es 04_res 2 127 1.0 0.0 -es 05_nuclear 2 127 1.0 0.0 -es 06_coal 2 127 1.0 0.0 -es 07_gas 2 127 1.0 0.0 +es 01_solar 2 127 0.0 1.0 +es 02_wind_on 2 127 0.0 1.0 +es 03_wind_off 2 127 0.0 1.0 +es 04_res 2 127 0.0 1.0 +es 05_nuclear 2 127 0.0 1.0 +es 06_coal 2 127 0.0 1.0 +es 07_gas 2 127 0.0 1.0 es 08_non-res 2 127 0.0 0.0 es 09_hydro_pump 2 127 0.0 0.0 -es 01_solar 2 128 1.0 0.0 -es 02_wind_on 2 128 1.0 0.0 -es 03_wind_off 2 128 1.0 0.0 -es 04_res 2 128 1.0 0.0 -es 05_nuclear 2 128 1.0 0.0 -es 06_coal 2 128 1.0 0.0 -es 07_gas 2 128 1.0 0.0 +es 01_solar 2 128 0.0 1.0 +es 02_wind_on 2 128 0.0 1.0 +es 03_wind_off 2 128 0.0 1.0 +es 04_res 2 128 0.0 1.0 +es 05_nuclear 2 128 0.0 1.0 +es 06_coal 2 128 0.0 1.0 +es 07_gas 2 128 0.0 1.0 es 08_non-res 2 128 0.0 0.0 es 09_hydro_pump 2 128 0.0 0.0 -es 01_solar 2 129 1.0 0.0 -es 02_wind_on 2 129 1.0 0.0 -es 03_wind_off 2 129 1.0 0.0 -es 04_res 2 129 1.0 0.0 -es 05_nuclear 2 129 1.0 0.0 -es 06_coal 2 129 1.0 0.0 -es 07_gas 2 129 1.0 0.0 +es 01_solar 2 129 0.0 1.0 +es 02_wind_on 2 129 0.0 1.0 +es 03_wind_off 2 129 0.0 1.0 +es 04_res 2 129 0.0 1.0 +es 05_nuclear 2 129 0.0 1.0 +es 06_coal 2 129 0.0 1.0 +es 07_gas 2 129 0.0 1.0 es 08_non-res 2 129 0.0 0.0 es 09_hydro_pump 2 129 0.0 0.0 -es 01_solar 2 130 1.0 0.0 -es 02_wind_on 2 130 1.0 0.0 -es 03_wind_off 2 130 1.0 0.0 -es 04_res 2 130 1.0 0.0 -es 05_nuclear 2 130 1.0 0.0 -es 06_coal 2 130 1.0 0.0 -es 07_gas 2 130 1.0 0.0 +es 01_solar 2 130 0.0 1.0 +es 02_wind_on 2 130 0.0 1.0 +es 03_wind_off 2 130 0.0 1.0 +es 04_res 2 130 0.0 1.0 +es 05_nuclear 2 130 0.0 1.0 +es 06_coal 2 130 0.0 1.0 +es 07_gas 2 130 0.0 1.0 es 08_non-res 2 130 0.0 0.0 es 09_hydro_pump 2 130 0.0 0.0 -es 01_solar 2 131 1.0 0.0 -es 02_wind_on 2 131 1.0 0.0 -es 03_wind_off 2 131 1.0 0.0 -es 04_res 2 131 1.0 0.0 -es 05_nuclear 2 131 1.0 0.0 -es 06_coal 2 131 1.0 0.0 -es 07_gas 2 131 1.0 0.0 +es 01_solar 2 131 0.0 1.0 +es 02_wind_on 2 131 0.0 1.0 +es 03_wind_off 2 131 0.0 1.0 +es 04_res 2 131 0.0 1.0 +es 05_nuclear 2 131 0.0 1.0 +es 06_coal 2 131 0.0 1.0 +es 07_gas 2 131 0.0 1.0 es 08_non-res 2 131 0.0 0.0 es 09_hydro_pump 2 131 0.0 0.0 -es 01_solar 2 132 1.0 0.0 -es 02_wind_on 2 132 1.0 0.0 -es 03_wind_off 2 132 1.0 0.0 -es 04_res 2 132 1.0 0.0 -es 05_nuclear 2 132 1.0 0.0 -es 06_coal 2 132 1.0 0.0 -es 07_gas 2 132 1.0 0.0 +es 01_solar 2 132 0.0 1.0 +es 02_wind_on 2 132 0.0 1.0 +es 03_wind_off 2 132 0.0 1.0 +es 04_res 2 132 0.0 1.0 +es 05_nuclear 2 132 0.0 1.0 +es 06_coal 2 132 0.0 1.0 +es 07_gas 2 132 0.0 1.0 es 08_non-res 2 132 0.0 0.0 es 09_hydro_pump 2 132 0.0 0.0 -es 01_solar 2 133 1.0 0.0 -es 02_wind_on 2 133 1.0 0.0 -es 03_wind_off 2 133 1.0 0.0 -es 04_res 2 133 1.0 0.0 -es 05_nuclear 2 133 1.0 0.0 -es 06_coal 2 133 1.0 0.0 -es 07_gas 2 133 1.0 0.0 +es 01_solar 2 133 0.0 1.0 +es 02_wind_on 2 133 0.0 1.0 +es 03_wind_off 2 133 0.0 1.0 +es 04_res 2 133 0.0 1.0 +es 05_nuclear 2 133 0.0 1.0 +es 06_coal 2 133 0.0 1.0 +es 07_gas 2 133 0.0 1.0 es 08_non-res 2 133 0.0 0.0 es 09_hydro_pump 2 133 0.0 0.0 -es 01_solar 2 134 1.0 0.0 -es 02_wind_on 2 134 1.0 0.0 -es 03_wind_off 2 134 1.0 0.0 -es 04_res 2 134 1.0 0.0 -es 05_nuclear 2 134 1.0 0.0 -es 06_coal 2 134 1.0 0.0 -es 07_gas 2 134 1.0 0.0 +es 01_solar 2 134 0.0 1.0 +es 02_wind_on 2 134 0.0 1.0 +es 03_wind_off 2 134 0.0 1.0 +es 04_res 2 134 0.0 1.0 +es 05_nuclear 2 134 0.0 1.0 +es 06_coal 2 134 0.0 1.0 +es 07_gas 2 134 0.0 1.0 es 08_non-res 2 134 0.0 0.0 es 09_hydro_pump 2 134 0.0 0.0 -es 01_solar 2 135 1.0 0.0 -es 02_wind_on 2 135 1.0 0.0 -es 03_wind_off 2 135 1.0 0.0 -es 04_res 2 135 1.0 0.0 -es 05_nuclear 2 135 1.0 0.0 -es 06_coal 2 135 1.0 0.0 -es 07_gas 2 135 1.0 0.0 +es 01_solar 2 135 0.0 1.0 +es 02_wind_on 2 135 0.0 1.0 +es 03_wind_off 2 135 0.0 1.0 +es 04_res 2 135 0.0 1.0 +es 05_nuclear 2 135 0.0 1.0 +es 06_coal 2 135 0.0 1.0 +es 07_gas 2 135 0.0 1.0 es 08_non-res 2 135 0.0 0.0 es 09_hydro_pump 2 135 0.0 0.0 -es 01_solar 2 136 1.0 0.0 -es 02_wind_on 2 136 1.0 0.0 -es 03_wind_off 2 136 1.0 0.0 -es 04_res 2 136 1.0 0.0 -es 05_nuclear 2 136 1.0 0.0 -es 06_coal 2 136 1.0 0.0 -es 07_gas 2 136 1.0 0.0 +es 01_solar 2 136 0.0 1.0 +es 02_wind_on 2 136 0.0 1.0 +es 03_wind_off 2 136 0.0 1.0 +es 04_res 2 136 0.0 1.0 +es 05_nuclear 2 136 0.0 1.0 +es 06_coal 2 136 0.0 1.0 +es 07_gas 2 136 0.0 1.0 es 08_non-res 2 136 0.0 0.0 es 09_hydro_pump 2 136 0.0 0.0 -es 01_solar 2 137 1.0 0.0 -es 02_wind_on 2 137 1.0 0.0 -es 03_wind_off 2 137 1.0 0.0 -es 04_res 2 137 1.0 0.0 -es 05_nuclear 2 137 1.0 0.0 -es 06_coal 2 137 1.0 0.0 -es 07_gas 2 137 1.0 0.0 +es 01_solar 2 137 0.0 1.0 +es 02_wind_on 2 137 0.0 1.0 +es 03_wind_off 2 137 0.0 1.0 +es 04_res 2 137 0.0 1.0 +es 05_nuclear 2 137 0.0 1.0 +es 06_coal 2 137 0.0 1.0 +es 07_gas 2 137 0.0 1.0 es 08_non-res 2 137 0.0 0.0 es 09_hydro_pump 2 137 0.0 0.0 -es 01_solar 2 138 1.0 0.0 -es 02_wind_on 2 138 1.0 0.0 -es 03_wind_off 2 138 1.0 0.0 -es 04_res 2 138 1.0 0.0 -es 05_nuclear 2 138 1.0 0.0 -es 06_coal 2 138 1.0 0.0 -es 07_gas 2 138 1.0 0.0 +es 01_solar 2 138 0.0 1.0 +es 02_wind_on 2 138 0.0 1.0 +es 03_wind_off 2 138 0.0 1.0 +es 04_res 2 138 0.0 1.0 +es 05_nuclear 2 138 0.0 1.0 +es 06_coal 2 138 0.0 1.0 +es 07_gas 2 138 0.0 1.0 es 08_non-res 2 138 0.0 0.0 es 09_hydro_pump 2 138 0.0 0.0 -es 01_solar 2 139 1.0 0.0 -es 02_wind_on 2 139 1.0 0.0 -es 03_wind_off 2 139 1.0 0.0 -es 04_res 2 139 1.0 0.0 -es 05_nuclear 2 139 1.0 0.0 -es 06_coal 2 139 1.0 0.0 -es 07_gas 2 139 1.0 0.0 +es 01_solar 2 139 0.0 1.0 +es 02_wind_on 2 139 0.0 1.0 +es 03_wind_off 2 139 0.0 1.0 +es 04_res 2 139 0.0 1.0 +es 05_nuclear 2 139 0.0 1.0 +es 06_coal 2 139 0.0 1.0 +es 07_gas 2 139 0.0 1.0 es 08_non-res 2 139 0.0 0.0 es 09_hydro_pump 2 139 0.0 0.0 -es 01_solar 2 140 1.0 0.0 -es 02_wind_on 2 140 1.0 0.0 -es 03_wind_off 2 140 1.0 0.0 -es 04_res 2 140 1.0 0.0 -es 05_nuclear 2 140 1.0 0.0 -es 06_coal 2 140 1.0 0.0 -es 07_gas 2 140 1.0 0.0 +es 01_solar 2 140 0.0 1.0 +es 02_wind_on 2 140 0.0 1.0 +es 03_wind_off 2 140 0.0 1.0 +es 04_res 2 140 0.0 1.0 +es 05_nuclear 2 140 0.0 1.0 +es 06_coal 2 140 0.0 1.0 +es 07_gas 2 140 0.0 1.0 es 08_non-res 2 140 0.0 0.0 es 09_hydro_pump 2 140 0.0 0.0 -es 01_solar 2 141 1.0 0.0 -es 02_wind_on 2 141 1.0 0.0 -es 03_wind_off 2 141 1.0 0.0 -es 04_res 2 141 1.0 0.0 -es 05_nuclear 2 141 1.0 0.0 -es 06_coal 2 141 1.0 0.0 -es 07_gas 2 141 1.0 0.0 +es 01_solar 2 141 0.0 1.0 +es 02_wind_on 2 141 0.0 1.0 +es 03_wind_off 2 141 0.0 1.0 +es 04_res 2 141 0.0 1.0 +es 05_nuclear 2 141 0.0 1.0 +es 06_coal 2 141 0.0 1.0 +es 07_gas 2 141 0.0 1.0 es 08_non-res 2 141 0.0 0.0 es 09_hydro_pump 2 141 0.0 0.0 -es 01_solar 2 142 1.0 0.0 -es 02_wind_on 2 142 1.0 0.0 -es 03_wind_off 2 142 1.0 0.0 -es 04_res 2 142 1.0 0.0 -es 05_nuclear 2 142 1.0 0.0 -es 06_coal 2 142 1.0 0.0 -es 07_gas 2 142 1.0 0.0 -es 08_non-res 2 142 1.0 0.0 +es 01_solar 2 142 0.0 1.0 +es 02_wind_on 2 142 0.0 1.0 +es 03_wind_off 2 142 0.0 1.0 +es 04_res 2 142 0.0 1.0 +es 05_nuclear 2 142 0.0 1.0 +es 06_coal 2 142 0.0 1.0 +es 07_gas 2 142 0.0 1.0 +es 08_non-res 2 142 0.0 1.0 es 09_hydro_pump 2 142 0.0 0.0 -es 01_solar 2 143 1.0 0.0 -es 02_wind_on 2 143 1.0 0.0 -es 03_wind_off 2 143 1.0 0.0 -es 04_res 2 143 1.0 0.0 -es 05_nuclear 2 143 1.0 0.0 -es 06_coal 2 143 1.0 0.0 -es 07_gas 2 143 1.0 0.0 -es 08_non-res 2 143 1.0 0.0 +es 01_solar 2 143 0.0 1.0 +es 02_wind_on 2 143 0.0 1.0 +es 03_wind_off 2 143 0.0 1.0 +es 04_res 2 143 0.0 1.0 +es 05_nuclear 2 143 0.0 1.0 +es 06_coal 2 143 0.0 1.0 +es 07_gas 2 143 0.0 1.0 +es 08_non-res 2 143 0.0 1.0 es 09_hydro_pump 2 143 0.0 0.0 -es 01_solar 2 144 1.0 0.0 -es 02_wind_on 2 144 1.0 0.0 -es 03_wind_off 2 144 1.0 0.0 -es 04_res 2 144 1.0 0.0 -es 05_nuclear 2 144 1.0 0.0 -es 06_coal 2 144 1.0 0.0 -es 07_gas 2 144 1.0 0.0 -es 08_non-res 2 144 1.0 0.0 +es 01_solar 2 144 0.0 1.0 +es 02_wind_on 2 144 0.0 1.0 +es 03_wind_off 2 144 0.0 1.0 +es 04_res 2 144 0.0 1.0 +es 05_nuclear 2 144 0.0 1.0 +es 06_coal 2 144 0.0 1.0 +es 07_gas 2 144 0.0 1.0 +es 08_non-res 2 144 0.0 1.0 es 09_hydro_pump 2 144 0.0 0.0 -es 01_solar 2 145 1.0 0.0 -es 02_wind_on 2 145 1.0 0.0 -es 03_wind_off 2 145 1.0 0.0 -es 04_res 2 145 1.0 0.0 -es 05_nuclear 2 145 1.0 0.0 -es 06_coal 2 145 1.0 0.0 -es 07_gas 2 145 1.0 0.0 -es 08_non-res 2 145 1.0 0.0 +es 01_solar 2 145 0.0 1.0 +es 02_wind_on 2 145 0.0 1.0 +es 03_wind_off 2 145 0.0 1.0 +es 04_res 2 145 0.0 1.0 +es 05_nuclear 2 145 0.0 1.0 +es 06_coal 2 145 0.0 1.0 +es 07_gas 2 145 0.0 1.0 +es 08_non-res 2 145 0.0 1.0 es 09_hydro_pump 2 145 0.0 0.0 -es 01_solar 2 146 1.0 0.0 -es 02_wind_on 2 146 1.0 0.0 -es 03_wind_off 2 146 1.0 0.0 -es 04_res 2 146 1.0 0.0 -es 05_nuclear 2 146 1.0 0.0 -es 06_coal 2 146 1.0 0.0 -es 07_gas 2 146 1.0 0.0 -es 08_non-res 2 146 1.0 0.0 +es 01_solar 2 146 0.0 1.0 +es 02_wind_on 2 146 0.0 1.0 +es 03_wind_off 2 146 0.0 1.0 +es 04_res 2 146 0.0 1.0 +es 05_nuclear 2 146 0.0 1.0 +es 06_coal 2 146 0.0 1.0 +es 07_gas 2 146 0.0 1.0 +es 08_non-res 2 146 0.0 1.0 es 09_hydro_pump 2 146 0.0 0.0 -es 01_solar 2 147 1.0 0.0 -es 02_wind_on 2 147 1.0 0.0 -es 03_wind_off 2 147 1.0 0.0 -es 04_res 2 147 1.0 0.0 -es 05_nuclear 2 147 1.0 0.0 -es 06_coal 2 147 1.0 0.0 -es 07_gas 2 147 1.0 0.0 -es 08_non-res 2 147 1.0 0.0 +es 01_solar 2 147 0.0 1.0 +es 02_wind_on 2 147 0.0 1.0 +es 03_wind_off 2 147 0.0 1.0 +es 04_res 2 147 0.0 1.0 +es 05_nuclear 2 147 0.0 1.0 +es 06_coal 2 147 0.0 1.0 +es 07_gas 2 147 0.0 1.0 +es 08_non-res 2 147 0.0 1.0 es 09_hydro_pump 2 147 0.0 0.0 -es 01_solar 2 148 1.0 0.0 -es 02_wind_on 2 148 1.0 0.0 -es 03_wind_off 2 148 1.0 0.0 -es 04_res 2 148 1.0 0.0 -es 05_nuclear 2 148 1.0 0.0 -es 06_coal 2 148 1.0 0.0 -es 07_gas 2 148 1.0 0.0 -es 08_non-res 2 148 1.0 0.0 +es 01_solar 2 148 0.0 1.0 +es 02_wind_on 2 148 0.0 1.0 +es 03_wind_off 2 148 0.0 1.0 +es 04_res 2 148 0.0 1.0 +es 05_nuclear 2 148 0.0 1.0 +es 06_coal 2 148 0.0 1.0 +es 07_gas 2 148 0.0 1.0 +es 08_non-res 2 148 0.0 1.0 es 09_hydro_pump 2 148 0.0 0.0 -es 01_solar 2 149 1.0 0.0 -es 02_wind_on 2 149 1.0 0.0 -es 03_wind_off 2 149 1.0 0.0 -es 04_res 2 149 1.0 0.0 -es 05_nuclear 2 149 1.0 0.0 -es 06_coal 2 149 1.0 0.0 -es 07_gas 2 149 1.0 0.0 -es 08_non-res 2 149 1.0 0.0 +es 01_solar 2 149 0.0 1.0 +es 02_wind_on 2 149 0.0 1.0 +es 03_wind_off 2 149 0.0 1.0 +es 04_res 2 149 0.0 1.0 +es 05_nuclear 2 149 0.0 1.0 +es 06_coal 2 149 0.0 1.0 +es 07_gas 2 149 0.0 1.0 +es 08_non-res 2 149 0.0 1.0 es 09_hydro_pump 2 149 0.0 0.0 -es 01_solar 2 150 1.0 0.0 -es 02_wind_on 2 150 1.0 0.0 -es 03_wind_off 2 150 1.0 0.0 -es 04_res 2 150 1.0 0.0 -es 05_nuclear 2 150 1.0 0.0 -es 06_coal 2 150 1.0 0.0 -es 07_gas 2 150 1.0 0.0 -es 08_non-res 2 150 1.0 0.0 +es 01_solar 2 150 0.0 1.0 +es 02_wind_on 2 150 0.0 1.0 +es 03_wind_off 2 150 0.0 1.0 +es 04_res 2 150 0.0 1.0 +es 05_nuclear 2 150 0.0 1.0 +es 06_coal 2 150 0.0 1.0 +es 07_gas 2 150 0.0 1.0 +es 08_non-res 2 150 0.0 1.0 es 09_hydro_pump 2 150 0.0 0.0 -es 01_solar 2 151 1.0 0.0 -es 02_wind_on 2 151 1.0 0.0 -es 03_wind_off 2 151 1.0 0.0 -es 04_res 2 151 1.0 0.0 -es 05_nuclear 2 151 1.0 0.0 -es 06_coal 2 151 1.0 0.0 -es 07_gas 2 151 1.0 0.0 -es 08_non-res 2 151 1.0 0.0 +es 01_solar 2 151 0.0 1.0 +es 02_wind_on 2 151 0.0 1.0 +es 03_wind_off 2 151 0.0 1.0 +es 04_res 2 151 0.0 1.0 +es 05_nuclear 2 151 0.0 1.0 +es 06_coal 2 151 0.0 1.0 +es 07_gas 2 151 0.0 1.0 +es 08_non-res 2 151 0.0 1.0 es 09_hydro_pump 2 151 0.0 0.0 -es 01_solar 2 152 1.0 0.0 -es 02_wind_on 2 152 1.0 0.0 -es 03_wind_off 2 152 1.0 0.0 -es 04_res 2 152 1.0 0.0 -es 05_nuclear 2 152 1.0 0.0 -es 06_coal 2 152 1.0 0.0 -es 07_gas 2 152 1.0 0.0 -es 08_non-res 2 152 1.0 0.0 +es 01_solar 2 152 0.0 1.0 +es 02_wind_on 2 152 0.0 1.0 +es 03_wind_off 2 152 0.0 1.0 +es 04_res 2 152 0.0 1.0 +es 05_nuclear 2 152 0.0 1.0 +es 06_coal 2 152 0.0 1.0 +es 07_gas 2 152 0.0 1.0 +es 08_non-res 2 152 0.0 1.0 es 09_hydro_pump 2 152 0.0 0.0 -es 01_solar 2 153 1.0 0.0 -es 02_wind_on 2 153 1.0 0.0 -es 03_wind_off 2 153 1.0 0.0 -es 04_res 2 153 1.0 0.0 -es 05_nuclear 2 153 1.0 0.0 -es 06_coal 2 153 1.0 0.0 -es 07_gas 2 153 1.0 0.0 -es 08_non-res 2 153 1.0 0.0 +es 01_solar 2 153 0.0 1.0 +es 02_wind_on 2 153 0.0 1.0 +es 03_wind_off 2 153 0.0 1.0 +es 04_res 2 153 0.0 1.0 +es 05_nuclear 2 153 0.0 1.0 +es 06_coal 2 153 0.0 1.0 +es 07_gas 2 153 0.0 1.0 +es 08_non-res 2 153 0.0 1.0 es 09_hydro_pump 2 153 0.0 0.0 -es 01_solar 2 154 1.0 0.0 -es 02_wind_on 2 154 1.0 0.0 -es 03_wind_off 2 154 1.0 0.0 -es 04_res 2 154 1.0 0.0 -es 05_nuclear 2 154 1.0 0.0 -es 06_coal 2 154 1.0 0.0 -es 07_gas 2 154 1.0 0.0 -es 08_non-res 2 154 1.0 0.0 +es 01_solar 2 154 0.0 1.0 +es 02_wind_on 2 154 0.0 1.0 +es 03_wind_off 2 154 0.0 1.0 +es 04_res 2 154 0.0 1.0 +es 05_nuclear 2 154 0.0 1.0 +es 06_coal 2 154 0.0 1.0 +es 07_gas 2 154 0.0 1.0 +es 08_non-res 2 154 0.0 1.0 es 09_hydro_pump 2 154 0.0 0.0 -es 01_solar 2 155 1.0 0.0 -es 02_wind_on 2 155 1.0 0.0 -es 03_wind_off 2 155 1.0 0.0 -es 04_res 2 155 1.0 0.0 -es 05_nuclear 2 155 1.0 0.0 -es 06_coal 2 155 1.0 0.0 -es 07_gas 2 155 1.0 0.0 -es 08_non-res 2 155 1.0 0.0 +es 01_solar 2 155 0.0 1.0 +es 02_wind_on 2 155 0.0 1.0 +es 03_wind_off 2 155 0.0 1.0 +es 04_res 2 155 0.0 1.0 +es 05_nuclear 2 155 0.0 1.0 +es 06_coal 2 155 0.0 1.0 +es 07_gas 2 155 0.0 1.0 +es 08_non-res 2 155 0.0 1.0 es 09_hydro_pump 2 155 0.0 0.0 -es 01_solar 2 156 1.0 0.0 -es 02_wind_on 2 156 1.0 0.0 -es 03_wind_off 2 156 1.0 0.0 -es 04_res 2 156 1.0 0.0 -es 05_nuclear 2 156 1.0 0.0 -es 06_coal 2 156 1.0 0.0 -es 07_gas 2 156 1.0 0.0 -es 08_non-res 2 156 1.0 0.0 +es 01_solar 2 156 0.0 1.0 +es 02_wind_on 2 156 0.0 1.0 +es 03_wind_off 2 156 0.0 1.0 +es 04_res 2 156 0.0 1.0 +es 05_nuclear 2 156 0.0 1.0 +es 06_coal 2 156 0.0 1.0 +es 07_gas 2 156 0.0 1.0 +es 08_non-res 2 156 0.0 1.0 es 09_hydro_pump 2 156 0.0 0.0 -es 01_solar 2 157 1.0 0.0 -es 02_wind_on 2 157 1.0 0.0 -es 03_wind_off 2 157 1.0 0.0 -es 04_res 2 157 1.0 0.0 -es 05_nuclear 2 157 1.0 0.0 -es 06_coal 2 157 1.0 0.0 -es 07_gas 2 157 1.0 0.0 -es 08_non-res 2 157 1.0 0.0 +es 01_solar 2 157 0.0 1.0 +es 02_wind_on 2 157 0.0 1.0 +es 03_wind_off 2 157 0.0 1.0 +es 04_res 2 157 0.0 1.0 +es 05_nuclear 2 157 0.0 1.0 +es 06_coal 2 157 0.0 1.0 +es 07_gas 2 157 0.0 1.0 +es 08_non-res 2 157 0.0 1.0 es 09_hydro_pump 2 157 0.0 0.0 -es 01_solar 2 158 1.0 0.0 -es 02_wind_on 2 158 1.0 0.0 -es 03_wind_off 2 158 1.0 0.0 -es 04_res 2 158 1.0 0.0 -es 05_nuclear 2 158 1.0 0.0 -es 06_coal 2 158 1.0 0.0 -es 07_gas 2 158 1.0 0.0 -es 08_non-res 2 158 1.0 0.0 +es 01_solar 2 158 0.0 1.0 +es 02_wind_on 2 158 0.0 1.0 +es 03_wind_off 2 158 0.0 1.0 +es 04_res 2 158 0.0 1.0 +es 05_nuclear 2 158 0.0 1.0 +es 06_coal 2 158 0.0 1.0 +es 07_gas 2 158 0.0 1.0 +es 08_non-res 2 158 0.0 1.0 es 09_hydro_pump 2 158 0.0 0.0 -es 01_solar 2 159 1.0 0.0 -es 02_wind_on 2 159 1.0 0.0 -es 03_wind_off 2 159 1.0 0.0 -es 04_res 2 159 1.0 0.0 -es 05_nuclear 2 159 1.0 0.0 -es 06_coal 2 159 1.0 0.0 -es 07_gas 2 159 1.0 0.0 -es 08_non-res 2 159 1.0 0.0 +es 01_solar 2 159 0.0 1.0 +es 02_wind_on 2 159 0.0 1.0 +es 03_wind_off 2 159 0.0 1.0 +es 04_res 2 159 0.0 1.0 +es 05_nuclear 2 159 0.0 1.0 +es 06_coal 2 159 0.0 1.0 +es 07_gas 2 159 0.0 1.0 +es 08_non-res 2 159 0.0 1.0 es 09_hydro_pump 2 159 0.0 0.0 -es 01_solar 2 160 1.0 0.0 -es 02_wind_on 2 160 1.0 0.0 -es 03_wind_off 2 160 1.0 0.0 -es 04_res 2 160 1.0 0.0 -es 05_nuclear 2 160 1.0 0.0 -es 06_coal 2 160 1.0 0.0 -es 07_gas 2 160 1.0 0.0 -es 08_non-res 2 160 1.0 0.0 +es 01_solar 2 160 0.0 1.0 +es 02_wind_on 2 160 0.0 1.0 +es 03_wind_off 2 160 0.0 1.0 +es 04_res 2 160 0.0 1.0 +es 05_nuclear 2 160 0.0 1.0 +es 06_coal 2 160 0.0 1.0 +es 07_gas 2 160 0.0 1.0 +es 08_non-res 2 160 0.0 1.0 es 09_hydro_pump 2 160 0.0 0.0 -es 01_solar 2 161 1.0 0.0 -es 02_wind_on 2 161 1.0 0.0 -es 03_wind_off 2 161 1.0 0.0 -es 04_res 2 161 1.0 0.0 -es 05_nuclear 2 161 1.0 0.0 -es 06_coal 2 161 1.0 0.0 -es 07_gas 2 161 1.0 0.0 -es 08_non-res 2 161 1.0 0.0 +es 01_solar 2 161 0.0 1.0 +es 02_wind_on 2 161 0.0 1.0 +es 03_wind_off 2 161 0.0 1.0 +es 04_res 2 161 0.0 1.0 +es 05_nuclear 2 161 0.0 1.0 +es 06_coal 2 161 0.0 1.0 +es 07_gas 2 161 0.0 1.0 +es 08_non-res 2 161 0.0 1.0 es 09_hydro_pump 2 161 0.0 0.0 -es 01_solar 2 162 1.0 0.0 -es 02_wind_on 2 162 1.0 0.0 -es 03_wind_off 2 162 1.0 0.0 -es 04_res 2 162 1.0 0.0 -es 05_nuclear 2 162 1.0 0.0 -es 06_coal 2 162 1.0 0.0 -es 07_gas 2 162 1.0 0.0 -es 08_non-res 2 162 1.0 0.0 -es 09_hydro_pump 2 162 1.0 0.0 -es 01_solar 2 163 1.0 0.0 -es 02_wind_on 2 163 1.0 0.0 -es 03_wind_off 2 163 1.0 0.0 -es 04_res 2 163 1.0 0.0 -es 05_nuclear 2 163 1.0 0.0 -es 06_coal 2 163 1.0 0.0 -es 07_gas 2 163 1.0 0.0 -es 08_non-res 2 163 1.0 0.0 -es 09_hydro_pump 2 163 1.0 0.0 -es 01_solar 2 164 1.0 0.0 -es 02_wind_on 2 164 1.0 0.0 -es 03_wind_off 2 164 1.0 0.0 -es 04_res 2 164 1.0 0.0 -es 05_nuclear 2 164 1.0 0.0 -es 06_coal 2 164 1.0 0.0 -es 07_gas 2 164 1.0 0.0 -es 08_non-res 2 164 1.0 0.0 -es 09_hydro_pump 2 164 1.0 0.0 -es 01_solar 2 165 1.0 0.0 -es 02_wind_on 2 165 1.0 0.0 -es 03_wind_off 2 165 1.0 0.0 -es 04_res 2 165 1.0 0.0 -es 05_nuclear 2 165 1.0 0.0 -es 06_coal 2 165 1.0 0.0 -es 07_gas 2 165 1.0 0.0 -es 08_non-res 2 165 1.0 0.0 -es 09_hydro_pump 2 165 1.0 0.0 -es 01_solar 2 166 1.0 0.0 -es 02_wind_on 2 166 1.0 0.0 -es 03_wind_off 2 166 1.0 0.0 -es 04_res 2 166 1.0 0.0 -es 05_nuclear 2 166 1.0 0.0 -es 06_coal 2 166 1.0 0.0 -es 07_gas 2 166 1.0 0.0 -es 08_non-res 2 166 1.0 0.0 -es 09_hydro_pump 2 166 1.0 0.0 -es 01_solar 2 167 1.0 0.0 -es 02_wind_on 2 167 1.0 0.0 -es 03_wind_off 2 167 1.0 0.0 -es 04_res 2 167 1.0 0.0 -es 05_nuclear 2 167 1.0 0.0 -es 06_coal 2 167 1.0 0.0 -es 07_gas 2 167 1.0 0.0 -es 08_non-res 2 167 1.0 0.0 -es 09_hydro_pump 2 167 1.0 0.0 -es 01_solar 2 168 1.0 0.0 -es 02_wind_on 2 168 1.0 0.0 -es 03_wind_off 2 168 1.0 0.0 -es 04_res 2 168 1.0 0.0 -es 05_nuclear 2 168 1.0 0.0 -es 06_coal 2 168 1.0 0.0 -es 07_gas 2 168 1.0 0.0 -es 08_non-res 2 168 1.0 0.0 -es 09_hydro_pump 2 168 1.0 0.0 +es 01_solar 2 162 0.0 1.0 +es 02_wind_on 2 162 0.0 1.0 +es 03_wind_off 2 162 0.0 1.0 +es 04_res 2 162 0.0 1.0 +es 05_nuclear 2 162 0.0 1.0 +es 06_coal 2 162 0.0 1.0 +es 07_gas 2 162 0.0 1.0 +es 08_non-res 2 162 0.0 1.0 +es 09_hydro_pump 2 162 0.0 1.0 +es 01_solar 2 163 0.0 1.0 +es 02_wind_on 2 163 0.0 1.0 +es 03_wind_off 2 163 0.0 1.0 +es 04_res 2 163 0.0 1.0 +es 05_nuclear 2 163 0.0 1.0 +es 06_coal 2 163 0.0 1.0 +es 07_gas 2 163 0.0 1.0 +es 08_non-res 2 163 0.0 1.0 +es 09_hydro_pump 2 163 0.0 1.0 +es 01_solar 2 164 0.0 1.0 +es 02_wind_on 2 164 0.0 1.0 +es 03_wind_off 2 164 0.0 1.0 +es 04_res 2 164 0.0 1.0 +es 05_nuclear 2 164 0.0 1.0 +es 06_coal 2 164 0.0 1.0 +es 07_gas 2 164 0.0 1.0 +es 08_non-res 2 164 0.0 1.0 +es 09_hydro_pump 2 164 0.0 1.0 +es 01_solar 2 165 0.0 1.0 +es 02_wind_on 2 165 0.0 1.0 +es 03_wind_off 2 165 0.0 1.0 +es 04_res 2 165 0.0 1.0 +es 05_nuclear 2 165 0.0 1.0 +es 06_coal 2 165 0.0 1.0 +es 07_gas 2 165 0.0 1.0 +es 08_non-res 2 165 0.0 1.0 +es 09_hydro_pump 2 165 0.0 1.0 +es 01_solar 2 166 0.0 1.0 +es 02_wind_on 2 166 0.0 1.0 +es 03_wind_off 2 166 0.0 1.0 +es 04_res 2 166 0.0 1.0 +es 05_nuclear 2 166 0.0 1.0 +es 06_coal 2 166 0.0 1.0 +es 07_gas 2 166 0.0 1.0 +es 08_non-res 2 166 0.0 1.0 +es 09_hydro_pump 2 166 0.0 1.0 +es 01_solar 2 167 0.0 1.0 +es 02_wind_on 2 167 0.0 1.0 +es 03_wind_off 2 167 0.0 1.0 +es 04_res 2 167 0.0 1.0 +es 05_nuclear 2 167 0.0 1.0 +es 06_coal 2 167 0.0 1.0 +es 07_gas 2 167 0.0 1.0 +es 08_non-res 2 167 0.0 1.0 +es 09_hydro_pump 2 167 0.0 1.0 +es 01_solar 2 168 0.0 1.0 +es 02_wind_on 2 168 0.0 1.0 +es 03_wind_off 2 168 0.0 1.0 +es 04_res 2 168 0.0 1.0 +es 05_nuclear 2 168 0.0 1.0 +es 06_coal 2 168 0.0 1.0 +es 07_gas 2 168 0.0 1.0 +es 08_non-res 2 168 0.0 1.0 +es 09_hydro_pump 2 168 0.0 1.0 es 01_solar 2 169 0.0 0.0 es 02_wind_on 2 169 0.0 0.0 es 03_wind_off 2 169 0.0 0.0 @@ -16640,7 +16640,7 @@ es 06_coal 2 169 0.0 0.0 es 07_gas 2 169 0.0 0.0 es 08_non-res 2 169 0.0 0.0 es 09_hydro_pump 2 169 0.0 0.0 -es 01_solar 2 170 1.0 0.0 +es 01_solar 2 170 0.0 1.0 es 02_wind_on 2 170 0.0 0.0 es 03_wind_off 2 170 0.0 0.0 es 04_res 2 170 0.0 0.0 @@ -16649,7 +16649,7 @@ es 06_coal 2 170 0.0 0.0 es 07_gas 2 170 0.0 0.0 es 08_non-res 2 170 0.0 0.0 es 09_hydro_pump 2 170 0.0 0.0 -es 01_solar 2 171 1.0 0.0 +es 01_solar 2 171 0.0 1.0 es 02_wind_on 2 171 0.0 0.0 es 03_wind_off 2 171 0.0 0.0 es 04_res 2 171 0.0 0.0 @@ -16658,7 +16658,7 @@ es 06_coal 2 171 0.0 0.0 es 07_gas 2 171 0.0 0.0 es 08_non-res 2 171 0.0 0.0 es 09_hydro_pump 2 171 0.0 0.0 -es 01_solar 2 172 1.0 0.0 +es 01_solar 2 172 0.0 1.0 es 02_wind_on 2 172 0.0 0.0 es 03_wind_off 2 172 0.0 0.0 es 04_res 2 172 0.0 0.0 @@ -16667,7 +16667,7 @@ es 06_coal 2 172 0.0 0.0 es 07_gas 2 172 0.0 0.0 es 08_non-res 2 172 0.0 0.0 es 09_hydro_pump 2 172 0.0 0.0 -es 01_solar 2 173 1.0 0.0 +es 01_solar 2 173 0.0 1.0 es 02_wind_on 2 173 0.0 0.0 es 03_wind_off 2 173 0.0 0.0 es 04_res 2 173 0.0 0.0 @@ -16676,7 +16676,7 @@ es 06_coal 2 173 0.0 0.0 es 07_gas 2 173 0.0 0.0 es 08_non-res 2 173 0.0 0.0 es 09_hydro_pump 2 173 0.0 0.0 -es 01_solar 2 174 1.0 0.0 +es 01_solar 2 174 0.0 1.0 es 02_wind_on 2 174 0.0 0.0 es 03_wind_off 2 174 0.0 0.0 es 04_res 2 174 0.0 0.0 @@ -16685,7 +16685,7 @@ es 06_coal 2 174 0.0 0.0 es 07_gas 2 174 0.0 0.0 es 08_non-res 2 174 0.0 0.0 es 09_hydro_pump 2 174 0.0 0.0 -es 01_solar 2 175 1.0 0.0 +es 01_solar 2 175 0.0 1.0 es 02_wind_on 2 175 0.0 0.0 es 03_wind_off 2 175 0.0 0.0 es 04_res 2 175 0.0 0.0 @@ -16694,7 +16694,7 @@ es 06_coal 2 175 0.0 0.0 es 07_gas 2 175 0.0 0.0 es 08_non-res 2 175 0.0 0.0 es 09_hydro_pump 2 175 0.0 0.0 -es 01_solar 2 176 1.0 0.0 +es 01_solar 2 176 0.0 1.0 es 02_wind_on 2 176 0.0 0.0 es 03_wind_off 2 176 0.0 0.0 es 04_res 2 176 0.0 0.0 @@ -16703,7 +16703,7 @@ es 06_coal 2 176 0.0 0.0 es 07_gas 2 176 0.0 0.0 es 08_non-res 2 176 0.0 0.0 es 09_hydro_pump 2 176 0.0 0.0 -es 01_solar 2 177 1.0 0.0 +es 01_solar 2 177 0.0 1.0 es 02_wind_on 2 177 0.0 0.0 es 03_wind_off 2 177 0.0 0.0 es 04_res 2 177 0.0 0.0 @@ -16712,7 +16712,7 @@ es 06_coal 2 177 0.0 0.0 es 07_gas 2 177 0.0 0.0 es 08_non-res 2 177 0.0 0.0 es 09_hydro_pump 2 177 0.0 0.0 -es 01_solar 2 178 1.0 0.0 +es 01_solar 2 178 0.0 1.0 es 02_wind_on 2 178 0.0 0.0 es 03_wind_off 2 178 0.0 0.0 es 04_res 2 178 0.0 0.0 @@ -16721,7 +16721,7 @@ es 06_coal 2 178 0.0 0.0 es 07_gas 2 178 0.0 0.0 es 08_non-res 2 178 0.0 0.0 es 09_hydro_pump 2 178 0.0 0.0 -es 01_solar 2 179 1.0 0.0 +es 01_solar 2 179 0.0 1.0 es 02_wind_on 2 179 0.0 0.0 es 03_wind_off 2 179 0.0 0.0 es 04_res 2 179 0.0 0.0 @@ -16730,7 +16730,7 @@ es 06_coal 2 179 0.0 0.0 es 07_gas 2 179 0.0 0.0 es 08_non-res 2 179 0.0 0.0 es 09_hydro_pump 2 179 0.0 0.0 -es 01_solar 2 180 1.0 0.0 +es 01_solar 2 180 0.0 1.0 es 02_wind_on 2 180 0.0 0.0 es 03_wind_off 2 180 0.0 0.0 es 04_res 2 180 0.0 0.0 @@ -16739,7 +16739,7 @@ es 06_coal 2 180 0.0 0.0 es 07_gas 2 180 0.0 0.0 es 08_non-res 2 180 0.0 0.0 es 09_hydro_pump 2 180 0.0 0.0 -es 01_solar 2 181 1.0 0.0 +es 01_solar 2 181 0.0 1.0 es 02_wind_on 2 181 0.0 0.0 es 03_wind_off 2 181 0.0 0.0 es 04_res 2 181 0.0 0.0 @@ -16748,7 +16748,7 @@ es 06_coal 2 181 0.0 0.0 es 07_gas 2 181 0.0 0.0 es 08_non-res 2 181 0.0 0.0 es 09_hydro_pump 2 181 0.0 0.0 -es 01_solar 2 182 1.0 0.0 +es 01_solar 2 182 0.0 1.0 es 02_wind_on 2 182 0.0 0.0 es 03_wind_off 2 182 0.0 0.0 es 04_res 2 182 0.0 0.0 @@ -16757,7 +16757,7 @@ es 06_coal 2 182 0.0 0.0 es 07_gas 2 182 0.0 0.0 es 08_non-res 2 182 0.0 0.0 es 09_hydro_pump 2 182 0.0 0.0 -es 01_solar 2 183 1.0 0.0 +es 01_solar 2 183 0.0 1.0 es 02_wind_on 2 183 0.0 0.0 es 03_wind_off 2 183 0.0 0.0 es 04_res 2 183 0.0 0.0 @@ -16766,7 +16766,7 @@ es 06_coal 2 183 0.0 0.0 es 07_gas 2 183 0.0 0.0 es 08_non-res 2 183 0.0 0.0 es 09_hydro_pump 2 183 0.0 0.0 -es 01_solar 2 184 1.0 0.0 +es 01_solar 2 184 0.0 1.0 es 02_wind_on 2 184 0.0 0.0 es 03_wind_off 2 184 0.0 0.0 es 04_res 2 184 0.0 0.0 @@ -16775,7 +16775,7 @@ es 06_coal 2 184 0.0 0.0 es 07_gas 2 184 0.0 0.0 es 08_non-res 2 184 0.0 0.0 es 09_hydro_pump 2 184 0.0 0.0 -es 01_solar 2 185 1.0 0.0 +es 01_solar 2 185 0.0 1.0 es 02_wind_on 2 185 0.0 0.0 es 03_wind_off 2 185 0.0 0.0 es 04_res 2 185 0.0 0.0 @@ -16784,7 +16784,7 @@ es 06_coal 2 185 0.0 0.0 es 07_gas 2 185 0.0 0.0 es 08_non-res 2 185 0.0 0.0 es 09_hydro_pump 2 185 0.0 0.0 -es 01_solar 2 186 1.0 0.0 +es 01_solar 2 186 0.0 1.0 es 02_wind_on 2 186 0.0 0.0 es 03_wind_off 2 186 0.0 0.0 es 04_res 2 186 0.0 0.0 @@ -16793,7 +16793,7 @@ es 06_coal 2 186 0.0 0.0 es 07_gas 2 186 0.0 0.0 es 08_non-res 2 186 0.0 0.0 es 09_hydro_pump 2 186 0.0 0.0 -es 01_solar 2 187 1.0 0.0 +es 01_solar 2 187 0.0 1.0 es 02_wind_on 2 187 0.0 0.0 es 03_wind_off 2 187 0.0 0.0 es 04_res 2 187 0.0 0.0 @@ -16802,7 +16802,7 @@ es 06_coal 2 187 0.0 0.0 es 07_gas 2 187 0.0 0.0 es 08_non-res 2 187 0.0 0.0 es 09_hydro_pump 2 187 0.0 0.0 -es 01_solar 2 188 1.0 0.0 +es 01_solar 2 188 0.0 1.0 es 02_wind_on 2 188 0.0 0.0 es 03_wind_off 2 188 0.0 0.0 es 04_res 2 188 0.0 0.0 @@ -16811,7 +16811,7 @@ es 06_coal 2 188 0.0 0.0 es 07_gas 2 188 0.0 0.0 es 08_non-res 2 188 0.0 0.0 es 09_hydro_pump 2 188 0.0 0.0 -es 01_solar 2 189 1.0 0.0 +es 01_solar 2 189 0.0 1.0 es 02_wind_on 2 189 0.0 0.0 es 03_wind_off 2 189 0.0 0.0 es 04_res 2 189 0.0 0.0 @@ -16820,8 +16820,8 @@ es 06_coal 2 189 0.0 0.0 es 07_gas 2 189 0.0 0.0 es 08_non-res 2 189 0.0 0.0 es 09_hydro_pump 2 189 0.0 0.0 -es 01_solar 2 190 1.0 0.0 -es 02_wind_on 2 190 1.0 0.0 +es 01_solar 2 190 0.0 1.0 +es 02_wind_on 2 190 0.0 1.0 es 03_wind_off 2 190 0.0 0.0 es 04_res 2 190 0.0 0.0 es 05_nuclear 2 190 0.0 0.0 @@ -16829,8 +16829,8 @@ es 06_coal 2 190 0.0 0.0 es 07_gas 2 190 0.0 0.0 es 08_non-res 2 190 0.0 0.0 es 09_hydro_pump 2 190 0.0 0.0 -es 01_solar 2 191 1.0 0.0 -es 02_wind_on 2 191 1.0 0.0 +es 01_solar 2 191 0.0 1.0 +es 02_wind_on 2 191 0.0 1.0 es 03_wind_off 2 191 0.0 0.0 es 04_res 2 191 0.0 0.0 es 05_nuclear 2 191 0.0 0.0 @@ -16838,8 +16838,8 @@ es 06_coal 2 191 0.0 0.0 es 07_gas 2 191 0.0 0.0 es 08_non-res 2 191 0.0 0.0 es 09_hydro_pump 2 191 0.0 0.0 -es 01_solar 2 192 1.0 0.0 -es 02_wind_on 2 192 1.0 0.0 +es 01_solar 2 192 0.0 1.0 +es 02_wind_on 2 192 0.0 1.0 es 03_wind_off 2 192 0.0 0.0 es 04_res 2 192 0.0 0.0 es 05_nuclear 2 192 0.0 0.0 @@ -16847,8 +16847,8 @@ es 06_coal 2 192 0.0 0.0 es 07_gas 2 192 0.0 0.0 es 08_non-res 2 192 0.0 0.0 es 09_hydro_pump 2 192 0.0 0.0 -es 01_solar 2 193 1.0 0.0 -es 02_wind_on 2 193 1.0 0.0 +es 01_solar 2 193 0.0 1.0 +es 02_wind_on 2 193 0.0 1.0 es 03_wind_off 2 193 0.0 0.0 es 04_res 2 193 0.0 0.0 es 05_nuclear 2 193 0.0 0.0 @@ -16856,8 +16856,8 @@ es 06_coal 2 193 0.0 0.0 es 07_gas 2 193 0.0 0.0 es 08_non-res 2 193 0.0 0.0 es 09_hydro_pump 2 193 0.0 0.0 -es 01_solar 2 194 1.0 0.0 -es 02_wind_on 2 194 1.0 0.0 +es 01_solar 2 194 0.0 1.0 +es 02_wind_on 2 194 0.0 1.0 es 03_wind_off 2 194 0.0 0.0 es 04_res 2 194 0.0 0.0 es 05_nuclear 2 194 0.0 0.0 @@ -16865,8 +16865,8 @@ es 06_coal 2 194 0.0 0.0 es 07_gas 2 194 0.0 0.0 es 08_non-res 2 194 0.0 0.0 es 09_hydro_pump 2 194 0.0 0.0 -es 01_solar 2 195 1.0 0.0 -es 02_wind_on 2 195 1.0 0.0 +es 01_solar 2 195 0.0 1.0 +es 02_wind_on 2 195 0.0 1.0 es 03_wind_off 2 195 0.0 0.0 es 04_res 2 195 0.0 0.0 es 05_nuclear 2 195 0.0 0.0 @@ -16874,8 +16874,8 @@ es 06_coal 2 195 0.0 0.0 es 07_gas 2 195 0.0 0.0 es 08_non-res 2 195 0.0 0.0 es 09_hydro_pump 2 195 0.0 0.0 -es 01_solar 2 196 1.0 0.0 -es 02_wind_on 2 196 1.0 0.0 +es 01_solar 2 196 0.0 1.0 +es 02_wind_on 2 196 0.0 1.0 es 03_wind_off 2 196 0.0 0.0 es 04_res 2 196 0.0 0.0 es 05_nuclear 2 196 0.0 0.0 @@ -16883,8 +16883,8 @@ es 06_coal 2 196 0.0 0.0 es 07_gas 2 196 0.0 0.0 es 08_non-res 2 196 0.0 0.0 es 09_hydro_pump 2 196 0.0 0.0 -es 01_solar 2 197 1.0 0.0 -es 02_wind_on 2 197 1.0 0.0 +es 01_solar 2 197 0.0 1.0 +es 02_wind_on 2 197 0.0 1.0 es 03_wind_off 2 197 0.0 0.0 es 04_res 2 197 0.0 0.0 es 05_nuclear 2 197 0.0 0.0 @@ -16892,8 +16892,8 @@ es 06_coal 2 197 0.0 0.0 es 07_gas 2 197 0.0 0.0 es 08_non-res 2 197 0.0 0.0 es 09_hydro_pump 2 197 0.0 0.0 -es 01_solar 2 198 1.0 0.0 -es 02_wind_on 2 198 1.0 0.0 +es 01_solar 2 198 0.0 1.0 +es 02_wind_on 2 198 0.0 1.0 es 03_wind_off 2 198 0.0 0.0 es 04_res 2 198 0.0 0.0 es 05_nuclear 2 198 0.0 0.0 @@ -16901,8 +16901,8 @@ es 06_coal 2 198 0.0 0.0 es 07_gas 2 198 0.0 0.0 es 08_non-res 2 198 0.0 0.0 es 09_hydro_pump 2 198 0.0 0.0 -es 01_solar 2 199 1.0 0.0 -es 02_wind_on 2 199 1.0 0.0 +es 01_solar 2 199 0.0 1.0 +es 02_wind_on 2 199 0.0 1.0 es 03_wind_off 2 199 0.0 0.0 es 04_res 2 199 0.0 0.0 es 05_nuclear 2 199 0.0 0.0 @@ -16910,8 +16910,8 @@ es 06_coal 2 199 0.0 0.0 es 07_gas 2 199 0.0 0.0 es 08_non-res 2 199 0.0 0.0 es 09_hydro_pump 2 199 0.0 0.0 -es 01_solar 2 200 1.0 0.0 -es 02_wind_on 2 200 1.0 0.0 +es 01_solar 2 200 0.0 1.0 +es 02_wind_on 2 200 0.0 1.0 es 03_wind_off 2 200 0.0 0.0 es 04_res 2 200 0.0 0.0 es 05_nuclear 2 200 0.0 0.0 @@ -16919,8 +16919,8 @@ es 06_coal 2 200 0.0 0.0 es 07_gas 2 200 0.0 0.0 es 08_non-res 2 200 0.0 0.0 es 09_hydro_pump 2 200 0.0 0.0 -es 01_solar 2 201 1.0 0.0 -es 02_wind_on 2 201 1.0 0.0 +es 01_solar 2 201 0.0 1.0 +es 02_wind_on 2 201 0.0 1.0 es 03_wind_off 2 201 0.0 0.0 es 04_res 2 201 0.0 0.0 es 05_nuclear 2 201 0.0 0.0 @@ -16928,8 +16928,8 @@ es 06_coal 2 201 0.0 0.0 es 07_gas 2 201 0.0 0.0 es 08_non-res 2 201 0.0 0.0 es 09_hydro_pump 2 201 0.0 0.0 -es 01_solar 2 202 1.0 0.0 -es 02_wind_on 2 202 1.0 0.0 +es 01_solar 2 202 0.0 1.0 +es 02_wind_on 2 202 0.0 1.0 es 03_wind_off 2 202 0.0 0.0 es 04_res 2 202 0.0 0.0 es 05_nuclear 2 202 0.0 0.0 @@ -16937,8 +16937,8 @@ es 06_coal 2 202 0.0 0.0 es 07_gas 2 202 0.0 0.0 es 08_non-res 2 202 0.0 0.0 es 09_hydro_pump 2 202 0.0 0.0 -es 01_solar 2 203 1.0 0.0 -es 02_wind_on 2 203 1.0 0.0 +es 01_solar 2 203 0.0 1.0 +es 02_wind_on 2 203 0.0 1.0 es 03_wind_off 2 203 0.0 0.0 es 04_res 2 203 0.0 0.0 es 05_nuclear 2 203 0.0 0.0 @@ -16946,8 +16946,8 @@ es 06_coal 2 203 0.0 0.0 es 07_gas 2 203 0.0 0.0 es 08_non-res 2 203 0.0 0.0 es 09_hydro_pump 2 203 0.0 0.0 -es 01_solar 2 204 1.0 0.0 -es 02_wind_on 2 204 1.0 0.0 +es 01_solar 2 204 0.0 1.0 +es 02_wind_on 2 204 0.0 1.0 es 03_wind_off 2 204 0.0 0.0 es 04_res 2 204 0.0 0.0 es 05_nuclear 2 204 0.0 0.0 @@ -16955,8 +16955,8 @@ es 06_coal 2 204 0.0 0.0 es 07_gas 2 204 0.0 0.0 es 08_non-res 2 204 0.0 0.0 es 09_hydro_pump 2 204 0.0 0.0 -es 01_solar 2 205 1.0 0.0 -es 02_wind_on 2 205 1.0 0.0 +es 01_solar 2 205 0.0 1.0 +es 02_wind_on 2 205 0.0 1.0 es 03_wind_off 2 205 0.0 0.0 es 04_res 2 205 0.0 0.0 es 05_nuclear 2 205 0.0 0.0 @@ -16964,8 +16964,8 @@ es 06_coal 2 205 0.0 0.0 es 07_gas 2 205 0.0 0.0 es 08_non-res 2 205 0.0 0.0 es 09_hydro_pump 2 205 0.0 0.0 -es 01_solar 2 206 1.0 0.0 -es 02_wind_on 2 206 1.0 0.0 +es 01_solar 2 206 0.0 1.0 +es 02_wind_on 2 206 0.0 1.0 es 03_wind_off 2 206 0.0 0.0 es 04_res 2 206 0.0 0.0 es 05_nuclear 2 206 0.0 0.0 @@ -16973,8 +16973,8 @@ es 06_coal 2 206 0.0 0.0 es 07_gas 2 206 0.0 0.0 es 08_non-res 2 206 0.0 0.0 es 09_hydro_pump 2 206 0.0 0.0 -es 01_solar 2 207 1.0 0.0 -es 02_wind_on 2 207 1.0 0.0 +es 01_solar 2 207 0.0 1.0 +es 02_wind_on 2 207 0.0 1.0 es 03_wind_off 2 207 0.0 0.0 es 04_res 2 207 0.0 0.0 es 05_nuclear 2 207 0.0 0.0 @@ -16982,8 +16982,8 @@ es 06_coal 2 207 0.0 0.0 es 07_gas 2 207 0.0 0.0 es 08_non-res 2 207 0.0 0.0 es 09_hydro_pump 2 207 0.0 0.0 -es 01_solar 2 208 1.0 0.0 -es 02_wind_on 2 208 1.0 0.0 +es 01_solar 2 208 0.0 1.0 +es 02_wind_on 2 208 0.0 1.0 es 03_wind_off 2 208 0.0 0.0 es 04_res 2 208 0.0 0.0 es 05_nuclear 2 208 0.0 0.0 @@ -16991,8 +16991,8 @@ es 06_coal 2 208 0.0 0.0 es 07_gas 2 208 0.0 0.0 es 08_non-res 2 208 0.0 0.0 es 09_hydro_pump 2 208 0.0 0.0 -es 01_solar 2 209 1.0 0.0 -es 02_wind_on 2 209 1.0 0.0 +es 01_solar 2 209 0.0 1.0 +es 02_wind_on 2 209 0.0 1.0 es 03_wind_off 2 209 0.0 0.0 es 04_res 2 209 0.0 0.0 es 05_nuclear 2 209 0.0 0.0 @@ -17000,1149 +17000,1149 @@ es 06_coal 2 209 0.0 0.0 es 07_gas 2 209 0.0 0.0 es 08_non-res 2 209 0.0 0.0 es 09_hydro_pump 2 209 0.0 0.0 -es 01_solar 2 210 1.0 0.0 -es 02_wind_on 2 210 1.0 0.0 -es 03_wind_off 2 210 1.0 0.0 +es 01_solar 2 210 0.0 1.0 +es 02_wind_on 2 210 0.0 1.0 +es 03_wind_off 2 210 0.0 1.0 es 04_res 2 210 0.0 0.0 es 05_nuclear 2 210 0.0 0.0 es 06_coal 2 210 0.0 0.0 es 07_gas 2 210 0.0 0.0 es 08_non-res 2 210 0.0 0.0 es 09_hydro_pump 2 210 0.0 0.0 -es 01_solar 2 211 1.0 0.0 -es 02_wind_on 2 211 1.0 0.0 -es 03_wind_off 2 211 1.0 0.0 +es 01_solar 2 211 0.0 1.0 +es 02_wind_on 2 211 0.0 1.0 +es 03_wind_off 2 211 0.0 1.0 es 04_res 2 211 0.0 0.0 es 05_nuclear 2 211 0.0 0.0 es 06_coal 2 211 0.0 0.0 es 07_gas 2 211 0.0 0.0 es 08_non-res 2 211 0.0 0.0 es 09_hydro_pump 2 211 0.0 0.0 -es 01_solar 2 212 1.0 0.0 -es 02_wind_on 2 212 1.0 0.0 -es 03_wind_off 2 212 1.0 0.0 +es 01_solar 2 212 0.0 1.0 +es 02_wind_on 2 212 0.0 1.0 +es 03_wind_off 2 212 0.0 1.0 es 04_res 2 212 0.0 0.0 es 05_nuclear 2 212 0.0 0.0 es 06_coal 2 212 0.0 0.0 es 07_gas 2 212 0.0 0.0 es 08_non-res 2 212 0.0 0.0 es 09_hydro_pump 2 212 0.0 0.0 -es 01_solar 2 213 1.0 0.0 -es 02_wind_on 2 213 1.0 0.0 -es 03_wind_off 2 213 1.0 0.0 +es 01_solar 2 213 0.0 1.0 +es 02_wind_on 2 213 0.0 1.0 +es 03_wind_off 2 213 0.0 1.0 es 04_res 2 213 0.0 0.0 es 05_nuclear 2 213 0.0 0.0 es 06_coal 2 213 0.0 0.0 es 07_gas 2 213 0.0 0.0 es 08_non-res 2 213 0.0 0.0 es 09_hydro_pump 2 213 0.0 0.0 -es 01_solar 2 214 1.0 0.0 -es 02_wind_on 2 214 1.0 0.0 -es 03_wind_off 2 214 1.0 0.0 +es 01_solar 2 214 0.0 1.0 +es 02_wind_on 2 214 0.0 1.0 +es 03_wind_off 2 214 0.0 1.0 es 04_res 2 214 0.0 0.0 es 05_nuclear 2 214 0.0 0.0 es 06_coal 2 214 0.0 0.0 es 07_gas 2 214 0.0 0.0 es 08_non-res 2 214 0.0 0.0 es 09_hydro_pump 2 214 0.0 0.0 -es 01_solar 2 215 1.0 0.0 -es 02_wind_on 2 215 1.0 0.0 -es 03_wind_off 2 215 1.0 0.0 +es 01_solar 2 215 0.0 1.0 +es 02_wind_on 2 215 0.0 1.0 +es 03_wind_off 2 215 0.0 1.0 es 04_res 2 215 0.0 0.0 es 05_nuclear 2 215 0.0 0.0 es 06_coal 2 215 0.0 0.0 es 07_gas 2 215 0.0 0.0 es 08_non-res 2 215 0.0 0.0 es 09_hydro_pump 2 215 0.0 0.0 -es 01_solar 2 216 1.0 0.0 -es 02_wind_on 2 216 1.0 0.0 -es 03_wind_off 2 216 1.0 0.0 +es 01_solar 2 216 0.0 1.0 +es 02_wind_on 2 216 0.0 1.0 +es 03_wind_off 2 216 0.0 1.0 es 04_res 2 216 0.0 0.0 es 05_nuclear 2 216 0.0 0.0 es 06_coal 2 216 0.0 0.0 es 07_gas 2 216 0.0 0.0 es 08_non-res 2 216 0.0 0.0 es 09_hydro_pump 2 216 0.0 0.0 -es 01_solar 2 217 1.0 0.0 -es 02_wind_on 2 217 1.0 0.0 -es 03_wind_off 2 217 1.0 0.0 +es 01_solar 2 217 0.0 1.0 +es 02_wind_on 2 217 0.0 1.0 +es 03_wind_off 2 217 0.0 1.0 es 04_res 2 217 0.0 0.0 es 05_nuclear 2 217 0.0 0.0 es 06_coal 2 217 0.0 0.0 es 07_gas 2 217 0.0 0.0 es 08_non-res 2 217 0.0 0.0 es 09_hydro_pump 2 217 0.0 0.0 -es 01_solar 2 218 1.0 0.0 -es 02_wind_on 2 218 1.0 0.0 -es 03_wind_off 2 218 1.0 0.0 +es 01_solar 2 218 0.0 1.0 +es 02_wind_on 2 218 0.0 1.0 +es 03_wind_off 2 218 0.0 1.0 es 04_res 2 218 0.0 0.0 es 05_nuclear 2 218 0.0 0.0 es 06_coal 2 218 0.0 0.0 es 07_gas 2 218 0.0 0.0 es 08_non-res 2 218 0.0 0.0 es 09_hydro_pump 2 218 0.0 0.0 -es 01_solar 2 219 1.0 0.0 -es 02_wind_on 2 219 1.0 0.0 -es 03_wind_off 2 219 1.0 0.0 +es 01_solar 2 219 0.0 1.0 +es 02_wind_on 2 219 0.0 1.0 +es 03_wind_off 2 219 0.0 1.0 es 04_res 2 219 0.0 0.0 es 05_nuclear 2 219 0.0 0.0 es 06_coal 2 219 0.0 0.0 es 07_gas 2 219 0.0 0.0 es 08_non-res 2 219 0.0 0.0 es 09_hydro_pump 2 219 0.0 0.0 -es 01_solar 2 220 1.0 0.0 -es 02_wind_on 2 220 1.0 0.0 -es 03_wind_off 2 220 1.0 0.0 +es 01_solar 2 220 0.0 1.0 +es 02_wind_on 2 220 0.0 1.0 +es 03_wind_off 2 220 0.0 1.0 es 04_res 2 220 0.0 0.0 es 05_nuclear 2 220 0.0 0.0 es 06_coal 2 220 0.0 0.0 es 07_gas 2 220 0.0 0.0 es 08_non-res 2 220 0.0 0.0 es 09_hydro_pump 2 220 0.0 0.0 -es 01_solar 2 221 1.0 0.0 -es 02_wind_on 2 221 1.0 0.0 -es 03_wind_off 2 221 1.0 0.0 +es 01_solar 2 221 0.0 1.0 +es 02_wind_on 2 221 0.0 1.0 +es 03_wind_off 2 221 0.0 1.0 es 04_res 2 221 0.0 0.0 es 05_nuclear 2 221 0.0 0.0 es 06_coal 2 221 0.0 0.0 es 07_gas 2 221 0.0 0.0 es 08_non-res 2 221 0.0 0.0 es 09_hydro_pump 2 221 0.0 0.0 -es 01_solar 2 222 1.0 0.0 -es 02_wind_on 2 222 1.0 0.0 -es 03_wind_off 2 222 1.0 0.0 +es 01_solar 2 222 0.0 1.0 +es 02_wind_on 2 222 0.0 1.0 +es 03_wind_off 2 222 0.0 1.0 es 04_res 2 222 0.0 0.0 es 05_nuclear 2 222 0.0 0.0 es 06_coal 2 222 0.0 0.0 es 07_gas 2 222 0.0 0.0 es 08_non-res 2 222 0.0 0.0 es 09_hydro_pump 2 222 0.0 0.0 -es 01_solar 2 223 1.0 0.0 -es 02_wind_on 2 223 1.0 0.0 -es 03_wind_off 2 223 1.0 0.0 +es 01_solar 2 223 0.0 1.0 +es 02_wind_on 2 223 0.0 1.0 +es 03_wind_off 2 223 0.0 1.0 es 04_res 2 223 0.0 0.0 es 05_nuclear 2 223 0.0 0.0 es 06_coal 2 223 0.0 0.0 es 07_gas 2 223 0.0 0.0 es 08_non-res 2 223 0.0 0.0 es 09_hydro_pump 2 223 0.0 0.0 -es 01_solar 2 224 1.0 0.0 -es 02_wind_on 2 224 1.0 0.0 -es 03_wind_off 2 224 1.0 0.0 +es 01_solar 2 224 0.0 1.0 +es 02_wind_on 2 224 0.0 1.0 +es 03_wind_off 2 224 0.0 1.0 es 04_res 2 224 0.0 0.0 es 05_nuclear 2 224 0.0 0.0 es 06_coal 2 224 0.0 0.0 es 07_gas 2 224 0.0 0.0 es 08_non-res 2 224 0.0 0.0 es 09_hydro_pump 2 224 0.0 0.0 -es 01_solar 2 225 1.0 0.0 -es 02_wind_on 2 225 1.0 0.0 -es 03_wind_off 2 225 1.0 0.0 +es 01_solar 2 225 0.0 1.0 +es 02_wind_on 2 225 0.0 1.0 +es 03_wind_off 2 225 0.0 1.0 es 04_res 2 225 0.0 0.0 es 05_nuclear 2 225 0.0 0.0 es 06_coal 2 225 0.0 0.0 es 07_gas 2 225 0.0 0.0 es 08_non-res 2 225 0.0 0.0 es 09_hydro_pump 2 225 0.0 0.0 -es 01_solar 2 226 1.0 0.0 -es 02_wind_on 2 226 1.0 0.0 -es 03_wind_off 2 226 1.0 0.0 +es 01_solar 2 226 0.0 1.0 +es 02_wind_on 2 226 0.0 1.0 +es 03_wind_off 2 226 0.0 1.0 es 04_res 2 226 0.0 0.0 es 05_nuclear 2 226 0.0 0.0 es 06_coal 2 226 0.0 0.0 es 07_gas 2 226 0.0 0.0 es 08_non-res 2 226 0.0 0.0 es 09_hydro_pump 2 226 0.0 0.0 -es 01_solar 2 227 1.0 0.0 -es 02_wind_on 2 227 1.0 0.0 -es 03_wind_off 2 227 1.0 0.0 +es 01_solar 2 227 0.0 1.0 +es 02_wind_on 2 227 0.0 1.0 +es 03_wind_off 2 227 0.0 1.0 es 04_res 2 227 0.0 0.0 es 05_nuclear 2 227 0.0 0.0 es 06_coal 2 227 0.0 0.0 es 07_gas 2 227 0.0 0.0 es 08_non-res 2 227 0.0 0.0 es 09_hydro_pump 2 227 0.0 0.0 -es 01_solar 2 228 1.0 0.0 -es 02_wind_on 2 228 1.0 0.0 -es 03_wind_off 2 228 1.0 0.0 +es 01_solar 2 228 0.0 1.0 +es 02_wind_on 2 228 0.0 1.0 +es 03_wind_off 2 228 0.0 1.0 es 04_res 2 228 0.0 0.0 es 05_nuclear 2 228 0.0 0.0 es 06_coal 2 228 0.0 0.0 es 07_gas 2 228 0.0 0.0 es 08_non-res 2 228 0.0 0.0 es 09_hydro_pump 2 228 0.0 0.0 -es 01_solar 2 229 1.0 0.0 -es 02_wind_on 2 229 1.0 0.0 -es 03_wind_off 2 229 1.0 0.0 +es 01_solar 2 229 0.0 1.0 +es 02_wind_on 2 229 0.0 1.0 +es 03_wind_off 2 229 0.0 1.0 es 04_res 2 229 0.0 0.0 es 05_nuclear 2 229 0.0 0.0 es 06_coal 2 229 0.0 0.0 es 07_gas 2 229 0.0 0.0 es 08_non-res 2 229 0.0 0.0 es 09_hydro_pump 2 229 0.0 0.0 -es 01_solar 2 230 1.0 0.0 -es 02_wind_on 2 230 1.0 0.0 -es 03_wind_off 2 230 1.0 0.0 -es 04_res 2 230 1.0 0.0 +es 01_solar 2 230 0.0 1.0 +es 02_wind_on 2 230 0.0 1.0 +es 03_wind_off 2 230 0.0 1.0 +es 04_res 2 230 0.0 1.0 es 05_nuclear 2 230 0.0 0.0 es 06_coal 2 230 0.0 0.0 es 07_gas 2 230 0.0 0.0 es 08_non-res 2 230 0.0 0.0 es 09_hydro_pump 2 230 0.0 0.0 -es 01_solar 2 231 1.0 0.0 -es 02_wind_on 2 231 1.0 0.0 -es 03_wind_off 2 231 1.0 0.0 -es 04_res 2 231 1.0 0.0 +es 01_solar 2 231 0.0 1.0 +es 02_wind_on 2 231 0.0 1.0 +es 03_wind_off 2 231 0.0 1.0 +es 04_res 2 231 0.0 1.0 es 05_nuclear 2 231 0.0 0.0 es 06_coal 2 231 0.0 0.0 es 07_gas 2 231 0.0 0.0 es 08_non-res 2 231 0.0 0.0 es 09_hydro_pump 2 231 0.0 0.0 -es 01_solar 2 232 1.0 0.0 -es 02_wind_on 2 232 1.0 0.0 -es 03_wind_off 2 232 1.0 0.0 -es 04_res 2 232 1.0 0.0 +es 01_solar 2 232 0.0 1.0 +es 02_wind_on 2 232 0.0 1.0 +es 03_wind_off 2 232 0.0 1.0 +es 04_res 2 232 0.0 1.0 es 05_nuclear 2 232 0.0 0.0 es 06_coal 2 232 0.0 0.0 es 07_gas 2 232 0.0 0.0 es 08_non-res 2 232 0.0 0.0 es 09_hydro_pump 2 232 0.0 0.0 -es 01_solar 2 233 1.0 0.0 -es 02_wind_on 2 233 1.0 0.0 -es 03_wind_off 2 233 1.0 0.0 -es 04_res 2 233 1.0 0.0 +es 01_solar 2 233 0.0 1.0 +es 02_wind_on 2 233 0.0 1.0 +es 03_wind_off 2 233 0.0 1.0 +es 04_res 2 233 0.0 1.0 es 05_nuclear 2 233 0.0 0.0 es 06_coal 2 233 0.0 0.0 es 07_gas 2 233 0.0 0.0 es 08_non-res 2 233 0.0 0.0 es 09_hydro_pump 2 233 0.0 0.0 -es 01_solar 2 234 1.0 0.0 -es 02_wind_on 2 234 1.0 0.0 -es 03_wind_off 2 234 1.0 0.0 -es 04_res 2 234 1.0 0.0 +es 01_solar 2 234 0.0 1.0 +es 02_wind_on 2 234 0.0 1.0 +es 03_wind_off 2 234 0.0 1.0 +es 04_res 2 234 0.0 1.0 es 05_nuclear 2 234 0.0 0.0 es 06_coal 2 234 0.0 0.0 es 07_gas 2 234 0.0 0.0 es 08_non-res 2 234 0.0 0.0 es 09_hydro_pump 2 234 0.0 0.0 -es 01_solar 2 235 1.0 0.0 -es 02_wind_on 2 235 1.0 0.0 -es 03_wind_off 2 235 1.0 0.0 -es 04_res 2 235 1.0 0.0 +es 01_solar 2 235 0.0 1.0 +es 02_wind_on 2 235 0.0 1.0 +es 03_wind_off 2 235 0.0 1.0 +es 04_res 2 235 0.0 1.0 es 05_nuclear 2 235 0.0 0.0 es 06_coal 2 235 0.0 0.0 es 07_gas 2 235 0.0 0.0 es 08_non-res 2 235 0.0 0.0 es 09_hydro_pump 2 235 0.0 0.0 -es 01_solar 2 236 1.0 0.0 -es 02_wind_on 2 236 1.0 0.0 -es 03_wind_off 2 236 1.0 0.0 -es 04_res 2 236 1.0 0.0 +es 01_solar 2 236 0.0 1.0 +es 02_wind_on 2 236 0.0 1.0 +es 03_wind_off 2 236 0.0 1.0 +es 04_res 2 236 0.0 1.0 es 05_nuclear 2 236 0.0 0.0 es 06_coal 2 236 0.0 0.0 es 07_gas 2 236 0.0 0.0 es 08_non-res 2 236 0.0 0.0 es 09_hydro_pump 2 236 0.0 0.0 -es 01_solar 2 237 1.0 0.0 -es 02_wind_on 2 237 1.0 0.0 -es 03_wind_off 2 237 1.0 0.0 -es 04_res 2 237 1.0 0.0 +es 01_solar 2 237 0.0 1.0 +es 02_wind_on 2 237 0.0 1.0 +es 03_wind_off 2 237 0.0 1.0 +es 04_res 2 237 0.0 1.0 es 05_nuclear 2 237 0.0 0.0 es 06_coal 2 237 0.0 0.0 es 07_gas 2 237 0.0 0.0 es 08_non-res 2 237 0.0 0.0 es 09_hydro_pump 2 237 0.0 0.0 -es 01_solar 2 238 1.0 0.0 -es 02_wind_on 2 238 1.0 0.0 -es 03_wind_off 2 238 1.0 0.0 -es 04_res 2 238 1.0 0.0 +es 01_solar 2 238 0.0 1.0 +es 02_wind_on 2 238 0.0 1.0 +es 03_wind_off 2 238 0.0 1.0 +es 04_res 2 238 0.0 1.0 es 05_nuclear 2 238 0.0 0.0 es 06_coal 2 238 0.0 0.0 es 07_gas 2 238 0.0 0.0 es 08_non-res 2 238 0.0 0.0 es 09_hydro_pump 2 238 0.0 0.0 -es 01_solar 2 239 1.0 0.0 -es 02_wind_on 2 239 1.0 0.0 -es 03_wind_off 2 239 1.0 0.0 -es 04_res 2 239 1.0 0.0 +es 01_solar 2 239 0.0 1.0 +es 02_wind_on 2 239 0.0 1.0 +es 03_wind_off 2 239 0.0 1.0 +es 04_res 2 239 0.0 1.0 es 05_nuclear 2 239 0.0 0.0 es 06_coal 2 239 0.0 0.0 es 07_gas 2 239 0.0 0.0 es 08_non-res 2 239 0.0 0.0 es 09_hydro_pump 2 239 0.0 0.0 -es 01_solar 2 240 1.0 0.0 -es 02_wind_on 2 240 1.0 0.0 -es 03_wind_off 2 240 1.0 0.0 -es 04_res 2 240 1.0 0.0 +es 01_solar 2 240 0.0 1.0 +es 02_wind_on 2 240 0.0 1.0 +es 03_wind_off 2 240 0.0 1.0 +es 04_res 2 240 0.0 1.0 es 05_nuclear 2 240 0.0 0.0 es 06_coal 2 240 0.0 0.0 es 07_gas 2 240 0.0 0.0 es 08_non-res 2 240 0.0 0.0 es 09_hydro_pump 2 240 0.0 0.0 -es 01_solar 2 241 1.0 0.0 -es 02_wind_on 2 241 1.0 0.0 -es 03_wind_off 2 241 1.0 0.0 -es 04_res 2 241 1.0 0.0 +es 01_solar 2 241 0.0 1.0 +es 02_wind_on 2 241 0.0 1.0 +es 03_wind_off 2 241 0.0 1.0 +es 04_res 2 241 0.0 1.0 es 05_nuclear 2 241 0.0 0.0 es 06_coal 2 241 0.0 0.0 es 07_gas 2 241 0.0 0.0 es 08_non-res 2 241 0.0 0.0 es 09_hydro_pump 2 241 0.0 0.0 -es 01_solar 2 242 1.0 0.0 -es 02_wind_on 2 242 1.0 0.0 -es 03_wind_off 2 242 1.0 0.0 -es 04_res 2 242 1.0 0.0 +es 01_solar 2 242 0.0 1.0 +es 02_wind_on 2 242 0.0 1.0 +es 03_wind_off 2 242 0.0 1.0 +es 04_res 2 242 0.0 1.0 es 05_nuclear 2 242 0.0 0.0 es 06_coal 2 242 0.0 0.0 es 07_gas 2 242 0.0 0.0 es 08_non-res 2 242 0.0 0.0 es 09_hydro_pump 2 242 0.0 0.0 -es 01_solar 2 243 1.0 0.0 -es 02_wind_on 2 243 1.0 0.0 -es 03_wind_off 2 243 1.0 0.0 -es 04_res 2 243 1.0 0.0 +es 01_solar 2 243 0.0 1.0 +es 02_wind_on 2 243 0.0 1.0 +es 03_wind_off 2 243 0.0 1.0 +es 04_res 2 243 0.0 1.0 es 05_nuclear 2 243 0.0 0.0 es 06_coal 2 243 0.0 0.0 es 07_gas 2 243 0.0 0.0 es 08_non-res 2 243 0.0 0.0 es 09_hydro_pump 2 243 0.0 0.0 -es 01_solar 2 244 1.0 0.0 -es 02_wind_on 2 244 1.0 0.0 -es 03_wind_off 2 244 1.0 0.0 -es 04_res 2 244 1.0 0.0 +es 01_solar 2 244 0.0 1.0 +es 02_wind_on 2 244 0.0 1.0 +es 03_wind_off 2 244 0.0 1.0 +es 04_res 2 244 0.0 1.0 es 05_nuclear 2 244 0.0 0.0 es 06_coal 2 244 0.0 0.0 es 07_gas 2 244 0.0 0.0 es 08_non-res 2 244 0.0 0.0 es 09_hydro_pump 2 244 0.0 0.0 -es 01_solar 2 245 1.0 0.0 -es 02_wind_on 2 245 1.0 0.0 -es 03_wind_off 2 245 1.0 0.0 -es 04_res 2 245 1.0 0.0 +es 01_solar 2 245 0.0 1.0 +es 02_wind_on 2 245 0.0 1.0 +es 03_wind_off 2 245 0.0 1.0 +es 04_res 2 245 0.0 1.0 es 05_nuclear 2 245 0.0 0.0 es 06_coal 2 245 0.0 0.0 es 07_gas 2 245 0.0 0.0 es 08_non-res 2 245 0.0 0.0 es 09_hydro_pump 2 245 0.0 0.0 -es 01_solar 2 246 1.0 0.0 -es 02_wind_on 2 246 1.0 0.0 -es 03_wind_off 2 246 1.0 0.0 -es 04_res 2 246 1.0 0.0 +es 01_solar 2 246 0.0 1.0 +es 02_wind_on 2 246 0.0 1.0 +es 03_wind_off 2 246 0.0 1.0 +es 04_res 2 246 0.0 1.0 es 05_nuclear 2 246 0.0 0.0 es 06_coal 2 246 0.0 0.0 es 07_gas 2 246 0.0 0.0 es 08_non-res 2 246 0.0 0.0 es 09_hydro_pump 2 246 0.0 0.0 -es 01_solar 2 247 1.0 0.0 -es 02_wind_on 2 247 1.0 0.0 -es 03_wind_off 2 247 1.0 0.0 -es 04_res 2 247 1.0 0.0 +es 01_solar 2 247 0.0 1.0 +es 02_wind_on 2 247 0.0 1.0 +es 03_wind_off 2 247 0.0 1.0 +es 04_res 2 247 0.0 1.0 es 05_nuclear 2 247 0.0 0.0 es 06_coal 2 247 0.0 0.0 es 07_gas 2 247 0.0 0.0 es 08_non-res 2 247 0.0 0.0 es 09_hydro_pump 2 247 0.0 0.0 -es 01_solar 2 248 1.0 0.0 -es 02_wind_on 2 248 1.0 0.0 -es 03_wind_off 2 248 1.0 0.0 -es 04_res 2 248 1.0 0.0 +es 01_solar 2 248 0.0 1.0 +es 02_wind_on 2 248 0.0 1.0 +es 03_wind_off 2 248 0.0 1.0 +es 04_res 2 248 0.0 1.0 es 05_nuclear 2 248 0.0 0.0 es 06_coal 2 248 0.0 0.0 es 07_gas 2 248 0.0 0.0 es 08_non-res 2 248 0.0 0.0 es 09_hydro_pump 2 248 0.0 0.0 -es 01_solar 2 249 1.0 0.0 -es 02_wind_on 2 249 1.0 0.0 -es 03_wind_off 2 249 1.0 0.0 -es 04_res 2 249 1.0 0.0 +es 01_solar 2 249 0.0 1.0 +es 02_wind_on 2 249 0.0 1.0 +es 03_wind_off 2 249 0.0 1.0 +es 04_res 2 249 0.0 1.0 es 05_nuclear 2 249 0.0 0.0 es 06_coal 2 249 0.0 0.0 es 07_gas 2 249 0.0 0.0 es 08_non-res 2 249 0.0 0.0 es 09_hydro_pump 2 249 0.0 0.0 -es 01_solar 2 250 1.0 0.0 -es 02_wind_on 2 250 1.0 0.0 -es 03_wind_off 2 250 1.0 0.0 -es 04_res 2 250 1.0 0.0 -es 05_nuclear 2 250 1.0 0.0 +es 01_solar 2 250 0.0 1.0 +es 02_wind_on 2 250 0.0 1.0 +es 03_wind_off 2 250 0.0 1.0 +es 04_res 2 250 0.0 1.0 +es 05_nuclear 2 250 0.0 1.0 es 06_coal 2 250 0.0 0.0 es 07_gas 2 250 0.0 0.0 es 08_non-res 2 250 0.0 0.0 es 09_hydro_pump 2 250 0.0 0.0 -es 01_solar 2 251 1.0 0.0 -es 02_wind_on 2 251 1.0 0.0 -es 03_wind_off 2 251 1.0 0.0 -es 04_res 2 251 1.0 0.0 -es 05_nuclear 2 251 1.0 0.0 +es 01_solar 2 251 0.0 1.0 +es 02_wind_on 2 251 0.0 1.0 +es 03_wind_off 2 251 0.0 1.0 +es 04_res 2 251 0.0 1.0 +es 05_nuclear 2 251 0.0 1.0 es 06_coal 2 251 0.0 0.0 es 07_gas 2 251 0.0 0.0 es 08_non-res 2 251 0.0 0.0 es 09_hydro_pump 2 251 0.0 0.0 -es 01_solar 2 252 1.0 0.0 -es 02_wind_on 2 252 1.0 0.0 -es 03_wind_off 2 252 1.0 0.0 -es 04_res 2 252 1.0 0.0 -es 05_nuclear 2 252 1.0 0.0 +es 01_solar 2 252 0.0 1.0 +es 02_wind_on 2 252 0.0 1.0 +es 03_wind_off 2 252 0.0 1.0 +es 04_res 2 252 0.0 1.0 +es 05_nuclear 2 252 0.0 1.0 es 06_coal 2 252 0.0 0.0 es 07_gas 2 252 0.0 0.0 es 08_non-res 2 252 0.0 0.0 es 09_hydro_pump 2 252 0.0 0.0 -es 01_solar 2 253 1.0 0.0 -es 02_wind_on 2 253 1.0 0.0 -es 03_wind_off 2 253 1.0 0.0 -es 04_res 2 253 1.0 0.0 -es 05_nuclear 2 253 1.0 0.0 +es 01_solar 2 253 0.0 1.0 +es 02_wind_on 2 253 0.0 1.0 +es 03_wind_off 2 253 0.0 1.0 +es 04_res 2 253 0.0 1.0 +es 05_nuclear 2 253 0.0 1.0 es 06_coal 2 253 0.0 0.0 es 07_gas 2 253 0.0 0.0 es 08_non-res 2 253 0.0 0.0 es 09_hydro_pump 2 253 0.0 0.0 -es 01_solar 2 254 1.0 0.0 -es 02_wind_on 2 254 1.0 0.0 -es 03_wind_off 2 254 1.0 0.0 -es 04_res 2 254 1.0 0.0 -es 05_nuclear 2 254 1.0 0.0 +es 01_solar 2 254 0.0 1.0 +es 02_wind_on 2 254 0.0 1.0 +es 03_wind_off 2 254 0.0 1.0 +es 04_res 2 254 0.0 1.0 +es 05_nuclear 2 254 0.0 1.0 es 06_coal 2 254 0.0 0.0 es 07_gas 2 254 0.0 0.0 es 08_non-res 2 254 0.0 0.0 es 09_hydro_pump 2 254 0.0 0.0 -es 01_solar 2 255 1.0 0.0 -es 02_wind_on 2 255 1.0 0.0 -es 03_wind_off 2 255 1.0 0.0 -es 04_res 2 255 1.0 0.0 -es 05_nuclear 2 255 1.0 0.0 +es 01_solar 2 255 0.0 1.0 +es 02_wind_on 2 255 0.0 1.0 +es 03_wind_off 2 255 0.0 1.0 +es 04_res 2 255 0.0 1.0 +es 05_nuclear 2 255 0.0 1.0 es 06_coal 2 255 0.0 0.0 es 07_gas 2 255 0.0 0.0 es 08_non-res 2 255 0.0 0.0 es 09_hydro_pump 2 255 0.0 0.0 -es 01_solar 2 256 1.0 0.0 -es 02_wind_on 2 256 1.0 0.0 -es 03_wind_off 2 256 1.0 0.0 -es 04_res 2 256 1.0 0.0 -es 05_nuclear 2 256 1.0 0.0 +es 01_solar 2 256 0.0 1.0 +es 02_wind_on 2 256 0.0 1.0 +es 03_wind_off 2 256 0.0 1.0 +es 04_res 2 256 0.0 1.0 +es 05_nuclear 2 256 0.0 1.0 es 06_coal 2 256 0.0 0.0 es 07_gas 2 256 0.0 0.0 es 08_non-res 2 256 0.0 0.0 es 09_hydro_pump 2 256 0.0 0.0 -es 01_solar 2 257 1.0 0.0 -es 02_wind_on 2 257 1.0 0.0 -es 03_wind_off 2 257 1.0 0.0 -es 04_res 2 257 1.0 0.0 -es 05_nuclear 2 257 1.0 0.0 +es 01_solar 2 257 0.0 1.0 +es 02_wind_on 2 257 0.0 1.0 +es 03_wind_off 2 257 0.0 1.0 +es 04_res 2 257 0.0 1.0 +es 05_nuclear 2 257 0.0 1.0 es 06_coal 2 257 0.0 0.0 es 07_gas 2 257 0.0 0.0 es 08_non-res 2 257 0.0 0.0 es 09_hydro_pump 2 257 0.0 0.0 -es 01_solar 2 258 1.0 0.0 -es 02_wind_on 2 258 1.0 0.0 -es 03_wind_off 2 258 1.0 0.0 -es 04_res 2 258 1.0 0.0 -es 05_nuclear 2 258 1.0 0.0 +es 01_solar 2 258 0.0 1.0 +es 02_wind_on 2 258 0.0 1.0 +es 03_wind_off 2 258 0.0 1.0 +es 04_res 2 258 0.0 1.0 +es 05_nuclear 2 258 0.0 1.0 es 06_coal 2 258 0.0 0.0 es 07_gas 2 258 0.0 0.0 es 08_non-res 2 258 0.0 0.0 es 09_hydro_pump 2 258 0.0 0.0 -es 01_solar 2 259 1.0 0.0 -es 02_wind_on 2 259 1.0 0.0 -es 03_wind_off 2 259 1.0 0.0 -es 04_res 2 259 1.0 0.0 -es 05_nuclear 2 259 1.0 0.0 +es 01_solar 2 259 0.0 1.0 +es 02_wind_on 2 259 0.0 1.0 +es 03_wind_off 2 259 0.0 1.0 +es 04_res 2 259 0.0 1.0 +es 05_nuclear 2 259 0.0 1.0 es 06_coal 2 259 0.0 0.0 es 07_gas 2 259 0.0 0.0 es 08_non-res 2 259 0.0 0.0 es 09_hydro_pump 2 259 0.0 0.0 -es 01_solar 2 260 1.0 0.0 -es 02_wind_on 2 260 1.0 0.0 -es 03_wind_off 2 260 1.0 0.0 -es 04_res 2 260 1.0 0.0 -es 05_nuclear 2 260 1.0 0.0 +es 01_solar 2 260 0.0 1.0 +es 02_wind_on 2 260 0.0 1.0 +es 03_wind_off 2 260 0.0 1.0 +es 04_res 2 260 0.0 1.0 +es 05_nuclear 2 260 0.0 1.0 es 06_coal 2 260 0.0 0.0 es 07_gas 2 260 0.0 0.0 es 08_non-res 2 260 0.0 0.0 es 09_hydro_pump 2 260 0.0 0.0 -es 01_solar 2 261 1.0 0.0 -es 02_wind_on 2 261 1.0 0.0 -es 03_wind_off 2 261 1.0 0.0 -es 04_res 2 261 1.0 0.0 -es 05_nuclear 2 261 1.0 0.0 +es 01_solar 2 261 0.0 1.0 +es 02_wind_on 2 261 0.0 1.0 +es 03_wind_off 2 261 0.0 1.0 +es 04_res 2 261 0.0 1.0 +es 05_nuclear 2 261 0.0 1.0 es 06_coal 2 261 0.0 0.0 es 07_gas 2 261 0.0 0.0 es 08_non-res 2 261 0.0 0.0 es 09_hydro_pump 2 261 0.0 0.0 -es 01_solar 2 262 1.0 0.0 -es 02_wind_on 2 262 1.0 0.0 -es 03_wind_off 2 262 1.0 0.0 -es 04_res 2 262 1.0 0.0 -es 05_nuclear 2 262 1.0 0.0 +es 01_solar 2 262 0.0 1.0 +es 02_wind_on 2 262 0.0 1.0 +es 03_wind_off 2 262 0.0 1.0 +es 04_res 2 262 0.0 1.0 +es 05_nuclear 2 262 0.0 1.0 es 06_coal 2 262 0.0 0.0 es 07_gas 2 262 0.0 0.0 es 08_non-res 2 262 0.0 0.0 es 09_hydro_pump 2 262 0.0 0.0 -es 01_solar 2 263 1.0 0.0 -es 02_wind_on 2 263 1.0 0.0 -es 03_wind_off 2 263 1.0 0.0 -es 04_res 2 263 1.0 0.0 -es 05_nuclear 2 263 1.0 0.0 +es 01_solar 2 263 0.0 1.0 +es 02_wind_on 2 263 0.0 1.0 +es 03_wind_off 2 263 0.0 1.0 +es 04_res 2 263 0.0 1.0 +es 05_nuclear 2 263 0.0 1.0 es 06_coal 2 263 0.0 0.0 es 07_gas 2 263 0.0 0.0 es 08_non-res 2 263 0.0 0.0 es 09_hydro_pump 2 263 0.0 0.0 -es 01_solar 2 264 1.0 0.0 -es 02_wind_on 2 264 1.0 0.0 -es 03_wind_off 2 264 1.0 0.0 -es 04_res 2 264 1.0 0.0 -es 05_nuclear 2 264 1.0 0.0 +es 01_solar 2 264 0.0 1.0 +es 02_wind_on 2 264 0.0 1.0 +es 03_wind_off 2 264 0.0 1.0 +es 04_res 2 264 0.0 1.0 +es 05_nuclear 2 264 0.0 1.0 es 06_coal 2 264 0.0 0.0 es 07_gas 2 264 0.0 0.0 es 08_non-res 2 264 0.0 0.0 es 09_hydro_pump 2 264 0.0 0.0 -es 01_solar 2 265 1.0 0.0 -es 02_wind_on 2 265 1.0 0.0 -es 03_wind_off 2 265 1.0 0.0 -es 04_res 2 265 1.0 0.0 -es 05_nuclear 2 265 1.0 0.0 +es 01_solar 2 265 0.0 1.0 +es 02_wind_on 2 265 0.0 1.0 +es 03_wind_off 2 265 0.0 1.0 +es 04_res 2 265 0.0 1.0 +es 05_nuclear 2 265 0.0 1.0 es 06_coal 2 265 0.0 0.0 es 07_gas 2 265 0.0 0.0 es 08_non-res 2 265 0.0 0.0 es 09_hydro_pump 2 265 0.0 0.0 -es 01_solar 2 266 1.0 0.0 -es 02_wind_on 2 266 1.0 0.0 -es 03_wind_off 2 266 1.0 0.0 -es 04_res 2 266 1.0 0.0 -es 05_nuclear 2 266 1.0 0.0 +es 01_solar 2 266 0.0 1.0 +es 02_wind_on 2 266 0.0 1.0 +es 03_wind_off 2 266 0.0 1.0 +es 04_res 2 266 0.0 1.0 +es 05_nuclear 2 266 0.0 1.0 es 06_coal 2 266 0.0 0.0 es 07_gas 2 266 0.0 0.0 es 08_non-res 2 266 0.0 0.0 es 09_hydro_pump 2 266 0.0 0.0 -es 01_solar 2 267 1.0 0.0 -es 02_wind_on 2 267 1.0 0.0 -es 03_wind_off 2 267 1.0 0.0 -es 04_res 2 267 1.0 0.0 -es 05_nuclear 2 267 1.0 0.0 +es 01_solar 2 267 0.0 1.0 +es 02_wind_on 2 267 0.0 1.0 +es 03_wind_off 2 267 0.0 1.0 +es 04_res 2 267 0.0 1.0 +es 05_nuclear 2 267 0.0 1.0 es 06_coal 2 267 0.0 0.0 es 07_gas 2 267 0.0 0.0 es 08_non-res 2 267 0.0 0.0 es 09_hydro_pump 2 267 0.0 0.0 -es 01_solar 2 268 1.0 0.0 -es 02_wind_on 2 268 1.0 0.0 -es 03_wind_off 2 268 1.0 0.0 -es 04_res 2 268 1.0 0.0 -es 05_nuclear 2 268 1.0 0.0 +es 01_solar 2 268 0.0 1.0 +es 02_wind_on 2 268 0.0 1.0 +es 03_wind_off 2 268 0.0 1.0 +es 04_res 2 268 0.0 1.0 +es 05_nuclear 2 268 0.0 1.0 es 06_coal 2 268 0.0 0.0 es 07_gas 2 268 0.0 0.0 es 08_non-res 2 268 0.0 0.0 es 09_hydro_pump 2 268 0.0 0.0 -es 01_solar 2 269 1.0 0.0 -es 02_wind_on 2 269 1.0 0.0 -es 03_wind_off 2 269 1.0 0.0 -es 04_res 2 269 1.0 0.0 -es 05_nuclear 2 269 1.0 0.0 +es 01_solar 2 269 0.0 1.0 +es 02_wind_on 2 269 0.0 1.0 +es 03_wind_off 2 269 0.0 1.0 +es 04_res 2 269 0.0 1.0 +es 05_nuclear 2 269 0.0 1.0 es 06_coal 2 269 0.0 0.0 es 07_gas 2 269 0.0 0.0 es 08_non-res 2 269 0.0 0.0 es 09_hydro_pump 2 269 0.0 0.0 -es 01_solar 2 270 1.0 0.0 -es 02_wind_on 2 270 1.0 0.0 -es 03_wind_off 2 270 1.0 0.0 -es 04_res 2 270 1.0 0.0 -es 05_nuclear 2 270 1.0 0.0 -es 06_coal 2 270 1.0 0.0 +es 01_solar 2 270 0.0 1.0 +es 02_wind_on 2 270 0.0 1.0 +es 03_wind_off 2 270 0.0 1.0 +es 04_res 2 270 0.0 1.0 +es 05_nuclear 2 270 0.0 1.0 +es 06_coal 2 270 0.0 1.0 es 07_gas 2 270 0.0 0.0 es 08_non-res 2 270 0.0 0.0 es 09_hydro_pump 2 270 0.0 0.0 -es 01_solar 2 271 1.0 0.0 -es 02_wind_on 2 271 1.0 0.0 -es 03_wind_off 2 271 1.0 0.0 -es 04_res 2 271 1.0 0.0 -es 05_nuclear 2 271 1.0 0.0 -es 06_coal 2 271 1.0 0.0 +es 01_solar 2 271 0.0 1.0 +es 02_wind_on 2 271 0.0 1.0 +es 03_wind_off 2 271 0.0 1.0 +es 04_res 2 271 0.0 1.0 +es 05_nuclear 2 271 0.0 1.0 +es 06_coal 2 271 0.0 1.0 es 07_gas 2 271 0.0 0.0 es 08_non-res 2 271 0.0 0.0 es 09_hydro_pump 2 271 0.0 0.0 -es 01_solar 2 272 1.0 0.0 -es 02_wind_on 2 272 1.0 0.0 -es 03_wind_off 2 272 1.0 0.0 -es 04_res 2 272 1.0 0.0 -es 05_nuclear 2 272 1.0 0.0 -es 06_coal 2 272 1.0 0.0 +es 01_solar 2 272 0.0 1.0 +es 02_wind_on 2 272 0.0 1.0 +es 03_wind_off 2 272 0.0 1.0 +es 04_res 2 272 0.0 1.0 +es 05_nuclear 2 272 0.0 1.0 +es 06_coal 2 272 0.0 1.0 es 07_gas 2 272 0.0 0.0 es 08_non-res 2 272 0.0 0.0 es 09_hydro_pump 2 272 0.0 0.0 -es 01_solar 2 273 1.0 0.0 -es 02_wind_on 2 273 1.0 0.0 -es 03_wind_off 2 273 1.0 0.0 -es 04_res 2 273 1.0 0.0 -es 05_nuclear 2 273 1.0 0.0 -es 06_coal 2 273 1.0 0.0 +es 01_solar 2 273 0.0 1.0 +es 02_wind_on 2 273 0.0 1.0 +es 03_wind_off 2 273 0.0 1.0 +es 04_res 2 273 0.0 1.0 +es 05_nuclear 2 273 0.0 1.0 +es 06_coal 2 273 0.0 1.0 es 07_gas 2 273 0.0 0.0 es 08_non-res 2 273 0.0 0.0 es 09_hydro_pump 2 273 0.0 0.0 -es 01_solar 2 274 1.0 0.0 -es 02_wind_on 2 274 1.0 0.0 -es 03_wind_off 2 274 1.0 0.0 -es 04_res 2 274 1.0 0.0 -es 05_nuclear 2 274 1.0 0.0 -es 06_coal 2 274 1.0 0.0 +es 01_solar 2 274 0.0 1.0 +es 02_wind_on 2 274 0.0 1.0 +es 03_wind_off 2 274 0.0 1.0 +es 04_res 2 274 0.0 1.0 +es 05_nuclear 2 274 0.0 1.0 +es 06_coal 2 274 0.0 1.0 es 07_gas 2 274 0.0 0.0 es 08_non-res 2 274 0.0 0.0 es 09_hydro_pump 2 274 0.0 0.0 -es 01_solar 2 275 1.0 0.0 -es 02_wind_on 2 275 1.0 0.0 -es 03_wind_off 2 275 1.0 0.0 -es 04_res 2 275 1.0 0.0 -es 05_nuclear 2 275 1.0 0.0 -es 06_coal 2 275 1.0 0.0 +es 01_solar 2 275 0.0 1.0 +es 02_wind_on 2 275 0.0 1.0 +es 03_wind_off 2 275 0.0 1.0 +es 04_res 2 275 0.0 1.0 +es 05_nuclear 2 275 0.0 1.0 +es 06_coal 2 275 0.0 1.0 es 07_gas 2 275 0.0 0.0 es 08_non-res 2 275 0.0 0.0 es 09_hydro_pump 2 275 0.0 0.0 -es 01_solar 2 276 1.0 0.0 -es 02_wind_on 2 276 1.0 0.0 -es 03_wind_off 2 276 1.0 0.0 -es 04_res 2 276 1.0 0.0 -es 05_nuclear 2 276 1.0 0.0 -es 06_coal 2 276 1.0 0.0 +es 01_solar 2 276 0.0 1.0 +es 02_wind_on 2 276 0.0 1.0 +es 03_wind_off 2 276 0.0 1.0 +es 04_res 2 276 0.0 1.0 +es 05_nuclear 2 276 0.0 1.0 +es 06_coal 2 276 0.0 1.0 es 07_gas 2 276 0.0 0.0 es 08_non-res 2 276 0.0 0.0 es 09_hydro_pump 2 276 0.0 0.0 -es 01_solar 2 277 1.0 0.0 -es 02_wind_on 2 277 1.0 0.0 -es 03_wind_off 2 277 1.0 0.0 -es 04_res 2 277 1.0 0.0 -es 05_nuclear 2 277 1.0 0.0 -es 06_coal 2 277 1.0 0.0 +es 01_solar 2 277 0.0 1.0 +es 02_wind_on 2 277 0.0 1.0 +es 03_wind_off 2 277 0.0 1.0 +es 04_res 2 277 0.0 1.0 +es 05_nuclear 2 277 0.0 1.0 +es 06_coal 2 277 0.0 1.0 es 07_gas 2 277 0.0 0.0 es 08_non-res 2 277 0.0 0.0 es 09_hydro_pump 2 277 0.0 0.0 -es 01_solar 2 278 1.0 0.0 -es 02_wind_on 2 278 1.0 0.0 -es 03_wind_off 2 278 1.0 0.0 -es 04_res 2 278 1.0 0.0 -es 05_nuclear 2 278 1.0 0.0 -es 06_coal 2 278 1.0 0.0 +es 01_solar 2 278 0.0 1.0 +es 02_wind_on 2 278 0.0 1.0 +es 03_wind_off 2 278 0.0 1.0 +es 04_res 2 278 0.0 1.0 +es 05_nuclear 2 278 0.0 1.0 +es 06_coal 2 278 0.0 1.0 es 07_gas 2 278 0.0 0.0 es 08_non-res 2 278 0.0 0.0 es 09_hydro_pump 2 278 0.0 0.0 -es 01_solar 2 279 1.0 0.0 -es 02_wind_on 2 279 1.0 0.0 -es 03_wind_off 2 279 1.0 0.0 -es 04_res 2 279 1.0 0.0 -es 05_nuclear 2 279 1.0 0.0 -es 06_coal 2 279 1.0 0.0 +es 01_solar 2 279 0.0 1.0 +es 02_wind_on 2 279 0.0 1.0 +es 03_wind_off 2 279 0.0 1.0 +es 04_res 2 279 0.0 1.0 +es 05_nuclear 2 279 0.0 1.0 +es 06_coal 2 279 0.0 1.0 es 07_gas 2 279 0.0 0.0 es 08_non-res 2 279 0.0 0.0 es 09_hydro_pump 2 279 0.0 0.0 -es 01_solar 2 280 1.0 0.0 -es 02_wind_on 2 280 1.0 0.0 -es 03_wind_off 2 280 1.0 0.0 -es 04_res 2 280 1.0 0.0 -es 05_nuclear 2 280 1.0 0.0 -es 06_coal 2 280 1.0 0.0 +es 01_solar 2 280 0.0 1.0 +es 02_wind_on 2 280 0.0 1.0 +es 03_wind_off 2 280 0.0 1.0 +es 04_res 2 280 0.0 1.0 +es 05_nuclear 2 280 0.0 1.0 +es 06_coal 2 280 0.0 1.0 es 07_gas 2 280 0.0 0.0 es 08_non-res 2 280 0.0 0.0 es 09_hydro_pump 2 280 0.0 0.0 -es 01_solar 2 281 1.0 0.0 -es 02_wind_on 2 281 1.0 0.0 -es 03_wind_off 2 281 1.0 0.0 -es 04_res 2 281 1.0 0.0 -es 05_nuclear 2 281 1.0 0.0 -es 06_coal 2 281 1.0 0.0 +es 01_solar 2 281 0.0 1.0 +es 02_wind_on 2 281 0.0 1.0 +es 03_wind_off 2 281 0.0 1.0 +es 04_res 2 281 0.0 1.0 +es 05_nuclear 2 281 0.0 1.0 +es 06_coal 2 281 0.0 1.0 es 07_gas 2 281 0.0 0.0 es 08_non-res 2 281 0.0 0.0 es 09_hydro_pump 2 281 0.0 0.0 -es 01_solar 2 282 1.0 0.0 -es 02_wind_on 2 282 1.0 0.0 -es 03_wind_off 2 282 1.0 0.0 -es 04_res 2 282 1.0 0.0 -es 05_nuclear 2 282 1.0 0.0 -es 06_coal 2 282 1.0 0.0 +es 01_solar 2 282 0.0 1.0 +es 02_wind_on 2 282 0.0 1.0 +es 03_wind_off 2 282 0.0 1.0 +es 04_res 2 282 0.0 1.0 +es 05_nuclear 2 282 0.0 1.0 +es 06_coal 2 282 0.0 1.0 es 07_gas 2 282 0.0 0.0 es 08_non-res 2 282 0.0 0.0 es 09_hydro_pump 2 282 0.0 0.0 -es 01_solar 2 283 1.0 0.0 -es 02_wind_on 2 283 1.0 0.0 -es 03_wind_off 2 283 1.0 0.0 -es 04_res 2 283 1.0 0.0 -es 05_nuclear 2 283 1.0 0.0 -es 06_coal 2 283 1.0 0.0 +es 01_solar 2 283 0.0 1.0 +es 02_wind_on 2 283 0.0 1.0 +es 03_wind_off 2 283 0.0 1.0 +es 04_res 2 283 0.0 1.0 +es 05_nuclear 2 283 0.0 1.0 +es 06_coal 2 283 0.0 1.0 es 07_gas 2 283 0.0 0.0 es 08_non-res 2 283 0.0 0.0 es 09_hydro_pump 2 283 0.0 0.0 -es 01_solar 2 284 1.0 0.0 -es 02_wind_on 2 284 1.0 0.0 -es 03_wind_off 2 284 1.0 0.0 -es 04_res 2 284 1.0 0.0 -es 05_nuclear 2 284 1.0 0.0 -es 06_coal 2 284 1.0 0.0 +es 01_solar 2 284 0.0 1.0 +es 02_wind_on 2 284 0.0 1.0 +es 03_wind_off 2 284 0.0 1.0 +es 04_res 2 284 0.0 1.0 +es 05_nuclear 2 284 0.0 1.0 +es 06_coal 2 284 0.0 1.0 es 07_gas 2 284 0.0 0.0 es 08_non-res 2 284 0.0 0.0 es 09_hydro_pump 2 284 0.0 0.0 -es 01_solar 2 285 1.0 0.0 -es 02_wind_on 2 285 1.0 0.0 -es 03_wind_off 2 285 1.0 0.0 -es 04_res 2 285 1.0 0.0 -es 05_nuclear 2 285 1.0 0.0 -es 06_coal 2 285 1.0 0.0 +es 01_solar 2 285 0.0 1.0 +es 02_wind_on 2 285 0.0 1.0 +es 03_wind_off 2 285 0.0 1.0 +es 04_res 2 285 0.0 1.0 +es 05_nuclear 2 285 0.0 1.0 +es 06_coal 2 285 0.0 1.0 es 07_gas 2 285 0.0 0.0 es 08_non-res 2 285 0.0 0.0 es 09_hydro_pump 2 285 0.0 0.0 -es 01_solar 2 286 1.0 0.0 -es 02_wind_on 2 286 1.0 0.0 -es 03_wind_off 2 286 1.0 0.0 -es 04_res 2 286 1.0 0.0 -es 05_nuclear 2 286 1.0 0.0 -es 06_coal 2 286 1.0 0.0 +es 01_solar 2 286 0.0 1.0 +es 02_wind_on 2 286 0.0 1.0 +es 03_wind_off 2 286 0.0 1.0 +es 04_res 2 286 0.0 1.0 +es 05_nuclear 2 286 0.0 1.0 +es 06_coal 2 286 0.0 1.0 es 07_gas 2 286 0.0 0.0 es 08_non-res 2 286 0.0 0.0 es 09_hydro_pump 2 286 0.0 0.0 -es 01_solar 2 287 1.0 0.0 -es 02_wind_on 2 287 1.0 0.0 -es 03_wind_off 2 287 1.0 0.0 -es 04_res 2 287 1.0 0.0 -es 05_nuclear 2 287 1.0 0.0 -es 06_coal 2 287 1.0 0.0 +es 01_solar 2 287 0.0 1.0 +es 02_wind_on 2 287 0.0 1.0 +es 03_wind_off 2 287 0.0 1.0 +es 04_res 2 287 0.0 1.0 +es 05_nuclear 2 287 0.0 1.0 +es 06_coal 2 287 0.0 1.0 es 07_gas 2 287 0.0 0.0 es 08_non-res 2 287 0.0 0.0 es 09_hydro_pump 2 287 0.0 0.0 -es 01_solar 2 288 1.0 0.0 -es 02_wind_on 2 288 1.0 0.0 -es 03_wind_off 2 288 1.0 0.0 -es 04_res 2 288 1.0 0.0 -es 05_nuclear 2 288 1.0 0.0 -es 06_coal 2 288 1.0 0.0 +es 01_solar 2 288 0.0 1.0 +es 02_wind_on 2 288 0.0 1.0 +es 03_wind_off 2 288 0.0 1.0 +es 04_res 2 288 0.0 1.0 +es 05_nuclear 2 288 0.0 1.0 +es 06_coal 2 288 0.0 1.0 es 07_gas 2 288 0.0 0.0 es 08_non-res 2 288 0.0 0.0 es 09_hydro_pump 2 288 0.0 0.0 -es 01_solar 2 289 1.0 0.0 -es 02_wind_on 2 289 1.0 0.0 -es 03_wind_off 2 289 1.0 0.0 -es 04_res 2 289 1.0 0.0 -es 05_nuclear 2 289 1.0 0.0 -es 06_coal 2 289 1.0 0.0 +es 01_solar 2 289 0.0 1.0 +es 02_wind_on 2 289 0.0 1.0 +es 03_wind_off 2 289 0.0 1.0 +es 04_res 2 289 0.0 1.0 +es 05_nuclear 2 289 0.0 1.0 +es 06_coal 2 289 0.0 1.0 es 07_gas 2 289 0.0 0.0 es 08_non-res 2 289 0.0 0.0 es 09_hydro_pump 2 289 0.0 0.0 -es 01_solar 2 290 1.0 0.0 -es 02_wind_on 2 290 1.0 0.0 -es 03_wind_off 2 290 1.0 0.0 -es 04_res 2 290 1.0 0.0 -es 05_nuclear 2 290 1.0 0.0 -es 06_coal 2 290 1.0 0.0 -es 07_gas 2 290 1.0 0.0 +es 01_solar 2 290 0.0 1.0 +es 02_wind_on 2 290 0.0 1.0 +es 03_wind_off 2 290 0.0 1.0 +es 04_res 2 290 0.0 1.0 +es 05_nuclear 2 290 0.0 1.0 +es 06_coal 2 290 0.0 1.0 +es 07_gas 2 290 0.0 1.0 es 08_non-res 2 290 0.0 0.0 es 09_hydro_pump 2 290 0.0 0.0 -es 01_solar 2 291 1.0 0.0 -es 02_wind_on 2 291 1.0 0.0 -es 03_wind_off 2 291 1.0 0.0 -es 04_res 2 291 1.0 0.0 -es 05_nuclear 2 291 1.0 0.0 -es 06_coal 2 291 1.0 0.0 -es 07_gas 2 291 1.0 0.0 +es 01_solar 2 291 0.0 1.0 +es 02_wind_on 2 291 0.0 1.0 +es 03_wind_off 2 291 0.0 1.0 +es 04_res 2 291 0.0 1.0 +es 05_nuclear 2 291 0.0 1.0 +es 06_coal 2 291 0.0 1.0 +es 07_gas 2 291 0.0 1.0 es 08_non-res 2 291 0.0 0.0 es 09_hydro_pump 2 291 0.0 0.0 -es 01_solar 2 292 1.0 0.0 -es 02_wind_on 2 292 1.0 0.0 -es 03_wind_off 2 292 1.0 0.0 -es 04_res 2 292 1.0 0.0 -es 05_nuclear 2 292 1.0 0.0 -es 06_coal 2 292 1.0 0.0 -es 07_gas 2 292 1.0 0.0 +es 01_solar 2 292 0.0 1.0 +es 02_wind_on 2 292 0.0 1.0 +es 03_wind_off 2 292 0.0 1.0 +es 04_res 2 292 0.0 1.0 +es 05_nuclear 2 292 0.0 1.0 +es 06_coal 2 292 0.0 1.0 +es 07_gas 2 292 0.0 1.0 es 08_non-res 2 292 0.0 0.0 es 09_hydro_pump 2 292 0.0 0.0 -es 01_solar 2 293 1.0 0.0 -es 02_wind_on 2 293 1.0 0.0 -es 03_wind_off 2 293 1.0 0.0 -es 04_res 2 293 1.0 0.0 -es 05_nuclear 2 293 1.0 0.0 -es 06_coal 2 293 1.0 0.0 -es 07_gas 2 293 1.0 0.0 +es 01_solar 2 293 0.0 1.0 +es 02_wind_on 2 293 0.0 1.0 +es 03_wind_off 2 293 0.0 1.0 +es 04_res 2 293 0.0 1.0 +es 05_nuclear 2 293 0.0 1.0 +es 06_coal 2 293 0.0 1.0 +es 07_gas 2 293 0.0 1.0 es 08_non-res 2 293 0.0 0.0 es 09_hydro_pump 2 293 0.0 0.0 -es 01_solar 2 294 1.0 0.0 -es 02_wind_on 2 294 1.0 0.0 -es 03_wind_off 2 294 1.0 0.0 -es 04_res 2 294 1.0 0.0 -es 05_nuclear 2 294 1.0 0.0 -es 06_coal 2 294 1.0 0.0 -es 07_gas 2 294 1.0 0.0 +es 01_solar 2 294 0.0 1.0 +es 02_wind_on 2 294 0.0 1.0 +es 03_wind_off 2 294 0.0 1.0 +es 04_res 2 294 0.0 1.0 +es 05_nuclear 2 294 0.0 1.0 +es 06_coal 2 294 0.0 1.0 +es 07_gas 2 294 0.0 1.0 es 08_non-res 2 294 0.0 0.0 es 09_hydro_pump 2 294 0.0 0.0 -es 01_solar 2 295 1.0 0.0 -es 02_wind_on 2 295 1.0 0.0 -es 03_wind_off 2 295 1.0 0.0 -es 04_res 2 295 1.0 0.0 -es 05_nuclear 2 295 1.0 0.0 -es 06_coal 2 295 1.0 0.0 -es 07_gas 2 295 1.0 0.0 +es 01_solar 2 295 0.0 1.0 +es 02_wind_on 2 295 0.0 1.0 +es 03_wind_off 2 295 0.0 1.0 +es 04_res 2 295 0.0 1.0 +es 05_nuclear 2 295 0.0 1.0 +es 06_coal 2 295 0.0 1.0 +es 07_gas 2 295 0.0 1.0 es 08_non-res 2 295 0.0 0.0 es 09_hydro_pump 2 295 0.0 0.0 -es 01_solar 2 296 1.0 0.0 -es 02_wind_on 2 296 1.0 0.0 -es 03_wind_off 2 296 1.0 0.0 -es 04_res 2 296 1.0 0.0 -es 05_nuclear 2 296 1.0 0.0 -es 06_coal 2 296 1.0 0.0 -es 07_gas 2 296 1.0 0.0 +es 01_solar 2 296 0.0 1.0 +es 02_wind_on 2 296 0.0 1.0 +es 03_wind_off 2 296 0.0 1.0 +es 04_res 2 296 0.0 1.0 +es 05_nuclear 2 296 0.0 1.0 +es 06_coal 2 296 0.0 1.0 +es 07_gas 2 296 0.0 1.0 es 08_non-res 2 296 0.0 0.0 es 09_hydro_pump 2 296 0.0 0.0 -es 01_solar 2 297 1.0 0.0 -es 02_wind_on 2 297 1.0 0.0 -es 03_wind_off 2 297 1.0 0.0 -es 04_res 2 297 1.0 0.0 -es 05_nuclear 2 297 1.0 0.0 -es 06_coal 2 297 1.0 0.0 -es 07_gas 2 297 1.0 0.0 +es 01_solar 2 297 0.0 1.0 +es 02_wind_on 2 297 0.0 1.0 +es 03_wind_off 2 297 0.0 1.0 +es 04_res 2 297 0.0 1.0 +es 05_nuclear 2 297 0.0 1.0 +es 06_coal 2 297 0.0 1.0 +es 07_gas 2 297 0.0 1.0 es 08_non-res 2 297 0.0 0.0 es 09_hydro_pump 2 297 0.0 0.0 -es 01_solar 2 298 1.0 0.0 -es 02_wind_on 2 298 1.0 0.0 -es 03_wind_off 2 298 1.0 0.0 -es 04_res 2 298 1.0 0.0 -es 05_nuclear 2 298 1.0 0.0 -es 06_coal 2 298 1.0 0.0 -es 07_gas 2 298 1.0 0.0 +es 01_solar 2 298 0.0 1.0 +es 02_wind_on 2 298 0.0 1.0 +es 03_wind_off 2 298 0.0 1.0 +es 04_res 2 298 0.0 1.0 +es 05_nuclear 2 298 0.0 1.0 +es 06_coal 2 298 0.0 1.0 +es 07_gas 2 298 0.0 1.0 es 08_non-res 2 298 0.0 0.0 es 09_hydro_pump 2 298 0.0 0.0 -es 01_solar 2 299 1.0 0.0 -es 02_wind_on 2 299 1.0 0.0 -es 03_wind_off 2 299 1.0 0.0 -es 04_res 2 299 1.0 0.0 -es 05_nuclear 2 299 1.0 0.0 -es 06_coal 2 299 1.0 0.0 -es 07_gas 2 299 1.0 0.0 +es 01_solar 2 299 0.0 1.0 +es 02_wind_on 2 299 0.0 1.0 +es 03_wind_off 2 299 0.0 1.0 +es 04_res 2 299 0.0 1.0 +es 05_nuclear 2 299 0.0 1.0 +es 06_coal 2 299 0.0 1.0 +es 07_gas 2 299 0.0 1.0 es 08_non-res 2 299 0.0 0.0 es 09_hydro_pump 2 299 0.0 0.0 -es 01_solar 2 300 1.0 0.0 -es 02_wind_on 2 300 1.0 0.0 -es 03_wind_off 2 300 1.0 0.0 -es 04_res 2 300 1.0 0.0 -es 05_nuclear 2 300 1.0 0.0 -es 06_coal 2 300 1.0 0.0 -es 07_gas 2 300 1.0 0.0 +es 01_solar 2 300 0.0 1.0 +es 02_wind_on 2 300 0.0 1.0 +es 03_wind_off 2 300 0.0 1.0 +es 04_res 2 300 0.0 1.0 +es 05_nuclear 2 300 0.0 1.0 +es 06_coal 2 300 0.0 1.0 +es 07_gas 2 300 0.0 1.0 es 08_non-res 2 300 0.0 0.0 es 09_hydro_pump 2 300 0.0 0.0 -es 01_solar 2 301 1.0 0.0 -es 02_wind_on 2 301 1.0 0.0 -es 03_wind_off 2 301 1.0 0.0 -es 04_res 2 301 1.0 0.0 -es 05_nuclear 2 301 1.0 0.0 -es 06_coal 2 301 1.0 0.0 -es 07_gas 2 301 1.0 0.0 +es 01_solar 2 301 0.0 1.0 +es 02_wind_on 2 301 0.0 1.0 +es 03_wind_off 2 301 0.0 1.0 +es 04_res 2 301 0.0 1.0 +es 05_nuclear 2 301 0.0 1.0 +es 06_coal 2 301 0.0 1.0 +es 07_gas 2 301 0.0 1.0 es 08_non-res 2 301 0.0 0.0 es 09_hydro_pump 2 301 0.0 0.0 -es 01_solar 2 302 1.0 0.0 -es 02_wind_on 2 302 1.0 0.0 -es 03_wind_off 2 302 1.0 0.0 -es 04_res 2 302 1.0 0.0 -es 05_nuclear 2 302 1.0 0.0 -es 06_coal 2 302 1.0 0.0 -es 07_gas 2 302 1.0 0.0 +es 01_solar 2 302 0.0 1.0 +es 02_wind_on 2 302 0.0 1.0 +es 03_wind_off 2 302 0.0 1.0 +es 04_res 2 302 0.0 1.0 +es 05_nuclear 2 302 0.0 1.0 +es 06_coal 2 302 0.0 1.0 +es 07_gas 2 302 0.0 1.0 es 08_non-res 2 302 0.0 0.0 es 09_hydro_pump 2 302 0.0 0.0 -es 01_solar 2 303 1.0 0.0 -es 02_wind_on 2 303 1.0 0.0 -es 03_wind_off 2 303 1.0 0.0 -es 04_res 2 303 1.0 0.0 -es 05_nuclear 2 303 1.0 0.0 -es 06_coal 2 303 1.0 0.0 -es 07_gas 2 303 1.0 0.0 +es 01_solar 2 303 0.0 1.0 +es 02_wind_on 2 303 0.0 1.0 +es 03_wind_off 2 303 0.0 1.0 +es 04_res 2 303 0.0 1.0 +es 05_nuclear 2 303 0.0 1.0 +es 06_coal 2 303 0.0 1.0 +es 07_gas 2 303 0.0 1.0 es 08_non-res 2 303 0.0 0.0 es 09_hydro_pump 2 303 0.0 0.0 -es 01_solar 2 304 1.0 0.0 -es 02_wind_on 2 304 1.0 0.0 -es 03_wind_off 2 304 1.0 0.0 -es 04_res 2 304 1.0 0.0 -es 05_nuclear 2 304 1.0 0.0 -es 06_coal 2 304 1.0 0.0 -es 07_gas 2 304 1.0 0.0 +es 01_solar 2 304 0.0 1.0 +es 02_wind_on 2 304 0.0 1.0 +es 03_wind_off 2 304 0.0 1.0 +es 04_res 2 304 0.0 1.0 +es 05_nuclear 2 304 0.0 1.0 +es 06_coal 2 304 0.0 1.0 +es 07_gas 2 304 0.0 1.0 es 08_non-res 2 304 0.0 0.0 es 09_hydro_pump 2 304 0.0 0.0 -es 01_solar 2 305 1.0 0.0 -es 02_wind_on 2 305 1.0 0.0 -es 03_wind_off 2 305 1.0 0.0 -es 04_res 2 305 1.0 0.0 -es 05_nuclear 2 305 1.0 0.0 -es 06_coal 2 305 1.0 0.0 -es 07_gas 2 305 1.0 0.0 +es 01_solar 2 305 0.0 1.0 +es 02_wind_on 2 305 0.0 1.0 +es 03_wind_off 2 305 0.0 1.0 +es 04_res 2 305 0.0 1.0 +es 05_nuclear 2 305 0.0 1.0 +es 06_coal 2 305 0.0 1.0 +es 07_gas 2 305 0.0 1.0 es 08_non-res 2 305 0.0 0.0 es 09_hydro_pump 2 305 0.0 0.0 -es 01_solar 2 306 1.0 0.0 -es 02_wind_on 2 306 1.0 0.0 -es 03_wind_off 2 306 1.0 0.0 -es 04_res 2 306 1.0 0.0 -es 05_nuclear 2 306 1.0 0.0 -es 06_coal 2 306 1.0 0.0 -es 07_gas 2 306 1.0 0.0 +es 01_solar 2 306 0.0 1.0 +es 02_wind_on 2 306 0.0 1.0 +es 03_wind_off 2 306 0.0 1.0 +es 04_res 2 306 0.0 1.0 +es 05_nuclear 2 306 0.0 1.0 +es 06_coal 2 306 0.0 1.0 +es 07_gas 2 306 0.0 1.0 es 08_non-res 2 306 0.0 0.0 es 09_hydro_pump 2 306 0.0 0.0 -es 01_solar 2 307 1.0 0.0 -es 02_wind_on 2 307 1.0 0.0 -es 03_wind_off 2 307 1.0 0.0 -es 04_res 2 307 1.0 0.0 -es 05_nuclear 2 307 1.0 0.0 -es 06_coal 2 307 1.0 0.0 -es 07_gas 2 307 1.0 0.0 +es 01_solar 2 307 0.0 1.0 +es 02_wind_on 2 307 0.0 1.0 +es 03_wind_off 2 307 0.0 1.0 +es 04_res 2 307 0.0 1.0 +es 05_nuclear 2 307 0.0 1.0 +es 06_coal 2 307 0.0 1.0 +es 07_gas 2 307 0.0 1.0 es 08_non-res 2 307 0.0 0.0 es 09_hydro_pump 2 307 0.0 0.0 -es 01_solar 2 308 1.0 0.0 -es 02_wind_on 2 308 1.0 0.0 -es 03_wind_off 2 308 1.0 0.0 -es 04_res 2 308 1.0 0.0 -es 05_nuclear 2 308 1.0 0.0 -es 06_coal 2 308 1.0 0.0 -es 07_gas 2 308 1.0 0.0 +es 01_solar 2 308 0.0 1.0 +es 02_wind_on 2 308 0.0 1.0 +es 03_wind_off 2 308 0.0 1.0 +es 04_res 2 308 0.0 1.0 +es 05_nuclear 2 308 0.0 1.0 +es 06_coal 2 308 0.0 1.0 +es 07_gas 2 308 0.0 1.0 es 08_non-res 2 308 0.0 0.0 es 09_hydro_pump 2 308 0.0 0.0 -es 01_solar 2 309 1.0 0.0 -es 02_wind_on 2 309 1.0 0.0 -es 03_wind_off 2 309 1.0 0.0 -es 04_res 2 309 1.0 0.0 -es 05_nuclear 2 309 1.0 0.0 -es 06_coal 2 309 1.0 0.0 -es 07_gas 2 309 1.0 0.0 +es 01_solar 2 309 0.0 1.0 +es 02_wind_on 2 309 0.0 1.0 +es 03_wind_off 2 309 0.0 1.0 +es 04_res 2 309 0.0 1.0 +es 05_nuclear 2 309 0.0 1.0 +es 06_coal 2 309 0.0 1.0 +es 07_gas 2 309 0.0 1.0 es 08_non-res 2 309 0.0 0.0 es 09_hydro_pump 2 309 0.0 0.0 -es 01_solar 2 310 1.0 0.0 -es 02_wind_on 2 310 1.0 0.0 -es 03_wind_off 2 310 1.0 0.0 -es 04_res 2 310 1.0 0.0 -es 05_nuclear 2 310 1.0 0.0 -es 06_coal 2 310 1.0 0.0 -es 07_gas 2 310 1.0 0.0 -es 08_non-res 2 310 1.0 0.0 +es 01_solar 2 310 0.0 1.0 +es 02_wind_on 2 310 0.0 1.0 +es 03_wind_off 2 310 0.0 1.0 +es 04_res 2 310 0.0 1.0 +es 05_nuclear 2 310 0.0 1.0 +es 06_coal 2 310 0.0 1.0 +es 07_gas 2 310 0.0 1.0 +es 08_non-res 2 310 0.0 1.0 es 09_hydro_pump 2 310 0.0 0.0 -es 01_solar 2 311 1.0 0.0 -es 02_wind_on 2 311 1.0 0.0 -es 03_wind_off 2 311 1.0 0.0 -es 04_res 2 311 1.0 0.0 -es 05_nuclear 2 311 1.0 0.0 -es 06_coal 2 311 1.0 0.0 -es 07_gas 2 311 1.0 0.0 -es 08_non-res 2 311 1.0 0.0 +es 01_solar 2 311 0.0 1.0 +es 02_wind_on 2 311 0.0 1.0 +es 03_wind_off 2 311 0.0 1.0 +es 04_res 2 311 0.0 1.0 +es 05_nuclear 2 311 0.0 1.0 +es 06_coal 2 311 0.0 1.0 +es 07_gas 2 311 0.0 1.0 +es 08_non-res 2 311 0.0 1.0 es 09_hydro_pump 2 311 0.0 0.0 -es 01_solar 2 312 1.0 0.0 -es 02_wind_on 2 312 1.0 0.0 -es 03_wind_off 2 312 1.0 0.0 -es 04_res 2 312 1.0 0.0 -es 05_nuclear 2 312 1.0 0.0 -es 06_coal 2 312 1.0 0.0 -es 07_gas 2 312 1.0 0.0 -es 08_non-res 2 312 1.0 0.0 +es 01_solar 2 312 0.0 1.0 +es 02_wind_on 2 312 0.0 1.0 +es 03_wind_off 2 312 0.0 1.0 +es 04_res 2 312 0.0 1.0 +es 05_nuclear 2 312 0.0 1.0 +es 06_coal 2 312 0.0 1.0 +es 07_gas 2 312 0.0 1.0 +es 08_non-res 2 312 0.0 1.0 es 09_hydro_pump 2 312 0.0 0.0 -es 01_solar 2 313 1.0 0.0 -es 02_wind_on 2 313 1.0 0.0 -es 03_wind_off 2 313 1.0 0.0 -es 04_res 2 313 1.0 0.0 -es 05_nuclear 2 313 1.0 0.0 -es 06_coal 2 313 1.0 0.0 -es 07_gas 2 313 1.0 0.0 -es 08_non-res 2 313 1.0 0.0 +es 01_solar 2 313 0.0 1.0 +es 02_wind_on 2 313 0.0 1.0 +es 03_wind_off 2 313 0.0 1.0 +es 04_res 2 313 0.0 1.0 +es 05_nuclear 2 313 0.0 1.0 +es 06_coal 2 313 0.0 1.0 +es 07_gas 2 313 0.0 1.0 +es 08_non-res 2 313 0.0 1.0 es 09_hydro_pump 2 313 0.0 0.0 -es 01_solar 2 314 1.0 0.0 -es 02_wind_on 2 314 1.0 0.0 -es 03_wind_off 2 314 1.0 0.0 -es 04_res 2 314 1.0 0.0 -es 05_nuclear 2 314 1.0 0.0 -es 06_coal 2 314 1.0 0.0 -es 07_gas 2 314 1.0 0.0 -es 08_non-res 2 314 1.0 0.0 +es 01_solar 2 314 0.0 1.0 +es 02_wind_on 2 314 0.0 1.0 +es 03_wind_off 2 314 0.0 1.0 +es 04_res 2 314 0.0 1.0 +es 05_nuclear 2 314 0.0 1.0 +es 06_coal 2 314 0.0 1.0 +es 07_gas 2 314 0.0 1.0 +es 08_non-res 2 314 0.0 1.0 es 09_hydro_pump 2 314 0.0 0.0 -es 01_solar 2 315 1.0 0.0 -es 02_wind_on 2 315 1.0 0.0 -es 03_wind_off 2 315 1.0 0.0 -es 04_res 2 315 1.0 0.0 -es 05_nuclear 2 315 1.0 0.0 -es 06_coal 2 315 1.0 0.0 -es 07_gas 2 315 1.0 0.0 -es 08_non-res 2 315 1.0 0.0 +es 01_solar 2 315 0.0 1.0 +es 02_wind_on 2 315 0.0 1.0 +es 03_wind_off 2 315 0.0 1.0 +es 04_res 2 315 0.0 1.0 +es 05_nuclear 2 315 0.0 1.0 +es 06_coal 2 315 0.0 1.0 +es 07_gas 2 315 0.0 1.0 +es 08_non-res 2 315 0.0 1.0 es 09_hydro_pump 2 315 0.0 0.0 -es 01_solar 2 316 1.0 0.0 -es 02_wind_on 2 316 1.0 0.0 -es 03_wind_off 2 316 1.0 0.0 -es 04_res 2 316 1.0 0.0 -es 05_nuclear 2 316 1.0 0.0 -es 06_coal 2 316 1.0 0.0 -es 07_gas 2 316 1.0 0.0 -es 08_non-res 2 316 1.0 0.0 +es 01_solar 2 316 0.0 1.0 +es 02_wind_on 2 316 0.0 1.0 +es 03_wind_off 2 316 0.0 1.0 +es 04_res 2 316 0.0 1.0 +es 05_nuclear 2 316 0.0 1.0 +es 06_coal 2 316 0.0 1.0 +es 07_gas 2 316 0.0 1.0 +es 08_non-res 2 316 0.0 1.0 es 09_hydro_pump 2 316 0.0 0.0 -es 01_solar 2 317 1.0 0.0 -es 02_wind_on 2 317 1.0 0.0 -es 03_wind_off 2 317 1.0 0.0 -es 04_res 2 317 1.0 0.0 -es 05_nuclear 2 317 1.0 0.0 -es 06_coal 2 317 1.0 0.0 -es 07_gas 2 317 1.0 0.0 -es 08_non-res 2 317 1.0 0.0 +es 01_solar 2 317 0.0 1.0 +es 02_wind_on 2 317 0.0 1.0 +es 03_wind_off 2 317 0.0 1.0 +es 04_res 2 317 0.0 1.0 +es 05_nuclear 2 317 0.0 1.0 +es 06_coal 2 317 0.0 1.0 +es 07_gas 2 317 0.0 1.0 +es 08_non-res 2 317 0.0 1.0 es 09_hydro_pump 2 317 0.0 0.0 -es 01_solar 2 318 1.0 0.0 -es 02_wind_on 2 318 1.0 0.0 -es 03_wind_off 2 318 1.0 0.0 -es 04_res 2 318 1.0 0.0 -es 05_nuclear 2 318 1.0 0.0 -es 06_coal 2 318 1.0 0.0 -es 07_gas 2 318 1.0 0.0 -es 08_non-res 2 318 1.0 0.0 +es 01_solar 2 318 0.0 1.0 +es 02_wind_on 2 318 0.0 1.0 +es 03_wind_off 2 318 0.0 1.0 +es 04_res 2 318 0.0 1.0 +es 05_nuclear 2 318 0.0 1.0 +es 06_coal 2 318 0.0 1.0 +es 07_gas 2 318 0.0 1.0 +es 08_non-res 2 318 0.0 1.0 es 09_hydro_pump 2 318 0.0 0.0 -es 01_solar 2 319 1.0 0.0 -es 02_wind_on 2 319 1.0 0.0 -es 03_wind_off 2 319 1.0 0.0 -es 04_res 2 319 1.0 0.0 -es 05_nuclear 2 319 1.0 0.0 -es 06_coal 2 319 1.0 0.0 -es 07_gas 2 319 1.0 0.0 -es 08_non-res 2 319 1.0 0.0 +es 01_solar 2 319 0.0 1.0 +es 02_wind_on 2 319 0.0 1.0 +es 03_wind_off 2 319 0.0 1.0 +es 04_res 2 319 0.0 1.0 +es 05_nuclear 2 319 0.0 1.0 +es 06_coal 2 319 0.0 1.0 +es 07_gas 2 319 0.0 1.0 +es 08_non-res 2 319 0.0 1.0 es 09_hydro_pump 2 319 0.0 0.0 -es 01_solar 2 320 1.0 0.0 -es 02_wind_on 2 320 1.0 0.0 -es 03_wind_off 2 320 1.0 0.0 -es 04_res 2 320 1.0 0.0 -es 05_nuclear 2 320 1.0 0.0 -es 06_coal 2 320 1.0 0.0 -es 07_gas 2 320 1.0 0.0 -es 08_non-res 2 320 1.0 0.0 +es 01_solar 2 320 0.0 1.0 +es 02_wind_on 2 320 0.0 1.0 +es 03_wind_off 2 320 0.0 1.0 +es 04_res 2 320 0.0 1.0 +es 05_nuclear 2 320 0.0 1.0 +es 06_coal 2 320 0.0 1.0 +es 07_gas 2 320 0.0 1.0 +es 08_non-res 2 320 0.0 1.0 es 09_hydro_pump 2 320 0.0 0.0 -es 01_solar 2 321 1.0 0.0 -es 02_wind_on 2 321 1.0 0.0 -es 03_wind_off 2 321 1.0 0.0 -es 04_res 2 321 1.0 0.0 -es 05_nuclear 2 321 1.0 0.0 -es 06_coal 2 321 1.0 0.0 -es 07_gas 2 321 1.0 0.0 -es 08_non-res 2 321 1.0 0.0 +es 01_solar 2 321 0.0 1.0 +es 02_wind_on 2 321 0.0 1.0 +es 03_wind_off 2 321 0.0 1.0 +es 04_res 2 321 0.0 1.0 +es 05_nuclear 2 321 0.0 1.0 +es 06_coal 2 321 0.0 1.0 +es 07_gas 2 321 0.0 1.0 +es 08_non-res 2 321 0.0 1.0 es 09_hydro_pump 2 321 0.0 0.0 -es 01_solar 2 322 1.0 0.0 -es 02_wind_on 2 322 1.0 0.0 -es 03_wind_off 2 322 1.0 0.0 -es 04_res 2 322 1.0 0.0 -es 05_nuclear 2 322 1.0 0.0 -es 06_coal 2 322 1.0 0.0 -es 07_gas 2 322 1.0 0.0 -es 08_non-res 2 322 1.0 0.0 +es 01_solar 2 322 0.0 1.0 +es 02_wind_on 2 322 0.0 1.0 +es 03_wind_off 2 322 0.0 1.0 +es 04_res 2 322 0.0 1.0 +es 05_nuclear 2 322 0.0 1.0 +es 06_coal 2 322 0.0 1.0 +es 07_gas 2 322 0.0 1.0 +es 08_non-res 2 322 0.0 1.0 es 09_hydro_pump 2 322 0.0 0.0 -es 01_solar 2 323 1.0 0.0 -es 02_wind_on 2 323 1.0 0.0 -es 03_wind_off 2 323 1.0 0.0 -es 04_res 2 323 1.0 0.0 -es 05_nuclear 2 323 1.0 0.0 -es 06_coal 2 323 1.0 0.0 -es 07_gas 2 323 1.0 0.0 -es 08_non-res 2 323 1.0 0.0 +es 01_solar 2 323 0.0 1.0 +es 02_wind_on 2 323 0.0 1.0 +es 03_wind_off 2 323 0.0 1.0 +es 04_res 2 323 0.0 1.0 +es 05_nuclear 2 323 0.0 1.0 +es 06_coal 2 323 0.0 1.0 +es 07_gas 2 323 0.0 1.0 +es 08_non-res 2 323 0.0 1.0 es 09_hydro_pump 2 323 0.0 0.0 -es 01_solar 2 324 1.0 0.0 -es 02_wind_on 2 324 1.0 0.0 -es 03_wind_off 2 324 1.0 0.0 -es 04_res 2 324 1.0 0.0 -es 05_nuclear 2 324 1.0 0.0 -es 06_coal 2 324 1.0 0.0 -es 07_gas 2 324 1.0 0.0 -es 08_non-res 2 324 1.0 0.0 +es 01_solar 2 324 0.0 1.0 +es 02_wind_on 2 324 0.0 1.0 +es 03_wind_off 2 324 0.0 1.0 +es 04_res 2 324 0.0 1.0 +es 05_nuclear 2 324 0.0 1.0 +es 06_coal 2 324 0.0 1.0 +es 07_gas 2 324 0.0 1.0 +es 08_non-res 2 324 0.0 1.0 es 09_hydro_pump 2 324 0.0 0.0 -es 01_solar 2 325 1.0 0.0 -es 02_wind_on 2 325 1.0 0.0 -es 03_wind_off 2 325 1.0 0.0 -es 04_res 2 325 1.0 0.0 -es 05_nuclear 2 325 1.0 0.0 -es 06_coal 2 325 1.0 0.0 -es 07_gas 2 325 1.0 0.0 -es 08_non-res 2 325 1.0 0.0 +es 01_solar 2 325 0.0 1.0 +es 02_wind_on 2 325 0.0 1.0 +es 03_wind_off 2 325 0.0 1.0 +es 04_res 2 325 0.0 1.0 +es 05_nuclear 2 325 0.0 1.0 +es 06_coal 2 325 0.0 1.0 +es 07_gas 2 325 0.0 1.0 +es 08_non-res 2 325 0.0 1.0 es 09_hydro_pump 2 325 0.0 0.0 -es 01_solar 2 326 1.0 0.0 -es 02_wind_on 2 326 1.0 0.0 -es 03_wind_off 2 326 1.0 0.0 -es 04_res 2 326 1.0 0.0 -es 05_nuclear 2 326 1.0 0.0 -es 06_coal 2 326 1.0 0.0 -es 07_gas 2 326 1.0 0.0 -es 08_non-res 2 326 1.0 0.0 +es 01_solar 2 326 0.0 1.0 +es 02_wind_on 2 326 0.0 1.0 +es 03_wind_off 2 326 0.0 1.0 +es 04_res 2 326 0.0 1.0 +es 05_nuclear 2 326 0.0 1.0 +es 06_coal 2 326 0.0 1.0 +es 07_gas 2 326 0.0 1.0 +es 08_non-res 2 326 0.0 1.0 es 09_hydro_pump 2 326 0.0 0.0 -es 01_solar 2 327 1.0 0.0 -es 02_wind_on 2 327 1.0 0.0 -es 03_wind_off 2 327 1.0 0.0 -es 04_res 2 327 1.0 0.0 -es 05_nuclear 2 327 1.0 0.0 -es 06_coal 2 327 1.0 0.0 -es 07_gas 2 327 1.0 0.0 -es 08_non-res 2 327 1.0 0.0 +es 01_solar 2 327 0.0 1.0 +es 02_wind_on 2 327 0.0 1.0 +es 03_wind_off 2 327 0.0 1.0 +es 04_res 2 327 0.0 1.0 +es 05_nuclear 2 327 0.0 1.0 +es 06_coal 2 327 0.0 1.0 +es 07_gas 2 327 0.0 1.0 +es 08_non-res 2 327 0.0 1.0 es 09_hydro_pump 2 327 0.0 0.0 -es 01_solar 2 328 1.0 0.0 -es 02_wind_on 2 328 1.0 0.0 -es 03_wind_off 2 328 1.0 0.0 -es 04_res 2 328 1.0 0.0 -es 05_nuclear 2 328 1.0 0.0 -es 06_coal 2 328 1.0 0.0 -es 07_gas 2 328 1.0 0.0 -es 08_non-res 2 328 1.0 0.0 +es 01_solar 2 328 0.0 1.0 +es 02_wind_on 2 328 0.0 1.0 +es 03_wind_off 2 328 0.0 1.0 +es 04_res 2 328 0.0 1.0 +es 05_nuclear 2 328 0.0 1.0 +es 06_coal 2 328 0.0 1.0 +es 07_gas 2 328 0.0 1.0 +es 08_non-res 2 328 0.0 1.0 es 09_hydro_pump 2 328 0.0 0.0 -es 01_solar 2 329 1.0 0.0 -es 02_wind_on 2 329 1.0 0.0 -es 03_wind_off 2 329 1.0 0.0 -es 04_res 2 329 1.0 0.0 -es 05_nuclear 2 329 1.0 0.0 -es 06_coal 2 329 1.0 0.0 -es 07_gas 2 329 1.0 0.0 -es 08_non-res 2 329 1.0 0.0 +es 01_solar 2 329 0.0 1.0 +es 02_wind_on 2 329 0.0 1.0 +es 03_wind_off 2 329 0.0 1.0 +es 04_res 2 329 0.0 1.0 +es 05_nuclear 2 329 0.0 1.0 +es 06_coal 2 329 0.0 1.0 +es 07_gas 2 329 0.0 1.0 +es 08_non-res 2 329 0.0 1.0 es 09_hydro_pump 2 329 0.0 0.0 -es 01_solar 2 330 1.0 0.0 -es 02_wind_on 2 330 1.0 0.0 -es 03_wind_off 2 330 1.0 0.0 -es 04_res 2 330 1.0 0.0 -es 05_nuclear 2 330 1.0 0.0 -es 06_coal 2 330 1.0 0.0 -es 07_gas 2 330 1.0 0.0 -es 08_non-res 2 330 1.0 0.0 -es 09_hydro_pump 2 330 1.0 0.0 -es 01_solar 2 331 1.0 0.0 -es 02_wind_on 2 331 1.0 0.0 -es 03_wind_off 2 331 1.0 0.0 -es 04_res 2 331 1.0 0.0 -es 05_nuclear 2 331 1.0 0.0 -es 06_coal 2 331 1.0 0.0 -es 07_gas 2 331 1.0 0.0 -es 08_non-res 2 331 1.0 0.0 -es 09_hydro_pump 2 331 1.0 0.0 -es 01_solar 2 332 1.0 0.0 -es 02_wind_on 2 332 1.0 0.0 -es 03_wind_off 2 332 1.0 0.0 -es 04_res 2 332 1.0 0.0 -es 05_nuclear 2 332 1.0 0.0 -es 06_coal 2 332 1.0 0.0 -es 07_gas 2 332 1.0 0.0 -es 08_non-res 2 332 1.0 0.0 -es 09_hydro_pump 2 332 1.0 0.0 -es 01_solar 2 333 1.0 0.0 -es 02_wind_on 2 333 1.0 0.0 -es 03_wind_off 2 333 1.0 0.0 -es 04_res 2 333 1.0 0.0 -es 05_nuclear 2 333 1.0 0.0 -es 06_coal 2 333 1.0 0.0 -es 07_gas 2 333 1.0 0.0 -es 08_non-res 2 333 1.0 0.0 -es 09_hydro_pump 2 333 1.0 0.0 -es 01_solar 2 334 1.0 0.0 -es 02_wind_on 2 334 1.0 0.0 -es 03_wind_off 2 334 1.0 0.0 -es 04_res 2 334 1.0 0.0 -es 05_nuclear 2 334 1.0 0.0 -es 06_coal 2 334 1.0 0.0 -es 07_gas 2 334 1.0 0.0 -es 08_non-res 2 334 1.0 0.0 -es 09_hydro_pump 2 334 1.0 0.0 -es 01_solar 2 335 1.0 0.0 -es 02_wind_on 2 335 1.0 0.0 -es 03_wind_off 2 335 1.0 0.0 -es 04_res 2 335 1.0 0.0 -es 05_nuclear 2 335 1.0 0.0 -es 06_coal 2 335 1.0 0.0 -es 07_gas 2 335 1.0 0.0 -es 08_non-res 2 335 1.0 0.0 -es 09_hydro_pump 2 335 1.0 0.0 -es 01_solar 2 336 1.0 0.0 -es 02_wind_on 2 336 1.0 0.0 -es 03_wind_off 2 336 1.0 0.0 -es 04_res 2 336 1.0 0.0 -es 05_nuclear 2 336 1.0 0.0 -es 06_coal 2 336 1.0 0.0 -es 07_gas 2 336 1.0 0.0 -es 08_non-res 2 336 1.0 0.0 -es 09_hydro_pump 2 336 1.0 0.0 +es 01_solar 2 330 0.0 1.0 +es 02_wind_on 2 330 0.0 1.0 +es 03_wind_off 2 330 0.0 1.0 +es 04_res 2 330 0.0 1.0 +es 05_nuclear 2 330 0.0 1.0 +es 06_coal 2 330 0.0 1.0 +es 07_gas 2 330 0.0 1.0 +es 08_non-res 2 330 0.0 1.0 +es 09_hydro_pump 2 330 0.0 1.0 +es 01_solar 2 331 0.0 1.0 +es 02_wind_on 2 331 0.0 1.0 +es 03_wind_off 2 331 0.0 1.0 +es 04_res 2 331 0.0 1.0 +es 05_nuclear 2 331 0.0 1.0 +es 06_coal 2 331 0.0 1.0 +es 07_gas 2 331 0.0 1.0 +es 08_non-res 2 331 0.0 1.0 +es 09_hydro_pump 2 331 0.0 1.0 +es 01_solar 2 332 0.0 1.0 +es 02_wind_on 2 332 0.0 1.0 +es 03_wind_off 2 332 0.0 1.0 +es 04_res 2 332 0.0 1.0 +es 05_nuclear 2 332 0.0 1.0 +es 06_coal 2 332 0.0 1.0 +es 07_gas 2 332 0.0 1.0 +es 08_non-res 2 332 0.0 1.0 +es 09_hydro_pump 2 332 0.0 1.0 +es 01_solar 2 333 0.0 1.0 +es 02_wind_on 2 333 0.0 1.0 +es 03_wind_off 2 333 0.0 1.0 +es 04_res 2 333 0.0 1.0 +es 05_nuclear 2 333 0.0 1.0 +es 06_coal 2 333 0.0 1.0 +es 07_gas 2 333 0.0 1.0 +es 08_non-res 2 333 0.0 1.0 +es 09_hydro_pump 2 333 0.0 1.0 +es 01_solar 2 334 0.0 1.0 +es 02_wind_on 2 334 0.0 1.0 +es 03_wind_off 2 334 0.0 1.0 +es 04_res 2 334 0.0 1.0 +es 05_nuclear 2 334 0.0 1.0 +es 06_coal 2 334 0.0 1.0 +es 07_gas 2 334 0.0 1.0 +es 08_non-res 2 334 0.0 1.0 +es 09_hydro_pump 2 334 0.0 1.0 +es 01_solar 2 335 0.0 1.0 +es 02_wind_on 2 335 0.0 1.0 +es 03_wind_off 2 335 0.0 1.0 +es 04_res 2 335 0.0 1.0 +es 05_nuclear 2 335 0.0 1.0 +es 06_coal 2 335 0.0 1.0 +es 07_gas 2 335 0.0 1.0 +es 08_non-res 2 335 0.0 1.0 +es 09_hydro_pump 2 335 0.0 1.0 +es 01_solar 2 336 0.0 1.0 +es 02_wind_on 2 336 0.0 1.0 +es 03_wind_off 2 336 0.0 1.0 +es 04_res 2 336 0.0 1.0 +es 05_nuclear 2 336 0.0 1.0 +es 06_coal 2 336 0.0 1.0 +es 07_gas 2 336 0.0 1.0 +es 08_non-res 2 336 0.0 1.0 +es 09_hydro_pump 2 336 0.0 1.0 fr 01_solar 2 1 0.0 0.0 fr 02_wind_on 2 1 0.0 0.0 fr 03_wind_off 2 1 0.0 0.0 @@ -18152,7 +18152,7 @@ fr 06_coal 2 1 0.0 0.0 fr 07_gas 2 1 0.0 0.0 fr 08_non-res 2 1 0.0 0.0 fr 09_hydro_pump 2 1 0.0 0.0 -fr 01_solar 2 2 1.0 0.0 +fr 01_solar 2 2 0.0 1.0 fr 02_wind_on 2 2 0.0 0.0 fr 03_wind_off 2 2 0.0 0.0 fr 04_res 2 2 0.0 0.0 @@ -18161,7 +18161,7 @@ fr 06_coal 2 2 0.0 0.0 fr 07_gas 2 2 0.0 0.0 fr 08_non-res 2 2 0.0 0.0 fr 09_hydro_pump 2 2 0.0 0.0 -fr 01_solar 2 3 1.0 0.0 +fr 01_solar 2 3 0.0 1.0 fr 02_wind_on 2 3 0.0 0.0 fr 03_wind_off 2 3 0.0 0.0 fr 04_res 2 3 0.0 0.0 @@ -18170,7 +18170,7 @@ fr 06_coal 2 3 0.0 0.0 fr 07_gas 2 3 0.0 0.0 fr 08_non-res 2 3 0.0 0.0 fr 09_hydro_pump 2 3 0.0 0.0 -fr 01_solar 2 4 1.0 0.0 +fr 01_solar 2 4 0.0 1.0 fr 02_wind_on 2 4 0.0 0.0 fr 03_wind_off 2 4 0.0 0.0 fr 04_res 2 4 0.0 0.0 @@ -18179,7 +18179,7 @@ fr 06_coal 2 4 0.0 0.0 fr 07_gas 2 4 0.0 0.0 fr 08_non-res 2 4 0.0 0.0 fr 09_hydro_pump 2 4 0.0 0.0 -fr 01_solar 2 5 1.0 0.0 +fr 01_solar 2 5 0.0 1.0 fr 02_wind_on 2 5 0.0 0.0 fr 03_wind_off 2 5 0.0 0.0 fr 04_res 2 5 0.0 0.0 @@ -18188,7 +18188,7 @@ fr 06_coal 2 5 0.0 0.0 fr 07_gas 2 5 0.0 0.0 fr 08_non-res 2 5 0.0 0.0 fr 09_hydro_pump 2 5 0.0 0.0 -fr 01_solar 2 6 1.0 0.0 +fr 01_solar 2 6 0.0 1.0 fr 02_wind_on 2 6 0.0 0.0 fr 03_wind_off 2 6 0.0 0.0 fr 04_res 2 6 0.0 0.0 @@ -18197,7 +18197,7 @@ fr 06_coal 2 6 0.0 0.0 fr 07_gas 2 6 0.0 0.0 fr 08_non-res 2 6 0.0 0.0 fr 09_hydro_pump 2 6 0.0 0.0 -fr 01_solar 2 7 1.0 0.0 +fr 01_solar 2 7 0.0 1.0 fr 02_wind_on 2 7 0.0 0.0 fr 03_wind_off 2 7 0.0 0.0 fr 04_res 2 7 0.0 0.0 @@ -18206,7 +18206,7 @@ fr 06_coal 2 7 0.0 0.0 fr 07_gas 2 7 0.0 0.0 fr 08_non-res 2 7 0.0 0.0 fr 09_hydro_pump 2 7 0.0 0.0 -fr 01_solar 2 8 1.0 0.0 +fr 01_solar 2 8 0.0 1.0 fr 02_wind_on 2 8 0.0 0.0 fr 03_wind_off 2 8 0.0 0.0 fr 04_res 2 8 0.0 0.0 @@ -18215,7 +18215,7 @@ fr 06_coal 2 8 0.0 0.0 fr 07_gas 2 8 0.0 0.0 fr 08_non-res 2 8 0.0 0.0 fr 09_hydro_pump 2 8 0.0 0.0 -fr 01_solar 2 9 1.0 0.0 +fr 01_solar 2 9 0.0 1.0 fr 02_wind_on 2 9 0.0 0.0 fr 03_wind_off 2 9 0.0 0.0 fr 04_res 2 9 0.0 0.0 @@ -18224,7 +18224,7 @@ fr 06_coal 2 9 0.0 0.0 fr 07_gas 2 9 0.0 0.0 fr 08_non-res 2 9 0.0 0.0 fr 09_hydro_pump 2 9 0.0 0.0 -fr 01_solar 2 10 1.0 0.0 +fr 01_solar 2 10 0.0 1.0 fr 02_wind_on 2 10 0.0 0.0 fr 03_wind_off 2 10 0.0 0.0 fr 04_res 2 10 0.0 0.0 @@ -18233,7 +18233,7 @@ fr 06_coal 2 10 0.0 0.0 fr 07_gas 2 10 0.0 0.0 fr 08_non-res 2 10 0.0 0.0 fr 09_hydro_pump 2 10 0.0 0.0 -fr 01_solar 2 11 1.0 0.0 +fr 01_solar 2 11 0.0 1.0 fr 02_wind_on 2 11 0.0 0.0 fr 03_wind_off 2 11 0.0 0.0 fr 04_res 2 11 0.0 0.0 @@ -18242,7 +18242,7 @@ fr 06_coal 2 11 0.0 0.0 fr 07_gas 2 11 0.0 0.0 fr 08_non-res 2 11 0.0 0.0 fr 09_hydro_pump 2 11 0.0 0.0 -fr 01_solar 2 12 1.0 0.0 +fr 01_solar 2 12 0.0 1.0 fr 02_wind_on 2 12 0.0 0.0 fr 03_wind_off 2 12 0.0 0.0 fr 04_res 2 12 0.0 0.0 @@ -18251,7 +18251,7 @@ fr 06_coal 2 12 0.0 0.0 fr 07_gas 2 12 0.0 0.0 fr 08_non-res 2 12 0.0 0.0 fr 09_hydro_pump 2 12 0.0 0.0 -fr 01_solar 2 13 1.0 0.0 +fr 01_solar 2 13 0.0 1.0 fr 02_wind_on 2 13 0.0 0.0 fr 03_wind_off 2 13 0.0 0.0 fr 04_res 2 13 0.0 0.0 @@ -18260,7 +18260,7 @@ fr 06_coal 2 13 0.0 0.0 fr 07_gas 2 13 0.0 0.0 fr 08_non-res 2 13 0.0 0.0 fr 09_hydro_pump 2 13 0.0 0.0 -fr 01_solar 2 14 1.0 0.0 +fr 01_solar 2 14 0.0 1.0 fr 02_wind_on 2 14 0.0 0.0 fr 03_wind_off 2 14 0.0 0.0 fr 04_res 2 14 0.0 0.0 @@ -18269,7 +18269,7 @@ fr 06_coal 2 14 0.0 0.0 fr 07_gas 2 14 0.0 0.0 fr 08_non-res 2 14 0.0 0.0 fr 09_hydro_pump 2 14 0.0 0.0 -fr 01_solar 2 15 1.0 0.0 +fr 01_solar 2 15 0.0 1.0 fr 02_wind_on 2 15 0.0 0.0 fr 03_wind_off 2 15 0.0 0.0 fr 04_res 2 15 0.0 0.0 @@ -18278,7 +18278,7 @@ fr 06_coal 2 15 0.0 0.0 fr 07_gas 2 15 0.0 0.0 fr 08_non-res 2 15 0.0 0.0 fr 09_hydro_pump 2 15 0.0 0.0 -fr 01_solar 2 16 1.0 0.0 +fr 01_solar 2 16 0.0 1.0 fr 02_wind_on 2 16 0.0 0.0 fr 03_wind_off 2 16 0.0 0.0 fr 04_res 2 16 0.0 0.0 @@ -18287,7 +18287,7 @@ fr 06_coal 2 16 0.0 0.0 fr 07_gas 2 16 0.0 0.0 fr 08_non-res 2 16 0.0 0.0 fr 09_hydro_pump 2 16 0.0 0.0 -fr 01_solar 2 17 1.0 0.0 +fr 01_solar 2 17 0.0 1.0 fr 02_wind_on 2 17 0.0 0.0 fr 03_wind_off 2 17 0.0 0.0 fr 04_res 2 17 0.0 0.0 @@ -18296,7 +18296,7 @@ fr 06_coal 2 17 0.0 0.0 fr 07_gas 2 17 0.0 0.0 fr 08_non-res 2 17 0.0 0.0 fr 09_hydro_pump 2 17 0.0 0.0 -fr 01_solar 2 18 1.0 0.0 +fr 01_solar 2 18 0.0 1.0 fr 02_wind_on 2 18 0.0 0.0 fr 03_wind_off 2 18 0.0 0.0 fr 04_res 2 18 0.0 0.0 @@ -18305,7 +18305,7 @@ fr 06_coal 2 18 0.0 0.0 fr 07_gas 2 18 0.0 0.0 fr 08_non-res 2 18 0.0 0.0 fr 09_hydro_pump 2 18 0.0 0.0 -fr 01_solar 2 19 1.0 0.0 +fr 01_solar 2 19 0.0 1.0 fr 02_wind_on 2 19 0.0 0.0 fr 03_wind_off 2 19 0.0 0.0 fr 04_res 2 19 0.0 0.0 @@ -18314,7 +18314,7 @@ fr 06_coal 2 19 0.0 0.0 fr 07_gas 2 19 0.0 0.0 fr 08_non-res 2 19 0.0 0.0 fr 09_hydro_pump 2 19 0.0 0.0 -fr 01_solar 2 20 1.0 0.0 +fr 01_solar 2 20 0.0 1.0 fr 02_wind_on 2 20 0.0 0.0 fr 03_wind_off 2 20 0.0 0.0 fr 04_res 2 20 0.0 0.0 @@ -18323,7 +18323,7 @@ fr 06_coal 2 20 0.0 0.0 fr 07_gas 2 20 0.0 0.0 fr 08_non-res 2 20 0.0 0.0 fr 09_hydro_pump 2 20 0.0 0.0 -fr 01_solar 2 21 1.0 0.0 +fr 01_solar 2 21 0.0 1.0 fr 02_wind_on 2 21 0.0 0.0 fr 03_wind_off 2 21 0.0 0.0 fr 04_res 2 21 0.0 0.0 @@ -18332,8 +18332,8 @@ fr 06_coal 2 21 0.0 0.0 fr 07_gas 2 21 0.0 0.0 fr 08_non-res 2 21 0.0 0.0 fr 09_hydro_pump 2 21 0.0 0.0 -fr 01_solar 2 22 1.0 0.0 -fr 02_wind_on 2 22 1.0 0.0 +fr 01_solar 2 22 0.0 1.0 +fr 02_wind_on 2 22 0.0 1.0 fr 03_wind_off 2 22 0.0 0.0 fr 04_res 2 22 0.0 0.0 fr 05_nuclear 2 22 0.0 0.0 @@ -18341,8 +18341,8 @@ fr 06_coal 2 22 0.0 0.0 fr 07_gas 2 22 0.0 0.0 fr 08_non-res 2 22 0.0 0.0 fr 09_hydro_pump 2 22 0.0 0.0 -fr 01_solar 2 23 1.0 0.0 -fr 02_wind_on 2 23 1.0 0.0 +fr 01_solar 2 23 0.0 1.0 +fr 02_wind_on 2 23 0.0 1.0 fr 03_wind_off 2 23 0.0 0.0 fr 04_res 2 23 0.0 0.0 fr 05_nuclear 2 23 0.0 0.0 @@ -18350,8 +18350,8 @@ fr 06_coal 2 23 0.0 0.0 fr 07_gas 2 23 0.0 0.0 fr 08_non-res 2 23 0.0 0.0 fr 09_hydro_pump 2 23 0.0 0.0 -fr 01_solar 2 24 1.0 0.0 -fr 02_wind_on 2 24 1.0 0.0 +fr 01_solar 2 24 0.0 1.0 +fr 02_wind_on 2 24 0.0 1.0 fr 03_wind_off 2 24 0.0 0.0 fr 04_res 2 24 0.0 0.0 fr 05_nuclear 2 24 0.0 0.0 @@ -18359,8 +18359,8 @@ fr 06_coal 2 24 0.0 0.0 fr 07_gas 2 24 0.0 0.0 fr 08_non-res 2 24 0.0 0.0 fr 09_hydro_pump 2 24 0.0 0.0 -fr 01_solar 2 25 1.0 0.0 -fr 02_wind_on 2 25 1.0 0.0 +fr 01_solar 2 25 0.0 1.0 +fr 02_wind_on 2 25 0.0 1.0 fr 03_wind_off 2 25 0.0 0.0 fr 04_res 2 25 0.0 0.0 fr 05_nuclear 2 25 0.0 0.0 @@ -18368,8 +18368,8 @@ fr 06_coal 2 25 0.0 0.0 fr 07_gas 2 25 0.0 0.0 fr 08_non-res 2 25 0.0 0.0 fr 09_hydro_pump 2 25 0.0 0.0 -fr 01_solar 2 26 1.0 0.0 -fr 02_wind_on 2 26 1.0 0.0 +fr 01_solar 2 26 0.0 1.0 +fr 02_wind_on 2 26 0.0 1.0 fr 03_wind_off 2 26 0.0 0.0 fr 04_res 2 26 0.0 0.0 fr 05_nuclear 2 26 0.0 0.0 @@ -18377,8 +18377,8 @@ fr 06_coal 2 26 0.0 0.0 fr 07_gas 2 26 0.0 0.0 fr 08_non-res 2 26 0.0 0.0 fr 09_hydro_pump 2 26 0.0 0.0 -fr 01_solar 2 27 1.0 0.0 -fr 02_wind_on 2 27 1.0 0.0 +fr 01_solar 2 27 0.0 1.0 +fr 02_wind_on 2 27 0.0 1.0 fr 03_wind_off 2 27 0.0 0.0 fr 04_res 2 27 0.0 0.0 fr 05_nuclear 2 27 0.0 0.0 @@ -18386,8 +18386,8 @@ fr 06_coal 2 27 0.0 0.0 fr 07_gas 2 27 0.0 0.0 fr 08_non-res 2 27 0.0 0.0 fr 09_hydro_pump 2 27 0.0 0.0 -fr 01_solar 2 28 1.0 0.0 -fr 02_wind_on 2 28 1.0 0.0 +fr 01_solar 2 28 0.0 1.0 +fr 02_wind_on 2 28 0.0 1.0 fr 03_wind_off 2 28 0.0 0.0 fr 04_res 2 28 0.0 0.0 fr 05_nuclear 2 28 0.0 0.0 @@ -18395,8 +18395,8 @@ fr 06_coal 2 28 0.0 0.0 fr 07_gas 2 28 0.0 0.0 fr 08_non-res 2 28 0.0 0.0 fr 09_hydro_pump 2 28 0.0 0.0 -fr 01_solar 2 29 1.0 0.0 -fr 02_wind_on 2 29 1.0 0.0 +fr 01_solar 2 29 0.0 1.0 +fr 02_wind_on 2 29 0.0 1.0 fr 03_wind_off 2 29 0.0 0.0 fr 04_res 2 29 0.0 0.0 fr 05_nuclear 2 29 0.0 0.0 @@ -18404,8 +18404,8 @@ fr 06_coal 2 29 0.0 0.0 fr 07_gas 2 29 0.0 0.0 fr 08_non-res 2 29 0.0 0.0 fr 09_hydro_pump 2 29 0.0 0.0 -fr 01_solar 2 30 1.0 0.0 -fr 02_wind_on 2 30 1.0 0.0 +fr 01_solar 2 30 0.0 1.0 +fr 02_wind_on 2 30 0.0 1.0 fr 03_wind_off 2 30 0.0 0.0 fr 04_res 2 30 0.0 0.0 fr 05_nuclear 2 30 0.0 0.0 @@ -18413,8 +18413,8 @@ fr 06_coal 2 30 0.0 0.0 fr 07_gas 2 30 0.0 0.0 fr 08_non-res 2 30 0.0 0.0 fr 09_hydro_pump 2 30 0.0 0.0 -fr 01_solar 2 31 1.0 0.0 -fr 02_wind_on 2 31 1.0 0.0 +fr 01_solar 2 31 0.0 1.0 +fr 02_wind_on 2 31 0.0 1.0 fr 03_wind_off 2 31 0.0 0.0 fr 04_res 2 31 0.0 0.0 fr 05_nuclear 2 31 0.0 0.0 @@ -18422,8 +18422,8 @@ fr 06_coal 2 31 0.0 0.0 fr 07_gas 2 31 0.0 0.0 fr 08_non-res 2 31 0.0 0.0 fr 09_hydro_pump 2 31 0.0 0.0 -fr 01_solar 2 32 1.0 0.0 -fr 02_wind_on 2 32 1.0 0.0 +fr 01_solar 2 32 0.0 1.0 +fr 02_wind_on 2 32 0.0 1.0 fr 03_wind_off 2 32 0.0 0.0 fr 04_res 2 32 0.0 0.0 fr 05_nuclear 2 32 0.0 0.0 @@ -18431,8 +18431,8 @@ fr 06_coal 2 32 0.0 0.0 fr 07_gas 2 32 0.0 0.0 fr 08_non-res 2 32 0.0 0.0 fr 09_hydro_pump 2 32 0.0 0.0 -fr 01_solar 2 33 1.0 0.0 -fr 02_wind_on 2 33 1.0 0.0 +fr 01_solar 2 33 0.0 1.0 +fr 02_wind_on 2 33 0.0 1.0 fr 03_wind_off 2 33 0.0 0.0 fr 04_res 2 33 0.0 0.0 fr 05_nuclear 2 33 0.0 0.0 @@ -18440,8 +18440,8 @@ fr 06_coal 2 33 0.0 0.0 fr 07_gas 2 33 0.0 0.0 fr 08_non-res 2 33 0.0 0.0 fr 09_hydro_pump 2 33 0.0 0.0 -fr 01_solar 2 34 1.0 0.0 -fr 02_wind_on 2 34 1.0 0.0 +fr 01_solar 2 34 0.0 1.0 +fr 02_wind_on 2 34 0.0 1.0 fr 03_wind_off 2 34 0.0 0.0 fr 04_res 2 34 0.0 0.0 fr 05_nuclear 2 34 0.0 0.0 @@ -18449,8 +18449,8 @@ fr 06_coal 2 34 0.0 0.0 fr 07_gas 2 34 0.0 0.0 fr 08_non-res 2 34 0.0 0.0 fr 09_hydro_pump 2 34 0.0 0.0 -fr 01_solar 2 35 1.0 0.0 -fr 02_wind_on 2 35 1.0 0.0 +fr 01_solar 2 35 0.0 1.0 +fr 02_wind_on 2 35 0.0 1.0 fr 03_wind_off 2 35 0.0 0.0 fr 04_res 2 35 0.0 0.0 fr 05_nuclear 2 35 0.0 0.0 @@ -18458,8 +18458,8 @@ fr 06_coal 2 35 0.0 0.0 fr 07_gas 2 35 0.0 0.0 fr 08_non-res 2 35 0.0 0.0 fr 09_hydro_pump 2 35 0.0 0.0 -fr 01_solar 2 36 1.0 0.0 -fr 02_wind_on 2 36 1.0 0.0 +fr 01_solar 2 36 0.0 1.0 +fr 02_wind_on 2 36 0.0 1.0 fr 03_wind_off 2 36 0.0 0.0 fr 04_res 2 36 0.0 0.0 fr 05_nuclear 2 36 0.0 0.0 @@ -18467,8 +18467,8 @@ fr 06_coal 2 36 0.0 0.0 fr 07_gas 2 36 0.0 0.0 fr 08_non-res 2 36 0.0 0.0 fr 09_hydro_pump 2 36 0.0 0.0 -fr 01_solar 2 37 1.0 0.0 -fr 02_wind_on 2 37 1.0 0.0 +fr 01_solar 2 37 0.0 1.0 +fr 02_wind_on 2 37 0.0 1.0 fr 03_wind_off 2 37 0.0 0.0 fr 04_res 2 37 0.0 0.0 fr 05_nuclear 2 37 0.0 0.0 @@ -18476,8 +18476,8 @@ fr 06_coal 2 37 0.0 0.0 fr 07_gas 2 37 0.0 0.0 fr 08_non-res 2 37 0.0 0.0 fr 09_hydro_pump 2 37 0.0 0.0 -fr 01_solar 2 38 1.0 0.0 -fr 02_wind_on 2 38 1.0 0.0 +fr 01_solar 2 38 0.0 1.0 +fr 02_wind_on 2 38 0.0 1.0 fr 03_wind_off 2 38 0.0 0.0 fr 04_res 2 38 0.0 0.0 fr 05_nuclear 2 38 0.0 0.0 @@ -18485,8 +18485,8 @@ fr 06_coal 2 38 0.0 0.0 fr 07_gas 2 38 0.0 0.0 fr 08_non-res 2 38 0.0 0.0 fr 09_hydro_pump 2 38 0.0 0.0 -fr 01_solar 2 39 1.0 0.0 -fr 02_wind_on 2 39 1.0 0.0 +fr 01_solar 2 39 0.0 1.0 +fr 02_wind_on 2 39 0.0 1.0 fr 03_wind_off 2 39 0.0 0.0 fr 04_res 2 39 0.0 0.0 fr 05_nuclear 2 39 0.0 0.0 @@ -18494,8 +18494,8 @@ fr 06_coal 2 39 0.0 0.0 fr 07_gas 2 39 0.0 0.0 fr 08_non-res 2 39 0.0 0.0 fr 09_hydro_pump 2 39 0.0 0.0 -fr 01_solar 2 40 1.0 0.0 -fr 02_wind_on 2 40 1.0 0.0 +fr 01_solar 2 40 0.0 1.0 +fr 02_wind_on 2 40 0.0 1.0 fr 03_wind_off 2 40 0.0 0.0 fr 04_res 2 40 0.0 0.0 fr 05_nuclear 2 40 0.0 0.0 @@ -18503,8 +18503,8 @@ fr 06_coal 2 40 0.0 0.0 fr 07_gas 2 40 0.0 0.0 fr 08_non-res 2 40 0.0 0.0 fr 09_hydro_pump 2 40 0.0 0.0 -fr 01_solar 2 41 1.0 0.0 -fr 02_wind_on 2 41 1.0 0.0 +fr 01_solar 2 41 0.0 1.0 +fr 02_wind_on 2 41 0.0 1.0 fr 03_wind_off 2 41 0.0 0.0 fr 04_res 2 41 0.0 0.0 fr 05_nuclear 2 41 0.0 0.0 @@ -18512,1149 +18512,1149 @@ fr 06_coal 2 41 0.0 0.0 fr 07_gas 2 41 0.0 0.0 fr 08_non-res 2 41 0.0 0.0 fr 09_hydro_pump 2 41 0.0 0.0 -fr 01_solar 2 42 1.0 0.0 -fr 02_wind_on 2 42 1.0 0.0 -fr 03_wind_off 2 42 1.0 0.0 +fr 01_solar 2 42 0.0 1.0 +fr 02_wind_on 2 42 0.0 1.0 +fr 03_wind_off 2 42 0.0 1.0 fr 04_res 2 42 0.0 0.0 fr 05_nuclear 2 42 0.0 0.0 fr 06_coal 2 42 0.0 0.0 fr 07_gas 2 42 0.0 0.0 fr 08_non-res 2 42 0.0 0.0 fr 09_hydro_pump 2 42 0.0 0.0 -fr 01_solar 2 43 1.0 0.0 -fr 02_wind_on 2 43 1.0 0.0 -fr 03_wind_off 2 43 1.0 0.0 +fr 01_solar 2 43 0.0 1.0 +fr 02_wind_on 2 43 0.0 1.0 +fr 03_wind_off 2 43 0.0 1.0 fr 04_res 2 43 0.0 0.0 fr 05_nuclear 2 43 0.0 0.0 fr 06_coal 2 43 0.0 0.0 fr 07_gas 2 43 0.0 0.0 fr 08_non-res 2 43 0.0 0.0 fr 09_hydro_pump 2 43 0.0 0.0 -fr 01_solar 2 44 1.0 0.0 -fr 02_wind_on 2 44 1.0 0.0 -fr 03_wind_off 2 44 1.0 0.0 +fr 01_solar 2 44 0.0 1.0 +fr 02_wind_on 2 44 0.0 1.0 +fr 03_wind_off 2 44 0.0 1.0 fr 04_res 2 44 0.0 0.0 fr 05_nuclear 2 44 0.0 0.0 fr 06_coal 2 44 0.0 0.0 fr 07_gas 2 44 0.0 0.0 fr 08_non-res 2 44 0.0 0.0 fr 09_hydro_pump 2 44 0.0 0.0 -fr 01_solar 2 45 1.0 0.0 -fr 02_wind_on 2 45 1.0 0.0 -fr 03_wind_off 2 45 1.0 0.0 +fr 01_solar 2 45 0.0 1.0 +fr 02_wind_on 2 45 0.0 1.0 +fr 03_wind_off 2 45 0.0 1.0 fr 04_res 2 45 0.0 0.0 fr 05_nuclear 2 45 0.0 0.0 fr 06_coal 2 45 0.0 0.0 fr 07_gas 2 45 0.0 0.0 fr 08_non-res 2 45 0.0 0.0 fr 09_hydro_pump 2 45 0.0 0.0 -fr 01_solar 2 46 1.0 0.0 -fr 02_wind_on 2 46 1.0 0.0 -fr 03_wind_off 2 46 1.0 0.0 +fr 01_solar 2 46 0.0 1.0 +fr 02_wind_on 2 46 0.0 1.0 +fr 03_wind_off 2 46 0.0 1.0 fr 04_res 2 46 0.0 0.0 fr 05_nuclear 2 46 0.0 0.0 fr 06_coal 2 46 0.0 0.0 fr 07_gas 2 46 0.0 0.0 fr 08_non-res 2 46 0.0 0.0 fr 09_hydro_pump 2 46 0.0 0.0 -fr 01_solar 2 47 1.0 0.0 -fr 02_wind_on 2 47 1.0 0.0 -fr 03_wind_off 2 47 1.0 0.0 +fr 01_solar 2 47 0.0 1.0 +fr 02_wind_on 2 47 0.0 1.0 +fr 03_wind_off 2 47 0.0 1.0 fr 04_res 2 47 0.0 0.0 fr 05_nuclear 2 47 0.0 0.0 fr 06_coal 2 47 0.0 0.0 fr 07_gas 2 47 0.0 0.0 fr 08_non-res 2 47 0.0 0.0 fr 09_hydro_pump 2 47 0.0 0.0 -fr 01_solar 2 48 1.0 0.0 -fr 02_wind_on 2 48 1.0 0.0 -fr 03_wind_off 2 48 1.0 0.0 +fr 01_solar 2 48 0.0 1.0 +fr 02_wind_on 2 48 0.0 1.0 +fr 03_wind_off 2 48 0.0 1.0 fr 04_res 2 48 0.0 0.0 fr 05_nuclear 2 48 0.0 0.0 fr 06_coal 2 48 0.0 0.0 fr 07_gas 2 48 0.0 0.0 fr 08_non-res 2 48 0.0 0.0 fr 09_hydro_pump 2 48 0.0 0.0 -fr 01_solar 2 49 1.0 0.0 -fr 02_wind_on 2 49 1.0 0.0 -fr 03_wind_off 2 49 1.0 0.0 +fr 01_solar 2 49 0.0 1.0 +fr 02_wind_on 2 49 0.0 1.0 +fr 03_wind_off 2 49 0.0 1.0 fr 04_res 2 49 0.0 0.0 fr 05_nuclear 2 49 0.0 0.0 fr 06_coal 2 49 0.0 0.0 fr 07_gas 2 49 0.0 0.0 fr 08_non-res 2 49 0.0 0.0 fr 09_hydro_pump 2 49 0.0 0.0 -fr 01_solar 2 50 1.0 0.0 -fr 02_wind_on 2 50 1.0 0.0 -fr 03_wind_off 2 50 1.0 0.0 +fr 01_solar 2 50 0.0 1.0 +fr 02_wind_on 2 50 0.0 1.0 +fr 03_wind_off 2 50 0.0 1.0 fr 04_res 2 50 0.0 0.0 fr 05_nuclear 2 50 0.0 0.0 fr 06_coal 2 50 0.0 0.0 fr 07_gas 2 50 0.0 0.0 fr 08_non-res 2 50 0.0 0.0 fr 09_hydro_pump 2 50 0.0 0.0 -fr 01_solar 2 51 1.0 0.0 -fr 02_wind_on 2 51 1.0 0.0 -fr 03_wind_off 2 51 1.0 0.0 +fr 01_solar 2 51 0.0 1.0 +fr 02_wind_on 2 51 0.0 1.0 +fr 03_wind_off 2 51 0.0 1.0 fr 04_res 2 51 0.0 0.0 fr 05_nuclear 2 51 0.0 0.0 fr 06_coal 2 51 0.0 0.0 fr 07_gas 2 51 0.0 0.0 fr 08_non-res 2 51 0.0 0.0 fr 09_hydro_pump 2 51 0.0 0.0 -fr 01_solar 2 52 1.0 0.0 -fr 02_wind_on 2 52 1.0 0.0 -fr 03_wind_off 2 52 1.0 0.0 +fr 01_solar 2 52 0.0 1.0 +fr 02_wind_on 2 52 0.0 1.0 +fr 03_wind_off 2 52 0.0 1.0 fr 04_res 2 52 0.0 0.0 fr 05_nuclear 2 52 0.0 0.0 fr 06_coal 2 52 0.0 0.0 fr 07_gas 2 52 0.0 0.0 fr 08_non-res 2 52 0.0 0.0 fr 09_hydro_pump 2 52 0.0 0.0 -fr 01_solar 2 53 1.0 0.0 -fr 02_wind_on 2 53 1.0 0.0 -fr 03_wind_off 2 53 1.0 0.0 +fr 01_solar 2 53 0.0 1.0 +fr 02_wind_on 2 53 0.0 1.0 +fr 03_wind_off 2 53 0.0 1.0 fr 04_res 2 53 0.0 0.0 fr 05_nuclear 2 53 0.0 0.0 fr 06_coal 2 53 0.0 0.0 fr 07_gas 2 53 0.0 0.0 fr 08_non-res 2 53 0.0 0.0 fr 09_hydro_pump 2 53 0.0 0.0 -fr 01_solar 2 54 1.0 0.0 -fr 02_wind_on 2 54 1.0 0.0 -fr 03_wind_off 2 54 1.0 0.0 +fr 01_solar 2 54 0.0 1.0 +fr 02_wind_on 2 54 0.0 1.0 +fr 03_wind_off 2 54 0.0 1.0 fr 04_res 2 54 0.0 0.0 fr 05_nuclear 2 54 0.0 0.0 fr 06_coal 2 54 0.0 0.0 fr 07_gas 2 54 0.0 0.0 fr 08_non-res 2 54 0.0 0.0 fr 09_hydro_pump 2 54 0.0 0.0 -fr 01_solar 2 55 1.0 0.0 -fr 02_wind_on 2 55 1.0 0.0 -fr 03_wind_off 2 55 1.0 0.0 +fr 01_solar 2 55 0.0 1.0 +fr 02_wind_on 2 55 0.0 1.0 +fr 03_wind_off 2 55 0.0 1.0 fr 04_res 2 55 0.0 0.0 fr 05_nuclear 2 55 0.0 0.0 fr 06_coal 2 55 0.0 0.0 fr 07_gas 2 55 0.0 0.0 fr 08_non-res 2 55 0.0 0.0 fr 09_hydro_pump 2 55 0.0 0.0 -fr 01_solar 2 56 1.0 0.0 -fr 02_wind_on 2 56 1.0 0.0 -fr 03_wind_off 2 56 1.0 0.0 +fr 01_solar 2 56 0.0 1.0 +fr 02_wind_on 2 56 0.0 1.0 +fr 03_wind_off 2 56 0.0 1.0 fr 04_res 2 56 0.0 0.0 fr 05_nuclear 2 56 0.0 0.0 fr 06_coal 2 56 0.0 0.0 fr 07_gas 2 56 0.0 0.0 fr 08_non-res 2 56 0.0 0.0 fr 09_hydro_pump 2 56 0.0 0.0 -fr 01_solar 2 57 1.0 0.0 -fr 02_wind_on 2 57 1.0 0.0 -fr 03_wind_off 2 57 1.0 0.0 +fr 01_solar 2 57 0.0 1.0 +fr 02_wind_on 2 57 0.0 1.0 +fr 03_wind_off 2 57 0.0 1.0 fr 04_res 2 57 0.0 0.0 fr 05_nuclear 2 57 0.0 0.0 fr 06_coal 2 57 0.0 0.0 fr 07_gas 2 57 0.0 0.0 fr 08_non-res 2 57 0.0 0.0 fr 09_hydro_pump 2 57 0.0 0.0 -fr 01_solar 2 58 1.0 0.0 -fr 02_wind_on 2 58 1.0 0.0 -fr 03_wind_off 2 58 1.0 0.0 +fr 01_solar 2 58 0.0 1.0 +fr 02_wind_on 2 58 0.0 1.0 +fr 03_wind_off 2 58 0.0 1.0 fr 04_res 2 58 0.0 0.0 fr 05_nuclear 2 58 0.0 0.0 fr 06_coal 2 58 0.0 0.0 fr 07_gas 2 58 0.0 0.0 fr 08_non-res 2 58 0.0 0.0 fr 09_hydro_pump 2 58 0.0 0.0 -fr 01_solar 2 59 1.0 0.0 -fr 02_wind_on 2 59 1.0 0.0 -fr 03_wind_off 2 59 1.0 0.0 +fr 01_solar 2 59 0.0 1.0 +fr 02_wind_on 2 59 0.0 1.0 +fr 03_wind_off 2 59 0.0 1.0 fr 04_res 2 59 0.0 0.0 fr 05_nuclear 2 59 0.0 0.0 fr 06_coal 2 59 0.0 0.0 fr 07_gas 2 59 0.0 0.0 fr 08_non-res 2 59 0.0 0.0 fr 09_hydro_pump 2 59 0.0 0.0 -fr 01_solar 2 60 1.0 0.0 -fr 02_wind_on 2 60 1.0 0.0 -fr 03_wind_off 2 60 1.0 0.0 +fr 01_solar 2 60 0.0 1.0 +fr 02_wind_on 2 60 0.0 1.0 +fr 03_wind_off 2 60 0.0 1.0 fr 04_res 2 60 0.0 0.0 fr 05_nuclear 2 60 0.0 0.0 fr 06_coal 2 60 0.0 0.0 fr 07_gas 2 60 0.0 0.0 fr 08_non-res 2 60 0.0 0.0 fr 09_hydro_pump 2 60 0.0 0.0 -fr 01_solar 2 61 1.0 0.0 -fr 02_wind_on 2 61 1.0 0.0 -fr 03_wind_off 2 61 1.0 0.0 +fr 01_solar 2 61 0.0 1.0 +fr 02_wind_on 2 61 0.0 1.0 +fr 03_wind_off 2 61 0.0 1.0 fr 04_res 2 61 0.0 0.0 fr 05_nuclear 2 61 0.0 0.0 fr 06_coal 2 61 0.0 0.0 fr 07_gas 2 61 0.0 0.0 fr 08_non-res 2 61 0.0 0.0 fr 09_hydro_pump 2 61 0.0 0.0 -fr 01_solar 2 62 1.0 0.0 -fr 02_wind_on 2 62 1.0 0.0 -fr 03_wind_off 2 62 1.0 0.0 -fr 04_res 2 62 1.0 0.0 +fr 01_solar 2 62 0.0 1.0 +fr 02_wind_on 2 62 0.0 1.0 +fr 03_wind_off 2 62 0.0 1.0 +fr 04_res 2 62 0.0 1.0 fr 05_nuclear 2 62 0.0 0.0 fr 06_coal 2 62 0.0 0.0 fr 07_gas 2 62 0.0 0.0 fr 08_non-res 2 62 0.0 0.0 fr 09_hydro_pump 2 62 0.0 0.0 -fr 01_solar 2 63 1.0 0.0 -fr 02_wind_on 2 63 1.0 0.0 -fr 03_wind_off 2 63 1.0 0.0 -fr 04_res 2 63 1.0 0.0 +fr 01_solar 2 63 0.0 1.0 +fr 02_wind_on 2 63 0.0 1.0 +fr 03_wind_off 2 63 0.0 1.0 +fr 04_res 2 63 0.0 1.0 fr 05_nuclear 2 63 0.0 0.0 fr 06_coal 2 63 0.0 0.0 fr 07_gas 2 63 0.0 0.0 fr 08_non-res 2 63 0.0 0.0 fr 09_hydro_pump 2 63 0.0 0.0 -fr 01_solar 2 64 1.0 0.0 -fr 02_wind_on 2 64 1.0 0.0 -fr 03_wind_off 2 64 1.0 0.0 -fr 04_res 2 64 1.0 0.0 +fr 01_solar 2 64 0.0 1.0 +fr 02_wind_on 2 64 0.0 1.0 +fr 03_wind_off 2 64 0.0 1.0 +fr 04_res 2 64 0.0 1.0 fr 05_nuclear 2 64 0.0 0.0 fr 06_coal 2 64 0.0 0.0 fr 07_gas 2 64 0.0 0.0 fr 08_non-res 2 64 0.0 0.0 fr 09_hydro_pump 2 64 0.0 0.0 -fr 01_solar 2 65 1.0 0.0 -fr 02_wind_on 2 65 1.0 0.0 -fr 03_wind_off 2 65 1.0 0.0 -fr 04_res 2 65 1.0 0.0 +fr 01_solar 2 65 0.0 1.0 +fr 02_wind_on 2 65 0.0 1.0 +fr 03_wind_off 2 65 0.0 1.0 +fr 04_res 2 65 0.0 1.0 fr 05_nuclear 2 65 0.0 0.0 fr 06_coal 2 65 0.0 0.0 fr 07_gas 2 65 0.0 0.0 fr 08_non-res 2 65 0.0 0.0 fr 09_hydro_pump 2 65 0.0 0.0 -fr 01_solar 2 66 1.0 0.0 -fr 02_wind_on 2 66 1.0 0.0 -fr 03_wind_off 2 66 1.0 0.0 -fr 04_res 2 66 1.0 0.0 +fr 01_solar 2 66 0.0 1.0 +fr 02_wind_on 2 66 0.0 1.0 +fr 03_wind_off 2 66 0.0 1.0 +fr 04_res 2 66 0.0 1.0 fr 05_nuclear 2 66 0.0 0.0 fr 06_coal 2 66 0.0 0.0 fr 07_gas 2 66 0.0 0.0 fr 08_non-res 2 66 0.0 0.0 fr 09_hydro_pump 2 66 0.0 0.0 -fr 01_solar 2 67 1.0 0.0 -fr 02_wind_on 2 67 1.0 0.0 -fr 03_wind_off 2 67 1.0 0.0 -fr 04_res 2 67 1.0 0.0 +fr 01_solar 2 67 0.0 1.0 +fr 02_wind_on 2 67 0.0 1.0 +fr 03_wind_off 2 67 0.0 1.0 +fr 04_res 2 67 0.0 1.0 fr 05_nuclear 2 67 0.0 0.0 fr 06_coal 2 67 0.0 0.0 fr 07_gas 2 67 0.0 0.0 fr 08_non-res 2 67 0.0 0.0 fr 09_hydro_pump 2 67 0.0 0.0 -fr 01_solar 2 68 1.0 0.0 -fr 02_wind_on 2 68 1.0 0.0 -fr 03_wind_off 2 68 1.0 0.0 -fr 04_res 2 68 1.0 0.0 +fr 01_solar 2 68 0.0 1.0 +fr 02_wind_on 2 68 0.0 1.0 +fr 03_wind_off 2 68 0.0 1.0 +fr 04_res 2 68 0.0 1.0 fr 05_nuclear 2 68 0.0 0.0 fr 06_coal 2 68 0.0 0.0 fr 07_gas 2 68 0.0 0.0 fr 08_non-res 2 68 0.0 0.0 fr 09_hydro_pump 2 68 0.0 0.0 -fr 01_solar 2 69 1.0 0.0 -fr 02_wind_on 2 69 1.0 0.0 -fr 03_wind_off 2 69 1.0 0.0 -fr 04_res 2 69 1.0 0.0 +fr 01_solar 2 69 0.0 1.0 +fr 02_wind_on 2 69 0.0 1.0 +fr 03_wind_off 2 69 0.0 1.0 +fr 04_res 2 69 0.0 1.0 fr 05_nuclear 2 69 0.0 0.0 fr 06_coal 2 69 0.0 0.0 fr 07_gas 2 69 0.0 0.0 fr 08_non-res 2 69 0.0 0.0 fr 09_hydro_pump 2 69 0.0 0.0 -fr 01_solar 2 70 1.0 0.0 -fr 02_wind_on 2 70 1.0 0.0 -fr 03_wind_off 2 70 1.0 0.0 -fr 04_res 2 70 1.0 0.0 +fr 01_solar 2 70 0.0 1.0 +fr 02_wind_on 2 70 0.0 1.0 +fr 03_wind_off 2 70 0.0 1.0 +fr 04_res 2 70 0.0 1.0 fr 05_nuclear 2 70 0.0 0.0 fr 06_coal 2 70 0.0 0.0 fr 07_gas 2 70 0.0 0.0 fr 08_non-res 2 70 0.0 0.0 fr 09_hydro_pump 2 70 0.0 0.0 -fr 01_solar 2 71 1.0 0.0 -fr 02_wind_on 2 71 1.0 0.0 -fr 03_wind_off 2 71 1.0 0.0 -fr 04_res 2 71 1.0 0.0 +fr 01_solar 2 71 0.0 1.0 +fr 02_wind_on 2 71 0.0 1.0 +fr 03_wind_off 2 71 0.0 1.0 +fr 04_res 2 71 0.0 1.0 fr 05_nuclear 2 71 0.0 0.0 fr 06_coal 2 71 0.0 0.0 fr 07_gas 2 71 0.0 0.0 fr 08_non-res 2 71 0.0 0.0 fr 09_hydro_pump 2 71 0.0 0.0 -fr 01_solar 2 72 1.0 0.0 -fr 02_wind_on 2 72 1.0 0.0 -fr 03_wind_off 2 72 1.0 0.0 -fr 04_res 2 72 1.0 0.0 +fr 01_solar 2 72 0.0 1.0 +fr 02_wind_on 2 72 0.0 1.0 +fr 03_wind_off 2 72 0.0 1.0 +fr 04_res 2 72 0.0 1.0 fr 05_nuclear 2 72 0.0 0.0 fr 06_coal 2 72 0.0 0.0 fr 07_gas 2 72 0.0 0.0 fr 08_non-res 2 72 0.0 0.0 fr 09_hydro_pump 2 72 0.0 0.0 -fr 01_solar 2 73 1.0 0.0 -fr 02_wind_on 2 73 1.0 0.0 -fr 03_wind_off 2 73 1.0 0.0 -fr 04_res 2 73 1.0 0.0 +fr 01_solar 2 73 0.0 1.0 +fr 02_wind_on 2 73 0.0 1.0 +fr 03_wind_off 2 73 0.0 1.0 +fr 04_res 2 73 0.0 1.0 fr 05_nuclear 2 73 0.0 0.0 fr 06_coal 2 73 0.0 0.0 fr 07_gas 2 73 0.0 0.0 fr 08_non-res 2 73 0.0 0.0 fr 09_hydro_pump 2 73 0.0 0.0 -fr 01_solar 2 74 1.0 0.0 -fr 02_wind_on 2 74 1.0 0.0 -fr 03_wind_off 2 74 1.0 0.0 -fr 04_res 2 74 1.0 0.0 +fr 01_solar 2 74 0.0 1.0 +fr 02_wind_on 2 74 0.0 1.0 +fr 03_wind_off 2 74 0.0 1.0 +fr 04_res 2 74 0.0 1.0 fr 05_nuclear 2 74 0.0 0.0 fr 06_coal 2 74 0.0 0.0 fr 07_gas 2 74 0.0 0.0 fr 08_non-res 2 74 0.0 0.0 fr 09_hydro_pump 2 74 0.0 0.0 -fr 01_solar 2 75 1.0 0.0 -fr 02_wind_on 2 75 1.0 0.0 -fr 03_wind_off 2 75 1.0 0.0 -fr 04_res 2 75 1.0 0.0 +fr 01_solar 2 75 0.0 1.0 +fr 02_wind_on 2 75 0.0 1.0 +fr 03_wind_off 2 75 0.0 1.0 +fr 04_res 2 75 0.0 1.0 fr 05_nuclear 2 75 0.0 0.0 fr 06_coal 2 75 0.0 0.0 fr 07_gas 2 75 0.0 0.0 fr 08_non-res 2 75 0.0 0.0 fr 09_hydro_pump 2 75 0.0 0.0 -fr 01_solar 2 76 1.0 0.0 -fr 02_wind_on 2 76 1.0 0.0 -fr 03_wind_off 2 76 1.0 0.0 -fr 04_res 2 76 1.0 0.0 +fr 01_solar 2 76 0.0 1.0 +fr 02_wind_on 2 76 0.0 1.0 +fr 03_wind_off 2 76 0.0 1.0 +fr 04_res 2 76 0.0 1.0 fr 05_nuclear 2 76 0.0 0.0 fr 06_coal 2 76 0.0 0.0 fr 07_gas 2 76 0.0 0.0 fr 08_non-res 2 76 0.0 0.0 fr 09_hydro_pump 2 76 0.0 0.0 -fr 01_solar 2 77 1.0 0.0 -fr 02_wind_on 2 77 1.0 0.0 -fr 03_wind_off 2 77 1.0 0.0 -fr 04_res 2 77 1.0 0.0 +fr 01_solar 2 77 0.0 1.0 +fr 02_wind_on 2 77 0.0 1.0 +fr 03_wind_off 2 77 0.0 1.0 +fr 04_res 2 77 0.0 1.0 fr 05_nuclear 2 77 0.0 0.0 fr 06_coal 2 77 0.0 0.0 fr 07_gas 2 77 0.0 0.0 fr 08_non-res 2 77 0.0 0.0 fr 09_hydro_pump 2 77 0.0 0.0 -fr 01_solar 2 78 1.0 0.0 -fr 02_wind_on 2 78 1.0 0.0 -fr 03_wind_off 2 78 1.0 0.0 -fr 04_res 2 78 1.0 0.0 +fr 01_solar 2 78 0.0 1.0 +fr 02_wind_on 2 78 0.0 1.0 +fr 03_wind_off 2 78 0.0 1.0 +fr 04_res 2 78 0.0 1.0 fr 05_nuclear 2 78 0.0 0.0 fr 06_coal 2 78 0.0 0.0 fr 07_gas 2 78 0.0 0.0 fr 08_non-res 2 78 0.0 0.0 fr 09_hydro_pump 2 78 0.0 0.0 -fr 01_solar 2 79 1.0 0.0 -fr 02_wind_on 2 79 1.0 0.0 -fr 03_wind_off 2 79 1.0 0.0 -fr 04_res 2 79 1.0 0.0 +fr 01_solar 2 79 0.0 1.0 +fr 02_wind_on 2 79 0.0 1.0 +fr 03_wind_off 2 79 0.0 1.0 +fr 04_res 2 79 0.0 1.0 fr 05_nuclear 2 79 0.0 0.0 fr 06_coal 2 79 0.0 0.0 fr 07_gas 2 79 0.0 0.0 fr 08_non-res 2 79 0.0 0.0 fr 09_hydro_pump 2 79 0.0 0.0 -fr 01_solar 2 80 1.0 0.0 -fr 02_wind_on 2 80 1.0 0.0 -fr 03_wind_off 2 80 1.0 0.0 -fr 04_res 2 80 1.0 0.0 +fr 01_solar 2 80 0.0 1.0 +fr 02_wind_on 2 80 0.0 1.0 +fr 03_wind_off 2 80 0.0 1.0 +fr 04_res 2 80 0.0 1.0 fr 05_nuclear 2 80 0.0 0.0 fr 06_coal 2 80 0.0 0.0 fr 07_gas 2 80 0.0 0.0 fr 08_non-res 2 80 0.0 0.0 fr 09_hydro_pump 2 80 0.0 0.0 -fr 01_solar 2 81 1.0 0.0 -fr 02_wind_on 2 81 1.0 0.0 -fr 03_wind_off 2 81 1.0 0.0 -fr 04_res 2 81 1.0 0.0 +fr 01_solar 2 81 0.0 1.0 +fr 02_wind_on 2 81 0.0 1.0 +fr 03_wind_off 2 81 0.0 1.0 +fr 04_res 2 81 0.0 1.0 fr 05_nuclear 2 81 0.0 0.0 fr 06_coal 2 81 0.0 0.0 fr 07_gas 2 81 0.0 0.0 fr 08_non-res 2 81 0.0 0.0 fr 09_hydro_pump 2 81 0.0 0.0 -fr 01_solar 2 82 1.0 0.0 -fr 02_wind_on 2 82 1.0 0.0 -fr 03_wind_off 2 82 1.0 0.0 -fr 04_res 2 82 1.0 0.0 -fr 05_nuclear 2 82 1.0 0.0 +fr 01_solar 2 82 0.0 1.0 +fr 02_wind_on 2 82 0.0 1.0 +fr 03_wind_off 2 82 0.0 1.0 +fr 04_res 2 82 0.0 1.0 +fr 05_nuclear 2 82 0.0 1.0 fr 06_coal 2 82 0.0 0.0 fr 07_gas 2 82 0.0 0.0 fr 08_non-res 2 82 0.0 0.0 fr 09_hydro_pump 2 82 0.0 0.0 -fr 01_solar 2 83 1.0 0.0 -fr 02_wind_on 2 83 1.0 0.0 -fr 03_wind_off 2 83 1.0 0.0 -fr 04_res 2 83 1.0 0.0 -fr 05_nuclear 2 83 1.0 0.0 +fr 01_solar 2 83 0.0 1.0 +fr 02_wind_on 2 83 0.0 1.0 +fr 03_wind_off 2 83 0.0 1.0 +fr 04_res 2 83 0.0 1.0 +fr 05_nuclear 2 83 0.0 1.0 fr 06_coal 2 83 0.0 0.0 fr 07_gas 2 83 0.0 0.0 fr 08_non-res 2 83 0.0 0.0 fr 09_hydro_pump 2 83 0.0 0.0 -fr 01_solar 2 84 1.0 0.0 -fr 02_wind_on 2 84 1.0 0.0 -fr 03_wind_off 2 84 1.0 0.0 -fr 04_res 2 84 1.0 0.0 -fr 05_nuclear 2 84 1.0 0.0 +fr 01_solar 2 84 0.0 1.0 +fr 02_wind_on 2 84 0.0 1.0 +fr 03_wind_off 2 84 0.0 1.0 +fr 04_res 2 84 0.0 1.0 +fr 05_nuclear 2 84 0.0 1.0 fr 06_coal 2 84 0.0 0.0 fr 07_gas 2 84 0.0 0.0 fr 08_non-res 2 84 0.0 0.0 fr 09_hydro_pump 2 84 0.0 0.0 -fr 01_solar 2 85 1.0 0.0 -fr 02_wind_on 2 85 1.0 0.0 -fr 03_wind_off 2 85 1.0 0.0 -fr 04_res 2 85 1.0 0.0 -fr 05_nuclear 2 85 1.0 0.0 +fr 01_solar 2 85 0.0 1.0 +fr 02_wind_on 2 85 0.0 1.0 +fr 03_wind_off 2 85 0.0 1.0 +fr 04_res 2 85 0.0 1.0 +fr 05_nuclear 2 85 0.0 1.0 fr 06_coal 2 85 0.0 0.0 fr 07_gas 2 85 0.0 0.0 fr 08_non-res 2 85 0.0 0.0 fr 09_hydro_pump 2 85 0.0 0.0 -fr 01_solar 2 86 1.0 0.0 -fr 02_wind_on 2 86 1.0 0.0 -fr 03_wind_off 2 86 1.0 0.0 -fr 04_res 2 86 1.0 0.0 -fr 05_nuclear 2 86 1.0 0.0 +fr 01_solar 2 86 0.0 1.0 +fr 02_wind_on 2 86 0.0 1.0 +fr 03_wind_off 2 86 0.0 1.0 +fr 04_res 2 86 0.0 1.0 +fr 05_nuclear 2 86 0.0 1.0 fr 06_coal 2 86 0.0 0.0 fr 07_gas 2 86 0.0 0.0 fr 08_non-res 2 86 0.0 0.0 fr 09_hydro_pump 2 86 0.0 0.0 -fr 01_solar 2 87 1.0 0.0 -fr 02_wind_on 2 87 1.0 0.0 -fr 03_wind_off 2 87 1.0 0.0 -fr 04_res 2 87 1.0 0.0 -fr 05_nuclear 2 87 1.0 0.0 +fr 01_solar 2 87 0.0 1.0 +fr 02_wind_on 2 87 0.0 1.0 +fr 03_wind_off 2 87 0.0 1.0 +fr 04_res 2 87 0.0 1.0 +fr 05_nuclear 2 87 0.0 1.0 fr 06_coal 2 87 0.0 0.0 fr 07_gas 2 87 0.0 0.0 fr 08_non-res 2 87 0.0 0.0 fr 09_hydro_pump 2 87 0.0 0.0 -fr 01_solar 2 88 1.0 0.0 -fr 02_wind_on 2 88 1.0 0.0 -fr 03_wind_off 2 88 1.0 0.0 -fr 04_res 2 88 1.0 0.0 -fr 05_nuclear 2 88 1.0 0.0 +fr 01_solar 2 88 0.0 1.0 +fr 02_wind_on 2 88 0.0 1.0 +fr 03_wind_off 2 88 0.0 1.0 +fr 04_res 2 88 0.0 1.0 +fr 05_nuclear 2 88 0.0 1.0 fr 06_coal 2 88 0.0 0.0 fr 07_gas 2 88 0.0 0.0 fr 08_non-res 2 88 0.0 0.0 fr 09_hydro_pump 2 88 0.0 0.0 -fr 01_solar 2 89 1.0 0.0 -fr 02_wind_on 2 89 1.0 0.0 -fr 03_wind_off 2 89 1.0 0.0 -fr 04_res 2 89 1.0 0.0 -fr 05_nuclear 2 89 1.0 0.0 +fr 01_solar 2 89 0.0 1.0 +fr 02_wind_on 2 89 0.0 1.0 +fr 03_wind_off 2 89 0.0 1.0 +fr 04_res 2 89 0.0 1.0 +fr 05_nuclear 2 89 0.0 1.0 fr 06_coal 2 89 0.0 0.0 fr 07_gas 2 89 0.0 0.0 fr 08_non-res 2 89 0.0 0.0 fr 09_hydro_pump 2 89 0.0 0.0 -fr 01_solar 2 90 1.0 0.0 -fr 02_wind_on 2 90 1.0 0.0 -fr 03_wind_off 2 90 1.0 0.0 -fr 04_res 2 90 1.0 0.0 -fr 05_nuclear 2 90 1.0 0.0 +fr 01_solar 2 90 0.0 1.0 +fr 02_wind_on 2 90 0.0 1.0 +fr 03_wind_off 2 90 0.0 1.0 +fr 04_res 2 90 0.0 1.0 +fr 05_nuclear 2 90 0.0 1.0 fr 06_coal 2 90 0.0 0.0 fr 07_gas 2 90 0.0 0.0 fr 08_non-res 2 90 0.0 0.0 fr 09_hydro_pump 2 90 0.0 0.0 -fr 01_solar 2 91 1.0 0.0 -fr 02_wind_on 2 91 1.0 0.0 -fr 03_wind_off 2 91 1.0 0.0 -fr 04_res 2 91 1.0 0.0 -fr 05_nuclear 2 91 1.0 0.0 +fr 01_solar 2 91 0.0 1.0 +fr 02_wind_on 2 91 0.0 1.0 +fr 03_wind_off 2 91 0.0 1.0 +fr 04_res 2 91 0.0 1.0 +fr 05_nuclear 2 91 0.0 1.0 fr 06_coal 2 91 0.0 0.0 fr 07_gas 2 91 0.0 0.0 fr 08_non-res 2 91 0.0 0.0 fr 09_hydro_pump 2 91 0.0 0.0 -fr 01_solar 2 92 1.0 0.0 -fr 02_wind_on 2 92 1.0 0.0 -fr 03_wind_off 2 92 1.0 0.0 -fr 04_res 2 92 1.0 0.0 -fr 05_nuclear 2 92 1.0 0.0 +fr 01_solar 2 92 0.0 1.0 +fr 02_wind_on 2 92 0.0 1.0 +fr 03_wind_off 2 92 0.0 1.0 +fr 04_res 2 92 0.0 1.0 +fr 05_nuclear 2 92 0.0 1.0 fr 06_coal 2 92 0.0 0.0 fr 07_gas 2 92 0.0 0.0 fr 08_non-res 2 92 0.0 0.0 fr 09_hydro_pump 2 92 0.0 0.0 -fr 01_solar 2 93 1.0 0.0 -fr 02_wind_on 2 93 1.0 0.0 -fr 03_wind_off 2 93 1.0 0.0 -fr 04_res 2 93 1.0 0.0 -fr 05_nuclear 2 93 1.0 0.0 +fr 01_solar 2 93 0.0 1.0 +fr 02_wind_on 2 93 0.0 1.0 +fr 03_wind_off 2 93 0.0 1.0 +fr 04_res 2 93 0.0 1.0 +fr 05_nuclear 2 93 0.0 1.0 fr 06_coal 2 93 0.0 0.0 fr 07_gas 2 93 0.0 0.0 fr 08_non-res 2 93 0.0 0.0 fr 09_hydro_pump 2 93 0.0 0.0 -fr 01_solar 2 94 1.0 0.0 -fr 02_wind_on 2 94 1.0 0.0 -fr 03_wind_off 2 94 1.0 0.0 -fr 04_res 2 94 1.0 0.0 -fr 05_nuclear 2 94 1.0 0.0 +fr 01_solar 2 94 0.0 1.0 +fr 02_wind_on 2 94 0.0 1.0 +fr 03_wind_off 2 94 0.0 1.0 +fr 04_res 2 94 0.0 1.0 +fr 05_nuclear 2 94 0.0 1.0 fr 06_coal 2 94 0.0 0.0 fr 07_gas 2 94 0.0 0.0 fr 08_non-res 2 94 0.0 0.0 fr 09_hydro_pump 2 94 0.0 0.0 -fr 01_solar 2 95 1.0 0.0 -fr 02_wind_on 2 95 1.0 0.0 -fr 03_wind_off 2 95 1.0 0.0 -fr 04_res 2 95 1.0 0.0 -fr 05_nuclear 2 95 1.0 0.0 +fr 01_solar 2 95 0.0 1.0 +fr 02_wind_on 2 95 0.0 1.0 +fr 03_wind_off 2 95 0.0 1.0 +fr 04_res 2 95 0.0 1.0 +fr 05_nuclear 2 95 0.0 1.0 fr 06_coal 2 95 0.0 0.0 fr 07_gas 2 95 0.0 0.0 fr 08_non-res 2 95 0.0 0.0 fr 09_hydro_pump 2 95 0.0 0.0 -fr 01_solar 2 96 1.0 0.0 -fr 02_wind_on 2 96 1.0 0.0 -fr 03_wind_off 2 96 1.0 0.0 -fr 04_res 2 96 1.0 0.0 -fr 05_nuclear 2 96 1.0 0.0 +fr 01_solar 2 96 0.0 1.0 +fr 02_wind_on 2 96 0.0 1.0 +fr 03_wind_off 2 96 0.0 1.0 +fr 04_res 2 96 0.0 1.0 +fr 05_nuclear 2 96 0.0 1.0 fr 06_coal 2 96 0.0 0.0 fr 07_gas 2 96 0.0 0.0 fr 08_non-res 2 96 0.0 0.0 fr 09_hydro_pump 2 96 0.0 0.0 -fr 01_solar 2 97 1.0 0.0 -fr 02_wind_on 2 97 1.0 0.0 -fr 03_wind_off 2 97 1.0 0.0 -fr 04_res 2 97 1.0 0.0 -fr 05_nuclear 2 97 1.0 0.0 +fr 01_solar 2 97 0.0 1.0 +fr 02_wind_on 2 97 0.0 1.0 +fr 03_wind_off 2 97 0.0 1.0 +fr 04_res 2 97 0.0 1.0 +fr 05_nuclear 2 97 0.0 1.0 fr 06_coal 2 97 0.0 0.0 fr 07_gas 2 97 0.0 0.0 fr 08_non-res 2 97 0.0 0.0 fr 09_hydro_pump 2 97 0.0 0.0 -fr 01_solar 2 98 1.0 0.0 -fr 02_wind_on 2 98 1.0 0.0 -fr 03_wind_off 2 98 1.0 0.0 -fr 04_res 2 98 1.0 0.0 -fr 05_nuclear 2 98 1.0 0.0 +fr 01_solar 2 98 0.0 1.0 +fr 02_wind_on 2 98 0.0 1.0 +fr 03_wind_off 2 98 0.0 1.0 +fr 04_res 2 98 0.0 1.0 +fr 05_nuclear 2 98 0.0 1.0 fr 06_coal 2 98 0.0 0.0 fr 07_gas 2 98 0.0 0.0 fr 08_non-res 2 98 0.0 0.0 fr 09_hydro_pump 2 98 0.0 0.0 -fr 01_solar 2 99 1.0 0.0 -fr 02_wind_on 2 99 1.0 0.0 -fr 03_wind_off 2 99 1.0 0.0 -fr 04_res 2 99 1.0 0.0 -fr 05_nuclear 2 99 1.0 0.0 +fr 01_solar 2 99 0.0 1.0 +fr 02_wind_on 2 99 0.0 1.0 +fr 03_wind_off 2 99 0.0 1.0 +fr 04_res 2 99 0.0 1.0 +fr 05_nuclear 2 99 0.0 1.0 fr 06_coal 2 99 0.0 0.0 fr 07_gas 2 99 0.0 0.0 fr 08_non-res 2 99 0.0 0.0 fr 09_hydro_pump 2 99 0.0 0.0 -fr 01_solar 2 100 1.0 0.0 -fr 02_wind_on 2 100 1.0 0.0 -fr 03_wind_off 2 100 1.0 0.0 -fr 04_res 2 100 1.0 0.0 -fr 05_nuclear 2 100 1.0 0.0 +fr 01_solar 2 100 0.0 1.0 +fr 02_wind_on 2 100 0.0 1.0 +fr 03_wind_off 2 100 0.0 1.0 +fr 04_res 2 100 0.0 1.0 +fr 05_nuclear 2 100 0.0 1.0 fr 06_coal 2 100 0.0 0.0 fr 07_gas 2 100 0.0 0.0 fr 08_non-res 2 100 0.0 0.0 fr 09_hydro_pump 2 100 0.0 0.0 -fr 01_solar 2 101 1.0 0.0 -fr 02_wind_on 2 101 1.0 0.0 -fr 03_wind_off 2 101 1.0 0.0 -fr 04_res 2 101 1.0 0.0 -fr 05_nuclear 2 101 1.0 0.0 +fr 01_solar 2 101 0.0 1.0 +fr 02_wind_on 2 101 0.0 1.0 +fr 03_wind_off 2 101 0.0 1.0 +fr 04_res 2 101 0.0 1.0 +fr 05_nuclear 2 101 0.0 1.0 fr 06_coal 2 101 0.0 0.0 fr 07_gas 2 101 0.0 0.0 fr 08_non-res 2 101 0.0 0.0 fr 09_hydro_pump 2 101 0.0 0.0 -fr 01_solar 2 102 1.0 0.0 -fr 02_wind_on 2 102 1.0 0.0 -fr 03_wind_off 2 102 1.0 0.0 -fr 04_res 2 102 1.0 0.0 -fr 05_nuclear 2 102 1.0 0.0 -fr 06_coal 2 102 1.0 0.0 +fr 01_solar 2 102 0.0 1.0 +fr 02_wind_on 2 102 0.0 1.0 +fr 03_wind_off 2 102 0.0 1.0 +fr 04_res 2 102 0.0 1.0 +fr 05_nuclear 2 102 0.0 1.0 +fr 06_coal 2 102 0.0 1.0 fr 07_gas 2 102 0.0 0.0 fr 08_non-res 2 102 0.0 0.0 fr 09_hydro_pump 2 102 0.0 0.0 -fr 01_solar 2 103 1.0 0.0 -fr 02_wind_on 2 103 1.0 0.0 -fr 03_wind_off 2 103 1.0 0.0 -fr 04_res 2 103 1.0 0.0 -fr 05_nuclear 2 103 1.0 0.0 -fr 06_coal 2 103 1.0 0.0 +fr 01_solar 2 103 0.0 1.0 +fr 02_wind_on 2 103 0.0 1.0 +fr 03_wind_off 2 103 0.0 1.0 +fr 04_res 2 103 0.0 1.0 +fr 05_nuclear 2 103 0.0 1.0 +fr 06_coal 2 103 0.0 1.0 fr 07_gas 2 103 0.0 0.0 fr 08_non-res 2 103 0.0 0.0 fr 09_hydro_pump 2 103 0.0 0.0 -fr 01_solar 2 104 1.0 0.0 -fr 02_wind_on 2 104 1.0 0.0 -fr 03_wind_off 2 104 1.0 0.0 -fr 04_res 2 104 1.0 0.0 -fr 05_nuclear 2 104 1.0 0.0 -fr 06_coal 2 104 1.0 0.0 +fr 01_solar 2 104 0.0 1.0 +fr 02_wind_on 2 104 0.0 1.0 +fr 03_wind_off 2 104 0.0 1.0 +fr 04_res 2 104 0.0 1.0 +fr 05_nuclear 2 104 0.0 1.0 +fr 06_coal 2 104 0.0 1.0 fr 07_gas 2 104 0.0 0.0 fr 08_non-res 2 104 0.0 0.0 fr 09_hydro_pump 2 104 0.0 0.0 -fr 01_solar 2 105 1.0 0.0 -fr 02_wind_on 2 105 1.0 0.0 -fr 03_wind_off 2 105 1.0 0.0 -fr 04_res 2 105 1.0 0.0 -fr 05_nuclear 2 105 1.0 0.0 -fr 06_coal 2 105 1.0 0.0 +fr 01_solar 2 105 0.0 1.0 +fr 02_wind_on 2 105 0.0 1.0 +fr 03_wind_off 2 105 0.0 1.0 +fr 04_res 2 105 0.0 1.0 +fr 05_nuclear 2 105 0.0 1.0 +fr 06_coal 2 105 0.0 1.0 fr 07_gas 2 105 0.0 0.0 fr 08_non-res 2 105 0.0 0.0 fr 09_hydro_pump 2 105 0.0 0.0 -fr 01_solar 2 106 1.0 0.0 -fr 02_wind_on 2 106 1.0 0.0 -fr 03_wind_off 2 106 1.0 0.0 -fr 04_res 2 106 1.0 0.0 -fr 05_nuclear 2 106 1.0 0.0 -fr 06_coal 2 106 1.0 0.0 +fr 01_solar 2 106 0.0 1.0 +fr 02_wind_on 2 106 0.0 1.0 +fr 03_wind_off 2 106 0.0 1.0 +fr 04_res 2 106 0.0 1.0 +fr 05_nuclear 2 106 0.0 1.0 +fr 06_coal 2 106 0.0 1.0 fr 07_gas 2 106 0.0 0.0 fr 08_non-res 2 106 0.0 0.0 fr 09_hydro_pump 2 106 0.0 0.0 -fr 01_solar 2 107 1.0 0.0 -fr 02_wind_on 2 107 1.0 0.0 -fr 03_wind_off 2 107 1.0 0.0 -fr 04_res 2 107 1.0 0.0 -fr 05_nuclear 2 107 1.0 0.0 -fr 06_coal 2 107 1.0 0.0 +fr 01_solar 2 107 0.0 1.0 +fr 02_wind_on 2 107 0.0 1.0 +fr 03_wind_off 2 107 0.0 1.0 +fr 04_res 2 107 0.0 1.0 +fr 05_nuclear 2 107 0.0 1.0 +fr 06_coal 2 107 0.0 1.0 fr 07_gas 2 107 0.0 0.0 fr 08_non-res 2 107 0.0 0.0 fr 09_hydro_pump 2 107 0.0 0.0 -fr 01_solar 2 108 1.0 0.0 -fr 02_wind_on 2 108 1.0 0.0 -fr 03_wind_off 2 108 1.0 0.0 -fr 04_res 2 108 1.0 0.0 -fr 05_nuclear 2 108 1.0 0.0 -fr 06_coal 2 108 1.0 0.0 +fr 01_solar 2 108 0.0 1.0 +fr 02_wind_on 2 108 0.0 1.0 +fr 03_wind_off 2 108 0.0 1.0 +fr 04_res 2 108 0.0 1.0 +fr 05_nuclear 2 108 0.0 1.0 +fr 06_coal 2 108 0.0 1.0 fr 07_gas 2 108 0.0 0.0 fr 08_non-res 2 108 0.0 0.0 fr 09_hydro_pump 2 108 0.0 0.0 -fr 01_solar 2 109 1.0 0.0 -fr 02_wind_on 2 109 1.0 0.0 -fr 03_wind_off 2 109 1.0 0.0 -fr 04_res 2 109 1.0 0.0 -fr 05_nuclear 2 109 1.0 0.0 -fr 06_coal 2 109 1.0 0.0 +fr 01_solar 2 109 0.0 1.0 +fr 02_wind_on 2 109 0.0 1.0 +fr 03_wind_off 2 109 0.0 1.0 +fr 04_res 2 109 0.0 1.0 +fr 05_nuclear 2 109 0.0 1.0 +fr 06_coal 2 109 0.0 1.0 fr 07_gas 2 109 0.0 0.0 fr 08_non-res 2 109 0.0 0.0 fr 09_hydro_pump 2 109 0.0 0.0 -fr 01_solar 2 110 1.0 0.0 -fr 02_wind_on 2 110 1.0 0.0 -fr 03_wind_off 2 110 1.0 0.0 -fr 04_res 2 110 1.0 0.0 -fr 05_nuclear 2 110 1.0 0.0 -fr 06_coal 2 110 1.0 0.0 +fr 01_solar 2 110 0.0 1.0 +fr 02_wind_on 2 110 0.0 1.0 +fr 03_wind_off 2 110 0.0 1.0 +fr 04_res 2 110 0.0 1.0 +fr 05_nuclear 2 110 0.0 1.0 +fr 06_coal 2 110 0.0 1.0 fr 07_gas 2 110 0.0 0.0 fr 08_non-res 2 110 0.0 0.0 fr 09_hydro_pump 2 110 0.0 0.0 -fr 01_solar 2 111 1.0 0.0 -fr 02_wind_on 2 111 1.0 0.0 -fr 03_wind_off 2 111 1.0 0.0 -fr 04_res 2 111 1.0 0.0 -fr 05_nuclear 2 111 1.0 0.0 -fr 06_coal 2 111 1.0 0.0 +fr 01_solar 2 111 0.0 1.0 +fr 02_wind_on 2 111 0.0 1.0 +fr 03_wind_off 2 111 0.0 1.0 +fr 04_res 2 111 0.0 1.0 +fr 05_nuclear 2 111 0.0 1.0 +fr 06_coal 2 111 0.0 1.0 fr 07_gas 2 111 0.0 0.0 fr 08_non-res 2 111 0.0 0.0 fr 09_hydro_pump 2 111 0.0 0.0 -fr 01_solar 2 112 1.0 0.0 -fr 02_wind_on 2 112 1.0 0.0 -fr 03_wind_off 2 112 1.0 0.0 -fr 04_res 2 112 1.0 0.0 -fr 05_nuclear 2 112 1.0 0.0 -fr 06_coal 2 112 1.0 0.0 +fr 01_solar 2 112 0.0 1.0 +fr 02_wind_on 2 112 0.0 1.0 +fr 03_wind_off 2 112 0.0 1.0 +fr 04_res 2 112 0.0 1.0 +fr 05_nuclear 2 112 0.0 1.0 +fr 06_coal 2 112 0.0 1.0 fr 07_gas 2 112 0.0 0.0 fr 08_non-res 2 112 0.0 0.0 fr 09_hydro_pump 2 112 0.0 0.0 -fr 01_solar 2 113 1.0 0.0 -fr 02_wind_on 2 113 1.0 0.0 -fr 03_wind_off 2 113 1.0 0.0 -fr 04_res 2 113 1.0 0.0 -fr 05_nuclear 2 113 1.0 0.0 -fr 06_coal 2 113 1.0 0.0 +fr 01_solar 2 113 0.0 1.0 +fr 02_wind_on 2 113 0.0 1.0 +fr 03_wind_off 2 113 0.0 1.0 +fr 04_res 2 113 0.0 1.0 +fr 05_nuclear 2 113 0.0 1.0 +fr 06_coal 2 113 0.0 1.0 fr 07_gas 2 113 0.0 0.0 fr 08_non-res 2 113 0.0 0.0 fr 09_hydro_pump 2 113 0.0 0.0 -fr 01_solar 2 114 1.0 0.0 -fr 02_wind_on 2 114 1.0 0.0 -fr 03_wind_off 2 114 1.0 0.0 -fr 04_res 2 114 1.0 0.0 -fr 05_nuclear 2 114 1.0 0.0 -fr 06_coal 2 114 1.0 0.0 +fr 01_solar 2 114 0.0 1.0 +fr 02_wind_on 2 114 0.0 1.0 +fr 03_wind_off 2 114 0.0 1.0 +fr 04_res 2 114 0.0 1.0 +fr 05_nuclear 2 114 0.0 1.0 +fr 06_coal 2 114 0.0 1.0 fr 07_gas 2 114 0.0 0.0 fr 08_non-res 2 114 0.0 0.0 fr 09_hydro_pump 2 114 0.0 0.0 -fr 01_solar 2 115 1.0 0.0 -fr 02_wind_on 2 115 1.0 0.0 -fr 03_wind_off 2 115 1.0 0.0 -fr 04_res 2 115 1.0 0.0 -fr 05_nuclear 2 115 1.0 0.0 -fr 06_coal 2 115 1.0 0.0 +fr 01_solar 2 115 0.0 1.0 +fr 02_wind_on 2 115 0.0 1.0 +fr 03_wind_off 2 115 0.0 1.0 +fr 04_res 2 115 0.0 1.0 +fr 05_nuclear 2 115 0.0 1.0 +fr 06_coal 2 115 0.0 1.0 fr 07_gas 2 115 0.0 0.0 fr 08_non-res 2 115 0.0 0.0 fr 09_hydro_pump 2 115 0.0 0.0 -fr 01_solar 2 116 1.0 0.0 -fr 02_wind_on 2 116 1.0 0.0 -fr 03_wind_off 2 116 1.0 0.0 -fr 04_res 2 116 1.0 0.0 -fr 05_nuclear 2 116 1.0 0.0 -fr 06_coal 2 116 1.0 0.0 +fr 01_solar 2 116 0.0 1.0 +fr 02_wind_on 2 116 0.0 1.0 +fr 03_wind_off 2 116 0.0 1.0 +fr 04_res 2 116 0.0 1.0 +fr 05_nuclear 2 116 0.0 1.0 +fr 06_coal 2 116 0.0 1.0 fr 07_gas 2 116 0.0 0.0 fr 08_non-res 2 116 0.0 0.0 fr 09_hydro_pump 2 116 0.0 0.0 -fr 01_solar 2 117 1.0 0.0 -fr 02_wind_on 2 117 1.0 0.0 -fr 03_wind_off 2 117 1.0 0.0 -fr 04_res 2 117 1.0 0.0 -fr 05_nuclear 2 117 1.0 0.0 -fr 06_coal 2 117 1.0 0.0 +fr 01_solar 2 117 0.0 1.0 +fr 02_wind_on 2 117 0.0 1.0 +fr 03_wind_off 2 117 0.0 1.0 +fr 04_res 2 117 0.0 1.0 +fr 05_nuclear 2 117 0.0 1.0 +fr 06_coal 2 117 0.0 1.0 fr 07_gas 2 117 0.0 0.0 fr 08_non-res 2 117 0.0 0.0 fr 09_hydro_pump 2 117 0.0 0.0 -fr 01_solar 2 118 1.0 0.0 -fr 02_wind_on 2 118 1.0 0.0 -fr 03_wind_off 2 118 1.0 0.0 -fr 04_res 2 118 1.0 0.0 -fr 05_nuclear 2 118 1.0 0.0 -fr 06_coal 2 118 1.0 0.0 +fr 01_solar 2 118 0.0 1.0 +fr 02_wind_on 2 118 0.0 1.0 +fr 03_wind_off 2 118 0.0 1.0 +fr 04_res 2 118 0.0 1.0 +fr 05_nuclear 2 118 0.0 1.0 +fr 06_coal 2 118 0.0 1.0 fr 07_gas 2 118 0.0 0.0 fr 08_non-res 2 118 0.0 0.0 fr 09_hydro_pump 2 118 0.0 0.0 -fr 01_solar 2 119 1.0 0.0 -fr 02_wind_on 2 119 1.0 0.0 -fr 03_wind_off 2 119 1.0 0.0 -fr 04_res 2 119 1.0 0.0 -fr 05_nuclear 2 119 1.0 0.0 -fr 06_coal 2 119 1.0 0.0 +fr 01_solar 2 119 0.0 1.0 +fr 02_wind_on 2 119 0.0 1.0 +fr 03_wind_off 2 119 0.0 1.0 +fr 04_res 2 119 0.0 1.0 +fr 05_nuclear 2 119 0.0 1.0 +fr 06_coal 2 119 0.0 1.0 fr 07_gas 2 119 0.0 0.0 fr 08_non-res 2 119 0.0 0.0 fr 09_hydro_pump 2 119 0.0 0.0 -fr 01_solar 2 120 1.0 0.0 -fr 02_wind_on 2 120 1.0 0.0 -fr 03_wind_off 2 120 1.0 0.0 -fr 04_res 2 120 1.0 0.0 -fr 05_nuclear 2 120 1.0 0.0 -fr 06_coal 2 120 1.0 0.0 +fr 01_solar 2 120 0.0 1.0 +fr 02_wind_on 2 120 0.0 1.0 +fr 03_wind_off 2 120 0.0 1.0 +fr 04_res 2 120 0.0 1.0 +fr 05_nuclear 2 120 0.0 1.0 +fr 06_coal 2 120 0.0 1.0 fr 07_gas 2 120 0.0 0.0 fr 08_non-res 2 120 0.0 0.0 fr 09_hydro_pump 2 120 0.0 0.0 -fr 01_solar 2 121 1.0 0.0 -fr 02_wind_on 2 121 1.0 0.0 -fr 03_wind_off 2 121 1.0 0.0 -fr 04_res 2 121 1.0 0.0 -fr 05_nuclear 2 121 1.0 0.0 -fr 06_coal 2 121 1.0 0.0 +fr 01_solar 2 121 0.0 1.0 +fr 02_wind_on 2 121 0.0 1.0 +fr 03_wind_off 2 121 0.0 1.0 +fr 04_res 2 121 0.0 1.0 +fr 05_nuclear 2 121 0.0 1.0 +fr 06_coal 2 121 0.0 1.0 fr 07_gas 2 121 0.0 0.0 fr 08_non-res 2 121 0.0 0.0 fr 09_hydro_pump 2 121 0.0 0.0 -fr 01_solar 2 122 1.0 0.0 -fr 02_wind_on 2 122 1.0 0.0 -fr 03_wind_off 2 122 1.0 0.0 -fr 04_res 2 122 1.0 0.0 -fr 05_nuclear 2 122 1.0 0.0 -fr 06_coal 2 122 1.0 0.0 -fr 07_gas 2 122 1.0 0.0 +fr 01_solar 2 122 0.0 1.0 +fr 02_wind_on 2 122 0.0 1.0 +fr 03_wind_off 2 122 0.0 1.0 +fr 04_res 2 122 0.0 1.0 +fr 05_nuclear 2 122 0.0 1.0 +fr 06_coal 2 122 0.0 1.0 +fr 07_gas 2 122 0.0 1.0 fr 08_non-res 2 122 0.0 0.0 fr 09_hydro_pump 2 122 0.0 0.0 -fr 01_solar 2 123 1.0 0.0 -fr 02_wind_on 2 123 1.0 0.0 -fr 03_wind_off 2 123 1.0 0.0 -fr 04_res 2 123 1.0 0.0 -fr 05_nuclear 2 123 1.0 0.0 -fr 06_coal 2 123 1.0 0.0 -fr 07_gas 2 123 1.0 0.0 +fr 01_solar 2 123 0.0 1.0 +fr 02_wind_on 2 123 0.0 1.0 +fr 03_wind_off 2 123 0.0 1.0 +fr 04_res 2 123 0.0 1.0 +fr 05_nuclear 2 123 0.0 1.0 +fr 06_coal 2 123 0.0 1.0 +fr 07_gas 2 123 0.0 1.0 fr 08_non-res 2 123 0.0 0.0 fr 09_hydro_pump 2 123 0.0 0.0 -fr 01_solar 2 124 1.0 0.0 -fr 02_wind_on 2 124 1.0 0.0 -fr 03_wind_off 2 124 1.0 0.0 -fr 04_res 2 124 1.0 0.0 -fr 05_nuclear 2 124 1.0 0.0 -fr 06_coal 2 124 1.0 0.0 -fr 07_gas 2 124 1.0 0.0 +fr 01_solar 2 124 0.0 1.0 +fr 02_wind_on 2 124 0.0 1.0 +fr 03_wind_off 2 124 0.0 1.0 +fr 04_res 2 124 0.0 1.0 +fr 05_nuclear 2 124 0.0 1.0 +fr 06_coal 2 124 0.0 1.0 +fr 07_gas 2 124 0.0 1.0 fr 08_non-res 2 124 0.0 0.0 fr 09_hydro_pump 2 124 0.0 0.0 -fr 01_solar 2 125 1.0 0.0 -fr 02_wind_on 2 125 1.0 0.0 -fr 03_wind_off 2 125 1.0 0.0 -fr 04_res 2 125 1.0 0.0 -fr 05_nuclear 2 125 1.0 0.0 -fr 06_coal 2 125 1.0 0.0 -fr 07_gas 2 125 1.0 0.0 +fr 01_solar 2 125 0.0 1.0 +fr 02_wind_on 2 125 0.0 1.0 +fr 03_wind_off 2 125 0.0 1.0 +fr 04_res 2 125 0.0 1.0 +fr 05_nuclear 2 125 0.0 1.0 +fr 06_coal 2 125 0.0 1.0 +fr 07_gas 2 125 0.0 1.0 fr 08_non-res 2 125 0.0 0.0 fr 09_hydro_pump 2 125 0.0 0.0 -fr 01_solar 2 126 1.0 0.0 -fr 02_wind_on 2 126 1.0 0.0 -fr 03_wind_off 2 126 1.0 0.0 -fr 04_res 2 126 1.0 0.0 -fr 05_nuclear 2 126 1.0 0.0 -fr 06_coal 2 126 1.0 0.0 -fr 07_gas 2 126 1.0 0.0 +fr 01_solar 2 126 0.0 1.0 +fr 02_wind_on 2 126 0.0 1.0 +fr 03_wind_off 2 126 0.0 1.0 +fr 04_res 2 126 0.0 1.0 +fr 05_nuclear 2 126 0.0 1.0 +fr 06_coal 2 126 0.0 1.0 +fr 07_gas 2 126 0.0 1.0 fr 08_non-res 2 126 0.0 0.0 fr 09_hydro_pump 2 126 0.0 0.0 -fr 01_solar 2 127 1.0 0.0 -fr 02_wind_on 2 127 1.0 0.0 -fr 03_wind_off 2 127 1.0 0.0 -fr 04_res 2 127 1.0 0.0 -fr 05_nuclear 2 127 1.0 0.0 -fr 06_coal 2 127 1.0 0.0 -fr 07_gas 2 127 1.0 0.0 +fr 01_solar 2 127 0.0 1.0 +fr 02_wind_on 2 127 0.0 1.0 +fr 03_wind_off 2 127 0.0 1.0 +fr 04_res 2 127 0.0 1.0 +fr 05_nuclear 2 127 0.0 1.0 +fr 06_coal 2 127 0.0 1.0 +fr 07_gas 2 127 0.0 1.0 fr 08_non-res 2 127 0.0 0.0 fr 09_hydro_pump 2 127 0.0 0.0 -fr 01_solar 2 128 1.0 0.0 -fr 02_wind_on 2 128 1.0 0.0 -fr 03_wind_off 2 128 1.0 0.0 -fr 04_res 2 128 1.0 0.0 -fr 05_nuclear 2 128 1.0 0.0 -fr 06_coal 2 128 1.0 0.0 -fr 07_gas 2 128 1.0 0.0 +fr 01_solar 2 128 0.0 1.0 +fr 02_wind_on 2 128 0.0 1.0 +fr 03_wind_off 2 128 0.0 1.0 +fr 04_res 2 128 0.0 1.0 +fr 05_nuclear 2 128 0.0 1.0 +fr 06_coal 2 128 0.0 1.0 +fr 07_gas 2 128 0.0 1.0 fr 08_non-res 2 128 0.0 0.0 fr 09_hydro_pump 2 128 0.0 0.0 -fr 01_solar 2 129 1.0 0.0 -fr 02_wind_on 2 129 1.0 0.0 -fr 03_wind_off 2 129 1.0 0.0 -fr 04_res 2 129 1.0 0.0 -fr 05_nuclear 2 129 1.0 0.0 -fr 06_coal 2 129 1.0 0.0 -fr 07_gas 2 129 1.0 0.0 +fr 01_solar 2 129 0.0 1.0 +fr 02_wind_on 2 129 0.0 1.0 +fr 03_wind_off 2 129 0.0 1.0 +fr 04_res 2 129 0.0 1.0 +fr 05_nuclear 2 129 0.0 1.0 +fr 06_coal 2 129 0.0 1.0 +fr 07_gas 2 129 0.0 1.0 fr 08_non-res 2 129 0.0 0.0 fr 09_hydro_pump 2 129 0.0 0.0 -fr 01_solar 2 130 1.0 0.0 -fr 02_wind_on 2 130 1.0 0.0 -fr 03_wind_off 2 130 1.0 0.0 -fr 04_res 2 130 1.0 0.0 -fr 05_nuclear 2 130 1.0 0.0 -fr 06_coal 2 130 1.0 0.0 -fr 07_gas 2 130 1.0 0.0 +fr 01_solar 2 130 0.0 1.0 +fr 02_wind_on 2 130 0.0 1.0 +fr 03_wind_off 2 130 0.0 1.0 +fr 04_res 2 130 0.0 1.0 +fr 05_nuclear 2 130 0.0 1.0 +fr 06_coal 2 130 0.0 1.0 +fr 07_gas 2 130 0.0 1.0 fr 08_non-res 2 130 0.0 0.0 fr 09_hydro_pump 2 130 0.0 0.0 -fr 01_solar 2 131 1.0 0.0 -fr 02_wind_on 2 131 1.0 0.0 -fr 03_wind_off 2 131 1.0 0.0 -fr 04_res 2 131 1.0 0.0 -fr 05_nuclear 2 131 1.0 0.0 -fr 06_coal 2 131 1.0 0.0 -fr 07_gas 2 131 1.0 0.0 +fr 01_solar 2 131 0.0 1.0 +fr 02_wind_on 2 131 0.0 1.0 +fr 03_wind_off 2 131 0.0 1.0 +fr 04_res 2 131 0.0 1.0 +fr 05_nuclear 2 131 0.0 1.0 +fr 06_coal 2 131 0.0 1.0 +fr 07_gas 2 131 0.0 1.0 fr 08_non-res 2 131 0.0 0.0 fr 09_hydro_pump 2 131 0.0 0.0 -fr 01_solar 2 132 1.0 0.0 -fr 02_wind_on 2 132 1.0 0.0 -fr 03_wind_off 2 132 1.0 0.0 -fr 04_res 2 132 1.0 0.0 -fr 05_nuclear 2 132 1.0 0.0 -fr 06_coal 2 132 1.0 0.0 -fr 07_gas 2 132 1.0 0.0 +fr 01_solar 2 132 0.0 1.0 +fr 02_wind_on 2 132 0.0 1.0 +fr 03_wind_off 2 132 0.0 1.0 +fr 04_res 2 132 0.0 1.0 +fr 05_nuclear 2 132 0.0 1.0 +fr 06_coal 2 132 0.0 1.0 +fr 07_gas 2 132 0.0 1.0 fr 08_non-res 2 132 0.0 0.0 fr 09_hydro_pump 2 132 0.0 0.0 -fr 01_solar 2 133 1.0 0.0 -fr 02_wind_on 2 133 1.0 0.0 -fr 03_wind_off 2 133 1.0 0.0 -fr 04_res 2 133 1.0 0.0 -fr 05_nuclear 2 133 1.0 0.0 -fr 06_coal 2 133 1.0 0.0 -fr 07_gas 2 133 1.0 0.0 +fr 01_solar 2 133 0.0 1.0 +fr 02_wind_on 2 133 0.0 1.0 +fr 03_wind_off 2 133 0.0 1.0 +fr 04_res 2 133 0.0 1.0 +fr 05_nuclear 2 133 0.0 1.0 +fr 06_coal 2 133 0.0 1.0 +fr 07_gas 2 133 0.0 1.0 fr 08_non-res 2 133 0.0 0.0 fr 09_hydro_pump 2 133 0.0 0.0 -fr 01_solar 2 134 1.0 0.0 -fr 02_wind_on 2 134 1.0 0.0 -fr 03_wind_off 2 134 1.0 0.0 -fr 04_res 2 134 1.0 0.0 -fr 05_nuclear 2 134 1.0 0.0 -fr 06_coal 2 134 1.0 0.0 -fr 07_gas 2 134 1.0 0.0 +fr 01_solar 2 134 0.0 1.0 +fr 02_wind_on 2 134 0.0 1.0 +fr 03_wind_off 2 134 0.0 1.0 +fr 04_res 2 134 0.0 1.0 +fr 05_nuclear 2 134 0.0 1.0 +fr 06_coal 2 134 0.0 1.0 +fr 07_gas 2 134 0.0 1.0 fr 08_non-res 2 134 0.0 0.0 fr 09_hydro_pump 2 134 0.0 0.0 -fr 01_solar 2 135 1.0 0.0 -fr 02_wind_on 2 135 1.0 0.0 -fr 03_wind_off 2 135 1.0 0.0 -fr 04_res 2 135 1.0 0.0 -fr 05_nuclear 2 135 1.0 0.0 -fr 06_coal 2 135 1.0 0.0 -fr 07_gas 2 135 1.0 0.0 +fr 01_solar 2 135 0.0 1.0 +fr 02_wind_on 2 135 0.0 1.0 +fr 03_wind_off 2 135 0.0 1.0 +fr 04_res 2 135 0.0 1.0 +fr 05_nuclear 2 135 0.0 1.0 +fr 06_coal 2 135 0.0 1.0 +fr 07_gas 2 135 0.0 1.0 fr 08_non-res 2 135 0.0 0.0 fr 09_hydro_pump 2 135 0.0 0.0 -fr 01_solar 2 136 1.0 0.0 -fr 02_wind_on 2 136 1.0 0.0 -fr 03_wind_off 2 136 1.0 0.0 -fr 04_res 2 136 1.0 0.0 -fr 05_nuclear 2 136 1.0 0.0 -fr 06_coal 2 136 1.0 0.0 -fr 07_gas 2 136 1.0 0.0 +fr 01_solar 2 136 0.0 1.0 +fr 02_wind_on 2 136 0.0 1.0 +fr 03_wind_off 2 136 0.0 1.0 +fr 04_res 2 136 0.0 1.0 +fr 05_nuclear 2 136 0.0 1.0 +fr 06_coal 2 136 0.0 1.0 +fr 07_gas 2 136 0.0 1.0 fr 08_non-res 2 136 0.0 0.0 fr 09_hydro_pump 2 136 0.0 0.0 -fr 01_solar 2 137 1.0 0.0 -fr 02_wind_on 2 137 1.0 0.0 -fr 03_wind_off 2 137 1.0 0.0 -fr 04_res 2 137 1.0 0.0 -fr 05_nuclear 2 137 1.0 0.0 -fr 06_coal 2 137 1.0 0.0 -fr 07_gas 2 137 1.0 0.0 +fr 01_solar 2 137 0.0 1.0 +fr 02_wind_on 2 137 0.0 1.0 +fr 03_wind_off 2 137 0.0 1.0 +fr 04_res 2 137 0.0 1.0 +fr 05_nuclear 2 137 0.0 1.0 +fr 06_coal 2 137 0.0 1.0 +fr 07_gas 2 137 0.0 1.0 fr 08_non-res 2 137 0.0 0.0 fr 09_hydro_pump 2 137 0.0 0.0 -fr 01_solar 2 138 1.0 0.0 -fr 02_wind_on 2 138 1.0 0.0 -fr 03_wind_off 2 138 1.0 0.0 -fr 04_res 2 138 1.0 0.0 -fr 05_nuclear 2 138 1.0 0.0 -fr 06_coal 2 138 1.0 0.0 -fr 07_gas 2 138 1.0 0.0 +fr 01_solar 2 138 0.0 1.0 +fr 02_wind_on 2 138 0.0 1.0 +fr 03_wind_off 2 138 0.0 1.0 +fr 04_res 2 138 0.0 1.0 +fr 05_nuclear 2 138 0.0 1.0 +fr 06_coal 2 138 0.0 1.0 +fr 07_gas 2 138 0.0 1.0 fr 08_non-res 2 138 0.0 0.0 fr 09_hydro_pump 2 138 0.0 0.0 -fr 01_solar 2 139 1.0 0.0 -fr 02_wind_on 2 139 1.0 0.0 -fr 03_wind_off 2 139 1.0 0.0 -fr 04_res 2 139 1.0 0.0 -fr 05_nuclear 2 139 1.0 0.0 -fr 06_coal 2 139 1.0 0.0 -fr 07_gas 2 139 1.0 0.0 +fr 01_solar 2 139 0.0 1.0 +fr 02_wind_on 2 139 0.0 1.0 +fr 03_wind_off 2 139 0.0 1.0 +fr 04_res 2 139 0.0 1.0 +fr 05_nuclear 2 139 0.0 1.0 +fr 06_coal 2 139 0.0 1.0 +fr 07_gas 2 139 0.0 1.0 fr 08_non-res 2 139 0.0 0.0 fr 09_hydro_pump 2 139 0.0 0.0 -fr 01_solar 2 140 1.0 0.0 -fr 02_wind_on 2 140 1.0 0.0 -fr 03_wind_off 2 140 1.0 0.0 -fr 04_res 2 140 1.0 0.0 -fr 05_nuclear 2 140 1.0 0.0 -fr 06_coal 2 140 1.0 0.0 -fr 07_gas 2 140 1.0 0.0 +fr 01_solar 2 140 0.0 1.0 +fr 02_wind_on 2 140 0.0 1.0 +fr 03_wind_off 2 140 0.0 1.0 +fr 04_res 2 140 0.0 1.0 +fr 05_nuclear 2 140 0.0 1.0 +fr 06_coal 2 140 0.0 1.0 +fr 07_gas 2 140 0.0 1.0 fr 08_non-res 2 140 0.0 0.0 fr 09_hydro_pump 2 140 0.0 0.0 -fr 01_solar 2 141 1.0 0.0 -fr 02_wind_on 2 141 1.0 0.0 -fr 03_wind_off 2 141 1.0 0.0 -fr 04_res 2 141 1.0 0.0 -fr 05_nuclear 2 141 1.0 0.0 -fr 06_coal 2 141 1.0 0.0 -fr 07_gas 2 141 1.0 0.0 +fr 01_solar 2 141 0.0 1.0 +fr 02_wind_on 2 141 0.0 1.0 +fr 03_wind_off 2 141 0.0 1.0 +fr 04_res 2 141 0.0 1.0 +fr 05_nuclear 2 141 0.0 1.0 +fr 06_coal 2 141 0.0 1.0 +fr 07_gas 2 141 0.0 1.0 fr 08_non-res 2 141 0.0 0.0 fr 09_hydro_pump 2 141 0.0 0.0 -fr 01_solar 2 142 1.0 0.0 -fr 02_wind_on 2 142 1.0 0.0 -fr 03_wind_off 2 142 1.0 0.0 -fr 04_res 2 142 1.0 0.0 -fr 05_nuclear 2 142 1.0 0.0 -fr 06_coal 2 142 1.0 0.0 -fr 07_gas 2 142 1.0 0.0 -fr 08_non-res 2 142 1.0 0.0 +fr 01_solar 2 142 0.0 1.0 +fr 02_wind_on 2 142 0.0 1.0 +fr 03_wind_off 2 142 0.0 1.0 +fr 04_res 2 142 0.0 1.0 +fr 05_nuclear 2 142 0.0 1.0 +fr 06_coal 2 142 0.0 1.0 +fr 07_gas 2 142 0.0 1.0 +fr 08_non-res 2 142 0.0 1.0 fr 09_hydro_pump 2 142 0.0 0.0 -fr 01_solar 2 143 1.0 0.0 -fr 02_wind_on 2 143 1.0 0.0 -fr 03_wind_off 2 143 1.0 0.0 -fr 04_res 2 143 1.0 0.0 -fr 05_nuclear 2 143 1.0 0.0 -fr 06_coal 2 143 1.0 0.0 -fr 07_gas 2 143 1.0 0.0 -fr 08_non-res 2 143 1.0 0.0 +fr 01_solar 2 143 0.0 1.0 +fr 02_wind_on 2 143 0.0 1.0 +fr 03_wind_off 2 143 0.0 1.0 +fr 04_res 2 143 0.0 1.0 +fr 05_nuclear 2 143 0.0 1.0 +fr 06_coal 2 143 0.0 1.0 +fr 07_gas 2 143 0.0 1.0 +fr 08_non-res 2 143 0.0 1.0 fr 09_hydro_pump 2 143 0.0 0.0 -fr 01_solar 2 144 1.0 0.0 -fr 02_wind_on 2 144 1.0 0.0 -fr 03_wind_off 2 144 1.0 0.0 -fr 04_res 2 144 1.0 0.0 -fr 05_nuclear 2 144 1.0 0.0 -fr 06_coal 2 144 1.0 0.0 -fr 07_gas 2 144 1.0 0.0 -fr 08_non-res 2 144 1.0 0.0 +fr 01_solar 2 144 0.0 1.0 +fr 02_wind_on 2 144 0.0 1.0 +fr 03_wind_off 2 144 0.0 1.0 +fr 04_res 2 144 0.0 1.0 +fr 05_nuclear 2 144 0.0 1.0 +fr 06_coal 2 144 0.0 1.0 +fr 07_gas 2 144 0.0 1.0 +fr 08_non-res 2 144 0.0 1.0 fr 09_hydro_pump 2 144 0.0 0.0 -fr 01_solar 2 145 1.0 0.0 -fr 02_wind_on 2 145 1.0 0.0 -fr 03_wind_off 2 145 1.0 0.0 -fr 04_res 2 145 1.0 0.0 -fr 05_nuclear 2 145 1.0 0.0 -fr 06_coal 2 145 1.0 0.0 -fr 07_gas 2 145 1.0 0.0 -fr 08_non-res 2 145 1.0 0.0 +fr 01_solar 2 145 0.0 1.0 +fr 02_wind_on 2 145 0.0 1.0 +fr 03_wind_off 2 145 0.0 1.0 +fr 04_res 2 145 0.0 1.0 +fr 05_nuclear 2 145 0.0 1.0 +fr 06_coal 2 145 0.0 1.0 +fr 07_gas 2 145 0.0 1.0 +fr 08_non-res 2 145 0.0 1.0 fr 09_hydro_pump 2 145 0.0 0.0 -fr 01_solar 2 146 1.0 0.0 -fr 02_wind_on 2 146 1.0 0.0 -fr 03_wind_off 2 146 1.0 0.0 -fr 04_res 2 146 1.0 0.0 -fr 05_nuclear 2 146 1.0 0.0 -fr 06_coal 2 146 1.0 0.0 -fr 07_gas 2 146 1.0 0.0 -fr 08_non-res 2 146 1.0 0.0 +fr 01_solar 2 146 0.0 1.0 +fr 02_wind_on 2 146 0.0 1.0 +fr 03_wind_off 2 146 0.0 1.0 +fr 04_res 2 146 0.0 1.0 +fr 05_nuclear 2 146 0.0 1.0 +fr 06_coal 2 146 0.0 1.0 +fr 07_gas 2 146 0.0 1.0 +fr 08_non-res 2 146 0.0 1.0 fr 09_hydro_pump 2 146 0.0 0.0 -fr 01_solar 2 147 1.0 0.0 -fr 02_wind_on 2 147 1.0 0.0 -fr 03_wind_off 2 147 1.0 0.0 -fr 04_res 2 147 1.0 0.0 -fr 05_nuclear 2 147 1.0 0.0 -fr 06_coal 2 147 1.0 0.0 -fr 07_gas 2 147 1.0 0.0 -fr 08_non-res 2 147 1.0 0.0 +fr 01_solar 2 147 0.0 1.0 +fr 02_wind_on 2 147 0.0 1.0 +fr 03_wind_off 2 147 0.0 1.0 +fr 04_res 2 147 0.0 1.0 +fr 05_nuclear 2 147 0.0 1.0 +fr 06_coal 2 147 0.0 1.0 +fr 07_gas 2 147 0.0 1.0 +fr 08_non-res 2 147 0.0 1.0 fr 09_hydro_pump 2 147 0.0 0.0 -fr 01_solar 2 148 1.0 0.0 -fr 02_wind_on 2 148 1.0 0.0 -fr 03_wind_off 2 148 1.0 0.0 -fr 04_res 2 148 1.0 0.0 -fr 05_nuclear 2 148 1.0 0.0 -fr 06_coal 2 148 1.0 0.0 -fr 07_gas 2 148 1.0 0.0 -fr 08_non-res 2 148 1.0 0.0 +fr 01_solar 2 148 0.0 1.0 +fr 02_wind_on 2 148 0.0 1.0 +fr 03_wind_off 2 148 0.0 1.0 +fr 04_res 2 148 0.0 1.0 +fr 05_nuclear 2 148 0.0 1.0 +fr 06_coal 2 148 0.0 1.0 +fr 07_gas 2 148 0.0 1.0 +fr 08_non-res 2 148 0.0 1.0 fr 09_hydro_pump 2 148 0.0 0.0 -fr 01_solar 2 149 1.0 0.0 -fr 02_wind_on 2 149 1.0 0.0 -fr 03_wind_off 2 149 1.0 0.0 -fr 04_res 2 149 1.0 0.0 -fr 05_nuclear 2 149 1.0 0.0 -fr 06_coal 2 149 1.0 0.0 -fr 07_gas 2 149 1.0 0.0 -fr 08_non-res 2 149 1.0 0.0 +fr 01_solar 2 149 0.0 1.0 +fr 02_wind_on 2 149 0.0 1.0 +fr 03_wind_off 2 149 0.0 1.0 +fr 04_res 2 149 0.0 1.0 +fr 05_nuclear 2 149 0.0 1.0 +fr 06_coal 2 149 0.0 1.0 +fr 07_gas 2 149 0.0 1.0 +fr 08_non-res 2 149 0.0 1.0 fr 09_hydro_pump 2 149 0.0 0.0 -fr 01_solar 2 150 1.0 0.0 -fr 02_wind_on 2 150 1.0 0.0 -fr 03_wind_off 2 150 1.0 0.0 -fr 04_res 2 150 1.0 0.0 -fr 05_nuclear 2 150 1.0 0.0 -fr 06_coal 2 150 1.0 0.0 -fr 07_gas 2 150 1.0 0.0 -fr 08_non-res 2 150 1.0 0.0 +fr 01_solar 2 150 0.0 1.0 +fr 02_wind_on 2 150 0.0 1.0 +fr 03_wind_off 2 150 0.0 1.0 +fr 04_res 2 150 0.0 1.0 +fr 05_nuclear 2 150 0.0 1.0 +fr 06_coal 2 150 0.0 1.0 +fr 07_gas 2 150 0.0 1.0 +fr 08_non-res 2 150 0.0 1.0 fr 09_hydro_pump 2 150 0.0 0.0 -fr 01_solar 2 151 1.0 0.0 -fr 02_wind_on 2 151 1.0 0.0 -fr 03_wind_off 2 151 1.0 0.0 -fr 04_res 2 151 1.0 0.0 -fr 05_nuclear 2 151 1.0 0.0 -fr 06_coal 2 151 1.0 0.0 -fr 07_gas 2 151 1.0 0.0 -fr 08_non-res 2 151 1.0 0.0 +fr 01_solar 2 151 0.0 1.0 +fr 02_wind_on 2 151 0.0 1.0 +fr 03_wind_off 2 151 0.0 1.0 +fr 04_res 2 151 0.0 1.0 +fr 05_nuclear 2 151 0.0 1.0 +fr 06_coal 2 151 0.0 1.0 +fr 07_gas 2 151 0.0 1.0 +fr 08_non-res 2 151 0.0 1.0 fr 09_hydro_pump 2 151 0.0 0.0 -fr 01_solar 2 152 1.0 0.0 -fr 02_wind_on 2 152 1.0 0.0 -fr 03_wind_off 2 152 1.0 0.0 -fr 04_res 2 152 1.0 0.0 -fr 05_nuclear 2 152 1.0 0.0 -fr 06_coal 2 152 1.0 0.0 -fr 07_gas 2 152 1.0 0.0 -fr 08_non-res 2 152 1.0 0.0 +fr 01_solar 2 152 0.0 1.0 +fr 02_wind_on 2 152 0.0 1.0 +fr 03_wind_off 2 152 0.0 1.0 +fr 04_res 2 152 0.0 1.0 +fr 05_nuclear 2 152 0.0 1.0 +fr 06_coal 2 152 0.0 1.0 +fr 07_gas 2 152 0.0 1.0 +fr 08_non-res 2 152 0.0 1.0 fr 09_hydro_pump 2 152 0.0 0.0 -fr 01_solar 2 153 1.0 0.0 -fr 02_wind_on 2 153 1.0 0.0 -fr 03_wind_off 2 153 1.0 0.0 -fr 04_res 2 153 1.0 0.0 -fr 05_nuclear 2 153 1.0 0.0 -fr 06_coal 2 153 1.0 0.0 -fr 07_gas 2 153 1.0 0.0 -fr 08_non-res 2 153 1.0 0.0 +fr 01_solar 2 153 0.0 1.0 +fr 02_wind_on 2 153 0.0 1.0 +fr 03_wind_off 2 153 0.0 1.0 +fr 04_res 2 153 0.0 1.0 +fr 05_nuclear 2 153 0.0 1.0 +fr 06_coal 2 153 0.0 1.0 +fr 07_gas 2 153 0.0 1.0 +fr 08_non-res 2 153 0.0 1.0 fr 09_hydro_pump 2 153 0.0 0.0 -fr 01_solar 2 154 1.0 0.0 -fr 02_wind_on 2 154 1.0 0.0 -fr 03_wind_off 2 154 1.0 0.0 -fr 04_res 2 154 1.0 0.0 -fr 05_nuclear 2 154 1.0 0.0 -fr 06_coal 2 154 1.0 0.0 -fr 07_gas 2 154 1.0 0.0 -fr 08_non-res 2 154 1.0 0.0 +fr 01_solar 2 154 0.0 1.0 +fr 02_wind_on 2 154 0.0 1.0 +fr 03_wind_off 2 154 0.0 1.0 +fr 04_res 2 154 0.0 1.0 +fr 05_nuclear 2 154 0.0 1.0 +fr 06_coal 2 154 0.0 1.0 +fr 07_gas 2 154 0.0 1.0 +fr 08_non-res 2 154 0.0 1.0 fr 09_hydro_pump 2 154 0.0 0.0 -fr 01_solar 2 155 1.0 0.0 -fr 02_wind_on 2 155 1.0 0.0 -fr 03_wind_off 2 155 1.0 0.0 -fr 04_res 2 155 1.0 0.0 -fr 05_nuclear 2 155 1.0 0.0 -fr 06_coal 2 155 1.0 0.0 -fr 07_gas 2 155 1.0 0.0 -fr 08_non-res 2 155 1.0 0.0 +fr 01_solar 2 155 0.0 1.0 +fr 02_wind_on 2 155 0.0 1.0 +fr 03_wind_off 2 155 0.0 1.0 +fr 04_res 2 155 0.0 1.0 +fr 05_nuclear 2 155 0.0 1.0 +fr 06_coal 2 155 0.0 1.0 +fr 07_gas 2 155 0.0 1.0 +fr 08_non-res 2 155 0.0 1.0 fr 09_hydro_pump 2 155 0.0 0.0 -fr 01_solar 2 156 1.0 0.0 -fr 02_wind_on 2 156 1.0 0.0 -fr 03_wind_off 2 156 1.0 0.0 -fr 04_res 2 156 1.0 0.0 -fr 05_nuclear 2 156 1.0 0.0 -fr 06_coal 2 156 1.0 0.0 -fr 07_gas 2 156 1.0 0.0 -fr 08_non-res 2 156 1.0 0.0 +fr 01_solar 2 156 0.0 1.0 +fr 02_wind_on 2 156 0.0 1.0 +fr 03_wind_off 2 156 0.0 1.0 +fr 04_res 2 156 0.0 1.0 +fr 05_nuclear 2 156 0.0 1.0 +fr 06_coal 2 156 0.0 1.0 +fr 07_gas 2 156 0.0 1.0 +fr 08_non-res 2 156 0.0 1.0 fr 09_hydro_pump 2 156 0.0 0.0 -fr 01_solar 2 157 1.0 0.0 -fr 02_wind_on 2 157 1.0 0.0 -fr 03_wind_off 2 157 1.0 0.0 -fr 04_res 2 157 1.0 0.0 -fr 05_nuclear 2 157 1.0 0.0 -fr 06_coal 2 157 1.0 0.0 -fr 07_gas 2 157 1.0 0.0 -fr 08_non-res 2 157 1.0 0.0 +fr 01_solar 2 157 0.0 1.0 +fr 02_wind_on 2 157 0.0 1.0 +fr 03_wind_off 2 157 0.0 1.0 +fr 04_res 2 157 0.0 1.0 +fr 05_nuclear 2 157 0.0 1.0 +fr 06_coal 2 157 0.0 1.0 +fr 07_gas 2 157 0.0 1.0 +fr 08_non-res 2 157 0.0 1.0 fr 09_hydro_pump 2 157 0.0 0.0 -fr 01_solar 2 158 1.0 0.0 -fr 02_wind_on 2 158 1.0 0.0 -fr 03_wind_off 2 158 1.0 0.0 -fr 04_res 2 158 1.0 0.0 -fr 05_nuclear 2 158 1.0 0.0 -fr 06_coal 2 158 1.0 0.0 -fr 07_gas 2 158 1.0 0.0 -fr 08_non-res 2 158 1.0 0.0 +fr 01_solar 2 158 0.0 1.0 +fr 02_wind_on 2 158 0.0 1.0 +fr 03_wind_off 2 158 0.0 1.0 +fr 04_res 2 158 0.0 1.0 +fr 05_nuclear 2 158 0.0 1.0 +fr 06_coal 2 158 0.0 1.0 +fr 07_gas 2 158 0.0 1.0 +fr 08_non-res 2 158 0.0 1.0 fr 09_hydro_pump 2 158 0.0 0.0 -fr 01_solar 2 159 1.0 0.0 -fr 02_wind_on 2 159 1.0 0.0 -fr 03_wind_off 2 159 1.0 0.0 -fr 04_res 2 159 1.0 0.0 -fr 05_nuclear 2 159 1.0 0.0 -fr 06_coal 2 159 1.0 0.0 -fr 07_gas 2 159 1.0 0.0 -fr 08_non-res 2 159 1.0 0.0 +fr 01_solar 2 159 0.0 1.0 +fr 02_wind_on 2 159 0.0 1.0 +fr 03_wind_off 2 159 0.0 1.0 +fr 04_res 2 159 0.0 1.0 +fr 05_nuclear 2 159 0.0 1.0 +fr 06_coal 2 159 0.0 1.0 +fr 07_gas 2 159 0.0 1.0 +fr 08_non-res 2 159 0.0 1.0 fr 09_hydro_pump 2 159 0.0 0.0 -fr 01_solar 2 160 1.0 0.0 -fr 02_wind_on 2 160 1.0 0.0 -fr 03_wind_off 2 160 1.0 0.0 -fr 04_res 2 160 1.0 0.0 -fr 05_nuclear 2 160 1.0 0.0 -fr 06_coal 2 160 1.0 0.0 -fr 07_gas 2 160 1.0 0.0 -fr 08_non-res 2 160 1.0 0.0 +fr 01_solar 2 160 0.0 1.0 +fr 02_wind_on 2 160 0.0 1.0 +fr 03_wind_off 2 160 0.0 1.0 +fr 04_res 2 160 0.0 1.0 +fr 05_nuclear 2 160 0.0 1.0 +fr 06_coal 2 160 0.0 1.0 +fr 07_gas 2 160 0.0 1.0 +fr 08_non-res 2 160 0.0 1.0 fr 09_hydro_pump 2 160 0.0 0.0 -fr 01_solar 2 161 1.0 0.0 -fr 02_wind_on 2 161 1.0 0.0 -fr 03_wind_off 2 161 1.0 0.0 -fr 04_res 2 161 1.0 0.0 -fr 05_nuclear 2 161 1.0 0.0 -fr 06_coal 2 161 1.0 0.0 -fr 07_gas 2 161 1.0 0.0 -fr 08_non-res 2 161 1.0 0.0 +fr 01_solar 2 161 0.0 1.0 +fr 02_wind_on 2 161 0.0 1.0 +fr 03_wind_off 2 161 0.0 1.0 +fr 04_res 2 161 0.0 1.0 +fr 05_nuclear 2 161 0.0 1.0 +fr 06_coal 2 161 0.0 1.0 +fr 07_gas 2 161 0.0 1.0 +fr 08_non-res 2 161 0.0 1.0 fr 09_hydro_pump 2 161 0.0 0.0 -fr 01_solar 2 162 1.0 0.0 -fr 02_wind_on 2 162 1.0 0.0 -fr 03_wind_off 2 162 1.0 0.0 -fr 04_res 2 162 1.0 0.0 -fr 05_nuclear 2 162 1.0 0.0 -fr 06_coal 2 162 1.0 0.0 -fr 07_gas 2 162 1.0 0.0 -fr 08_non-res 2 162 1.0 0.0 -fr 09_hydro_pump 2 162 1.0 0.0 -fr 01_solar 2 163 1.0 0.0 -fr 02_wind_on 2 163 1.0 0.0 -fr 03_wind_off 2 163 1.0 0.0 -fr 04_res 2 163 1.0 0.0 -fr 05_nuclear 2 163 1.0 0.0 -fr 06_coal 2 163 1.0 0.0 -fr 07_gas 2 163 1.0 0.0 -fr 08_non-res 2 163 1.0 0.0 -fr 09_hydro_pump 2 163 1.0 0.0 -fr 01_solar 2 164 1.0 0.0 -fr 02_wind_on 2 164 1.0 0.0 -fr 03_wind_off 2 164 1.0 0.0 -fr 04_res 2 164 1.0 0.0 -fr 05_nuclear 2 164 1.0 0.0 -fr 06_coal 2 164 1.0 0.0 -fr 07_gas 2 164 1.0 0.0 -fr 08_non-res 2 164 1.0 0.0 -fr 09_hydro_pump 2 164 1.0 0.0 -fr 01_solar 2 165 1.0 0.0 -fr 02_wind_on 2 165 1.0 0.0 -fr 03_wind_off 2 165 1.0 0.0 -fr 04_res 2 165 1.0 0.0 -fr 05_nuclear 2 165 1.0 0.0 -fr 06_coal 2 165 1.0 0.0 -fr 07_gas 2 165 1.0 0.0 -fr 08_non-res 2 165 1.0 0.0 -fr 09_hydro_pump 2 165 1.0 0.0 -fr 01_solar 2 166 1.0 0.0 -fr 02_wind_on 2 166 1.0 0.0 -fr 03_wind_off 2 166 1.0 0.0 -fr 04_res 2 166 1.0 0.0 -fr 05_nuclear 2 166 1.0 0.0 -fr 06_coal 2 166 1.0 0.0 -fr 07_gas 2 166 1.0 0.0 -fr 08_non-res 2 166 1.0 0.0 -fr 09_hydro_pump 2 166 1.0 0.0 -fr 01_solar 2 167 1.0 0.0 -fr 02_wind_on 2 167 1.0 0.0 -fr 03_wind_off 2 167 1.0 0.0 -fr 04_res 2 167 1.0 0.0 -fr 05_nuclear 2 167 1.0 0.0 -fr 06_coal 2 167 1.0 0.0 -fr 07_gas 2 167 1.0 0.0 -fr 08_non-res 2 167 1.0 0.0 -fr 09_hydro_pump 2 167 1.0 0.0 -fr 01_solar 2 168 1.0 0.0 -fr 02_wind_on 2 168 1.0 0.0 -fr 03_wind_off 2 168 1.0 0.0 -fr 04_res 2 168 1.0 0.0 -fr 05_nuclear 2 168 1.0 0.0 -fr 06_coal 2 168 1.0 0.0 -fr 07_gas 2 168 1.0 0.0 -fr 08_non-res 2 168 1.0 0.0 -fr 09_hydro_pump 2 168 1.0 0.0 +fr 01_solar 2 162 0.0 1.0 +fr 02_wind_on 2 162 0.0 1.0 +fr 03_wind_off 2 162 0.0 1.0 +fr 04_res 2 162 0.0 1.0 +fr 05_nuclear 2 162 0.0 1.0 +fr 06_coal 2 162 0.0 1.0 +fr 07_gas 2 162 0.0 1.0 +fr 08_non-res 2 162 0.0 1.0 +fr 09_hydro_pump 2 162 0.0 1.0 +fr 01_solar 2 163 0.0 1.0 +fr 02_wind_on 2 163 0.0 1.0 +fr 03_wind_off 2 163 0.0 1.0 +fr 04_res 2 163 0.0 1.0 +fr 05_nuclear 2 163 0.0 1.0 +fr 06_coal 2 163 0.0 1.0 +fr 07_gas 2 163 0.0 1.0 +fr 08_non-res 2 163 0.0 1.0 +fr 09_hydro_pump 2 163 0.0 1.0 +fr 01_solar 2 164 0.0 1.0 +fr 02_wind_on 2 164 0.0 1.0 +fr 03_wind_off 2 164 0.0 1.0 +fr 04_res 2 164 0.0 1.0 +fr 05_nuclear 2 164 0.0 1.0 +fr 06_coal 2 164 0.0 1.0 +fr 07_gas 2 164 0.0 1.0 +fr 08_non-res 2 164 0.0 1.0 +fr 09_hydro_pump 2 164 0.0 1.0 +fr 01_solar 2 165 0.0 1.0 +fr 02_wind_on 2 165 0.0 1.0 +fr 03_wind_off 2 165 0.0 1.0 +fr 04_res 2 165 0.0 1.0 +fr 05_nuclear 2 165 0.0 1.0 +fr 06_coal 2 165 0.0 1.0 +fr 07_gas 2 165 0.0 1.0 +fr 08_non-res 2 165 0.0 1.0 +fr 09_hydro_pump 2 165 0.0 1.0 +fr 01_solar 2 166 0.0 1.0 +fr 02_wind_on 2 166 0.0 1.0 +fr 03_wind_off 2 166 0.0 1.0 +fr 04_res 2 166 0.0 1.0 +fr 05_nuclear 2 166 0.0 1.0 +fr 06_coal 2 166 0.0 1.0 +fr 07_gas 2 166 0.0 1.0 +fr 08_non-res 2 166 0.0 1.0 +fr 09_hydro_pump 2 166 0.0 1.0 +fr 01_solar 2 167 0.0 1.0 +fr 02_wind_on 2 167 0.0 1.0 +fr 03_wind_off 2 167 0.0 1.0 +fr 04_res 2 167 0.0 1.0 +fr 05_nuclear 2 167 0.0 1.0 +fr 06_coal 2 167 0.0 1.0 +fr 07_gas 2 167 0.0 1.0 +fr 08_non-res 2 167 0.0 1.0 +fr 09_hydro_pump 2 167 0.0 1.0 +fr 01_solar 2 168 0.0 1.0 +fr 02_wind_on 2 168 0.0 1.0 +fr 03_wind_off 2 168 0.0 1.0 +fr 04_res 2 168 0.0 1.0 +fr 05_nuclear 2 168 0.0 1.0 +fr 06_coal 2 168 0.0 1.0 +fr 07_gas 2 168 0.0 1.0 +fr 08_non-res 2 168 0.0 1.0 +fr 09_hydro_pump 2 168 0.0 1.0 fr 01_solar 2 169 0.0 0.0 fr 02_wind_on 2 169 0.0 0.0 fr 03_wind_off 2 169 0.0 0.0 @@ -19664,7 +19664,7 @@ fr 06_coal 2 169 0.0 0.0 fr 07_gas 2 169 0.0 0.0 fr 08_non-res 2 169 0.0 0.0 fr 09_hydro_pump 2 169 0.0 0.0 -fr 01_solar 2 170 1.0 0.0 +fr 01_solar 2 170 0.0 1.0 fr 02_wind_on 2 170 0.0 0.0 fr 03_wind_off 2 170 0.0 0.0 fr 04_res 2 170 0.0 0.0 @@ -19673,7 +19673,7 @@ fr 06_coal 2 170 0.0 0.0 fr 07_gas 2 170 0.0 0.0 fr 08_non-res 2 170 0.0 0.0 fr 09_hydro_pump 2 170 0.0 0.0 -fr 01_solar 2 171 1.0 0.0 +fr 01_solar 2 171 0.0 1.0 fr 02_wind_on 2 171 0.0 0.0 fr 03_wind_off 2 171 0.0 0.0 fr 04_res 2 171 0.0 0.0 @@ -19682,7 +19682,7 @@ fr 06_coal 2 171 0.0 0.0 fr 07_gas 2 171 0.0 0.0 fr 08_non-res 2 171 0.0 0.0 fr 09_hydro_pump 2 171 0.0 0.0 -fr 01_solar 2 172 1.0 0.0 +fr 01_solar 2 172 0.0 1.0 fr 02_wind_on 2 172 0.0 0.0 fr 03_wind_off 2 172 0.0 0.0 fr 04_res 2 172 0.0 0.0 @@ -19691,7 +19691,7 @@ fr 06_coal 2 172 0.0 0.0 fr 07_gas 2 172 0.0 0.0 fr 08_non-res 2 172 0.0 0.0 fr 09_hydro_pump 2 172 0.0 0.0 -fr 01_solar 2 173 1.0 0.0 +fr 01_solar 2 173 0.0 1.0 fr 02_wind_on 2 173 0.0 0.0 fr 03_wind_off 2 173 0.0 0.0 fr 04_res 2 173 0.0 0.0 @@ -19700,7 +19700,7 @@ fr 06_coal 2 173 0.0 0.0 fr 07_gas 2 173 0.0 0.0 fr 08_non-res 2 173 0.0 0.0 fr 09_hydro_pump 2 173 0.0 0.0 -fr 01_solar 2 174 1.0 0.0 +fr 01_solar 2 174 0.0 1.0 fr 02_wind_on 2 174 0.0 0.0 fr 03_wind_off 2 174 0.0 0.0 fr 04_res 2 174 0.0 0.0 @@ -19709,7 +19709,7 @@ fr 06_coal 2 174 0.0 0.0 fr 07_gas 2 174 0.0 0.0 fr 08_non-res 2 174 0.0 0.0 fr 09_hydro_pump 2 174 0.0 0.0 -fr 01_solar 2 175 1.0 0.0 +fr 01_solar 2 175 0.0 1.0 fr 02_wind_on 2 175 0.0 0.0 fr 03_wind_off 2 175 0.0 0.0 fr 04_res 2 175 0.0 0.0 @@ -19718,7 +19718,7 @@ fr 06_coal 2 175 0.0 0.0 fr 07_gas 2 175 0.0 0.0 fr 08_non-res 2 175 0.0 0.0 fr 09_hydro_pump 2 175 0.0 0.0 -fr 01_solar 2 176 1.0 0.0 +fr 01_solar 2 176 0.0 1.0 fr 02_wind_on 2 176 0.0 0.0 fr 03_wind_off 2 176 0.0 0.0 fr 04_res 2 176 0.0 0.0 @@ -19727,7 +19727,7 @@ fr 06_coal 2 176 0.0 0.0 fr 07_gas 2 176 0.0 0.0 fr 08_non-res 2 176 0.0 0.0 fr 09_hydro_pump 2 176 0.0 0.0 -fr 01_solar 2 177 1.0 0.0 +fr 01_solar 2 177 0.0 1.0 fr 02_wind_on 2 177 0.0 0.0 fr 03_wind_off 2 177 0.0 0.0 fr 04_res 2 177 0.0 0.0 @@ -19736,7 +19736,7 @@ fr 06_coal 2 177 0.0 0.0 fr 07_gas 2 177 0.0 0.0 fr 08_non-res 2 177 0.0 0.0 fr 09_hydro_pump 2 177 0.0 0.0 -fr 01_solar 2 178 1.0 0.0 +fr 01_solar 2 178 0.0 1.0 fr 02_wind_on 2 178 0.0 0.0 fr 03_wind_off 2 178 0.0 0.0 fr 04_res 2 178 0.0 0.0 @@ -19745,7 +19745,7 @@ fr 06_coal 2 178 0.0 0.0 fr 07_gas 2 178 0.0 0.0 fr 08_non-res 2 178 0.0 0.0 fr 09_hydro_pump 2 178 0.0 0.0 -fr 01_solar 2 179 1.0 0.0 +fr 01_solar 2 179 0.0 1.0 fr 02_wind_on 2 179 0.0 0.0 fr 03_wind_off 2 179 0.0 0.0 fr 04_res 2 179 0.0 0.0 @@ -19754,7 +19754,7 @@ fr 06_coal 2 179 0.0 0.0 fr 07_gas 2 179 0.0 0.0 fr 08_non-res 2 179 0.0 0.0 fr 09_hydro_pump 2 179 0.0 0.0 -fr 01_solar 2 180 1.0 0.0 +fr 01_solar 2 180 0.0 1.0 fr 02_wind_on 2 180 0.0 0.0 fr 03_wind_off 2 180 0.0 0.0 fr 04_res 2 180 0.0 0.0 @@ -19763,7 +19763,7 @@ fr 06_coal 2 180 0.0 0.0 fr 07_gas 2 180 0.0 0.0 fr 08_non-res 2 180 0.0 0.0 fr 09_hydro_pump 2 180 0.0 0.0 -fr 01_solar 2 181 1.0 0.0 +fr 01_solar 2 181 0.0 1.0 fr 02_wind_on 2 181 0.0 0.0 fr 03_wind_off 2 181 0.0 0.0 fr 04_res 2 181 0.0 0.0 @@ -19772,7 +19772,7 @@ fr 06_coal 2 181 0.0 0.0 fr 07_gas 2 181 0.0 0.0 fr 08_non-res 2 181 0.0 0.0 fr 09_hydro_pump 2 181 0.0 0.0 -fr 01_solar 2 182 1.0 0.0 +fr 01_solar 2 182 0.0 1.0 fr 02_wind_on 2 182 0.0 0.0 fr 03_wind_off 2 182 0.0 0.0 fr 04_res 2 182 0.0 0.0 @@ -19781,7 +19781,7 @@ fr 06_coal 2 182 0.0 0.0 fr 07_gas 2 182 0.0 0.0 fr 08_non-res 2 182 0.0 0.0 fr 09_hydro_pump 2 182 0.0 0.0 -fr 01_solar 2 183 1.0 0.0 +fr 01_solar 2 183 0.0 1.0 fr 02_wind_on 2 183 0.0 0.0 fr 03_wind_off 2 183 0.0 0.0 fr 04_res 2 183 0.0 0.0 @@ -19790,7 +19790,7 @@ fr 06_coal 2 183 0.0 0.0 fr 07_gas 2 183 0.0 0.0 fr 08_non-res 2 183 0.0 0.0 fr 09_hydro_pump 2 183 0.0 0.0 -fr 01_solar 2 184 1.0 0.0 +fr 01_solar 2 184 0.0 1.0 fr 02_wind_on 2 184 0.0 0.0 fr 03_wind_off 2 184 0.0 0.0 fr 04_res 2 184 0.0 0.0 @@ -19799,7 +19799,7 @@ fr 06_coal 2 184 0.0 0.0 fr 07_gas 2 184 0.0 0.0 fr 08_non-res 2 184 0.0 0.0 fr 09_hydro_pump 2 184 0.0 0.0 -fr 01_solar 2 185 1.0 0.0 +fr 01_solar 2 185 0.0 1.0 fr 02_wind_on 2 185 0.0 0.0 fr 03_wind_off 2 185 0.0 0.0 fr 04_res 2 185 0.0 0.0 @@ -19808,7 +19808,7 @@ fr 06_coal 2 185 0.0 0.0 fr 07_gas 2 185 0.0 0.0 fr 08_non-res 2 185 0.0 0.0 fr 09_hydro_pump 2 185 0.0 0.0 -fr 01_solar 2 186 1.0 0.0 +fr 01_solar 2 186 0.0 1.0 fr 02_wind_on 2 186 0.0 0.0 fr 03_wind_off 2 186 0.0 0.0 fr 04_res 2 186 0.0 0.0 @@ -19817,7 +19817,7 @@ fr 06_coal 2 186 0.0 0.0 fr 07_gas 2 186 0.0 0.0 fr 08_non-res 2 186 0.0 0.0 fr 09_hydro_pump 2 186 0.0 0.0 -fr 01_solar 2 187 1.0 0.0 +fr 01_solar 2 187 0.0 1.0 fr 02_wind_on 2 187 0.0 0.0 fr 03_wind_off 2 187 0.0 0.0 fr 04_res 2 187 0.0 0.0 @@ -19826,7 +19826,7 @@ fr 06_coal 2 187 0.0 0.0 fr 07_gas 2 187 0.0 0.0 fr 08_non-res 2 187 0.0 0.0 fr 09_hydro_pump 2 187 0.0 0.0 -fr 01_solar 2 188 1.0 0.0 +fr 01_solar 2 188 0.0 1.0 fr 02_wind_on 2 188 0.0 0.0 fr 03_wind_off 2 188 0.0 0.0 fr 04_res 2 188 0.0 0.0 @@ -19835,7 +19835,7 @@ fr 06_coal 2 188 0.0 0.0 fr 07_gas 2 188 0.0 0.0 fr 08_non-res 2 188 0.0 0.0 fr 09_hydro_pump 2 188 0.0 0.0 -fr 01_solar 2 189 1.0 0.0 +fr 01_solar 2 189 0.0 1.0 fr 02_wind_on 2 189 0.0 0.0 fr 03_wind_off 2 189 0.0 0.0 fr 04_res 2 189 0.0 0.0 @@ -19844,8 +19844,8 @@ fr 06_coal 2 189 0.0 0.0 fr 07_gas 2 189 0.0 0.0 fr 08_non-res 2 189 0.0 0.0 fr 09_hydro_pump 2 189 0.0 0.0 -fr 01_solar 2 190 1.0 0.0 -fr 02_wind_on 2 190 1.0 0.0 +fr 01_solar 2 190 0.0 1.0 +fr 02_wind_on 2 190 0.0 1.0 fr 03_wind_off 2 190 0.0 0.0 fr 04_res 2 190 0.0 0.0 fr 05_nuclear 2 190 0.0 0.0 @@ -19853,8 +19853,8 @@ fr 06_coal 2 190 0.0 0.0 fr 07_gas 2 190 0.0 0.0 fr 08_non-res 2 190 0.0 0.0 fr 09_hydro_pump 2 190 0.0 0.0 -fr 01_solar 2 191 1.0 0.0 -fr 02_wind_on 2 191 1.0 0.0 +fr 01_solar 2 191 0.0 1.0 +fr 02_wind_on 2 191 0.0 1.0 fr 03_wind_off 2 191 0.0 0.0 fr 04_res 2 191 0.0 0.0 fr 05_nuclear 2 191 0.0 0.0 @@ -19862,8 +19862,8 @@ fr 06_coal 2 191 0.0 0.0 fr 07_gas 2 191 0.0 0.0 fr 08_non-res 2 191 0.0 0.0 fr 09_hydro_pump 2 191 0.0 0.0 -fr 01_solar 2 192 1.0 0.0 -fr 02_wind_on 2 192 1.0 0.0 +fr 01_solar 2 192 0.0 1.0 +fr 02_wind_on 2 192 0.0 1.0 fr 03_wind_off 2 192 0.0 0.0 fr 04_res 2 192 0.0 0.0 fr 05_nuclear 2 192 0.0 0.0 @@ -19871,8 +19871,8 @@ fr 06_coal 2 192 0.0 0.0 fr 07_gas 2 192 0.0 0.0 fr 08_non-res 2 192 0.0 0.0 fr 09_hydro_pump 2 192 0.0 0.0 -fr 01_solar 2 193 1.0 0.0 -fr 02_wind_on 2 193 1.0 0.0 +fr 01_solar 2 193 0.0 1.0 +fr 02_wind_on 2 193 0.0 1.0 fr 03_wind_off 2 193 0.0 0.0 fr 04_res 2 193 0.0 0.0 fr 05_nuclear 2 193 0.0 0.0 @@ -19880,8 +19880,8 @@ fr 06_coal 2 193 0.0 0.0 fr 07_gas 2 193 0.0 0.0 fr 08_non-res 2 193 0.0 0.0 fr 09_hydro_pump 2 193 0.0 0.0 -fr 01_solar 2 194 1.0 0.0 -fr 02_wind_on 2 194 1.0 0.0 +fr 01_solar 2 194 0.0 1.0 +fr 02_wind_on 2 194 0.0 1.0 fr 03_wind_off 2 194 0.0 0.0 fr 04_res 2 194 0.0 0.0 fr 05_nuclear 2 194 0.0 0.0 @@ -19889,8 +19889,8 @@ fr 06_coal 2 194 0.0 0.0 fr 07_gas 2 194 0.0 0.0 fr 08_non-res 2 194 0.0 0.0 fr 09_hydro_pump 2 194 0.0 0.0 -fr 01_solar 2 195 1.0 0.0 -fr 02_wind_on 2 195 1.0 0.0 +fr 01_solar 2 195 0.0 1.0 +fr 02_wind_on 2 195 0.0 1.0 fr 03_wind_off 2 195 0.0 0.0 fr 04_res 2 195 0.0 0.0 fr 05_nuclear 2 195 0.0 0.0 @@ -19898,8 +19898,8 @@ fr 06_coal 2 195 0.0 0.0 fr 07_gas 2 195 0.0 0.0 fr 08_non-res 2 195 0.0 0.0 fr 09_hydro_pump 2 195 0.0 0.0 -fr 01_solar 2 196 1.0 0.0 -fr 02_wind_on 2 196 1.0 0.0 +fr 01_solar 2 196 0.0 1.0 +fr 02_wind_on 2 196 0.0 1.0 fr 03_wind_off 2 196 0.0 0.0 fr 04_res 2 196 0.0 0.0 fr 05_nuclear 2 196 0.0 0.0 @@ -19907,8 +19907,8 @@ fr 06_coal 2 196 0.0 0.0 fr 07_gas 2 196 0.0 0.0 fr 08_non-res 2 196 0.0 0.0 fr 09_hydro_pump 2 196 0.0 0.0 -fr 01_solar 2 197 1.0 0.0 -fr 02_wind_on 2 197 1.0 0.0 +fr 01_solar 2 197 0.0 1.0 +fr 02_wind_on 2 197 0.0 1.0 fr 03_wind_off 2 197 0.0 0.0 fr 04_res 2 197 0.0 0.0 fr 05_nuclear 2 197 0.0 0.0 @@ -19916,8 +19916,8 @@ fr 06_coal 2 197 0.0 0.0 fr 07_gas 2 197 0.0 0.0 fr 08_non-res 2 197 0.0 0.0 fr 09_hydro_pump 2 197 0.0 0.0 -fr 01_solar 2 198 1.0 0.0 -fr 02_wind_on 2 198 1.0 0.0 +fr 01_solar 2 198 0.0 1.0 +fr 02_wind_on 2 198 0.0 1.0 fr 03_wind_off 2 198 0.0 0.0 fr 04_res 2 198 0.0 0.0 fr 05_nuclear 2 198 0.0 0.0 @@ -19925,8 +19925,8 @@ fr 06_coal 2 198 0.0 0.0 fr 07_gas 2 198 0.0 0.0 fr 08_non-res 2 198 0.0 0.0 fr 09_hydro_pump 2 198 0.0 0.0 -fr 01_solar 2 199 1.0 0.0 -fr 02_wind_on 2 199 1.0 0.0 +fr 01_solar 2 199 0.0 1.0 +fr 02_wind_on 2 199 0.0 1.0 fr 03_wind_off 2 199 0.0 0.0 fr 04_res 2 199 0.0 0.0 fr 05_nuclear 2 199 0.0 0.0 @@ -19934,8 +19934,8 @@ fr 06_coal 2 199 0.0 0.0 fr 07_gas 2 199 0.0 0.0 fr 08_non-res 2 199 0.0 0.0 fr 09_hydro_pump 2 199 0.0 0.0 -fr 01_solar 2 200 1.0 0.0 -fr 02_wind_on 2 200 1.0 0.0 +fr 01_solar 2 200 0.0 1.0 +fr 02_wind_on 2 200 0.0 1.0 fr 03_wind_off 2 200 0.0 0.0 fr 04_res 2 200 0.0 0.0 fr 05_nuclear 2 200 0.0 0.0 @@ -19943,8 +19943,8 @@ fr 06_coal 2 200 0.0 0.0 fr 07_gas 2 200 0.0 0.0 fr 08_non-res 2 200 0.0 0.0 fr 09_hydro_pump 2 200 0.0 0.0 -fr 01_solar 2 201 1.0 0.0 -fr 02_wind_on 2 201 1.0 0.0 +fr 01_solar 2 201 0.0 1.0 +fr 02_wind_on 2 201 0.0 1.0 fr 03_wind_off 2 201 0.0 0.0 fr 04_res 2 201 0.0 0.0 fr 05_nuclear 2 201 0.0 0.0 @@ -19952,8 +19952,8 @@ fr 06_coal 2 201 0.0 0.0 fr 07_gas 2 201 0.0 0.0 fr 08_non-res 2 201 0.0 0.0 fr 09_hydro_pump 2 201 0.0 0.0 -fr 01_solar 2 202 1.0 0.0 -fr 02_wind_on 2 202 1.0 0.0 +fr 01_solar 2 202 0.0 1.0 +fr 02_wind_on 2 202 0.0 1.0 fr 03_wind_off 2 202 0.0 0.0 fr 04_res 2 202 0.0 0.0 fr 05_nuclear 2 202 0.0 0.0 @@ -19961,8 +19961,8 @@ fr 06_coal 2 202 0.0 0.0 fr 07_gas 2 202 0.0 0.0 fr 08_non-res 2 202 0.0 0.0 fr 09_hydro_pump 2 202 0.0 0.0 -fr 01_solar 2 203 1.0 0.0 -fr 02_wind_on 2 203 1.0 0.0 +fr 01_solar 2 203 0.0 1.0 +fr 02_wind_on 2 203 0.0 1.0 fr 03_wind_off 2 203 0.0 0.0 fr 04_res 2 203 0.0 0.0 fr 05_nuclear 2 203 0.0 0.0 @@ -19970,8 +19970,8 @@ fr 06_coal 2 203 0.0 0.0 fr 07_gas 2 203 0.0 0.0 fr 08_non-res 2 203 0.0 0.0 fr 09_hydro_pump 2 203 0.0 0.0 -fr 01_solar 2 204 1.0 0.0 -fr 02_wind_on 2 204 1.0 0.0 +fr 01_solar 2 204 0.0 1.0 +fr 02_wind_on 2 204 0.0 1.0 fr 03_wind_off 2 204 0.0 0.0 fr 04_res 2 204 0.0 0.0 fr 05_nuclear 2 204 0.0 0.0 @@ -19979,8 +19979,8 @@ fr 06_coal 2 204 0.0 0.0 fr 07_gas 2 204 0.0 0.0 fr 08_non-res 2 204 0.0 0.0 fr 09_hydro_pump 2 204 0.0 0.0 -fr 01_solar 2 205 1.0 0.0 -fr 02_wind_on 2 205 1.0 0.0 +fr 01_solar 2 205 0.0 1.0 +fr 02_wind_on 2 205 0.0 1.0 fr 03_wind_off 2 205 0.0 0.0 fr 04_res 2 205 0.0 0.0 fr 05_nuclear 2 205 0.0 0.0 @@ -19988,8 +19988,8 @@ fr 06_coal 2 205 0.0 0.0 fr 07_gas 2 205 0.0 0.0 fr 08_non-res 2 205 0.0 0.0 fr 09_hydro_pump 2 205 0.0 0.0 -fr 01_solar 2 206 1.0 0.0 -fr 02_wind_on 2 206 1.0 0.0 +fr 01_solar 2 206 0.0 1.0 +fr 02_wind_on 2 206 0.0 1.0 fr 03_wind_off 2 206 0.0 0.0 fr 04_res 2 206 0.0 0.0 fr 05_nuclear 2 206 0.0 0.0 @@ -19997,8 +19997,8 @@ fr 06_coal 2 206 0.0 0.0 fr 07_gas 2 206 0.0 0.0 fr 08_non-res 2 206 0.0 0.0 fr 09_hydro_pump 2 206 0.0 0.0 -fr 01_solar 2 207 1.0 0.0 -fr 02_wind_on 2 207 1.0 0.0 +fr 01_solar 2 207 0.0 1.0 +fr 02_wind_on 2 207 0.0 1.0 fr 03_wind_off 2 207 0.0 0.0 fr 04_res 2 207 0.0 0.0 fr 05_nuclear 2 207 0.0 0.0 @@ -20006,8 +20006,8 @@ fr 06_coal 2 207 0.0 0.0 fr 07_gas 2 207 0.0 0.0 fr 08_non-res 2 207 0.0 0.0 fr 09_hydro_pump 2 207 0.0 0.0 -fr 01_solar 2 208 1.0 0.0 -fr 02_wind_on 2 208 1.0 0.0 +fr 01_solar 2 208 0.0 1.0 +fr 02_wind_on 2 208 0.0 1.0 fr 03_wind_off 2 208 0.0 0.0 fr 04_res 2 208 0.0 0.0 fr 05_nuclear 2 208 0.0 0.0 @@ -20015,8 +20015,8 @@ fr 06_coal 2 208 0.0 0.0 fr 07_gas 2 208 0.0 0.0 fr 08_non-res 2 208 0.0 0.0 fr 09_hydro_pump 2 208 0.0 0.0 -fr 01_solar 2 209 1.0 0.0 -fr 02_wind_on 2 209 1.0 0.0 +fr 01_solar 2 209 0.0 1.0 +fr 02_wind_on 2 209 0.0 1.0 fr 03_wind_off 2 209 0.0 0.0 fr 04_res 2 209 0.0 0.0 fr 05_nuclear 2 209 0.0 0.0 @@ -20024,1149 +20024,1149 @@ fr 06_coal 2 209 0.0 0.0 fr 07_gas 2 209 0.0 0.0 fr 08_non-res 2 209 0.0 0.0 fr 09_hydro_pump 2 209 0.0 0.0 -fr 01_solar 2 210 1.0 0.0 -fr 02_wind_on 2 210 1.0 0.0 -fr 03_wind_off 2 210 1.0 0.0 +fr 01_solar 2 210 0.0 1.0 +fr 02_wind_on 2 210 0.0 1.0 +fr 03_wind_off 2 210 0.0 1.0 fr 04_res 2 210 0.0 0.0 fr 05_nuclear 2 210 0.0 0.0 fr 06_coal 2 210 0.0 0.0 fr 07_gas 2 210 0.0 0.0 fr 08_non-res 2 210 0.0 0.0 fr 09_hydro_pump 2 210 0.0 0.0 -fr 01_solar 2 211 1.0 0.0 -fr 02_wind_on 2 211 1.0 0.0 -fr 03_wind_off 2 211 1.0 0.0 +fr 01_solar 2 211 0.0 1.0 +fr 02_wind_on 2 211 0.0 1.0 +fr 03_wind_off 2 211 0.0 1.0 fr 04_res 2 211 0.0 0.0 fr 05_nuclear 2 211 0.0 0.0 fr 06_coal 2 211 0.0 0.0 fr 07_gas 2 211 0.0 0.0 fr 08_non-res 2 211 0.0 0.0 fr 09_hydro_pump 2 211 0.0 0.0 -fr 01_solar 2 212 1.0 0.0 -fr 02_wind_on 2 212 1.0 0.0 -fr 03_wind_off 2 212 1.0 0.0 +fr 01_solar 2 212 0.0 1.0 +fr 02_wind_on 2 212 0.0 1.0 +fr 03_wind_off 2 212 0.0 1.0 fr 04_res 2 212 0.0 0.0 fr 05_nuclear 2 212 0.0 0.0 fr 06_coal 2 212 0.0 0.0 fr 07_gas 2 212 0.0 0.0 fr 08_non-res 2 212 0.0 0.0 fr 09_hydro_pump 2 212 0.0 0.0 -fr 01_solar 2 213 1.0 0.0 -fr 02_wind_on 2 213 1.0 0.0 -fr 03_wind_off 2 213 1.0 0.0 +fr 01_solar 2 213 0.0 1.0 +fr 02_wind_on 2 213 0.0 1.0 +fr 03_wind_off 2 213 0.0 1.0 fr 04_res 2 213 0.0 0.0 fr 05_nuclear 2 213 0.0 0.0 fr 06_coal 2 213 0.0 0.0 fr 07_gas 2 213 0.0 0.0 fr 08_non-res 2 213 0.0 0.0 fr 09_hydro_pump 2 213 0.0 0.0 -fr 01_solar 2 214 1.0 0.0 -fr 02_wind_on 2 214 1.0 0.0 -fr 03_wind_off 2 214 1.0 0.0 +fr 01_solar 2 214 0.0 1.0 +fr 02_wind_on 2 214 0.0 1.0 +fr 03_wind_off 2 214 0.0 1.0 fr 04_res 2 214 0.0 0.0 fr 05_nuclear 2 214 0.0 0.0 fr 06_coal 2 214 0.0 0.0 fr 07_gas 2 214 0.0 0.0 fr 08_non-res 2 214 0.0 0.0 fr 09_hydro_pump 2 214 0.0 0.0 -fr 01_solar 2 215 1.0 0.0 -fr 02_wind_on 2 215 1.0 0.0 -fr 03_wind_off 2 215 1.0 0.0 +fr 01_solar 2 215 0.0 1.0 +fr 02_wind_on 2 215 0.0 1.0 +fr 03_wind_off 2 215 0.0 1.0 fr 04_res 2 215 0.0 0.0 fr 05_nuclear 2 215 0.0 0.0 fr 06_coal 2 215 0.0 0.0 fr 07_gas 2 215 0.0 0.0 fr 08_non-res 2 215 0.0 0.0 fr 09_hydro_pump 2 215 0.0 0.0 -fr 01_solar 2 216 1.0 0.0 -fr 02_wind_on 2 216 1.0 0.0 -fr 03_wind_off 2 216 1.0 0.0 +fr 01_solar 2 216 0.0 1.0 +fr 02_wind_on 2 216 0.0 1.0 +fr 03_wind_off 2 216 0.0 1.0 fr 04_res 2 216 0.0 0.0 fr 05_nuclear 2 216 0.0 0.0 fr 06_coal 2 216 0.0 0.0 fr 07_gas 2 216 0.0 0.0 fr 08_non-res 2 216 0.0 0.0 fr 09_hydro_pump 2 216 0.0 0.0 -fr 01_solar 2 217 1.0 0.0 -fr 02_wind_on 2 217 1.0 0.0 -fr 03_wind_off 2 217 1.0 0.0 +fr 01_solar 2 217 0.0 1.0 +fr 02_wind_on 2 217 0.0 1.0 +fr 03_wind_off 2 217 0.0 1.0 fr 04_res 2 217 0.0 0.0 fr 05_nuclear 2 217 0.0 0.0 fr 06_coal 2 217 0.0 0.0 fr 07_gas 2 217 0.0 0.0 fr 08_non-res 2 217 0.0 0.0 fr 09_hydro_pump 2 217 0.0 0.0 -fr 01_solar 2 218 1.0 0.0 -fr 02_wind_on 2 218 1.0 0.0 -fr 03_wind_off 2 218 1.0 0.0 +fr 01_solar 2 218 0.0 1.0 +fr 02_wind_on 2 218 0.0 1.0 +fr 03_wind_off 2 218 0.0 1.0 fr 04_res 2 218 0.0 0.0 fr 05_nuclear 2 218 0.0 0.0 fr 06_coal 2 218 0.0 0.0 fr 07_gas 2 218 0.0 0.0 fr 08_non-res 2 218 0.0 0.0 fr 09_hydro_pump 2 218 0.0 0.0 -fr 01_solar 2 219 1.0 0.0 -fr 02_wind_on 2 219 1.0 0.0 -fr 03_wind_off 2 219 1.0 0.0 +fr 01_solar 2 219 0.0 1.0 +fr 02_wind_on 2 219 0.0 1.0 +fr 03_wind_off 2 219 0.0 1.0 fr 04_res 2 219 0.0 0.0 fr 05_nuclear 2 219 0.0 0.0 fr 06_coal 2 219 0.0 0.0 fr 07_gas 2 219 0.0 0.0 fr 08_non-res 2 219 0.0 0.0 fr 09_hydro_pump 2 219 0.0 0.0 -fr 01_solar 2 220 1.0 0.0 -fr 02_wind_on 2 220 1.0 0.0 -fr 03_wind_off 2 220 1.0 0.0 +fr 01_solar 2 220 0.0 1.0 +fr 02_wind_on 2 220 0.0 1.0 +fr 03_wind_off 2 220 0.0 1.0 fr 04_res 2 220 0.0 0.0 fr 05_nuclear 2 220 0.0 0.0 fr 06_coal 2 220 0.0 0.0 fr 07_gas 2 220 0.0 0.0 fr 08_non-res 2 220 0.0 0.0 fr 09_hydro_pump 2 220 0.0 0.0 -fr 01_solar 2 221 1.0 0.0 -fr 02_wind_on 2 221 1.0 0.0 -fr 03_wind_off 2 221 1.0 0.0 +fr 01_solar 2 221 0.0 1.0 +fr 02_wind_on 2 221 0.0 1.0 +fr 03_wind_off 2 221 0.0 1.0 fr 04_res 2 221 0.0 0.0 fr 05_nuclear 2 221 0.0 0.0 fr 06_coal 2 221 0.0 0.0 fr 07_gas 2 221 0.0 0.0 fr 08_non-res 2 221 0.0 0.0 fr 09_hydro_pump 2 221 0.0 0.0 -fr 01_solar 2 222 1.0 0.0 -fr 02_wind_on 2 222 1.0 0.0 -fr 03_wind_off 2 222 1.0 0.0 +fr 01_solar 2 222 0.0 1.0 +fr 02_wind_on 2 222 0.0 1.0 +fr 03_wind_off 2 222 0.0 1.0 fr 04_res 2 222 0.0 0.0 fr 05_nuclear 2 222 0.0 0.0 fr 06_coal 2 222 0.0 0.0 fr 07_gas 2 222 0.0 0.0 fr 08_non-res 2 222 0.0 0.0 fr 09_hydro_pump 2 222 0.0 0.0 -fr 01_solar 2 223 1.0 0.0 -fr 02_wind_on 2 223 1.0 0.0 -fr 03_wind_off 2 223 1.0 0.0 +fr 01_solar 2 223 0.0 1.0 +fr 02_wind_on 2 223 0.0 1.0 +fr 03_wind_off 2 223 0.0 1.0 fr 04_res 2 223 0.0 0.0 fr 05_nuclear 2 223 0.0 0.0 fr 06_coal 2 223 0.0 0.0 fr 07_gas 2 223 0.0 0.0 fr 08_non-res 2 223 0.0 0.0 fr 09_hydro_pump 2 223 0.0 0.0 -fr 01_solar 2 224 1.0 0.0 -fr 02_wind_on 2 224 1.0 0.0 -fr 03_wind_off 2 224 1.0 0.0 +fr 01_solar 2 224 0.0 1.0 +fr 02_wind_on 2 224 0.0 1.0 +fr 03_wind_off 2 224 0.0 1.0 fr 04_res 2 224 0.0 0.0 fr 05_nuclear 2 224 0.0 0.0 fr 06_coal 2 224 0.0 0.0 fr 07_gas 2 224 0.0 0.0 fr 08_non-res 2 224 0.0 0.0 fr 09_hydro_pump 2 224 0.0 0.0 -fr 01_solar 2 225 1.0 0.0 -fr 02_wind_on 2 225 1.0 0.0 -fr 03_wind_off 2 225 1.0 0.0 +fr 01_solar 2 225 0.0 1.0 +fr 02_wind_on 2 225 0.0 1.0 +fr 03_wind_off 2 225 0.0 1.0 fr 04_res 2 225 0.0 0.0 fr 05_nuclear 2 225 0.0 0.0 fr 06_coal 2 225 0.0 0.0 fr 07_gas 2 225 0.0 0.0 fr 08_non-res 2 225 0.0 0.0 fr 09_hydro_pump 2 225 0.0 0.0 -fr 01_solar 2 226 1.0 0.0 -fr 02_wind_on 2 226 1.0 0.0 -fr 03_wind_off 2 226 1.0 0.0 +fr 01_solar 2 226 0.0 1.0 +fr 02_wind_on 2 226 0.0 1.0 +fr 03_wind_off 2 226 0.0 1.0 fr 04_res 2 226 0.0 0.0 fr 05_nuclear 2 226 0.0 0.0 fr 06_coal 2 226 0.0 0.0 fr 07_gas 2 226 0.0 0.0 fr 08_non-res 2 226 0.0 0.0 fr 09_hydro_pump 2 226 0.0 0.0 -fr 01_solar 2 227 1.0 0.0 -fr 02_wind_on 2 227 1.0 0.0 -fr 03_wind_off 2 227 1.0 0.0 +fr 01_solar 2 227 0.0 1.0 +fr 02_wind_on 2 227 0.0 1.0 +fr 03_wind_off 2 227 0.0 1.0 fr 04_res 2 227 0.0 0.0 fr 05_nuclear 2 227 0.0 0.0 fr 06_coal 2 227 0.0 0.0 fr 07_gas 2 227 0.0 0.0 fr 08_non-res 2 227 0.0 0.0 fr 09_hydro_pump 2 227 0.0 0.0 -fr 01_solar 2 228 1.0 0.0 -fr 02_wind_on 2 228 1.0 0.0 -fr 03_wind_off 2 228 1.0 0.0 +fr 01_solar 2 228 0.0 1.0 +fr 02_wind_on 2 228 0.0 1.0 +fr 03_wind_off 2 228 0.0 1.0 fr 04_res 2 228 0.0 0.0 fr 05_nuclear 2 228 0.0 0.0 fr 06_coal 2 228 0.0 0.0 fr 07_gas 2 228 0.0 0.0 fr 08_non-res 2 228 0.0 0.0 fr 09_hydro_pump 2 228 0.0 0.0 -fr 01_solar 2 229 1.0 0.0 -fr 02_wind_on 2 229 1.0 0.0 -fr 03_wind_off 2 229 1.0 0.0 +fr 01_solar 2 229 0.0 1.0 +fr 02_wind_on 2 229 0.0 1.0 +fr 03_wind_off 2 229 0.0 1.0 fr 04_res 2 229 0.0 0.0 fr 05_nuclear 2 229 0.0 0.0 fr 06_coal 2 229 0.0 0.0 fr 07_gas 2 229 0.0 0.0 fr 08_non-res 2 229 0.0 0.0 fr 09_hydro_pump 2 229 0.0 0.0 -fr 01_solar 2 230 1.0 0.0 -fr 02_wind_on 2 230 1.0 0.0 -fr 03_wind_off 2 230 1.0 0.0 -fr 04_res 2 230 1.0 0.0 +fr 01_solar 2 230 0.0 1.0 +fr 02_wind_on 2 230 0.0 1.0 +fr 03_wind_off 2 230 0.0 1.0 +fr 04_res 2 230 0.0 1.0 fr 05_nuclear 2 230 0.0 0.0 fr 06_coal 2 230 0.0 0.0 fr 07_gas 2 230 0.0 0.0 fr 08_non-res 2 230 0.0 0.0 fr 09_hydro_pump 2 230 0.0 0.0 -fr 01_solar 2 231 1.0 0.0 -fr 02_wind_on 2 231 1.0 0.0 -fr 03_wind_off 2 231 1.0 0.0 -fr 04_res 2 231 1.0 0.0 +fr 01_solar 2 231 0.0 1.0 +fr 02_wind_on 2 231 0.0 1.0 +fr 03_wind_off 2 231 0.0 1.0 +fr 04_res 2 231 0.0 1.0 fr 05_nuclear 2 231 0.0 0.0 fr 06_coal 2 231 0.0 0.0 fr 07_gas 2 231 0.0 0.0 fr 08_non-res 2 231 0.0 0.0 fr 09_hydro_pump 2 231 0.0 0.0 -fr 01_solar 2 232 1.0 0.0 -fr 02_wind_on 2 232 1.0 0.0 -fr 03_wind_off 2 232 1.0 0.0 -fr 04_res 2 232 1.0 0.0 +fr 01_solar 2 232 0.0 1.0 +fr 02_wind_on 2 232 0.0 1.0 +fr 03_wind_off 2 232 0.0 1.0 +fr 04_res 2 232 0.0 1.0 fr 05_nuclear 2 232 0.0 0.0 fr 06_coal 2 232 0.0 0.0 fr 07_gas 2 232 0.0 0.0 fr 08_non-res 2 232 0.0 0.0 fr 09_hydro_pump 2 232 0.0 0.0 -fr 01_solar 2 233 1.0 0.0 -fr 02_wind_on 2 233 1.0 0.0 -fr 03_wind_off 2 233 1.0 0.0 -fr 04_res 2 233 1.0 0.0 +fr 01_solar 2 233 0.0 1.0 +fr 02_wind_on 2 233 0.0 1.0 +fr 03_wind_off 2 233 0.0 1.0 +fr 04_res 2 233 0.0 1.0 fr 05_nuclear 2 233 0.0 0.0 fr 06_coal 2 233 0.0 0.0 fr 07_gas 2 233 0.0 0.0 fr 08_non-res 2 233 0.0 0.0 fr 09_hydro_pump 2 233 0.0 0.0 -fr 01_solar 2 234 1.0 0.0 -fr 02_wind_on 2 234 1.0 0.0 -fr 03_wind_off 2 234 1.0 0.0 -fr 04_res 2 234 1.0 0.0 +fr 01_solar 2 234 0.0 1.0 +fr 02_wind_on 2 234 0.0 1.0 +fr 03_wind_off 2 234 0.0 1.0 +fr 04_res 2 234 0.0 1.0 fr 05_nuclear 2 234 0.0 0.0 fr 06_coal 2 234 0.0 0.0 fr 07_gas 2 234 0.0 0.0 fr 08_non-res 2 234 0.0 0.0 fr 09_hydro_pump 2 234 0.0 0.0 -fr 01_solar 2 235 1.0 0.0 -fr 02_wind_on 2 235 1.0 0.0 -fr 03_wind_off 2 235 1.0 0.0 -fr 04_res 2 235 1.0 0.0 +fr 01_solar 2 235 0.0 1.0 +fr 02_wind_on 2 235 0.0 1.0 +fr 03_wind_off 2 235 0.0 1.0 +fr 04_res 2 235 0.0 1.0 fr 05_nuclear 2 235 0.0 0.0 fr 06_coal 2 235 0.0 0.0 fr 07_gas 2 235 0.0 0.0 fr 08_non-res 2 235 0.0 0.0 fr 09_hydro_pump 2 235 0.0 0.0 -fr 01_solar 2 236 1.0 0.0 -fr 02_wind_on 2 236 1.0 0.0 -fr 03_wind_off 2 236 1.0 0.0 -fr 04_res 2 236 1.0 0.0 +fr 01_solar 2 236 0.0 1.0 +fr 02_wind_on 2 236 0.0 1.0 +fr 03_wind_off 2 236 0.0 1.0 +fr 04_res 2 236 0.0 1.0 fr 05_nuclear 2 236 0.0 0.0 fr 06_coal 2 236 0.0 0.0 fr 07_gas 2 236 0.0 0.0 fr 08_non-res 2 236 0.0 0.0 fr 09_hydro_pump 2 236 0.0 0.0 -fr 01_solar 2 237 1.0 0.0 -fr 02_wind_on 2 237 1.0 0.0 -fr 03_wind_off 2 237 1.0 0.0 -fr 04_res 2 237 1.0 0.0 +fr 01_solar 2 237 0.0 1.0 +fr 02_wind_on 2 237 0.0 1.0 +fr 03_wind_off 2 237 0.0 1.0 +fr 04_res 2 237 0.0 1.0 fr 05_nuclear 2 237 0.0 0.0 fr 06_coal 2 237 0.0 0.0 fr 07_gas 2 237 0.0 0.0 fr 08_non-res 2 237 0.0 0.0 fr 09_hydro_pump 2 237 0.0 0.0 -fr 01_solar 2 238 1.0 0.0 -fr 02_wind_on 2 238 1.0 0.0 -fr 03_wind_off 2 238 1.0 0.0 -fr 04_res 2 238 1.0 0.0 +fr 01_solar 2 238 0.0 1.0 +fr 02_wind_on 2 238 0.0 1.0 +fr 03_wind_off 2 238 0.0 1.0 +fr 04_res 2 238 0.0 1.0 fr 05_nuclear 2 238 0.0 0.0 fr 06_coal 2 238 0.0 0.0 fr 07_gas 2 238 0.0 0.0 fr 08_non-res 2 238 0.0 0.0 fr 09_hydro_pump 2 238 0.0 0.0 -fr 01_solar 2 239 1.0 0.0 -fr 02_wind_on 2 239 1.0 0.0 -fr 03_wind_off 2 239 1.0 0.0 -fr 04_res 2 239 1.0 0.0 +fr 01_solar 2 239 0.0 1.0 +fr 02_wind_on 2 239 0.0 1.0 +fr 03_wind_off 2 239 0.0 1.0 +fr 04_res 2 239 0.0 1.0 fr 05_nuclear 2 239 0.0 0.0 fr 06_coal 2 239 0.0 0.0 fr 07_gas 2 239 0.0 0.0 fr 08_non-res 2 239 0.0 0.0 fr 09_hydro_pump 2 239 0.0 0.0 -fr 01_solar 2 240 1.0 0.0 -fr 02_wind_on 2 240 1.0 0.0 -fr 03_wind_off 2 240 1.0 0.0 -fr 04_res 2 240 1.0 0.0 +fr 01_solar 2 240 0.0 1.0 +fr 02_wind_on 2 240 0.0 1.0 +fr 03_wind_off 2 240 0.0 1.0 +fr 04_res 2 240 0.0 1.0 fr 05_nuclear 2 240 0.0 0.0 fr 06_coal 2 240 0.0 0.0 fr 07_gas 2 240 0.0 0.0 fr 08_non-res 2 240 0.0 0.0 fr 09_hydro_pump 2 240 0.0 0.0 -fr 01_solar 2 241 1.0 0.0 -fr 02_wind_on 2 241 1.0 0.0 -fr 03_wind_off 2 241 1.0 0.0 -fr 04_res 2 241 1.0 0.0 +fr 01_solar 2 241 0.0 1.0 +fr 02_wind_on 2 241 0.0 1.0 +fr 03_wind_off 2 241 0.0 1.0 +fr 04_res 2 241 0.0 1.0 fr 05_nuclear 2 241 0.0 0.0 fr 06_coal 2 241 0.0 0.0 fr 07_gas 2 241 0.0 0.0 fr 08_non-res 2 241 0.0 0.0 fr 09_hydro_pump 2 241 0.0 0.0 -fr 01_solar 2 242 1.0 0.0 -fr 02_wind_on 2 242 1.0 0.0 -fr 03_wind_off 2 242 1.0 0.0 -fr 04_res 2 242 1.0 0.0 +fr 01_solar 2 242 0.0 1.0 +fr 02_wind_on 2 242 0.0 1.0 +fr 03_wind_off 2 242 0.0 1.0 +fr 04_res 2 242 0.0 1.0 fr 05_nuclear 2 242 0.0 0.0 fr 06_coal 2 242 0.0 0.0 fr 07_gas 2 242 0.0 0.0 fr 08_non-res 2 242 0.0 0.0 fr 09_hydro_pump 2 242 0.0 0.0 -fr 01_solar 2 243 1.0 0.0 -fr 02_wind_on 2 243 1.0 0.0 -fr 03_wind_off 2 243 1.0 0.0 -fr 04_res 2 243 1.0 0.0 +fr 01_solar 2 243 0.0 1.0 +fr 02_wind_on 2 243 0.0 1.0 +fr 03_wind_off 2 243 0.0 1.0 +fr 04_res 2 243 0.0 1.0 fr 05_nuclear 2 243 0.0 0.0 fr 06_coal 2 243 0.0 0.0 fr 07_gas 2 243 0.0 0.0 fr 08_non-res 2 243 0.0 0.0 fr 09_hydro_pump 2 243 0.0 0.0 -fr 01_solar 2 244 1.0 0.0 -fr 02_wind_on 2 244 1.0 0.0 -fr 03_wind_off 2 244 1.0 0.0 -fr 04_res 2 244 1.0 0.0 +fr 01_solar 2 244 0.0 1.0 +fr 02_wind_on 2 244 0.0 1.0 +fr 03_wind_off 2 244 0.0 1.0 +fr 04_res 2 244 0.0 1.0 fr 05_nuclear 2 244 0.0 0.0 fr 06_coal 2 244 0.0 0.0 fr 07_gas 2 244 0.0 0.0 fr 08_non-res 2 244 0.0 0.0 fr 09_hydro_pump 2 244 0.0 0.0 -fr 01_solar 2 245 1.0 0.0 -fr 02_wind_on 2 245 1.0 0.0 -fr 03_wind_off 2 245 1.0 0.0 -fr 04_res 2 245 1.0 0.0 +fr 01_solar 2 245 0.0 1.0 +fr 02_wind_on 2 245 0.0 1.0 +fr 03_wind_off 2 245 0.0 1.0 +fr 04_res 2 245 0.0 1.0 fr 05_nuclear 2 245 0.0 0.0 fr 06_coal 2 245 0.0 0.0 fr 07_gas 2 245 0.0 0.0 fr 08_non-res 2 245 0.0 0.0 fr 09_hydro_pump 2 245 0.0 0.0 -fr 01_solar 2 246 1.0 0.0 -fr 02_wind_on 2 246 1.0 0.0 -fr 03_wind_off 2 246 1.0 0.0 -fr 04_res 2 246 1.0 0.0 +fr 01_solar 2 246 0.0 1.0 +fr 02_wind_on 2 246 0.0 1.0 +fr 03_wind_off 2 246 0.0 1.0 +fr 04_res 2 246 0.0 1.0 fr 05_nuclear 2 246 0.0 0.0 fr 06_coal 2 246 0.0 0.0 fr 07_gas 2 246 0.0 0.0 fr 08_non-res 2 246 0.0 0.0 fr 09_hydro_pump 2 246 0.0 0.0 -fr 01_solar 2 247 1.0 0.0 -fr 02_wind_on 2 247 1.0 0.0 -fr 03_wind_off 2 247 1.0 0.0 -fr 04_res 2 247 1.0 0.0 +fr 01_solar 2 247 0.0 1.0 +fr 02_wind_on 2 247 0.0 1.0 +fr 03_wind_off 2 247 0.0 1.0 +fr 04_res 2 247 0.0 1.0 fr 05_nuclear 2 247 0.0 0.0 fr 06_coal 2 247 0.0 0.0 fr 07_gas 2 247 0.0 0.0 fr 08_non-res 2 247 0.0 0.0 fr 09_hydro_pump 2 247 0.0 0.0 -fr 01_solar 2 248 1.0 0.0 -fr 02_wind_on 2 248 1.0 0.0 -fr 03_wind_off 2 248 1.0 0.0 -fr 04_res 2 248 1.0 0.0 +fr 01_solar 2 248 0.0 1.0 +fr 02_wind_on 2 248 0.0 1.0 +fr 03_wind_off 2 248 0.0 1.0 +fr 04_res 2 248 0.0 1.0 fr 05_nuclear 2 248 0.0 0.0 fr 06_coal 2 248 0.0 0.0 fr 07_gas 2 248 0.0 0.0 fr 08_non-res 2 248 0.0 0.0 fr 09_hydro_pump 2 248 0.0 0.0 -fr 01_solar 2 249 1.0 0.0 -fr 02_wind_on 2 249 1.0 0.0 -fr 03_wind_off 2 249 1.0 0.0 -fr 04_res 2 249 1.0 0.0 +fr 01_solar 2 249 0.0 1.0 +fr 02_wind_on 2 249 0.0 1.0 +fr 03_wind_off 2 249 0.0 1.0 +fr 04_res 2 249 0.0 1.0 fr 05_nuclear 2 249 0.0 0.0 fr 06_coal 2 249 0.0 0.0 fr 07_gas 2 249 0.0 0.0 fr 08_non-res 2 249 0.0 0.0 fr 09_hydro_pump 2 249 0.0 0.0 -fr 01_solar 2 250 1.0 0.0 -fr 02_wind_on 2 250 1.0 0.0 -fr 03_wind_off 2 250 1.0 0.0 -fr 04_res 2 250 1.0 0.0 -fr 05_nuclear 2 250 1.0 0.0 +fr 01_solar 2 250 0.0 1.0 +fr 02_wind_on 2 250 0.0 1.0 +fr 03_wind_off 2 250 0.0 1.0 +fr 04_res 2 250 0.0 1.0 +fr 05_nuclear 2 250 0.0 1.0 fr 06_coal 2 250 0.0 0.0 fr 07_gas 2 250 0.0 0.0 fr 08_non-res 2 250 0.0 0.0 fr 09_hydro_pump 2 250 0.0 0.0 -fr 01_solar 2 251 1.0 0.0 -fr 02_wind_on 2 251 1.0 0.0 -fr 03_wind_off 2 251 1.0 0.0 -fr 04_res 2 251 1.0 0.0 -fr 05_nuclear 2 251 1.0 0.0 +fr 01_solar 2 251 0.0 1.0 +fr 02_wind_on 2 251 0.0 1.0 +fr 03_wind_off 2 251 0.0 1.0 +fr 04_res 2 251 0.0 1.0 +fr 05_nuclear 2 251 0.0 1.0 fr 06_coal 2 251 0.0 0.0 fr 07_gas 2 251 0.0 0.0 fr 08_non-res 2 251 0.0 0.0 fr 09_hydro_pump 2 251 0.0 0.0 -fr 01_solar 2 252 1.0 0.0 -fr 02_wind_on 2 252 1.0 0.0 -fr 03_wind_off 2 252 1.0 0.0 -fr 04_res 2 252 1.0 0.0 -fr 05_nuclear 2 252 1.0 0.0 +fr 01_solar 2 252 0.0 1.0 +fr 02_wind_on 2 252 0.0 1.0 +fr 03_wind_off 2 252 0.0 1.0 +fr 04_res 2 252 0.0 1.0 +fr 05_nuclear 2 252 0.0 1.0 fr 06_coal 2 252 0.0 0.0 fr 07_gas 2 252 0.0 0.0 fr 08_non-res 2 252 0.0 0.0 fr 09_hydro_pump 2 252 0.0 0.0 -fr 01_solar 2 253 1.0 0.0 -fr 02_wind_on 2 253 1.0 0.0 -fr 03_wind_off 2 253 1.0 0.0 -fr 04_res 2 253 1.0 0.0 -fr 05_nuclear 2 253 1.0 0.0 +fr 01_solar 2 253 0.0 1.0 +fr 02_wind_on 2 253 0.0 1.0 +fr 03_wind_off 2 253 0.0 1.0 +fr 04_res 2 253 0.0 1.0 +fr 05_nuclear 2 253 0.0 1.0 fr 06_coal 2 253 0.0 0.0 fr 07_gas 2 253 0.0 0.0 fr 08_non-res 2 253 0.0 0.0 fr 09_hydro_pump 2 253 0.0 0.0 -fr 01_solar 2 254 1.0 0.0 -fr 02_wind_on 2 254 1.0 0.0 -fr 03_wind_off 2 254 1.0 0.0 -fr 04_res 2 254 1.0 0.0 -fr 05_nuclear 2 254 1.0 0.0 +fr 01_solar 2 254 0.0 1.0 +fr 02_wind_on 2 254 0.0 1.0 +fr 03_wind_off 2 254 0.0 1.0 +fr 04_res 2 254 0.0 1.0 +fr 05_nuclear 2 254 0.0 1.0 fr 06_coal 2 254 0.0 0.0 fr 07_gas 2 254 0.0 0.0 fr 08_non-res 2 254 0.0 0.0 fr 09_hydro_pump 2 254 0.0 0.0 -fr 01_solar 2 255 1.0 0.0 -fr 02_wind_on 2 255 1.0 0.0 -fr 03_wind_off 2 255 1.0 0.0 -fr 04_res 2 255 1.0 0.0 -fr 05_nuclear 2 255 1.0 0.0 +fr 01_solar 2 255 0.0 1.0 +fr 02_wind_on 2 255 0.0 1.0 +fr 03_wind_off 2 255 0.0 1.0 +fr 04_res 2 255 0.0 1.0 +fr 05_nuclear 2 255 0.0 1.0 fr 06_coal 2 255 0.0 0.0 fr 07_gas 2 255 0.0 0.0 fr 08_non-res 2 255 0.0 0.0 fr 09_hydro_pump 2 255 0.0 0.0 -fr 01_solar 2 256 1.0 0.0 -fr 02_wind_on 2 256 1.0 0.0 -fr 03_wind_off 2 256 1.0 0.0 -fr 04_res 2 256 1.0 0.0 -fr 05_nuclear 2 256 1.0 0.0 +fr 01_solar 2 256 0.0 1.0 +fr 02_wind_on 2 256 0.0 1.0 +fr 03_wind_off 2 256 0.0 1.0 +fr 04_res 2 256 0.0 1.0 +fr 05_nuclear 2 256 0.0 1.0 fr 06_coal 2 256 0.0 0.0 fr 07_gas 2 256 0.0 0.0 fr 08_non-res 2 256 0.0 0.0 fr 09_hydro_pump 2 256 0.0 0.0 -fr 01_solar 2 257 1.0 0.0 -fr 02_wind_on 2 257 1.0 0.0 -fr 03_wind_off 2 257 1.0 0.0 -fr 04_res 2 257 1.0 0.0 -fr 05_nuclear 2 257 1.0 0.0 +fr 01_solar 2 257 0.0 1.0 +fr 02_wind_on 2 257 0.0 1.0 +fr 03_wind_off 2 257 0.0 1.0 +fr 04_res 2 257 0.0 1.0 +fr 05_nuclear 2 257 0.0 1.0 fr 06_coal 2 257 0.0 0.0 fr 07_gas 2 257 0.0 0.0 fr 08_non-res 2 257 0.0 0.0 fr 09_hydro_pump 2 257 0.0 0.0 -fr 01_solar 2 258 1.0 0.0 -fr 02_wind_on 2 258 1.0 0.0 -fr 03_wind_off 2 258 1.0 0.0 -fr 04_res 2 258 1.0 0.0 -fr 05_nuclear 2 258 1.0 0.0 +fr 01_solar 2 258 0.0 1.0 +fr 02_wind_on 2 258 0.0 1.0 +fr 03_wind_off 2 258 0.0 1.0 +fr 04_res 2 258 0.0 1.0 +fr 05_nuclear 2 258 0.0 1.0 fr 06_coal 2 258 0.0 0.0 fr 07_gas 2 258 0.0 0.0 fr 08_non-res 2 258 0.0 0.0 fr 09_hydro_pump 2 258 0.0 0.0 -fr 01_solar 2 259 1.0 0.0 -fr 02_wind_on 2 259 1.0 0.0 -fr 03_wind_off 2 259 1.0 0.0 -fr 04_res 2 259 1.0 0.0 -fr 05_nuclear 2 259 1.0 0.0 +fr 01_solar 2 259 0.0 1.0 +fr 02_wind_on 2 259 0.0 1.0 +fr 03_wind_off 2 259 0.0 1.0 +fr 04_res 2 259 0.0 1.0 +fr 05_nuclear 2 259 0.0 1.0 fr 06_coal 2 259 0.0 0.0 fr 07_gas 2 259 0.0 0.0 fr 08_non-res 2 259 0.0 0.0 fr 09_hydro_pump 2 259 0.0 0.0 -fr 01_solar 2 260 1.0 0.0 -fr 02_wind_on 2 260 1.0 0.0 -fr 03_wind_off 2 260 1.0 0.0 -fr 04_res 2 260 1.0 0.0 -fr 05_nuclear 2 260 1.0 0.0 +fr 01_solar 2 260 0.0 1.0 +fr 02_wind_on 2 260 0.0 1.0 +fr 03_wind_off 2 260 0.0 1.0 +fr 04_res 2 260 0.0 1.0 +fr 05_nuclear 2 260 0.0 1.0 fr 06_coal 2 260 0.0 0.0 fr 07_gas 2 260 0.0 0.0 fr 08_non-res 2 260 0.0 0.0 fr 09_hydro_pump 2 260 0.0 0.0 -fr 01_solar 2 261 1.0 0.0 -fr 02_wind_on 2 261 1.0 0.0 -fr 03_wind_off 2 261 1.0 0.0 -fr 04_res 2 261 1.0 0.0 -fr 05_nuclear 2 261 1.0 0.0 +fr 01_solar 2 261 0.0 1.0 +fr 02_wind_on 2 261 0.0 1.0 +fr 03_wind_off 2 261 0.0 1.0 +fr 04_res 2 261 0.0 1.0 +fr 05_nuclear 2 261 0.0 1.0 fr 06_coal 2 261 0.0 0.0 fr 07_gas 2 261 0.0 0.0 fr 08_non-res 2 261 0.0 0.0 fr 09_hydro_pump 2 261 0.0 0.0 -fr 01_solar 2 262 1.0 0.0 -fr 02_wind_on 2 262 1.0 0.0 -fr 03_wind_off 2 262 1.0 0.0 -fr 04_res 2 262 1.0 0.0 -fr 05_nuclear 2 262 1.0 0.0 +fr 01_solar 2 262 0.0 1.0 +fr 02_wind_on 2 262 0.0 1.0 +fr 03_wind_off 2 262 0.0 1.0 +fr 04_res 2 262 0.0 1.0 +fr 05_nuclear 2 262 0.0 1.0 fr 06_coal 2 262 0.0 0.0 fr 07_gas 2 262 0.0 0.0 fr 08_non-res 2 262 0.0 0.0 fr 09_hydro_pump 2 262 0.0 0.0 -fr 01_solar 2 263 1.0 0.0 -fr 02_wind_on 2 263 1.0 0.0 -fr 03_wind_off 2 263 1.0 0.0 -fr 04_res 2 263 1.0 0.0 -fr 05_nuclear 2 263 1.0 0.0 +fr 01_solar 2 263 0.0 1.0 +fr 02_wind_on 2 263 0.0 1.0 +fr 03_wind_off 2 263 0.0 1.0 +fr 04_res 2 263 0.0 1.0 +fr 05_nuclear 2 263 0.0 1.0 fr 06_coal 2 263 0.0 0.0 fr 07_gas 2 263 0.0 0.0 fr 08_non-res 2 263 0.0 0.0 fr 09_hydro_pump 2 263 0.0 0.0 -fr 01_solar 2 264 1.0 0.0 -fr 02_wind_on 2 264 1.0 0.0 -fr 03_wind_off 2 264 1.0 0.0 -fr 04_res 2 264 1.0 0.0 -fr 05_nuclear 2 264 1.0 0.0 +fr 01_solar 2 264 0.0 1.0 +fr 02_wind_on 2 264 0.0 1.0 +fr 03_wind_off 2 264 0.0 1.0 +fr 04_res 2 264 0.0 1.0 +fr 05_nuclear 2 264 0.0 1.0 fr 06_coal 2 264 0.0 0.0 fr 07_gas 2 264 0.0 0.0 fr 08_non-res 2 264 0.0 0.0 fr 09_hydro_pump 2 264 0.0 0.0 -fr 01_solar 2 265 1.0 0.0 -fr 02_wind_on 2 265 1.0 0.0 -fr 03_wind_off 2 265 1.0 0.0 -fr 04_res 2 265 1.0 0.0 -fr 05_nuclear 2 265 1.0 0.0 +fr 01_solar 2 265 0.0 1.0 +fr 02_wind_on 2 265 0.0 1.0 +fr 03_wind_off 2 265 0.0 1.0 +fr 04_res 2 265 0.0 1.0 +fr 05_nuclear 2 265 0.0 1.0 fr 06_coal 2 265 0.0 0.0 fr 07_gas 2 265 0.0 0.0 fr 08_non-res 2 265 0.0 0.0 fr 09_hydro_pump 2 265 0.0 0.0 -fr 01_solar 2 266 1.0 0.0 -fr 02_wind_on 2 266 1.0 0.0 -fr 03_wind_off 2 266 1.0 0.0 -fr 04_res 2 266 1.0 0.0 -fr 05_nuclear 2 266 1.0 0.0 +fr 01_solar 2 266 0.0 1.0 +fr 02_wind_on 2 266 0.0 1.0 +fr 03_wind_off 2 266 0.0 1.0 +fr 04_res 2 266 0.0 1.0 +fr 05_nuclear 2 266 0.0 1.0 fr 06_coal 2 266 0.0 0.0 fr 07_gas 2 266 0.0 0.0 fr 08_non-res 2 266 0.0 0.0 fr 09_hydro_pump 2 266 0.0 0.0 -fr 01_solar 2 267 1.0 0.0 -fr 02_wind_on 2 267 1.0 0.0 -fr 03_wind_off 2 267 1.0 0.0 -fr 04_res 2 267 1.0 0.0 -fr 05_nuclear 2 267 1.0 0.0 +fr 01_solar 2 267 0.0 1.0 +fr 02_wind_on 2 267 0.0 1.0 +fr 03_wind_off 2 267 0.0 1.0 +fr 04_res 2 267 0.0 1.0 +fr 05_nuclear 2 267 0.0 1.0 fr 06_coal 2 267 0.0 0.0 fr 07_gas 2 267 0.0 0.0 fr 08_non-res 2 267 0.0 0.0 fr 09_hydro_pump 2 267 0.0 0.0 -fr 01_solar 2 268 1.0 0.0 -fr 02_wind_on 2 268 1.0 0.0 -fr 03_wind_off 2 268 1.0 0.0 -fr 04_res 2 268 1.0 0.0 -fr 05_nuclear 2 268 1.0 0.0 +fr 01_solar 2 268 0.0 1.0 +fr 02_wind_on 2 268 0.0 1.0 +fr 03_wind_off 2 268 0.0 1.0 +fr 04_res 2 268 0.0 1.0 +fr 05_nuclear 2 268 0.0 1.0 fr 06_coal 2 268 0.0 0.0 fr 07_gas 2 268 0.0 0.0 fr 08_non-res 2 268 0.0 0.0 fr 09_hydro_pump 2 268 0.0 0.0 -fr 01_solar 2 269 1.0 0.0 -fr 02_wind_on 2 269 1.0 0.0 -fr 03_wind_off 2 269 1.0 0.0 -fr 04_res 2 269 1.0 0.0 -fr 05_nuclear 2 269 1.0 0.0 +fr 01_solar 2 269 0.0 1.0 +fr 02_wind_on 2 269 0.0 1.0 +fr 03_wind_off 2 269 0.0 1.0 +fr 04_res 2 269 0.0 1.0 +fr 05_nuclear 2 269 0.0 1.0 fr 06_coal 2 269 0.0 0.0 fr 07_gas 2 269 0.0 0.0 fr 08_non-res 2 269 0.0 0.0 fr 09_hydro_pump 2 269 0.0 0.0 -fr 01_solar 2 270 1.0 0.0 -fr 02_wind_on 2 270 1.0 0.0 -fr 03_wind_off 2 270 1.0 0.0 -fr 04_res 2 270 1.0 0.0 -fr 05_nuclear 2 270 1.0 0.0 -fr 06_coal 2 270 1.0 0.0 +fr 01_solar 2 270 0.0 1.0 +fr 02_wind_on 2 270 0.0 1.0 +fr 03_wind_off 2 270 0.0 1.0 +fr 04_res 2 270 0.0 1.0 +fr 05_nuclear 2 270 0.0 1.0 +fr 06_coal 2 270 0.0 1.0 fr 07_gas 2 270 0.0 0.0 fr 08_non-res 2 270 0.0 0.0 fr 09_hydro_pump 2 270 0.0 0.0 -fr 01_solar 2 271 1.0 0.0 -fr 02_wind_on 2 271 1.0 0.0 -fr 03_wind_off 2 271 1.0 0.0 -fr 04_res 2 271 1.0 0.0 -fr 05_nuclear 2 271 1.0 0.0 -fr 06_coal 2 271 1.0 0.0 +fr 01_solar 2 271 0.0 1.0 +fr 02_wind_on 2 271 0.0 1.0 +fr 03_wind_off 2 271 0.0 1.0 +fr 04_res 2 271 0.0 1.0 +fr 05_nuclear 2 271 0.0 1.0 +fr 06_coal 2 271 0.0 1.0 fr 07_gas 2 271 0.0 0.0 fr 08_non-res 2 271 0.0 0.0 fr 09_hydro_pump 2 271 0.0 0.0 -fr 01_solar 2 272 1.0 0.0 -fr 02_wind_on 2 272 1.0 0.0 -fr 03_wind_off 2 272 1.0 0.0 -fr 04_res 2 272 1.0 0.0 -fr 05_nuclear 2 272 1.0 0.0 -fr 06_coal 2 272 1.0 0.0 +fr 01_solar 2 272 0.0 1.0 +fr 02_wind_on 2 272 0.0 1.0 +fr 03_wind_off 2 272 0.0 1.0 +fr 04_res 2 272 0.0 1.0 +fr 05_nuclear 2 272 0.0 1.0 +fr 06_coal 2 272 0.0 1.0 fr 07_gas 2 272 0.0 0.0 fr 08_non-res 2 272 0.0 0.0 fr 09_hydro_pump 2 272 0.0 0.0 -fr 01_solar 2 273 1.0 0.0 -fr 02_wind_on 2 273 1.0 0.0 -fr 03_wind_off 2 273 1.0 0.0 -fr 04_res 2 273 1.0 0.0 -fr 05_nuclear 2 273 1.0 0.0 -fr 06_coal 2 273 1.0 0.0 +fr 01_solar 2 273 0.0 1.0 +fr 02_wind_on 2 273 0.0 1.0 +fr 03_wind_off 2 273 0.0 1.0 +fr 04_res 2 273 0.0 1.0 +fr 05_nuclear 2 273 0.0 1.0 +fr 06_coal 2 273 0.0 1.0 fr 07_gas 2 273 0.0 0.0 fr 08_non-res 2 273 0.0 0.0 fr 09_hydro_pump 2 273 0.0 0.0 -fr 01_solar 2 274 1.0 0.0 -fr 02_wind_on 2 274 1.0 0.0 -fr 03_wind_off 2 274 1.0 0.0 -fr 04_res 2 274 1.0 0.0 -fr 05_nuclear 2 274 1.0 0.0 -fr 06_coal 2 274 1.0 0.0 +fr 01_solar 2 274 0.0 1.0 +fr 02_wind_on 2 274 0.0 1.0 +fr 03_wind_off 2 274 0.0 1.0 +fr 04_res 2 274 0.0 1.0 +fr 05_nuclear 2 274 0.0 1.0 +fr 06_coal 2 274 0.0 1.0 fr 07_gas 2 274 0.0 0.0 fr 08_non-res 2 274 0.0 0.0 fr 09_hydro_pump 2 274 0.0 0.0 -fr 01_solar 2 275 1.0 0.0 -fr 02_wind_on 2 275 1.0 0.0 -fr 03_wind_off 2 275 1.0 0.0 -fr 04_res 2 275 1.0 0.0 -fr 05_nuclear 2 275 1.0 0.0 -fr 06_coal 2 275 1.0 0.0 +fr 01_solar 2 275 0.0 1.0 +fr 02_wind_on 2 275 0.0 1.0 +fr 03_wind_off 2 275 0.0 1.0 +fr 04_res 2 275 0.0 1.0 +fr 05_nuclear 2 275 0.0 1.0 +fr 06_coal 2 275 0.0 1.0 fr 07_gas 2 275 0.0 0.0 fr 08_non-res 2 275 0.0 0.0 fr 09_hydro_pump 2 275 0.0 0.0 -fr 01_solar 2 276 1.0 0.0 -fr 02_wind_on 2 276 1.0 0.0 -fr 03_wind_off 2 276 1.0 0.0 -fr 04_res 2 276 1.0 0.0 -fr 05_nuclear 2 276 1.0 0.0 -fr 06_coal 2 276 1.0 0.0 +fr 01_solar 2 276 0.0 1.0 +fr 02_wind_on 2 276 0.0 1.0 +fr 03_wind_off 2 276 0.0 1.0 +fr 04_res 2 276 0.0 1.0 +fr 05_nuclear 2 276 0.0 1.0 +fr 06_coal 2 276 0.0 1.0 fr 07_gas 2 276 0.0 0.0 fr 08_non-res 2 276 0.0 0.0 fr 09_hydro_pump 2 276 0.0 0.0 -fr 01_solar 2 277 1.0 0.0 -fr 02_wind_on 2 277 1.0 0.0 -fr 03_wind_off 2 277 1.0 0.0 -fr 04_res 2 277 1.0 0.0 -fr 05_nuclear 2 277 1.0 0.0 -fr 06_coal 2 277 1.0 0.0 +fr 01_solar 2 277 0.0 1.0 +fr 02_wind_on 2 277 0.0 1.0 +fr 03_wind_off 2 277 0.0 1.0 +fr 04_res 2 277 0.0 1.0 +fr 05_nuclear 2 277 0.0 1.0 +fr 06_coal 2 277 0.0 1.0 fr 07_gas 2 277 0.0 0.0 fr 08_non-res 2 277 0.0 0.0 fr 09_hydro_pump 2 277 0.0 0.0 -fr 01_solar 2 278 1.0 0.0 -fr 02_wind_on 2 278 1.0 0.0 -fr 03_wind_off 2 278 1.0 0.0 -fr 04_res 2 278 1.0 0.0 -fr 05_nuclear 2 278 1.0 0.0 -fr 06_coal 2 278 1.0 0.0 +fr 01_solar 2 278 0.0 1.0 +fr 02_wind_on 2 278 0.0 1.0 +fr 03_wind_off 2 278 0.0 1.0 +fr 04_res 2 278 0.0 1.0 +fr 05_nuclear 2 278 0.0 1.0 +fr 06_coal 2 278 0.0 1.0 fr 07_gas 2 278 0.0 0.0 fr 08_non-res 2 278 0.0 0.0 fr 09_hydro_pump 2 278 0.0 0.0 -fr 01_solar 2 279 1.0 0.0 -fr 02_wind_on 2 279 1.0 0.0 -fr 03_wind_off 2 279 1.0 0.0 -fr 04_res 2 279 1.0 0.0 -fr 05_nuclear 2 279 1.0 0.0 -fr 06_coal 2 279 1.0 0.0 +fr 01_solar 2 279 0.0 1.0 +fr 02_wind_on 2 279 0.0 1.0 +fr 03_wind_off 2 279 0.0 1.0 +fr 04_res 2 279 0.0 1.0 +fr 05_nuclear 2 279 0.0 1.0 +fr 06_coal 2 279 0.0 1.0 fr 07_gas 2 279 0.0 0.0 fr 08_non-res 2 279 0.0 0.0 fr 09_hydro_pump 2 279 0.0 0.0 -fr 01_solar 2 280 1.0 0.0 -fr 02_wind_on 2 280 1.0 0.0 -fr 03_wind_off 2 280 1.0 0.0 -fr 04_res 2 280 1.0 0.0 -fr 05_nuclear 2 280 1.0 0.0 -fr 06_coal 2 280 1.0 0.0 +fr 01_solar 2 280 0.0 1.0 +fr 02_wind_on 2 280 0.0 1.0 +fr 03_wind_off 2 280 0.0 1.0 +fr 04_res 2 280 0.0 1.0 +fr 05_nuclear 2 280 0.0 1.0 +fr 06_coal 2 280 0.0 1.0 fr 07_gas 2 280 0.0 0.0 fr 08_non-res 2 280 0.0 0.0 fr 09_hydro_pump 2 280 0.0 0.0 -fr 01_solar 2 281 1.0 0.0 -fr 02_wind_on 2 281 1.0 0.0 -fr 03_wind_off 2 281 1.0 0.0 -fr 04_res 2 281 1.0 0.0 -fr 05_nuclear 2 281 1.0 0.0 -fr 06_coal 2 281 1.0 0.0 +fr 01_solar 2 281 0.0 1.0 +fr 02_wind_on 2 281 0.0 1.0 +fr 03_wind_off 2 281 0.0 1.0 +fr 04_res 2 281 0.0 1.0 +fr 05_nuclear 2 281 0.0 1.0 +fr 06_coal 2 281 0.0 1.0 fr 07_gas 2 281 0.0 0.0 fr 08_non-res 2 281 0.0 0.0 fr 09_hydro_pump 2 281 0.0 0.0 -fr 01_solar 2 282 1.0 0.0 -fr 02_wind_on 2 282 1.0 0.0 -fr 03_wind_off 2 282 1.0 0.0 -fr 04_res 2 282 1.0 0.0 -fr 05_nuclear 2 282 1.0 0.0 -fr 06_coal 2 282 1.0 0.0 +fr 01_solar 2 282 0.0 1.0 +fr 02_wind_on 2 282 0.0 1.0 +fr 03_wind_off 2 282 0.0 1.0 +fr 04_res 2 282 0.0 1.0 +fr 05_nuclear 2 282 0.0 1.0 +fr 06_coal 2 282 0.0 1.0 fr 07_gas 2 282 0.0 0.0 fr 08_non-res 2 282 0.0 0.0 fr 09_hydro_pump 2 282 0.0 0.0 -fr 01_solar 2 283 1.0 0.0 -fr 02_wind_on 2 283 1.0 0.0 -fr 03_wind_off 2 283 1.0 0.0 -fr 04_res 2 283 1.0 0.0 -fr 05_nuclear 2 283 1.0 0.0 -fr 06_coal 2 283 1.0 0.0 +fr 01_solar 2 283 0.0 1.0 +fr 02_wind_on 2 283 0.0 1.0 +fr 03_wind_off 2 283 0.0 1.0 +fr 04_res 2 283 0.0 1.0 +fr 05_nuclear 2 283 0.0 1.0 +fr 06_coal 2 283 0.0 1.0 fr 07_gas 2 283 0.0 0.0 fr 08_non-res 2 283 0.0 0.0 fr 09_hydro_pump 2 283 0.0 0.0 -fr 01_solar 2 284 1.0 0.0 -fr 02_wind_on 2 284 1.0 0.0 -fr 03_wind_off 2 284 1.0 0.0 -fr 04_res 2 284 1.0 0.0 -fr 05_nuclear 2 284 1.0 0.0 -fr 06_coal 2 284 1.0 0.0 +fr 01_solar 2 284 0.0 1.0 +fr 02_wind_on 2 284 0.0 1.0 +fr 03_wind_off 2 284 0.0 1.0 +fr 04_res 2 284 0.0 1.0 +fr 05_nuclear 2 284 0.0 1.0 +fr 06_coal 2 284 0.0 1.0 fr 07_gas 2 284 0.0 0.0 fr 08_non-res 2 284 0.0 0.0 fr 09_hydro_pump 2 284 0.0 0.0 -fr 01_solar 2 285 1.0 0.0 -fr 02_wind_on 2 285 1.0 0.0 -fr 03_wind_off 2 285 1.0 0.0 -fr 04_res 2 285 1.0 0.0 -fr 05_nuclear 2 285 1.0 0.0 -fr 06_coal 2 285 1.0 0.0 +fr 01_solar 2 285 0.0 1.0 +fr 02_wind_on 2 285 0.0 1.0 +fr 03_wind_off 2 285 0.0 1.0 +fr 04_res 2 285 0.0 1.0 +fr 05_nuclear 2 285 0.0 1.0 +fr 06_coal 2 285 0.0 1.0 fr 07_gas 2 285 0.0 0.0 fr 08_non-res 2 285 0.0 0.0 fr 09_hydro_pump 2 285 0.0 0.0 -fr 01_solar 2 286 1.0 0.0 -fr 02_wind_on 2 286 1.0 0.0 -fr 03_wind_off 2 286 1.0 0.0 -fr 04_res 2 286 1.0 0.0 -fr 05_nuclear 2 286 1.0 0.0 -fr 06_coal 2 286 1.0 0.0 +fr 01_solar 2 286 0.0 1.0 +fr 02_wind_on 2 286 0.0 1.0 +fr 03_wind_off 2 286 0.0 1.0 +fr 04_res 2 286 0.0 1.0 +fr 05_nuclear 2 286 0.0 1.0 +fr 06_coal 2 286 0.0 1.0 fr 07_gas 2 286 0.0 0.0 fr 08_non-res 2 286 0.0 0.0 fr 09_hydro_pump 2 286 0.0 0.0 -fr 01_solar 2 287 1.0 0.0 -fr 02_wind_on 2 287 1.0 0.0 -fr 03_wind_off 2 287 1.0 0.0 -fr 04_res 2 287 1.0 0.0 -fr 05_nuclear 2 287 1.0 0.0 -fr 06_coal 2 287 1.0 0.0 +fr 01_solar 2 287 0.0 1.0 +fr 02_wind_on 2 287 0.0 1.0 +fr 03_wind_off 2 287 0.0 1.0 +fr 04_res 2 287 0.0 1.0 +fr 05_nuclear 2 287 0.0 1.0 +fr 06_coal 2 287 0.0 1.0 fr 07_gas 2 287 0.0 0.0 fr 08_non-res 2 287 0.0 0.0 fr 09_hydro_pump 2 287 0.0 0.0 -fr 01_solar 2 288 1.0 0.0 -fr 02_wind_on 2 288 1.0 0.0 -fr 03_wind_off 2 288 1.0 0.0 -fr 04_res 2 288 1.0 0.0 -fr 05_nuclear 2 288 1.0 0.0 -fr 06_coal 2 288 1.0 0.0 +fr 01_solar 2 288 0.0 1.0 +fr 02_wind_on 2 288 0.0 1.0 +fr 03_wind_off 2 288 0.0 1.0 +fr 04_res 2 288 0.0 1.0 +fr 05_nuclear 2 288 0.0 1.0 +fr 06_coal 2 288 0.0 1.0 fr 07_gas 2 288 0.0 0.0 fr 08_non-res 2 288 0.0 0.0 fr 09_hydro_pump 2 288 0.0 0.0 -fr 01_solar 2 289 1.0 0.0 -fr 02_wind_on 2 289 1.0 0.0 -fr 03_wind_off 2 289 1.0 0.0 -fr 04_res 2 289 1.0 0.0 -fr 05_nuclear 2 289 1.0 0.0 -fr 06_coal 2 289 1.0 0.0 +fr 01_solar 2 289 0.0 1.0 +fr 02_wind_on 2 289 0.0 1.0 +fr 03_wind_off 2 289 0.0 1.0 +fr 04_res 2 289 0.0 1.0 +fr 05_nuclear 2 289 0.0 1.0 +fr 06_coal 2 289 0.0 1.0 fr 07_gas 2 289 0.0 0.0 fr 08_non-res 2 289 0.0 0.0 fr 09_hydro_pump 2 289 0.0 0.0 -fr 01_solar 2 290 1.0 0.0 -fr 02_wind_on 2 290 1.0 0.0 -fr 03_wind_off 2 290 1.0 0.0 -fr 04_res 2 290 1.0 0.0 -fr 05_nuclear 2 290 1.0 0.0 -fr 06_coal 2 290 1.0 0.0 -fr 07_gas 2 290 1.0 0.0 +fr 01_solar 2 290 0.0 1.0 +fr 02_wind_on 2 290 0.0 1.0 +fr 03_wind_off 2 290 0.0 1.0 +fr 04_res 2 290 0.0 1.0 +fr 05_nuclear 2 290 0.0 1.0 +fr 06_coal 2 290 0.0 1.0 +fr 07_gas 2 290 0.0 1.0 fr 08_non-res 2 290 0.0 0.0 fr 09_hydro_pump 2 290 0.0 0.0 -fr 01_solar 2 291 1.0 0.0 -fr 02_wind_on 2 291 1.0 0.0 -fr 03_wind_off 2 291 1.0 0.0 -fr 04_res 2 291 1.0 0.0 -fr 05_nuclear 2 291 1.0 0.0 -fr 06_coal 2 291 1.0 0.0 -fr 07_gas 2 291 1.0 0.0 +fr 01_solar 2 291 0.0 1.0 +fr 02_wind_on 2 291 0.0 1.0 +fr 03_wind_off 2 291 0.0 1.0 +fr 04_res 2 291 0.0 1.0 +fr 05_nuclear 2 291 0.0 1.0 +fr 06_coal 2 291 0.0 1.0 +fr 07_gas 2 291 0.0 1.0 fr 08_non-res 2 291 0.0 0.0 fr 09_hydro_pump 2 291 0.0 0.0 -fr 01_solar 2 292 1.0 0.0 -fr 02_wind_on 2 292 1.0 0.0 -fr 03_wind_off 2 292 1.0 0.0 -fr 04_res 2 292 1.0 0.0 -fr 05_nuclear 2 292 1.0 0.0 -fr 06_coal 2 292 1.0 0.0 -fr 07_gas 2 292 1.0 0.0 +fr 01_solar 2 292 0.0 1.0 +fr 02_wind_on 2 292 0.0 1.0 +fr 03_wind_off 2 292 0.0 1.0 +fr 04_res 2 292 0.0 1.0 +fr 05_nuclear 2 292 0.0 1.0 +fr 06_coal 2 292 0.0 1.0 +fr 07_gas 2 292 0.0 1.0 fr 08_non-res 2 292 0.0 0.0 fr 09_hydro_pump 2 292 0.0 0.0 -fr 01_solar 2 293 1.0 0.0 -fr 02_wind_on 2 293 1.0 0.0 -fr 03_wind_off 2 293 1.0 0.0 -fr 04_res 2 293 1.0 0.0 -fr 05_nuclear 2 293 1.0 0.0 -fr 06_coal 2 293 1.0 0.0 -fr 07_gas 2 293 1.0 0.0 +fr 01_solar 2 293 0.0 1.0 +fr 02_wind_on 2 293 0.0 1.0 +fr 03_wind_off 2 293 0.0 1.0 +fr 04_res 2 293 0.0 1.0 +fr 05_nuclear 2 293 0.0 1.0 +fr 06_coal 2 293 0.0 1.0 +fr 07_gas 2 293 0.0 1.0 fr 08_non-res 2 293 0.0 0.0 fr 09_hydro_pump 2 293 0.0 0.0 -fr 01_solar 2 294 1.0 0.0 -fr 02_wind_on 2 294 1.0 0.0 -fr 03_wind_off 2 294 1.0 0.0 -fr 04_res 2 294 1.0 0.0 -fr 05_nuclear 2 294 1.0 0.0 -fr 06_coal 2 294 1.0 0.0 -fr 07_gas 2 294 1.0 0.0 +fr 01_solar 2 294 0.0 1.0 +fr 02_wind_on 2 294 0.0 1.0 +fr 03_wind_off 2 294 0.0 1.0 +fr 04_res 2 294 0.0 1.0 +fr 05_nuclear 2 294 0.0 1.0 +fr 06_coal 2 294 0.0 1.0 +fr 07_gas 2 294 0.0 1.0 fr 08_non-res 2 294 0.0 0.0 fr 09_hydro_pump 2 294 0.0 0.0 -fr 01_solar 2 295 1.0 0.0 -fr 02_wind_on 2 295 1.0 0.0 -fr 03_wind_off 2 295 1.0 0.0 -fr 04_res 2 295 1.0 0.0 -fr 05_nuclear 2 295 1.0 0.0 -fr 06_coal 2 295 1.0 0.0 -fr 07_gas 2 295 1.0 0.0 +fr 01_solar 2 295 0.0 1.0 +fr 02_wind_on 2 295 0.0 1.0 +fr 03_wind_off 2 295 0.0 1.0 +fr 04_res 2 295 0.0 1.0 +fr 05_nuclear 2 295 0.0 1.0 +fr 06_coal 2 295 0.0 1.0 +fr 07_gas 2 295 0.0 1.0 fr 08_non-res 2 295 0.0 0.0 fr 09_hydro_pump 2 295 0.0 0.0 -fr 01_solar 2 296 1.0 0.0 -fr 02_wind_on 2 296 1.0 0.0 -fr 03_wind_off 2 296 1.0 0.0 -fr 04_res 2 296 1.0 0.0 -fr 05_nuclear 2 296 1.0 0.0 -fr 06_coal 2 296 1.0 0.0 -fr 07_gas 2 296 1.0 0.0 +fr 01_solar 2 296 0.0 1.0 +fr 02_wind_on 2 296 0.0 1.0 +fr 03_wind_off 2 296 0.0 1.0 +fr 04_res 2 296 0.0 1.0 +fr 05_nuclear 2 296 0.0 1.0 +fr 06_coal 2 296 0.0 1.0 +fr 07_gas 2 296 0.0 1.0 fr 08_non-res 2 296 0.0 0.0 fr 09_hydro_pump 2 296 0.0 0.0 -fr 01_solar 2 297 1.0 0.0 -fr 02_wind_on 2 297 1.0 0.0 -fr 03_wind_off 2 297 1.0 0.0 -fr 04_res 2 297 1.0 0.0 -fr 05_nuclear 2 297 1.0 0.0 -fr 06_coal 2 297 1.0 0.0 -fr 07_gas 2 297 1.0 0.0 +fr 01_solar 2 297 0.0 1.0 +fr 02_wind_on 2 297 0.0 1.0 +fr 03_wind_off 2 297 0.0 1.0 +fr 04_res 2 297 0.0 1.0 +fr 05_nuclear 2 297 0.0 1.0 +fr 06_coal 2 297 0.0 1.0 +fr 07_gas 2 297 0.0 1.0 fr 08_non-res 2 297 0.0 0.0 fr 09_hydro_pump 2 297 0.0 0.0 -fr 01_solar 2 298 1.0 0.0 -fr 02_wind_on 2 298 1.0 0.0 -fr 03_wind_off 2 298 1.0 0.0 -fr 04_res 2 298 1.0 0.0 -fr 05_nuclear 2 298 1.0 0.0 -fr 06_coal 2 298 1.0 0.0 -fr 07_gas 2 298 1.0 0.0 +fr 01_solar 2 298 0.0 1.0 +fr 02_wind_on 2 298 0.0 1.0 +fr 03_wind_off 2 298 0.0 1.0 +fr 04_res 2 298 0.0 1.0 +fr 05_nuclear 2 298 0.0 1.0 +fr 06_coal 2 298 0.0 1.0 +fr 07_gas 2 298 0.0 1.0 fr 08_non-res 2 298 0.0 0.0 fr 09_hydro_pump 2 298 0.0 0.0 -fr 01_solar 2 299 1.0 0.0 -fr 02_wind_on 2 299 1.0 0.0 -fr 03_wind_off 2 299 1.0 0.0 -fr 04_res 2 299 1.0 0.0 -fr 05_nuclear 2 299 1.0 0.0 -fr 06_coal 2 299 1.0 0.0 -fr 07_gas 2 299 1.0 0.0 +fr 01_solar 2 299 0.0 1.0 +fr 02_wind_on 2 299 0.0 1.0 +fr 03_wind_off 2 299 0.0 1.0 +fr 04_res 2 299 0.0 1.0 +fr 05_nuclear 2 299 0.0 1.0 +fr 06_coal 2 299 0.0 1.0 +fr 07_gas 2 299 0.0 1.0 fr 08_non-res 2 299 0.0 0.0 fr 09_hydro_pump 2 299 0.0 0.0 -fr 01_solar 2 300 1.0 0.0 -fr 02_wind_on 2 300 1.0 0.0 -fr 03_wind_off 2 300 1.0 0.0 -fr 04_res 2 300 1.0 0.0 -fr 05_nuclear 2 300 1.0 0.0 -fr 06_coal 2 300 1.0 0.0 -fr 07_gas 2 300 1.0 0.0 +fr 01_solar 2 300 0.0 1.0 +fr 02_wind_on 2 300 0.0 1.0 +fr 03_wind_off 2 300 0.0 1.0 +fr 04_res 2 300 0.0 1.0 +fr 05_nuclear 2 300 0.0 1.0 +fr 06_coal 2 300 0.0 1.0 +fr 07_gas 2 300 0.0 1.0 fr 08_non-res 2 300 0.0 0.0 fr 09_hydro_pump 2 300 0.0 0.0 -fr 01_solar 2 301 1.0 0.0 -fr 02_wind_on 2 301 1.0 0.0 -fr 03_wind_off 2 301 1.0 0.0 -fr 04_res 2 301 1.0 0.0 -fr 05_nuclear 2 301 1.0 0.0 -fr 06_coal 2 301 1.0 0.0 -fr 07_gas 2 301 1.0 0.0 +fr 01_solar 2 301 0.0 1.0 +fr 02_wind_on 2 301 0.0 1.0 +fr 03_wind_off 2 301 0.0 1.0 +fr 04_res 2 301 0.0 1.0 +fr 05_nuclear 2 301 0.0 1.0 +fr 06_coal 2 301 0.0 1.0 +fr 07_gas 2 301 0.0 1.0 fr 08_non-res 2 301 0.0 0.0 fr 09_hydro_pump 2 301 0.0 0.0 -fr 01_solar 2 302 1.0 0.0 -fr 02_wind_on 2 302 1.0 0.0 -fr 03_wind_off 2 302 1.0 0.0 -fr 04_res 2 302 1.0 0.0 -fr 05_nuclear 2 302 1.0 0.0 -fr 06_coal 2 302 1.0 0.0 -fr 07_gas 2 302 1.0 0.0 +fr 01_solar 2 302 0.0 1.0 +fr 02_wind_on 2 302 0.0 1.0 +fr 03_wind_off 2 302 0.0 1.0 +fr 04_res 2 302 0.0 1.0 +fr 05_nuclear 2 302 0.0 1.0 +fr 06_coal 2 302 0.0 1.0 +fr 07_gas 2 302 0.0 1.0 fr 08_non-res 2 302 0.0 0.0 fr 09_hydro_pump 2 302 0.0 0.0 -fr 01_solar 2 303 1.0 0.0 -fr 02_wind_on 2 303 1.0 0.0 -fr 03_wind_off 2 303 1.0 0.0 -fr 04_res 2 303 1.0 0.0 -fr 05_nuclear 2 303 1.0 0.0 -fr 06_coal 2 303 1.0 0.0 -fr 07_gas 2 303 1.0 0.0 +fr 01_solar 2 303 0.0 1.0 +fr 02_wind_on 2 303 0.0 1.0 +fr 03_wind_off 2 303 0.0 1.0 +fr 04_res 2 303 0.0 1.0 +fr 05_nuclear 2 303 0.0 1.0 +fr 06_coal 2 303 0.0 1.0 +fr 07_gas 2 303 0.0 1.0 fr 08_non-res 2 303 0.0 0.0 fr 09_hydro_pump 2 303 0.0 0.0 -fr 01_solar 2 304 1.0 0.0 -fr 02_wind_on 2 304 1.0 0.0 -fr 03_wind_off 2 304 1.0 0.0 -fr 04_res 2 304 1.0 0.0 -fr 05_nuclear 2 304 1.0 0.0 -fr 06_coal 2 304 1.0 0.0 -fr 07_gas 2 304 1.0 0.0 +fr 01_solar 2 304 0.0 1.0 +fr 02_wind_on 2 304 0.0 1.0 +fr 03_wind_off 2 304 0.0 1.0 +fr 04_res 2 304 0.0 1.0 +fr 05_nuclear 2 304 0.0 1.0 +fr 06_coal 2 304 0.0 1.0 +fr 07_gas 2 304 0.0 1.0 fr 08_non-res 2 304 0.0 0.0 fr 09_hydro_pump 2 304 0.0 0.0 -fr 01_solar 2 305 1.0 0.0 -fr 02_wind_on 2 305 1.0 0.0 -fr 03_wind_off 2 305 1.0 0.0 -fr 04_res 2 305 1.0 0.0 -fr 05_nuclear 2 305 1.0 0.0 -fr 06_coal 2 305 1.0 0.0 -fr 07_gas 2 305 1.0 0.0 +fr 01_solar 2 305 0.0 1.0 +fr 02_wind_on 2 305 0.0 1.0 +fr 03_wind_off 2 305 0.0 1.0 +fr 04_res 2 305 0.0 1.0 +fr 05_nuclear 2 305 0.0 1.0 +fr 06_coal 2 305 0.0 1.0 +fr 07_gas 2 305 0.0 1.0 fr 08_non-res 2 305 0.0 0.0 fr 09_hydro_pump 2 305 0.0 0.0 -fr 01_solar 2 306 1.0 0.0 -fr 02_wind_on 2 306 1.0 0.0 -fr 03_wind_off 2 306 1.0 0.0 -fr 04_res 2 306 1.0 0.0 -fr 05_nuclear 2 306 1.0 0.0 -fr 06_coal 2 306 1.0 0.0 -fr 07_gas 2 306 1.0 0.0 +fr 01_solar 2 306 0.0 1.0 +fr 02_wind_on 2 306 0.0 1.0 +fr 03_wind_off 2 306 0.0 1.0 +fr 04_res 2 306 0.0 1.0 +fr 05_nuclear 2 306 0.0 1.0 +fr 06_coal 2 306 0.0 1.0 +fr 07_gas 2 306 0.0 1.0 fr 08_non-res 2 306 0.0 0.0 fr 09_hydro_pump 2 306 0.0 0.0 -fr 01_solar 2 307 1.0 0.0 -fr 02_wind_on 2 307 1.0 0.0 -fr 03_wind_off 2 307 1.0 0.0 -fr 04_res 2 307 1.0 0.0 -fr 05_nuclear 2 307 1.0 0.0 -fr 06_coal 2 307 1.0 0.0 -fr 07_gas 2 307 1.0 0.0 +fr 01_solar 2 307 0.0 1.0 +fr 02_wind_on 2 307 0.0 1.0 +fr 03_wind_off 2 307 0.0 1.0 +fr 04_res 2 307 0.0 1.0 +fr 05_nuclear 2 307 0.0 1.0 +fr 06_coal 2 307 0.0 1.0 +fr 07_gas 2 307 0.0 1.0 fr 08_non-res 2 307 0.0 0.0 fr 09_hydro_pump 2 307 0.0 0.0 -fr 01_solar 2 308 1.0 0.0 -fr 02_wind_on 2 308 1.0 0.0 -fr 03_wind_off 2 308 1.0 0.0 -fr 04_res 2 308 1.0 0.0 -fr 05_nuclear 2 308 1.0 0.0 -fr 06_coal 2 308 1.0 0.0 -fr 07_gas 2 308 1.0 0.0 +fr 01_solar 2 308 0.0 1.0 +fr 02_wind_on 2 308 0.0 1.0 +fr 03_wind_off 2 308 0.0 1.0 +fr 04_res 2 308 0.0 1.0 +fr 05_nuclear 2 308 0.0 1.0 +fr 06_coal 2 308 0.0 1.0 +fr 07_gas 2 308 0.0 1.0 fr 08_non-res 2 308 0.0 0.0 fr 09_hydro_pump 2 308 0.0 0.0 -fr 01_solar 2 309 1.0 0.0 -fr 02_wind_on 2 309 1.0 0.0 -fr 03_wind_off 2 309 1.0 0.0 -fr 04_res 2 309 1.0 0.0 -fr 05_nuclear 2 309 1.0 0.0 -fr 06_coal 2 309 1.0 0.0 -fr 07_gas 2 309 1.0 0.0 +fr 01_solar 2 309 0.0 1.0 +fr 02_wind_on 2 309 0.0 1.0 +fr 03_wind_off 2 309 0.0 1.0 +fr 04_res 2 309 0.0 1.0 +fr 05_nuclear 2 309 0.0 1.0 +fr 06_coal 2 309 0.0 1.0 +fr 07_gas 2 309 0.0 1.0 fr 08_non-res 2 309 0.0 0.0 fr 09_hydro_pump 2 309 0.0 0.0 -fr 01_solar 2 310 1.0 0.0 -fr 02_wind_on 2 310 1.0 0.0 -fr 03_wind_off 2 310 1.0 0.0 -fr 04_res 2 310 1.0 0.0 -fr 05_nuclear 2 310 1.0 0.0 -fr 06_coal 2 310 1.0 0.0 -fr 07_gas 2 310 1.0 0.0 -fr 08_non-res 2 310 1.0 0.0 +fr 01_solar 2 310 0.0 1.0 +fr 02_wind_on 2 310 0.0 1.0 +fr 03_wind_off 2 310 0.0 1.0 +fr 04_res 2 310 0.0 1.0 +fr 05_nuclear 2 310 0.0 1.0 +fr 06_coal 2 310 0.0 1.0 +fr 07_gas 2 310 0.0 1.0 +fr 08_non-res 2 310 0.0 1.0 fr 09_hydro_pump 2 310 0.0 0.0 -fr 01_solar 2 311 1.0 0.0 -fr 02_wind_on 2 311 1.0 0.0 -fr 03_wind_off 2 311 1.0 0.0 -fr 04_res 2 311 1.0 0.0 -fr 05_nuclear 2 311 1.0 0.0 -fr 06_coal 2 311 1.0 0.0 -fr 07_gas 2 311 1.0 0.0 -fr 08_non-res 2 311 1.0 0.0 +fr 01_solar 2 311 0.0 1.0 +fr 02_wind_on 2 311 0.0 1.0 +fr 03_wind_off 2 311 0.0 1.0 +fr 04_res 2 311 0.0 1.0 +fr 05_nuclear 2 311 0.0 1.0 +fr 06_coal 2 311 0.0 1.0 +fr 07_gas 2 311 0.0 1.0 +fr 08_non-res 2 311 0.0 1.0 fr 09_hydro_pump 2 311 0.0 0.0 -fr 01_solar 2 312 1.0 0.0 -fr 02_wind_on 2 312 1.0 0.0 -fr 03_wind_off 2 312 1.0 0.0 -fr 04_res 2 312 1.0 0.0 -fr 05_nuclear 2 312 1.0 0.0 -fr 06_coal 2 312 1.0 0.0 -fr 07_gas 2 312 1.0 0.0 -fr 08_non-res 2 312 1.0 0.0 +fr 01_solar 2 312 0.0 1.0 +fr 02_wind_on 2 312 0.0 1.0 +fr 03_wind_off 2 312 0.0 1.0 +fr 04_res 2 312 0.0 1.0 +fr 05_nuclear 2 312 0.0 1.0 +fr 06_coal 2 312 0.0 1.0 +fr 07_gas 2 312 0.0 1.0 +fr 08_non-res 2 312 0.0 1.0 fr 09_hydro_pump 2 312 0.0 0.0 -fr 01_solar 2 313 1.0 0.0 -fr 02_wind_on 2 313 1.0 0.0 -fr 03_wind_off 2 313 1.0 0.0 -fr 04_res 2 313 1.0 0.0 -fr 05_nuclear 2 313 1.0 0.0 -fr 06_coal 2 313 1.0 0.0 -fr 07_gas 2 313 1.0 0.0 -fr 08_non-res 2 313 1.0 0.0 +fr 01_solar 2 313 0.0 1.0 +fr 02_wind_on 2 313 0.0 1.0 +fr 03_wind_off 2 313 0.0 1.0 +fr 04_res 2 313 0.0 1.0 +fr 05_nuclear 2 313 0.0 1.0 +fr 06_coal 2 313 0.0 1.0 +fr 07_gas 2 313 0.0 1.0 +fr 08_non-res 2 313 0.0 1.0 fr 09_hydro_pump 2 313 0.0 0.0 -fr 01_solar 2 314 1.0 0.0 -fr 02_wind_on 2 314 1.0 0.0 -fr 03_wind_off 2 314 1.0 0.0 -fr 04_res 2 314 1.0 0.0 -fr 05_nuclear 2 314 1.0 0.0 -fr 06_coal 2 314 1.0 0.0 -fr 07_gas 2 314 1.0 0.0 -fr 08_non-res 2 314 1.0 0.0 +fr 01_solar 2 314 0.0 1.0 +fr 02_wind_on 2 314 0.0 1.0 +fr 03_wind_off 2 314 0.0 1.0 +fr 04_res 2 314 0.0 1.0 +fr 05_nuclear 2 314 0.0 1.0 +fr 06_coal 2 314 0.0 1.0 +fr 07_gas 2 314 0.0 1.0 +fr 08_non-res 2 314 0.0 1.0 fr 09_hydro_pump 2 314 0.0 0.0 -fr 01_solar 2 315 1.0 0.0 -fr 02_wind_on 2 315 1.0 0.0 -fr 03_wind_off 2 315 1.0 0.0 -fr 04_res 2 315 1.0 0.0 -fr 05_nuclear 2 315 1.0 0.0 -fr 06_coal 2 315 1.0 0.0 -fr 07_gas 2 315 1.0 0.0 -fr 08_non-res 2 315 1.0 0.0 +fr 01_solar 2 315 0.0 1.0 +fr 02_wind_on 2 315 0.0 1.0 +fr 03_wind_off 2 315 0.0 1.0 +fr 04_res 2 315 0.0 1.0 +fr 05_nuclear 2 315 0.0 1.0 +fr 06_coal 2 315 0.0 1.0 +fr 07_gas 2 315 0.0 1.0 +fr 08_non-res 2 315 0.0 1.0 fr 09_hydro_pump 2 315 0.0 0.0 -fr 01_solar 2 316 1.0 0.0 -fr 02_wind_on 2 316 1.0 0.0 -fr 03_wind_off 2 316 1.0 0.0 -fr 04_res 2 316 1.0 0.0 -fr 05_nuclear 2 316 1.0 0.0 -fr 06_coal 2 316 1.0 0.0 -fr 07_gas 2 316 1.0 0.0 -fr 08_non-res 2 316 1.0 0.0 +fr 01_solar 2 316 0.0 1.0 +fr 02_wind_on 2 316 0.0 1.0 +fr 03_wind_off 2 316 0.0 1.0 +fr 04_res 2 316 0.0 1.0 +fr 05_nuclear 2 316 0.0 1.0 +fr 06_coal 2 316 0.0 1.0 +fr 07_gas 2 316 0.0 1.0 +fr 08_non-res 2 316 0.0 1.0 fr 09_hydro_pump 2 316 0.0 0.0 -fr 01_solar 2 317 1.0 0.0 -fr 02_wind_on 2 317 1.0 0.0 -fr 03_wind_off 2 317 1.0 0.0 -fr 04_res 2 317 1.0 0.0 -fr 05_nuclear 2 317 1.0 0.0 -fr 06_coal 2 317 1.0 0.0 -fr 07_gas 2 317 1.0 0.0 -fr 08_non-res 2 317 1.0 0.0 +fr 01_solar 2 317 0.0 1.0 +fr 02_wind_on 2 317 0.0 1.0 +fr 03_wind_off 2 317 0.0 1.0 +fr 04_res 2 317 0.0 1.0 +fr 05_nuclear 2 317 0.0 1.0 +fr 06_coal 2 317 0.0 1.0 +fr 07_gas 2 317 0.0 1.0 +fr 08_non-res 2 317 0.0 1.0 fr 09_hydro_pump 2 317 0.0 0.0 -fr 01_solar 2 318 1.0 0.0 -fr 02_wind_on 2 318 1.0 0.0 -fr 03_wind_off 2 318 1.0 0.0 -fr 04_res 2 318 1.0 0.0 -fr 05_nuclear 2 318 1.0 0.0 -fr 06_coal 2 318 1.0 0.0 -fr 07_gas 2 318 1.0 0.0 -fr 08_non-res 2 318 1.0 0.0 +fr 01_solar 2 318 0.0 1.0 +fr 02_wind_on 2 318 0.0 1.0 +fr 03_wind_off 2 318 0.0 1.0 +fr 04_res 2 318 0.0 1.0 +fr 05_nuclear 2 318 0.0 1.0 +fr 06_coal 2 318 0.0 1.0 +fr 07_gas 2 318 0.0 1.0 +fr 08_non-res 2 318 0.0 1.0 fr 09_hydro_pump 2 318 0.0 0.0 -fr 01_solar 2 319 1.0 0.0 -fr 02_wind_on 2 319 1.0 0.0 -fr 03_wind_off 2 319 1.0 0.0 -fr 04_res 2 319 1.0 0.0 -fr 05_nuclear 2 319 1.0 0.0 -fr 06_coal 2 319 1.0 0.0 -fr 07_gas 2 319 1.0 0.0 -fr 08_non-res 2 319 1.0 0.0 +fr 01_solar 2 319 0.0 1.0 +fr 02_wind_on 2 319 0.0 1.0 +fr 03_wind_off 2 319 0.0 1.0 +fr 04_res 2 319 0.0 1.0 +fr 05_nuclear 2 319 0.0 1.0 +fr 06_coal 2 319 0.0 1.0 +fr 07_gas 2 319 0.0 1.0 +fr 08_non-res 2 319 0.0 1.0 fr 09_hydro_pump 2 319 0.0 0.0 -fr 01_solar 2 320 1.0 0.0 -fr 02_wind_on 2 320 1.0 0.0 -fr 03_wind_off 2 320 1.0 0.0 -fr 04_res 2 320 1.0 0.0 -fr 05_nuclear 2 320 1.0 0.0 -fr 06_coal 2 320 1.0 0.0 -fr 07_gas 2 320 1.0 0.0 -fr 08_non-res 2 320 1.0 0.0 +fr 01_solar 2 320 0.0 1.0 +fr 02_wind_on 2 320 0.0 1.0 +fr 03_wind_off 2 320 0.0 1.0 +fr 04_res 2 320 0.0 1.0 +fr 05_nuclear 2 320 0.0 1.0 +fr 06_coal 2 320 0.0 1.0 +fr 07_gas 2 320 0.0 1.0 +fr 08_non-res 2 320 0.0 1.0 fr 09_hydro_pump 2 320 0.0 0.0 -fr 01_solar 2 321 1.0 0.0 -fr 02_wind_on 2 321 1.0 0.0 -fr 03_wind_off 2 321 1.0 0.0 -fr 04_res 2 321 1.0 0.0 -fr 05_nuclear 2 321 1.0 0.0 -fr 06_coal 2 321 1.0 0.0 -fr 07_gas 2 321 1.0 0.0 -fr 08_non-res 2 321 1.0 0.0 +fr 01_solar 2 321 0.0 1.0 +fr 02_wind_on 2 321 0.0 1.0 +fr 03_wind_off 2 321 0.0 1.0 +fr 04_res 2 321 0.0 1.0 +fr 05_nuclear 2 321 0.0 1.0 +fr 06_coal 2 321 0.0 1.0 +fr 07_gas 2 321 0.0 1.0 +fr 08_non-res 2 321 0.0 1.0 fr 09_hydro_pump 2 321 0.0 0.0 -fr 01_solar 2 322 1.0 0.0 -fr 02_wind_on 2 322 1.0 0.0 -fr 03_wind_off 2 322 1.0 0.0 -fr 04_res 2 322 1.0 0.0 -fr 05_nuclear 2 322 1.0 0.0 -fr 06_coal 2 322 1.0 0.0 -fr 07_gas 2 322 1.0 0.0 -fr 08_non-res 2 322 1.0 0.0 +fr 01_solar 2 322 0.0 1.0 +fr 02_wind_on 2 322 0.0 1.0 +fr 03_wind_off 2 322 0.0 1.0 +fr 04_res 2 322 0.0 1.0 +fr 05_nuclear 2 322 0.0 1.0 +fr 06_coal 2 322 0.0 1.0 +fr 07_gas 2 322 0.0 1.0 +fr 08_non-res 2 322 0.0 1.0 fr 09_hydro_pump 2 322 0.0 0.0 -fr 01_solar 2 323 1.0 0.0 -fr 02_wind_on 2 323 1.0 0.0 -fr 03_wind_off 2 323 1.0 0.0 -fr 04_res 2 323 1.0 0.0 -fr 05_nuclear 2 323 1.0 0.0 -fr 06_coal 2 323 1.0 0.0 -fr 07_gas 2 323 1.0 0.0 -fr 08_non-res 2 323 1.0 0.0 +fr 01_solar 2 323 0.0 1.0 +fr 02_wind_on 2 323 0.0 1.0 +fr 03_wind_off 2 323 0.0 1.0 +fr 04_res 2 323 0.0 1.0 +fr 05_nuclear 2 323 0.0 1.0 +fr 06_coal 2 323 0.0 1.0 +fr 07_gas 2 323 0.0 1.0 +fr 08_non-res 2 323 0.0 1.0 fr 09_hydro_pump 2 323 0.0 0.0 -fr 01_solar 2 324 1.0 0.0 -fr 02_wind_on 2 324 1.0 0.0 -fr 03_wind_off 2 324 1.0 0.0 -fr 04_res 2 324 1.0 0.0 -fr 05_nuclear 2 324 1.0 0.0 -fr 06_coal 2 324 1.0 0.0 -fr 07_gas 2 324 1.0 0.0 -fr 08_non-res 2 324 1.0 0.0 +fr 01_solar 2 324 0.0 1.0 +fr 02_wind_on 2 324 0.0 1.0 +fr 03_wind_off 2 324 0.0 1.0 +fr 04_res 2 324 0.0 1.0 +fr 05_nuclear 2 324 0.0 1.0 +fr 06_coal 2 324 0.0 1.0 +fr 07_gas 2 324 0.0 1.0 +fr 08_non-res 2 324 0.0 1.0 fr 09_hydro_pump 2 324 0.0 0.0 -fr 01_solar 2 325 1.0 0.0 -fr 02_wind_on 2 325 1.0 0.0 -fr 03_wind_off 2 325 1.0 0.0 -fr 04_res 2 325 1.0 0.0 -fr 05_nuclear 2 325 1.0 0.0 -fr 06_coal 2 325 1.0 0.0 -fr 07_gas 2 325 1.0 0.0 -fr 08_non-res 2 325 1.0 0.0 +fr 01_solar 2 325 0.0 1.0 +fr 02_wind_on 2 325 0.0 1.0 +fr 03_wind_off 2 325 0.0 1.0 +fr 04_res 2 325 0.0 1.0 +fr 05_nuclear 2 325 0.0 1.0 +fr 06_coal 2 325 0.0 1.0 +fr 07_gas 2 325 0.0 1.0 +fr 08_non-res 2 325 0.0 1.0 fr 09_hydro_pump 2 325 0.0 0.0 -fr 01_solar 2 326 1.0 0.0 -fr 02_wind_on 2 326 1.0 0.0 -fr 03_wind_off 2 326 1.0 0.0 -fr 04_res 2 326 1.0 0.0 -fr 05_nuclear 2 326 1.0 0.0 -fr 06_coal 2 326 1.0 0.0 -fr 07_gas 2 326 1.0 0.0 -fr 08_non-res 2 326 1.0 0.0 +fr 01_solar 2 326 0.0 1.0 +fr 02_wind_on 2 326 0.0 1.0 +fr 03_wind_off 2 326 0.0 1.0 +fr 04_res 2 326 0.0 1.0 +fr 05_nuclear 2 326 0.0 1.0 +fr 06_coal 2 326 0.0 1.0 +fr 07_gas 2 326 0.0 1.0 +fr 08_non-res 2 326 0.0 1.0 fr 09_hydro_pump 2 326 0.0 0.0 -fr 01_solar 2 327 1.0 0.0 -fr 02_wind_on 2 327 1.0 0.0 -fr 03_wind_off 2 327 1.0 0.0 -fr 04_res 2 327 1.0 0.0 -fr 05_nuclear 2 327 1.0 0.0 -fr 06_coal 2 327 1.0 0.0 -fr 07_gas 2 327 1.0 0.0 -fr 08_non-res 2 327 1.0 0.0 +fr 01_solar 2 327 0.0 1.0 +fr 02_wind_on 2 327 0.0 1.0 +fr 03_wind_off 2 327 0.0 1.0 +fr 04_res 2 327 0.0 1.0 +fr 05_nuclear 2 327 0.0 1.0 +fr 06_coal 2 327 0.0 1.0 +fr 07_gas 2 327 0.0 1.0 +fr 08_non-res 2 327 0.0 1.0 fr 09_hydro_pump 2 327 0.0 0.0 -fr 01_solar 2 328 1.0 0.0 -fr 02_wind_on 2 328 1.0 0.0 -fr 03_wind_off 2 328 1.0 0.0 -fr 04_res 2 328 1.0 0.0 -fr 05_nuclear 2 328 1.0 0.0 -fr 06_coal 2 328 1.0 0.0 -fr 07_gas 2 328 1.0 0.0 -fr 08_non-res 2 328 1.0 0.0 +fr 01_solar 2 328 0.0 1.0 +fr 02_wind_on 2 328 0.0 1.0 +fr 03_wind_off 2 328 0.0 1.0 +fr 04_res 2 328 0.0 1.0 +fr 05_nuclear 2 328 0.0 1.0 +fr 06_coal 2 328 0.0 1.0 +fr 07_gas 2 328 0.0 1.0 +fr 08_non-res 2 328 0.0 1.0 fr 09_hydro_pump 2 328 0.0 0.0 -fr 01_solar 2 329 1.0 0.0 -fr 02_wind_on 2 329 1.0 0.0 -fr 03_wind_off 2 329 1.0 0.0 -fr 04_res 2 329 1.0 0.0 -fr 05_nuclear 2 329 1.0 0.0 -fr 06_coal 2 329 1.0 0.0 -fr 07_gas 2 329 1.0 0.0 -fr 08_non-res 2 329 1.0 0.0 +fr 01_solar 2 329 0.0 1.0 +fr 02_wind_on 2 329 0.0 1.0 +fr 03_wind_off 2 329 0.0 1.0 +fr 04_res 2 329 0.0 1.0 +fr 05_nuclear 2 329 0.0 1.0 +fr 06_coal 2 329 0.0 1.0 +fr 07_gas 2 329 0.0 1.0 +fr 08_non-res 2 329 0.0 1.0 fr 09_hydro_pump 2 329 0.0 0.0 -fr 01_solar 2 330 1.0 0.0 -fr 02_wind_on 2 330 1.0 0.0 -fr 03_wind_off 2 330 1.0 0.0 -fr 04_res 2 330 1.0 0.0 -fr 05_nuclear 2 330 1.0 0.0 -fr 06_coal 2 330 1.0 0.0 -fr 07_gas 2 330 1.0 0.0 -fr 08_non-res 2 330 1.0 0.0 -fr 09_hydro_pump 2 330 1.0 0.0 -fr 01_solar 2 331 1.0 0.0 -fr 02_wind_on 2 331 1.0 0.0 -fr 03_wind_off 2 331 1.0 0.0 -fr 04_res 2 331 1.0 0.0 -fr 05_nuclear 2 331 1.0 0.0 -fr 06_coal 2 331 1.0 0.0 -fr 07_gas 2 331 1.0 0.0 -fr 08_non-res 2 331 1.0 0.0 -fr 09_hydro_pump 2 331 1.0 0.0 -fr 01_solar 2 332 1.0 0.0 -fr 02_wind_on 2 332 1.0 0.0 -fr 03_wind_off 2 332 1.0 0.0 -fr 04_res 2 332 1.0 0.0 -fr 05_nuclear 2 332 1.0 0.0 -fr 06_coal 2 332 1.0 0.0 -fr 07_gas 2 332 1.0 0.0 -fr 08_non-res 2 332 1.0 0.0 -fr 09_hydro_pump 2 332 1.0 0.0 -fr 01_solar 2 333 1.0 0.0 -fr 02_wind_on 2 333 1.0 0.0 -fr 03_wind_off 2 333 1.0 0.0 -fr 04_res 2 333 1.0 0.0 -fr 05_nuclear 2 333 1.0 0.0 -fr 06_coal 2 333 1.0 0.0 -fr 07_gas 2 333 1.0 0.0 -fr 08_non-res 2 333 1.0 0.0 -fr 09_hydro_pump 2 333 1.0 0.0 -fr 01_solar 2 334 1.0 0.0 -fr 02_wind_on 2 334 1.0 0.0 -fr 03_wind_off 2 334 1.0 0.0 -fr 04_res 2 334 1.0 0.0 -fr 05_nuclear 2 334 1.0 0.0 -fr 06_coal 2 334 1.0 0.0 -fr 07_gas 2 334 1.0 0.0 -fr 08_non-res 2 334 1.0 0.0 -fr 09_hydro_pump 2 334 1.0 0.0 -fr 01_solar 2 335 1.0 0.0 -fr 02_wind_on 2 335 1.0 0.0 -fr 03_wind_off 2 335 1.0 0.0 -fr 04_res 2 335 1.0 0.0 -fr 05_nuclear 2 335 1.0 0.0 -fr 06_coal 2 335 1.0 0.0 -fr 07_gas 2 335 1.0 0.0 -fr 08_non-res 2 335 1.0 0.0 -fr 09_hydro_pump 2 335 1.0 0.0 -fr 01_solar 2 336 1.0 0.0 -fr 02_wind_on 2 336 1.0 0.0 -fr 03_wind_off 2 336 1.0 0.0 -fr 04_res 2 336 1.0 0.0 -fr 05_nuclear 2 336 1.0 0.0 -fr 06_coal 2 336 1.0 0.0 -fr 07_gas 2 336 1.0 0.0 -fr 08_non-res 2 336 1.0 0.0 -fr 09_hydro_pump 2 336 1.0 0.0 +fr 01_solar 2 330 0.0 1.0 +fr 02_wind_on 2 330 0.0 1.0 +fr 03_wind_off 2 330 0.0 1.0 +fr 04_res 2 330 0.0 1.0 +fr 05_nuclear 2 330 0.0 1.0 +fr 06_coal 2 330 0.0 1.0 +fr 07_gas 2 330 0.0 1.0 +fr 08_non-res 2 330 0.0 1.0 +fr 09_hydro_pump 2 330 0.0 1.0 +fr 01_solar 2 331 0.0 1.0 +fr 02_wind_on 2 331 0.0 1.0 +fr 03_wind_off 2 331 0.0 1.0 +fr 04_res 2 331 0.0 1.0 +fr 05_nuclear 2 331 0.0 1.0 +fr 06_coal 2 331 0.0 1.0 +fr 07_gas 2 331 0.0 1.0 +fr 08_non-res 2 331 0.0 1.0 +fr 09_hydro_pump 2 331 0.0 1.0 +fr 01_solar 2 332 0.0 1.0 +fr 02_wind_on 2 332 0.0 1.0 +fr 03_wind_off 2 332 0.0 1.0 +fr 04_res 2 332 0.0 1.0 +fr 05_nuclear 2 332 0.0 1.0 +fr 06_coal 2 332 0.0 1.0 +fr 07_gas 2 332 0.0 1.0 +fr 08_non-res 2 332 0.0 1.0 +fr 09_hydro_pump 2 332 0.0 1.0 +fr 01_solar 2 333 0.0 1.0 +fr 02_wind_on 2 333 0.0 1.0 +fr 03_wind_off 2 333 0.0 1.0 +fr 04_res 2 333 0.0 1.0 +fr 05_nuclear 2 333 0.0 1.0 +fr 06_coal 2 333 0.0 1.0 +fr 07_gas 2 333 0.0 1.0 +fr 08_non-res 2 333 0.0 1.0 +fr 09_hydro_pump 2 333 0.0 1.0 +fr 01_solar 2 334 0.0 1.0 +fr 02_wind_on 2 334 0.0 1.0 +fr 03_wind_off 2 334 0.0 1.0 +fr 04_res 2 334 0.0 1.0 +fr 05_nuclear 2 334 0.0 1.0 +fr 06_coal 2 334 0.0 1.0 +fr 07_gas 2 334 0.0 1.0 +fr 08_non-res 2 334 0.0 1.0 +fr 09_hydro_pump 2 334 0.0 1.0 +fr 01_solar 2 335 0.0 1.0 +fr 02_wind_on 2 335 0.0 1.0 +fr 03_wind_off 2 335 0.0 1.0 +fr 04_res 2 335 0.0 1.0 +fr 05_nuclear 2 335 0.0 1.0 +fr 06_coal 2 335 0.0 1.0 +fr 07_gas 2 335 0.0 1.0 +fr 08_non-res 2 335 0.0 1.0 +fr 09_hydro_pump 2 335 0.0 1.0 +fr 01_solar 2 336 0.0 1.0 +fr 02_wind_on 2 336 0.0 1.0 +fr 03_wind_off 2 336 0.0 1.0 +fr 04_res 2 336 0.0 1.0 +fr 05_nuclear 2 336 0.0 1.0 +fr 06_coal 2 336 0.0 1.0 +fr 07_gas 2 336 0.0 1.0 +fr 08_non-res 2 336 0.0 1.0 +fr 09_hydro_pump 2 336 0.0 1.0 it 01_solar 2 1 0.0 0.0 it 02_wind_on 2 1 0.0 0.0 it 03_wind_off 2 1 0.0 0.0 @@ -21176,7 +21176,7 @@ it 06_coal 2 1 0.0 0.0 it 07_gas 2 1 0.0 0.0 it 08_non-res 2 1 0.0 0.0 it 09_hydro_pump 2 1 0.0 0.0 -it 01_solar 2 2 1.0 0.0 +it 01_solar 2 2 0.0 1.0 it 02_wind_on 2 2 0.0 0.0 it 03_wind_off 2 2 0.0 0.0 it 04_res 2 2 0.0 0.0 @@ -21185,7 +21185,7 @@ it 06_coal 2 2 0.0 0.0 it 07_gas 2 2 0.0 0.0 it 08_non-res 2 2 0.0 0.0 it 09_hydro_pump 2 2 0.0 0.0 -it 01_solar 2 3 1.0 0.0 +it 01_solar 2 3 0.0 1.0 it 02_wind_on 2 3 0.0 0.0 it 03_wind_off 2 3 0.0 0.0 it 04_res 2 3 0.0 0.0 @@ -21194,7 +21194,7 @@ it 06_coal 2 3 0.0 0.0 it 07_gas 2 3 0.0 0.0 it 08_non-res 2 3 0.0 0.0 it 09_hydro_pump 2 3 0.0 0.0 -it 01_solar 2 4 1.0 0.0 +it 01_solar 2 4 0.0 1.0 it 02_wind_on 2 4 0.0 0.0 it 03_wind_off 2 4 0.0 0.0 it 04_res 2 4 0.0 0.0 @@ -21203,7 +21203,7 @@ it 06_coal 2 4 0.0 0.0 it 07_gas 2 4 0.0 0.0 it 08_non-res 2 4 0.0 0.0 it 09_hydro_pump 2 4 0.0 0.0 -it 01_solar 2 5 1.0 0.0 +it 01_solar 2 5 0.0 1.0 it 02_wind_on 2 5 0.0 0.0 it 03_wind_off 2 5 0.0 0.0 it 04_res 2 5 0.0 0.0 @@ -21212,7 +21212,7 @@ it 06_coal 2 5 0.0 0.0 it 07_gas 2 5 0.0 0.0 it 08_non-res 2 5 0.0 0.0 it 09_hydro_pump 2 5 0.0 0.0 -it 01_solar 2 6 1.0 0.0 +it 01_solar 2 6 0.0 1.0 it 02_wind_on 2 6 0.0 0.0 it 03_wind_off 2 6 0.0 0.0 it 04_res 2 6 0.0 0.0 @@ -21221,7 +21221,7 @@ it 06_coal 2 6 0.0 0.0 it 07_gas 2 6 0.0 0.0 it 08_non-res 2 6 0.0 0.0 it 09_hydro_pump 2 6 0.0 0.0 -it 01_solar 2 7 1.0 0.0 +it 01_solar 2 7 0.0 1.0 it 02_wind_on 2 7 0.0 0.0 it 03_wind_off 2 7 0.0 0.0 it 04_res 2 7 0.0 0.0 @@ -21230,7 +21230,7 @@ it 06_coal 2 7 0.0 0.0 it 07_gas 2 7 0.0 0.0 it 08_non-res 2 7 0.0 0.0 it 09_hydro_pump 2 7 0.0 0.0 -it 01_solar 2 8 1.0 0.0 +it 01_solar 2 8 0.0 1.0 it 02_wind_on 2 8 0.0 0.0 it 03_wind_off 2 8 0.0 0.0 it 04_res 2 8 0.0 0.0 @@ -21239,7 +21239,7 @@ it 06_coal 2 8 0.0 0.0 it 07_gas 2 8 0.0 0.0 it 08_non-res 2 8 0.0 0.0 it 09_hydro_pump 2 8 0.0 0.0 -it 01_solar 2 9 1.0 0.0 +it 01_solar 2 9 0.0 1.0 it 02_wind_on 2 9 0.0 0.0 it 03_wind_off 2 9 0.0 0.0 it 04_res 2 9 0.0 0.0 @@ -21248,7 +21248,7 @@ it 06_coal 2 9 0.0 0.0 it 07_gas 2 9 0.0 0.0 it 08_non-res 2 9 0.0 0.0 it 09_hydro_pump 2 9 0.0 0.0 -it 01_solar 2 10 1.0 0.0 +it 01_solar 2 10 0.0 1.0 it 02_wind_on 2 10 0.0 0.0 it 03_wind_off 2 10 0.0 0.0 it 04_res 2 10 0.0 0.0 @@ -21257,7 +21257,7 @@ it 06_coal 2 10 0.0 0.0 it 07_gas 2 10 0.0 0.0 it 08_non-res 2 10 0.0 0.0 it 09_hydro_pump 2 10 0.0 0.0 -it 01_solar 2 11 1.0 0.0 +it 01_solar 2 11 0.0 1.0 it 02_wind_on 2 11 0.0 0.0 it 03_wind_off 2 11 0.0 0.0 it 04_res 2 11 0.0 0.0 @@ -21266,7 +21266,7 @@ it 06_coal 2 11 0.0 0.0 it 07_gas 2 11 0.0 0.0 it 08_non-res 2 11 0.0 0.0 it 09_hydro_pump 2 11 0.0 0.0 -it 01_solar 2 12 1.0 0.0 +it 01_solar 2 12 0.0 1.0 it 02_wind_on 2 12 0.0 0.0 it 03_wind_off 2 12 0.0 0.0 it 04_res 2 12 0.0 0.0 @@ -21275,7 +21275,7 @@ it 06_coal 2 12 0.0 0.0 it 07_gas 2 12 0.0 0.0 it 08_non-res 2 12 0.0 0.0 it 09_hydro_pump 2 12 0.0 0.0 -it 01_solar 2 13 1.0 0.0 +it 01_solar 2 13 0.0 1.0 it 02_wind_on 2 13 0.0 0.0 it 03_wind_off 2 13 0.0 0.0 it 04_res 2 13 0.0 0.0 @@ -21284,7 +21284,7 @@ it 06_coal 2 13 0.0 0.0 it 07_gas 2 13 0.0 0.0 it 08_non-res 2 13 0.0 0.0 it 09_hydro_pump 2 13 0.0 0.0 -it 01_solar 2 14 1.0 0.0 +it 01_solar 2 14 0.0 1.0 it 02_wind_on 2 14 0.0 0.0 it 03_wind_off 2 14 0.0 0.0 it 04_res 2 14 0.0 0.0 @@ -21293,7 +21293,7 @@ it 06_coal 2 14 0.0 0.0 it 07_gas 2 14 0.0 0.0 it 08_non-res 2 14 0.0 0.0 it 09_hydro_pump 2 14 0.0 0.0 -it 01_solar 2 15 1.0 0.0 +it 01_solar 2 15 0.0 1.0 it 02_wind_on 2 15 0.0 0.0 it 03_wind_off 2 15 0.0 0.0 it 04_res 2 15 0.0 0.0 @@ -21302,7 +21302,7 @@ it 06_coal 2 15 0.0 0.0 it 07_gas 2 15 0.0 0.0 it 08_non-res 2 15 0.0 0.0 it 09_hydro_pump 2 15 0.0 0.0 -it 01_solar 2 16 1.0 0.0 +it 01_solar 2 16 0.0 1.0 it 02_wind_on 2 16 0.0 0.0 it 03_wind_off 2 16 0.0 0.0 it 04_res 2 16 0.0 0.0 @@ -21311,7 +21311,7 @@ it 06_coal 2 16 0.0 0.0 it 07_gas 2 16 0.0 0.0 it 08_non-res 2 16 0.0 0.0 it 09_hydro_pump 2 16 0.0 0.0 -it 01_solar 2 17 1.0 0.0 +it 01_solar 2 17 0.0 1.0 it 02_wind_on 2 17 0.0 0.0 it 03_wind_off 2 17 0.0 0.0 it 04_res 2 17 0.0 0.0 @@ -21320,7 +21320,7 @@ it 06_coal 2 17 0.0 0.0 it 07_gas 2 17 0.0 0.0 it 08_non-res 2 17 0.0 0.0 it 09_hydro_pump 2 17 0.0 0.0 -it 01_solar 2 18 1.0 0.0 +it 01_solar 2 18 0.0 1.0 it 02_wind_on 2 18 0.0 0.0 it 03_wind_off 2 18 0.0 0.0 it 04_res 2 18 0.0 0.0 @@ -21329,7 +21329,7 @@ it 06_coal 2 18 0.0 0.0 it 07_gas 2 18 0.0 0.0 it 08_non-res 2 18 0.0 0.0 it 09_hydro_pump 2 18 0.0 0.0 -it 01_solar 2 19 1.0 0.0 +it 01_solar 2 19 0.0 1.0 it 02_wind_on 2 19 0.0 0.0 it 03_wind_off 2 19 0.0 0.0 it 04_res 2 19 0.0 0.0 @@ -21338,7 +21338,7 @@ it 06_coal 2 19 0.0 0.0 it 07_gas 2 19 0.0 0.0 it 08_non-res 2 19 0.0 0.0 it 09_hydro_pump 2 19 0.0 0.0 -it 01_solar 2 20 1.0 0.0 +it 01_solar 2 20 0.0 1.0 it 02_wind_on 2 20 0.0 0.0 it 03_wind_off 2 20 0.0 0.0 it 04_res 2 20 0.0 0.0 @@ -21347,7 +21347,7 @@ it 06_coal 2 20 0.0 0.0 it 07_gas 2 20 0.0 0.0 it 08_non-res 2 20 0.0 0.0 it 09_hydro_pump 2 20 0.0 0.0 -it 01_solar 2 21 1.0 0.0 +it 01_solar 2 21 0.0 1.0 it 02_wind_on 2 21 0.0 0.0 it 03_wind_off 2 21 0.0 0.0 it 04_res 2 21 0.0 0.0 @@ -21356,8 +21356,8 @@ it 06_coal 2 21 0.0 0.0 it 07_gas 2 21 0.0 0.0 it 08_non-res 2 21 0.0 0.0 it 09_hydro_pump 2 21 0.0 0.0 -it 01_solar 2 22 1.0 0.0 -it 02_wind_on 2 22 1.0 0.0 +it 01_solar 2 22 0.0 1.0 +it 02_wind_on 2 22 0.0 1.0 it 03_wind_off 2 22 0.0 0.0 it 04_res 2 22 0.0 0.0 it 05_nuclear 2 22 0.0 0.0 @@ -21365,8 +21365,8 @@ it 06_coal 2 22 0.0 0.0 it 07_gas 2 22 0.0 0.0 it 08_non-res 2 22 0.0 0.0 it 09_hydro_pump 2 22 0.0 0.0 -it 01_solar 2 23 1.0 0.0 -it 02_wind_on 2 23 1.0 0.0 +it 01_solar 2 23 0.0 1.0 +it 02_wind_on 2 23 0.0 1.0 it 03_wind_off 2 23 0.0 0.0 it 04_res 2 23 0.0 0.0 it 05_nuclear 2 23 0.0 0.0 @@ -21374,8 +21374,8 @@ it 06_coal 2 23 0.0 0.0 it 07_gas 2 23 0.0 0.0 it 08_non-res 2 23 0.0 0.0 it 09_hydro_pump 2 23 0.0 0.0 -it 01_solar 2 24 1.0 0.0 -it 02_wind_on 2 24 1.0 0.0 +it 01_solar 2 24 0.0 1.0 +it 02_wind_on 2 24 0.0 1.0 it 03_wind_off 2 24 0.0 0.0 it 04_res 2 24 0.0 0.0 it 05_nuclear 2 24 0.0 0.0 @@ -21383,8 +21383,8 @@ it 06_coal 2 24 0.0 0.0 it 07_gas 2 24 0.0 0.0 it 08_non-res 2 24 0.0 0.0 it 09_hydro_pump 2 24 0.0 0.0 -it 01_solar 2 25 1.0 0.0 -it 02_wind_on 2 25 1.0 0.0 +it 01_solar 2 25 0.0 1.0 +it 02_wind_on 2 25 0.0 1.0 it 03_wind_off 2 25 0.0 0.0 it 04_res 2 25 0.0 0.0 it 05_nuclear 2 25 0.0 0.0 @@ -21392,8 +21392,8 @@ it 06_coal 2 25 0.0 0.0 it 07_gas 2 25 0.0 0.0 it 08_non-res 2 25 0.0 0.0 it 09_hydro_pump 2 25 0.0 0.0 -it 01_solar 2 26 1.0 0.0 -it 02_wind_on 2 26 1.0 0.0 +it 01_solar 2 26 0.0 1.0 +it 02_wind_on 2 26 0.0 1.0 it 03_wind_off 2 26 0.0 0.0 it 04_res 2 26 0.0 0.0 it 05_nuclear 2 26 0.0 0.0 @@ -21401,8 +21401,8 @@ it 06_coal 2 26 0.0 0.0 it 07_gas 2 26 0.0 0.0 it 08_non-res 2 26 0.0 0.0 it 09_hydro_pump 2 26 0.0 0.0 -it 01_solar 2 27 1.0 0.0 -it 02_wind_on 2 27 1.0 0.0 +it 01_solar 2 27 0.0 1.0 +it 02_wind_on 2 27 0.0 1.0 it 03_wind_off 2 27 0.0 0.0 it 04_res 2 27 0.0 0.0 it 05_nuclear 2 27 0.0 0.0 @@ -21410,8 +21410,8 @@ it 06_coal 2 27 0.0 0.0 it 07_gas 2 27 0.0 0.0 it 08_non-res 2 27 0.0 0.0 it 09_hydro_pump 2 27 0.0 0.0 -it 01_solar 2 28 1.0 0.0 -it 02_wind_on 2 28 1.0 0.0 +it 01_solar 2 28 0.0 1.0 +it 02_wind_on 2 28 0.0 1.0 it 03_wind_off 2 28 0.0 0.0 it 04_res 2 28 0.0 0.0 it 05_nuclear 2 28 0.0 0.0 @@ -21419,8 +21419,8 @@ it 06_coal 2 28 0.0 0.0 it 07_gas 2 28 0.0 0.0 it 08_non-res 2 28 0.0 0.0 it 09_hydro_pump 2 28 0.0 0.0 -it 01_solar 2 29 1.0 0.0 -it 02_wind_on 2 29 1.0 0.0 +it 01_solar 2 29 0.0 1.0 +it 02_wind_on 2 29 0.0 1.0 it 03_wind_off 2 29 0.0 0.0 it 04_res 2 29 0.0 0.0 it 05_nuclear 2 29 0.0 0.0 @@ -21428,8 +21428,8 @@ it 06_coal 2 29 0.0 0.0 it 07_gas 2 29 0.0 0.0 it 08_non-res 2 29 0.0 0.0 it 09_hydro_pump 2 29 0.0 0.0 -it 01_solar 2 30 1.0 0.0 -it 02_wind_on 2 30 1.0 0.0 +it 01_solar 2 30 0.0 1.0 +it 02_wind_on 2 30 0.0 1.0 it 03_wind_off 2 30 0.0 0.0 it 04_res 2 30 0.0 0.0 it 05_nuclear 2 30 0.0 0.0 @@ -21437,8 +21437,8 @@ it 06_coal 2 30 0.0 0.0 it 07_gas 2 30 0.0 0.0 it 08_non-res 2 30 0.0 0.0 it 09_hydro_pump 2 30 0.0 0.0 -it 01_solar 2 31 1.0 0.0 -it 02_wind_on 2 31 1.0 0.0 +it 01_solar 2 31 0.0 1.0 +it 02_wind_on 2 31 0.0 1.0 it 03_wind_off 2 31 0.0 0.0 it 04_res 2 31 0.0 0.0 it 05_nuclear 2 31 0.0 0.0 @@ -21446,8 +21446,8 @@ it 06_coal 2 31 0.0 0.0 it 07_gas 2 31 0.0 0.0 it 08_non-res 2 31 0.0 0.0 it 09_hydro_pump 2 31 0.0 0.0 -it 01_solar 2 32 1.0 0.0 -it 02_wind_on 2 32 1.0 0.0 +it 01_solar 2 32 0.0 1.0 +it 02_wind_on 2 32 0.0 1.0 it 03_wind_off 2 32 0.0 0.0 it 04_res 2 32 0.0 0.0 it 05_nuclear 2 32 0.0 0.0 @@ -21455,8 +21455,8 @@ it 06_coal 2 32 0.0 0.0 it 07_gas 2 32 0.0 0.0 it 08_non-res 2 32 0.0 0.0 it 09_hydro_pump 2 32 0.0 0.0 -it 01_solar 2 33 1.0 0.0 -it 02_wind_on 2 33 1.0 0.0 +it 01_solar 2 33 0.0 1.0 +it 02_wind_on 2 33 0.0 1.0 it 03_wind_off 2 33 0.0 0.0 it 04_res 2 33 0.0 0.0 it 05_nuclear 2 33 0.0 0.0 @@ -21464,8 +21464,8 @@ it 06_coal 2 33 0.0 0.0 it 07_gas 2 33 0.0 0.0 it 08_non-res 2 33 0.0 0.0 it 09_hydro_pump 2 33 0.0 0.0 -it 01_solar 2 34 1.0 0.0 -it 02_wind_on 2 34 1.0 0.0 +it 01_solar 2 34 0.0 1.0 +it 02_wind_on 2 34 0.0 1.0 it 03_wind_off 2 34 0.0 0.0 it 04_res 2 34 0.0 0.0 it 05_nuclear 2 34 0.0 0.0 @@ -21473,8 +21473,8 @@ it 06_coal 2 34 0.0 0.0 it 07_gas 2 34 0.0 0.0 it 08_non-res 2 34 0.0 0.0 it 09_hydro_pump 2 34 0.0 0.0 -it 01_solar 2 35 1.0 0.0 -it 02_wind_on 2 35 1.0 0.0 +it 01_solar 2 35 0.0 1.0 +it 02_wind_on 2 35 0.0 1.0 it 03_wind_off 2 35 0.0 0.0 it 04_res 2 35 0.0 0.0 it 05_nuclear 2 35 0.0 0.0 @@ -21482,8 +21482,8 @@ it 06_coal 2 35 0.0 0.0 it 07_gas 2 35 0.0 0.0 it 08_non-res 2 35 0.0 0.0 it 09_hydro_pump 2 35 0.0 0.0 -it 01_solar 2 36 1.0 0.0 -it 02_wind_on 2 36 1.0 0.0 +it 01_solar 2 36 0.0 1.0 +it 02_wind_on 2 36 0.0 1.0 it 03_wind_off 2 36 0.0 0.0 it 04_res 2 36 0.0 0.0 it 05_nuclear 2 36 0.0 0.0 @@ -21491,8 +21491,8 @@ it 06_coal 2 36 0.0 0.0 it 07_gas 2 36 0.0 0.0 it 08_non-res 2 36 0.0 0.0 it 09_hydro_pump 2 36 0.0 0.0 -it 01_solar 2 37 1.0 0.0 -it 02_wind_on 2 37 1.0 0.0 +it 01_solar 2 37 0.0 1.0 +it 02_wind_on 2 37 0.0 1.0 it 03_wind_off 2 37 0.0 0.0 it 04_res 2 37 0.0 0.0 it 05_nuclear 2 37 0.0 0.0 @@ -21500,8 +21500,8 @@ it 06_coal 2 37 0.0 0.0 it 07_gas 2 37 0.0 0.0 it 08_non-res 2 37 0.0 0.0 it 09_hydro_pump 2 37 0.0 0.0 -it 01_solar 2 38 1.0 0.0 -it 02_wind_on 2 38 1.0 0.0 +it 01_solar 2 38 0.0 1.0 +it 02_wind_on 2 38 0.0 1.0 it 03_wind_off 2 38 0.0 0.0 it 04_res 2 38 0.0 0.0 it 05_nuclear 2 38 0.0 0.0 @@ -21509,8 +21509,8 @@ it 06_coal 2 38 0.0 0.0 it 07_gas 2 38 0.0 0.0 it 08_non-res 2 38 0.0 0.0 it 09_hydro_pump 2 38 0.0 0.0 -it 01_solar 2 39 1.0 0.0 -it 02_wind_on 2 39 1.0 0.0 +it 01_solar 2 39 0.0 1.0 +it 02_wind_on 2 39 0.0 1.0 it 03_wind_off 2 39 0.0 0.0 it 04_res 2 39 0.0 0.0 it 05_nuclear 2 39 0.0 0.0 @@ -21518,8 +21518,8 @@ it 06_coal 2 39 0.0 0.0 it 07_gas 2 39 0.0 0.0 it 08_non-res 2 39 0.0 0.0 it 09_hydro_pump 2 39 0.0 0.0 -it 01_solar 2 40 1.0 0.0 -it 02_wind_on 2 40 1.0 0.0 +it 01_solar 2 40 0.0 1.0 +it 02_wind_on 2 40 0.0 1.0 it 03_wind_off 2 40 0.0 0.0 it 04_res 2 40 0.0 0.0 it 05_nuclear 2 40 0.0 0.0 @@ -21527,8 +21527,8 @@ it 06_coal 2 40 0.0 0.0 it 07_gas 2 40 0.0 0.0 it 08_non-res 2 40 0.0 0.0 it 09_hydro_pump 2 40 0.0 0.0 -it 01_solar 2 41 1.0 0.0 -it 02_wind_on 2 41 1.0 0.0 +it 01_solar 2 41 0.0 1.0 +it 02_wind_on 2 41 0.0 1.0 it 03_wind_off 2 41 0.0 0.0 it 04_res 2 41 0.0 0.0 it 05_nuclear 2 41 0.0 0.0 @@ -21536,1149 +21536,1149 @@ it 06_coal 2 41 0.0 0.0 it 07_gas 2 41 0.0 0.0 it 08_non-res 2 41 0.0 0.0 it 09_hydro_pump 2 41 0.0 0.0 -it 01_solar 2 42 1.0 0.0 -it 02_wind_on 2 42 1.0 0.0 -it 03_wind_off 2 42 1.0 0.0 +it 01_solar 2 42 0.0 1.0 +it 02_wind_on 2 42 0.0 1.0 +it 03_wind_off 2 42 0.0 1.0 it 04_res 2 42 0.0 0.0 it 05_nuclear 2 42 0.0 0.0 it 06_coal 2 42 0.0 0.0 it 07_gas 2 42 0.0 0.0 it 08_non-res 2 42 0.0 0.0 it 09_hydro_pump 2 42 0.0 0.0 -it 01_solar 2 43 1.0 0.0 -it 02_wind_on 2 43 1.0 0.0 -it 03_wind_off 2 43 1.0 0.0 +it 01_solar 2 43 0.0 1.0 +it 02_wind_on 2 43 0.0 1.0 +it 03_wind_off 2 43 0.0 1.0 it 04_res 2 43 0.0 0.0 it 05_nuclear 2 43 0.0 0.0 it 06_coal 2 43 0.0 0.0 it 07_gas 2 43 0.0 0.0 it 08_non-res 2 43 0.0 0.0 it 09_hydro_pump 2 43 0.0 0.0 -it 01_solar 2 44 1.0 0.0 -it 02_wind_on 2 44 1.0 0.0 -it 03_wind_off 2 44 1.0 0.0 +it 01_solar 2 44 0.0 1.0 +it 02_wind_on 2 44 0.0 1.0 +it 03_wind_off 2 44 0.0 1.0 it 04_res 2 44 0.0 0.0 it 05_nuclear 2 44 0.0 0.0 it 06_coal 2 44 0.0 0.0 it 07_gas 2 44 0.0 0.0 it 08_non-res 2 44 0.0 0.0 it 09_hydro_pump 2 44 0.0 0.0 -it 01_solar 2 45 1.0 0.0 -it 02_wind_on 2 45 1.0 0.0 -it 03_wind_off 2 45 1.0 0.0 +it 01_solar 2 45 0.0 1.0 +it 02_wind_on 2 45 0.0 1.0 +it 03_wind_off 2 45 0.0 1.0 it 04_res 2 45 0.0 0.0 it 05_nuclear 2 45 0.0 0.0 it 06_coal 2 45 0.0 0.0 it 07_gas 2 45 0.0 0.0 it 08_non-res 2 45 0.0 0.0 it 09_hydro_pump 2 45 0.0 0.0 -it 01_solar 2 46 1.0 0.0 -it 02_wind_on 2 46 1.0 0.0 -it 03_wind_off 2 46 1.0 0.0 +it 01_solar 2 46 0.0 1.0 +it 02_wind_on 2 46 0.0 1.0 +it 03_wind_off 2 46 0.0 1.0 it 04_res 2 46 0.0 0.0 it 05_nuclear 2 46 0.0 0.0 it 06_coal 2 46 0.0 0.0 it 07_gas 2 46 0.0 0.0 it 08_non-res 2 46 0.0 0.0 it 09_hydro_pump 2 46 0.0 0.0 -it 01_solar 2 47 1.0 0.0 -it 02_wind_on 2 47 1.0 0.0 -it 03_wind_off 2 47 1.0 0.0 +it 01_solar 2 47 0.0 1.0 +it 02_wind_on 2 47 0.0 1.0 +it 03_wind_off 2 47 0.0 1.0 it 04_res 2 47 0.0 0.0 it 05_nuclear 2 47 0.0 0.0 it 06_coal 2 47 0.0 0.0 it 07_gas 2 47 0.0 0.0 it 08_non-res 2 47 0.0 0.0 it 09_hydro_pump 2 47 0.0 0.0 -it 01_solar 2 48 1.0 0.0 -it 02_wind_on 2 48 1.0 0.0 -it 03_wind_off 2 48 1.0 0.0 +it 01_solar 2 48 0.0 1.0 +it 02_wind_on 2 48 0.0 1.0 +it 03_wind_off 2 48 0.0 1.0 it 04_res 2 48 0.0 0.0 it 05_nuclear 2 48 0.0 0.0 it 06_coal 2 48 0.0 0.0 it 07_gas 2 48 0.0 0.0 it 08_non-res 2 48 0.0 0.0 it 09_hydro_pump 2 48 0.0 0.0 -it 01_solar 2 49 1.0 0.0 -it 02_wind_on 2 49 1.0 0.0 -it 03_wind_off 2 49 1.0 0.0 +it 01_solar 2 49 0.0 1.0 +it 02_wind_on 2 49 0.0 1.0 +it 03_wind_off 2 49 0.0 1.0 it 04_res 2 49 0.0 0.0 it 05_nuclear 2 49 0.0 0.0 it 06_coal 2 49 0.0 0.0 it 07_gas 2 49 0.0 0.0 it 08_non-res 2 49 0.0 0.0 it 09_hydro_pump 2 49 0.0 0.0 -it 01_solar 2 50 1.0 0.0 -it 02_wind_on 2 50 1.0 0.0 -it 03_wind_off 2 50 1.0 0.0 +it 01_solar 2 50 0.0 1.0 +it 02_wind_on 2 50 0.0 1.0 +it 03_wind_off 2 50 0.0 1.0 it 04_res 2 50 0.0 0.0 it 05_nuclear 2 50 0.0 0.0 it 06_coal 2 50 0.0 0.0 it 07_gas 2 50 0.0 0.0 it 08_non-res 2 50 0.0 0.0 it 09_hydro_pump 2 50 0.0 0.0 -it 01_solar 2 51 1.0 0.0 -it 02_wind_on 2 51 1.0 0.0 -it 03_wind_off 2 51 1.0 0.0 +it 01_solar 2 51 0.0 1.0 +it 02_wind_on 2 51 0.0 1.0 +it 03_wind_off 2 51 0.0 1.0 it 04_res 2 51 0.0 0.0 it 05_nuclear 2 51 0.0 0.0 it 06_coal 2 51 0.0 0.0 it 07_gas 2 51 0.0 0.0 it 08_non-res 2 51 0.0 0.0 it 09_hydro_pump 2 51 0.0 0.0 -it 01_solar 2 52 1.0 0.0 -it 02_wind_on 2 52 1.0 0.0 -it 03_wind_off 2 52 1.0 0.0 +it 01_solar 2 52 0.0 1.0 +it 02_wind_on 2 52 0.0 1.0 +it 03_wind_off 2 52 0.0 1.0 it 04_res 2 52 0.0 0.0 it 05_nuclear 2 52 0.0 0.0 it 06_coal 2 52 0.0 0.0 it 07_gas 2 52 0.0 0.0 it 08_non-res 2 52 0.0 0.0 it 09_hydro_pump 2 52 0.0 0.0 -it 01_solar 2 53 1.0 0.0 -it 02_wind_on 2 53 1.0 0.0 -it 03_wind_off 2 53 1.0 0.0 +it 01_solar 2 53 0.0 1.0 +it 02_wind_on 2 53 0.0 1.0 +it 03_wind_off 2 53 0.0 1.0 it 04_res 2 53 0.0 0.0 it 05_nuclear 2 53 0.0 0.0 it 06_coal 2 53 0.0 0.0 it 07_gas 2 53 0.0 0.0 it 08_non-res 2 53 0.0 0.0 it 09_hydro_pump 2 53 0.0 0.0 -it 01_solar 2 54 1.0 0.0 -it 02_wind_on 2 54 1.0 0.0 -it 03_wind_off 2 54 1.0 0.0 +it 01_solar 2 54 0.0 1.0 +it 02_wind_on 2 54 0.0 1.0 +it 03_wind_off 2 54 0.0 1.0 it 04_res 2 54 0.0 0.0 it 05_nuclear 2 54 0.0 0.0 it 06_coal 2 54 0.0 0.0 it 07_gas 2 54 0.0 0.0 it 08_non-res 2 54 0.0 0.0 it 09_hydro_pump 2 54 0.0 0.0 -it 01_solar 2 55 1.0 0.0 -it 02_wind_on 2 55 1.0 0.0 -it 03_wind_off 2 55 1.0 0.0 +it 01_solar 2 55 0.0 1.0 +it 02_wind_on 2 55 0.0 1.0 +it 03_wind_off 2 55 0.0 1.0 it 04_res 2 55 0.0 0.0 it 05_nuclear 2 55 0.0 0.0 it 06_coal 2 55 0.0 0.0 it 07_gas 2 55 0.0 0.0 it 08_non-res 2 55 0.0 0.0 it 09_hydro_pump 2 55 0.0 0.0 -it 01_solar 2 56 1.0 0.0 -it 02_wind_on 2 56 1.0 0.0 -it 03_wind_off 2 56 1.0 0.0 +it 01_solar 2 56 0.0 1.0 +it 02_wind_on 2 56 0.0 1.0 +it 03_wind_off 2 56 0.0 1.0 it 04_res 2 56 0.0 0.0 it 05_nuclear 2 56 0.0 0.0 it 06_coal 2 56 0.0 0.0 it 07_gas 2 56 0.0 0.0 it 08_non-res 2 56 0.0 0.0 it 09_hydro_pump 2 56 0.0 0.0 -it 01_solar 2 57 1.0 0.0 -it 02_wind_on 2 57 1.0 0.0 -it 03_wind_off 2 57 1.0 0.0 +it 01_solar 2 57 0.0 1.0 +it 02_wind_on 2 57 0.0 1.0 +it 03_wind_off 2 57 0.0 1.0 it 04_res 2 57 0.0 0.0 it 05_nuclear 2 57 0.0 0.0 it 06_coal 2 57 0.0 0.0 it 07_gas 2 57 0.0 0.0 it 08_non-res 2 57 0.0 0.0 it 09_hydro_pump 2 57 0.0 0.0 -it 01_solar 2 58 1.0 0.0 -it 02_wind_on 2 58 1.0 0.0 -it 03_wind_off 2 58 1.0 0.0 +it 01_solar 2 58 0.0 1.0 +it 02_wind_on 2 58 0.0 1.0 +it 03_wind_off 2 58 0.0 1.0 it 04_res 2 58 0.0 0.0 it 05_nuclear 2 58 0.0 0.0 it 06_coal 2 58 0.0 0.0 it 07_gas 2 58 0.0 0.0 it 08_non-res 2 58 0.0 0.0 it 09_hydro_pump 2 58 0.0 0.0 -it 01_solar 2 59 1.0 0.0 -it 02_wind_on 2 59 1.0 0.0 -it 03_wind_off 2 59 1.0 0.0 +it 01_solar 2 59 0.0 1.0 +it 02_wind_on 2 59 0.0 1.0 +it 03_wind_off 2 59 0.0 1.0 it 04_res 2 59 0.0 0.0 it 05_nuclear 2 59 0.0 0.0 it 06_coal 2 59 0.0 0.0 it 07_gas 2 59 0.0 0.0 it 08_non-res 2 59 0.0 0.0 it 09_hydro_pump 2 59 0.0 0.0 -it 01_solar 2 60 1.0 0.0 -it 02_wind_on 2 60 1.0 0.0 -it 03_wind_off 2 60 1.0 0.0 +it 01_solar 2 60 0.0 1.0 +it 02_wind_on 2 60 0.0 1.0 +it 03_wind_off 2 60 0.0 1.0 it 04_res 2 60 0.0 0.0 it 05_nuclear 2 60 0.0 0.0 it 06_coal 2 60 0.0 0.0 it 07_gas 2 60 0.0 0.0 it 08_non-res 2 60 0.0 0.0 it 09_hydro_pump 2 60 0.0 0.0 -it 01_solar 2 61 1.0 0.0 -it 02_wind_on 2 61 1.0 0.0 -it 03_wind_off 2 61 1.0 0.0 +it 01_solar 2 61 0.0 1.0 +it 02_wind_on 2 61 0.0 1.0 +it 03_wind_off 2 61 0.0 1.0 it 04_res 2 61 0.0 0.0 it 05_nuclear 2 61 0.0 0.0 it 06_coal 2 61 0.0 0.0 it 07_gas 2 61 0.0 0.0 it 08_non-res 2 61 0.0 0.0 it 09_hydro_pump 2 61 0.0 0.0 -it 01_solar 2 62 1.0 0.0 -it 02_wind_on 2 62 1.0 0.0 -it 03_wind_off 2 62 1.0 0.0 -it 04_res 2 62 1.0 0.0 +it 01_solar 2 62 0.0 1.0 +it 02_wind_on 2 62 0.0 1.0 +it 03_wind_off 2 62 0.0 1.0 +it 04_res 2 62 0.0 1.0 it 05_nuclear 2 62 0.0 0.0 it 06_coal 2 62 0.0 0.0 it 07_gas 2 62 0.0 0.0 it 08_non-res 2 62 0.0 0.0 it 09_hydro_pump 2 62 0.0 0.0 -it 01_solar 2 63 1.0 0.0 -it 02_wind_on 2 63 1.0 0.0 -it 03_wind_off 2 63 1.0 0.0 -it 04_res 2 63 1.0 0.0 +it 01_solar 2 63 0.0 1.0 +it 02_wind_on 2 63 0.0 1.0 +it 03_wind_off 2 63 0.0 1.0 +it 04_res 2 63 0.0 1.0 it 05_nuclear 2 63 0.0 0.0 it 06_coal 2 63 0.0 0.0 it 07_gas 2 63 0.0 0.0 it 08_non-res 2 63 0.0 0.0 it 09_hydro_pump 2 63 0.0 0.0 -it 01_solar 2 64 1.0 0.0 -it 02_wind_on 2 64 1.0 0.0 -it 03_wind_off 2 64 1.0 0.0 -it 04_res 2 64 1.0 0.0 +it 01_solar 2 64 0.0 1.0 +it 02_wind_on 2 64 0.0 1.0 +it 03_wind_off 2 64 0.0 1.0 +it 04_res 2 64 0.0 1.0 it 05_nuclear 2 64 0.0 0.0 it 06_coal 2 64 0.0 0.0 it 07_gas 2 64 0.0 0.0 it 08_non-res 2 64 0.0 0.0 it 09_hydro_pump 2 64 0.0 0.0 -it 01_solar 2 65 1.0 0.0 -it 02_wind_on 2 65 1.0 0.0 -it 03_wind_off 2 65 1.0 0.0 -it 04_res 2 65 1.0 0.0 +it 01_solar 2 65 0.0 1.0 +it 02_wind_on 2 65 0.0 1.0 +it 03_wind_off 2 65 0.0 1.0 +it 04_res 2 65 0.0 1.0 it 05_nuclear 2 65 0.0 0.0 it 06_coal 2 65 0.0 0.0 it 07_gas 2 65 0.0 0.0 it 08_non-res 2 65 0.0 0.0 it 09_hydro_pump 2 65 0.0 0.0 -it 01_solar 2 66 1.0 0.0 -it 02_wind_on 2 66 1.0 0.0 -it 03_wind_off 2 66 1.0 0.0 -it 04_res 2 66 1.0 0.0 +it 01_solar 2 66 0.0 1.0 +it 02_wind_on 2 66 0.0 1.0 +it 03_wind_off 2 66 0.0 1.0 +it 04_res 2 66 0.0 1.0 it 05_nuclear 2 66 0.0 0.0 it 06_coal 2 66 0.0 0.0 it 07_gas 2 66 0.0 0.0 it 08_non-res 2 66 0.0 0.0 it 09_hydro_pump 2 66 0.0 0.0 -it 01_solar 2 67 1.0 0.0 -it 02_wind_on 2 67 1.0 0.0 -it 03_wind_off 2 67 1.0 0.0 -it 04_res 2 67 1.0 0.0 +it 01_solar 2 67 0.0 1.0 +it 02_wind_on 2 67 0.0 1.0 +it 03_wind_off 2 67 0.0 1.0 +it 04_res 2 67 0.0 1.0 it 05_nuclear 2 67 0.0 0.0 it 06_coal 2 67 0.0 0.0 it 07_gas 2 67 0.0 0.0 it 08_non-res 2 67 0.0 0.0 it 09_hydro_pump 2 67 0.0 0.0 -it 01_solar 2 68 1.0 0.0 -it 02_wind_on 2 68 1.0 0.0 -it 03_wind_off 2 68 1.0 0.0 -it 04_res 2 68 1.0 0.0 +it 01_solar 2 68 0.0 1.0 +it 02_wind_on 2 68 0.0 1.0 +it 03_wind_off 2 68 0.0 1.0 +it 04_res 2 68 0.0 1.0 it 05_nuclear 2 68 0.0 0.0 it 06_coal 2 68 0.0 0.0 it 07_gas 2 68 0.0 0.0 it 08_non-res 2 68 0.0 0.0 it 09_hydro_pump 2 68 0.0 0.0 -it 01_solar 2 69 1.0 0.0 -it 02_wind_on 2 69 1.0 0.0 -it 03_wind_off 2 69 1.0 0.0 -it 04_res 2 69 1.0 0.0 +it 01_solar 2 69 0.0 1.0 +it 02_wind_on 2 69 0.0 1.0 +it 03_wind_off 2 69 0.0 1.0 +it 04_res 2 69 0.0 1.0 it 05_nuclear 2 69 0.0 0.0 it 06_coal 2 69 0.0 0.0 it 07_gas 2 69 0.0 0.0 it 08_non-res 2 69 0.0 0.0 it 09_hydro_pump 2 69 0.0 0.0 -it 01_solar 2 70 1.0 0.0 -it 02_wind_on 2 70 1.0 0.0 -it 03_wind_off 2 70 1.0 0.0 -it 04_res 2 70 1.0 0.0 +it 01_solar 2 70 0.0 1.0 +it 02_wind_on 2 70 0.0 1.0 +it 03_wind_off 2 70 0.0 1.0 +it 04_res 2 70 0.0 1.0 it 05_nuclear 2 70 0.0 0.0 it 06_coal 2 70 0.0 0.0 it 07_gas 2 70 0.0 0.0 it 08_non-res 2 70 0.0 0.0 it 09_hydro_pump 2 70 0.0 0.0 -it 01_solar 2 71 1.0 0.0 -it 02_wind_on 2 71 1.0 0.0 -it 03_wind_off 2 71 1.0 0.0 -it 04_res 2 71 1.0 0.0 +it 01_solar 2 71 0.0 1.0 +it 02_wind_on 2 71 0.0 1.0 +it 03_wind_off 2 71 0.0 1.0 +it 04_res 2 71 0.0 1.0 it 05_nuclear 2 71 0.0 0.0 it 06_coal 2 71 0.0 0.0 it 07_gas 2 71 0.0 0.0 it 08_non-res 2 71 0.0 0.0 it 09_hydro_pump 2 71 0.0 0.0 -it 01_solar 2 72 1.0 0.0 -it 02_wind_on 2 72 1.0 0.0 -it 03_wind_off 2 72 1.0 0.0 -it 04_res 2 72 1.0 0.0 +it 01_solar 2 72 0.0 1.0 +it 02_wind_on 2 72 0.0 1.0 +it 03_wind_off 2 72 0.0 1.0 +it 04_res 2 72 0.0 1.0 it 05_nuclear 2 72 0.0 0.0 it 06_coal 2 72 0.0 0.0 it 07_gas 2 72 0.0 0.0 it 08_non-res 2 72 0.0 0.0 it 09_hydro_pump 2 72 0.0 0.0 -it 01_solar 2 73 1.0 0.0 -it 02_wind_on 2 73 1.0 0.0 -it 03_wind_off 2 73 1.0 0.0 -it 04_res 2 73 1.0 0.0 +it 01_solar 2 73 0.0 1.0 +it 02_wind_on 2 73 0.0 1.0 +it 03_wind_off 2 73 0.0 1.0 +it 04_res 2 73 0.0 1.0 it 05_nuclear 2 73 0.0 0.0 it 06_coal 2 73 0.0 0.0 it 07_gas 2 73 0.0 0.0 it 08_non-res 2 73 0.0 0.0 it 09_hydro_pump 2 73 0.0 0.0 -it 01_solar 2 74 1.0 0.0 -it 02_wind_on 2 74 1.0 0.0 -it 03_wind_off 2 74 1.0 0.0 -it 04_res 2 74 1.0 0.0 +it 01_solar 2 74 0.0 1.0 +it 02_wind_on 2 74 0.0 1.0 +it 03_wind_off 2 74 0.0 1.0 +it 04_res 2 74 0.0 1.0 it 05_nuclear 2 74 0.0 0.0 it 06_coal 2 74 0.0 0.0 it 07_gas 2 74 0.0 0.0 it 08_non-res 2 74 0.0 0.0 it 09_hydro_pump 2 74 0.0 0.0 -it 01_solar 2 75 1.0 0.0 -it 02_wind_on 2 75 1.0 0.0 -it 03_wind_off 2 75 1.0 0.0 -it 04_res 2 75 1.0 0.0 +it 01_solar 2 75 0.0 1.0 +it 02_wind_on 2 75 0.0 1.0 +it 03_wind_off 2 75 0.0 1.0 +it 04_res 2 75 0.0 1.0 it 05_nuclear 2 75 0.0 0.0 it 06_coal 2 75 0.0 0.0 it 07_gas 2 75 0.0 0.0 it 08_non-res 2 75 0.0 0.0 it 09_hydro_pump 2 75 0.0 0.0 -it 01_solar 2 76 1.0 0.0 -it 02_wind_on 2 76 1.0 0.0 -it 03_wind_off 2 76 1.0 0.0 -it 04_res 2 76 1.0 0.0 +it 01_solar 2 76 0.0 1.0 +it 02_wind_on 2 76 0.0 1.0 +it 03_wind_off 2 76 0.0 1.0 +it 04_res 2 76 0.0 1.0 it 05_nuclear 2 76 0.0 0.0 it 06_coal 2 76 0.0 0.0 it 07_gas 2 76 0.0 0.0 it 08_non-res 2 76 0.0 0.0 it 09_hydro_pump 2 76 0.0 0.0 -it 01_solar 2 77 1.0 0.0 -it 02_wind_on 2 77 1.0 0.0 -it 03_wind_off 2 77 1.0 0.0 -it 04_res 2 77 1.0 0.0 +it 01_solar 2 77 0.0 1.0 +it 02_wind_on 2 77 0.0 1.0 +it 03_wind_off 2 77 0.0 1.0 +it 04_res 2 77 0.0 1.0 it 05_nuclear 2 77 0.0 0.0 it 06_coal 2 77 0.0 0.0 it 07_gas 2 77 0.0 0.0 it 08_non-res 2 77 0.0 0.0 it 09_hydro_pump 2 77 0.0 0.0 -it 01_solar 2 78 1.0 0.0 -it 02_wind_on 2 78 1.0 0.0 -it 03_wind_off 2 78 1.0 0.0 -it 04_res 2 78 1.0 0.0 +it 01_solar 2 78 0.0 1.0 +it 02_wind_on 2 78 0.0 1.0 +it 03_wind_off 2 78 0.0 1.0 +it 04_res 2 78 0.0 1.0 it 05_nuclear 2 78 0.0 0.0 it 06_coal 2 78 0.0 0.0 it 07_gas 2 78 0.0 0.0 it 08_non-res 2 78 0.0 0.0 it 09_hydro_pump 2 78 0.0 0.0 -it 01_solar 2 79 1.0 0.0 -it 02_wind_on 2 79 1.0 0.0 -it 03_wind_off 2 79 1.0 0.0 -it 04_res 2 79 1.0 0.0 +it 01_solar 2 79 0.0 1.0 +it 02_wind_on 2 79 0.0 1.0 +it 03_wind_off 2 79 0.0 1.0 +it 04_res 2 79 0.0 1.0 it 05_nuclear 2 79 0.0 0.0 it 06_coal 2 79 0.0 0.0 it 07_gas 2 79 0.0 0.0 it 08_non-res 2 79 0.0 0.0 it 09_hydro_pump 2 79 0.0 0.0 -it 01_solar 2 80 1.0 0.0 -it 02_wind_on 2 80 1.0 0.0 -it 03_wind_off 2 80 1.0 0.0 -it 04_res 2 80 1.0 0.0 +it 01_solar 2 80 0.0 1.0 +it 02_wind_on 2 80 0.0 1.0 +it 03_wind_off 2 80 0.0 1.0 +it 04_res 2 80 0.0 1.0 it 05_nuclear 2 80 0.0 0.0 it 06_coal 2 80 0.0 0.0 it 07_gas 2 80 0.0 0.0 it 08_non-res 2 80 0.0 0.0 it 09_hydro_pump 2 80 0.0 0.0 -it 01_solar 2 81 1.0 0.0 -it 02_wind_on 2 81 1.0 0.0 -it 03_wind_off 2 81 1.0 0.0 -it 04_res 2 81 1.0 0.0 +it 01_solar 2 81 0.0 1.0 +it 02_wind_on 2 81 0.0 1.0 +it 03_wind_off 2 81 0.0 1.0 +it 04_res 2 81 0.0 1.0 it 05_nuclear 2 81 0.0 0.0 it 06_coal 2 81 0.0 0.0 it 07_gas 2 81 0.0 0.0 it 08_non-res 2 81 0.0 0.0 it 09_hydro_pump 2 81 0.0 0.0 -it 01_solar 2 82 1.0 0.0 -it 02_wind_on 2 82 1.0 0.0 -it 03_wind_off 2 82 1.0 0.0 -it 04_res 2 82 1.0 0.0 -it 05_nuclear 2 82 1.0 0.0 +it 01_solar 2 82 0.0 1.0 +it 02_wind_on 2 82 0.0 1.0 +it 03_wind_off 2 82 0.0 1.0 +it 04_res 2 82 0.0 1.0 +it 05_nuclear 2 82 0.0 1.0 it 06_coal 2 82 0.0 0.0 it 07_gas 2 82 0.0 0.0 it 08_non-res 2 82 0.0 0.0 it 09_hydro_pump 2 82 0.0 0.0 -it 01_solar 2 83 1.0 0.0 -it 02_wind_on 2 83 1.0 0.0 -it 03_wind_off 2 83 1.0 0.0 -it 04_res 2 83 1.0 0.0 -it 05_nuclear 2 83 1.0 0.0 +it 01_solar 2 83 0.0 1.0 +it 02_wind_on 2 83 0.0 1.0 +it 03_wind_off 2 83 0.0 1.0 +it 04_res 2 83 0.0 1.0 +it 05_nuclear 2 83 0.0 1.0 it 06_coal 2 83 0.0 0.0 it 07_gas 2 83 0.0 0.0 it 08_non-res 2 83 0.0 0.0 it 09_hydro_pump 2 83 0.0 0.0 -it 01_solar 2 84 1.0 0.0 -it 02_wind_on 2 84 1.0 0.0 -it 03_wind_off 2 84 1.0 0.0 -it 04_res 2 84 1.0 0.0 -it 05_nuclear 2 84 1.0 0.0 +it 01_solar 2 84 0.0 1.0 +it 02_wind_on 2 84 0.0 1.0 +it 03_wind_off 2 84 0.0 1.0 +it 04_res 2 84 0.0 1.0 +it 05_nuclear 2 84 0.0 1.0 it 06_coal 2 84 0.0 0.0 it 07_gas 2 84 0.0 0.0 it 08_non-res 2 84 0.0 0.0 it 09_hydro_pump 2 84 0.0 0.0 -it 01_solar 2 85 1.0 0.0 -it 02_wind_on 2 85 1.0 0.0 -it 03_wind_off 2 85 1.0 0.0 -it 04_res 2 85 1.0 0.0 -it 05_nuclear 2 85 1.0 0.0 +it 01_solar 2 85 0.0 1.0 +it 02_wind_on 2 85 0.0 1.0 +it 03_wind_off 2 85 0.0 1.0 +it 04_res 2 85 0.0 1.0 +it 05_nuclear 2 85 0.0 1.0 it 06_coal 2 85 0.0 0.0 it 07_gas 2 85 0.0 0.0 it 08_non-res 2 85 0.0 0.0 it 09_hydro_pump 2 85 0.0 0.0 -it 01_solar 2 86 1.0 0.0 -it 02_wind_on 2 86 1.0 0.0 -it 03_wind_off 2 86 1.0 0.0 -it 04_res 2 86 1.0 0.0 -it 05_nuclear 2 86 1.0 0.0 +it 01_solar 2 86 0.0 1.0 +it 02_wind_on 2 86 0.0 1.0 +it 03_wind_off 2 86 0.0 1.0 +it 04_res 2 86 0.0 1.0 +it 05_nuclear 2 86 0.0 1.0 it 06_coal 2 86 0.0 0.0 it 07_gas 2 86 0.0 0.0 it 08_non-res 2 86 0.0 0.0 it 09_hydro_pump 2 86 0.0 0.0 -it 01_solar 2 87 1.0 0.0 -it 02_wind_on 2 87 1.0 0.0 -it 03_wind_off 2 87 1.0 0.0 -it 04_res 2 87 1.0 0.0 -it 05_nuclear 2 87 1.0 0.0 +it 01_solar 2 87 0.0 1.0 +it 02_wind_on 2 87 0.0 1.0 +it 03_wind_off 2 87 0.0 1.0 +it 04_res 2 87 0.0 1.0 +it 05_nuclear 2 87 0.0 1.0 it 06_coal 2 87 0.0 0.0 it 07_gas 2 87 0.0 0.0 it 08_non-res 2 87 0.0 0.0 it 09_hydro_pump 2 87 0.0 0.0 -it 01_solar 2 88 1.0 0.0 -it 02_wind_on 2 88 1.0 0.0 -it 03_wind_off 2 88 1.0 0.0 -it 04_res 2 88 1.0 0.0 -it 05_nuclear 2 88 1.0 0.0 +it 01_solar 2 88 0.0 1.0 +it 02_wind_on 2 88 0.0 1.0 +it 03_wind_off 2 88 0.0 1.0 +it 04_res 2 88 0.0 1.0 +it 05_nuclear 2 88 0.0 1.0 it 06_coal 2 88 0.0 0.0 it 07_gas 2 88 0.0 0.0 it 08_non-res 2 88 0.0 0.0 it 09_hydro_pump 2 88 0.0 0.0 -it 01_solar 2 89 1.0 0.0 -it 02_wind_on 2 89 1.0 0.0 -it 03_wind_off 2 89 1.0 0.0 -it 04_res 2 89 1.0 0.0 -it 05_nuclear 2 89 1.0 0.0 +it 01_solar 2 89 0.0 1.0 +it 02_wind_on 2 89 0.0 1.0 +it 03_wind_off 2 89 0.0 1.0 +it 04_res 2 89 0.0 1.0 +it 05_nuclear 2 89 0.0 1.0 it 06_coal 2 89 0.0 0.0 it 07_gas 2 89 0.0 0.0 it 08_non-res 2 89 0.0 0.0 it 09_hydro_pump 2 89 0.0 0.0 -it 01_solar 2 90 1.0 0.0 -it 02_wind_on 2 90 1.0 0.0 -it 03_wind_off 2 90 1.0 0.0 -it 04_res 2 90 1.0 0.0 -it 05_nuclear 2 90 1.0 0.0 +it 01_solar 2 90 0.0 1.0 +it 02_wind_on 2 90 0.0 1.0 +it 03_wind_off 2 90 0.0 1.0 +it 04_res 2 90 0.0 1.0 +it 05_nuclear 2 90 0.0 1.0 it 06_coal 2 90 0.0 0.0 it 07_gas 2 90 0.0 0.0 it 08_non-res 2 90 0.0 0.0 it 09_hydro_pump 2 90 0.0 0.0 -it 01_solar 2 91 1.0 0.0 -it 02_wind_on 2 91 1.0 0.0 -it 03_wind_off 2 91 1.0 0.0 -it 04_res 2 91 1.0 0.0 -it 05_nuclear 2 91 1.0 0.0 +it 01_solar 2 91 0.0 1.0 +it 02_wind_on 2 91 0.0 1.0 +it 03_wind_off 2 91 0.0 1.0 +it 04_res 2 91 0.0 1.0 +it 05_nuclear 2 91 0.0 1.0 it 06_coal 2 91 0.0 0.0 it 07_gas 2 91 0.0 0.0 it 08_non-res 2 91 0.0 0.0 it 09_hydro_pump 2 91 0.0 0.0 -it 01_solar 2 92 1.0 0.0 -it 02_wind_on 2 92 1.0 0.0 -it 03_wind_off 2 92 1.0 0.0 -it 04_res 2 92 1.0 0.0 -it 05_nuclear 2 92 1.0 0.0 +it 01_solar 2 92 0.0 1.0 +it 02_wind_on 2 92 0.0 1.0 +it 03_wind_off 2 92 0.0 1.0 +it 04_res 2 92 0.0 1.0 +it 05_nuclear 2 92 0.0 1.0 it 06_coal 2 92 0.0 0.0 it 07_gas 2 92 0.0 0.0 it 08_non-res 2 92 0.0 0.0 it 09_hydro_pump 2 92 0.0 0.0 -it 01_solar 2 93 1.0 0.0 -it 02_wind_on 2 93 1.0 0.0 -it 03_wind_off 2 93 1.0 0.0 -it 04_res 2 93 1.0 0.0 -it 05_nuclear 2 93 1.0 0.0 +it 01_solar 2 93 0.0 1.0 +it 02_wind_on 2 93 0.0 1.0 +it 03_wind_off 2 93 0.0 1.0 +it 04_res 2 93 0.0 1.0 +it 05_nuclear 2 93 0.0 1.0 it 06_coal 2 93 0.0 0.0 it 07_gas 2 93 0.0 0.0 it 08_non-res 2 93 0.0 0.0 it 09_hydro_pump 2 93 0.0 0.0 -it 01_solar 2 94 1.0 0.0 -it 02_wind_on 2 94 1.0 0.0 -it 03_wind_off 2 94 1.0 0.0 -it 04_res 2 94 1.0 0.0 -it 05_nuclear 2 94 1.0 0.0 +it 01_solar 2 94 0.0 1.0 +it 02_wind_on 2 94 0.0 1.0 +it 03_wind_off 2 94 0.0 1.0 +it 04_res 2 94 0.0 1.0 +it 05_nuclear 2 94 0.0 1.0 it 06_coal 2 94 0.0 0.0 it 07_gas 2 94 0.0 0.0 it 08_non-res 2 94 0.0 0.0 it 09_hydro_pump 2 94 0.0 0.0 -it 01_solar 2 95 1.0 0.0 -it 02_wind_on 2 95 1.0 0.0 -it 03_wind_off 2 95 1.0 0.0 -it 04_res 2 95 1.0 0.0 -it 05_nuclear 2 95 1.0 0.0 +it 01_solar 2 95 0.0 1.0 +it 02_wind_on 2 95 0.0 1.0 +it 03_wind_off 2 95 0.0 1.0 +it 04_res 2 95 0.0 1.0 +it 05_nuclear 2 95 0.0 1.0 it 06_coal 2 95 0.0 0.0 it 07_gas 2 95 0.0 0.0 it 08_non-res 2 95 0.0 0.0 it 09_hydro_pump 2 95 0.0 0.0 -it 01_solar 2 96 1.0 0.0 -it 02_wind_on 2 96 1.0 0.0 -it 03_wind_off 2 96 1.0 0.0 -it 04_res 2 96 1.0 0.0 -it 05_nuclear 2 96 1.0 0.0 +it 01_solar 2 96 0.0 1.0 +it 02_wind_on 2 96 0.0 1.0 +it 03_wind_off 2 96 0.0 1.0 +it 04_res 2 96 0.0 1.0 +it 05_nuclear 2 96 0.0 1.0 it 06_coal 2 96 0.0 0.0 it 07_gas 2 96 0.0 0.0 it 08_non-res 2 96 0.0 0.0 it 09_hydro_pump 2 96 0.0 0.0 -it 01_solar 2 97 1.0 0.0 -it 02_wind_on 2 97 1.0 0.0 -it 03_wind_off 2 97 1.0 0.0 -it 04_res 2 97 1.0 0.0 -it 05_nuclear 2 97 1.0 0.0 +it 01_solar 2 97 0.0 1.0 +it 02_wind_on 2 97 0.0 1.0 +it 03_wind_off 2 97 0.0 1.0 +it 04_res 2 97 0.0 1.0 +it 05_nuclear 2 97 0.0 1.0 it 06_coal 2 97 0.0 0.0 it 07_gas 2 97 0.0 0.0 it 08_non-res 2 97 0.0 0.0 it 09_hydro_pump 2 97 0.0 0.0 -it 01_solar 2 98 1.0 0.0 -it 02_wind_on 2 98 1.0 0.0 -it 03_wind_off 2 98 1.0 0.0 -it 04_res 2 98 1.0 0.0 -it 05_nuclear 2 98 1.0 0.0 +it 01_solar 2 98 0.0 1.0 +it 02_wind_on 2 98 0.0 1.0 +it 03_wind_off 2 98 0.0 1.0 +it 04_res 2 98 0.0 1.0 +it 05_nuclear 2 98 0.0 1.0 it 06_coal 2 98 0.0 0.0 it 07_gas 2 98 0.0 0.0 it 08_non-res 2 98 0.0 0.0 it 09_hydro_pump 2 98 0.0 0.0 -it 01_solar 2 99 1.0 0.0 -it 02_wind_on 2 99 1.0 0.0 -it 03_wind_off 2 99 1.0 0.0 -it 04_res 2 99 1.0 0.0 -it 05_nuclear 2 99 1.0 0.0 +it 01_solar 2 99 0.0 1.0 +it 02_wind_on 2 99 0.0 1.0 +it 03_wind_off 2 99 0.0 1.0 +it 04_res 2 99 0.0 1.0 +it 05_nuclear 2 99 0.0 1.0 it 06_coal 2 99 0.0 0.0 it 07_gas 2 99 0.0 0.0 it 08_non-res 2 99 0.0 0.0 it 09_hydro_pump 2 99 0.0 0.0 -it 01_solar 2 100 1.0 0.0 -it 02_wind_on 2 100 1.0 0.0 -it 03_wind_off 2 100 1.0 0.0 -it 04_res 2 100 1.0 0.0 -it 05_nuclear 2 100 1.0 0.0 +it 01_solar 2 100 0.0 1.0 +it 02_wind_on 2 100 0.0 1.0 +it 03_wind_off 2 100 0.0 1.0 +it 04_res 2 100 0.0 1.0 +it 05_nuclear 2 100 0.0 1.0 it 06_coal 2 100 0.0 0.0 it 07_gas 2 100 0.0 0.0 it 08_non-res 2 100 0.0 0.0 it 09_hydro_pump 2 100 0.0 0.0 -it 01_solar 2 101 1.0 0.0 -it 02_wind_on 2 101 1.0 0.0 -it 03_wind_off 2 101 1.0 0.0 -it 04_res 2 101 1.0 0.0 -it 05_nuclear 2 101 1.0 0.0 +it 01_solar 2 101 0.0 1.0 +it 02_wind_on 2 101 0.0 1.0 +it 03_wind_off 2 101 0.0 1.0 +it 04_res 2 101 0.0 1.0 +it 05_nuclear 2 101 0.0 1.0 it 06_coal 2 101 0.0 0.0 it 07_gas 2 101 0.0 0.0 it 08_non-res 2 101 0.0 0.0 it 09_hydro_pump 2 101 0.0 0.0 -it 01_solar 2 102 1.0 0.0 -it 02_wind_on 2 102 1.0 0.0 -it 03_wind_off 2 102 1.0 0.0 -it 04_res 2 102 1.0 0.0 -it 05_nuclear 2 102 1.0 0.0 -it 06_coal 2 102 1.0 0.0 +it 01_solar 2 102 0.0 1.0 +it 02_wind_on 2 102 0.0 1.0 +it 03_wind_off 2 102 0.0 1.0 +it 04_res 2 102 0.0 1.0 +it 05_nuclear 2 102 0.0 1.0 +it 06_coal 2 102 0.0 1.0 it 07_gas 2 102 0.0 0.0 it 08_non-res 2 102 0.0 0.0 it 09_hydro_pump 2 102 0.0 0.0 -it 01_solar 2 103 1.0 0.0 -it 02_wind_on 2 103 1.0 0.0 -it 03_wind_off 2 103 1.0 0.0 -it 04_res 2 103 1.0 0.0 -it 05_nuclear 2 103 1.0 0.0 -it 06_coal 2 103 1.0 0.0 +it 01_solar 2 103 0.0 1.0 +it 02_wind_on 2 103 0.0 1.0 +it 03_wind_off 2 103 0.0 1.0 +it 04_res 2 103 0.0 1.0 +it 05_nuclear 2 103 0.0 1.0 +it 06_coal 2 103 0.0 1.0 it 07_gas 2 103 0.0 0.0 it 08_non-res 2 103 0.0 0.0 it 09_hydro_pump 2 103 0.0 0.0 -it 01_solar 2 104 1.0 0.0 -it 02_wind_on 2 104 1.0 0.0 -it 03_wind_off 2 104 1.0 0.0 -it 04_res 2 104 1.0 0.0 -it 05_nuclear 2 104 1.0 0.0 -it 06_coal 2 104 1.0 0.0 +it 01_solar 2 104 0.0 1.0 +it 02_wind_on 2 104 0.0 1.0 +it 03_wind_off 2 104 0.0 1.0 +it 04_res 2 104 0.0 1.0 +it 05_nuclear 2 104 0.0 1.0 +it 06_coal 2 104 0.0 1.0 it 07_gas 2 104 0.0 0.0 it 08_non-res 2 104 0.0 0.0 it 09_hydro_pump 2 104 0.0 0.0 -it 01_solar 2 105 1.0 0.0 -it 02_wind_on 2 105 1.0 0.0 -it 03_wind_off 2 105 1.0 0.0 -it 04_res 2 105 1.0 0.0 -it 05_nuclear 2 105 1.0 0.0 -it 06_coal 2 105 1.0 0.0 +it 01_solar 2 105 0.0 1.0 +it 02_wind_on 2 105 0.0 1.0 +it 03_wind_off 2 105 0.0 1.0 +it 04_res 2 105 0.0 1.0 +it 05_nuclear 2 105 0.0 1.0 +it 06_coal 2 105 0.0 1.0 it 07_gas 2 105 0.0 0.0 it 08_non-res 2 105 0.0 0.0 it 09_hydro_pump 2 105 0.0 0.0 -it 01_solar 2 106 1.0 0.0 -it 02_wind_on 2 106 1.0 0.0 -it 03_wind_off 2 106 1.0 0.0 -it 04_res 2 106 1.0 0.0 -it 05_nuclear 2 106 1.0 0.0 -it 06_coal 2 106 1.0 0.0 +it 01_solar 2 106 0.0 1.0 +it 02_wind_on 2 106 0.0 1.0 +it 03_wind_off 2 106 0.0 1.0 +it 04_res 2 106 0.0 1.0 +it 05_nuclear 2 106 0.0 1.0 +it 06_coal 2 106 0.0 1.0 it 07_gas 2 106 0.0 0.0 it 08_non-res 2 106 0.0 0.0 it 09_hydro_pump 2 106 0.0 0.0 -it 01_solar 2 107 1.0 0.0 -it 02_wind_on 2 107 1.0 0.0 -it 03_wind_off 2 107 1.0 0.0 -it 04_res 2 107 1.0 0.0 -it 05_nuclear 2 107 1.0 0.0 -it 06_coal 2 107 1.0 0.0 +it 01_solar 2 107 0.0 1.0 +it 02_wind_on 2 107 0.0 1.0 +it 03_wind_off 2 107 0.0 1.0 +it 04_res 2 107 0.0 1.0 +it 05_nuclear 2 107 0.0 1.0 +it 06_coal 2 107 0.0 1.0 it 07_gas 2 107 0.0 0.0 it 08_non-res 2 107 0.0 0.0 it 09_hydro_pump 2 107 0.0 0.0 -it 01_solar 2 108 1.0 0.0 -it 02_wind_on 2 108 1.0 0.0 -it 03_wind_off 2 108 1.0 0.0 -it 04_res 2 108 1.0 0.0 -it 05_nuclear 2 108 1.0 0.0 -it 06_coal 2 108 1.0 0.0 +it 01_solar 2 108 0.0 1.0 +it 02_wind_on 2 108 0.0 1.0 +it 03_wind_off 2 108 0.0 1.0 +it 04_res 2 108 0.0 1.0 +it 05_nuclear 2 108 0.0 1.0 +it 06_coal 2 108 0.0 1.0 it 07_gas 2 108 0.0 0.0 it 08_non-res 2 108 0.0 0.0 it 09_hydro_pump 2 108 0.0 0.0 -it 01_solar 2 109 1.0 0.0 -it 02_wind_on 2 109 1.0 0.0 -it 03_wind_off 2 109 1.0 0.0 -it 04_res 2 109 1.0 0.0 -it 05_nuclear 2 109 1.0 0.0 -it 06_coal 2 109 1.0 0.0 +it 01_solar 2 109 0.0 1.0 +it 02_wind_on 2 109 0.0 1.0 +it 03_wind_off 2 109 0.0 1.0 +it 04_res 2 109 0.0 1.0 +it 05_nuclear 2 109 0.0 1.0 +it 06_coal 2 109 0.0 1.0 it 07_gas 2 109 0.0 0.0 it 08_non-res 2 109 0.0 0.0 it 09_hydro_pump 2 109 0.0 0.0 -it 01_solar 2 110 1.0 0.0 -it 02_wind_on 2 110 1.0 0.0 -it 03_wind_off 2 110 1.0 0.0 -it 04_res 2 110 1.0 0.0 -it 05_nuclear 2 110 1.0 0.0 -it 06_coal 2 110 1.0 0.0 +it 01_solar 2 110 0.0 1.0 +it 02_wind_on 2 110 0.0 1.0 +it 03_wind_off 2 110 0.0 1.0 +it 04_res 2 110 0.0 1.0 +it 05_nuclear 2 110 0.0 1.0 +it 06_coal 2 110 0.0 1.0 it 07_gas 2 110 0.0 0.0 it 08_non-res 2 110 0.0 0.0 it 09_hydro_pump 2 110 0.0 0.0 -it 01_solar 2 111 1.0 0.0 -it 02_wind_on 2 111 1.0 0.0 -it 03_wind_off 2 111 1.0 0.0 -it 04_res 2 111 1.0 0.0 -it 05_nuclear 2 111 1.0 0.0 -it 06_coal 2 111 1.0 0.0 +it 01_solar 2 111 0.0 1.0 +it 02_wind_on 2 111 0.0 1.0 +it 03_wind_off 2 111 0.0 1.0 +it 04_res 2 111 0.0 1.0 +it 05_nuclear 2 111 0.0 1.0 +it 06_coal 2 111 0.0 1.0 it 07_gas 2 111 0.0 0.0 it 08_non-res 2 111 0.0 0.0 it 09_hydro_pump 2 111 0.0 0.0 -it 01_solar 2 112 1.0 0.0 -it 02_wind_on 2 112 1.0 0.0 -it 03_wind_off 2 112 1.0 0.0 -it 04_res 2 112 1.0 0.0 -it 05_nuclear 2 112 1.0 0.0 -it 06_coal 2 112 1.0 0.0 +it 01_solar 2 112 0.0 1.0 +it 02_wind_on 2 112 0.0 1.0 +it 03_wind_off 2 112 0.0 1.0 +it 04_res 2 112 0.0 1.0 +it 05_nuclear 2 112 0.0 1.0 +it 06_coal 2 112 0.0 1.0 it 07_gas 2 112 0.0 0.0 it 08_non-res 2 112 0.0 0.0 it 09_hydro_pump 2 112 0.0 0.0 -it 01_solar 2 113 1.0 0.0 -it 02_wind_on 2 113 1.0 0.0 -it 03_wind_off 2 113 1.0 0.0 -it 04_res 2 113 1.0 0.0 -it 05_nuclear 2 113 1.0 0.0 -it 06_coal 2 113 1.0 0.0 +it 01_solar 2 113 0.0 1.0 +it 02_wind_on 2 113 0.0 1.0 +it 03_wind_off 2 113 0.0 1.0 +it 04_res 2 113 0.0 1.0 +it 05_nuclear 2 113 0.0 1.0 +it 06_coal 2 113 0.0 1.0 it 07_gas 2 113 0.0 0.0 it 08_non-res 2 113 0.0 0.0 it 09_hydro_pump 2 113 0.0 0.0 -it 01_solar 2 114 1.0 0.0 -it 02_wind_on 2 114 1.0 0.0 -it 03_wind_off 2 114 1.0 0.0 -it 04_res 2 114 1.0 0.0 -it 05_nuclear 2 114 1.0 0.0 -it 06_coal 2 114 1.0 0.0 +it 01_solar 2 114 0.0 1.0 +it 02_wind_on 2 114 0.0 1.0 +it 03_wind_off 2 114 0.0 1.0 +it 04_res 2 114 0.0 1.0 +it 05_nuclear 2 114 0.0 1.0 +it 06_coal 2 114 0.0 1.0 it 07_gas 2 114 0.0 0.0 it 08_non-res 2 114 0.0 0.0 it 09_hydro_pump 2 114 0.0 0.0 -it 01_solar 2 115 1.0 0.0 -it 02_wind_on 2 115 1.0 0.0 -it 03_wind_off 2 115 1.0 0.0 -it 04_res 2 115 1.0 0.0 -it 05_nuclear 2 115 1.0 0.0 -it 06_coal 2 115 1.0 0.0 +it 01_solar 2 115 0.0 1.0 +it 02_wind_on 2 115 0.0 1.0 +it 03_wind_off 2 115 0.0 1.0 +it 04_res 2 115 0.0 1.0 +it 05_nuclear 2 115 0.0 1.0 +it 06_coal 2 115 0.0 1.0 it 07_gas 2 115 0.0 0.0 it 08_non-res 2 115 0.0 0.0 it 09_hydro_pump 2 115 0.0 0.0 -it 01_solar 2 116 1.0 0.0 -it 02_wind_on 2 116 1.0 0.0 -it 03_wind_off 2 116 1.0 0.0 -it 04_res 2 116 1.0 0.0 -it 05_nuclear 2 116 1.0 0.0 -it 06_coal 2 116 1.0 0.0 +it 01_solar 2 116 0.0 1.0 +it 02_wind_on 2 116 0.0 1.0 +it 03_wind_off 2 116 0.0 1.0 +it 04_res 2 116 0.0 1.0 +it 05_nuclear 2 116 0.0 1.0 +it 06_coal 2 116 0.0 1.0 it 07_gas 2 116 0.0 0.0 it 08_non-res 2 116 0.0 0.0 it 09_hydro_pump 2 116 0.0 0.0 -it 01_solar 2 117 1.0 0.0 -it 02_wind_on 2 117 1.0 0.0 -it 03_wind_off 2 117 1.0 0.0 -it 04_res 2 117 1.0 0.0 -it 05_nuclear 2 117 1.0 0.0 -it 06_coal 2 117 1.0 0.0 +it 01_solar 2 117 0.0 1.0 +it 02_wind_on 2 117 0.0 1.0 +it 03_wind_off 2 117 0.0 1.0 +it 04_res 2 117 0.0 1.0 +it 05_nuclear 2 117 0.0 1.0 +it 06_coal 2 117 0.0 1.0 it 07_gas 2 117 0.0 0.0 it 08_non-res 2 117 0.0 0.0 it 09_hydro_pump 2 117 0.0 0.0 -it 01_solar 2 118 1.0 0.0 -it 02_wind_on 2 118 1.0 0.0 -it 03_wind_off 2 118 1.0 0.0 -it 04_res 2 118 1.0 0.0 -it 05_nuclear 2 118 1.0 0.0 -it 06_coal 2 118 1.0 0.0 +it 01_solar 2 118 0.0 1.0 +it 02_wind_on 2 118 0.0 1.0 +it 03_wind_off 2 118 0.0 1.0 +it 04_res 2 118 0.0 1.0 +it 05_nuclear 2 118 0.0 1.0 +it 06_coal 2 118 0.0 1.0 it 07_gas 2 118 0.0 0.0 it 08_non-res 2 118 0.0 0.0 it 09_hydro_pump 2 118 0.0 0.0 -it 01_solar 2 119 1.0 0.0 -it 02_wind_on 2 119 1.0 0.0 -it 03_wind_off 2 119 1.0 0.0 -it 04_res 2 119 1.0 0.0 -it 05_nuclear 2 119 1.0 0.0 -it 06_coal 2 119 1.0 0.0 +it 01_solar 2 119 0.0 1.0 +it 02_wind_on 2 119 0.0 1.0 +it 03_wind_off 2 119 0.0 1.0 +it 04_res 2 119 0.0 1.0 +it 05_nuclear 2 119 0.0 1.0 +it 06_coal 2 119 0.0 1.0 it 07_gas 2 119 0.0 0.0 it 08_non-res 2 119 0.0 0.0 it 09_hydro_pump 2 119 0.0 0.0 -it 01_solar 2 120 1.0 0.0 -it 02_wind_on 2 120 1.0 0.0 -it 03_wind_off 2 120 1.0 0.0 -it 04_res 2 120 1.0 0.0 -it 05_nuclear 2 120 1.0 0.0 -it 06_coal 2 120 1.0 0.0 +it 01_solar 2 120 0.0 1.0 +it 02_wind_on 2 120 0.0 1.0 +it 03_wind_off 2 120 0.0 1.0 +it 04_res 2 120 0.0 1.0 +it 05_nuclear 2 120 0.0 1.0 +it 06_coal 2 120 0.0 1.0 it 07_gas 2 120 0.0 0.0 it 08_non-res 2 120 0.0 0.0 it 09_hydro_pump 2 120 0.0 0.0 -it 01_solar 2 121 1.0 0.0 -it 02_wind_on 2 121 1.0 0.0 -it 03_wind_off 2 121 1.0 0.0 -it 04_res 2 121 1.0 0.0 -it 05_nuclear 2 121 1.0 0.0 -it 06_coal 2 121 1.0 0.0 +it 01_solar 2 121 0.0 1.0 +it 02_wind_on 2 121 0.0 1.0 +it 03_wind_off 2 121 0.0 1.0 +it 04_res 2 121 0.0 1.0 +it 05_nuclear 2 121 0.0 1.0 +it 06_coal 2 121 0.0 1.0 it 07_gas 2 121 0.0 0.0 it 08_non-res 2 121 0.0 0.0 it 09_hydro_pump 2 121 0.0 0.0 -it 01_solar 2 122 1.0 0.0 -it 02_wind_on 2 122 1.0 0.0 -it 03_wind_off 2 122 1.0 0.0 -it 04_res 2 122 1.0 0.0 -it 05_nuclear 2 122 1.0 0.0 -it 06_coal 2 122 1.0 0.0 -it 07_gas 2 122 1.0 0.0 +it 01_solar 2 122 0.0 1.0 +it 02_wind_on 2 122 0.0 1.0 +it 03_wind_off 2 122 0.0 1.0 +it 04_res 2 122 0.0 1.0 +it 05_nuclear 2 122 0.0 1.0 +it 06_coal 2 122 0.0 1.0 +it 07_gas 2 122 0.0 1.0 it 08_non-res 2 122 0.0 0.0 it 09_hydro_pump 2 122 0.0 0.0 -it 01_solar 2 123 1.0 0.0 -it 02_wind_on 2 123 1.0 0.0 -it 03_wind_off 2 123 1.0 0.0 -it 04_res 2 123 1.0 0.0 -it 05_nuclear 2 123 1.0 0.0 -it 06_coal 2 123 1.0 0.0 -it 07_gas 2 123 1.0 0.0 +it 01_solar 2 123 0.0 1.0 +it 02_wind_on 2 123 0.0 1.0 +it 03_wind_off 2 123 0.0 1.0 +it 04_res 2 123 0.0 1.0 +it 05_nuclear 2 123 0.0 1.0 +it 06_coal 2 123 0.0 1.0 +it 07_gas 2 123 0.0 1.0 it 08_non-res 2 123 0.0 0.0 it 09_hydro_pump 2 123 0.0 0.0 -it 01_solar 2 124 1.0 0.0 -it 02_wind_on 2 124 1.0 0.0 -it 03_wind_off 2 124 1.0 0.0 -it 04_res 2 124 1.0 0.0 -it 05_nuclear 2 124 1.0 0.0 -it 06_coal 2 124 1.0 0.0 -it 07_gas 2 124 1.0 0.0 +it 01_solar 2 124 0.0 1.0 +it 02_wind_on 2 124 0.0 1.0 +it 03_wind_off 2 124 0.0 1.0 +it 04_res 2 124 0.0 1.0 +it 05_nuclear 2 124 0.0 1.0 +it 06_coal 2 124 0.0 1.0 +it 07_gas 2 124 0.0 1.0 it 08_non-res 2 124 0.0 0.0 it 09_hydro_pump 2 124 0.0 0.0 -it 01_solar 2 125 1.0 0.0 -it 02_wind_on 2 125 1.0 0.0 -it 03_wind_off 2 125 1.0 0.0 -it 04_res 2 125 1.0 0.0 -it 05_nuclear 2 125 1.0 0.0 -it 06_coal 2 125 1.0 0.0 -it 07_gas 2 125 1.0 0.0 +it 01_solar 2 125 0.0 1.0 +it 02_wind_on 2 125 0.0 1.0 +it 03_wind_off 2 125 0.0 1.0 +it 04_res 2 125 0.0 1.0 +it 05_nuclear 2 125 0.0 1.0 +it 06_coal 2 125 0.0 1.0 +it 07_gas 2 125 0.0 1.0 it 08_non-res 2 125 0.0 0.0 it 09_hydro_pump 2 125 0.0 0.0 -it 01_solar 2 126 1.0 0.0 -it 02_wind_on 2 126 1.0 0.0 -it 03_wind_off 2 126 1.0 0.0 -it 04_res 2 126 1.0 0.0 -it 05_nuclear 2 126 1.0 0.0 -it 06_coal 2 126 1.0 0.0 -it 07_gas 2 126 1.0 0.0 +it 01_solar 2 126 0.0 1.0 +it 02_wind_on 2 126 0.0 1.0 +it 03_wind_off 2 126 0.0 1.0 +it 04_res 2 126 0.0 1.0 +it 05_nuclear 2 126 0.0 1.0 +it 06_coal 2 126 0.0 1.0 +it 07_gas 2 126 0.0 1.0 it 08_non-res 2 126 0.0 0.0 it 09_hydro_pump 2 126 0.0 0.0 -it 01_solar 2 127 1.0 0.0 -it 02_wind_on 2 127 1.0 0.0 -it 03_wind_off 2 127 1.0 0.0 -it 04_res 2 127 1.0 0.0 -it 05_nuclear 2 127 1.0 0.0 -it 06_coal 2 127 1.0 0.0 -it 07_gas 2 127 1.0 0.0 +it 01_solar 2 127 0.0 1.0 +it 02_wind_on 2 127 0.0 1.0 +it 03_wind_off 2 127 0.0 1.0 +it 04_res 2 127 0.0 1.0 +it 05_nuclear 2 127 0.0 1.0 +it 06_coal 2 127 0.0 1.0 +it 07_gas 2 127 0.0 1.0 it 08_non-res 2 127 0.0 0.0 it 09_hydro_pump 2 127 0.0 0.0 -it 01_solar 2 128 1.0 0.0 -it 02_wind_on 2 128 1.0 0.0 -it 03_wind_off 2 128 1.0 0.0 -it 04_res 2 128 1.0 0.0 -it 05_nuclear 2 128 1.0 0.0 -it 06_coal 2 128 1.0 0.0 -it 07_gas 2 128 1.0 0.0 +it 01_solar 2 128 0.0 1.0 +it 02_wind_on 2 128 0.0 1.0 +it 03_wind_off 2 128 0.0 1.0 +it 04_res 2 128 0.0 1.0 +it 05_nuclear 2 128 0.0 1.0 +it 06_coal 2 128 0.0 1.0 +it 07_gas 2 128 0.0 1.0 it 08_non-res 2 128 0.0 0.0 it 09_hydro_pump 2 128 0.0 0.0 -it 01_solar 2 129 1.0 0.0 -it 02_wind_on 2 129 1.0 0.0 -it 03_wind_off 2 129 1.0 0.0 -it 04_res 2 129 1.0 0.0 -it 05_nuclear 2 129 1.0 0.0 -it 06_coal 2 129 1.0 0.0 -it 07_gas 2 129 1.0 0.0 +it 01_solar 2 129 0.0 1.0 +it 02_wind_on 2 129 0.0 1.0 +it 03_wind_off 2 129 0.0 1.0 +it 04_res 2 129 0.0 1.0 +it 05_nuclear 2 129 0.0 1.0 +it 06_coal 2 129 0.0 1.0 +it 07_gas 2 129 0.0 1.0 it 08_non-res 2 129 0.0 0.0 it 09_hydro_pump 2 129 0.0 0.0 -it 01_solar 2 130 1.0 0.0 -it 02_wind_on 2 130 1.0 0.0 -it 03_wind_off 2 130 1.0 0.0 -it 04_res 2 130 1.0 0.0 -it 05_nuclear 2 130 1.0 0.0 -it 06_coal 2 130 1.0 0.0 -it 07_gas 2 130 1.0 0.0 +it 01_solar 2 130 0.0 1.0 +it 02_wind_on 2 130 0.0 1.0 +it 03_wind_off 2 130 0.0 1.0 +it 04_res 2 130 0.0 1.0 +it 05_nuclear 2 130 0.0 1.0 +it 06_coal 2 130 0.0 1.0 +it 07_gas 2 130 0.0 1.0 it 08_non-res 2 130 0.0 0.0 it 09_hydro_pump 2 130 0.0 0.0 -it 01_solar 2 131 1.0 0.0 -it 02_wind_on 2 131 1.0 0.0 -it 03_wind_off 2 131 1.0 0.0 -it 04_res 2 131 1.0 0.0 -it 05_nuclear 2 131 1.0 0.0 -it 06_coal 2 131 1.0 0.0 -it 07_gas 2 131 1.0 0.0 +it 01_solar 2 131 0.0 1.0 +it 02_wind_on 2 131 0.0 1.0 +it 03_wind_off 2 131 0.0 1.0 +it 04_res 2 131 0.0 1.0 +it 05_nuclear 2 131 0.0 1.0 +it 06_coal 2 131 0.0 1.0 +it 07_gas 2 131 0.0 1.0 it 08_non-res 2 131 0.0 0.0 it 09_hydro_pump 2 131 0.0 0.0 -it 01_solar 2 132 1.0 0.0 -it 02_wind_on 2 132 1.0 0.0 -it 03_wind_off 2 132 1.0 0.0 -it 04_res 2 132 1.0 0.0 -it 05_nuclear 2 132 1.0 0.0 -it 06_coal 2 132 1.0 0.0 -it 07_gas 2 132 1.0 0.0 +it 01_solar 2 132 0.0 1.0 +it 02_wind_on 2 132 0.0 1.0 +it 03_wind_off 2 132 0.0 1.0 +it 04_res 2 132 0.0 1.0 +it 05_nuclear 2 132 0.0 1.0 +it 06_coal 2 132 0.0 1.0 +it 07_gas 2 132 0.0 1.0 it 08_non-res 2 132 0.0 0.0 it 09_hydro_pump 2 132 0.0 0.0 -it 01_solar 2 133 1.0 0.0 -it 02_wind_on 2 133 1.0 0.0 -it 03_wind_off 2 133 1.0 0.0 -it 04_res 2 133 1.0 0.0 -it 05_nuclear 2 133 1.0 0.0 -it 06_coal 2 133 1.0 0.0 -it 07_gas 2 133 1.0 0.0 +it 01_solar 2 133 0.0 1.0 +it 02_wind_on 2 133 0.0 1.0 +it 03_wind_off 2 133 0.0 1.0 +it 04_res 2 133 0.0 1.0 +it 05_nuclear 2 133 0.0 1.0 +it 06_coal 2 133 0.0 1.0 +it 07_gas 2 133 0.0 1.0 it 08_non-res 2 133 0.0 0.0 it 09_hydro_pump 2 133 0.0 0.0 -it 01_solar 2 134 1.0 0.0 -it 02_wind_on 2 134 1.0 0.0 -it 03_wind_off 2 134 1.0 0.0 -it 04_res 2 134 1.0 0.0 -it 05_nuclear 2 134 1.0 0.0 -it 06_coal 2 134 1.0 0.0 -it 07_gas 2 134 1.0 0.0 +it 01_solar 2 134 0.0 1.0 +it 02_wind_on 2 134 0.0 1.0 +it 03_wind_off 2 134 0.0 1.0 +it 04_res 2 134 0.0 1.0 +it 05_nuclear 2 134 0.0 1.0 +it 06_coal 2 134 0.0 1.0 +it 07_gas 2 134 0.0 1.0 it 08_non-res 2 134 0.0 0.0 it 09_hydro_pump 2 134 0.0 0.0 -it 01_solar 2 135 1.0 0.0 -it 02_wind_on 2 135 1.0 0.0 -it 03_wind_off 2 135 1.0 0.0 -it 04_res 2 135 1.0 0.0 -it 05_nuclear 2 135 1.0 0.0 -it 06_coal 2 135 1.0 0.0 -it 07_gas 2 135 1.0 0.0 +it 01_solar 2 135 0.0 1.0 +it 02_wind_on 2 135 0.0 1.0 +it 03_wind_off 2 135 0.0 1.0 +it 04_res 2 135 0.0 1.0 +it 05_nuclear 2 135 0.0 1.0 +it 06_coal 2 135 0.0 1.0 +it 07_gas 2 135 0.0 1.0 it 08_non-res 2 135 0.0 0.0 it 09_hydro_pump 2 135 0.0 0.0 -it 01_solar 2 136 1.0 0.0 -it 02_wind_on 2 136 1.0 0.0 -it 03_wind_off 2 136 1.0 0.0 -it 04_res 2 136 1.0 0.0 -it 05_nuclear 2 136 1.0 0.0 -it 06_coal 2 136 1.0 0.0 -it 07_gas 2 136 1.0 0.0 +it 01_solar 2 136 0.0 1.0 +it 02_wind_on 2 136 0.0 1.0 +it 03_wind_off 2 136 0.0 1.0 +it 04_res 2 136 0.0 1.0 +it 05_nuclear 2 136 0.0 1.0 +it 06_coal 2 136 0.0 1.0 +it 07_gas 2 136 0.0 1.0 it 08_non-res 2 136 0.0 0.0 it 09_hydro_pump 2 136 0.0 0.0 -it 01_solar 2 137 1.0 0.0 -it 02_wind_on 2 137 1.0 0.0 -it 03_wind_off 2 137 1.0 0.0 -it 04_res 2 137 1.0 0.0 -it 05_nuclear 2 137 1.0 0.0 -it 06_coal 2 137 1.0 0.0 -it 07_gas 2 137 1.0 0.0 +it 01_solar 2 137 0.0 1.0 +it 02_wind_on 2 137 0.0 1.0 +it 03_wind_off 2 137 0.0 1.0 +it 04_res 2 137 0.0 1.0 +it 05_nuclear 2 137 0.0 1.0 +it 06_coal 2 137 0.0 1.0 +it 07_gas 2 137 0.0 1.0 it 08_non-res 2 137 0.0 0.0 it 09_hydro_pump 2 137 0.0 0.0 -it 01_solar 2 138 1.0 0.0 -it 02_wind_on 2 138 1.0 0.0 -it 03_wind_off 2 138 1.0 0.0 -it 04_res 2 138 1.0 0.0 -it 05_nuclear 2 138 1.0 0.0 -it 06_coal 2 138 1.0 0.0 -it 07_gas 2 138 1.0 0.0 +it 01_solar 2 138 0.0 1.0 +it 02_wind_on 2 138 0.0 1.0 +it 03_wind_off 2 138 0.0 1.0 +it 04_res 2 138 0.0 1.0 +it 05_nuclear 2 138 0.0 1.0 +it 06_coal 2 138 0.0 1.0 +it 07_gas 2 138 0.0 1.0 it 08_non-res 2 138 0.0 0.0 it 09_hydro_pump 2 138 0.0 0.0 -it 01_solar 2 139 1.0 0.0 -it 02_wind_on 2 139 1.0 0.0 -it 03_wind_off 2 139 1.0 0.0 -it 04_res 2 139 1.0 0.0 -it 05_nuclear 2 139 1.0 0.0 -it 06_coal 2 139 1.0 0.0 -it 07_gas 2 139 1.0 0.0 +it 01_solar 2 139 0.0 1.0 +it 02_wind_on 2 139 0.0 1.0 +it 03_wind_off 2 139 0.0 1.0 +it 04_res 2 139 0.0 1.0 +it 05_nuclear 2 139 0.0 1.0 +it 06_coal 2 139 0.0 1.0 +it 07_gas 2 139 0.0 1.0 it 08_non-res 2 139 0.0 0.0 it 09_hydro_pump 2 139 0.0 0.0 -it 01_solar 2 140 1.0 0.0 -it 02_wind_on 2 140 1.0 0.0 -it 03_wind_off 2 140 1.0 0.0 -it 04_res 2 140 1.0 0.0 -it 05_nuclear 2 140 1.0 0.0 -it 06_coal 2 140 1.0 0.0 -it 07_gas 2 140 1.0 0.0 +it 01_solar 2 140 0.0 1.0 +it 02_wind_on 2 140 0.0 1.0 +it 03_wind_off 2 140 0.0 1.0 +it 04_res 2 140 0.0 1.0 +it 05_nuclear 2 140 0.0 1.0 +it 06_coal 2 140 0.0 1.0 +it 07_gas 2 140 0.0 1.0 it 08_non-res 2 140 0.0 0.0 it 09_hydro_pump 2 140 0.0 0.0 -it 01_solar 2 141 1.0 0.0 -it 02_wind_on 2 141 1.0 0.0 -it 03_wind_off 2 141 1.0 0.0 -it 04_res 2 141 1.0 0.0 -it 05_nuclear 2 141 1.0 0.0 -it 06_coal 2 141 1.0 0.0 -it 07_gas 2 141 1.0 0.0 +it 01_solar 2 141 0.0 1.0 +it 02_wind_on 2 141 0.0 1.0 +it 03_wind_off 2 141 0.0 1.0 +it 04_res 2 141 0.0 1.0 +it 05_nuclear 2 141 0.0 1.0 +it 06_coal 2 141 0.0 1.0 +it 07_gas 2 141 0.0 1.0 it 08_non-res 2 141 0.0 0.0 it 09_hydro_pump 2 141 0.0 0.0 -it 01_solar 2 142 1.0 0.0 -it 02_wind_on 2 142 1.0 0.0 -it 03_wind_off 2 142 1.0 0.0 -it 04_res 2 142 1.0 0.0 -it 05_nuclear 2 142 1.0 0.0 -it 06_coal 2 142 1.0 0.0 -it 07_gas 2 142 1.0 0.0 -it 08_non-res 2 142 1.0 0.0 +it 01_solar 2 142 0.0 1.0 +it 02_wind_on 2 142 0.0 1.0 +it 03_wind_off 2 142 0.0 1.0 +it 04_res 2 142 0.0 1.0 +it 05_nuclear 2 142 0.0 1.0 +it 06_coal 2 142 0.0 1.0 +it 07_gas 2 142 0.0 1.0 +it 08_non-res 2 142 0.0 1.0 it 09_hydro_pump 2 142 0.0 0.0 -it 01_solar 2 143 1.0 0.0 -it 02_wind_on 2 143 1.0 0.0 -it 03_wind_off 2 143 1.0 0.0 -it 04_res 2 143 1.0 0.0 -it 05_nuclear 2 143 1.0 0.0 -it 06_coal 2 143 1.0 0.0 -it 07_gas 2 143 1.0 0.0 -it 08_non-res 2 143 1.0 0.0 +it 01_solar 2 143 0.0 1.0 +it 02_wind_on 2 143 0.0 1.0 +it 03_wind_off 2 143 0.0 1.0 +it 04_res 2 143 0.0 1.0 +it 05_nuclear 2 143 0.0 1.0 +it 06_coal 2 143 0.0 1.0 +it 07_gas 2 143 0.0 1.0 +it 08_non-res 2 143 0.0 1.0 it 09_hydro_pump 2 143 0.0 0.0 -it 01_solar 2 144 1.0 0.0 -it 02_wind_on 2 144 1.0 0.0 -it 03_wind_off 2 144 1.0 0.0 -it 04_res 2 144 1.0 0.0 -it 05_nuclear 2 144 1.0 0.0 -it 06_coal 2 144 1.0 0.0 -it 07_gas 2 144 1.0 0.0 -it 08_non-res 2 144 1.0 0.0 +it 01_solar 2 144 0.0 1.0 +it 02_wind_on 2 144 0.0 1.0 +it 03_wind_off 2 144 0.0 1.0 +it 04_res 2 144 0.0 1.0 +it 05_nuclear 2 144 0.0 1.0 +it 06_coal 2 144 0.0 1.0 +it 07_gas 2 144 0.0 1.0 +it 08_non-res 2 144 0.0 1.0 it 09_hydro_pump 2 144 0.0 0.0 -it 01_solar 2 145 1.0 0.0 -it 02_wind_on 2 145 1.0 0.0 -it 03_wind_off 2 145 1.0 0.0 -it 04_res 2 145 1.0 0.0 -it 05_nuclear 2 145 1.0 0.0 -it 06_coal 2 145 1.0 0.0 -it 07_gas 2 145 1.0 0.0 -it 08_non-res 2 145 1.0 0.0 +it 01_solar 2 145 0.0 1.0 +it 02_wind_on 2 145 0.0 1.0 +it 03_wind_off 2 145 0.0 1.0 +it 04_res 2 145 0.0 1.0 +it 05_nuclear 2 145 0.0 1.0 +it 06_coal 2 145 0.0 1.0 +it 07_gas 2 145 0.0 1.0 +it 08_non-res 2 145 0.0 1.0 it 09_hydro_pump 2 145 0.0 0.0 -it 01_solar 2 146 1.0 0.0 -it 02_wind_on 2 146 1.0 0.0 -it 03_wind_off 2 146 1.0 0.0 -it 04_res 2 146 1.0 0.0 -it 05_nuclear 2 146 1.0 0.0 -it 06_coal 2 146 1.0 0.0 -it 07_gas 2 146 1.0 0.0 -it 08_non-res 2 146 1.0 0.0 +it 01_solar 2 146 0.0 1.0 +it 02_wind_on 2 146 0.0 1.0 +it 03_wind_off 2 146 0.0 1.0 +it 04_res 2 146 0.0 1.0 +it 05_nuclear 2 146 0.0 1.0 +it 06_coal 2 146 0.0 1.0 +it 07_gas 2 146 0.0 1.0 +it 08_non-res 2 146 0.0 1.0 it 09_hydro_pump 2 146 0.0 0.0 -it 01_solar 2 147 1.0 0.0 -it 02_wind_on 2 147 1.0 0.0 -it 03_wind_off 2 147 1.0 0.0 -it 04_res 2 147 1.0 0.0 -it 05_nuclear 2 147 1.0 0.0 -it 06_coal 2 147 1.0 0.0 -it 07_gas 2 147 1.0 0.0 -it 08_non-res 2 147 1.0 0.0 +it 01_solar 2 147 0.0 1.0 +it 02_wind_on 2 147 0.0 1.0 +it 03_wind_off 2 147 0.0 1.0 +it 04_res 2 147 0.0 1.0 +it 05_nuclear 2 147 0.0 1.0 +it 06_coal 2 147 0.0 1.0 +it 07_gas 2 147 0.0 1.0 +it 08_non-res 2 147 0.0 1.0 it 09_hydro_pump 2 147 0.0 0.0 -it 01_solar 2 148 1.0 0.0 -it 02_wind_on 2 148 1.0 0.0 -it 03_wind_off 2 148 1.0 0.0 -it 04_res 2 148 1.0 0.0 -it 05_nuclear 2 148 1.0 0.0 -it 06_coal 2 148 1.0 0.0 -it 07_gas 2 148 1.0 0.0 -it 08_non-res 2 148 1.0 0.0 +it 01_solar 2 148 0.0 1.0 +it 02_wind_on 2 148 0.0 1.0 +it 03_wind_off 2 148 0.0 1.0 +it 04_res 2 148 0.0 1.0 +it 05_nuclear 2 148 0.0 1.0 +it 06_coal 2 148 0.0 1.0 +it 07_gas 2 148 0.0 1.0 +it 08_non-res 2 148 0.0 1.0 it 09_hydro_pump 2 148 0.0 0.0 -it 01_solar 2 149 1.0 0.0 -it 02_wind_on 2 149 1.0 0.0 -it 03_wind_off 2 149 1.0 0.0 -it 04_res 2 149 1.0 0.0 -it 05_nuclear 2 149 1.0 0.0 -it 06_coal 2 149 1.0 0.0 -it 07_gas 2 149 1.0 0.0 -it 08_non-res 2 149 1.0 0.0 +it 01_solar 2 149 0.0 1.0 +it 02_wind_on 2 149 0.0 1.0 +it 03_wind_off 2 149 0.0 1.0 +it 04_res 2 149 0.0 1.0 +it 05_nuclear 2 149 0.0 1.0 +it 06_coal 2 149 0.0 1.0 +it 07_gas 2 149 0.0 1.0 +it 08_non-res 2 149 0.0 1.0 it 09_hydro_pump 2 149 0.0 0.0 -it 01_solar 2 150 1.0 0.0 -it 02_wind_on 2 150 1.0 0.0 -it 03_wind_off 2 150 1.0 0.0 -it 04_res 2 150 1.0 0.0 -it 05_nuclear 2 150 1.0 0.0 -it 06_coal 2 150 1.0 0.0 -it 07_gas 2 150 1.0 0.0 -it 08_non-res 2 150 1.0 0.0 +it 01_solar 2 150 0.0 1.0 +it 02_wind_on 2 150 0.0 1.0 +it 03_wind_off 2 150 0.0 1.0 +it 04_res 2 150 0.0 1.0 +it 05_nuclear 2 150 0.0 1.0 +it 06_coal 2 150 0.0 1.0 +it 07_gas 2 150 0.0 1.0 +it 08_non-res 2 150 0.0 1.0 it 09_hydro_pump 2 150 0.0 0.0 -it 01_solar 2 151 1.0 0.0 -it 02_wind_on 2 151 1.0 0.0 -it 03_wind_off 2 151 1.0 0.0 -it 04_res 2 151 1.0 0.0 -it 05_nuclear 2 151 1.0 0.0 -it 06_coal 2 151 1.0 0.0 -it 07_gas 2 151 1.0 0.0 -it 08_non-res 2 151 1.0 0.0 +it 01_solar 2 151 0.0 1.0 +it 02_wind_on 2 151 0.0 1.0 +it 03_wind_off 2 151 0.0 1.0 +it 04_res 2 151 0.0 1.0 +it 05_nuclear 2 151 0.0 1.0 +it 06_coal 2 151 0.0 1.0 +it 07_gas 2 151 0.0 1.0 +it 08_non-res 2 151 0.0 1.0 it 09_hydro_pump 2 151 0.0 0.0 -it 01_solar 2 152 1.0 0.0 -it 02_wind_on 2 152 1.0 0.0 -it 03_wind_off 2 152 1.0 0.0 -it 04_res 2 152 1.0 0.0 -it 05_nuclear 2 152 1.0 0.0 -it 06_coal 2 152 1.0 0.0 -it 07_gas 2 152 1.0 0.0 -it 08_non-res 2 152 1.0 0.0 +it 01_solar 2 152 0.0 1.0 +it 02_wind_on 2 152 0.0 1.0 +it 03_wind_off 2 152 0.0 1.0 +it 04_res 2 152 0.0 1.0 +it 05_nuclear 2 152 0.0 1.0 +it 06_coal 2 152 0.0 1.0 +it 07_gas 2 152 0.0 1.0 +it 08_non-res 2 152 0.0 1.0 it 09_hydro_pump 2 152 0.0 0.0 -it 01_solar 2 153 1.0 0.0 -it 02_wind_on 2 153 1.0 0.0 -it 03_wind_off 2 153 1.0 0.0 -it 04_res 2 153 1.0 0.0 -it 05_nuclear 2 153 1.0 0.0 -it 06_coal 2 153 1.0 0.0 -it 07_gas 2 153 1.0 0.0 -it 08_non-res 2 153 1.0 0.0 +it 01_solar 2 153 0.0 1.0 +it 02_wind_on 2 153 0.0 1.0 +it 03_wind_off 2 153 0.0 1.0 +it 04_res 2 153 0.0 1.0 +it 05_nuclear 2 153 0.0 1.0 +it 06_coal 2 153 0.0 1.0 +it 07_gas 2 153 0.0 1.0 +it 08_non-res 2 153 0.0 1.0 it 09_hydro_pump 2 153 0.0 0.0 -it 01_solar 2 154 1.0 0.0 -it 02_wind_on 2 154 1.0 0.0 -it 03_wind_off 2 154 1.0 0.0 -it 04_res 2 154 1.0 0.0 -it 05_nuclear 2 154 1.0 0.0 -it 06_coal 2 154 1.0 0.0 -it 07_gas 2 154 1.0 0.0 -it 08_non-res 2 154 1.0 0.0 +it 01_solar 2 154 0.0 1.0 +it 02_wind_on 2 154 0.0 1.0 +it 03_wind_off 2 154 0.0 1.0 +it 04_res 2 154 0.0 1.0 +it 05_nuclear 2 154 0.0 1.0 +it 06_coal 2 154 0.0 1.0 +it 07_gas 2 154 0.0 1.0 +it 08_non-res 2 154 0.0 1.0 it 09_hydro_pump 2 154 0.0 0.0 -it 01_solar 2 155 1.0 0.0 -it 02_wind_on 2 155 1.0 0.0 -it 03_wind_off 2 155 1.0 0.0 -it 04_res 2 155 1.0 0.0 -it 05_nuclear 2 155 1.0 0.0 -it 06_coal 2 155 1.0 0.0 -it 07_gas 2 155 1.0 0.0 -it 08_non-res 2 155 1.0 0.0 +it 01_solar 2 155 0.0 1.0 +it 02_wind_on 2 155 0.0 1.0 +it 03_wind_off 2 155 0.0 1.0 +it 04_res 2 155 0.0 1.0 +it 05_nuclear 2 155 0.0 1.0 +it 06_coal 2 155 0.0 1.0 +it 07_gas 2 155 0.0 1.0 +it 08_non-res 2 155 0.0 1.0 it 09_hydro_pump 2 155 0.0 0.0 -it 01_solar 2 156 1.0 0.0 -it 02_wind_on 2 156 1.0 0.0 -it 03_wind_off 2 156 1.0 0.0 -it 04_res 2 156 1.0 0.0 -it 05_nuclear 2 156 1.0 0.0 -it 06_coal 2 156 1.0 0.0 -it 07_gas 2 156 1.0 0.0 -it 08_non-res 2 156 1.0 0.0 +it 01_solar 2 156 0.0 1.0 +it 02_wind_on 2 156 0.0 1.0 +it 03_wind_off 2 156 0.0 1.0 +it 04_res 2 156 0.0 1.0 +it 05_nuclear 2 156 0.0 1.0 +it 06_coal 2 156 0.0 1.0 +it 07_gas 2 156 0.0 1.0 +it 08_non-res 2 156 0.0 1.0 it 09_hydro_pump 2 156 0.0 0.0 -it 01_solar 2 157 1.0 0.0 -it 02_wind_on 2 157 1.0 0.0 -it 03_wind_off 2 157 1.0 0.0 -it 04_res 2 157 1.0 0.0 -it 05_nuclear 2 157 1.0 0.0 -it 06_coal 2 157 1.0 0.0 -it 07_gas 2 157 1.0 0.0 -it 08_non-res 2 157 1.0 0.0 +it 01_solar 2 157 0.0 1.0 +it 02_wind_on 2 157 0.0 1.0 +it 03_wind_off 2 157 0.0 1.0 +it 04_res 2 157 0.0 1.0 +it 05_nuclear 2 157 0.0 1.0 +it 06_coal 2 157 0.0 1.0 +it 07_gas 2 157 0.0 1.0 +it 08_non-res 2 157 0.0 1.0 it 09_hydro_pump 2 157 0.0 0.0 -it 01_solar 2 158 1.0 0.0 -it 02_wind_on 2 158 1.0 0.0 -it 03_wind_off 2 158 1.0 0.0 -it 04_res 2 158 1.0 0.0 -it 05_nuclear 2 158 1.0 0.0 -it 06_coal 2 158 1.0 0.0 -it 07_gas 2 158 1.0 0.0 -it 08_non-res 2 158 1.0 0.0 +it 01_solar 2 158 0.0 1.0 +it 02_wind_on 2 158 0.0 1.0 +it 03_wind_off 2 158 0.0 1.0 +it 04_res 2 158 0.0 1.0 +it 05_nuclear 2 158 0.0 1.0 +it 06_coal 2 158 0.0 1.0 +it 07_gas 2 158 0.0 1.0 +it 08_non-res 2 158 0.0 1.0 it 09_hydro_pump 2 158 0.0 0.0 -it 01_solar 2 159 1.0 0.0 -it 02_wind_on 2 159 1.0 0.0 -it 03_wind_off 2 159 1.0 0.0 -it 04_res 2 159 1.0 0.0 -it 05_nuclear 2 159 1.0 0.0 -it 06_coal 2 159 1.0 0.0 -it 07_gas 2 159 1.0 0.0 -it 08_non-res 2 159 1.0 0.0 +it 01_solar 2 159 0.0 1.0 +it 02_wind_on 2 159 0.0 1.0 +it 03_wind_off 2 159 0.0 1.0 +it 04_res 2 159 0.0 1.0 +it 05_nuclear 2 159 0.0 1.0 +it 06_coal 2 159 0.0 1.0 +it 07_gas 2 159 0.0 1.0 +it 08_non-res 2 159 0.0 1.0 it 09_hydro_pump 2 159 0.0 0.0 -it 01_solar 2 160 1.0 0.0 -it 02_wind_on 2 160 1.0 0.0 -it 03_wind_off 2 160 1.0 0.0 -it 04_res 2 160 1.0 0.0 -it 05_nuclear 2 160 1.0 0.0 -it 06_coal 2 160 1.0 0.0 -it 07_gas 2 160 1.0 0.0 -it 08_non-res 2 160 1.0 0.0 +it 01_solar 2 160 0.0 1.0 +it 02_wind_on 2 160 0.0 1.0 +it 03_wind_off 2 160 0.0 1.0 +it 04_res 2 160 0.0 1.0 +it 05_nuclear 2 160 0.0 1.0 +it 06_coal 2 160 0.0 1.0 +it 07_gas 2 160 0.0 1.0 +it 08_non-res 2 160 0.0 1.0 it 09_hydro_pump 2 160 0.0 0.0 -it 01_solar 2 161 1.0 0.0 -it 02_wind_on 2 161 1.0 0.0 -it 03_wind_off 2 161 1.0 0.0 -it 04_res 2 161 1.0 0.0 -it 05_nuclear 2 161 1.0 0.0 -it 06_coal 2 161 1.0 0.0 -it 07_gas 2 161 1.0 0.0 -it 08_non-res 2 161 1.0 0.0 +it 01_solar 2 161 0.0 1.0 +it 02_wind_on 2 161 0.0 1.0 +it 03_wind_off 2 161 0.0 1.0 +it 04_res 2 161 0.0 1.0 +it 05_nuclear 2 161 0.0 1.0 +it 06_coal 2 161 0.0 1.0 +it 07_gas 2 161 0.0 1.0 +it 08_non-res 2 161 0.0 1.0 it 09_hydro_pump 2 161 0.0 0.0 -it 01_solar 2 162 1.0 0.0 -it 02_wind_on 2 162 1.0 0.0 -it 03_wind_off 2 162 1.0 0.0 -it 04_res 2 162 1.0 0.0 -it 05_nuclear 2 162 1.0 0.0 -it 06_coal 2 162 1.0 0.0 -it 07_gas 2 162 1.0 0.0 -it 08_non-res 2 162 1.0 0.0 -it 09_hydro_pump 2 162 1.0 0.0 -it 01_solar 2 163 1.0 0.0 -it 02_wind_on 2 163 1.0 0.0 -it 03_wind_off 2 163 1.0 0.0 -it 04_res 2 163 1.0 0.0 -it 05_nuclear 2 163 1.0 0.0 -it 06_coal 2 163 1.0 0.0 -it 07_gas 2 163 1.0 0.0 -it 08_non-res 2 163 1.0 0.0 -it 09_hydro_pump 2 163 1.0 0.0 -it 01_solar 2 164 1.0 0.0 -it 02_wind_on 2 164 1.0 0.0 -it 03_wind_off 2 164 1.0 0.0 -it 04_res 2 164 1.0 0.0 -it 05_nuclear 2 164 1.0 0.0 -it 06_coal 2 164 1.0 0.0 -it 07_gas 2 164 1.0 0.0 -it 08_non-res 2 164 1.0 0.0 -it 09_hydro_pump 2 164 1.0 0.0 -it 01_solar 2 165 1.0 0.0 -it 02_wind_on 2 165 1.0 0.0 -it 03_wind_off 2 165 1.0 0.0 -it 04_res 2 165 1.0 0.0 -it 05_nuclear 2 165 1.0 0.0 -it 06_coal 2 165 1.0 0.0 -it 07_gas 2 165 1.0 0.0 -it 08_non-res 2 165 1.0 0.0 -it 09_hydro_pump 2 165 1.0 0.0 -it 01_solar 2 166 1.0 0.0 -it 02_wind_on 2 166 1.0 0.0 -it 03_wind_off 2 166 1.0 0.0 -it 04_res 2 166 1.0 0.0 -it 05_nuclear 2 166 1.0 0.0 -it 06_coal 2 166 1.0 0.0 -it 07_gas 2 166 1.0 0.0 -it 08_non-res 2 166 1.0 0.0 -it 09_hydro_pump 2 166 1.0 0.0 -it 01_solar 2 167 1.0 0.0 -it 02_wind_on 2 167 1.0 0.0 -it 03_wind_off 2 167 1.0 0.0 -it 04_res 2 167 1.0 0.0 -it 05_nuclear 2 167 1.0 0.0 -it 06_coal 2 167 1.0 0.0 -it 07_gas 2 167 1.0 0.0 -it 08_non-res 2 167 1.0 0.0 -it 09_hydro_pump 2 167 1.0 0.0 -it 01_solar 2 168 1.0 0.0 -it 02_wind_on 2 168 1.0 0.0 -it 03_wind_off 2 168 1.0 0.0 -it 04_res 2 168 1.0 0.0 -it 05_nuclear 2 168 1.0 0.0 -it 06_coal 2 168 1.0 0.0 -it 07_gas 2 168 1.0 0.0 -it 08_non-res 2 168 1.0 0.0 -it 09_hydro_pump 2 168 1.0 0.0 +it 01_solar 2 162 0.0 1.0 +it 02_wind_on 2 162 0.0 1.0 +it 03_wind_off 2 162 0.0 1.0 +it 04_res 2 162 0.0 1.0 +it 05_nuclear 2 162 0.0 1.0 +it 06_coal 2 162 0.0 1.0 +it 07_gas 2 162 0.0 1.0 +it 08_non-res 2 162 0.0 1.0 +it 09_hydro_pump 2 162 0.0 1.0 +it 01_solar 2 163 0.0 1.0 +it 02_wind_on 2 163 0.0 1.0 +it 03_wind_off 2 163 0.0 1.0 +it 04_res 2 163 0.0 1.0 +it 05_nuclear 2 163 0.0 1.0 +it 06_coal 2 163 0.0 1.0 +it 07_gas 2 163 0.0 1.0 +it 08_non-res 2 163 0.0 1.0 +it 09_hydro_pump 2 163 0.0 1.0 +it 01_solar 2 164 0.0 1.0 +it 02_wind_on 2 164 0.0 1.0 +it 03_wind_off 2 164 0.0 1.0 +it 04_res 2 164 0.0 1.0 +it 05_nuclear 2 164 0.0 1.0 +it 06_coal 2 164 0.0 1.0 +it 07_gas 2 164 0.0 1.0 +it 08_non-res 2 164 0.0 1.0 +it 09_hydro_pump 2 164 0.0 1.0 +it 01_solar 2 165 0.0 1.0 +it 02_wind_on 2 165 0.0 1.0 +it 03_wind_off 2 165 0.0 1.0 +it 04_res 2 165 0.0 1.0 +it 05_nuclear 2 165 0.0 1.0 +it 06_coal 2 165 0.0 1.0 +it 07_gas 2 165 0.0 1.0 +it 08_non-res 2 165 0.0 1.0 +it 09_hydro_pump 2 165 0.0 1.0 +it 01_solar 2 166 0.0 1.0 +it 02_wind_on 2 166 0.0 1.0 +it 03_wind_off 2 166 0.0 1.0 +it 04_res 2 166 0.0 1.0 +it 05_nuclear 2 166 0.0 1.0 +it 06_coal 2 166 0.0 1.0 +it 07_gas 2 166 0.0 1.0 +it 08_non-res 2 166 0.0 1.0 +it 09_hydro_pump 2 166 0.0 1.0 +it 01_solar 2 167 0.0 1.0 +it 02_wind_on 2 167 0.0 1.0 +it 03_wind_off 2 167 0.0 1.0 +it 04_res 2 167 0.0 1.0 +it 05_nuclear 2 167 0.0 1.0 +it 06_coal 2 167 0.0 1.0 +it 07_gas 2 167 0.0 1.0 +it 08_non-res 2 167 0.0 1.0 +it 09_hydro_pump 2 167 0.0 1.0 +it 01_solar 2 168 0.0 1.0 +it 02_wind_on 2 168 0.0 1.0 +it 03_wind_off 2 168 0.0 1.0 +it 04_res 2 168 0.0 1.0 +it 05_nuclear 2 168 0.0 1.0 +it 06_coal 2 168 0.0 1.0 +it 07_gas 2 168 0.0 1.0 +it 08_non-res 2 168 0.0 1.0 +it 09_hydro_pump 2 168 0.0 1.0 it 01_solar 2 169 0.0 0.0 it 02_wind_on 2 169 0.0 0.0 it 03_wind_off 2 169 0.0 0.0 @@ -22688,7 +22688,7 @@ it 06_coal 2 169 0.0 0.0 it 07_gas 2 169 0.0 0.0 it 08_non-res 2 169 0.0 0.0 it 09_hydro_pump 2 169 0.0 0.0 -it 01_solar 2 170 1.0 0.0 +it 01_solar 2 170 0.0 1.0 it 02_wind_on 2 170 0.0 0.0 it 03_wind_off 2 170 0.0 0.0 it 04_res 2 170 0.0 0.0 @@ -22697,7 +22697,7 @@ it 06_coal 2 170 0.0 0.0 it 07_gas 2 170 0.0 0.0 it 08_non-res 2 170 0.0 0.0 it 09_hydro_pump 2 170 0.0 0.0 -it 01_solar 2 171 1.0 0.0 +it 01_solar 2 171 0.0 1.0 it 02_wind_on 2 171 0.0 0.0 it 03_wind_off 2 171 0.0 0.0 it 04_res 2 171 0.0 0.0 @@ -22706,7 +22706,7 @@ it 06_coal 2 171 0.0 0.0 it 07_gas 2 171 0.0 0.0 it 08_non-res 2 171 0.0 0.0 it 09_hydro_pump 2 171 0.0 0.0 -it 01_solar 2 172 1.0 0.0 +it 01_solar 2 172 0.0 1.0 it 02_wind_on 2 172 0.0 0.0 it 03_wind_off 2 172 0.0 0.0 it 04_res 2 172 0.0 0.0 @@ -22715,7 +22715,7 @@ it 06_coal 2 172 0.0 0.0 it 07_gas 2 172 0.0 0.0 it 08_non-res 2 172 0.0 0.0 it 09_hydro_pump 2 172 0.0 0.0 -it 01_solar 2 173 1.0 0.0 +it 01_solar 2 173 0.0 1.0 it 02_wind_on 2 173 0.0 0.0 it 03_wind_off 2 173 0.0 0.0 it 04_res 2 173 0.0 0.0 @@ -22724,7 +22724,7 @@ it 06_coal 2 173 0.0 0.0 it 07_gas 2 173 0.0 0.0 it 08_non-res 2 173 0.0 0.0 it 09_hydro_pump 2 173 0.0 0.0 -it 01_solar 2 174 1.0 0.0 +it 01_solar 2 174 0.0 1.0 it 02_wind_on 2 174 0.0 0.0 it 03_wind_off 2 174 0.0 0.0 it 04_res 2 174 0.0 0.0 @@ -22733,7 +22733,7 @@ it 06_coal 2 174 0.0 0.0 it 07_gas 2 174 0.0 0.0 it 08_non-res 2 174 0.0 0.0 it 09_hydro_pump 2 174 0.0 0.0 -it 01_solar 2 175 1.0 0.0 +it 01_solar 2 175 0.0 1.0 it 02_wind_on 2 175 0.0 0.0 it 03_wind_off 2 175 0.0 0.0 it 04_res 2 175 0.0 0.0 @@ -22742,7 +22742,7 @@ it 06_coal 2 175 0.0 0.0 it 07_gas 2 175 0.0 0.0 it 08_non-res 2 175 0.0 0.0 it 09_hydro_pump 2 175 0.0 0.0 -it 01_solar 2 176 1.0 0.0 +it 01_solar 2 176 0.0 1.0 it 02_wind_on 2 176 0.0 0.0 it 03_wind_off 2 176 0.0 0.0 it 04_res 2 176 0.0 0.0 @@ -22751,7 +22751,7 @@ it 06_coal 2 176 0.0 0.0 it 07_gas 2 176 0.0 0.0 it 08_non-res 2 176 0.0 0.0 it 09_hydro_pump 2 176 0.0 0.0 -it 01_solar 2 177 1.0 0.0 +it 01_solar 2 177 0.0 1.0 it 02_wind_on 2 177 0.0 0.0 it 03_wind_off 2 177 0.0 0.0 it 04_res 2 177 0.0 0.0 @@ -22760,7 +22760,7 @@ it 06_coal 2 177 0.0 0.0 it 07_gas 2 177 0.0 0.0 it 08_non-res 2 177 0.0 0.0 it 09_hydro_pump 2 177 0.0 0.0 -it 01_solar 2 178 1.0 0.0 +it 01_solar 2 178 0.0 1.0 it 02_wind_on 2 178 0.0 0.0 it 03_wind_off 2 178 0.0 0.0 it 04_res 2 178 0.0 0.0 @@ -22769,7 +22769,7 @@ it 06_coal 2 178 0.0 0.0 it 07_gas 2 178 0.0 0.0 it 08_non-res 2 178 0.0 0.0 it 09_hydro_pump 2 178 0.0 0.0 -it 01_solar 2 179 1.0 0.0 +it 01_solar 2 179 0.0 1.0 it 02_wind_on 2 179 0.0 0.0 it 03_wind_off 2 179 0.0 0.0 it 04_res 2 179 0.0 0.0 @@ -22778,7 +22778,7 @@ it 06_coal 2 179 0.0 0.0 it 07_gas 2 179 0.0 0.0 it 08_non-res 2 179 0.0 0.0 it 09_hydro_pump 2 179 0.0 0.0 -it 01_solar 2 180 1.0 0.0 +it 01_solar 2 180 0.0 1.0 it 02_wind_on 2 180 0.0 0.0 it 03_wind_off 2 180 0.0 0.0 it 04_res 2 180 0.0 0.0 @@ -22787,7 +22787,7 @@ it 06_coal 2 180 0.0 0.0 it 07_gas 2 180 0.0 0.0 it 08_non-res 2 180 0.0 0.0 it 09_hydro_pump 2 180 0.0 0.0 -it 01_solar 2 181 1.0 0.0 +it 01_solar 2 181 0.0 1.0 it 02_wind_on 2 181 0.0 0.0 it 03_wind_off 2 181 0.0 0.0 it 04_res 2 181 0.0 0.0 @@ -22796,7 +22796,7 @@ it 06_coal 2 181 0.0 0.0 it 07_gas 2 181 0.0 0.0 it 08_non-res 2 181 0.0 0.0 it 09_hydro_pump 2 181 0.0 0.0 -it 01_solar 2 182 1.0 0.0 +it 01_solar 2 182 0.0 1.0 it 02_wind_on 2 182 0.0 0.0 it 03_wind_off 2 182 0.0 0.0 it 04_res 2 182 0.0 0.0 @@ -22805,7 +22805,7 @@ it 06_coal 2 182 0.0 0.0 it 07_gas 2 182 0.0 0.0 it 08_non-res 2 182 0.0 0.0 it 09_hydro_pump 2 182 0.0 0.0 -it 01_solar 2 183 1.0 0.0 +it 01_solar 2 183 0.0 1.0 it 02_wind_on 2 183 0.0 0.0 it 03_wind_off 2 183 0.0 0.0 it 04_res 2 183 0.0 0.0 @@ -22814,7 +22814,7 @@ it 06_coal 2 183 0.0 0.0 it 07_gas 2 183 0.0 0.0 it 08_non-res 2 183 0.0 0.0 it 09_hydro_pump 2 183 0.0 0.0 -it 01_solar 2 184 1.0 0.0 +it 01_solar 2 184 0.0 1.0 it 02_wind_on 2 184 0.0 0.0 it 03_wind_off 2 184 0.0 0.0 it 04_res 2 184 0.0 0.0 @@ -22823,7 +22823,7 @@ it 06_coal 2 184 0.0 0.0 it 07_gas 2 184 0.0 0.0 it 08_non-res 2 184 0.0 0.0 it 09_hydro_pump 2 184 0.0 0.0 -it 01_solar 2 185 1.0 0.0 +it 01_solar 2 185 0.0 1.0 it 02_wind_on 2 185 0.0 0.0 it 03_wind_off 2 185 0.0 0.0 it 04_res 2 185 0.0 0.0 @@ -22832,7 +22832,7 @@ it 06_coal 2 185 0.0 0.0 it 07_gas 2 185 0.0 0.0 it 08_non-res 2 185 0.0 0.0 it 09_hydro_pump 2 185 0.0 0.0 -it 01_solar 2 186 1.0 0.0 +it 01_solar 2 186 0.0 1.0 it 02_wind_on 2 186 0.0 0.0 it 03_wind_off 2 186 0.0 0.0 it 04_res 2 186 0.0 0.0 @@ -22841,7 +22841,7 @@ it 06_coal 2 186 0.0 0.0 it 07_gas 2 186 0.0 0.0 it 08_non-res 2 186 0.0 0.0 it 09_hydro_pump 2 186 0.0 0.0 -it 01_solar 2 187 1.0 0.0 +it 01_solar 2 187 0.0 1.0 it 02_wind_on 2 187 0.0 0.0 it 03_wind_off 2 187 0.0 0.0 it 04_res 2 187 0.0 0.0 @@ -22850,7 +22850,7 @@ it 06_coal 2 187 0.0 0.0 it 07_gas 2 187 0.0 0.0 it 08_non-res 2 187 0.0 0.0 it 09_hydro_pump 2 187 0.0 0.0 -it 01_solar 2 188 1.0 0.0 +it 01_solar 2 188 0.0 1.0 it 02_wind_on 2 188 0.0 0.0 it 03_wind_off 2 188 0.0 0.0 it 04_res 2 188 0.0 0.0 @@ -22859,7 +22859,7 @@ it 06_coal 2 188 0.0 0.0 it 07_gas 2 188 0.0 0.0 it 08_non-res 2 188 0.0 0.0 it 09_hydro_pump 2 188 0.0 0.0 -it 01_solar 2 189 1.0 0.0 +it 01_solar 2 189 0.0 1.0 it 02_wind_on 2 189 0.0 0.0 it 03_wind_off 2 189 0.0 0.0 it 04_res 2 189 0.0 0.0 @@ -22868,8 +22868,8 @@ it 06_coal 2 189 0.0 0.0 it 07_gas 2 189 0.0 0.0 it 08_non-res 2 189 0.0 0.0 it 09_hydro_pump 2 189 0.0 0.0 -it 01_solar 2 190 1.0 0.0 -it 02_wind_on 2 190 1.0 0.0 +it 01_solar 2 190 0.0 1.0 +it 02_wind_on 2 190 0.0 1.0 it 03_wind_off 2 190 0.0 0.0 it 04_res 2 190 0.0 0.0 it 05_nuclear 2 190 0.0 0.0 @@ -22877,8 +22877,8 @@ it 06_coal 2 190 0.0 0.0 it 07_gas 2 190 0.0 0.0 it 08_non-res 2 190 0.0 0.0 it 09_hydro_pump 2 190 0.0 0.0 -it 01_solar 2 191 1.0 0.0 -it 02_wind_on 2 191 1.0 0.0 +it 01_solar 2 191 0.0 1.0 +it 02_wind_on 2 191 0.0 1.0 it 03_wind_off 2 191 0.0 0.0 it 04_res 2 191 0.0 0.0 it 05_nuclear 2 191 0.0 0.0 @@ -22886,8 +22886,8 @@ it 06_coal 2 191 0.0 0.0 it 07_gas 2 191 0.0 0.0 it 08_non-res 2 191 0.0 0.0 it 09_hydro_pump 2 191 0.0 0.0 -it 01_solar 2 192 1.0 0.0 -it 02_wind_on 2 192 1.0 0.0 +it 01_solar 2 192 0.0 1.0 +it 02_wind_on 2 192 0.0 1.0 it 03_wind_off 2 192 0.0 0.0 it 04_res 2 192 0.0 0.0 it 05_nuclear 2 192 0.0 0.0 @@ -22895,8 +22895,8 @@ it 06_coal 2 192 0.0 0.0 it 07_gas 2 192 0.0 0.0 it 08_non-res 2 192 0.0 0.0 it 09_hydro_pump 2 192 0.0 0.0 -it 01_solar 2 193 1.0 0.0 -it 02_wind_on 2 193 1.0 0.0 +it 01_solar 2 193 0.0 1.0 +it 02_wind_on 2 193 0.0 1.0 it 03_wind_off 2 193 0.0 0.0 it 04_res 2 193 0.0 0.0 it 05_nuclear 2 193 0.0 0.0 @@ -22904,8 +22904,8 @@ it 06_coal 2 193 0.0 0.0 it 07_gas 2 193 0.0 0.0 it 08_non-res 2 193 0.0 0.0 it 09_hydro_pump 2 193 0.0 0.0 -it 01_solar 2 194 1.0 0.0 -it 02_wind_on 2 194 1.0 0.0 +it 01_solar 2 194 0.0 1.0 +it 02_wind_on 2 194 0.0 1.0 it 03_wind_off 2 194 0.0 0.0 it 04_res 2 194 0.0 0.0 it 05_nuclear 2 194 0.0 0.0 @@ -22913,8 +22913,8 @@ it 06_coal 2 194 0.0 0.0 it 07_gas 2 194 0.0 0.0 it 08_non-res 2 194 0.0 0.0 it 09_hydro_pump 2 194 0.0 0.0 -it 01_solar 2 195 1.0 0.0 -it 02_wind_on 2 195 1.0 0.0 +it 01_solar 2 195 0.0 1.0 +it 02_wind_on 2 195 0.0 1.0 it 03_wind_off 2 195 0.0 0.0 it 04_res 2 195 0.0 0.0 it 05_nuclear 2 195 0.0 0.0 @@ -22922,8 +22922,8 @@ it 06_coal 2 195 0.0 0.0 it 07_gas 2 195 0.0 0.0 it 08_non-res 2 195 0.0 0.0 it 09_hydro_pump 2 195 0.0 0.0 -it 01_solar 2 196 1.0 0.0 -it 02_wind_on 2 196 1.0 0.0 +it 01_solar 2 196 0.0 1.0 +it 02_wind_on 2 196 0.0 1.0 it 03_wind_off 2 196 0.0 0.0 it 04_res 2 196 0.0 0.0 it 05_nuclear 2 196 0.0 0.0 @@ -22931,8 +22931,8 @@ it 06_coal 2 196 0.0 0.0 it 07_gas 2 196 0.0 0.0 it 08_non-res 2 196 0.0 0.0 it 09_hydro_pump 2 196 0.0 0.0 -it 01_solar 2 197 1.0 0.0 -it 02_wind_on 2 197 1.0 0.0 +it 01_solar 2 197 0.0 1.0 +it 02_wind_on 2 197 0.0 1.0 it 03_wind_off 2 197 0.0 0.0 it 04_res 2 197 0.0 0.0 it 05_nuclear 2 197 0.0 0.0 @@ -22940,8 +22940,8 @@ it 06_coal 2 197 0.0 0.0 it 07_gas 2 197 0.0 0.0 it 08_non-res 2 197 0.0 0.0 it 09_hydro_pump 2 197 0.0 0.0 -it 01_solar 2 198 1.0 0.0 -it 02_wind_on 2 198 1.0 0.0 +it 01_solar 2 198 0.0 1.0 +it 02_wind_on 2 198 0.0 1.0 it 03_wind_off 2 198 0.0 0.0 it 04_res 2 198 0.0 0.0 it 05_nuclear 2 198 0.0 0.0 @@ -22949,8 +22949,8 @@ it 06_coal 2 198 0.0 0.0 it 07_gas 2 198 0.0 0.0 it 08_non-res 2 198 0.0 0.0 it 09_hydro_pump 2 198 0.0 0.0 -it 01_solar 2 199 1.0 0.0 -it 02_wind_on 2 199 1.0 0.0 +it 01_solar 2 199 0.0 1.0 +it 02_wind_on 2 199 0.0 1.0 it 03_wind_off 2 199 0.0 0.0 it 04_res 2 199 0.0 0.0 it 05_nuclear 2 199 0.0 0.0 @@ -22958,8 +22958,8 @@ it 06_coal 2 199 0.0 0.0 it 07_gas 2 199 0.0 0.0 it 08_non-res 2 199 0.0 0.0 it 09_hydro_pump 2 199 0.0 0.0 -it 01_solar 2 200 1.0 0.0 -it 02_wind_on 2 200 1.0 0.0 +it 01_solar 2 200 0.0 1.0 +it 02_wind_on 2 200 0.0 1.0 it 03_wind_off 2 200 0.0 0.0 it 04_res 2 200 0.0 0.0 it 05_nuclear 2 200 0.0 0.0 @@ -22967,8 +22967,8 @@ it 06_coal 2 200 0.0 0.0 it 07_gas 2 200 0.0 0.0 it 08_non-res 2 200 0.0 0.0 it 09_hydro_pump 2 200 0.0 0.0 -it 01_solar 2 201 1.0 0.0 -it 02_wind_on 2 201 1.0 0.0 +it 01_solar 2 201 0.0 1.0 +it 02_wind_on 2 201 0.0 1.0 it 03_wind_off 2 201 0.0 0.0 it 04_res 2 201 0.0 0.0 it 05_nuclear 2 201 0.0 0.0 @@ -22976,8 +22976,8 @@ it 06_coal 2 201 0.0 0.0 it 07_gas 2 201 0.0 0.0 it 08_non-res 2 201 0.0 0.0 it 09_hydro_pump 2 201 0.0 0.0 -it 01_solar 2 202 1.0 0.0 -it 02_wind_on 2 202 1.0 0.0 +it 01_solar 2 202 0.0 1.0 +it 02_wind_on 2 202 0.0 1.0 it 03_wind_off 2 202 0.0 0.0 it 04_res 2 202 0.0 0.0 it 05_nuclear 2 202 0.0 0.0 @@ -22985,8 +22985,8 @@ it 06_coal 2 202 0.0 0.0 it 07_gas 2 202 0.0 0.0 it 08_non-res 2 202 0.0 0.0 it 09_hydro_pump 2 202 0.0 0.0 -it 01_solar 2 203 1.0 0.0 -it 02_wind_on 2 203 1.0 0.0 +it 01_solar 2 203 0.0 1.0 +it 02_wind_on 2 203 0.0 1.0 it 03_wind_off 2 203 0.0 0.0 it 04_res 2 203 0.0 0.0 it 05_nuclear 2 203 0.0 0.0 @@ -22994,8 +22994,8 @@ it 06_coal 2 203 0.0 0.0 it 07_gas 2 203 0.0 0.0 it 08_non-res 2 203 0.0 0.0 it 09_hydro_pump 2 203 0.0 0.0 -it 01_solar 2 204 1.0 0.0 -it 02_wind_on 2 204 1.0 0.0 +it 01_solar 2 204 0.0 1.0 +it 02_wind_on 2 204 0.0 1.0 it 03_wind_off 2 204 0.0 0.0 it 04_res 2 204 0.0 0.0 it 05_nuclear 2 204 0.0 0.0 @@ -23003,8 +23003,8 @@ it 06_coal 2 204 0.0 0.0 it 07_gas 2 204 0.0 0.0 it 08_non-res 2 204 0.0 0.0 it 09_hydro_pump 2 204 0.0 0.0 -it 01_solar 2 205 1.0 0.0 -it 02_wind_on 2 205 1.0 0.0 +it 01_solar 2 205 0.0 1.0 +it 02_wind_on 2 205 0.0 1.0 it 03_wind_off 2 205 0.0 0.0 it 04_res 2 205 0.0 0.0 it 05_nuclear 2 205 0.0 0.0 @@ -23012,8 +23012,8 @@ it 06_coal 2 205 0.0 0.0 it 07_gas 2 205 0.0 0.0 it 08_non-res 2 205 0.0 0.0 it 09_hydro_pump 2 205 0.0 0.0 -it 01_solar 2 206 1.0 0.0 -it 02_wind_on 2 206 1.0 0.0 +it 01_solar 2 206 0.0 1.0 +it 02_wind_on 2 206 0.0 1.0 it 03_wind_off 2 206 0.0 0.0 it 04_res 2 206 0.0 0.0 it 05_nuclear 2 206 0.0 0.0 @@ -23021,8 +23021,8 @@ it 06_coal 2 206 0.0 0.0 it 07_gas 2 206 0.0 0.0 it 08_non-res 2 206 0.0 0.0 it 09_hydro_pump 2 206 0.0 0.0 -it 01_solar 2 207 1.0 0.0 -it 02_wind_on 2 207 1.0 0.0 +it 01_solar 2 207 0.0 1.0 +it 02_wind_on 2 207 0.0 1.0 it 03_wind_off 2 207 0.0 0.0 it 04_res 2 207 0.0 0.0 it 05_nuclear 2 207 0.0 0.0 @@ -23030,8 +23030,8 @@ it 06_coal 2 207 0.0 0.0 it 07_gas 2 207 0.0 0.0 it 08_non-res 2 207 0.0 0.0 it 09_hydro_pump 2 207 0.0 0.0 -it 01_solar 2 208 1.0 0.0 -it 02_wind_on 2 208 1.0 0.0 +it 01_solar 2 208 0.0 1.0 +it 02_wind_on 2 208 0.0 1.0 it 03_wind_off 2 208 0.0 0.0 it 04_res 2 208 0.0 0.0 it 05_nuclear 2 208 0.0 0.0 @@ -23039,8 +23039,8 @@ it 06_coal 2 208 0.0 0.0 it 07_gas 2 208 0.0 0.0 it 08_non-res 2 208 0.0 0.0 it 09_hydro_pump 2 208 0.0 0.0 -it 01_solar 2 209 1.0 0.0 -it 02_wind_on 2 209 1.0 0.0 +it 01_solar 2 209 0.0 1.0 +it 02_wind_on 2 209 0.0 1.0 it 03_wind_off 2 209 0.0 0.0 it 04_res 2 209 0.0 0.0 it 05_nuclear 2 209 0.0 0.0 @@ -23048,1146 +23048,1146 @@ it 06_coal 2 209 0.0 0.0 it 07_gas 2 209 0.0 0.0 it 08_non-res 2 209 0.0 0.0 it 09_hydro_pump 2 209 0.0 0.0 -it 01_solar 2 210 1.0 0.0 -it 02_wind_on 2 210 1.0 0.0 -it 03_wind_off 2 210 1.0 0.0 +it 01_solar 2 210 0.0 1.0 +it 02_wind_on 2 210 0.0 1.0 +it 03_wind_off 2 210 0.0 1.0 it 04_res 2 210 0.0 0.0 it 05_nuclear 2 210 0.0 0.0 it 06_coal 2 210 0.0 0.0 it 07_gas 2 210 0.0 0.0 it 08_non-res 2 210 0.0 0.0 it 09_hydro_pump 2 210 0.0 0.0 -it 01_solar 2 211 1.0 0.0 -it 02_wind_on 2 211 1.0 0.0 -it 03_wind_off 2 211 1.0 0.0 +it 01_solar 2 211 0.0 1.0 +it 02_wind_on 2 211 0.0 1.0 +it 03_wind_off 2 211 0.0 1.0 it 04_res 2 211 0.0 0.0 it 05_nuclear 2 211 0.0 0.0 it 06_coal 2 211 0.0 0.0 it 07_gas 2 211 0.0 0.0 it 08_non-res 2 211 0.0 0.0 it 09_hydro_pump 2 211 0.0 0.0 -it 01_solar 2 212 1.0 0.0 -it 02_wind_on 2 212 1.0 0.0 -it 03_wind_off 2 212 1.0 0.0 +it 01_solar 2 212 0.0 1.0 +it 02_wind_on 2 212 0.0 1.0 +it 03_wind_off 2 212 0.0 1.0 it 04_res 2 212 0.0 0.0 it 05_nuclear 2 212 0.0 0.0 it 06_coal 2 212 0.0 0.0 it 07_gas 2 212 0.0 0.0 it 08_non-res 2 212 0.0 0.0 it 09_hydro_pump 2 212 0.0 0.0 -it 01_solar 2 213 1.0 0.0 -it 02_wind_on 2 213 1.0 0.0 -it 03_wind_off 2 213 1.0 0.0 +it 01_solar 2 213 0.0 1.0 +it 02_wind_on 2 213 0.0 1.0 +it 03_wind_off 2 213 0.0 1.0 it 04_res 2 213 0.0 0.0 it 05_nuclear 2 213 0.0 0.0 it 06_coal 2 213 0.0 0.0 it 07_gas 2 213 0.0 0.0 it 08_non-res 2 213 0.0 0.0 it 09_hydro_pump 2 213 0.0 0.0 -it 01_solar 2 214 1.0 0.0 -it 02_wind_on 2 214 1.0 0.0 -it 03_wind_off 2 214 1.0 0.0 +it 01_solar 2 214 0.0 1.0 +it 02_wind_on 2 214 0.0 1.0 +it 03_wind_off 2 214 0.0 1.0 it 04_res 2 214 0.0 0.0 it 05_nuclear 2 214 0.0 0.0 it 06_coal 2 214 0.0 0.0 it 07_gas 2 214 0.0 0.0 it 08_non-res 2 214 0.0 0.0 it 09_hydro_pump 2 214 0.0 0.0 -it 01_solar 2 215 1.0 0.0 -it 02_wind_on 2 215 1.0 0.0 -it 03_wind_off 2 215 1.0 0.0 +it 01_solar 2 215 0.0 1.0 +it 02_wind_on 2 215 0.0 1.0 +it 03_wind_off 2 215 0.0 1.0 it 04_res 2 215 0.0 0.0 it 05_nuclear 2 215 0.0 0.0 it 06_coal 2 215 0.0 0.0 it 07_gas 2 215 0.0 0.0 it 08_non-res 2 215 0.0 0.0 it 09_hydro_pump 2 215 0.0 0.0 -it 01_solar 2 216 1.0 0.0 -it 02_wind_on 2 216 1.0 0.0 -it 03_wind_off 2 216 1.0 0.0 +it 01_solar 2 216 0.0 1.0 +it 02_wind_on 2 216 0.0 1.0 +it 03_wind_off 2 216 0.0 1.0 it 04_res 2 216 0.0 0.0 it 05_nuclear 2 216 0.0 0.0 it 06_coal 2 216 0.0 0.0 it 07_gas 2 216 0.0 0.0 it 08_non-res 2 216 0.0 0.0 it 09_hydro_pump 2 216 0.0 0.0 -it 01_solar 2 217 1.0 0.0 -it 02_wind_on 2 217 1.0 0.0 -it 03_wind_off 2 217 1.0 0.0 +it 01_solar 2 217 0.0 1.0 +it 02_wind_on 2 217 0.0 1.0 +it 03_wind_off 2 217 0.0 1.0 it 04_res 2 217 0.0 0.0 it 05_nuclear 2 217 0.0 0.0 it 06_coal 2 217 0.0 0.0 it 07_gas 2 217 0.0 0.0 it 08_non-res 2 217 0.0 0.0 it 09_hydro_pump 2 217 0.0 0.0 -it 01_solar 2 218 1.0 0.0 -it 02_wind_on 2 218 1.0 0.0 -it 03_wind_off 2 218 1.0 0.0 +it 01_solar 2 218 0.0 1.0 +it 02_wind_on 2 218 0.0 1.0 +it 03_wind_off 2 218 0.0 1.0 it 04_res 2 218 0.0 0.0 it 05_nuclear 2 218 0.0 0.0 it 06_coal 2 218 0.0 0.0 it 07_gas 2 218 0.0 0.0 it 08_non-res 2 218 0.0 0.0 it 09_hydro_pump 2 218 0.0 0.0 -it 01_solar 2 219 1.0 0.0 -it 02_wind_on 2 219 1.0 0.0 -it 03_wind_off 2 219 1.0 0.0 +it 01_solar 2 219 0.0 1.0 +it 02_wind_on 2 219 0.0 1.0 +it 03_wind_off 2 219 0.0 1.0 it 04_res 2 219 0.0 0.0 it 05_nuclear 2 219 0.0 0.0 it 06_coal 2 219 0.0 0.0 it 07_gas 2 219 0.0 0.0 it 08_non-res 2 219 0.0 0.0 it 09_hydro_pump 2 219 0.0 0.0 -it 01_solar 2 220 1.0 0.0 -it 02_wind_on 2 220 1.0 0.0 -it 03_wind_off 2 220 1.0 0.0 +it 01_solar 2 220 0.0 1.0 +it 02_wind_on 2 220 0.0 1.0 +it 03_wind_off 2 220 0.0 1.0 it 04_res 2 220 0.0 0.0 it 05_nuclear 2 220 0.0 0.0 it 06_coal 2 220 0.0 0.0 it 07_gas 2 220 0.0 0.0 it 08_non-res 2 220 0.0 0.0 it 09_hydro_pump 2 220 0.0 0.0 -it 01_solar 2 221 1.0 0.0 -it 02_wind_on 2 221 1.0 0.0 -it 03_wind_off 2 221 1.0 0.0 +it 01_solar 2 221 0.0 1.0 +it 02_wind_on 2 221 0.0 1.0 +it 03_wind_off 2 221 0.0 1.0 it 04_res 2 221 0.0 0.0 it 05_nuclear 2 221 0.0 0.0 it 06_coal 2 221 0.0 0.0 it 07_gas 2 221 0.0 0.0 it 08_non-res 2 221 0.0 0.0 it 09_hydro_pump 2 221 0.0 0.0 -it 01_solar 2 222 1.0 0.0 -it 02_wind_on 2 222 1.0 0.0 -it 03_wind_off 2 222 1.0 0.0 +it 01_solar 2 222 0.0 1.0 +it 02_wind_on 2 222 0.0 1.0 +it 03_wind_off 2 222 0.0 1.0 it 04_res 2 222 0.0 0.0 it 05_nuclear 2 222 0.0 0.0 it 06_coal 2 222 0.0 0.0 it 07_gas 2 222 0.0 0.0 it 08_non-res 2 222 0.0 0.0 it 09_hydro_pump 2 222 0.0 0.0 -it 01_solar 2 223 1.0 0.0 -it 02_wind_on 2 223 1.0 0.0 -it 03_wind_off 2 223 1.0 0.0 +it 01_solar 2 223 0.0 1.0 +it 02_wind_on 2 223 0.0 1.0 +it 03_wind_off 2 223 0.0 1.0 it 04_res 2 223 0.0 0.0 it 05_nuclear 2 223 0.0 0.0 it 06_coal 2 223 0.0 0.0 it 07_gas 2 223 0.0 0.0 it 08_non-res 2 223 0.0 0.0 it 09_hydro_pump 2 223 0.0 0.0 -it 01_solar 2 224 1.0 0.0 -it 02_wind_on 2 224 1.0 0.0 -it 03_wind_off 2 224 1.0 0.0 +it 01_solar 2 224 0.0 1.0 +it 02_wind_on 2 224 0.0 1.0 +it 03_wind_off 2 224 0.0 1.0 it 04_res 2 224 0.0 0.0 it 05_nuclear 2 224 0.0 0.0 it 06_coal 2 224 0.0 0.0 it 07_gas 2 224 0.0 0.0 it 08_non-res 2 224 0.0 0.0 it 09_hydro_pump 2 224 0.0 0.0 -it 01_solar 2 225 1.0 0.0 -it 02_wind_on 2 225 1.0 0.0 -it 03_wind_off 2 225 1.0 0.0 +it 01_solar 2 225 0.0 1.0 +it 02_wind_on 2 225 0.0 1.0 +it 03_wind_off 2 225 0.0 1.0 it 04_res 2 225 0.0 0.0 it 05_nuclear 2 225 0.0 0.0 it 06_coal 2 225 0.0 0.0 it 07_gas 2 225 0.0 0.0 it 08_non-res 2 225 0.0 0.0 it 09_hydro_pump 2 225 0.0 0.0 -it 01_solar 2 226 1.0 0.0 -it 02_wind_on 2 226 1.0 0.0 -it 03_wind_off 2 226 1.0 0.0 +it 01_solar 2 226 0.0 1.0 +it 02_wind_on 2 226 0.0 1.0 +it 03_wind_off 2 226 0.0 1.0 it 04_res 2 226 0.0 0.0 it 05_nuclear 2 226 0.0 0.0 it 06_coal 2 226 0.0 0.0 it 07_gas 2 226 0.0 0.0 it 08_non-res 2 226 0.0 0.0 it 09_hydro_pump 2 226 0.0 0.0 -it 01_solar 2 227 1.0 0.0 -it 02_wind_on 2 227 1.0 0.0 -it 03_wind_off 2 227 1.0 0.0 +it 01_solar 2 227 0.0 1.0 +it 02_wind_on 2 227 0.0 1.0 +it 03_wind_off 2 227 0.0 1.0 it 04_res 2 227 0.0 0.0 it 05_nuclear 2 227 0.0 0.0 it 06_coal 2 227 0.0 0.0 it 07_gas 2 227 0.0 0.0 it 08_non-res 2 227 0.0 0.0 it 09_hydro_pump 2 227 0.0 0.0 -it 01_solar 2 228 1.0 0.0 -it 02_wind_on 2 228 1.0 0.0 -it 03_wind_off 2 228 1.0 0.0 +it 01_solar 2 228 0.0 1.0 +it 02_wind_on 2 228 0.0 1.0 +it 03_wind_off 2 228 0.0 1.0 it 04_res 2 228 0.0 0.0 it 05_nuclear 2 228 0.0 0.0 it 06_coal 2 228 0.0 0.0 it 07_gas 2 228 0.0 0.0 it 08_non-res 2 228 0.0 0.0 it 09_hydro_pump 2 228 0.0 0.0 -it 01_solar 2 229 1.0 0.0 -it 02_wind_on 2 229 1.0 0.0 -it 03_wind_off 2 229 1.0 0.0 +it 01_solar 2 229 0.0 1.0 +it 02_wind_on 2 229 0.0 1.0 +it 03_wind_off 2 229 0.0 1.0 it 04_res 2 229 0.0 0.0 it 05_nuclear 2 229 0.0 0.0 it 06_coal 2 229 0.0 0.0 it 07_gas 2 229 0.0 0.0 it 08_non-res 2 229 0.0 0.0 it 09_hydro_pump 2 229 0.0 0.0 -it 01_solar 2 230 1.0 0.0 -it 02_wind_on 2 230 1.0 0.0 -it 03_wind_off 2 230 1.0 0.0 -it 04_res 2 230 1.0 0.0 +it 01_solar 2 230 0.0 1.0 +it 02_wind_on 2 230 0.0 1.0 +it 03_wind_off 2 230 0.0 1.0 +it 04_res 2 230 0.0 1.0 it 05_nuclear 2 230 0.0 0.0 it 06_coal 2 230 0.0 0.0 it 07_gas 2 230 0.0 0.0 it 08_non-res 2 230 0.0 0.0 it 09_hydro_pump 2 230 0.0 0.0 -it 01_solar 2 231 1.0 0.0 -it 02_wind_on 2 231 1.0 0.0 -it 03_wind_off 2 231 1.0 0.0 -it 04_res 2 231 1.0 0.0 +it 01_solar 2 231 0.0 1.0 +it 02_wind_on 2 231 0.0 1.0 +it 03_wind_off 2 231 0.0 1.0 +it 04_res 2 231 0.0 1.0 it 05_nuclear 2 231 0.0 0.0 it 06_coal 2 231 0.0 0.0 it 07_gas 2 231 0.0 0.0 it 08_non-res 2 231 0.0 0.0 it 09_hydro_pump 2 231 0.0 0.0 -it 01_solar 2 232 1.0 0.0 -it 02_wind_on 2 232 1.0 0.0 -it 03_wind_off 2 232 1.0 0.0 -it 04_res 2 232 1.0 0.0 +it 01_solar 2 232 0.0 1.0 +it 02_wind_on 2 232 0.0 1.0 +it 03_wind_off 2 232 0.0 1.0 +it 04_res 2 232 0.0 1.0 it 05_nuclear 2 232 0.0 0.0 it 06_coal 2 232 0.0 0.0 it 07_gas 2 232 0.0 0.0 it 08_non-res 2 232 0.0 0.0 it 09_hydro_pump 2 232 0.0 0.0 -it 01_solar 2 233 1.0 0.0 -it 02_wind_on 2 233 1.0 0.0 -it 03_wind_off 2 233 1.0 0.0 -it 04_res 2 233 1.0 0.0 +it 01_solar 2 233 0.0 1.0 +it 02_wind_on 2 233 0.0 1.0 +it 03_wind_off 2 233 0.0 1.0 +it 04_res 2 233 0.0 1.0 it 05_nuclear 2 233 0.0 0.0 it 06_coal 2 233 0.0 0.0 it 07_gas 2 233 0.0 0.0 it 08_non-res 2 233 0.0 0.0 it 09_hydro_pump 2 233 0.0 0.0 -it 01_solar 2 234 1.0 0.0 -it 02_wind_on 2 234 1.0 0.0 -it 03_wind_off 2 234 1.0 0.0 -it 04_res 2 234 1.0 0.0 +it 01_solar 2 234 0.0 1.0 +it 02_wind_on 2 234 0.0 1.0 +it 03_wind_off 2 234 0.0 1.0 +it 04_res 2 234 0.0 1.0 it 05_nuclear 2 234 0.0 0.0 it 06_coal 2 234 0.0 0.0 it 07_gas 2 234 0.0 0.0 it 08_non-res 2 234 0.0 0.0 it 09_hydro_pump 2 234 0.0 0.0 -it 01_solar 2 235 1.0 0.0 -it 02_wind_on 2 235 1.0 0.0 -it 03_wind_off 2 235 1.0 0.0 -it 04_res 2 235 1.0 0.0 +it 01_solar 2 235 0.0 1.0 +it 02_wind_on 2 235 0.0 1.0 +it 03_wind_off 2 235 0.0 1.0 +it 04_res 2 235 0.0 1.0 it 05_nuclear 2 235 0.0 0.0 it 06_coal 2 235 0.0 0.0 it 07_gas 2 235 0.0 0.0 it 08_non-res 2 235 0.0 0.0 it 09_hydro_pump 2 235 0.0 0.0 -it 01_solar 2 236 1.0 0.0 -it 02_wind_on 2 236 1.0 0.0 -it 03_wind_off 2 236 1.0 0.0 -it 04_res 2 236 1.0 0.0 +it 01_solar 2 236 0.0 1.0 +it 02_wind_on 2 236 0.0 1.0 +it 03_wind_off 2 236 0.0 1.0 +it 04_res 2 236 0.0 1.0 it 05_nuclear 2 236 0.0 0.0 it 06_coal 2 236 0.0 0.0 it 07_gas 2 236 0.0 0.0 it 08_non-res 2 236 0.0 0.0 it 09_hydro_pump 2 236 0.0 0.0 -it 01_solar 2 237 1.0 0.0 -it 02_wind_on 2 237 1.0 0.0 -it 03_wind_off 2 237 1.0 0.0 -it 04_res 2 237 1.0 0.0 +it 01_solar 2 237 0.0 1.0 +it 02_wind_on 2 237 0.0 1.0 +it 03_wind_off 2 237 0.0 1.0 +it 04_res 2 237 0.0 1.0 it 05_nuclear 2 237 0.0 0.0 it 06_coal 2 237 0.0 0.0 it 07_gas 2 237 0.0 0.0 it 08_non-res 2 237 0.0 0.0 it 09_hydro_pump 2 237 0.0 0.0 -it 01_solar 2 238 1.0 0.0 -it 02_wind_on 2 238 1.0 0.0 -it 03_wind_off 2 238 1.0 0.0 -it 04_res 2 238 1.0 0.0 +it 01_solar 2 238 0.0 1.0 +it 02_wind_on 2 238 0.0 1.0 +it 03_wind_off 2 238 0.0 1.0 +it 04_res 2 238 0.0 1.0 it 05_nuclear 2 238 0.0 0.0 it 06_coal 2 238 0.0 0.0 it 07_gas 2 238 0.0 0.0 it 08_non-res 2 238 0.0 0.0 it 09_hydro_pump 2 238 0.0 0.0 -it 01_solar 2 239 1.0 0.0 -it 02_wind_on 2 239 1.0 0.0 -it 03_wind_off 2 239 1.0 0.0 -it 04_res 2 239 1.0 0.0 +it 01_solar 2 239 0.0 1.0 +it 02_wind_on 2 239 0.0 1.0 +it 03_wind_off 2 239 0.0 1.0 +it 04_res 2 239 0.0 1.0 it 05_nuclear 2 239 0.0 0.0 it 06_coal 2 239 0.0 0.0 it 07_gas 2 239 0.0 0.0 it 08_non-res 2 239 0.0 0.0 it 09_hydro_pump 2 239 0.0 0.0 -it 01_solar 2 240 1.0 0.0 -it 02_wind_on 2 240 1.0 0.0 -it 03_wind_off 2 240 1.0 0.0 -it 04_res 2 240 1.0 0.0 +it 01_solar 2 240 0.0 1.0 +it 02_wind_on 2 240 0.0 1.0 +it 03_wind_off 2 240 0.0 1.0 +it 04_res 2 240 0.0 1.0 it 05_nuclear 2 240 0.0 0.0 it 06_coal 2 240 0.0 0.0 it 07_gas 2 240 0.0 0.0 it 08_non-res 2 240 0.0 0.0 it 09_hydro_pump 2 240 0.0 0.0 -it 01_solar 2 241 1.0 0.0 -it 02_wind_on 2 241 1.0 0.0 -it 03_wind_off 2 241 1.0 0.0 -it 04_res 2 241 1.0 0.0 +it 01_solar 2 241 0.0 1.0 +it 02_wind_on 2 241 0.0 1.0 +it 03_wind_off 2 241 0.0 1.0 +it 04_res 2 241 0.0 1.0 it 05_nuclear 2 241 0.0 0.0 it 06_coal 2 241 0.0 0.0 it 07_gas 2 241 0.0 0.0 it 08_non-res 2 241 0.0 0.0 it 09_hydro_pump 2 241 0.0 0.0 -it 01_solar 2 242 1.0 0.0 -it 02_wind_on 2 242 1.0 0.0 -it 03_wind_off 2 242 1.0 0.0 -it 04_res 2 242 1.0 0.0 +it 01_solar 2 242 0.0 1.0 +it 02_wind_on 2 242 0.0 1.0 +it 03_wind_off 2 242 0.0 1.0 +it 04_res 2 242 0.0 1.0 it 05_nuclear 2 242 0.0 0.0 it 06_coal 2 242 0.0 0.0 it 07_gas 2 242 0.0 0.0 it 08_non-res 2 242 0.0 0.0 it 09_hydro_pump 2 242 0.0 0.0 -it 01_solar 2 243 1.0 0.0 -it 02_wind_on 2 243 1.0 0.0 -it 03_wind_off 2 243 1.0 0.0 -it 04_res 2 243 1.0 0.0 +it 01_solar 2 243 0.0 1.0 +it 02_wind_on 2 243 0.0 1.0 +it 03_wind_off 2 243 0.0 1.0 +it 04_res 2 243 0.0 1.0 it 05_nuclear 2 243 0.0 0.0 it 06_coal 2 243 0.0 0.0 it 07_gas 2 243 0.0 0.0 it 08_non-res 2 243 0.0 0.0 it 09_hydro_pump 2 243 0.0 0.0 -it 01_solar 2 244 1.0 0.0 -it 02_wind_on 2 244 1.0 0.0 -it 03_wind_off 2 244 1.0 0.0 -it 04_res 2 244 1.0 0.0 +it 01_solar 2 244 0.0 1.0 +it 02_wind_on 2 244 0.0 1.0 +it 03_wind_off 2 244 0.0 1.0 +it 04_res 2 244 0.0 1.0 it 05_nuclear 2 244 0.0 0.0 it 06_coal 2 244 0.0 0.0 it 07_gas 2 244 0.0 0.0 it 08_non-res 2 244 0.0 0.0 it 09_hydro_pump 2 244 0.0 0.0 -it 01_solar 2 245 1.0 0.0 -it 02_wind_on 2 245 1.0 0.0 -it 03_wind_off 2 245 1.0 0.0 -it 04_res 2 245 1.0 0.0 +it 01_solar 2 245 0.0 1.0 +it 02_wind_on 2 245 0.0 1.0 +it 03_wind_off 2 245 0.0 1.0 +it 04_res 2 245 0.0 1.0 it 05_nuclear 2 245 0.0 0.0 it 06_coal 2 245 0.0 0.0 it 07_gas 2 245 0.0 0.0 it 08_non-res 2 245 0.0 0.0 it 09_hydro_pump 2 245 0.0 0.0 -it 01_solar 2 246 1.0 0.0 -it 02_wind_on 2 246 1.0 0.0 -it 03_wind_off 2 246 1.0 0.0 -it 04_res 2 246 1.0 0.0 +it 01_solar 2 246 0.0 1.0 +it 02_wind_on 2 246 0.0 1.0 +it 03_wind_off 2 246 0.0 1.0 +it 04_res 2 246 0.0 1.0 it 05_nuclear 2 246 0.0 0.0 it 06_coal 2 246 0.0 0.0 it 07_gas 2 246 0.0 0.0 it 08_non-res 2 246 0.0 0.0 it 09_hydro_pump 2 246 0.0 0.0 -it 01_solar 2 247 1.0 0.0 -it 02_wind_on 2 247 1.0 0.0 -it 03_wind_off 2 247 1.0 0.0 -it 04_res 2 247 1.0 0.0 +it 01_solar 2 247 0.0 1.0 +it 02_wind_on 2 247 0.0 1.0 +it 03_wind_off 2 247 0.0 1.0 +it 04_res 2 247 0.0 1.0 it 05_nuclear 2 247 0.0 0.0 it 06_coal 2 247 0.0 0.0 it 07_gas 2 247 0.0 0.0 it 08_non-res 2 247 0.0 0.0 it 09_hydro_pump 2 247 0.0 0.0 -it 01_solar 2 248 1.0 0.0 -it 02_wind_on 2 248 1.0 0.0 -it 03_wind_off 2 248 1.0 0.0 -it 04_res 2 248 1.0 0.0 +it 01_solar 2 248 0.0 1.0 +it 02_wind_on 2 248 0.0 1.0 +it 03_wind_off 2 248 0.0 1.0 +it 04_res 2 248 0.0 1.0 it 05_nuclear 2 248 0.0 0.0 it 06_coal 2 248 0.0 0.0 it 07_gas 2 248 0.0 0.0 it 08_non-res 2 248 0.0 0.0 it 09_hydro_pump 2 248 0.0 0.0 -it 01_solar 2 249 1.0 0.0 -it 02_wind_on 2 249 1.0 0.0 -it 03_wind_off 2 249 1.0 0.0 -it 04_res 2 249 1.0 0.0 +it 01_solar 2 249 0.0 1.0 +it 02_wind_on 2 249 0.0 1.0 +it 03_wind_off 2 249 0.0 1.0 +it 04_res 2 249 0.0 1.0 it 05_nuclear 2 249 0.0 0.0 it 06_coal 2 249 0.0 0.0 it 07_gas 2 249 0.0 0.0 it 08_non-res 2 249 0.0 0.0 it 09_hydro_pump 2 249 0.0 0.0 -it 01_solar 2 250 1.0 0.0 -it 02_wind_on 2 250 1.0 0.0 -it 03_wind_off 2 250 1.0 0.0 -it 04_res 2 250 1.0 0.0 -it 05_nuclear 2 250 1.0 0.0 +it 01_solar 2 250 0.0 1.0 +it 02_wind_on 2 250 0.0 1.0 +it 03_wind_off 2 250 0.0 1.0 +it 04_res 2 250 0.0 1.0 +it 05_nuclear 2 250 0.0 1.0 it 06_coal 2 250 0.0 0.0 it 07_gas 2 250 0.0 0.0 it 08_non-res 2 250 0.0 0.0 it 09_hydro_pump 2 250 0.0 0.0 -it 01_solar 2 251 1.0 0.0 -it 02_wind_on 2 251 1.0 0.0 -it 03_wind_off 2 251 1.0 0.0 -it 04_res 2 251 1.0 0.0 -it 05_nuclear 2 251 1.0 0.0 +it 01_solar 2 251 0.0 1.0 +it 02_wind_on 2 251 0.0 1.0 +it 03_wind_off 2 251 0.0 1.0 +it 04_res 2 251 0.0 1.0 +it 05_nuclear 2 251 0.0 1.0 it 06_coal 2 251 0.0 0.0 it 07_gas 2 251 0.0 0.0 it 08_non-res 2 251 0.0 0.0 it 09_hydro_pump 2 251 0.0 0.0 -it 01_solar 2 252 1.0 0.0 -it 02_wind_on 2 252 1.0 0.0 -it 03_wind_off 2 252 1.0 0.0 -it 04_res 2 252 1.0 0.0 -it 05_nuclear 2 252 1.0 0.0 +it 01_solar 2 252 0.0 1.0 +it 02_wind_on 2 252 0.0 1.0 +it 03_wind_off 2 252 0.0 1.0 +it 04_res 2 252 0.0 1.0 +it 05_nuclear 2 252 0.0 1.0 it 06_coal 2 252 0.0 0.0 it 07_gas 2 252 0.0 0.0 it 08_non-res 2 252 0.0 0.0 it 09_hydro_pump 2 252 0.0 0.0 -it 01_solar 2 253 1.0 0.0 -it 02_wind_on 2 253 1.0 0.0 -it 03_wind_off 2 253 1.0 0.0 -it 04_res 2 253 1.0 0.0 -it 05_nuclear 2 253 1.0 0.0 +it 01_solar 2 253 0.0 1.0 +it 02_wind_on 2 253 0.0 1.0 +it 03_wind_off 2 253 0.0 1.0 +it 04_res 2 253 0.0 1.0 +it 05_nuclear 2 253 0.0 1.0 it 06_coal 2 253 0.0 0.0 it 07_gas 2 253 0.0 0.0 it 08_non-res 2 253 0.0 0.0 it 09_hydro_pump 2 253 0.0 0.0 -it 01_solar 2 254 1.0 0.0 -it 02_wind_on 2 254 1.0 0.0 -it 03_wind_off 2 254 1.0 0.0 -it 04_res 2 254 1.0 0.0 -it 05_nuclear 2 254 1.0 0.0 +it 01_solar 2 254 0.0 1.0 +it 02_wind_on 2 254 0.0 1.0 +it 03_wind_off 2 254 0.0 1.0 +it 04_res 2 254 0.0 1.0 +it 05_nuclear 2 254 0.0 1.0 it 06_coal 2 254 0.0 0.0 it 07_gas 2 254 0.0 0.0 it 08_non-res 2 254 0.0 0.0 it 09_hydro_pump 2 254 0.0 0.0 -it 01_solar 2 255 1.0 0.0 -it 02_wind_on 2 255 1.0 0.0 -it 03_wind_off 2 255 1.0 0.0 -it 04_res 2 255 1.0 0.0 -it 05_nuclear 2 255 1.0 0.0 +it 01_solar 2 255 0.0 1.0 +it 02_wind_on 2 255 0.0 1.0 +it 03_wind_off 2 255 0.0 1.0 +it 04_res 2 255 0.0 1.0 +it 05_nuclear 2 255 0.0 1.0 it 06_coal 2 255 0.0 0.0 it 07_gas 2 255 0.0 0.0 it 08_non-res 2 255 0.0 0.0 it 09_hydro_pump 2 255 0.0 0.0 -it 01_solar 2 256 1.0 0.0 -it 02_wind_on 2 256 1.0 0.0 -it 03_wind_off 2 256 1.0 0.0 -it 04_res 2 256 1.0 0.0 -it 05_nuclear 2 256 1.0 0.0 +it 01_solar 2 256 0.0 1.0 +it 02_wind_on 2 256 0.0 1.0 +it 03_wind_off 2 256 0.0 1.0 +it 04_res 2 256 0.0 1.0 +it 05_nuclear 2 256 0.0 1.0 it 06_coal 2 256 0.0 0.0 it 07_gas 2 256 0.0 0.0 it 08_non-res 2 256 0.0 0.0 it 09_hydro_pump 2 256 0.0 0.0 -it 01_solar 2 257 1.0 0.0 -it 02_wind_on 2 257 1.0 0.0 -it 03_wind_off 2 257 1.0 0.0 -it 04_res 2 257 1.0 0.0 -it 05_nuclear 2 257 1.0 0.0 +it 01_solar 2 257 0.0 1.0 +it 02_wind_on 2 257 0.0 1.0 +it 03_wind_off 2 257 0.0 1.0 +it 04_res 2 257 0.0 1.0 +it 05_nuclear 2 257 0.0 1.0 it 06_coal 2 257 0.0 0.0 it 07_gas 2 257 0.0 0.0 it 08_non-res 2 257 0.0 0.0 it 09_hydro_pump 2 257 0.0 0.0 -it 01_solar 2 258 1.0 0.0 -it 02_wind_on 2 258 1.0 0.0 -it 03_wind_off 2 258 1.0 0.0 -it 04_res 2 258 1.0 0.0 -it 05_nuclear 2 258 1.0 0.0 +it 01_solar 2 258 0.0 1.0 +it 02_wind_on 2 258 0.0 1.0 +it 03_wind_off 2 258 0.0 1.0 +it 04_res 2 258 0.0 1.0 +it 05_nuclear 2 258 0.0 1.0 it 06_coal 2 258 0.0 0.0 it 07_gas 2 258 0.0 0.0 it 08_non-res 2 258 0.0 0.0 it 09_hydro_pump 2 258 0.0 0.0 -it 01_solar 2 259 1.0 0.0 -it 02_wind_on 2 259 1.0 0.0 -it 03_wind_off 2 259 1.0 0.0 -it 04_res 2 259 1.0 0.0 -it 05_nuclear 2 259 1.0 0.0 +it 01_solar 2 259 0.0 1.0 +it 02_wind_on 2 259 0.0 1.0 +it 03_wind_off 2 259 0.0 1.0 +it 04_res 2 259 0.0 1.0 +it 05_nuclear 2 259 0.0 1.0 it 06_coal 2 259 0.0 0.0 it 07_gas 2 259 0.0 0.0 it 08_non-res 2 259 0.0 0.0 it 09_hydro_pump 2 259 0.0 0.0 -it 01_solar 2 260 1.0 0.0 -it 02_wind_on 2 260 1.0 0.0 -it 03_wind_off 2 260 1.0 0.0 -it 04_res 2 260 1.0 0.0 -it 05_nuclear 2 260 1.0 0.0 +it 01_solar 2 260 0.0 1.0 +it 02_wind_on 2 260 0.0 1.0 +it 03_wind_off 2 260 0.0 1.0 +it 04_res 2 260 0.0 1.0 +it 05_nuclear 2 260 0.0 1.0 it 06_coal 2 260 0.0 0.0 it 07_gas 2 260 0.0 0.0 it 08_non-res 2 260 0.0 0.0 it 09_hydro_pump 2 260 0.0 0.0 -it 01_solar 2 261 1.0 0.0 -it 02_wind_on 2 261 1.0 0.0 -it 03_wind_off 2 261 1.0 0.0 -it 04_res 2 261 1.0 0.0 -it 05_nuclear 2 261 1.0 0.0 +it 01_solar 2 261 0.0 1.0 +it 02_wind_on 2 261 0.0 1.0 +it 03_wind_off 2 261 0.0 1.0 +it 04_res 2 261 0.0 1.0 +it 05_nuclear 2 261 0.0 1.0 it 06_coal 2 261 0.0 0.0 it 07_gas 2 261 0.0 0.0 it 08_non-res 2 261 0.0 0.0 it 09_hydro_pump 2 261 0.0 0.0 -it 01_solar 2 262 1.0 0.0 -it 02_wind_on 2 262 1.0 0.0 -it 03_wind_off 2 262 1.0 0.0 -it 04_res 2 262 1.0 0.0 -it 05_nuclear 2 262 1.0 0.0 +it 01_solar 2 262 0.0 1.0 +it 02_wind_on 2 262 0.0 1.0 +it 03_wind_off 2 262 0.0 1.0 +it 04_res 2 262 0.0 1.0 +it 05_nuclear 2 262 0.0 1.0 it 06_coal 2 262 0.0 0.0 it 07_gas 2 262 0.0 0.0 it 08_non-res 2 262 0.0 0.0 it 09_hydro_pump 2 262 0.0 0.0 -it 01_solar 2 263 1.0 0.0 -it 02_wind_on 2 263 1.0 0.0 -it 03_wind_off 2 263 1.0 0.0 -it 04_res 2 263 1.0 0.0 -it 05_nuclear 2 263 1.0 0.0 +it 01_solar 2 263 0.0 1.0 +it 02_wind_on 2 263 0.0 1.0 +it 03_wind_off 2 263 0.0 1.0 +it 04_res 2 263 0.0 1.0 +it 05_nuclear 2 263 0.0 1.0 it 06_coal 2 263 0.0 0.0 it 07_gas 2 263 0.0 0.0 it 08_non-res 2 263 0.0 0.0 it 09_hydro_pump 2 263 0.0 0.0 -it 01_solar 2 264 1.0 0.0 -it 02_wind_on 2 264 1.0 0.0 -it 03_wind_off 2 264 1.0 0.0 -it 04_res 2 264 1.0 0.0 -it 05_nuclear 2 264 1.0 0.0 +it 01_solar 2 264 0.0 1.0 +it 02_wind_on 2 264 0.0 1.0 +it 03_wind_off 2 264 0.0 1.0 +it 04_res 2 264 0.0 1.0 +it 05_nuclear 2 264 0.0 1.0 it 06_coal 2 264 0.0 0.0 it 07_gas 2 264 0.0 0.0 it 08_non-res 2 264 0.0 0.0 it 09_hydro_pump 2 264 0.0 0.0 -it 01_solar 2 265 1.0 0.0 -it 02_wind_on 2 265 1.0 0.0 -it 03_wind_off 2 265 1.0 0.0 -it 04_res 2 265 1.0 0.0 -it 05_nuclear 2 265 1.0 0.0 +it 01_solar 2 265 0.0 1.0 +it 02_wind_on 2 265 0.0 1.0 +it 03_wind_off 2 265 0.0 1.0 +it 04_res 2 265 0.0 1.0 +it 05_nuclear 2 265 0.0 1.0 it 06_coal 2 265 0.0 0.0 it 07_gas 2 265 0.0 0.0 it 08_non-res 2 265 0.0 0.0 it 09_hydro_pump 2 265 0.0 0.0 -it 01_solar 2 266 1.0 0.0 -it 02_wind_on 2 266 1.0 0.0 -it 03_wind_off 2 266 1.0 0.0 -it 04_res 2 266 1.0 0.0 -it 05_nuclear 2 266 1.0 0.0 +it 01_solar 2 266 0.0 1.0 +it 02_wind_on 2 266 0.0 1.0 +it 03_wind_off 2 266 0.0 1.0 +it 04_res 2 266 0.0 1.0 +it 05_nuclear 2 266 0.0 1.0 it 06_coal 2 266 0.0 0.0 it 07_gas 2 266 0.0 0.0 it 08_non-res 2 266 0.0 0.0 it 09_hydro_pump 2 266 0.0 0.0 -it 01_solar 2 267 1.0 0.0 -it 02_wind_on 2 267 1.0 0.0 -it 03_wind_off 2 267 1.0 0.0 -it 04_res 2 267 1.0 0.0 -it 05_nuclear 2 267 1.0 0.0 +it 01_solar 2 267 0.0 1.0 +it 02_wind_on 2 267 0.0 1.0 +it 03_wind_off 2 267 0.0 1.0 +it 04_res 2 267 0.0 1.0 +it 05_nuclear 2 267 0.0 1.0 it 06_coal 2 267 0.0 0.0 it 07_gas 2 267 0.0 0.0 it 08_non-res 2 267 0.0 0.0 it 09_hydro_pump 2 267 0.0 0.0 -it 01_solar 2 268 1.0 0.0 -it 02_wind_on 2 268 1.0 0.0 -it 03_wind_off 2 268 1.0 0.0 -it 04_res 2 268 1.0 0.0 -it 05_nuclear 2 268 1.0 0.0 +it 01_solar 2 268 0.0 1.0 +it 02_wind_on 2 268 0.0 1.0 +it 03_wind_off 2 268 0.0 1.0 +it 04_res 2 268 0.0 1.0 +it 05_nuclear 2 268 0.0 1.0 it 06_coal 2 268 0.0 0.0 it 07_gas 2 268 0.0 0.0 it 08_non-res 2 268 0.0 0.0 it 09_hydro_pump 2 268 0.0 0.0 -it 01_solar 2 269 1.0 0.0 -it 02_wind_on 2 269 1.0 0.0 -it 03_wind_off 2 269 1.0 0.0 -it 04_res 2 269 1.0 0.0 -it 05_nuclear 2 269 1.0 0.0 +it 01_solar 2 269 0.0 1.0 +it 02_wind_on 2 269 0.0 1.0 +it 03_wind_off 2 269 0.0 1.0 +it 04_res 2 269 0.0 1.0 +it 05_nuclear 2 269 0.0 1.0 it 06_coal 2 269 0.0 0.0 it 07_gas 2 269 0.0 0.0 it 08_non-res 2 269 0.0 0.0 it 09_hydro_pump 2 269 0.0 0.0 -it 01_solar 2 270 1.0 0.0 -it 02_wind_on 2 270 1.0 0.0 -it 03_wind_off 2 270 1.0 0.0 -it 04_res 2 270 1.0 0.0 -it 05_nuclear 2 270 1.0 0.0 -it 06_coal 2 270 1.0 0.0 +it 01_solar 2 270 0.0 1.0 +it 02_wind_on 2 270 0.0 1.0 +it 03_wind_off 2 270 0.0 1.0 +it 04_res 2 270 0.0 1.0 +it 05_nuclear 2 270 0.0 1.0 +it 06_coal 2 270 0.0 1.0 it 07_gas 2 270 0.0 0.0 it 08_non-res 2 270 0.0 0.0 it 09_hydro_pump 2 270 0.0 0.0 -it 01_solar 2 271 1.0 0.0 -it 02_wind_on 2 271 1.0 0.0 -it 03_wind_off 2 271 1.0 0.0 -it 04_res 2 271 1.0 0.0 -it 05_nuclear 2 271 1.0 0.0 -it 06_coal 2 271 1.0 0.0 +it 01_solar 2 271 0.0 1.0 +it 02_wind_on 2 271 0.0 1.0 +it 03_wind_off 2 271 0.0 1.0 +it 04_res 2 271 0.0 1.0 +it 05_nuclear 2 271 0.0 1.0 +it 06_coal 2 271 0.0 1.0 it 07_gas 2 271 0.0 0.0 it 08_non-res 2 271 0.0 0.0 it 09_hydro_pump 2 271 0.0 0.0 -it 01_solar 2 272 1.0 0.0 -it 02_wind_on 2 272 1.0 0.0 -it 03_wind_off 2 272 1.0 0.0 -it 04_res 2 272 1.0 0.0 -it 05_nuclear 2 272 1.0 0.0 -it 06_coal 2 272 1.0 0.0 +it 01_solar 2 272 0.0 1.0 +it 02_wind_on 2 272 0.0 1.0 +it 03_wind_off 2 272 0.0 1.0 +it 04_res 2 272 0.0 1.0 +it 05_nuclear 2 272 0.0 1.0 +it 06_coal 2 272 0.0 1.0 it 07_gas 2 272 0.0 0.0 it 08_non-res 2 272 0.0 0.0 it 09_hydro_pump 2 272 0.0 0.0 -it 01_solar 2 273 1.0 0.0 -it 02_wind_on 2 273 1.0 0.0 -it 03_wind_off 2 273 1.0 0.0 -it 04_res 2 273 1.0 0.0 -it 05_nuclear 2 273 1.0 0.0 -it 06_coal 2 273 1.0 0.0 +it 01_solar 2 273 0.0 1.0 +it 02_wind_on 2 273 0.0 1.0 +it 03_wind_off 2 273 0.0 1.0 +it 04_res 2 273 0.0 1.0 +it 05_nuclear 2 273 0.0 1.0 +it 06_coal 2 273 0.0 1.0 it 07_gas 2 273 0.0 0.0 it 08_non-res 2 273 0.0 0.0 it 09_hydro_pump 2 273 0.0 0.0 -it 01_solar 2 274 1.0 0.0 -it 02_wind_on 2 274 1.0 0.0 -it 03_wind_off 2 274 1.0 0.0 -it 04_res 2 274 1.0 0.0 -it 05_nuclear 2 274 1.0 0.0 -it 06_coal 2 274 1.0 0.0 +it 01_solar 2 274 0.0 1.0 +it 02_wind_on 2 274 0.0 1.0 +it 03_wind_off 2 274 0.0 1.0 +it 04_res 2 274 0.0 1.0 +it 05_nuclear 2 274 0.0 1.0 +it 06_coal 2 274 0.0 1.0 it 07_gas 2 274 0.0 0.0 it 08_non-res 2 274 0.0 0.0 it 09_hydro_pump 2 274 0.0 0.0 -it 01_solar 2 275 1.0 0.0 -it 02_wind_on 2 275 1.0 0.0 -it 03_wind_off 2 275 1.0 0.0 -it 04_res 2 275 1.0 0.0 -it 05_nuclear 2 275 1.0 0.0 -it 06_coal 2 275 1.0 0.0 +it 01_solar 2 275 0.0 1.0 +it 02_wind_on 2 275 0.0 1.0 +it 03_wind_off 2 275 0.0 1.0 +it 04_res 2 275 0.0 1.0 +it 05_nuclear 2 275 0.0 1.0 +it 06_coal 2 275 0.0 1.0 it 07_gas 2 275 0.0 0.0 it 08_non-res 2 275 0.0 0.0 it 09_hydro_pump 2 275 0.0 0.0 -it 01_solar 2 276 1.0 0.0 -it 02_wind_on 2 276 1.0 0.0 -it 03_wind_off 2 276 1.0 0.0 -it 04_res 2 276 1.0 0.0 -it 05_nuclear 2 276 1.0 0.0 -it 06_coal 2 276 1.0 0.0 +it 01_solar 2 276 0.0 1.0 +it 02_wind_on 2 276 0.0 1.0 +it 03_wind_off 2 276 0.0 1.0 +it 04_res 2 276 0.0 1.0 +it 05_nuclear 2 276 0.0 1.0 +it 06_coal 2 276 0.0 1.0 it 07_gas 2 276 0.0 0.0 it 08_non-res 2 276 0.0 0.0 it 09_hydro_pump 2 276 0.0 0.0 -it 01_solar 2 277 1.0 0.0 -it 02_wind_on 2 277 1.0 0.0 -it 03_wind_off 2 277 1.0 0.0 -it 04_res 2 277 1.0 0.0 -it 05_nuclear 2 277 1.0 0.0 -it 06_coal 2 277 1.0 0.0 +it 01_solar 2 277 0.0 1.0 +it 02_wind_on 2 277 0.0 1.0 +it 03_wind_off 2 277 0.0 1.0 +it 04_res 2 277 0.0 1.0 +it 05_nuclear 2 277 0.0 1.0 +it 06_coal 2 277 0.0 1.0 it 07_gas 2 277 0.0 0.0 it 08_non-res 2 277 0.0 0.0 it 09_hydro_pump 2 277 0.0 0.0 -it 01_solar 2 278 1.0 0.0 -it 02_wind_on 2 278 1.0 0.0 -it 03_wind_off 2 278 1.0 0.0 -it 04_res 2 278 1.0 0.0 -it 05_nuclear 2 278 1.0 0.0 -it 06_coal 2 278 1.0 0.0 +it 01_solar 2 278 0.0 1.0 +it 02_wind_on 2 278 0.0 1.0 +it 03_wind_off 2 278 0.0 1.0 +it 04_res 2 278 0.0 1.0 +it 05_nuclear 2 278 0.0 1.0 +it 06_coal 2 278 0.0 1.0 it 07_gas 2 278 0.0 0.0 it 08_non-res 2 278 0.0 0.0 it 09_hydro_pump 2 278 0.0 0.0 -it 01_solar 2 279 1.0 0.0 -it 02_wind_on 2 279 1.0 0.0 -it 03_wind_off 2 279 1.0 0.0 -it 04_res 2 279 1.0 0.0 -it 05_nuclear 2 279 1.0 0.0 -it 06_coal 2 279 1.0 0.0 +it 01_solar 2 279 0.0 1.0 +it 02_wind_on 2 279 0.0 1.0 +it 03_wind_off 2 279 0.0 1.0 +it 04_res 2 279 0.0 1.0 +it 05_nuclear 2 279 0.0 1.0 +it 06_coal 2 279 0.0 1.0 it 07_gas 2 279 0.0 0.0 it 08_non-res 2 279 0.0 0.0 it 09_hydro_pump 2 279 0.0 0.0 -it 01_solar 2 280 1.0 0.0 -it 02_wind_on 2 280 1.0 0.0 -it 03_wind_off 2 280 1.0 0.0 -it 04_res 2 280 1.0 0.0 -it 05_nuclear 2 280 1.0 0.0 -it 06_coal 2 280 1.0 0.0 +it 01_solar 2 280 0.0 1.0 +it 02_wind_on 2 280 0.0 1.0 +it 03_wind_off 2 280 0.0 1.0 +it 04_res 2 280 0.0 1.0 +it 05_nuclear 2 280 0.0 1.0 +it 06_coal 2 280 0.0 1.0 it 07_gas 2 280 0.0 0.0 it 08_non-res 2 280 0.0 0.0 it 09_hydro_pump 2 280 0.0 0.0 -it 01_solar 2 281 1.0 0.0 -it 02_wind_on 2 281 1.0 0.0 -it 03_wind_off 2 281 1.0 0.0 -it 04_res 2 281 1.0 0.0 -it 05_nuclear 2 281 1.0 0.0 -it 06_coal 2 281 1.0 0.0 +it 01_solar 2 281 0.0 1.0 +it 02_wind_on 2 281 0.0 1.0 +it 03_wind_off 2 281 0.0 1.0 +it 04_res 2 281 0.0 1.0 +it 05_nuclear 2 281 0.0 1.0 +it 06_coal 2 281 0.0 1.0 it 07_gas 2 281 0.0 0.0 it 08_non-res 2 281 0.0 0.0 it 09_hydro_pump 2 281 0.0 0.0 -it 01_solar 2 282 1.0 0.0 -it 02_wind_on 2 282 1.0 0.0 -it 03_wind_off 2 282 1.0 0.0 -it 04_res 2 282 1.0 0.0 -it 05_nuclear 2 282 1.0 0.0 -it 06_coal 2 282 1.0 0.0 +it 01_solar 2 282 0.0 1.0 +it 02_wind_on 2 282 0.0 1.0 +it 03_wind_off 2 282 0.0 1.0 +it 04_res 2 282 0.0 1.0 +it 05_nuclear 2 282 0.0 1.0 +it 06_coal 2 282 0.0 1.0 it 07_gas 2 282 0.0 0.0 it 08_non-res 2 282 0.0 0.0 it 09_hydro_pump 2 282 0.0 0.0 -it 01_solar 2 283 1.0 0.0 -it 02_wind_on 2 283 1.0 0.0 -it 03_wind_off 2 283 1.0 0.0 -it 04_res 2 283 1.0 0.0 -it 05_nuclear 2 283 1.0 0.0 -it 06_coal 2 283 1.0 0.0 +it 01_solar 2 283 0.0 1.0 +it 02_wind_on 2 283 0.0 1.0 +it 03_wind_off 2 283 0.0 1.0 +it 04_res 2 283 0.0 1.0 +it 05_nuclear 2 283 0.0 1.0 +it 06_coal 2 283 0.0 1.0 it 07_gas 2 283 0.0 0.0 it 08_non-res 2 283 0.0 0.0 it 09_hydro_pump 2 283 0.0 0.0 -it 01_solar 2 284 1.0 0.0 -it 02_wind_on 2 284 1.0 0.0 -it 03_wind_off 2 284 1.0 0.0 -it 04_res 2 284 1.0 0.0 -it 05_nuclear 2 284 1.0 0.0 -it 06_coal 2 284 1.0 0.0 +it 01_solar 2 284 0.0 1.0 +it 02_wind_on 2 284 0.0 1.0 +it 03_wind_off 2 284 0.0 1.0 +it 04_res 2 284 0.0 1.0 +it 05_nuclear 2 284 0.0 1.0 +it 06_coal 2 284 0.0 1.0 it 07_gas 2 284 0.0 0.0 it 08_non-res 2 284 0.0 0.0 it 09_hydro_pump 2 284 0.0 0.0 -it 01_solar 2 285 1.0 0.0 -it 02_wind_on 2 285 1.0 0.0 -it 03_wind_off 2 285 1.0 0.0 -it 04_res 2 285 1.0 0.0 -it 05_nuclear 2 285 1.0 0.0 -it 06_coal 2 285 1.0 0.0 +it 01_solar 2 285 0.0 1.0 +it 02_wind_on 2 285 0.0 1.0 +it 03_wind_off 2 285 0.0 1.0 +it 04_res 2 285 0.0 1.0 +it 05_nuclear 2 285 0.0 1.0 +it 06_coal 2 285 0.0 1.0 it 07_gas 2 285 0.0 0.0 it 08_non-res 2 285 0.0 0.0 it 09_hydro_pump 2 285 0.0 0.0 -it 01_solar 2 286 1.0 0.0 -it 02_wind_on 2 286 1.0 0.0 -it 03_wind_off 2 286 1.0 0.0 -it 04_res 2 286 1.0 0.0 -it 05_nuclear 2 286 1.0 0.0 -it 06_coal 2 286 1.0 0.0 +it 01_solar 2 286 0.0 1.0 +it 02_wind_on 2 286 0.0 1.0 +it 03_wind_off 2 286 0.0 1.0 +it 04_res 2 286 0.0 1.0 +it 05_nuclear 2 286 0.0 1.0 +it 06_coal 2 286 0.0 1.0 it 07_gas 2 286 0.0 0.0 it 08_non-res 2 286 0.0 0.0 it 09_hydro_pump 2 286 0.0 0.0 -it 01_solar 2 287 1.0 0.0 -it 02_wind_on 2 287 1.0 0.0 -it 03_wind_off 2 287 1.0 0.0 -it 04_res 2 287 1.0 0.0 -it 05_nuclear 2 287 1.0 0.0 -it 06_coal 2 287 1.0 0.0 +it 01_solar 2 287 0.0 1.0 +it 02_wind_on 2 287 0.0 1.0 +it 03_wind_off 2 287 0.0 1.0 +it 04_res 2 287 0.0 1.0 +it 05_nuclear 2 287 0.0 1.0 +it 06_coal 2 287 0.0 1.0 it 07_gas 2 287 0.0 0.0 it 08_non-res 2 287 0.0 0.0 it 09_hydro_pump 2 287 0.0 0.0 -it 01_solar 2 288 1.0 0.0 -it 02_wind_on 2 288 1.0 0.0 -it 03_wind_off 2 288 1.0 0.0 -it 04_res 2 288 1.0 0.0 -it 05_nuclear 2 288 1.0 0.0 -it 06_coal 2 288 1.0 0.0 +it 01_solar 2 288 0.0 1.0 +it 02_wind_on 2 288 0.0 1.0 +it 03_wind_off 2 288 0.0 1.0 +it 04_res 2 288 0.0 1.0 +it 05_nuclear 2 288 0.0 1.0 +it 06_coal 2 288 0.0 1.0 it 07_gas 2 288 0.0 0.0 it 08_non-res 2 288 0.0 0.0 it 09_hydro_pump 2 288 0.0 0.0 -it 01_solar 2 289 1.0 0.0 -it 02_wind_on 2 289 1.0 0.0 -it 03_wind_off 2 289 1.0 0.0 -it 04_res 2 289 1.0 0.0 -it 05_nuclear 2 289 1.0 0.0 -it 06_coal 2 289 1.0 0.0 +it 01_solar 2 289 0.0 1.0 +it 02_wind_on 2 289 0.0 1.0 +it 03_wind_off 2 289 0.0 1.0 +it 04_res 2 289 0.0 1.0 +it 05_nuclear 2 289 0.0 1.0 +it 06_coal 2 289 0.0 1.0 it 07_gas 2 289 0.0 0.0 it 08_non-res 2 289 0.0 0.0 it 09_hydro_pump 2 289 0.0 0.0 -it 01_solar 2 290 1.0 0.0 -it 02_wind_on 2 290 1.0 0.0 -it 03_wind_off 2 290 1.0 0.0 -it 04_res 2 290 1.0 0.0 -it 05_nuclear 2 290 1.0 0.0 -it 06_coal 2 290 1.0 0.0 -it 07_gas 2 290 1.0 0.0 +it 01_solar 2 290 0.0 1.0 +it 02_wind_on 2 290 0.0 1.0 +it 03_wind_off 2 290 0.0 1.0 +it 04_res 2 290 0.0 1.0 +it 05_nuclear 2 290 0.0 1.0 +it 06_coal 2 290 0.0 1.0 +it 07_gas 2 290 0.0 1.0 it 08_non-res 2 290 0.0 0.0 it 09_hydro_pump 2 290 0.0 0.0 -it 01_solar 2 291 1.0 0.0 -it 02_wind_on 2 291 1.0 0.0 -it 03_wind_off 2 291 1.0 0.0 -it 04_res 2 291 1.0 0.0 -it 05_nuclear 2 291 1.0 0.0 -it 06_coal 2 291 1.0 0.0 -it 07_gas 2 291 1.0 0.0 +it 01_solar 2 291 0.0 1.0 +it 02_wind_on 2 291 0.0 1.0 +it 03_wind_off 2 291 0.0 1.0 +it 04_res 2 291 0.0 1.0 +it 05_nuclear 2 291 0.0 1.0 +it 06_coal 2 291 0.0 1.0 +it 07_gas 2 291 0.0 1.0 it 08_non-res 2 291 0.0 0.0 it 09_hydro_pump 2 291 0.0 0.0 -it 01_solar 2 292 1.0 0.0 -it 02_wind_on 2 292 1.0 0.0 -it 03_wind_off 2 292 1.0 0.0 -it 04_res 2 292 1.0 0.0 -it 05_nuclear 2 292 1.0 0.0 -it 06_coal 2 292 1.0 0.0 -it 07_gas 2 292 1.0 0.0 +it 01_solar 2 292 0.0 1.0 +it 02_wind_on 2 292 0.0 1.0 +it 03_wind_off 2 292 0.0 1.0 +it 04_res 2 292 0.0 1.0 +it 05_nuclear 2 292 0.0 1.0 +it 06_coal 2 292 0.0 1.0 +it 07_gas 2 292 0.0 1.0 it 08_non-res 2 292 0.0 0.0 it 09_hydro_pump 2 292 0.0 0.0 -it 01_solar 2 293 1.0 0.0 -it 02_wind_on 2 293 1.0 0.0 -it 03_wind_off 2 293 1.0 0.0 -it 04_res 2 293 1.0 0.0 -it 05_nuclear 2 293 1.0 0.0 -it 06_coal 2 293 1.0 0.0 -it 07_gas 2 293 1.0 0.0 +it 01_solar 2 293 0.0 1.0 +it 02_wind_on 2 293 0.0 1.0 +it 03_wind_off 2 293 0.0 1.0 +it 04_res 2 293 0.0 1.0 +it 05_nuclear 2 293 0.0 1.0 +it 06_coal 2 293 0.0 1.0 +it 07_gas 2 293 0.0 1.0 it 08_non-res 2 293 0.0 0.0 it 09_hydro_pump 2 293 0.0 0.0 -it 01_solar 2 294 1.0 0.0 -it 02_wind_on 2 294 1.0 0.0 -it 03_wind_off 2 294 1.0 0.0 -it 04_res 2 294 1.0 0.0 -it 05_nuclear 2 294 1.0 0.0 -it 06_coal 2 294 1.0 0.0 -it 07_gas 2 294 1.0 0.0 +it 01_solar 2 294 0.0 1.0 +it 02_wind_on 2 294 0.0 1.0 +it 03_wind_off 2 294 0.0 1.0 +it 04_res 2 294 0.0 1.0 +it 05_nuclear 2 294 0.0 1.0 +it 06_coal 2 294 0.0 1.0 +it 07_gas 2 294 0.0 1.0 it 08_non-res 2 294 0.0 0.0 it 09_hydro_pump 2 294 0.0 0.0 -it 01_solar 2 295 1.0 0.0 -it 02_wind_on 2 295 1.0 0.0 -it 03_wind_off 2 295 1.0 0.0 -it 04_res 2 295 1.0 0.0 -it 05_nuclear 2 295 1.0 0.0 -it 06_coal 2 295 1.0 0.0 -it 07_gas 2 295 1.0 0.0 +it 01_solar 2 295 0.0 1.0 +it 02_wind_on 2 295 0.0 1.0 +it 03_wind_off 2 295 0.0 1.0 +it 04_res 2 295 0.0 1.0 +it 05_nuclear 2 295 0.0 1.0 +it 06_coal 2 295 0.0 1.0 +it 07_gas 2 295 0.0 1.0 it 08_non-res 2 295 0.0 0.0 it 09_hydro_pump 2 295 0.0 0.0 -it 01_solar 2 296 1.0 0.0 -it 02_wind_on 2 296 1.0 0.0 -it 03_wind_off 2 296 1.0 0.0 -it 04_res 2 296 1.0 0.0 -it 05_nuclear 2 296 1.0 0.0 -it 06_coal 2 296 1.0 0.0 -it 07_gas 2 296 1.0 0.0 +it 01_solar 2 296 0.0 1.0 +it 02_wind_on 2 296 0.0 1.0 +it 03_wind_off 2 296 0.0 1.0 +it 04_res 2 296 0.0 1.0 +it 05_nuclear 2 296 0.0 1.0 +it 06_coal 2 296 0.0 1.0 +it 07_gas 2 296 0.0 1.0 it 08_non-res 2 296 0.0 0.0 it 09_hydro_pump 2 296 0.0 0.0 -it 01_solar 2 297 1.0 0.0 -it 02_wind_on 2 297 1.0 0.0 -it 03_wind_off 2 297 1.0 0.0 -it 04_res 2 297 1.0 0.0 -it 05_nuclear 2 297 1.0 0.0 -it 06_coal 2 297 1.0 0.0 -it 07_gas 2 297 1.0 0.0 +it 01_solar 2 297 0.0 1.0 +it 02_wind_on 2 297 0.0 1.0 +it 03_wind_off 2 297 0.0 1.0 +it 04_res 2 297 0.0 1.0 +it 05_nuclear 2 297 0.0 1.0 +it 06_coal 2 297 0.0 1.0 +it 07_gas 2 297 0.0 1.0 it 08_non-res 2 297 0.0 0.0 it 09_hydro_pump 2 297 0.0 0.0 -it 01_solar 2 298 1.0 0.0 -it 02_wind_on 2 298 1.0 0.0 -it 03_wind_off 2 298 1.0 0.0 -it 04_res 2 298 1.0 0.0 -it 05_nuclear 2 298 1.0 0.0 -it 06_coal 2 298 1.0 0.0 -it 07_gas 2 298 1.0 0.0 +it 01_solar 2 298 0.0 1.0 +it 02_wind_on 2 298 0.0 1.0 +it 03_wind_off 2 298 0.0 1.0 +it 04_res 2 298 0.0 1.0 +it 05_nuclear 2 298 0.0 1.0 +it 06_coal 2 298 0.0 1.0 +it 07_gas 2 298 0.0 1.0 it 08_non-res 2 298 0.0 0.0 it 09_hydro_pump 2 298 0.0 0.0 -it 01_solar 2 299 1.0 0.0 -it 02_wind_on 2 299 1.0 0.0 -it 03_wind_off 2 299 1.0 0.0 -it 04_res 2 299 1.0 0.0 -it 05_nuclear 2 299 1.0 0.0 -it 06_coal 2 299 1.0 0.0 -it 07_gas 2 299 1.0 0.0 +it 01_solar 2 299 0.0 1.0 +it 02_wind_on 2 299 0.0 1.0 +it 03_wind_off 2 299 0.0 1.0 +it 04_res 2 299 0.0 1.0 +it 05_nuclear 2 299 0.0 1.0 +it 06_coal 2 299 0.0 1.0 +it 07_gas 2 299 0.0 1.0 it 08_non-res 2 299 0.0 0.0 it 09_hydro_pump 2 299 0.0 0.0 -it 01_solar 2 300 1.0 0.0 -it 02_wind_on 2 300 1.0 0.0 -it 03_wind_off 2 300 1.0 0.0 -it 04_res 2 300 1.0 0.0 -it 05_nuclear 2 300 1.0 0.0 -it 06_coal 2 300 1.0 0.0 -it 07_gas 2 300 1.0 0.0 +it 01_solar 2 300 0.0 1.0 +it 02_wind_on 2 300 0.0 1.0 +it 03_wind_off 2 300 0.0 1.0 +it 04_res 2 300 0.0 1.0 +it 05_nuclear 2 300 0.0 1.0 +it 06_coal 2 300 0.0 1.0 +it 07_gas 2 300 0.0 1.0 it 08_non-res 2 300 0.0 0.0 it 09_hydro_pump 2 300 0.0 0.0 -it 01_solar 2 301 1.0 0.0 -it 02_wind_on 2 301 1.0 0.0 -it 03_wind_off 2 301 1.0 0.0 -it 04_res 2 301 1.0 0.0 -it 05_nuclear 2 301 1.0 0.0 -it 06_coal 2 301 1.0 0.0 -it 07_gas 2 301 1.0 0.0 +it 01_solar 2 301 0.0 1.0 +it 02_wind_on 2 301 0.0 1.0 +it 03_wind_off 2 301 0.0 1.0 +it 04_res 2 301 0.0 1.0 +it 05_nuclear 2 301 0.0 1.0 +it 06_coal 2 301 0.0 1.0 +it 07_gas 2 301 0.0 1.0 it 08_non-res 2 301 0.0 0.0 it 09_hydro_pump 2 301 0.0 0.0 -it 01_solar 2 302 1.0 0.0 -it 02_wind_on 2 302 1.0 0.0 -it 03_wind_off 2 302 1.0 0.0 -it 04_res 2 302 1.0 0.0 -it 05_nuclear 2 302 1.0 0.0 -it 06_coal 2 302 1.0 0.0 -it 07_gas 2 302 1.0 0.0 +it 01_solar 2 302 0.0 1.0 +it 02_wind_on 2 302 0.0 1.0 +it 03_wind_off 2 302 0.0 1.0 +it 04_res 2 302 0.0 1.0 +it 05_nuclear 2 302 0.0 1.0 +it 06_coal 2 302 0.0 1.0 +it 07_gas 2 302 0.0 1.0 it 08_non-res 2 302 0.0 0.0 it 09_hydro_pump 2 302 0.0 0.0 -it 01_solar 2 303 1.0 0.0 -it 02_wind_on 2 303 1.0 0.0 -it 03_wind_off 2 303 1.0 0.0 -it 04_res 2 303 1.0 0.0 -it 05_nuclear 2 303 1.0 0.0 -it 06_coal 2 303 1.0 0.0 -it 07_gas 2 303 1.0 0.0 +it 01_solar 2 303 0.0 1.0 +it 02_wind_on 2 303 0.0 1.0 +it 03_wind_off 2 303 0.0 1.0 +it 04_res 2 303 0.0 1.0 +it 05_nuclear 2 303 0.0 1.0 +it 06_coal 2 303 0.0 1.0 +it 07_gas 2 303 0.0 1.0 it 08_non-res 2 303 0.0 0.0 it 09_hydro_pump 2 303 0.0 0.0 -it 01_solar 2 304 1.0 0.0 -it 02_wind_on 2 304 1.0 0.0 -it 03_wind_off 2 304 1.0 0.0 -it 04_res 2 304 1.0 0.0 -it 05_nuclear 2 304 1.0 0.0 -it 06_coal 2 304 1.0 0.0 -it 07_gas 2 304 1.0 0.0 +it 01_solar 2 304 0.0 1.0 +it 02_wind_on 2 304 0.0 1.0 +it 03_wind_off 2 304 0.0 1.0 +it 04_res 2 304 0.0 1.0 +it 05_nuclear 2 304 0.0 1.0 +it 06_coal 2 304 0.0 1.0 +it 07_gas 2 304 0.0 1.0 it 08_non-res 2 304 0.0 0.0 it 09_hydro_pump 2 304 0.0 0.0 -it 01_solar 2 305 1.0 0.0 -it 02_wind_on 2 305 1.0 0.0 -it 03_wind_off 2 305 1.0 0.0 -it 04_res 2 305 1.0 0.0 -it 05_nuclear 2 305 1.0 0.0 -it 06_coal 2 305 1.0 0.0 -it 07_gas 2 305 1.0 0.0 +it 01_solar 2 305 0.0 1.0 +it 02_wind_on 2 305 0.0 1.0 +it 03_wind_off 2 305 0.0 1.0 +it 04_res 2 305 0.0 1.0 +it 05_nuclear 2 305 0.0 1.0 +it 06_coal 2 305 0.0 1.0 +it 07_gas 2 305 0.0 1.0 it 08_non-res 2 305 0.0 0.0 it 09_hydro_pump 2 305 0.0 0.0 -it 01_solar 2 306 1.0 0.0 -it 02_wind_on 2 306 1.0 0.0 -it 03_wind_off 2 306 1.0 0.0 -it 04_res 2 306 1.0 0.0 -it 05_nuclear 2 306 1.0 0.0 -it 06_coal 2 306 1.0 0.0 -it 07_gas 2 306 1.0 0.0 +it 01_solar 2 306 0.0 1.0 +it 02_wind_on 2 306 0.0 1.0 +it 03_wind_off 2 306 0.0 1.0 +it 04_res 2 306 0.0 1.0 +it 05_nuclear 2 306 0.0 1.0 +it 06_coal 2 306 0.0 1.0 +it 07_gas 2 306 0.0 1.0 it 08_non-res 2 306 0.0 0.0 it 09_hydro_pump 2 306 0.0 0.0 -it 01_solar 2 307 1.0 0.0 -it 02_wind_on 2 307 1.0 0.0 -it 03_wind_off 2 307 1.0 0.0 -it 04_res 2 307 1.0 0.0 -it 05_nuclear 2 307 1.0 0.0 -it 06_coal 2 307 1.0 0.0 -it 07_gas 2 307 1.0 0.0 +it 01_solar 2 307 0.0 1.0 +it 02_wind_on 2 307 0.0 1.0 +it 03_wind_off 2 307 0.0 1.0 +it 04_res 2 307 0.0 1.0 +it 05_nuclear 2 307 0.0 1.0 +it 06_coal 2 307 0.0 1.0 +it 07_gas 2 307 0.0 1.0 it 08_non-res 2 307 0.0 0.0 it 09_hydro_pump 2 307 0.0 0.0 -it 01_solar 2 308 1.0 0.0 -it 02_wind_on 2 308 1.0 0.0 -it 03_wind_off 2 308 1.0 0.0 -it 04_res 2 308 1.0 0.0 -it 05_nuclear 2 308 1.0 0.0 -it 06_coal 2 308 1.0 0.0 -it 07_gas 2 308 1.0 0.0 +it 01_solar 2 308 0.0 1.0 +it 02_wind_on 2 308 0.0 1.0 +it 03_wind_off 2 308 0.0 1.0 +it 04_res 2 308 0.0 1.0 +it 05_nuclear 2 308 0.0 1.0 +it 06_coal 2 308 0.0 1.0 +it 07_gas 2 308 0.0 1.0 it 08_non-res 2 308 0.0 0.0 it 09_hydro_pump 2 308 0.0 0.0 -it 01_solar 2 309 1.0 0.0 -it 02_wind_on 2 309 1.0 0.0 -it 03_wind_off 2 309 1.0 0.0 -it 04_res 2 309 1.0 0.0 -it 05_nuclear 2 309 1.0 0.0 -it 06_coal 2 309 1.0 0.0 -it 07_gas 2 309 1.0 0.0 +it 01_solar 2 309 0.0 1.0 +it 02_wind_on 2 309 0.0 1.0 +it 03_wind_off 2 309 0.0 1.0 +it 04_res 2 309 0.0 1.0 +it 05_nuclear 2 309 0.0 1.0 +it 06_coal 2 309 0.0 1.0 +it 07_gas 2 309 0.0 1.0 it 08_non-res 2 309 0.0 0.0 it 09_hydro_pump 2 309 0.0 0.0 -it 01_solar 2 310 1.0 0.0 -it 02_wind_on 2 310 1.0 0.0 -it 03_wind_off 2 310 1.0 0.0 -it 04_res 2 310 1.0 0.0 -it 05_nuclear 2 310 1.0 0.0 -it 06_coal 2 310 1.0 0.0 -it 07_gas 2 310 1.0 0.0 -it 08_non-res 2 310 1.0 0.0 +it 01_solar 2 310 0.0 1.0 +it 02_wind_on 2 310 0.0 1.0 +it 03_wind_off 2 310 0.0 1.0 +it 04_res 2 310 0.0 1.0 +it 05_nuclear 2 310 0.0 1.0 +it 06_coal 2 310 0.0 1.0 +it 07_gas 2 310 0.0 1.0 +it 08_non-res 2 310 0.0 1.0 it 09_hydro_pump 2 310 0.0 0.0 -it 01_solar 2 311 1.0 0.0 -it 02_wind_on 2 311 1.0 0.0 -it 03_wind_off 2 311 1.0 0.0 -it 04_res 2 311 1.0 0.0 -it 05_nuclear 2 311 1.0 0.0 -it 06_coal 2 311 1.0 0.0 -it 07_gas 2 311 1.0 0.0 -it 08_non-res 2 311 1.0 0.0 +it 01_solar 2 311 0.0 1.0 +it 02_wind_on 2 311 0.0 1.0 +it 03_wind_off 2 311 0.0 1.0 +it 04_res 2 311 0.0 1.0 +it 05_nuclear 2 311 0.0 1.0 +it 06_coal 2 311 0.0 1.0 +it 07_gas 2 311 0.0 1.0 +it 08_non-res 2 311 0.0 1.0 it 09_hydro_pump 2 311 0.0 0.0 -it 01_solar 2 312 1.0 0.0 -it 02_wind_on 2 312 1.0 0.0 -it 03_wind_off 2 312 1.0 0.0 -it 04_res 2 312 1.0 0.0 -it 05_nuclear 2 312 1.0 0.0 -it 06_coal 2 312 1.0 0.0 -it 07_gas 2 312 1.0 0.0 -it 08_non-res 2 312 1.0 0.0 +it 01_solar 2 312 0.0 1.0 +it 02_wind_on 2 312 0.0 1.0 +it 03_wind_off 2 312 0.0 1.0 +it 04_res 2 312 0.0 1.0 +it 05_nuclear 2 312 0.0 1.0 +it 06_coal 2 312 0.0 1.0 +it 07_gas 2 312 0.0 1.0 +it 08_non-res 2 312 0.0 1.0 it 09_hydro_pump 2 312 0.0 0.0 -it 01_solar 2 313 1.0 0.0 -it 02_wind_on 2 313 1.0 0.0 -it 03_wind_off 2 313 1.0 0.0 -it 04_res 2 313 1.0 0.0 -it 05_nuclear 2 313 1.0 0.0 -it 06_coal 2 313 1.0 0.0 -it 07_gas 2 313 1.0 0.0 -it 08_non-res 2 313 1.0 0.0 +it 01_solar 2 313 0.0 1.0 +it 02_wind_on 2 313 0.0 1.0 +it 03_wind_off 2 313 0.0 1.0 +it 04_res 2 313 0.0 1.0 +it 05_nuclear 2 313 0.0 1.0 +it 06_coal 2 313 0.0 1.0 +it 07_gas 2 313 0.0 1.0 +it 08_non-res 2 313 0.0 1.0 it 09_hydro_pump 2 313 0.0 0.0 -it 01_solar 2 314 1.0 0.0 -it 02_wind_on 2 314 1.0 0.0 -it 03_wind_off 2 314 1.0 0.0 -it 04_res 2 314 1.0 0.0 -it 05_nuclear 2 314 1.0 0.0 -it 06_coal 2 314 1.0 0.0 -it 07_gas 2 314 1.0 0.0 -it 08_non-res 2 314 1.0 0.0 +it 01_solar 2 314 0.0 1.0 +it 02_wind_on 2 314 0.0 1.0 +it 03_wind_off 2 314 0.0 1.0 +it 04_res 2 314 0.0 1.0 +it 05_nuclear 2 314 0.0 1.0 +it 06_coal 2 314 0.0 1.0 +it 07_gas 2 314 0.0 1.0 +it 08_non-res 2 314 0.0 1.0 it 09_hydro_pump 2 314 0.0 0.0 -it 01_solar 2 315 1.0 0.0 -it 02_wind_on 2 315 1.0 0.0 -it 03_wind_off 2 315 1.0 0.0 -it 04_res 2 315 1.0 0.0 -it 05_nuclear 2 315 1.0 0.0 -it 06_coal 2 315 1.0 0.0 -it 07_gas 2 315 1.0 0.0 -it 08_non-res 2 315 1.0 0.0 +it 01_solar 2 315 0.0 1.0 +it 02_wind_on 2 315 0.0 1.0 +it 03_wind_off 2 315 0.0 1.0 +it 04_res 2 315 0.0 1.0 +it 05_nuclear 2 315 0.0 1.0 +it 06_coal 2 315 0.0 1.0 +it 07_gas 2 315 0.0 1.0 +it 08_non-res 2 315 0.0 1.0 it 09_hydro_pump 2 315 0.0 0.0 -it 01_solar 2 316 1.0 0.0 -it 02_wind_on 2 316 1.0 0.0 -it 03_wind_off 2 316 1.0 0.0 -it 04_res 2 316 1.0 0.0 -it 05_nuclear 2 316 1.0 0.0 -it 06_coal 2 316 1.0 0.0 -it 07_gas 2 316 1.0 0.0 -it 08_non-res 2 316 1.0 0.0 +it 01_solar 2 316 0.0 1.0 +it 02_wind_on 2 316 0.0 1.0 +it 03_wind_off 2 316 0.0 1.0 +it 04_res 2 316 0.0 1.0 +it 05_nuclear 2 316 0.0 1.0 +it 06_coal 2 316 0.0 1.0 +it 07_gas 2 316 0.0 1.0 +it 08_non-res 2 316 0.0 1.0 it 09_hydro_pump 2 316 0.0 0.0 -it 01_solar 2 317 1.0 0.0 -it 02_wind_on 2 317 1.0 0.0 -it 03_wind_off 2 317 1.0 0.0 -it 04_res 2 317 1.0 0.0 -it 05_nuclear 2 317 1.0 0.0 -it 06_coal 2 317 1.0 0.0 -it 07_gas 2 317 1.0 0.0 -it 08_non-res 2 317 1.0 0.0 +it 01_solar 2 317 0.0 1.0 +it 02_wind_on 2 317 0.0 1.0 +it 03_wind_off 2 317 0.0 1.0 +it 04_res 2 317 0.0 1.0 +it 05_nuclear 2 317 0.0 1.0 +it 06_coal 2 317 0.0 1.0 +it 07_gas 2 317 0.0 1.0 +it 08_non-res 2 317 0.0 1.0 it 09_hydro_pump 2 317 0.0 0.0 -it 01_solar 2 318 1.0 0.0 -it 02_wind_on 2 318 1.0 0.0 -it 03_wind_off 2 318 1.0 0.0 -it 04_res 2 318 1.0 0.0 -it 05_nuclear 2 318 1.0 0.0 -it 06_coal 2 318 1.0 0.0 -it 07_gas 2 318 1.0 0.0 -it 08_non-res 2 318 1.0 0.0 +it 01_solar 2 318 0.0 1.0 +it 02_wind_on 2 318 0.0 1.0 +it 03_wind_off 2 318 0.0 1.0 +it 04_res 2 318 0.0 1.0 +it 05_nuclear 2 318 0.0 1.0 +it 06_coal 2 318 0.0 1.0 +it 07_gas 2 318 0.0 1.0 +it 08_non-res 2 318 0.0 1.0 it 09_hydro_pump 2 318 0.0 0.0 -it 01_solar 2 319 1.0 0.0 -it 02_wind_on 2 319 1.0 0.0 -it 03_wind_off 2 319 1.0 0.0 -it 04_res 2 319 1.0 0.0 -it 05_nuclear 2 319 1.0 0.0 -it 06_coal 2 319 1.0 0.0 -it 07_gas 2 319 1.0 0.0 -it 08_non-res 2 319 1.0 0.0 +it 01_solar 2 319 0.0 1.0 +it 02_wind_on 2 319 0.0 1.0 +it 03_wind_off 2 319 0.0 1.0 +it 04_res 2 319 0.0 1.0 +it 05_nuclear 2 319 0.0 1.0 +it 06_coal 2 319 0.0 1.0 +it 07_gas 2 319 0.0 1.0 +it 08_non-res 2 319 0.0 1.0 it 09_hydro_pump 2 319 0.0 0.0 -it 01_solar 2 320 1.0 0.0 -it 02_wind_on 2 320 1.0 0.0 -it 03_wind_off 2 320 1.0 0.0 -it 04_res 2 320 1.0 0.0 -it 05_nuclear 2 320 1.0 0.0 -it 06_coal 2 320 1.0 0.0 -it 07_gas 2 320 1.0 0.0 -it 08_non-res 2 320 1.0 0.0 +it 01_solar 2 320 0.0 1.0 +it 02_wind_on 2 320 0.0 1.0 +it 03_wind_off 2 320 0.0 1.0 +it 04_res 2 320 0.0 1.0 +it 05_nuclear 2 320 0.0 1.0 +it 06_coal 2 320 0.0 1.0 +it 07_gas 2 320 0.0 1.0 +it 08_non-res 2 320 0.0 1.0 it 09_hydro_pump 2 320 0.0 0.0 -it 01_solar 2 321 1.0 0.0 -it 02_wind_on 2 321 1.0 0.0 -it 03_wind_off 2 321 1.0 0.0 -it 04_res 2 321 1.0 0.0 -it 05_nuclear 2 321 1.0 0.0 -it 06_coal 2 321 1.0 0.0 -it 07_gas 2 321 1.0 0.0 -it 08_non-res 2 321 1.0 0.0 +it 01_solar 2 321 0.0 1.0 +it 02_wind_on 2 321 0.0 1.0 +it 03_wind_off 2 321 0.0 1.0 +it 04_res 2 321 0.0 1.0 +it 05_nuclear 2 321 0.0 1.0 +it 06_coal 2 321 0.0 1.0 +it 07_gas 2 321 0.0 1.0 +it 08_non-res 2 321 0.0 1.0 it 09_hydro_pump 2 321 0.0 0.0 -it 01_solar 2 322 1.0 0.0 -it 02_wind_on 2 322 1.0 0.0 -it 03_wind_off 2 322 1.0 0.0 -it 04_res 2 322 1.0 0.0 -it 05_nuclear 2 322 1.0 0.0 -it 06_coal 2 322 1.0 0.0 -it 07_gas 2 322 1.0 0.0 -it 08_non-res 2 322 1.0 0.0 +it 01_solar 2 322 0.0 1.0 +it 02_wind_on 2 322 0.0 1.0 +it 03_wind_off 2 322 0.0 1.0 +it 04_res 2 322 0.0 1.0 +it 05_nuclear 2 322 0.0 1.0 +it 06_coal 2 322 0.0 1.0 +it 07_gas 2 322 0.0 1.0 +it 08_non-res 2 322 0.0 1.0 it 09_hydro_pump 2 322 0.0 0.0 -it 01_solar 2 323 1.0 0.0 -it 02_wind_on 2 323 1.0 0.0 -it 03_wind_off 2 323 1.0 0.0 -it 04_res 2 323 1.0 0.0 -it 05_nuclear 2 323 1.0 0.0 -it 06_coal 2 323 1.0 0.0 -it 07_gas 2 323 1.0 0.0 -it 08_non-res 2 323 1.0 0.0 +it 01_solar 2 323 0.0 1.0 +it 02_wind_on 2 323 0.0 1.0 +it 03_wind_off 2 323 0.0 1.0 +it 04_res 2 323 0.0 1.0 +it 05_nuclear 2 323 0.0 1.0 +it 06_coal 2 323 0.0 1.0 +it 07_gas 2 323 0.0 1.0 +it 08_non-res 2 323 0.0 1.0 it 09_hydro_pump 2 323 0.0 0.0 -it 01_solar 2 324 1.0 0.0 -it 02_wind_on 2 324 1.0 0.0 -it 03_wind_off 2 324 1.0 0.0 -it 04_res 2 324 1.0 0.0 -it 05_nuclear 2 324 1.0 0.0 -it 06_coal 2 324 1.0 0.0 -it 07_gas 2 324 1.0 0.0 -it 08_non-res 2 324 1.0 0.0 +it 01_solar 2 324 0.0 1.0 +it 02_wind_on 2 324 0.0 1.0 +it 03_wind_off 2 324 0.0 1.0 +it 04_res 2 324 0.0 1.0 +it 05_nuclear 2 324 0.0 1.0 +it 06_coal 2 324 0.0 1.0 +it 07_gas 2 324 0.0 1.0 +it 08_non-res 2 324 0.0 1.0 it 09_hydro_pump 2 324 0.0 0.0 -it 01_solar 2 325 1.0 0.0 -it 02_wind_on 2 325 1.0 0.0 -it 03_wind_off 2 325 1.0 0.0 -it 04_res 2 325 1.0 0.0 -it 05_nuclear 2 325 1.0 0.0 -it 06_coal 2 325 1.0 0.0 -it 07_gas 2 325 1.0 0.0 -it 08_non-res 2 325 1.0 0.0 +it 01_solar 2 325 0.0 1.0 +it 02_wind_on 2 325 0.0 1.0 +it 03_wind_off 2 325 0.0 1.0 +it 04_res 2 325 0.0 1.0 +it 05_nuclear 2 325 0.0 1.0 +it 06_coal 2 325 0.0 1.0 +it 07_gas 2 325 0.0 1.0 +it 08_non-res 2 325 0.0 1.0 it 09_hydro_pump 2 325 0.0 0.0 -it 01_solar 2 326 1.0 0.0 -it 02_wind_on 2 326 1.0 0.0 -it 03_wind_off 2 326 1.0 0.0 -it 04_res 2 326 1.0 0.0 -it 05_nuclear 2 326 1.0 0.0 -it 06_coal 2 326 1.0 0.0 -it 07_gas 2 326 1.0 0.0 -it 08_non-res 2 326 1.0 0.0 +it 01_solar 2 326 0.0 1.0 +it 02_wind_on 2 326 0.0 1.0 +it 03_wind_off 2 326 0.0 1.0 +it 04_res 2 326 0.0 1.0 +it 05_nuclear 2 326 0.0 1.0 +it 06_coal 2 326 0.0 1.0 +it 07_gas 2 326 0.0 1.0 +it 08_non-res 2 326 0.0 1.0 it 09_hydro_pump 2 326 0.0 0.0 -it 01_solar 2 327 1.0 0.0 -it 02_wind_on 2 327 1.0 0.0 -it 03_wind_off 2 327 1.0 0.0 -it 04_res 2 327 1.0 0.0 -it 05_nuclear 2 327 1.0 0.0 -it 06_coal 2 327 1.0 0.0 -it 07_gas 2 327 1.0 0.0 -it 08_non-res 2 327 1.0 0.0 +it 01_solar 2 327 0.0 1.0 +it 02_wind_on 2 327 0.0 1.0 +it 03_wind_off 2 327 0.0 1.0 +it 04_res 2 327 0.0 1.0 +it 05_nuclear 2 327 0.0 1.0 +it 06_coal 2 327 0.0 1.0 +it 07_gas 2 327 0.0 1.0 +it 08_non-res 2 327 0.0 1.0 it 09_hydro_pump 2 327 0.0 0.0 -it 01_solar 2 328 1.0 0.0 -it 02_wind_on 2 328 1.0 0.0 -it 03_wind_off 2 328 1.0 0.0 -it 04_res 2 328 1.0 0.0 -it 05_nuclear 2 328 1.0 0.0 -it 06_coal 2 328 1.0 0.0 -it 07_gas 2 328 1.0 0.0 -it 08_non-res 2 328 1.0 0.0 +it 01_solar 2 328 0.0 1.0 +it 02_wind_on 2 328 0.0 1.0 +it 03_wind_off 2 328 0.0 1.0 +it 04_res 2 328 0.0 1.0 +it 05_nuclear 2 328 0.0 1.0 +it 06_coal 2 328 0.0 1.0 +it 07_gas 2 328 0.0 1.0 +it 08_non-res 2 328 0.0 1.0 it 09_hydro_pump 2 328 0.0 0.0 -it 01_solar 2 329 1.0 0.0 -it 02_wind_on 2 329 1.0 0.0 -it 03_wind_off 2 329 1.0 0.0 -it 04_res 2 329 1.0 0.0 -it 05_nuclear 2 329 1.0 0.0 -it 06_coal 2 329 1.0 0.0 -it 07_gas 2 329 1.0 0.0 -it 08_non-res 2 329 1.0 0.0 +it 01_solar 2 329 0.0 1.0 +it 02_wind_on 2 329 0.0 1.0 +it 03_wind_off 2 329 0.0 1.0 +it 04_res 2 329 0.0 1.0 +it 05_nuclear 2 329 0.0 1.0 +it 06_coal 2 329 0.0 1.0 +it 07_gas 2 329 0.0 1.0 +it 08_non-res 2 329 0.0 1.0 it 09_hydro_pump 2 329 0.0 0.0 -it 01_solar 2 330 1.0 0.0 -it 02_wind_on 2 330 1.0 0.0 -it 03_wind_off 2 330 1.0 0.0 -it 04_res 2 330 1.0 0.0 -it 05_nuclear 2 330 1.0 0.0 -it 06_coal 2 330 1.0 0.0 -it 07_gas 2 330 1.0 0.0 -it 08_non-res 2 330 1.0 0.0 -it 09_hydro_pump 2 330 1.0 0.0 -it 01_solar 2 331 1.0 0.0 -it 02_wind_on 2 331 1.0 0.0 -it 03_wind_off 2 331 1.0 0.0 -it 04_res 2 331 1.0 0.0 -it 05_nuclear 2 331 1.0 0.0 -it 06_coal 2 331 1.0 0.0 -it 07_gas 2 331 1.0 0.0 -it 08_non-res 2 331 1.0 0.0 -it 09_hydro_pump 2 331 1.0 0.0 -it 01_solar 2 332 1.0 0.0 -it 02_wind_on 2 332 1.0 0.0 -it 03_wind_off 2 332 1.0 0.0 -it 04_res 2 332 1.0 0.0 -it 05_nuclear 2 332 1.0 0.0 -it 06_coal 2 332 1.0 0.0 -it 07_gas 2 332 1.0 0.0 -it 08_non-res 2 332 1.0 0.0 -it 09_hydro_pump 2 332 1.0 0.0 -it 01_solar 2 333 1.0 0.0 -it 02_wind_on 2 333 1.0 0.0 -it 03_wind_off 2 333 1.0 0.0 -it 04_res 2 333 1.0 0.0 -it 05_nuclear 2 333 1.0 0.0 -it 06_coal 2 333 1.0 0.0 -it 07_gas 2 333 1.0 0.0 -it 08_non-res 2 333 1.0 0.0 -it 09_hydro_pump 2 333 1.0 0.0 -it 01_solar 2 334 1.0 0.0 -it 02_wind_on 2 334 1.0 0.0 -it 03_wind_off 2 334 1.0 0.0 -it 04_res 2 334 1.0 0.0 -it 05_nuclear 2 334 1.0 0.0 -it 06_coal 2 334 1.0 0.0 -it 07_gas 2 334 1.0 0.0 -it 08_non-res 2 334 1.0 0.0 -it 09_hydro_pump 2 334 1.0 0.0 -it 01_solar 2 335 1.0 0.0 -it 02_wind_on 2 335 1.0 0.0 -it 03_wind_off 2 335 1.0 0.0 -it 04_res 2 335 1.0 0.0 -it 05_nuclear 2 335 1.0 0.0 -it 06_coal 2 335 1.0 0.0 -it 07_gas 2 335 1.0 0.0 -it 08_non-res 2 335 1.0 0.0 -it 09_hydro_pump 2 335 1.0 0.0 -it 01_solar 2 336 1.0 0.0 -it 02_wind_on 2 336 1.0 0.0 -it 03_wind_off 2 336 1.0 0.0 -it 04_res 2 336 1.0 0.0 -it 05_nuclear 2 336 1.0 0.0 -it 06_coal 2 336 1.0 0.0 -it 07_gas 2 336 1.0 0.0 -it 08_non-res 2 336 1.0 0.0 -it 09_hydro_pump 2 336 1.0 0.0 +it 01_solar 2 330 0.0 1.0 +it 02_wind_on 2 330 0.0 1.0 +it 03_wind_off 2 330 0.0 1.0 +it 04_res 2 330 0.0 1.0 +it 05_nuclear 2 330 0.0 1.0 +it 06_coal 2 330 0.0 1.0 +it 07_gas 2 330 0.0 1.0 +it 08_non-res 2 330 0.0 1.0 +it 09_hydro_pump 2 330 0.0 1.0 +it 01_solar 2 331 0.0 1.0 +it 02_wind_on 2 331 0.0 1.0 +it 03_wind_off 2 331 0.0 1.0 +it 04_res 2 331 0.0 1.0 +it 05_nuclear 2 331 0.0 1.0 +it 06_coal 2 331 0.0 1.0 +it 07_gas 2 331 0.0 1.0 +it 08_non-res 2 331 0.0 1.0 +it 09_hydro_pump 2 331 0.0 1.0 +it 01_solar 2 332 0.0 1.0 +it 02_wind_on 2 332 0.0 1.0 +it 03_wind_off 2 332 0.0 1.0 +it 04_res 2 332 0.0 1.0 +it 05_nuclear 2 332 0.0 1.0 +it 06_coal 2 332 0.0 1.0 +it 07_gas 2 332 0.0 1.0 +it 08_non-res 2 332 0.0 1.0 +it 09_hydro_pump 2 332 0.0 1.0 +it 01_solar 2 333 0.0 1.0 +it 02_wind_on 2 333 0.0 1.0 +it 03_wind_off 2 333 0.0 1.0 +it 04_res 2 333 0.0 1.0 +it 05_nuclear 2 333 0.0 1.0 +it 06_coal 2 333 0.0 1.0 +it 07_gas 2 333 0.0 1.0 +it 08_non-res 2 333 0.0 1.0 +it 09_hydro_pump 2 333 0.0 1.0 +it 01_solar 2 334 0.0 1.0 +it 02_wind_on 2 334 0.0 1.0 +it 03_wind_off 2 334 0.0 1.0 +it 04_res 2 334 0.0 1.0 +it 05_nuclear 2 334 0.0 1.0 +it 06_coal 2 334 0.0 1.0 +it 07_gas 2 334 0.0 1.0 +it 08_non-res 2 334 0.0 1.0 +it 09_hydro_pump 2 334 0.0 1.0 +it 01_solar 2 335 0.0 1.0 +it 02_wind_on 2 335 0.0 1.0 +it 03_wind_off 2 335 0.0 1.0 +it 04_res 2 335 0.0 1.0 +it 05_nuclear 2 335 0.0 1.0 +it 06_coal 2 335 0.0 1.0 +it 07_gas 2 335 0.0 1.0 +it 08_non-res 2 335 0.0 1.0 +it 09_hydro_pump 2 335 0.0 1.0 +it 01_solar 2 336 0.0 1.0 +it 02_wind_on 2 336 0.0 1.0 +it 03_wind_off 2 336 0.0 1.0 +it 04_res 2 336 0.0 1.0 +it 05_nuclear 2 336 0.0 1.0 +it 06_coal 2 336 0.0 1.0 +it 07_gas 2 336 0.0 1.0 +it 08_non-res 2 336 0.0 1.0 +it 09_hydro_pump 2 336 0.0 1.0 diff --git a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-08-all.result.tsv b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-08-all.result.tsv index ebc9631010..444fe37192 100644 --- a/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-08-all.result.tsv +++ b/tests/integration/raw_studies_blueprint/assets/aggregate_areas_raw_data/test-08-all.result.tsv @@ -1,19 +1,19 @@ -area cluster timeId NODU NP Cost - Euro -de 01_solar 1 167.0 0.0 -de 02_wind_on 1 147.0 0.0 -de 03_wind_off 1 127.0 0.0 -de 04_res 1 107.0 0.0 -de 05_nuclear 1 87.0 0.0 -de 06_coal 1 67.0 0.0 -de 07_gas 1 47.0 0.0 -de 08_non-res 1 27.0 0.0 -de 09_hydro_pump 1 7.0 0.0 -es 01_solar 1 167.0 0.0 -es 02_wind_on 1 147.0 0.0 -es 03_wind_off 1 127.0 0.0 -es 04_res 1 107.0 0.0 -es 05_nuclear 1 87.0 0.0 -es 06_coal 1 67.0 0.0 -es 07_gas 1 47.0 0.0 -es 08_non-res 1 27.0 0.0 -es 09_hydro_pump 1 7.0 0.0 +area cluster timeId NP Cost NODU +de 01_solar 1 0.0 167.0 +de 02_wind_on 1 0.0 147.0 +de 03_wind_off 1 0.0 127.0 +de 04_res 1 0.0 107.0 +de 05_nuclear 1 0.0 87.0 +de 06_coal 1 0.0 67.0 +de 07_gas 1 0.0 47.0 +de 08_non-res 1 0.0 27.0 +de 09_hydro_pump 1 0.0 7.0 +es 01_solar 1 0.0 167.0 +es 02_wind_on 1 0.0 147.0 +es 03_wind_off 1 0.0 127.0 +es 04_res 1 0.0 107.0 +es 05_nuclear 1 0.0 87.0 +es 06_coal 1 0.0 67.0 +es 07_gas 1 0.0 47.0 +es 08_non-res 1 0.0 27.0 +es 09_hydro_pump 1 0.0 7.0 diff --git a/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py b/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py index d1b1f304bf..f4532ea46f 100644 --- a/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py +++ b/tests/integration/raw_studies_blueprint/test_aggregate_raw_data.py @@ -531,37 +531,27 @@ def test_different_formats( expected_df[col] = expected_df[col].astype(df[col].dtype) pd.testing.assert_frame_equal(df, expected_df) - def test_aggregation_with_incoherent_bodies( - self, client: TestClient, user_access_token: str, internal_study_id: str + def test_aggregation_errors( + self, client: TestClient, user_access_token: str, internal_study_id: str, tmp_path: Path ): - """ - Asserts that requests with incoherent bodies don't crash but send empty dataframes - """ client.headers = {"Authorization": f"Bearer {user_access_token}"} + + # Asserts that requests with incoherent bodies don't crash but send empty dataframes for params in INCOHERENT_REQUESTS_BODIES__IND: output_id = params.pop("output_id") res = client.get(f"/v1/studies/{internal_study_id}/links/aggregate/mc-ind/{output_id}", params=params) assert res.status_code == 200, res.json() assert res.content.strip() == b"" - def test_wrongly_typed_request(self, client: TestClient, user_access_token: str, internal_study_id: str): - """ - Asserts that wrongly typed requests send an HTTP 422 Exception - """ - client.headers = {"Authorization": f"Bearer {user_access_token}"} + # Asserts that wrongly typed requests send an HTTP 422 Exception for params in WRONGLY_TYPED_REQUESTS__IND: output_id = params.pop("output_id") res = client.get(f"/v1/studies/{internal_study_id}/links/aggregate/mc-ind/{output_id}", params=params) assert res.status_code == 422 assert res.json()["exception"] == "RequestValidationError" - def test_aggregation_with_wrong_output(self, client: TestClient, user_access_token: str, internal_study_id: str): - """ - Asserts that requests with wrong output send an HTTP 422 Exception - """ - client.headers = {"Authorization": f"Bearer {user_access_token}"} - - # test for areas + # Asserts that requests with wrong output send an HTTP 422 Exception + # for areas res = client.get( f"/v1/studies/{internal_study_id}/areas/aggregate/mc-ind/unknown_id", params={ @@ -573,7 +563,7 @@ def test_aggregation_with_wrong_output(self, client: TestClient, user_access_tok assert res.json()["exception"] == "OutputNotFound" assert "unknown_id" in res.json()["description"], "The output_id should be in the message" - # test for links + # for links res = client.get( f"/v1/studies/{internal_study_id}/links/aggregate/mc-ind/unknown_id", params={ @@ -585,6 +575,19 @@ def test_aggregation_with_wrong_output(self, client: TestClient, user_access_tok assert res.json()["exception"] == "OutputNotFound" assert "unknown_id" in res.json()["description"], "The output_id should be in the message" + # Asserts that requests with non-existing folders send an HTTP 404 Exception + # the mc-ind folder + mc_ind_folder = tmp_path.joinpath("ext_workspace/STA-mini/output/20201014-1425eco-goodbye/economy/mc-ind") + # delete the folder + shutil.rmtree(mc_ind_folder) + res = client.get( + f"/v1/studies/{internal_study_id}/areas/aggregate/mc-ind/20201014-1425eco-goodbye", + params={"query_file": "values", "frequency": "hourly"}, + ) + assert res.status_code == 404, res.json() + assert "economy/mc-ind" in res.json()["description"] + assert res.json()["exception"] == "OutputSubFolderNotFound" + def test_empty_columns(self, client: TestClient, user_access_token: str, internal_study_id: str): """ Asserts that requests get an empty dataframe when columns are not existing @@ -615,26 +618,6 @@ def test_empty_columns(self, client: TestClient, user_access_token: str, interna assert res.status_code == 200, res.json() assert res.content.strip() == b"" - def test_non_existing_folder( - self, tmp_path: Path, client: TestClient, user_access_token: str, internal_study_id: str - ): - """ - Asserts that requests with non-existing folders send an HTTP 404 Exception - """ - client.headers = {"Authorization": f"Bearer {user_access_token}"} - - # the mc-ind folder - mc_ind_folder = tmp_path.joinpath("ext_workspace/STA-mini/output/20201014-1425eco-goodbye/economy/mc-ind") - # delete the folder - shutil.rmtree(mc_ind_folder) - res = client.get( - f"/v1/studies/{internal_study_id}/areas/aggregate/mc-ind/20201014-1425eco-goodbye", - params={"query_file": "values", "frequency": "hourly"}, - ) - assert res.status_code == 404, res.json() - assert "economy/mc-ind" in res.json()["description"] - assert res.json()["exception"] == "OutputSubFolderNotFound" - @pytest.mark.integration_test class TestRawDataAggregationMCAll: @@ -735,37 +718,27 @@ def test_different_formats( expected_df[col] = expected_df[col].astype(df[col].dtype) pd.testing.assert_frame_equal(df, expected_df) - def test_aggregation_with_incoherent_bodies( - self, client: TestClient, user_access_token: str, internal_study_id: str + def test_aggregation_errors( + self, client: TestClient, user_access_token: str, internal_study_id: str, tmp_path: Path ): - """ - Asserts that requests with incoherent bodies don't crash but send empty dataframes - """ client.headers = {"Authorization": f"Bearer {user_access_token}"} + + # Asserts that requests with incoherent bodies don't crash but send empty dataframes for params in INCOHERENT_REQUESTS_BODIES__ALL: output_id = params.pop("output_id") res = client.get(f"/v1/studies/{internal_study_id}/links/aggregate/mc-all/{output_id}", params=params) assert res.status_code == 200, res.json() assert res.content.strip() == b"" - def test_wrongly_typed_request(self, client: TestClient, user_access_token: str, internal_study_id: str): - """ - Asserts that wrongly typed requests send an HTTP 422 Exception - """ - client.headers = {"Authorization": f"Bearer {user_access_token}"} + # Asserts that wrongly typed requests send an HTTP 422 Exception for params in WRONGLY_TYPED_REQUESTS__ALL: output_id = params.pop("output_id") res = client.get(f"/v1/studies/{internal_study_id}/links/aggregate/mc-all/{output_id}", params=params) assert res.status_code == 422 assert res.json()["exception"] == "RequestValidationError" - def test_aggregation_with_wrong_output(self, client: TestClient, user_access_token: str, internal_study_id: str): - """ - Asserts that requests with wrong output send an HTTP 422 Exception - """ - client.headers = {"Authorization": f"Bearer {user_access_token}"} - - # test for areas + # Asserts that requests with wrong output send an HTTP 422 Exception + # for areas res = client.get( f"/v1/studies/{internal_study_id}/areas/aggregate/mc-all/unknown_id", params={ @@ -777,7 +750,7 @@ def test_aggregation_with_wrong_output(self, client: TestClient, user_access_tok assert res.json()["exception"] == "OutputNotFound" assert "unknown_id" in res.json()["description"], "The output_id should be in the message" - # test for links + # for links res = client.get( f"/v1/studies/{internal_study_id}/links/aggregate/mc-all/unknown_id", params={ @@ -789,6 +762,18 @@ def test_aggregation_with_wrong_output(self, client: TestClient, user_access_tok assert res.json()["exception"] == "OutputNotFound" assert "unknown_id" in res.json()["description"], "The output_id should be in the message" + # Asserts that an error 404 is raised when the `economy/mc-all` folder does not exist + mc_all_path = tmp_path.joinpath("ext_workspace/STA-mini/output/20241807-1540eco-extra-outputs/economy/mc-all") + # delete the folder + shutil.rmtree(mc_all_path) + res = client.get( + f"/v1/studies/{internal_study_id}/links/aggregate/mc-all/20241807-1540eco-extra-outputs", + params={"query_file": "values", "frequency": "daily"}, + ) + assert res.status_code == 404, res.json() + assert "economy/mc-all" in res.json()["description"] + assert res.json()["exception"] == "OutputSubFolderNotFound" + def test_empty_columns(self, client: TestClient, user_access_token: str, internal_study_id: str): """ Asserts that requests get an empty dataframe when columns are not existing @@ -820,20 +805,36 @@ def test_empty_columns(self, client: TestClient, user_access_token: str, interna assert res.status_code == 200, res.json() assert res.content.strip() == b"" - def test_non_existing_folder( - self, tmp_path: Path, client: TestClient, user_access_token: str, internal_study_id: str + +@pytest.mark.integration_test +class TestRawDataAggregationColumnsFormatting: + def test_columns_formatting( + self, client: TestClient, user_access_token: str, internal_study_id: str, tmp_path: Path ): """ - Test that an error 404 is raised when the `economy/mc-all` folder does not exist + Check returned columns names are post-processed """ client.headers = {"Authorization": f"Bearer {user_access_token}"} - mc_all_path = tmp_path.joinpath("ext_workspace/STA-mini/output/20241807-1540eco-extra-outputs/economy/mc-all") - # delete the folder - shutil.rmtree(mc_all_path) + + # Prepare output + output_id = "20201014-1422eco-hello" + output_path = ( + tmp_path / "ext_workspace" / "STA-mini" / "output" / output_id / "economy" / "mc-all" / "areas" / "de" + ) + matrix_path = ASSETS_DIR / "aggregate_areas_raw_data" / "details-STstorage-annual.txt" + shutil.copy(matrix_path, output_path) + + # asserts STS column names are post-processed by the back-end res = client.get( - f"/v1/studies/{internal_study_id}/links/aggregate/mc-all/20241807-1540eco-extra-outputs", - params={"query_file": "values", "frequency": "daily"}, + f"/v1/studies/{internal_study_id}/areas/aggregate/mc-all/{output_id}", + params={ + "query_file": "details-STstorage", + "frequency": "annual", + }, ) - assert res.status_code == 404, res.json() - assert "economy/mc-all" in res.json()["description"] - assert res.json()["exception"] == "OutputSubFolderNotFound" + assert res.status_code == 200 + content = io.BytesIO(res.content) + actual_df = pd.read_csv(content, sep=",") + expected_df_path = ASSETS_DIR / "aggregate_areas_raw_data" / "expected_result_sts.csv" + expected_df = pd.read_csv(expected_df_path, sep=",") + assert actual_df.equals(expected_df) From bbd48d002bafb6496800b1214839a57a6cc01a92 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:06:12 +0100 Subject: [PATCH 21/86] feat(ui-utils): add `validatePath` function in validation --- webapp/src/utils/validation/array.ts | 1 - webapp/src/utils/validation/number.ts | 3 +- webapp/src/utils/validation/string.ts | 104 +++++++++++++++++++++++++- 3 files changed, 103 insertions(+), 5 deletions(-) diff --git a/webapp/src/utils/validation/array.ts b/webapp/src/utils/validation/array.ts index d0edd43a15..98c7b50251 100644 --- a/webapp/src/utils/validation/array.ts +++ b/webapp/src/utils/validation/array.ts @@ -29,7 +29,6 @@ interface ArrayValidationOptions { * validateArray([1, 2, 3], { allowDuplicate: false }); // true * validateArray([1, 1, 2, 3], { allowDuplicate: false }); // Error message * - * * @example With currying. * const fn = validateArray({ allowDuplicate: false }); * fn([1, 2, 3]); // true diff --git a/webapp/src/utils/validation/number.ts b/webapp/src/utils/validation/number.ts index fd96c1502e..f975ef29ba 100644 --- a/webapp/src/utils/validation/number.ts +++ b/webapp/src/utils/validation/number.ts @@ -28,11 +28,10 @@ interface NumberValidationOptions { * validateNumber(5, { min: 0, max: 10 }); // true * validateNumber(9, { min: 10, max: 20 }); // Error message * - * * @example With currying. * const fn = validateNumber({ min: 0, max: 10 }); * fn(5); // true - * fn(11); // Error message + * fn(9); // Error message * * @param value - The number to validate. * @param [options] - Configuration options for validation. diff --git a/webapp/src/utils/validation/string.ts b/webapp/src/utils/validation/string.ts index bd9bdef1e8..bf47d6775c 100644 --- a/webapp/src/utils/validation/string.ts +++ b/webapp/src/utils/validation/string.ts @@ -33,6 +33,15 @@ interface StringValidationOptions { * Validates the input string against a variety of checks including length restrictions, * character validations, and uniqueness against provided arrays of existing and excluded values. * + * @example + * validateString("foo", { allowSpaces: false }); // true + * validateNumber("foo bar", { allowSpaces: false }); // Error message + * + * @example With currying. + * const fn = validateString({ allowSpaces: false }); + * fn("foo"); // true + * fn("foo bar"); // Error message + * * @param value - The string to validate. Leading and trailing spaces will be trimmed. * @param options - Configuration options for validation. (Optional) * @param [options.existingValues=[]] - An array of strings to check against for duplicates. Comparison is case-insensitive by default. @@ -49,7 +58,22 @@ interface StringValidationOptions { export function validateString( value: string, options?: StringValidationOptions, -): ValidationReturn { +): ValidationReturn; + +export function validateString( + options?: StringValidationOptions, +): (value: string) => ValidationReturn; + +export function validateString( + valueOrOpts?: string | StringValidationOptions, + options: StringValidationOptions = {}, +): ValidationReturn | ((value: string) => ValidationReturn) { + if (typeof valueOrOpts !== "string") { + return (v: string) => validateString(v, valueOrOpts); + } + + const value = valueOrOpts; + const { existingValues = [], excludedValues = [], @@ -60,7 +84,7 @@ export function validateString( editedValue = "", minLength = 0, maxLength = 255, - } = options || {}; + } = options; const trimmedValue = value.trim(); @@ -183,3 +207,79 @@ function generatePattern( allowSpecialChars && specialChars ? escapeSpecialChars(specialChars) : ""; return basePattern + spacePattern + specialCharsPattern + "]*$"; } + +interface PathValidationOptions { + allowToStartWithSlash?: boolean; + allowToEndWithSlash?: boolean; + allowEmpty?: boolean; +} + +/** + * Validates a path against specified criteria. + * + * @example + * validatePath("foo/bar", { allowToEndWithSlash: false }); // true + * validatePath("foo/bar/", { allowToEndWithSlash: false }); // Error message + * + * @example With currying. + * const fn = validateString({ allowToEndWithSlash: false }); + * fn("foo/bar"); // true + * fn("foo/bar/"); // Error message + * + * @param path - The string to validate. + * @param options - Configuration options for validation. (Optional) + * @param [options.allowToStartWithSlash=true] - Indicates if the path is allowed to start with a '/'. + * @param [options.allowToEndWithSlash=true] - Indicates if the path is allowed to end with a '/'. + * @param [options.allowEmpty=false] - Indicates if an empty path is allowed. + * @returns True if validation is successful, or a localized error message if it fails. + */ +export function validatePath( + path: string, + options?: PathValidationOptions, +): ValidationReturn; + +export function validatePath( + options?: PathValidationOptions, +): (value: string) => ValidationReturn; + +export function validatePath( + pathOrOpts?: string | PathValidationOptions, + options: PathValidationOptions = {}, +): ValidationReturn | ((value: string) => ValidationReturn) { + if (typeof pathOrOpts !== "string") { + return (v: string) => validatePath(v, pathOrOpts); + } + + const path = pathOrOpts; + + const { + allowToStartWithSlash = true, + allowToEndWithSlash = true, + allowEmpty = false, + } = options; + + if (!path) { + return allowEmpty ? true : t("form.field.required"); + } + + if (!allowToStartWithSlash && path.startsWith("/")) { + return t("form.field.path.startWithSlashNotAllowed"); + } + + if (!allowToEndWithSlash && path.endsWith("/")) { + return t("form.field.path.endWithSlashNotAllowed"); + } + + if ( + path + .replace(/^\//, "") // Remove first "/" if present + .replace(/\/$/, "") // Remove last "/" if present + .split("/") + .map((v) => v.trim()) + .includes("") + ) { + return t("form.field.path.invalid"); + } + + return true; +} From e7496836c5088ae7b3c35dce14e928d6655ad4a6 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:10:56 +0100 Subject: [PATCH 22/86] fix(ui-studies): small bottom part not visible with scroll --- .../App/Studies/StudiesList/index.tsx | 7 ++----- webapp/src/components/App/Studies/StudyTree.tsx | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/webapp/src/components/App/Studies/StudiesList/index.tsx b/webapp/src/components/App/Studies/StudiesList/index.tsx index a6c412e625..6d90785471 100644 --- a/webapp/src/components/App/Studies/StudiesList/index.tsx +++ b/webapp/src/components/App/Studies/StudiesList/index.tsx @@ -39,10 +39,7 @@ import { FixedSizeGrid, GridOnScrollProps } from "react-window"; import { v4 as uuidv4 } from "uuid"; import { AxiosError } from "axios"; import { StudyMetadata } from "../../../../common/types"; -import { - STUDIES_HEIGHT_HEADER, - STUDIES_LIST_HEADER_HEIGHT, -} from "../../../../theme"; +import { STUDIES_LIST_HEADER_HEIGHT } from "../../../../theme"; import { setStudyScrollPosition, StudiesSortConf, @@ -184,7 +181,7 @@ function StudiesList(props: StudiesListProps) { return ( { - return children.map((elm) => { - const id = parentId ? `${parentId}/${elm.name}` : elm.name; + return children.map((child) => { + const id = parentId ? `${parentId}/${child.name}` : child.name; return ( handleTreeItemClick(id)} > - {buildTree(elm.children, id)} + {buildTree(child.children, id)} ); }); @@ -60,7 +60,14 @@ function StudyTree() { {buildTree([studiesTree])} From 68c49fac25305f082062671e4860bad3b54892c5 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:11:56 +0100 Subject: [PATCH 23/86] refactor(ui-studies): function to build tree --- webapp/src/components/App/Studies/utils.ts | 75 +++++++++++----------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/webapp/src/components/App/Studies/utils.ts b/webapp/src/components/App/Studies/utils.ts index dc2d1c5396..3f2ff61564 100644 --- a/webapp/src/components/App/Studies/utils.ts +++ b/webapp/src/components/App/Studies/utils.ts @@ -20,46 +20,45 @@ export interface StudyTreeNode { children: StudyTreeNode[]; } -const nodeProcess = ( - tree: StudyTreeNode, - path: string[], - folderPath: string, -): void => { - const { children } = tree; - if (path.length === 1) { - return; - } - const element = path.pop() || ""; - const index = children.findIndex( - (elm: StudyTreeNode) => elm.name === element, - ); - const newFolderPath = `${folderPath}/${element}`; - if (index < 0) { - children.push({ name: element, children: [], path: newFolderPath }); - nodeProcess( - children[children.length - 1] as StudyTreeNode, - path, - newFolderPath, - ); - } else { - nodeProcess(children[index] as StudyTreeNode, path, newFolderPath); - } -}; - -export const buildStudyTree = (studies: StudyMetadata[]): StudyTreeNode => { +/** + * Builds a tree structure from a list of study metadata. + * + * @param studies - Array of study metadata objects. + * @returns A tree structure representing the studies. + */ +export function buildStudyTree(studies: StudyMetadata[]) { const tree: StudyTreeNode = { name: "root", children: [], path: "" }; - let path: string[] = []; + for (const study of studies) { - if (study.folder !== undefined && study.folder !== null) { - path = [ - study.workspace, - ...(study.folder as string).split("/").filter((elm) => elm !== ""), - ]; - } else { - path = [study.workspace]; + const path = + typeof study.folder === "string" + ? [study.workspace, ...study.folder.split("/").filter(Boolean)] + : [study.workspace]; + + let current = tree; + + for (let i = 0; i < path.length; i++) { + // Skip the last folder, as it represents the study itself + if (i === path.length - 1) { + break; + } + + const folderName = path[i]; + let child = current.children.find((child) => child.name === folderName); + + if (!child) { + child = { + name: folderName, + children: [], + path: current.path ? `${current.path}/${folderName}` : folderName, + }; + + current.children.push(child); + } + + current = child; } - path.reverse(); - nodeProcess(tree, path, ""); } + return tree; -}; +} From 373f8942f0f16df93daee3e9335a6abe01de8556 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:12:53 +0100 Subject: [PATCH 24/86] feat(ui-studies): update validation in MoveStudyDialog ANT-2390 --- webapp/public/locales/en/main.json | 8 +- webapp/public/locales/fr/main.json | 8 +- .../App/Studies/MoveStudyDialog.tsx | 96 +++++++++++-------- webapp/src/services/api/study.ts | 13 ++- 4 files changed, 71 insertions(+), 54 deletions(-) diff --git a/webapp/public/locales/en/main.json b/webapp/public/locales/en/main.json index df948d3920..98abe54461 100644 --- a/webapp/public/locales/en/main.json +++ b/webapp/public/locales/en/main.json @@ -78,6 +78,7 @@ "global.status": "Status", "global.semicolon": "Semicolon", "global.language": "Language", + "global.path": "Path", "global.time.hourly": "Hourly", "global.time.daily": "Daily", "global.time.weekly": "Weekly", @@ -154,6 +155,9 @@ "form.field.requireUppercase": "Must contain at least one uppercase letter.", "form.field.requireDigit": "Must contain at least one digit.", "form.field.requireSpecialChars": "Must contain at least one special character.", + "form.field.path.startWithSlashNotAllowed": "Path must not start with a '/'", + "form.field.path.endWithSlashNotAllowed": "Path must not end with a '/'", + "form.field.path.invalid": "Invalid path", "matrix.graphSelector": "Columns", "matrix.message.importHint": "Click or drag and drop a matrix here", "matrix.importNewMatrix": "Import a new matrix", @@ -620,7 +624,6 @@ "studies.error.loadStudy": "Failed to load study", "studies.error.runStudy": "Failed to run study", "studies.error.scanFolder": "Failed to start folder scan", - "studies.error.moveStudy": "Failed to move study {{study}}", "studies.error.saveData": "Failed to save data", "studies.error.copyStudy": "Failed to copy study", "studies.error.import": "Failed to import Study ({{uploadFile}})", @@ -631,11 +634,10 @@ "studies.error.createStudy": "Failed to create Study {{studyname}}", "studies.success.saveData": "Data saved with success", "studies.success.scanFolder": "Folder scan started", - "studies.success.moveStudy": "Study {{study}} was successfully moved to {{folder}}", + "studies.success.moveStudy": "Study '{{study}}' was successfully moved to '{{path}}'", "studies.success.createStudy": "Study {{studyname}} created successfully", "studies.studylaunched": "{{studyname}} launched!", "studies.copySuffix": "Copy", - "studies.folder": "Folder", "studies.filters.strictfolder": "Show only direct folder children", "studies.scanFolder": "Scan folder", "studies.moveStudy": "Move", diff --git a/webapp/public/locales/fr/main.json b/webapp/public/locales/fr/main.json index 3dacacb6e0..8e64c877be 100644 --- a/webapp/public/locales/fr/main.json +++ b/webapp/public/locales/fr/main.json @@ -78,6 +78,7 @@ "global.status": "Statut", "global.semicolon": "Point-virgule", "global.language": "Langue", + "global.path": "Chemin", "global.time.hourly": "Horaire", "global.time.daily": "Journalier", "global.time.weekly": "Hebdomadaire", @@ -154,6 +155,9 @@ "form.field.requireUppercase": "Doit contenir au moins une lettre majuscule.", "form.field.requireDigit": "Doit contenir au moins un chiffre.", "form.field.requireSpecialChars": "Doit contenir au moins un caractère spécial.", + "form.field.path.startWithSlashNotAllowed": "Le chemin ne doit pas commencer par un '/'", + "form.field.path.endWithSlashNotAllowed": "Le chemin ne doit pas finir par un '/'", + "form.field.path.invalid": "Chemin invalide", "matrix.graphSelector": "Colonnes", "matrix.message.importHint": "Cliquer ou glisser une matrice ici", "matrix.importNewMatrix": "Import d'une nouvelle matrice", @@ -620,7 +624,6 @@ "studies.error.loadStudy": "Échec du chargement de l'étude", "studies.error.runStudy": "Échec du lancement de l'étude", "studies.error.scanFolder": "Échec du lancement du scan", - "studies.error.moveStudy": "Échec du déplacement de l'étude {{study}}", "studies.error.saveData": "Erreur lors de la sauvegarde des données", "studies.error.copyStudy": "Erreur lors de la copie de l'étude", "studies.error.import": "L'import de l'étude a échoué ({{uploadFile}})", @@ -631,11 +634,10 @@ "studies.error.createStudy": "Erreur lors de la création de l'étude {{studyname}}", "studies.success.saveData": "Donnée sauvegardée avec succès", "studies.success.scanFolder": "L'analyse du dossier a commencé", - "studies.success.moveStudy": "L'étude {{study}} a été déplacée avec succès vers {{folder}}", + "studies.success.moveStudy": "L'étude \"{{study}}\" a été déplacée avec succès vers \"{{path}}\"", "studies.success.createStudy": "L'étude {{studyname}} a été crée avec succès", "studies.studylaunched": "{{studyname}} lancé(s) !", "studies.copySuffix": "Copie", - "studies.folder": "Dossier", "studies.filters.strictfolder": "Afficher uniquement les descendants directs", "studies.scanFolder": "Scanner le dossier", "studies.moveStudy": "Déplacer", diff --git a/webapp/src/components/App/Studies/MoveStudyDialog.tsx b/webapp/src/components/App/Studies/MoveStudyDialog.tsx index e3698438a5..ff9687f8af 100644 --- a/webapp/src/components/App/Studies/MoveStudyDialog.tsx +++ b/webapp/src/components/App/Studies/MoveStudyDialog.tsx @@ -13,17 +13,40 @@ */ import { DialogProps } from "@mui/material"; -import TextField from "@mui/material/TextField"; import { useSnackbar } from "notistack"; -import * as R from "ramda"; import { useTranslation } from "react-i18next"; -import { usePromise } from "react-use"; import { StudyMetadata } from "../../../common/types"; -import useEnqueueErrorSnackbar from "../../../hooks/useEnqueueErrorSnackbar"; import { moveStudy } from "../../../services/api/study"; -import { isStringEmpty } from "../../../services/utils"; import FormDialog from "../../common/dialogs/FormDialog"; import { SubmitHandlerPlus } from "../../common/Form/types"; +import StringFE from "@/components/common/fieldEditors/StringFE"; +import * as R from "ramda"; +import { validatePath } from "@/utils/validation/string"; + +function formalizePath( + path: string | undefined, + studyId?: StudyMetadata["id"], +) { + const trimmedPath = path?.trim(); + + if (!trimmedPath) { + return ""; + } + + const pathArray = trimmedPath.split("/").filter(Boolean); + + if (studyId) { + const lastFolder = R.last(pathArray); + + // The API automatically add the study ID to a not empty path when moving a study. + // So we need to remove it from the display path. + if (lastFolder === studyId) { + return pathArray.slice(0, -1).join("/"); + } + } + + return pathArray.join("/"); +} interface Props extends DialogProps { study: StudyMetadata; @@ -33,36 +56,35 @@ interface Props extends DialogProps { function MoveStudyDialog(props: Props) { const { study, open, onClose } = props; const [t] = useTranslation(); - const mounted = usePromise(); const { enqueueSnackbar } = useSnackbar(); - const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); + const defaultValues = { - folder: R.join("/", R.dropLast(1, R.split("/", study.folder || ""))), + path: formalizePath(study.folder, study.id), }; //////////////////////////////////////////////////////////////// // Event Handlers //////////////////////////////////////////////////////////////// - const handleSubmit = async ( + const handleSubmit = (data: SubmitHandlerPlus) => { + const path = formalizePath(data.values.path); + return moveStudy(study.id, path); + }; + + const handleSubmitSuccessful = ( data: SubmitHandlerPlus, ) => { - const { folder } = data.values; - try { - await mounted(moveStudy(study.id, folder)); - enqueueSnackbar( - t("studies.success.moveStudy", { study: study.name, folder }), - { - variant: "success", - }, - ); - onClose(); - } catch (e) { - enqueueErrorSnackbar( - t("studies.error.moveStudy", { study: study.name }), - e as Error, - ); - } + onClose(); + + enqueueSnackbar( + t("studies.success.moveStudy", { + study: study.name, + path: data.values.path || "/", // Empty path move the study to the root + }), + { + variant: "success", + }, + ); }; //////////////////////////////////////////////////////////////// @@ -74,27 +96,19 @@ function MoveStudyDialog(props: Props) { open={open} config={{ defaultValues }} onSubmit={handleSubmit} + onSubmitSuccessful={handleSubmitSuccessful} onCancel={onClose} > - {(formObj) => ( - ( + { - return !isStringEmpty(value); - }, - })} /> )} diff --git a/webapp/src/services/api/study.ts b/webapp/src/services/api/study.ts index 8750b177f4..53d4a67925 100644 --- a/webapp/src/services/api/study.ts +++ b/webapp/src/services/api/study.ts @@ -13,7 +13,7 @@ */ import { AxiosRequestConfig } from "axios"; -import { isBoolean, trimCharsStart } from "ramda-adjunct"; +import * as RA from "ramda-adjunct"; import client from "./client"; import { FileStudyTreeConfigDTO, @@ -135,7 +135,7 @@ export const editStudy = async ( depth = 1, ): Promise => { let formattedData: unknown = data; - if (isBoolean(data)) { + if (RA.isBoolean(data)) { formattedData = JSON.stringify(data); } const res = await client.post( @@ -163,11 +163,10 @@ export const copyStudy = async ( return res.data; }; -export const moveStudy = async (sid: string, folder: string): Promise => { - const folderWithId = trimCharsStart("/", `${folder.trim()}/${sid}`); - await client.put( - `/v1/studies/${sid}/move?folder_dest=${encodeURIComponent(folderWithId)}`, - ); +export const moveStudy = async (studyId: string, folder: string) => { + await client.put(`/v1/studies/${studyId}/move`, null, { + params: { folder_dest: folder }, + }); }; export const archiveStudy = async (sid: string): Promise => { From 6d454f4aac26d3c4b09230333307d0d81e94802a Mon Sep 17 00:00:00 2001 From: belthlemar Date: Thu, 5 Dec 2024 11:40:04 +0100 Subject: [PATCH 25/86] feat(move): adapt back-end code and add tests --- antarest/study/service.py | 6 ++- .../variantstudy/variant_study_service.py | 2 +- .../studies_blueprint/test_move.py | 51 +++++++++++++++++++ tests/integration/test_integration.py | 3 +- 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 tests/integration/studies_blueprint/test_move.py diff --git a/antarest/study/service.py b/antarest/study/service.py index 7e1198c6b7..71d4bc3881 100644 --- a/antarest/study/service.py +++ b/antarest/study/service.py @@ -1073,11 +1073,15 @@ def copy_task(notifier: ITaskNotifier) -> TaskResult: return task_or_study_id - def move_study(self, study_id: str, new_folder: str, params: RequestParameters) -> None: + def move_study(self, study_id: str, folder_dest: str, params: RequestParameters) -> None: study = self.get_study(study_id) assert_permission(params.user, study, StudyPermissionType.WRITE) if not is_managed(study): raise NotAManagedStudyException(study_id) + if folder_dest: + new_folder = folder_dest.rstrip("/") + f"/{study.id}" + else: + new_folder = None study.folder = new_folder self.repository.save(study, update_modification_date=False) self.event_bus.push( diff --git a/antarest/study/storage/variantstudy/variant_study_service.py b/antarest/study/storage/variantstudy/variant_study_service.py index a57b7f1b2f..37493be684 100644 --- a/antarest/study/storage/variantstudy/variant_study_service.py +++ b/antarest/study/storage/variantstudy/variant_study_service.py @@ -610,7 +610,7 @@ def create_variant_study(self, uuid: str, name: str, params: RequestParameters) created_at=datetime.utcnow(), updated_at=datetime.utcnow(), version=study.version, - folder=(re.sub(f"/?{study.id}", "", study.folder) if study.folder is not None else None), + folder=(re.sub(study.id, new_id, study.folder) if study.folder is not None else None), groups=study.groups, # Create inherit_group boolean owner_id=params.user.impersonator if params.user else None, snapshot=None, diff --git a/tests/integration/studies_blueprint/test_move.py b/tests/integration/studies_blueprint/test_move.py new file mode 100644 index 0000000000..83defc9aad --- /dev/null +++ b/tests/integration/studies_blueprint/test_move.py @@ -0,0 +1,51 @@ +# Copyright (c) 2024, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. + +from starlette.testclient import TestClient + + +class TestMove: + def test_move_endpoint(self, client: TestClient, internal_study_id: str, user_access_token: str) -> None: + client.headers = {"Authorization": f"Bearer {user_access_token}"} + + res = client.post("/v1/studies?name=study_test") + assert res.status_code == 201 + study_id = res.json() + + # asserts move with a given folder adds the /study_id at the end of the path + res = client.put(f"/v1/studies/{study_id}/move", params={"folder_dest": "folder1"}) + res.raise_for_status() + res = client.get(f"/v1/studies/{study_id}") + assert res.json()["folder"] == f"folder1/{study_id}" + + # asserts move to a folder with //// removes the unwanted `/` + res = client.put(f"/v1/studies/{study_id}/move", params={"folder_dest": "folder2///////"}) + res.raise_for_status() + res = client.get(f"/v1/studies/{study_id}") + assert res.json()["folder"] == f"folder2/{study_id}" + + # asserts the created variant has the same parent folder + res = client.post(f"/v1/studies/{study_id}/variants?name=Variant1") + variant_id = res.json() + res = client.get(f"/v1/studies/{variant_id}") + assert res.json()["folder"] == f"folder2/{variant_id}" + + # asserts move doesn't work on un-managed studies + res = client.put(f"/v1/studies/{internal_study_id}/move", params={"folder_dest": "folder1"}) + assert res.status_code == 422 + assert res.json()["exception"] == "NotAManagedStudyException" + + # asserts users can put back a study at the root folder + res = client.put(f"/v1/studies/{study_id}/move", params={"folder_dest": ""}) + res.raise_for_status() + res = client.get(f"/v1/studies/{study_id}") + assert res.json()["folder"] is None diff --git a/tests/integration/test_integration.py b/tests/integration/test_integration.py index 27cb8cf78a..0f691d733f 100644 --- a/tests/integration/test_integration.py +++ b/tests/integration/test_integration.py @@ -207,7 +207,8 @@ def test_main(client: TestClient, admin_access_token: str) -> None: headers={"Authorization": f'Bearer {george_credentials["access_token"]}'}, ) assert len(res.json()) == 3 - assert filter(lambda s: s["id"] == copied.json(), res.json().values()).__next__()["folder"] == "foo/bar" + moved_study = filter(lambda s: s["id"] == copied.json(), res.json().values()).__next__() + assert moved_study["folder"] == f"foo/bar/{moved_study['id']}" # Study delete client.delete( From ad70926f3eefbae3d10a3fd1d39147761433d1da Mon Sep 17 00:00:00 2001 From: mabw-rte <41002227+mabw-rte@users.noreply.github.com> Date: Tue, 17 Dec 2024 13:58:27 +0100 Subject: [PATCH 26/86] feat(raw-api): add an endpoint to retrieve files in their original format (#2244) Co-authored-by: belthlemar --- antarest/core/exceptions.py | 5 + antarest/core/swagger.py | 7 +- antarest/core/utils/archives.py | 25 +- antarest/study/business/matrix_management.py | 5 +- antarest/study/common/studystorage.py | 18 + antarest/study/service.py | 26 +- .../study/storage/abstract_storage_service.py | 27 +- .../rawstudy/model/filesystem/folder_node.py | 8 +- .../rawstudy/model/filesystem/inode.py | 25 +- .../rawstudy/model/filesystem/lazy_node.py | 1 - .../filesystem/matrix/input_series_matrix.py | 67 ++- .../model/filesystem/matrix/matrix.py | 25 +- .../generate_thermal_cluster_timeseries.py | 19 +- .../variantstudy/variant_study_service.py | 24 + antarest/study/web/raw_studies_blueprint.py | 61 +- .../test_fetch_raw_data.py | 522 +++++++++++------- .../filesystem/matrix/test_matrix_node.py | 17 +- 17 files changed, 598 insertions(+), 284 deletions(-) diff --git a/antarest/core/exceptions.py b/antarest/core/exceptions.py index d41d04d9cf..d6c392b9cf 100644 --- a/antarest/core/exceptions.py +++ b/antarest/core/exceptions.py @@ -688,6 +688,11 @@ def __init__(self, message: str) -> None: super().__init__(HTTPStatus.NOT_FOUND, message) +class PathIsAFolderError(HTTPException): + def __init__(self, message: str) -> None: + super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) + + class WorkspaceNotFound(HTTPException): """ This will be raised when we try to load a workspace that does not exist diff --git a/antarest/core/swagger.py b/antarest/core/swagger.py index 3d1b62441a..047f6c4809 100644 --- a/antarest/core/swagger.py +++ b/antarest/core/swagger.py @@ -10,9 +10,10 @@ # # This file is part of the Antares project. -from typing import Any, List, Tuple +import typing as t from fastapi import FastAPI +from fastapi.openapi.models import Example from fastapi.routing import APIRoute sim = "{sim} = simulation index
      " @@ -21,7 +22,7 @@ attachment = "User-defined file attachment
      " # noinspection SpellCheckingInspection -urls: List[Tuple[str, str]] = [ +urls: t.List[t.Tuple[str, str]] = [ ("layers/layers", ""), ("settings/generaldata", ""), ("output/{sim}/about-the-study/parameters", sim), @@ -41,7 +42,7 @@ ] -def get_path_examples() -> Any: +def get_path_examples() -> t.Dict[str, Example]: return {url: {"value": url, "description": des} for url, des in urls} diff --git a/antarest/core/utils/archives.py b/antarest/core/utils/archives.py index 2356653b78..d12082a835 100644 --- a/antarest/core/utils/archives.py +++ b/antarest/core/utils/archives.py @@ -145,7 +145,7 @@ def extract_file_to_tmp_dir(archive_path: Path, inside_archive_path: Path) -> t. return path, tmp_dir -def read_file_from_archive(archive_path: Path, posix_path: str) -> str: +def read_original_file_in_archive(archive_path: Path, posix_path: str) -> bytes: """ Read a file from an archive. @@ -154,21 +154,36 @@ def read_file_from_archive(archive_path: Path, posix_path: str) -> str: posix_path: path to the file inside the archive. Returns: - The content of the file as a string. + The content of the file as `bytes`. """ if archive_path.suffix == ArchiveFormat.ZIP: with zipfile.ZipFile(archive_path) as zip_obj: with zip_obj.open(posix_path) as f: - return f.read().decode("utf-8") + return f.read() elif archive_path.suffix == ArchiveFormat.SEVEN_ZIP: with py7zr.SevenZipFile(archive_path, mode="r") as szf: - file_text: str = szf.read([posix_path])[posix_path].read().decode("utf-8") - return file_text + output: bytes = szf.read([posix_path])[posix_path].read() + return output else: raise ValueError(f"Unsupported {archive_path.suffix} archive format for {archive_path}") +def read_file_from_archive(archive_path: Path, posix_path: str) -> str: + """ + Read a file from an archive. + + Args: + archive_path: the path to the archive file. + posix_path: path to the file inside the archive. + + Returns: + The content of the file as a string. + """ + + return read_original_file_in_archive(archive_path, posix_path).decode("utf-8") + + def extract_lines_from_archive(root: Path, posix_path: str) -> t.List[str]: """ Extract text lines from various types of files. diff --git a/antarest/study/business/matrix_management.py b/antarest/study/business/matrix_management.py index fcdfc07eb8..a80034b603 100644 --- a/antarest/study/business/matrix_management.py +++ b/antarest/study/business/matrix_management.py @@ -252,10 +252,7 @@ def update_matrix( try: logger.info(f"Loading matrix data from node '{path}'...") - matrix_df = cast( - pd.DataFrame, - matrix_node.parse(return_dataframe=True), - ) + matrix_df = matrix_node.parse_as_dataframe() except ValueError as exc: raise MatrixManagerError(f"Cannot parse matrix: {exc}") from exc diff --git a/antarest/study/common/studystorage.py b/antarest/study/common/studystorage.py index 906564da35..cedb352051 100644 --- a/antarest/study/common/studystorage.py +++ b/antarest/study/common/studystorage.py @@ -20,6 +20,7 @@ from antarest.study.model import Study, StudyMetadataDTO, StudyMetadataPatchDTO, StudySimResultDTO from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfigDTO from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.rawstudy.model.filesystem.inode import OriginalFile T = t.TypeVar("T", bound=Study) @@ -56,6 +57,23 @@ def get( """ + @abstractmethod + def get_file( + self, + metadata: T, + url: str = "", + ) -> OriginalFile: + """ + Entry point to fetch for a specific file inside a study folder + + Args: + metadata: study + url: path data inside study to reach the file + + Returns: study file content and extension + + """ + @abstractmethod def exists(self, metadata: T) -> bool: """ diff --git a/antarest/study/service.py b/antarest/study/service.py index 71d4bc3881..3e198addb3 100644 --- a/antarest/study/service.py +++ b/antarest/study/service.py @@ -134,7 +134,7 @@ from antarest.study.storage.matrix_profile import adjust_matrix_columns_index from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfigDTO from antarest.study.storage.rawstudy.model.filesystem.ini_file_node import IniFileNode -from antarest.study.storage.rawstudy.model.filesystem.inode import INode +from antarest.study.storage.rawstudy.model.filesystem.inode import INode, OriginalFile from antarest.study.storage.rawstudy.model.filesystem.matrix.input_series_matrix import InputSeriesMatrix from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency from antarest.study.storage.rawstudy.model.filesystem.matrix.output_series_matrix import OutputSeriesMatrix @@ -451,6 +451,30 @@ def get( return self.storage_service.get_storage(study).get(study, url, depth, formatted) + def get_file( + self, + uuid: str, + url: str, + params: RequestParameters, + ) -> OriginalFile: + """ + retrieve a file from a study folder + + Args: + uuid: study uuid + url: route to follow inside study structure + params: request parameters + + Returns: data study formatted in json + + """ + study = self.get_study(uuid) + assert_permission(params.user, study, StudyPermissionType.READ) + + output = self.storage_service.get_storage(study).get_file(study, url) + + return output + def aggregate_output_data( self, uuid: str, diff --git a/antarest/study/storage/abstract_storage_service.py b/antarest/study/storage/abstract_storage_service.py index ccaa477673..3b4c002597 100644 --- a/antarest/study/storage/abstract_storage_service.py +++ b/antarest/study/storage/abstract_storage_service.py @@ -18,8 +18,6 @@ from pathlib import Path from uuid import uuid4 -import py7zr - from antarest.core.config import Config from antarest.core.exceptions import BadOutputError, StudyOutputNotFoundError from antarest.core.interfaces.cache import CacheConstants, ICache @@ -45,6 +43,7 @@ from antarest.study.storage.rawstudy.model.filesystem.config.files import get_playlist from antarest.study.storage.rawstudy.model.filesystem.config.model import Simulation from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy, StudyFactory +from antarest.study.storage.rawstudy.model.filesystem.inode import OriginalFile from antarest.study.storage.rawstudy.model.helpers import FileStudyHelpers from antarest.study.storage.utils import extract_output_name, fix_study_root, remove_from_cache @@ -171,6 +170,30 @@ def get( del study return data + def get_file( + self, + metadata: T, + url: str = "", + use_cache: bool = True, + ) -> OriginalFile: + """ + Entry point to fetch data inside study. + Args: + metadata: study + url: path data inside study to reach + use_cache: indicate if the cache must be used + + Returns: a file content with its extension and name + + """ + self._check_study_exists(metadata) + study = self.get_raw(metadata, use_cache) + parts = [item for item in url.split("/") if item] + + file_node = study.tree.get_node(parts) + + return file_node.get_file_content() + def get_study_sim_result( self, study: T, diff --git a/antarest/study/storage/rawstudy/model/filesystem/folder_node.py b/antarest/study/storage/rawstudy/model/filesystem/folder_node.py index 58b42a1388..974c2acdfa 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/folder_node.py +++ b/antarest/study/storage/rawstudy/model/filesystem/folder_node.py @@ -14,11 +14,11 @@ import typing as t from abc import ABC, abstractmethod -from antarest.core.exceptions import ChildNotFoundError +from antarest.core.exceptions import ChildNotFoundError, PathIsAFolderError from antarest.core.model import JSON, SUB_JSON from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.context import ContextServer -from antarest.study.storage.rawstudy.model.filesystem.inode import TREE, INode +from antarest.study.storage.rawstudy.model.filesystem.inode import TREE, INode, OriginalFile class FilterError(Exception): @@ -216,3 +216,7 @@ def extract_child(self, children: TREE, url: t.List[str]) -> t.Tuple[t.List[str] if not isinstance(children[name], child_class): raise FilterError("Filter selection has different classes") return names, sub_url + + def get_file_content(self) -> OriginalFile: + relative_path = self.config.path.relative_to(self.config.study_path).as_posix() + raise PathIsAFolderError(f"Node at {relative_path} is a folder node.") diff --git a/antarest/study/storage/rawstudy/model/filesystem/inode.py b/antarest/study/storage/rawstudy/model/filesystem/inode.py index 4b1046162a..d910234f03 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/inode.py +++ b/antarest/study/storage/rawstudy/model/filesystem/inode.py @@ -11,11 +11,12 @@ # This file is part of the Antares project. from abc import ABC, abstractmethod +from dataclasses import dataclass from pathlib import Path from typing import Any, Dict, Generic, List, Optional, Tuple, TypeVar from antarest.core.exceptions import WritingInsideZippedFileException -from antarest.core.utils.archives import extract_file_to_tmp_dir +from antarest.core.utils.archives import extract_file_to_tmp_dir, read_original_file_in_archive from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig G = TypeVar("G") @@ -23,6 +24,13 @@ V = TypeVar("V") +@dataclass +class OriginalFile: + suffix: str + content: bytes + filename: str + + class INode(ABC, Generic[G, S, V]): """ Abstract tree element, have to be implemented to create hub or left. @@ -124,6 +132,21 @@ def denormalize(self) -> None: """ raise NotImplementedError() + def get_file_content(self) -> OriginalFile: + suffix = self.config.path.suffix + filename = self.config.path.name + if self.config.archive_path: + content = read_original_file_in_archive( + self.config.archive_path, + self.get_relative_path_inside_archive(self.config.archive_path), + ) + return OriginalFile(suffix=suffix, filename=filename, content=content) + else: + return OriginalFile(content=self.config.path.read_bytes(), suffix=suffix, filename=filename) + + def get_relative_path_inside_archive(self, archive_path: Path) -> str: + return self.config.path.relative_to(archive_path.parent / self.config.study_id).as_posix() + def _assert_url_end(self, url: Optional[List[str]] = None) -> None: """ Raise error if elements remain in url diff --git a/antarest/study/storage/rawstudy/model/filesystem/lazy_node.py b/antarest/study/storage/rawstudy/model/filesystem/lazy_node.py index 2662cde82b..296f3efc13 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/lazy_node.py +++ b/antarest/study/storage/rawstudy/model/filesystem/lazy_node.py @@ -9,7 +9,6 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. - import typing as t from abc import ABC, abstractmethod from dataclasses import dataclass diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/input_series_matrix.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/input_series_matrix.py index 2efb5a3f05..ec9d04a2a9 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/input_series_matrix.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/input_series_matrix.py @@ -9,11 +9,11 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. - +import io import logging import shutil +import typing as t from pathlib import Path -from typing import Any, List, Optional, Union, cast import numpy as np import pandas as pd @@ -22,10 +22,12 @@ from antarest.core.exceptions import ChildNotFoundError from antarest.core.model import JSON +from antarest.core.utils.archives import read_original_file_in_archive from antarest.core.utils.utils import StopWatch from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.context import ContextServer -from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency, MatrixNode +from antarest.study.storage.rawstudy.model.filesystem.inode import OriginalFile +from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency, MatrixNode, dump_dataframe logger = logging.getLogger(__name__) @@ -40,8 +42,8 @@ def __init__( context: ContextServer, config: FileStudyTreeConfig, freq: MatrixFrequency = MatrixFrequency.HOURLY, - nb_columns: Optional[int] = None, - default_empty: Optional[npt.NDArray[np.float64]] = None, + nb_columns: t.Optional[int] = None, + default_empty: t.Optional[npt.NDArray[np.float64]] = None, ): super().__init__(context=context, config=config, freq=freq) self.nb_columns = nb_columns @@ -52,21 +54,15 @@ def __init__( self.default_empty = np.copy(default_empty) self.default_empty.flags.writeable = True - def parse( - self, - file_path: Optional[Path] = None, - tmp_dir: Any = None, - return_dataframe: bool = False, - ) -> Union[JSON, pd.DataFrame]: + def parse_as_dataframe(self, file_path: t.Optional[Path] = None) -> pd.DataFrame: file_path = file_path or self.config.path try: - # sourcery skip: extract-method stopwatch = StopWatch() link_path = self.get_link_path() if link_path.exists(): link = link_path.read_text() matrix_json = self.context.resolver.resolve(link) - matrix_json = cast(JSON, matrix_json) + matrix_json = t.cast(JSON, matrix_json) matrix: pd.DataFrame = pd.DataFrame(**matrix_json) else: try: @@ -83,29 +79,29 @@ def parse( study_id = self.config.study_id relpath = file_path.relative_to(self.config.study_path).as_posix() raise ChildNotFoundError(f"File '{relpath}' not found in the study '{study_id}'") from e - stopwatch.log_elapsed(lambda x: logger.info(f"Matrix parsed in {x}s")) final_matrix = matrix.dropna(how="any", axis=1) - if return_dataframe: - return final_matrix - - data = cast(JSON, final_matrix.to_dict(orient="split")) - stopwatch.log_elapsed(lambda x: logger.info(f"Matrix to dict in {x}s")) - - return data + return final_matrix except EmptyDataError: logger.warning(f"Empty file found when parsing {file_path}") - matrix = pd.DataFrame() + final_matrix = pd.DataFrame() if self.default_empty is not None: - matrix = pd.DataFrame(self.default_empty) - return matrix if return_dataframe else cast(JSON, matrix.to_dict(orient="split")) + final_matrix = pd.DataFrame(self.default_empty) + return final_matrix + + def parse_as_json(self, file_path: t.Optional[Path] = None) -> JSON: + df = self.parse_as_dataframe(file_path) + stopwatch = StopWatch() + data = t.cast(JSON, df.to_dict(orient="split")) + stopwatch.log_elapsed(lambda x: logger.info(f"Matrix to dict in {x}s")) + return data def check_errors( self, data: JSON, - url: Optional[List[str]] = None, + url: t.Optional[t.List[str]] = None, raising: bool = False, - ) -> List[str]: + ) -> t.List[str]: self._assert_url_end(url) errors = [] @@ -131,3 +127,22 @@ def copy_file(self, target: str) -> None: target_path = self.config.path.parent.joinpath(f"{target}{''.join(self._infer_path().suffixes)}") target_path.unlink(missing_ok=True) shutil.copy(self._infer_path(), target_path) + + def get_file_content(self) -> OriginalFile: + suffix = self.config.path.suffix + filename = self.config.path.name + if self.config.archive_path: + content = read_original_file_in_archive( + self.config.archive_path, self.get_relative_path_inside_archive(self.config.archive_path) + ) + elif self.get_link_path().is_file(): + target_path = self.config.path.with_suffix(".txt") + buffer = io.BytesIO() + df = self.parse_as_dataframe() + dump_dataframe(df, buffer, None) + content = buffer.getvalue() + suffix = target_path.suffix + filename = target_path.name + else: + content = self.config.path.read_bytes() + return OriginalFile(content=content, suffix=suffix, filename=filename) diff --git a/antarest/study/storage/rawstudy/model/filesystem/matrix/matrix.py b/antarest/study/storage/rawstudy/model/filesystem/matrix/matrix.py index 427631427a..6af089a8a5 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/matrix/matrix.py +++ b/antarest/study/storage/rawstudy/model/filesystem/matrix/matrix.py @@ -9,12 +9,12 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. - +import io import logging from abc import ABC, abstractmethod from enum import StrEnum from pathlib import Path -from typing import Any, List, Optional, Union, cast +from typing import List, Optional, Union, cast import pandas as pd @@ -41,12 +41,12 @@ class MatrixFrequency(StrEnum): HOURLY = "hourly" -def dump_dataframe(df: pd.DataFrame, path: Path, float_format: Optional[str] = "%.6f") -> None: - if df.empty: - path.write_bytes(b"") +def dump_dataframe(df: pd.DataFrame, path_or_buf: Path | io.BytesIO, float_format: Optional[str] = "%.6f") -> None: + if df.empty and isinstance(path_or_buf, Path): + path_or_buf.write_bytes(b"") else: df.to_csv( - path, + path_or_buf, sep="\t", header=False, index=False, @@ -87,7 +87,7 @@ def normalize(self) -> None: if self.get_link_path().exists() or self.config.archive_path: return - matrix = self.parse() + matrix = self.parse_as_json() if "data" in matrix: data = cast(List[List[float]], matrix["data"]) @@ -131,17 +131,12 @@ def load( tmp_dir.cleanup() return b"" - return cast(JSON, self.parse(file_path, tmp_dir)) + return self.parse_as_json(file_path) @abstractmethod - def parse( - self, - file_path: Optional[Path] = None, - tmp_dir: Any = None, - return_dataframe: bool = False, - ) -> Union[JSON, pd.DataFrame]: + def parse_as_json(self, file_path: Optional[Path] = None) -> JSON: """ - Parse the matrix content + Parse the matrix content and return it as a JSON object """ raise NotImplementedError() diff --git a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py index ff2935d30e..e6e4bf17a1 100644 --- a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py +++ b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py @@ -25,6 +25,7 @@ from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.config.thermal import LocalTSGenerationBehavior from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.rawstudy.model.filesystem.matrix.input_series_matrix import InputSeriesMatrix from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import dump_dataframe from antarest.study.storage.utils import TS_GEN_PREFIX, TS_GEN_SUFFIX from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput @@ -36,8 +37,6 @@ MODULATION_CAPACITY_COLUMN = 2 -FO_RATE_COLUMN = 2 -PO_RATE_COLUMN = 3 class GenerateThermalClusterTimeSeries(ICommand): @@ -94,15 +93,19 @@ def _build_timeseries( # 7- Build the cluster url = ["input", "thermal", "prepro", area_id, thermal.id.lower(), "modulation"] matrix = study_data.tree.get_node(url) - matrix_df = matrix.parse(return_dataframe=True) # type: ignore + assert isinstance(matrix, InputSeriesMatrix) + matrix_df = matrix.parse_as_dataframe() modulation_capacity = matrix_df[MODULATION_CAPACITY_COLUMN].to_numpy() url = ["input", "thermal", "prepro", area_id, thermal.id.lower(), "data"] matrix = study_data.tree.get_node(url) - matrix_df = matrix.parse(return_dataframe=True) # type: ignore - fo_duration, po_duration, fo_rate, po_rate, npo_min, npo_max = [ - np.array(matrix_df[i], dtype=float if i in [FO_RATE_COLUMN, PO_RATE_COLUMN] else int) - for i in matrix_df.columns - ] + assert isinstance(matrix, InputSeriesMatrix) + matrix_df = matrix.parse_as_dataframe() + fo_duration = np.array(matrix_df[0], dtype=int) + po_duration = np.array(matrix_df[1], dtype=int) + fo_rate = np.array(matrix_df[2], dtype=float) + po_rate = np.array(matrix_df[3], dtype=float) + npo_min = np.array(matrix_df[4], dtype=int) + npo_max = np.array(matrix_df[5], dtype=int) generation_params = OutageGenerationParameters( unit_count=thermal.unit_count, fo_law=ProbabilityLaw(thermal.law_forced.value.upper()), diff --git a/antarest/study/storage/variantstudy/variant_study_service.py b/antarest/study/storage/variantstudy/variant_study_service.py index 37493be684..75154dae95 100644 --- a/antarest/study/storage/variantstudy/variant_study_service.py +++ b/antarest/study/storage/variantstudy/variant_study_service.py @@ -57,6 +57,7 @@ from antarest.study.storage.patch_service import PatchService from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig, FileStudyTreeConfigDTO from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy, StudyFactory +from antarest.study.storage.rawstudy.model.filesystem.inode import OriginalFile from antarest.study.storage.rawstudy.raw_study_service import RawStudyService from antarest.study.storage.utils import assert_permission, export_study_flat, is_managed, remove_from_cache from antarest.study.storage.variantstudy.business.utils import transform_command_to_dto @@ -560,6 +561,29 @@ def get( use_cache=use_cache, ) + def get_file( + self, + metadata: VariantStudy, + url: str = "", + use_cache: bool = True, + ) -> OriginalFile: + """ + Entry point to fetch for a file inside a study folder. + Args: + metadata: study + url: path data inside study to reach + use_cache: indicate if cache should be used to fetch study tree + + Returns: the file content and extension + """ + self._safe_generation(metadata, timeout=600) + self.repository.refresh(metadata) + return super().get_file( + metadata=metadata, + url=url, + use_cache=use_cache, + ) + def create_variant_study(self, uuid: str, name: str, params: RequestParameters) -> VariantStudy: """ Create a new variant study. diff --git a/antarest/study/web/raw_studies_blueprint.py b/antarest/study/web/raw_studies_blueprint.py index fcab2738fd..730402a9ee 100644 --- a/antarest/study/web/raw_studies_blueprint.py +++ b/antarest/study/web/raw_studies_blueprint.py @@ -18,7 +18,7 @@ from pathlib import Path, PurePosixPath from fastapi import APIRouter, Body, Depends, File, HTTPException -from fastapi.params import Param, Query +from fastapi.params import Query from starlette.responses import FileResponse, JSONResponse, PlainTextResponse, Response, StreamingResponse from antarest.core.config import Config @@ -75,9 +75,14 @@ ".txt": ("text/plain", "utf-8"), # (JSON) ".json": ("application/json", "utf-8"), + # (INI FILE) + ".ini": ("text/plain", "utf-8"), + # (antares file) + ".antares": ("text/plain", "utf-8"), } DEFAULT_EXPORT_FORMAT = Query(TableExportFormat.CSV, alias="format", description="Export format", title="Export Format") +PATH_TYPE = t.Annotated[str, Query(openapi_examples=get_path_examples())] def _split_comma_separated_values(value: str, *, default: t.Sequence[str] = ()) -> t.Sequence[str]: @@ -110,9 +115,9 @@ def create_raw_study_routes( tags=[APITag.study_raw_data], summary="Retrieve Raw Data from Study: JSON, Text, or File Attachment", ) - def get_study( + def get_study_data( uuid: str, - path: str = Param("/", examples=get_path_examples()), # type: ignore + path: PATH_TYPE = "/", depth: int = 3, formatted: bool = True, current_user: JWTUser = Depends(auth.get_current_user), @@ -186,6 +191,43 @@ def get_study( json_response = to_json(output) return Response(content=json_response, media_type="application/json") + @bp.get( + "/studies/{uuid}/raw/original-file", + tags=[APITag.study_raw_data], + summary="Retrieve Raw file from a Study folder in its original format", + ) + def get_study_file( + uuid: str, + path: PATH_TYPE = "/", + current_user: JWTUser = Depends(auth.get_current_user), + ) -> t.Any: + """ + Fetches for a file in its original format from a study folder + + Parameters: + - `uuid`: The UUID of the study. + - `path`: The path to the file to fetch. + + Returns the fetched file in its original format. + """ + logger.info( + f"📘 Fetching file at {path} from study {uuid}", + extra={"user": current_user.id}, + ) + parameters = RequestParameters(user=current_user) + original_file = study_service.get_file(uuid, path, params=parameters) + filename = original_file.filename + output = original_file.content + suffix = original_file.suffix + headers = { + "Content-Disposition": f"attachment; filename={filename}", + } + + # Guess the suffix form the filename suffix + content_type, _ = CONTENT_TYPES.get(suffix, (None, None)) + media_type = content_type or "application/octet-stream" + return Response(content=output, media_type=media_type, headers=headers) + @bp.delete( "/studies/{uuid}/raw", tags=[APITag.study_raw_data], @@ -194,7 +236,14 @@ def get_study( ) def delete_file( uuid: str, - path: str = Param("/", examples=["user/wind_solar/synthesis_windSolar.xlsx"]), # type: ignore + path: t.Annotated[ + str, + Query( + openapi_examples={ + "user/wind_solar/synthesis_windSolar.xlsx": {"value": "user/wind_solar/synthesis_windSolar.xlsx"} + }, + ), + ] = "/", current_user: JWTUser = Depends(auth.get_current_user), ) -> t.Any: uuid = sanitize_uuid(uuid) @@ -481,7 +530,7 @@ def aggregate_links_raw_data__all( ) def edit_study( uuid: str, - path: str = Param("/", examples=get_path_examples()), # type: ignore + path: PATH_TYPE = "/", data: SUB_JSON = Body(default=""), current_user: JWTUser = Depends(auth.get_current_user), ) -> None: @@ -510,7 +559,7 @@ def edit_study( ) def replace_study_file( uuid: str, - path: str = Param("/", examples=get_path_examples()), # type: ignore + path: PATH_TYPE = "/", file: bytes = File(default=None), create_missing: bool = Query( False, diff --git a/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py b/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py index 58749c0b09..e30e929a0b 100644 --- a/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py +++ b/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py @@ -62,9 +62,9 @@ class TestFetchRawData: """ @pytest.mark.parametrize("study_type", ["raw", "variant"]) - def test_get_study(self, client: TestClient, user_access_token: str, internal_study_id: str, study_type: str): + def test_get_study_data(self, client: TestClient, user_access_token: str, internal_study_id: str, study_type: str): """ - Test the `get_study` endpoint for fetching raw data from a study. + Test the `get_study_data` endpoint for fetching raw data from a study. This test retrieves raw data from a study identified by a UUID and checks if the returned data matches the expected data. @@ -297,206 +297,340 @@ def test_get_study(self, client: TestClient, user_access_token: str, internal_st res = client.get(raw_url, params={"path": path, "depth": depth}) assert res.status_code == 200, f"Error for path={path} and depth={depth}" + @pytest.mark.parametrize("study_type", ["raw", "variant"]) + def test_delete_raw( + self, client: TestClient, user_access_token: str, internal_study_id: str, study_type: str + ) -> None: + # ============================= + # SET UP + # ============================= + client.headers = {"Authorization": f"Bearer {user_access_token}"} + + if study_type == "variant": + # Copies the study, to convert it into a managed one. + res = client.post( + f"/v1/studies/{internal_study_id}/copy", + headers={"Authorization": f"Bearer {user_access_token}"}, + params={"dest": "default", "with_outputs": False, "use_task": False}, + ) + assert res.status_code == 201 + parent_id = res.json() + res = client.post(f"/v1/studies/{parent_id}/variants", params={"name": "variant 1"}) + internal_study_id = res.json() + + # ============================= + # NOMINAL CASES + # ============================= + + content = io.BytesIO(b"This is the end!") + file_1_path = "user/file_1.txt" + file_2_path = "user/folder/file_2.txt" + file_3_path = "user/folder_2/file_3.txt" + for f in [file_1_path, file_2_path, file_3_path]: + # Creates a file / folder inside user folder. + res = client.put( + f"/v1/studies/{internal_study_id}/raw", + params={"path": f, "create_missing": True}, + files={"file": content}, + ) + assert res.status_code == 204, res.json() + + # Deletes the file / folder + if f == file_2_path: + f = "user/folder" + res = client.delete(f"/v1/studies/{internal_study_id}/raw?path={f}") + assert res.status_code == 200 + # Asserts it doesn't exist anymore + res = client.get(f"/v1/studies/{internal_study_id}/raw?path={f}") + assert res.status_code == 404 + assert "not a child of" in res.json()["description"] + + # checks debug view + res = client.get(f"/v1/studies/{internal_study_id}/raw?path=&depth=-1") + assert res.status_code == 200 + tree = res.json()["user"] + if f == file_3_path: + # asserts the folder that wasn't deleted is still here. + assert list(tree.keys()) == ["expansion", "folder_2"] + assert tree["folder_2"] == {} + else: + # asserts deleted files cannot be seen inside the debug view + assert list(tree.keys()) == ["expansion"] + + # ============================= + # ERRORS + # ============================= + + # try to delete expansion folder + res = client.delete(f"/v1/studies/{internal_study_id}/raw?path=/user/expansion") + expected_msg = "you are not allowed to delete this resource" + _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "ResourceDeletionNotAllowed") + + # try to delete a file which isn't inside the 'User' folder + res = client.delete(f"/v1/studies/{internal_study_id}/raw?path=/input/thermal") + expected_msg = "the given path isn't inside the 'User' folder" + assert res.status_code == 403 + assert res.json()["exception"] == "ResourceDeletionNotAllowed" + assert expected_msg in res.json()["description"] + + # With a path that doesn't exist + res = client.delete(f"/v1/studies/{internal_study_id}/raw?path=user/fake_folder/fake_file.txt") + expected_msg = "the given path doesn't exist" + _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "ResourceDeletionNotAllowed") + + @pytest.mark.parametrize("study_type", ["raw", "variant"]) + def test_create_folder( + self, client: TestClient, user_access_token: str, internal_study_id: str, study_type: str + ) -> None: + client.headers = {"Authorization": f"Bearer {user_access_token}"} + + if study_type == "variant": + # Copies the study, to convert it into a managed one. + res = client.post( + f"/v1/studies/{internal_study_id}/copy", + headers={"Authorization": f"Bearer {user_access_token}"}, + params={"dest": "default", "with_outputs": False, "use_task": False}, + ) + assert res.status_code == 201 + parent_id = res.json() + res = client.post(f"/v1/studies/{parent_id}/variants", params={"name": "variant 1"}) + internal_study_id = res.json() + + raw_url = f"/v1/studies/{internal_study_id}/raw" + + # ============================= + # NOMINAL CASES + # ============================= + additional_params = {"resource_type": "folder", "create_missing": True} + + res = client.put(raw_url, params={"path": "user/folder_1", **additional_params}) + assert res.status_code == 204 + + # same case with different writing should succeed + res = client.put(raw_url, params={"path": "/user/folder_2", **additional_params}) + assert res.status_code == 204 + + # create a folder within a non-existing one + res = client.put(raw_url, params={"path": "/user/folder_x/folder_y", **additional_params}) + assert res.status_code == 204 + + # checks debug view to see that folders were created + res = client.get(f"/v1/studies/{internal_study_id}/raw?path=&depth=-1") + assert res.status_code == 200 + tree = res.json()["user"] + assert list(tree.keys()) == ["expansion", "folder_1", "folder_2", "folder_x"] + assert tree["folder_x"] == {"folder_y": {}} + + # ============================= + # ERRORS + # ============================= + + # we can't create a file without specifying a content + res = client.put(raw_url, params={"path": "fake_path"}) + assert res.status_code == 422 + assert res.json()["description"] == "Argument mismatch: Must give a content to create a file" + + # we can't create a folder and specify a content at the same time + res = client.put(raw_url, params={"path": "", "resource_type": "folder"}, files={"file": b"content"}) + assert res.status_code == 422 + assert res.json()["description"] == "Argument mismatch: Cannot give a content to create a folder" + + # try to create a folder outside `user` folder + wrong_folder = "input/wrong_folder" + expected_msg = f"the given path isn't inside the 'User' folder: {wrong_folder}" + res = client.put(raw_url, params={"path": wrong_folder, **additional_params}) + assert res.status_code == 403 + assert res.json()["exception"] == "FolderCreationNotAllowed" + assert expected_msg in res.json()["description"] + + # try to create a folder inside the 'expansion` folder + expansion_folder = "user/expansion/wrong_folder" + expected_msg = "you are not allowed to create a resource here" + res = client.put(raw_url, params={"path": expansion_folder, **additional_params}) + _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "FolderCreationNotAllowed") + + # try to create an already existing folder + existing_folder = "user/folder_1" + expected_msg = "the given resource already exists" + res = client.put(raw_url, params={"path": existing_folder, **additional_params}) + _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "FolderCreationNotAllowed") + + def test_retrieve_from_archive(self, client: TestClient, user_access_token: str) -> None: + # client headers + client.headers = {"Authorization": f"Bearer {user_access_token}"} + + # create a new study + res = client.post("/v1/studies?name=MyStudy") + assert res.status_code == 201 -@pytest.mark.parametrize("study_type", ["raw", "variant"]) -def test_delete_raw(client: TestClient, user_access_token: str, internal_study_id: str, study_type: str) -> None: - # ============================= - # SET UP - # ============================= - client.headers = {"Authorization": f"Bearer {user_access_token}"} + # get the study id + study_id = res.json() - if study_type == "variant": - # Copies the study, to convert it into a managed one. + # add a new area to the study res = client.post( - f"/v1/studies/{internal_study_id}/copy", - headers={"Authorization": f"Bearer {user_access_token}"}, - params={"dest": "default", "with_outputs": False, "use_task": False}, + f"/v1/studies/{study_id}/areas", + json={ + "name": "area 1", + "type": "AREA", + "metadata": {"country": "FR", "tags": ["a"]}, + }, ) - assert res.status_code == 201 - parent_id = res.json() - res = client.post(f"/v1/studies/{parent_id}/variants", params={"name": "variant 1"}) - internal_study_id = res.json() - - # ============================= - # NOMINAL CASES - # ============================= - - content = io.BytesIO(b"This is the end!") - file_1_path = "user/file_1.txt" - file_2_path = "user/folder/file_2.txt" - file_3_path = "user/folder_2/file_3.txt" - for f in [file_1_path, file_2_path, file_3_path]: - # Creates a file / folder inside user folder. - res = client.put( - f"/v1/studies/{internal_study_id}/raw", params={"path": f, "create_missing": True}, files={"file": content} + assert res.status_code == 200, res.json() + + # archive the study + res = client.put(f"/v1/studies/{study_id}/archive") + assert res.status_code == 200 + task_id = res.json() + wait_for( + lambda: client.get( + f"/v1/tasks/{task_id}", + ).json()["status"] + == 3 ) - assert res.status_code == 204, res.json() - # Deletes the file / folder - if f == file_2_path: - f = "user/folder" - res = client.delete(f"/v1/studies/{internal_study_id}/raw?path={f}") + # retrieve a `Desktop.ini` file from inside the archive + rel_path = "Desktop" + res = client.get( + f"/v1/studies/{study_id}/raw", + params={"path": rel_path, "formatted": True}, + ) assert res.status_code == 200 - # Asserts it doesn't exist anymore - res = client.get(f"/v1/studies/{internal_study_id}/raw?path={f}") - assert res.status_code == 404 - assert "not a child of" in res.json()["description"] - # checks debug view - res = client.get(f"/v1/studies/{internal_study_id}/raw?path=&depth=-1") + # retrieve a `study.antares` file from inside the archive + rel_path = "study" + res = client.get( + f"/v1/studies/{study_id}/raw", + params={"path": rel_path, "formatted": True}, + ) assert res.status_code == 200 - tree = res.json()["user"] - if f == file_3_path: - # asserts the folder that wasn't deleted is still here. - assert list(tree.keys()) == ["expansion", "folder_2"] - assert tree["folder_2"] == {} - else: - # asserts deleted files cannot be seen inside the debug view - assert list(tree.keys()) == ["expansion"] - - # ============================= - # ERRORS - # ============================= - - # try to delete expansion folder - res = client.delete(f"/v1/studies/{internal_study_id}/raw?path=/user/expansion") - expected_msg = "you are not allowed to delete this resource" - _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "ResourceDeletionNotAllowed") - - # try to delete a file which isn't inside the 'User' folder - res = client.delete(f"/v1/studies/{internal_study_id}/raw?path=/input/thermal") - expected_msg = "the given path isn't inside the 'User' folder" - assert res.status_code == 403 - assert res.json()["exception"] == "ResourceDeletionNotAllowed" - assert expected_msg in res.json()["description"] - - # With a path that doesn't exist - res = client.delete(f"/v1/studies/{internal_study_id}/raw?path=user/fake_folder/fake_file.txt") - expected_msg = "the given path doesn't exist" - _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "ResourceDeletionNotAllowed") - - -@pytest.mark.parametrize("study_type", ["raw", "variant"]) -def test_create_folder(client: TestClient, user_access_token: str, internal_study_id: str, study_type: str) -> None: - client.headers = {"Authorization": f"Bearer {user_access_token}"} - - if study_type == "variant": - # Copies the study, to convert it into a managed one. - res = client.post( - f"/v1/studies/{internal_study_id}/copy", - headers={"Authorization": f"Bearer {user_access_token}"}, - params={"dest": "default", "with_outputs": False, "use_task": False}, + + +@pytest.mark.integration_test +class TestFetchOriginalFile: + """ + Check the retrieval of a file from Study folder + """ + + def test_get_study_file( + self, + client: TestClient, + user_access_token: str, + internal_study_id: str, + ): + """ + Test the `get_study_file` endpoint for fetching for a file in its original format. + + This test retrieves a specific file from a study identified by a UUID and checks + + The test performs the following steps: + 1. Copies the user resources in the Study directory. + 2. Uses the API to download a file from the "user/folder" directory. + 3. Compares the fetched data with the expected file from disk. + 4. Check for cases where Errors should be returned. + """ + # First copy the user resources in the Study directory + with db(): + study: RawStudy = db.session.get(Study, internal_study_id) + study_dir = pathlib.Path(study.path) + client.headers = {"Authorization": f"Bearer {user_access_token}"} + original_file_url = f"/v1/studies/{internal_study_id}/raw/original-file" + + shutil.copytree( + ASSETS_DIR.joinpath("user"), + study_dir.joinpath("user"), + dirs_exist_ok=True, ) + + # Then, use the API to download the files from the "user/folder" directory + user_folder_dir = study_dir.joinpath("user/folder") + for file_path in user_folder_dir.glob("*.*"): + rel_path = file_path.relative_to(study_dir).as_posix() + res = client.get(original_file_url, params={"path": rel_path}) + assert res.status_code == 200, res.json() + actual = res.content + expected = file_path.read_bytes() + assert actual == expected + + # retrieves a txt file from the outputs + file_path = "output/20201014-1422eco-hello/simulation" + res = client.get(f"/v1/studies/{internal_study_id}/raw/original-file", params={"path": file_path}) + assert res.status_code == 200 + assert res.headers.get("content-disposition") == "attachment; filename=simulation.log" + actual = res.content + expected = study_dir.joinpath(f"{file_path}.log").read_bytes() + assert actual == expected + + # If the extension is unknown, we should have a "binary" content + user_folder_dir = study_dir.joinpath("user/unknown") + for file_path in user_folder_dir.glob("*.*"): + rel_path = file_path.relative_to(study_dir) + res = client.get(original_file_url, params={"path": f"/{rel_path.as_posix()}"}) + assert res.status_code == 200, res.json() + + actual = res.content + expected = file_path.read_bytes() + assert actual == expected + + # If you try to retrieve a file that doesn't exist, we should have a 404 error + res = client.get(original_file_url, params={"path": "user/somewhere/something.txt"}) + assert res.status_code == 404, res.json() + assert res.json() == { + "description": "'somewhere' not a child of User", + "exception": "ChildNotFoundError", + } + + # If you try to retrieve a folder, we should get an Error 422 + res = client.get(original_file_url, params={"path": "user/folder"}) + assert res.status_code == 422, res.json() + assert res.json()["description"] == "Node at user/folder is a folder node." + assert res.json()["exception"] == "PathIsAFolderError" + + @pytest.mark.parametrize("archive", [True, False]) + def test_retrieve_original_files(self, client: TestClient, user_access_token: str, archive: bool) -> None: + # client headers + client.headers = {"Authorization": f"Bearer {user_access_token}"} + + # create a new study + res = client.post("/v1/studies", params={"name": "MyStudy", "version": "880"}) assert res.status_code == 201 - parent_id = res.json() - res = client.post(f"/v1/studies/{parent_id}/variants", params={"name": "variant 1"}) - internal_study_id = res.json() - - raw_url = f"/v1/studies/{internal_study_id}/raw" - - # ============================= - # NOMINAL CASES - # ============================= - additional_params = {"resource_type": "folder", "create_missing": True} - - res = client.put(raw_url, params={"path": "user/folder_1", **additional_params}) - assert res.status_code == 204 - - # same case with different writing should succeed - res = client.put(raw_url, params={"path": "/user/folder_2", **additional_params}) - assert res.status_code == 204 - - # create a folder within a non-existing one - res = client.put(raw_url, params={"path": "/user/folder_x/folder_y", **additional_params}) - assert res.status_code == 204 - - # checks debug view to see that folders were created - res = client.get(f"/v1/studies/{internal_study_id}/raw?path=&depth=-1") - assert res.status_code == 200 - tree = res.json()["user"] - assert list(tree.keys()) == ["expansion", "folder_1", "folder_2", "folder_x"] - assert tree["folder_x"] == {"folder_y": {}} - - # ============================= - # ERRORS - # ============================= - - # we can't create a file without specifying a content - res = client.put(raw_url, params={"path": "fake_path"}) - assert res.status_code == 422 - assert res.json()["description"] == "Argument mismatch: Must give a content to create a file" - - # we can't create a folder and specify a content at the same time - res = client.put(raw_url, params={"path": "", "resource_type": "folder"}, files={"file": b"content"}) - assert res.status_code == 422 - assert res.json()["description"] == "Argument mismatch: Cannot give a content to create a folder" - - # try to create a folder outside `user` folder - wrong_folder = "input/wrong_folder" - expected_msg = f"the given path isn't inside the 'User' folder: {wrong_folder}" - res = client.put(raw_url, params={"path": wrong_folder, **additional_params}) - assert res.status_code == 403 - assert res.json()["exception"] == "FolderCreationNotAllowed" - assert expected_msg in res.json()["description"] - - # try to create a folder inside the 'expansion` folder - expansion_folder = "user/expansion/wrong_folder" - expected_msg = "you are not allowed to create a resource here" - res = client.put(raw_url, params={"path": expansion_folder, **additional_params}) - _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "FolderCreationNotAllowed") - - # try to create an already existing folder - existing_folder = "user/folder_1" - expected_msg = "the given resource already exists" - res = client.put(raw_url, params={"path": existing_folder, **additional_params}) - _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "FolderCreationNotAllowed") - - -def test_retrieve_from_archive(client: TestClient, user_access_token: str) -> None: - # client headers - client.headers = {"Authorization": f"Bearer {user_access_token}"} - - # create a new study - res = client.post("/v1/studies?name=MyStudy") - assert res.status_code == 201 - - # get the study id - study_id = res.json() - - # add a new area to the study - res = client.post( - f"/v1/studies/{study_id}/areas", - json={ - "name": "area 1", - "type": "AREA", - "metadata": {"country": "FR", "tags": ["a"]}, - }, - ) - assert res.status_code == 200, res.json() - - # archive the study - res = client.put(f"/v1/studies/{study_id}/archive") - assert res.status_code == 200 - task_id = res.json() - wait_for( - lambda: client.get( - f"/v1/tasks/{task_id}", - ).json()["status"] - == 3 - ) - - # retrieve a `Desktop.ini` file from inside the archive - rel_path = "Desktop" - res = client.get( - f"/v1/studies/{study_id}/raw", - params={"path": rel_path, "formatted": True}, - ) - assert res.status_code == 200 - - # retrieve a `study.antares` file from inside the archive - rel_path = "study" - res = client.get( - f"/v1/studies/{study_id}/raw", - params={"path": rel_path, "formatted": True}, - ) - assert res.status_code == 200 + study_id = res.json() + + # add a new area to the study + res = client.post( + f"/v1/studies/{study_id}/areas", + json={ + "name": "area 1", + "type": "AREA", + "metadata": {"country": "FR", "tags": ["a"]}, + }, + ) + assert res.status_code == 200, res.json() + + if archive: + # archive the study + res = client.put(f"/v1/studies/{study_id}/archive") + assert res.status_code == 200 + task_id = res.json() + wait_for(lambda: client.get(f"/v1/tasks/{task_id}").json()["status"] == 3) + + # retrieves an `ini` file + res = client.get( + f"/v1/studies/{study_id}/raw/original-file", params={"path": "input/areas/area 1/adequacy_patch"} + ) + assert res.status_code == 200 + assert res.headers.get("content-disposition") == "attachment; filename=adequacy_patch.ini" + assert res.content.strip().decode("utf-8").splitlines() == ["[adequacy-patch]", "adequacy-patch-mode = outside"] + + # retrieves the `study.antares` + res = client.get(f"/v1/studies/{study_id}/raw/original-file", params={"path": "study"}) + assert res.status_code == 200 + assert res.headers.get("content-disposition") == "attachment; filename=study.antares" + assert res.content.strip().decode().splitlines()[:3] == ["[antares]", "version = 880", "caption = MyStudy"] + + # retrieves a matrix (a link towards the matrix store if the study is unarchived, else the real matrix) + res = client.get(f"/v1/studies/{study_id}/raw/original-file", params={"path": "input/load/series/load_area 1"}) + assert res.status_code == 200 + assert res.headers.get("content-disposition") == "attachment; filename=load_area 1.txt" + expected_content = np.zeros((8760, 1)) + actual_content = pd.read_csv(io.BytesIO(res.content), header=None) + assert actual_content.to_numpy().tolist() == expected_content.tolist() diff --git a/tests/storage/repository/filesystem/matrix/test_matrix_node.py b/tests/storage/repository/filesystem/matrix/test_matrix_node.py index decac6e2e0..38dce45486 100644 --- a/tests/storage/repository/filesystem/matrix/test_matrix_node.py +++ b/tests/storage/repository/filesystem/matrix/test_matrix_node.py @@ -11,7 +11,6 @@ # This file is part of the Antares project. from pathlib import Path -from tempfile import TemporaryDirectory from typing import List, Optional from unittest.mock import Mock @@ -39,23 +38,9 @@ def __init__(self, context: ContextServer, config: FileStudyTreeConfig) -> None: freq=MatrixFrequency.ANNUAL, ) - def parse( - self, - file_path: Optional[Path] = None, - tmp_dir: Optional[TemporaryDirectory] = None, - return_dataframe: bool = False, - ) -> JSON: + def parse_as_json(self, file_path: Optional[Path] = None) -> JSON: return MOCK_MATRIX_JSON - # def dump( - # self, data: Union[bytes, JSON], url: Optional[List[str]] = None - # ) -> None: - # """Dump the matrix data in JSON format to simplify the tests""" - # self.config.path.parent.mkdir(exist_ok=True, parents=True) - # self.config.path.write_text( - # json.dumps(data, indent=2), encoding="utf-8" - # ) - def check_errors(self, data: str, url: Optional[List[str]] = None, raising: bool = False) -> List[str]: pass # not used From bb7223451103cdb8b9862474362cafea3d851846 Mon Sep 17 00:00:00 2001 From: Hatim Dinia <33469289+hdinia@users.noreply.github.com> Date: Tue, 17 Dec 2024 15:26:18 +0100 Subject: [PATCH 27/86] feat(ui-links): set first link as default when component mounts (#2268) --- webapp/public/locales/en/main.json | 6 +- webapp/public/locales/fr/main.json | 6 +- .../BindingConstView/index.tsx | 19 ++---- .../Modelization/BindingConstraints/index.tsx | 24 +++---- .../Modelization/Links/LinkView/LinkForm.tsx | 2 +- .../explore/Modelization/Links/index.tsx | 48 ++++++++++---- .../explore/Modelization/index.tsx | 2 +- .../explore/TableModeList/index.tsx | 13 +++- .../Xpansion/Candidates/CandidateForm.tsx | 5 +- .../explore/Xpansion/Candidates/index.tsx | 62 ++++++++++++------- .../explore/Xpansion/Settings/index.tsx | 32 +++++----- .../src/components/common/PropertiesView.tsx | 2 +- .../components/common/page/ViewWrapper.tsx | 1 + 13 files changed, 134 insertions(+), 88 deletions(-) diff --git a/webapp/public/locales/en/main.json b/webapp/public/locales/en/main.json index 98abe54461..250a75f2e6 100644 --- a/webapp/public/locales/en/main.json +++ b/webapp/public/locales/en/main.json @@ -253,7 +253,8 @@ "study.links": "Links", "study.diskUsage": "Disk usage", "study.district": "District", - "study.bindingconstraints": "Binding Constraints", + "study.bindingConstraints": "Binding Constraints", + "study.bindingConstraints.empty": "No Binding Constraints", "study.debug": "Debug", "study.debug.file.unsupported": "Unsupported file type", "study.debug.file.deleteConfirm.title": "Delete File?", @@ -295,6 +296,7 @@ "study.outputFilters": "Output print status", "study.outputFilters.filterByYear": "Output year by year", "study.outputFilters.filterSynthesis": "Synthesis outputs", + "study.modelization.links.empty": "No links available", "study.modelization.links.hurdleCost": "Hurdle costs", "study.modelization.links.loopFlows": "Loop flows", "study.modelization.links.pst": "PST", @@ -566,6 +568,7 @@ "study.modelization.bindingConst.offset": "Offset", "study.modelization.bindingConst.question.deleteConstraintTerm": "Are you sure you want to delete this constraint term?", "study.modelization.bindingConst.question.deleteBindingConstraint": "Are you sure you want to delete this binding constraint?", + "study.tableMode.empty": "No table available", "study.tableMode": "Table Mode", "study.tableMode.dialog.add.title": "Add table", "study.tableMode.dialog.edit.title": "Edit table", @@ -703,6 +706,7 @@ "variants.commands.exportMatrices": "Export matrices", "variants.commands.question.deleteAll": "Are you sure you want to delete all commands?", "variants.commands.question.delete": "Are you sure you want to delete this command?", + "xpansion.candidates.empty": "No Xpansion candidates", "xpansion.timeSeries": "Time-Series", "xpansion.link": "Link", "xpansion.annualCost": "Annual cost per MW", diff --git a/webapp/public/locales/fr/main.json b/webapp/public/locales/fr/main.json index 8e64c877be..98d6ee71b9 100644 --- a/webapp/public/locales/fr/main.json +++ b/webapp/public/locales/fr/main.json @@ -253,7 +253,8 @@ "study.links": "Liens", "study.diskUsage": "Espace disque", "study.district": "District", - "study.bindingconstraints": "Contraintes Couplantes", + "study.bindingConstraints": "Contraintes Couplantes", + "study.bindingConstraints.empty": "Aucune Contraintes Couplantes", "study.debug": "Debug", "study.debug.folder.empty": "Le dossier est vide", "study.debug.file.unsupported": "Type de fichier non supporté", @@ -295,6 +296,7 @@ "study.outputFilters": "Affichage des sorties", "study.outputFilters.filterByYear": "Sorties année par année", "study.outputFilters.filterSynthesis": "Sorties de la synthèse", + "study.modelization.links.empty": "Aucun lien disponible", "study.modelization.links.hurdleCost": "Hurdle costs", "study.modelization.links.loopFlows": "Loop flows", "study.modelization.links.pst": "PST", @@ -566,6 +568,7 @@ "study.modelization.bindingConst.offset": "Décalage", "study.modelization.bindingConst.question.deleteConstraintTerm": "Êtes-vous sûr de vouloir supprimer ce terme ?", "study.modelization.bindingConst.question.deleteBindingConstraint": "Êtes-vous sûr de vouloir supprimer cette contrainte couplante ?", + "study.tableMode.empty": "Aucun tableau disponible", "study.tableMode": "Table Mode", "study.tableMode.dialog.add.title": "Ajouter une table", "study.tableMode.dialog.edit.title": "Modifier une table", @@ -703,6 +706,7 @@ "variants.commands.exportMatrices": "Exporter les matrices", "variants.commands.question.deleteAll": "Êtes-vous sûr de vouloir supprimer toutes les commandes ?", "variants.commands.question.delete": "Êtes-vous sûr de vouloir supprimer cette commande ?", + "xpansion.candidates.empty": "Aucun candidats Xpansion", "xpansion.timeSeries": "Séries temporelles", "xpansion.link": "Lien", "xpansion.annualCost": "Coût annuel par mw", diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/index.tsx index 5b33ac97d8..6360007bef 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/index.tsx @@ -13,7 +13,7 @@ */ import { BindingConstraint } from "./utils"; -import { Box, Button, Paper, Skeleton } from "@mui/material"; +import { Box, Button, Skeleton } from "@mui/material"; import Form from "../../../../../../common/Form"; import UsePromiseCond, { mergeResponses, @@ -120,20 +120,11 @@ function BindingConstView({ constraintId }: Props) { //////////////////////////////////////////////////////////////// return ( - + <> ( - <> +
      + + + } /> )} @@ -173,7 +185,7 @@ function TableModeList() { diff --git a/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx b/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx index 69b9254d61..5e799e1928 100644 --- a/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx +++ b/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx @@ -17,14 +17,11 @@ import { ListItemButton, ListItemIcon, ListItemText, - Menu, - PopoverPosition, SxProps, Theme, Tooltip, } from "@mui/material"; import ArrowRightOutlinedIcon from "@mui/icons-material/ArrowRightOutlined"; -import { useState } from "react"; import { IdType } from "../../../../../common/types"; import { mergeSxProp } from "../../../../../utils/muiUtils"; @@ -33,10 +30,6 @@ interface Props { currentElement?: string; currentElementKeyToTest?: keyof T; setSelectedItem: (item: T, index: number) => void; - contextMenuContent?: (props: { - element: T; - close: VoidFunction; - }) => React.ReactElement; sx?: SxProps; } @@ -45,43 +38,8 @@ function ListElement({ currentElement, currentElementKeyToTest, setSelectedItem, - contextMenuContent: ContextMenuContent, sx, }: Props) { - const [contextMenuPosition, setContextMenuPosition] = - useState(null); - const [elementForContext, setElementForContext] = useState(); - - //////////////////////////////////////////////////////////////// - // Event Handlers - //////////////////////////////////////////////////////////////// - - const handleContextMenu = (element: T) => (event: React.MouseEvent) => { - event.preventDefault(); - - if (!ContextMenuContent) { - return; - } - - setElementForContext(element); - - setContextMenuPosition( - contextMenuPosition === null - ? { - left: event.clientX + 2, - top: event.clientY - 6, - } - : // Repeated context menu when it is already open closes it with Chrome 84 on Ubuntu - // Other native context menus might behave different. - // With this behavior we prevent contextmenu from the backdrop to re-locale existing context menus. - null, - ); - }; - - //////////////////////////////////////////////////////////////// - // JSX - //////////////////////////////////////////////////////////////// - return ( ({ justifyContent: "space-between", py: 0, }} - onContextMenu={handleContextMenu(element)} > ({ > - {ContextMenuContent && elementForContext && ( -

      setContextMenuPosition(null)} - anchorReference="anchorPosition" - anchorPosition={ - contextMenuPosition !== null ? contextMenuPosition : undefined - } - > - setContextMenuPosition(null)} - /> - - )} ))} diff --git a/webapp/src/components/common/Form/types.ts b/webapp/src/components/common/Form/types.ts index d7f27f94fb..a09272e8f1 100644 --- a/webapp/src/components/common/Form/types.ts +++ b/webapp/src/components/common/Form/types.ts @@ -26,7 +26,6 @@ import { } from "react-hook-form"; export interface SubmitHandlerPlus< - // TODO Make parameter required TFieldValues extends FieldValues = FieldValues, > { values: TFieldValues; diff --git a/webapp/src/components/common/TableMode.tsx b/webapp/src/components/common/TableMode.tsx index 1809a93377..1f5bdf2d8f 100644 --- a/webapp/src/components/common/TableMode.tsx +++ b/webapp/src/components/common/TableMode.tsx @@ -25,47 +25,64 @@ import { TableModeType, } from "../../services/api/studies/tableMode/types"; import { SubmitHandlerPlus } from "./Form/types"; -import TableForm from "./TableForm"; import UsePromiseCond from "./utils/UsePromiseCond"; import GridOffIcon from "@mui/icons-material/GridOff"; import EmptyView from "./page/EmptyView"; import { useTranslation } from "react-i18next"; +import DataGridForm, { type DataGridFormProps } from "./DataGridForm"; +import { startCase } from "lodash"; +import type { GridColumn } from "@glideapps/glide-data-grid"; export interface TableModeProps { studyId: StudyMetadata["id"]; type: T; columns: TableModeColumnsForType; + extraActions?: React.ReactNode; } -function TableMode(props: TableModeProps) { - const { studyId, type, columns } = props; - const [filteredColumns, setFilteredColumns] = useState(columns); +function TableMode({ + studyId, + type, + columns, + extraActions, +}: TableModeProps) { const { t } = useTranslation(); + const [gridColumns, setGridColumns] = useState< + DataGridFormProps["columns"] + >([]); + const columnsDep = columns.join(","); const res = usePromise( () => getTableMode({ studyId, tableType: type, columns }), - [studyId, type, columns.join(",")], + [studyId, type, columnsDep], ); // Filter columns based on the data received, because the API may return // fewer columns than requested depending on the study version - useEffect( - () => { - const dataKeys = Object.keys(res.data || {}); + useEffect(() => { + const data = res.data || {}; + const rowNames = Object.keys(data); - if (dataKeys.length === 0) { - setFilteredColumns([]); - return; - } + if (rowNames.length === 0) { + setGridColumns([]); + return; + } - const data = res.data!; - const dataRowKeys = Object.keys(data[dataKeys[0]]); + const columnNames = Object.keys(data[rowNames[0]]); - setFilteredColumns(columns.filter((col) => dataRowKeys.includes(col))); - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [res.data, columns.join(",")], - ); + setGridColumns( + columns + .filter((col) => columnNames.includes(col)) + .map((col) => { + const title = startCase(col); + return { + title, + id: col, + width: title.length * 10, + } satisfies GridColumn; + }), + ); + }, [res.data, columnsDep]); //////////////////////////////////////////////////////////////// // Event Handlers @@ -83,15 +100,19 @@ function TableMode(props: TableModeProps) { - filteredColumns.length > 0 ? ( - 0 ? ( + ) : ( - + ) } /> From 3f957770b1f29bf5ddcebd0818aa469ed965c02f Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Mon, 13 Jan 2025 13:50:27 +0100 Subject: [PATCH 58/86] feat(ui-playlist): replace Handsontable --- webapp/public/locales/en/main.json | 7 +- webapp/public/locales/fr/main.json | 9 +- .../dialogs/ScenarioPlaylistDialog.tsx | 192 ++++++++++++++++++ .../dialogs/ScenarioPlaylistDialog/index.tsx | 156 -------------- .../dialogs/ScenarioPlaylistDialog/utils.ts | 43 ---- .../TimeSeriesManagement/index.tsx | 2 +- webapp/src/components/common/DataGridForm.tsx | 131 +++++++----- webapp/src/components/common/Form/index.tsx | 2 +- webapp/src/hooks/useConfirm.ts | 30 ++- .../api/studies/config/playlist/constants.ts | 15 ++ .../api/studies/config/playlist/index.ts | 36 ++++ .../api/studies/config/playlist/types.ts | 28 +++ 12 files changed, 390 insertions(+), 261 deletions(-) create mode 100644 webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog.tsx delete mode 100644 webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/index.tsx delete mode 100644 webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/utils.ts create mode 100644 webapp/src/services/api/studies/config/playlist/constants.ts create mode 100644 webapp/src/services/api/studies/config/playlist/index.ts create mode 100644 webapp/src/services/api/studies/config/playlist/types.ts diff --git a/webapp/public/locales/en/main.json b/webapp/public/locales/en/main.json index 0368e65fcc..2873e51239 100644 --- a/webapp/public/locales/en/main.json +++ b/webapp/public/locales/en/main.json @@ -80,6 +80,7 @@ "global.semicolon": "Semicolon", "global.language": "Language", "global.path": "Path", + "global.weight": "Weight", "global.time.hourly": "Hourly", "global.time.daily": "Daily", "global.time.weekly": "Weekly", @@ -136,8 +137,8 @@ "maintenance.error.messageInfoError": "Unable to retrieve message info", "maintenance.error.maintenanceError": "Unable to retrieve maintenance status", "form.submit.error": "Error while submitting", - "form.submit.inProgress": "The form is being submitted. Are you sure you want to leave the page?", - "form.changeNotSaved": "The form has not been saved. Are you sure you want to leave the page?", + "form.submit.inProgress": "The form is being submitted. Are you sure you want to close it?", + "form.changeNotSaved": "The form has not been saved. Are you sure you want to close it?", "form.asyncDefaultValues.error": "Failed to get values", "form.field.required": "Field required", "form.field.duplicate": "Value already exists", @@ -361,8 +362,6 @@ "study.configuration.general.mcScenarioPlaylist.action.disableAll": "Disable all", "study.configuration.general.mcScenarioPlaylist.action.reverse": "Reverse", "study.configuration.general.mcScenarioPlaylist.action.resetWeights": "Reset weights", - "study.configuration.general.mcScenarioPlaylist.status": "Status", - "study.configuration.general.mcScenarioPlaylist.weight": "Weight", "study.configuration.general.geographicTrimming": "Geographic trimming", "study.configuration.general.thematicTrimming": "Thematic trimming", "study.configuration.general.thematicTrimming.action.enableAll": "Enable all", diff --git a/webapp/public/locales/fr/main.json b/webapp/public/locales/fr/main.json index ad6ba562bf..0cf1689f75 100644 --- a/webapp/public/locales/fr/main.json +++ b/webapp/public/locales/fr/main.json @@ -80,6 +80,7 @@ "global.semicolon": "Point-virgule", "global.language": "Langue", "global.path": "Chemin", + "global.weight": "Poids", "global.time.hourly": "Horaire", "global.time.daily": "Journalier", "global.time.weekly": "Hebdomadaire", @@ -136,8 +137,8 @@ "maintenance.error.messageInfoError": "Impossible de récupérer le message d'info", "maintenance.error.maintenanceError": "Impossible de récupérer le status de maintenance de l'application", "form.submit.error": "Erreur lors de la soumission", - "form.submit.inProgress": "Le formulaire est en cours de soumission. Etes-vous sûr de vouloir quitter la page ?", - "form.changeNotSaved": "Le formulaire n'a pas été sauvegardé. Etes-vous sûr de vouloir quitter la page ?", + "form.submit.inProgress": "Le formulaire est en cours de soumission. Etes-vous sûr de vouloir le fermer ?", + "form.changeNotSaved": "Le formulaire n'a pas été sauvegardé. Etes-vous sûr de vouloir le fermer ?", "form.asyncDefaultValues.error": "Impossible d'obtenir les valeurs", "form.field.required": "Champ requis", "form.field.duplicate": "Cette valeur existe déjà", @@ -360,9 +361,7 @@ "study.configuration.general.mcScenarioPlaylist.action.enableAll": "Activer tous", "study.configuration.general.mcScenarioPlaylist.action.disableAll": "Désactiver tous", "study.configuration.general.mcScenarioPlaylist.action.reverse": "Inverser", - "study.configuration.general.mcScenarioPlaylist.action.resetWeights": "Reset weights", - "study.configuration.general.mcScenarioPlaylist.status": "Status", - "study.configuration.general.mcScenarioPlaylist.weight": "Weight", + "study.configuration.general.mcScenarioPlaylist.action.resetWeights": "Réinitialiser les poids", "study.configuration.general.geographicTrimming": "Geographic trimming", "study.configuration.general.thematicTrimming": "Thematic trimming", "study.configuration.general.thematicTrimming.action.enableAll": "Activer tout", diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog.tsx new file mode 100644 index 0000000000..b0a237eb0a --- /dev/null +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog.tsx @@ -0,0 +1,192 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import { Button, ButtonGroup, Divider } from "@mui/material"; +import { useMemo, useRef, useState } from "react"; +import { useTranslation } from "react-i18next"; +import * as R from "ramda"; +import * as RA from "ramda-adjunct"; +import type { StudyMetadata } from "../../../../../../../common/types"; +import usePromise from "../../../../../../../hooks/usePromise"; +import BasicDialog from "../../../../../../common/dialogs/BasicDialog"; +import UsePromiseCond from "../../../../../../common/utils/UsePromiseCond"; +import type { SubmitHandlerPlus } from "../../../../../../common/Form/types"; +import DataGridForm, { + DataGridFormState, + type DataGridFormApi, +} from "@/components/common/DataGridForm"; +import ConfirmationDialog from "@/components/common/dialogs/ConfirmationDialog"; +import useConfirm from "@/hooks/useConfirm"; +import type { PlaylistData } from "@/services/api/studies/config/playlist/types"; +import { + getPlaylistData, + setPlaylistData, +} from "@/services/api/studies/config/playlist"; +import { DEFAULT_WEIGHT } from "@/services/api/studies/config/playlist/constants"; + +interface Props { + study: StudyMetadata; + open: boolean; + onClose: VoidFunction; +} + +function ScenarioPlaylistDialog(props: Props) { + const { study, open, onClose } = props; + const { t } = useTranslation(); + const dataGridApiRef = useRef>(null); + const [isSubmitting, setIsSubmitting] = useState(false); + const [isDirty, setIsDirty] = useState(false); + const closeAction = useConfirm(); + const res = usePromise( + () => getPlaylistData({ studyId: study.id }), + [study.id], + ); + + const columns = useMemo(() => { + return [ + { + id: "status" as const, + title: t("global.status"), + grow: 1, + }, + { + id: "weight" as const, + title: t("global.weight"), + grow: 1, + }, + ]; + }, [t]); + + //////////////////////////////////////////////////////////////// + // Event Handlers + //////////////////////////////////////////////////////////////// + + const handleUpdateStatus = (fn: RA.Pred) => () => { + if (dataGridApiRef.current) { + const { data, setData } = dataGridApiRef.current; + setData(R.map(R.evolve({ status: fn }), data)); + } + }; + + const handleResetWeights = () => { + if (dataGridApiRef.current) { + const { data, setData } = dataGridApiRef.current; + setData(R.map(R.assoc("weight", DEFAULT_WEIGHT), data)); + } + }; + + const handleSubmit = (data: SubmitHandlerPlus) => { + return setPlaylistData({ studyId: study.id, data: data.values }); + }; + + const handleClose = () => { + if (isSubmitting) { + return; + } + + if (isDirty) { + return closeAction.showConfirm().then((confirm) => { + if (confirm) { + onClose(); + } + }); + } + + onClose(); + }; + + const handleFormStateChange = (formState: DataGridFormState) => { + setIsSubmitting(formState.isSubmitting); + setIsDirty(formState.isDirty); + }; + + //////////////////////////////////////////////////////////////// + // JSX + //////////////////////////////////////////////////////////////// + + return ( + + {t("global.close")} + + } + PaperProps={{ sx: { height: 700 } }} + maxWidth="md" + fullWidth + > + ( + <> + + + + + + + + + `MC Year ${index + 1}`, + }} + onSubmit={handleSubmit} + onStateChange={handleFormStateChange} + apiRef={dataGridApiRef} + enableColumnResize={false} + /> + + {t("form.changeNotSaved")} + + + )} + /> + + ); +} + +export default ScenarioPlaylistDialog; diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/index.tsx deleted file mode 100644 index abb04d0a88..0000000000 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/index.tsx +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Copyright (c) 2024, RTE (https://www.rte-france.com) - * - * See AUTHORS.txt - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * SPDX-License-Identifier: MPL-2.0 - * - * This file is part of the Antares project. - */ - -import { Box, Button, Divider } from "@mui/material"; -import { useRef } from "react"; -import { useTranslation } from "react-i18next"; -import * as R from "ramda"; -import * as RA from "ramda-adjunct"; -import Handsontable from "handsontable"; -import { StudyMetadata } from "../../../../../../../../common/types"; -import usePromise from "../../../../../../../../hooks/usePromise"; -import BasicDialog from "../../../../../../../common/dialogs/BasicDialog"; -import TableForm from "../../../../../../../common/TableForm"; -import UsePromiseCond from "../../../../../../../common/utils/UsePromiseCond"; -import { - DEFAULT_WEIGHT, - getPlaylist, - PlaylistData, - setPlaylist, -} from "./utils"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; -import { - HandsontableProps, - HotTableClass, -} from "../../../../../../../common/Handsontable"; - -interface Props { - study: StudyMetadata; - open: boolean; - onClose: VoidFunction; -} - -function ScenarioPlaylistDialog(props: Props) { - const { study, open, onClose } = props; - const { t } = useTranslation(); - const tableRef = useRef({} as HotTableClass); - const res = usePromise(() => getPlaylist(study.id), [study.id]); - - //////////////////////////////////////////////////////////////// - // Event Handlers - //////////////////////////////////////////////////////////////// - - const handleUpdateStatus = (fn: RA.Pred) => () => { - const api = tableRef.current.hotInstance; - if (!api) { - return; - } - - const changes: Array<[number, string, boolean]> = api - .getDataAtProp("status") - .map((status, index) => [index, "status", fn(status)]); - - api.setDataAtRowProp(changes); - }; - - const handleResetWeights = () => { - const api = tableRef.current.hotInstance as Handsontable; - - api.setDataAtRowProp( - api.rowIndexMapper - .getIndexesSequence() - .map((rowIndex) => [rowIndex, "weight", DEFAULT_WEIGHT]), - ); - }; - - const handleSubmit = (data: SubmitHandlerPlus) => { - return setPlaylist(study.id, data.values); - }; - - const handleCellsRender: HandsontableProps["cells"] = function cells( - this, - row, - column, - prop, - ) { - if (prop === "weight") { - const status = this.instance.getDataAtRowProp(row, "status"); - return { readOnly: !status }; - } - return {}; - }; - - //////////////////////////////////////////////////////////////// - // JSX - //////////////////////////////////////////////////////////////// - - return ( - {t("global.close")}} - // TODO: add `maxHeight` and `fullHeight` in BasicDialog` - PaperProps={{ sx: { height: 500 } }} - maxWidth="sm" - fullWidth - > - ( - <> - - - - - - - - - `MC Year ${row.id}`, - tableRef, - stretchH: "all", - className: "htCenter", - cells: handleCellsRender, - }} - /> - - )} - /> - - ); -} - -export default ScenarioPlaylistDialog; diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/utils.ts b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/utils.ts deleted file mode 100644 index bd7c015df8..0000000000 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ScenarioPlaylistDialog/utils.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2024, RTE (https://www.rte-france.com) - * - * See AUTHORS.txt - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * SPDX-License-Identifier: MPL-2.0 - * - * This file is part of the Antares project. - */ - -import { StudyMetadata } from "../../../../../../../../common/types"; -import client from "../../../../../../../../services/api/client"; - -interface PlaylistColumns extends Record { - status: boolean; - weight: number; -} - -export type PlaylistData = Record; - -export const DEFAULT_WEIGHT = 1; - -function makeRequestURL(studyId: StudyMetadata["id"]): string { - return `v1/studies/${studyId}/config/playlist/form`; -} - -export async function getPlaylist( - studyId: StudyMetadata["id"], -): Promise { - const res = await client.get(makeRequestURL(studyId)); - return res.data; -} - -export function setPlaylist( - studyId: StudyMetadata["id"], - data: PlaylistData, -): Promise { - return client.put(makeRequestURL(studyId), data); -} diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx index c888c774ab..3c04d03707 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx @@ -31,7 +31,7 @@ function TimeSeriesManagement() { const { study } = useOutletContext<{ study: StudyMetadata }>(); const { t } = useTranslation(); const [launchTaskInProgress, setLaunchTaskInProgress] = useState(false); - const apiRef = useRef>(); + const apiRef = useRef>(null); const handleGenerateTs = usePromiseHandler({ fn: generateTimeSeries, diff --git a/webapp/src/components/common/DataGridForm.tsx b/webapp/src/components/common/DataGridForm.tsx index 1ae6c8064c..3e1cde6871 100644 --- a/webapp/src/components/common/DataGridForm.tsx +++ b/webapp/src/components/common/DataGridForm.tsx @@ -12,7 +12,6 @@ * This file is part of the Antares project. */ -import type { IdType } from "@/common/types"; import { GridCellKind, type Item, @@ -21,17 +20,18 @@ import { type FillHandleDirection, } from "@glideapps/glide-data-grid"; import type { DeepPartial } from "react-hook-form"; -import { FormEvent, useCallback, useState } from "react"; -import DataGrid from "./DataGrid"; +import { FormEvent, useCallback, useEffect, useMemo, useState } from "react"; +import DataGrid, { DataGridProps } from "./DataGrid"; import { Box, Divider, IconButton, + setRef, SxProps, Theme, Tooltip, } from "@mui/material"; -import useUndo from "use-undo"; +import useUndo, { type Actions } from "use-undo"; import UndoIcon from "@mui/icons-material/Undo"; import RedoIcon from "@mui/icons-material/Redo"; import SaveIcon from "@mui/icons-material/Save"; @@ -42,53 +42,88 @@ import * as R from "ramda"; import { SubmitHandlerPlus } from "./Form/types"; import useEnqueueErrorSnackbar from "@/hooks/useEnqueueErrorSnackbar"; import useFormCloseProtection from "@/hooks/useCloseFormSecurity"; +import { useUpdateEffect } from "react-use"; +import { toError } from "@/utils/fnUtils"; -type GridFieldValuesByRow = Record< - IdType, - Record ->; +type Data = Record>; + +export interface DataGridFormState { + isDirty: boolean; + isSubmitting: boolean; +} + +export interface DataGridFormApi { + data: TData; + setData: Actions["set"]; + formState: DataGridFormState; +} export interface DataGridFormProps< - TFieldValues extends GridFieldValuesByRow = GridFieldValuesByRow, + TData extends Data = Data, SubmitReturnValue = unknown, > { - defaultData: TFieldValues; - columns: ReadonlyArray; + defaultData: TData; + columns: ReadonlyArray; + rowMarkers?: DataGridProps["rowMarkers"]; allowedFillDirections?: FillHandleDirection; - onSubmit?: ( - data: SubmitHandlerPlus, + enableColumnResize?: boolean; + onSubmit: ( + data: SubmitHandlerPlus, event?: React.BaseSyntheticEvent, ) => void | Promise; onSubmitSuccessful?: ( - data: SubmitHandlerPlus, + data: SubmitHandlerPlus, submitResult: SubmitReturnValue, ) => void; + onStateChange?: (state: DataGridFormState) => void; sx?: SxProps; extraActions?: React.ReactNode; + apiRef?: React.Ref>; } -function DataGridForm({ +function DataGridForm({ defaultData, columns, allowedFillDirections = "vertical", + enableColumnResize, + rowMarkers, onSubmit, onSubmitSuccessful, + onStateChange, sx, extraActions, -}: DataGridFormProps) { + apiRef, +}: DataGridFormProps) { const { t } = useTranslation(); const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); const [isSubmitting, setIsSubmitting] = useState(false); const [savedData, setSavedData] = useState(defaultData); - const [{ present: data }, { set, undo, redo, canUndo, canRedo }] = + const [{ present: data }, { set: setData, undo, redo, canUndo, canRedo }] = useUndo(defaultData); - const isSubmitAllowed = savedData !== data; + // Shallow comparison to check if the data has changed. + // So even if the content are the same, we consider it as dirty. + // Deep comparison fix the issue but with big data it can be slow. + const isDirty = savedData !== data; + + const rowNames = Object.keys(data); + + const formState = useMemo( + () => ({ + isDirty, + isSubmitting, + }), + [isDirty, isSubmitting], + ); + + useFormCloseProtection({ isSubmitting, isDirty }); - useFormCloseProtection({ - isSubmitting, - isDirty: isSubmitAllowed, - }); + useUpdateEffect(() => onStateChange?.(formState), [formState]); + + useEffect( + () => setRef(apiRef, { data, setData, formState }), + [apiRef, data, setData, formState], + ); //////////////////////////////////////////////////////////////// // Utils @@ -96,14 +131,13 @@ function DataGridForm({ const getRowAndColumnNames = (location: Item) => { const [colIndex, rowIndex] = location; - const rowNames = Object.keys(data); const columnIds = columns.map((column) => column.id); return [rowNames[rowIndex], columnIds[colIndex]]; }; const getDirtyValues = () => { - return Object.keys(data).reduce((acc, rowName) => { + return rowNames.reduce((acc, rowName) => { const rowData = data[rowName]; const savedRowData = savedData[rowName]; @@ -125,11 +159,11 @@ function DataGridForm({ } return acc; - }, {} as DeepPartial); + }, {} as DeepPartial); }; //////////////////////////////////////////////////////////////// - // Callbacks + // Content //////////////////////////////////////////////////////////////// const getCellContent = useCallback( @@ -182,7 +216,7 @@ function DataGridForm({ //////////////////////////////////////////////////////////////// const handleCellsEdited: DataEditorProps["onCellsEdited"] = (items) => { - set( + setData( items.reduce((acc, { location, value }) => { const [rowName, columnName] = getRowAndColumnNames(location); const newValue = value.data; @@ -204,13 +238,9 @@ function DataGridForm({ return true; }; - const handleFormSubmit = (event: FormEvent) => { + const handleSubmit = async (event: FormEvent) => { event.preventDefault(); - if (!onSubmit) { - return; - } - setIsSubmitting(true); const dataArg = { @@ -218,17 +248,15 @@ function DataGridForm({ dirtyValues: getDirtyValues(), }; - Promise.resolve(onSubmit(dataArg, event)) - .then((submitRes) => { - setSavedData(data); - onSubmitSuccessful?.(dataArg, submitRes); - }) - .catch((err) => { - enqueueErrorSnackbar(t("form.submit.error"), err); - }) - .finally(() => { - setIsSubmitting(false); - }); + try { + const submitRes = await onSubmit(dataArg, event); + setSavedData(data); + onSubmitSuccessful?.(dataArg, submitRes); + } catch (err) { + enqueueErrorSnackbar(t("form.submit.error"), toError(err)); + } finally { + setIsSubmitting(false); + } }; //////////////////////////////////////////////////////////////// @@ -247,19 +275,22 @@ function DataGridForm({ sx, )} component="form" - onSubmit={handleFormSubmit} + onSubmit={handleSubmit} > Object.keys(data)[index], - }} + rowMarkers={ + rowMarkers || { + kind: "clickable-string", + getTitle: (index) => rowNames[index], + } + } fillHandle allowedFillDirections={allowedFillDirections} + enableColumnResize={enableColumnResize} getCellsForSelection /> ({ ; - apiRef?: React.Ref | undefined>; + apiRef?: React.Ref>; } export function useFormContextPlus() { diff --git a/webapp/src/hooks/useConfirm.ts b/webapp/src/hooks/useConfirm.ts index 4df7890c7f..537674d220 100644 --- a/webapp/src/hooks/useConfirm.ts +++ b/webapp/src/hooks/useConfirm.ts @@ -22,7 +22,35 @@ function errorFunction() { /** * Hook that allows to wait for a confirmation from the user with a `Promise`. * It is intended to be used in conjunction with a confirm view (like `ConfirmationDialog`). - + * + * @example + * ```tsx + * const action = useConfirm(); + * + * return ( + * <> + * + * + * Are you sure? + * + * + * ); + * ``` + * * @returns An object with the following properties: * - `showConfirm`: A function that returns a `Promise` that resolves to `true` if the user confirms, * `false` if the user refuses, and `null` if the user cancel. diff --git a/webapp/src/services/api/studies/config/playlist/constants.ts b/webapp/src/services/api/studies/config/playlist/constants.ts new file mode 100644 index 0000000000..bec0c020cb --- /dev/null +++ b/webapp/src/services/api/studies/config/playlist/constants.ts @@ -0,0 +1,15 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +export const DEFAULT_WEIGHT = 1; diff --git a/webapp/src/services/api/studies/config/playlist/index.ts b/webapp/src/services/api/studies/config/playlist/index.ts new file mode 100644 index 0000000000..40ee7b21c1 --- /dev/null +++ b/webapp/src/services/api/studies/config/playlist/index.ts @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import type { StudyMetadata } from "@/common/types"; +import client from "@/services/api/client"; +import { format } from "@/utils/stringUtils"; +import type { PlaylistData, SetPlaylistDataParams } from "./types"; + +const URL = "/v1/studies/{studyId}/config/playlist/form"; + +export async function getPlaylistData(params: { + studyId: StudyMetadata["id"]; +}) { + const url = format(URL, { studyId: params.studyId }); + const { data } = await client.get(url); + return data; +} + +export async function setPlaylistData({ + studyId, + data, +}: SetPlaylistDataParams) { + const url = format(URL, { studyId }); + await client.put(url, data); +} diff --git a/webapp/src/services/api/studies/config/playlist/types.ts b/webapp/src/services/api/studies/config/playlist/types.ts new file mode 100644 index 0000000000..9eeae5441e --- /dev/null +++ b/webapp/src/services/api/studies/config/playlist/types.ts @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import type { StudyMetadata } from "@/common/types"; + +// eslint-disable-next-line @typescript-eslint/consistent-type-definitions +export type Playlist = { + status: boolean; + weight: number; +}; + +export type PlaylistData = Record; + +export interface SetPlaylistDataParams { + studyId: StudyMetadata["id"]; + data: PlaylistData; +} From d14454ab3b5d91dc9136a89fea044485b8305b2e Mon Sep 17 00:00:00 2001 From: Theo Pascoli <48944759+TheoPascoli@users.noreply.github.com> Date: Fri, 17 Jan 2025 16:48:36 +0100 Subject: [PATCH 59/86] =?UTF-8?q?feat:=20add=20an=20endpoint=20to=20allow?= =?UTF-8?q?=20multiple=20deletion=20of=20binding=20constrain=E2=80=A6=20(#?= =?UTF-8?q?2298)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/binding_constraint_management.py | 40 +++++++ .../variantstudy/business/command_reverter.py | 11 ++ .../storage/variantstudy/command_factory.py | 4 + .../model/command/binding_constraint_utils.py | 35 ++++++ .../variantstudy/model/command/common.py | 1 + .../command/create_binding_constraint.py | 22 +--- .../command/remove_binding_constraint.py | 2 +- .../remove_multiple_binding_constraints.py | 111 ++++++++++++++++++ antarest/study/web/study_data_blueprint.py | 19 +++ .../test_binding_constraints.py | 36 ++++++ tests/variantstudy/test_command_factory.py | 10 ++ 11 files changed, 269 insertions(+), 22 deletions(-) create mode 100644 antarest/study/storage/variantstudy/model/command/binding_constraint_utils.py create mode 100644 antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py diff --git a/antarest/study/business/binding_constraint_management.py b/antarest/study/business/binding_constraint_management.py index 1fb5d48a0d..fd3970b9b1 100644 --- a/antarest/study/business/binding_constraint_management.py +++ b/antarest/study/business/binding_constraint_management.py @@ -70,6 +70,9 @@ ) from antarest.study.storage.variantstudy.model.command.icommand import ICommand from antarest.study.storage.variantstudy.model.command.remove_binding_constraint import RemoveBindingConstraint +from antarest.study.storage.variantstudy.model.command.remove_multiple_binding_constraints import ( + RemoveMultipleBindingConstraints, +) from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix from antarest.study.storage.variantstudy.model.command.update_binding_constraint import ( UpdateBindingConstraint, @@ -589,6 +592,18 @@ def terms_to_coeffs(terms: t.Sequence[ConstraintTerm]) -> t.Dict[str, t.List[flo coeffs[term.id].append(term.offset) return coeffs + def check_binding_constraints_exists(self, study: Study, bc_ids: t.List[str]) -> None: + storage_service = self.storage_service.get_storage(study) + file_study = storage_service.get_raw(study) + existing_constraints = file_study.tree.get(["input", "bindingconstraints", "bindingconstraints"]) + + existing_ids = {constraint["id"] for constraint in existing_constraints.values()} + + missing_bc_ids = [bc_id for bc_id in bc_ids if bc_id not in existing_ids] + + if missing_bc_ids: + raise BindingConstraintNotFound(f"Binding constraint(s) '{missing_bc_ids}' not found") + def get_binding_constraint(self, study: Study, bc_id: str) -> ConstraintOutput: """ Retrieves a binding constraint by its ID within a given study. @@ -1018,6 +1033,31 @@ def remove_binding_constraint(self, study: Study, binding_constraint_id: str) -> ) execute_or_add_commands(study, file_study, [command], self.storage_service) + def remove_multiple_binding_constraints(self, study: Study, binding_constraints_ids: t.List[str]) -> None: + """ + Removes multiple binding constraints from a study. + + Args: + study: The study from which to remove the constraint. + binding_constraints_ids: The IDs of the binding constraints to remove. + + Raises: + BindingConstraintNotFound: If at least one binding constraint within the specified list is not found. + """ + + self.check_binding_constraints_exists(study, binding_constraints_ids) + + command_context = self.storage_service.variant_study_service.command_factory.command_context + file_study = self.storage_service.get_storage(study).get_raw(study) + + command = RemoveMultipleBindingConstraints( + ids=binding_constraints_ids, + command_context=command_context, + study_version=file_study.config.version, + ) + + execute_or_add_commands(study, file_study, [command], self.storage_service) + def _update_constraint_with_terms( self, study: Study, bc: ConstraintOutput, terms: t.Mapping[str, ConstraintTerm] ) -> None: diff --git a/antarest/study/storage/variantstudy/business/command_reverter.py b/antarest/study/storage/variantstudy/business/command_reverter.py index d5971dd69e..4b74d2a0ba 100644 --- a/antarest/study/storage/variantstudy/business/command_reverter.py +++ b/antarest/study/storage/variantstudy/business/command_reverter.py @@ -38,6 +38,9 @@ from antarest.study.storage.variantstudy.model.command.remove_cluster import RemoveCluster from antarest.study.storage.variantstudy.model.command.remove_district import RemoveDistrict from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink +from antarest.study.storage.variantstudy.model.command.remove_multiple_binding_constraints import ( + RemoveMultipleBindingConstraints, +) from antarest.study.storage.variantstudy.model.command.remove_renewables_cluster import RemoveRenewablesCluster from antarest.study.storage.variantstudy.model.command.remove_st_storage import RemoveSTStorage from antarest.study.storage.variantstudy.model.command.remove_user_resource import RemoveUserResource @@ -163,6 +166,14 @@ def _revert_remove_binding_constraint( ) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveBindingConstraint is not available") + @staticmethod + def _revert_remove_multiple_binding_constraints( + base_command: RemoveMultipleBindingConstraints, + history: t.List["ICommand"], + base: FileStudy, + ) -> t.List[ICommand]: + raise NotImplementedError("The revert function for RemoveMultipleBindingConstraints is not available") + @staticmethod def _revert_update_scenario_builder( base_command: UpdateScenarioBuilder, diff --git a/antarest/study/storage/variantstudy/command_factory.py b/antarest/study/storage/variantstudy/command_factory.py index 9638141643..f20f0ef58d 100644 --- a/antarest/study/storage/variantstudy/command_factory.py +++ b/antarest/study/storage/variantstudy/command_factory.py @@ -37,6 +37,9 @@ from antarest.study.storage.variantstudy.model.command.remove_cluster import RemoveCluster from antarest.study.storage.variantstudy.model.command.remove_district import RemoveDistrict from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink +from antarest.study.storage.variantstudy.model.command.remove_multiple_binding_constraints import ( + RemoveMultipleBindingConstraints, +) from antarest.study.storage.variantstudy.model.command.remove_renewables_cluster import RemoveRenewablesCluster from antarest.study.storage.variantstudy.model.command.remove_st_storage import RemoveSTStorage from antarest.study.storage.variantstudy.model.command.remove_user_resource import RemoveUserResource @@ -63,6 +66,7 @@ CommandName.CREATE_BINDING_CONSTRAINT.value: CreateBindingConstraint, CommandName.UPDATE_BINDING_CONSTRAINT.value: UpdateBindingConstraint, CommandName.REMOVE_BINDING_CONSTRAINT.value: RemoveBindingConstraint, + CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS.value: RemoveMultipleBindingConstraints, CommandName.CREATE_THERMAL_CLUSTER.value: CreateCluster, CommandName.REMOVE_THERMAL_CLUSTER.value: RemoveCluster, CommandName.CREATE_RENEWABLES_CLUSTER.value: CreateRenewablesCluster, diff --git a/antarest/study/storage/variantstudy/model/command/binding_constraint_utils.py b/antarest/study/storage/variantstudy/model/command/binding_constraint_utils.py new file mode 100644 index 0000000000..45d40d5bc5 --- /dev/null +++ b/antarest/study/storage/variantstudy/model/command/binding_constraint_utils.py @@ -0,0 +1,35 @@ +# Copyright (c) 2025, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. +import typing as t + +from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy + + +def remove_bc_from_scenario_builder(study_data: FileStudy, removed_groups: t.Set[str]) -> None: + """ + Update the scenario builder by removing the rows that correspond to the BC groups to remove. + + NOTE: this update can be very long if the scenario builder configuration is large. + """ + if not removed_groups: + return + + rulesets = study_data.tree.get(["settings", "scenariobuilder"]) + + for ruleset in rulesets.values(): + for key in list(ruleset): + # The key is in the form "symbol,group,year" + symbol, *parts = key.split(",") + if symbol == "bc" and parts[0] in removed_groups: + del ruleset[key] + + study_data.tree.save(rulesets, ["settings", "scenariobuilder"]) diff --git a/antarest/study/storage/variantstudy/model/command/common.py b/antarest/study/storage/variantstudy/model/command/common.py index 744c87d22c..e91a0e2e58 100644 --- a/antarest/study/storage/variantstudy/model/command/common.py +++ b/antarest/study/storage/variantstudy/model/command/common.py @@ -39,6 +39,7 @@ class CommandName(Enum): CREATE_BINDING_CONSTRAINT = "create_binding_constraint" UPDATE_BINDING_CONSTRAINT = "update_binding_constraint" REMOVE_BINDING_CONSTRAINT = "remove_binding_constraint" + REMOVE_MULTIPLE_BINDING_CONSTRAINTS = "remove_multiple_binding_constraints" CREATE_THERMAL_CLUSTER = "create_cluster" REMOVE_THERMAL_CLUSTER = "remove_cluster" CREATE_RENEWABLES_CLUSTER = "create_renewables_cluster" diff --git a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py index b76f092086..766934c8ee 100644 --- a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py @@ -38,6 +38,7 @@ from antarest.study.storage.variantstudy.business.utils_binding_constraint import ( parse_bindings_coeffs_and_save_into_config, ) +from antarest.study.storage.variantstudy.model.command.binding_constraint_utils import remove_bc_from_scenario_builder from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener @@ -503,24 +504,3 @@ def match(self, other: "ICommand", equal: bool = False) -> bool: if not equal: return self.name == other.name return super().match(other, equal) - - -def remove_bc_from_scenario_builder(study_data: FileStudy, removed_groups: t.Set[str]) -> None: - """ - Update the scenario builder by removing the rows that correspond to the BC groups to remove. - - NOTE: this update can be very long if the scenario builder configuration is large. - """ - if not removed_groups: - return - - rulesets = study_data.tree.get(["settings", "scenariobuilder"]) - - for ruleset in rulesets.values(): - for key in list(ruleset): - # The key is in the form "symbol,group,year" - symbol, *parts = key.split(",") - if symbol == "bc" and parts[0] in removed_groups: - del ruleset[key] - - study_data.tree.save(rulesets, ["settings", "scenariobuilder"]) diff --git a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py index b05b51efc4..482ffc5a1b 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py @@ -19,8 +19,8 @@ from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import DEFAULT_GROUP from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.variantstudy.model.command.binding_constraint_utils import remove_bc_from_scenario_builder from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput -from antarest.study.storage.variantstudy.model.command.create_binding_constraint import remove_bc_from_scenario_builder from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener from antarest.study.storage.variantstudy.model.model import CommandDTO diff --git a/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py b/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py new file mode 100644 index 0000000000..7747f4945f --- /dev/null +++ b/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py @@ -0,0 +1,111 @@ +# Copyright (c) 2025, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. +import typing as t + +from typing_extensions import override + +from antarest.study.model import STUDY_VERSION_8_7 +from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import DEFAULT_GROUP +from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig +from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.variantstudy.model.command.binding_constraint_utils import remove_bc_from_scenario_builder +from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput +from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand, OutputTuple +from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener +from antarest.study.storage.variantstudy.model.model import CommandDTO + + +class RemoveMultipleBindingConstraints(ICommand): + """ + Command used to remove multiple binding constraints at once. + """ + + command_name: CommandName = CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS + version: int = 1 + + # Properties of the `REMOVE_MULTIPLE_BINDING_CONSTRAINTS` command: + ids: t.List[str] + + @override + def _apply_config(self, study_data: FileStudyTreeConfig) -> OutputTuple: + # If at least one bc is missing in the database, we raise an error + already_existing_ids = {binding.id for binding in study_data.bindings} + missing_bc_ids = [id_ for id_ in self.ids if id_ not in already_existing_ids] + if missing_bc_ids: + return CommandOutput(status=False, message=f"Binding constraint not found: '{missing_bc_ids}'"), {} + return CommandOutput(status=True), {} + + @override + def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = None) -> CommandOutput: + command_output, _ = self._apply_config(study_data.config) + + if not command_output.status: + return command_output + + binding_constraints = study_data.tree.get(["input", "bindingconstraints", "bindingconstraints"]) + + old_groups = {bd.get("group", DEFAULT_GROUP).lower() for bd in binding_constraints.values()} + + deleted_binding_constraints = [] + + for key in list(binding_constraints.keys()): + if binding_constraints[key].get("id") in self.ids: + deleted_binding_constraints.append(binding_constraints.pop(key)) + + study_data.tree.save( + binding_constraints, + ["input", "bindingconstraints", "bindingconstraints"], + ) + + existing_files = study_data.tree.get(["input", "bindingconstraints"], depth=1) + for bc in deleted_binding_constraints: + if study_data.config.version < STUDY_VERSION_8_7: + study_data.tree.delete(["input", "bindingconstraints", bc.get("id")]) + else: + for term in ["lt", "gt", "eq"]: + matrix_id = f"{bc.get('id')}_{term}" + if matrix_id in existing_files: + study_data.tree.delete(["input", "bindingconstraints", matrix_id]) + + new_groups = {bd.get("group", DEFAULT_GROUP).lower() for bd in binding_constraints.values()} + removed_groups = old_groups - new_groups + remove_bc_from_scenario_builder(study_data, removed_groups) + + return command_output + + @override + def to_dto(self) -> CommandDTO: + return CommandDTO( + action=CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS.value, + args={ + "ids": self.ids, + }, + study_version=self.study_version, + ) + + @override + def match_signature(self) -> str: + return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + ",".join(self.ids)) + + @override + def match(self, other: ICommand, equal: bool = False) -> bool: + if not isinstance(other, RemoveMultipleBindingConstraints): + return False + return self.ids == other.ids + + @override + def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: + return [] + + @override + def get_inner_matrices(self) -> t.List[str]: + return [] diff --git a/antarest/study/web/study_data_blueprint.py b/antarest/study/web/study_data_blueprint.py index 9be21c1743..95659ecd7f 100644 --- a/antarest/study/web/study_data_blueprint.py +++ b/antarest/study/web/study_data_blueprint.py @@ -1378,6 +1378,25 @@ def delete_binding_constraint( study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) return study_service.binding_constraint_manager.remove_binding_constraint(study, binding_constraint_id) + @bp.delete( + "/studies/{uuid}/bindingconstraints", + tags=[APITag.study_data], + summary="Delete multiple binding constraints", + response_model=None, + ) + def delete_multiple_binding_constraints( + uuid: str, binding_constraints_ids: t.List[str], current_user: JWTUser = Depends(auth.get_current_user) + ) -> None: + logger.info( + f"Deleting the binding constraints {binding_constraints_ids!r} for study {uuid}", + extra={"user": current_user.id}, + ) + params = RequestParameters(user=current_user) + study = study_service.check_study_access(uuid, StudyPermissionType.WRITE, params) + return study_service.binding_constraint_manager.remove_multiple_binding_constraints( + study, binding_constraints_ids + ) + @bp.post( "/studies/{uuid}/bindingconstraints/{binding_constraint_id}/term", tags=[APITag.study_data], diff --git a/tests/integration/study_data_blueprint/test_binding_constraints.py b/tests/integration/study_data_blueprint/test_binding_constraints.py index 408cef124d..84b27ded12 100644 --- a/tests/integration/study_data_blueprint/test_binding_constraints.py +++ b/tests/integration/study_data_blueprint/test_binding_constraints.py @@ -972,6 +972,26 @@ def test_for_version_870(self, client: TestClient, user_access_token: str, study binding_constraints_list = preparer.get_binding_constraints(study_id) assert len(binding_constraints_list) == 2 + # Delete multiple binding constraint + preparer.create_binding_constraint(study_id, name="bc1", group="grp1", **args) + preparer.create_binding_constraint(study_id, name="bc2", group="grp2", **args) + + binding_constraints_list = preparer.get_binding_constraints(study_id) + assert len(binding_constraints_list) == 4 + + res = client.request( + "DELETE", + f"/v1/studies/{study_id}/bindingconstraints", + json=["bc1", "bc2"], + ) + assert res.status_code == 200, res.json() + + # Asserts that the deletion worked + binding_constraints_list = preparer.get_binding_constraints(study_id) + assert len(binding_constraints_list) == 2 + actual_ids = [constraint["id"] for constraint in binding_constraints_list] + assert actual_ids == ["binding_constraint_1", "binding_constraint_3"] + # ============================= # CONSTRAINT DUPLICATION # ============================= @@ -1015,6 +1035,22 @@ def test_for_version_870(self, client: TestClient, user_access_token: str, study # ERRORS # ============================= + # Deletion multiple binding constraints, one does not exist. Make sure none is deleted + + binding_constraints_list = preparer.get_binding_constraints(study_id) + assert len(binding_constraints_list) == 3 + + res = client.request( + "DELETE", + f"/v1/studies/{study_id}/bindingconstraints", + json=["binding_constraint_1", "binding_constraint_2", "binding_constraint_3"], + ) + assert res.status_code == 404, res.json() + assert res.json()["description"] == "Binding constraint(s) '['binding_constraint_2']' not found" + + binding_constraints_list = preparer.get_binding_constraints(study_id) + assert len(binding_constraints_list) == 3 + # Creation with wrong matrix according to version for operator in ["less", "equal", "greater", "both"]: args["operator"] = operator diff --git a/tests/variantstudy/test_command_factory.py b/tests/variantstudy/test_command_factory.py index c4406b50da..a2c392785a 100644 --- a/tests/variantstudy/test_command_factory.py +++ b/tests/variantstudy/test_command_factory.py @@ -159,6 +159,16 @@ CommandDTO( action=CommandName.REMOVE_BINDING_CONSTRAINT.value, args=[{"id": "id"}], study_version=STUDY_VERSION_8_8 ), + CommandDTO( + action=CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS.value, + args={"ids": ["id"]}, + study_version=STUDY_VERSION_8_8, + ), + CommandDTO( + action=CommandName.REMOVE_MULTIPLE_BINDING_CONSTRAINTS.value, + args=[{"ids": ["id"]}], + study_version=STUDY_VERSION_8_8, + ), CommandDTO( action=CommandName.CREATE_THERMAL_CLUSTER.value, args={ From f0f93036243c3e6ba7535bf0b81e002f081bf10e Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Tue, 21 Jan 2025 12:23:30 +0100 Subject: [PATCH 60/86] chore(ui): update Node version, ESLint and Prettier (#2294) ANT-2231 --- .github/workflows/deploy.yml | 2 +- .github/workflows/main.yml | 8 +- docs/CHANGELOG.md | 2 +- docs/developer-guide/install/0-INSTALL.md | 2 +- webapp/.eslintrc.cjs | 89 - webapp/.nvmrc | 2 +- webapp/.prettierrc.json | 3 +- webapp/eslint.config.js | 130 + webapp/package-lock.json | 7009 +++++++++-------- webapp/package.json | 25 +- webapp/src/components/App/Api.tsx | 4 +- .../src/components/App/Data/DataListing.tsx | 10 +- .../src/components/App/Data/DataPropsView.tsx | 6 +- .../App/Data/DatasetCreationDialog.tsx | 44 +- .../src/components/App/Data/MatrixDialog.tsx | 2 +- webapp/src/components/App/Data/index.tsx | 34 +- webapp/src/components/App/Data/utils.tsx | 24 +- .../components/App/Settings/Groups/Header.tsx | 2 +- .../Groups/dialog/CreateGroupDialog.tsx | 38 +- .../dialog/GroupFormDialog/GroupForm.tsx | 35 +- .../Groups/dialog/GroupFormDialog/index.tsx | 9 +- .../Groups/dialog/UpdateGroupDialog.tsx | 28 +- .../components/App/Settings/Groups/index.tsx | 24 +- .../App/Settings/Maintenance/index.tsx | 11 +- .../components/App/Settings/Tokens/Header.tsx | 2 +- .../Tokens/dialog/CreateTokenDialog.tsx | 39 +- .../dialog/TokenFormDialog/TokenForm.tsx | 30 +- .../Tokens/dialog/TokenFormDialog/index.tsx | 11 +- .../Tokens/dialog/TokenInfoDialog.tsx | 10 +- .../components/App/Settings/Tokens/index.tsx | 67 +- .../components/App/Settings/Users/Header.tsx | 2 +- .../Users/dialog/CreateUserDialog.tsx | 29 +- .../Users/dialog/UpdateUserDialog.tsx | 40 +- .../Users/dialog/UserFormDialog/UserForm.tsx | 30 +- .../Users/dialog/UserFormDialog/index.tsx | 6 +- .../components/App/Settings/Users/index.tsx | 18 +- webapp/src/components/App/Settings/index.tsx | 12 +- webapp/src/components/App/Settings/utils.ts | 6 +- .../DraggableCommands/CommandImportButton.tsx | 8 +- .../CommandListItem/CommandDetails.tsx | 17 +- .../CommandListItem/CommandMatrixViewer.tsx | 6 +- .../CommandListItem/index.tsx | 46 +- .../DraggableCommands/CommandListView.tsx | 6 +- .../Commands/Edition/commandTypes.ts | 2 +- .../Singlestudy/Commands/Edition/index.tsx | 44 +- .../App/Singlestudy/Commands/Edition/utils.ts | 24 +- .../App/Singlestudy/Commands/index.tsx | 7 +- .../App/Singlestudy/FreezeStudy.tsx | 30 +- .../InformationView/CreateVariantDialog.tsx | 12 +- .../LauncherHistory/JobStepper.tsx | 30 +- .../InformationView/LauncherHistory/index.tsx | 47 +- .../InformationView/LauncherHistory/style.ts | 7 +- .../InformationView/Notes/DetailsList.tsx | 2 +- .../Notes/NodeEditorModal/index.tsx | 33 +- .../HomeView/InformationView/Notes/index.tsx | 36 +- .../HomeView/InformationView/Notes/utils.ts | 75 +- .../HomeView/InformationView/index.tsx | 30 +- .../HomeView/StudyTreeView/index.tsx | 32 +- .../HomeView/StudyTreeView/utils.ts | 11 +- .../App/Singlestudy/HomeView/index.tsx | 2 +- .../App/Singlestudy/NavHeader/Actions.tsx | 25 +- .../App/Singlestudy/NavHeader/ActionsMenu.tsx | 6 +- .../App/Singlestudy/NavHeader/Details.tsx | 6 +- .../App/Singlestudy/NavHeader/index.tsx | 10 +- .../App/Singlestudy/PropertiesDialog.tsx | 18 +- .../App/Singlestudy/UpgradeDialog.tsx | 8 +- .../Configuration/AdequacyPatch/Fields.tsx | 34 +- .../Configuration/AdequacyPatch/index.tsx | 18 +- .../Configuration/AdequacyPatch/utils.ts | 2 +- .../AdvancedParameters/Fields.tsx | 84 +- .../AdvancedParameters/index.tsx | 10 +- .../Configuration/AdvancedParameters/utils.ts | 24 +- .../explore/Configuration/General/Fields.tsx | 44 +- .../dialogs/ScenarioBuilderDialog/Table.tsx | 14 +- .../dialogs/ScenarioBuilderDialog/index.tsx | 32 +- .../dialogs/ScenarioBuilderDialog/utils.ts | 23 +- .../ScenarioBuilderDialog/withAreas.tsx | 47 +- .../dialogs/ScenarioPlaylistDialog.tsx | 30 +- .../dialogs/ThematicTrimmingDialog/index.tsx | 44 +- .../dialogs/ThematicTrimmingDialog/utils.ts | 4 +- .../explore/Configuration/General/index.tsx | 32 +- .../explore/Configuration/General/utils.ts | 14 +- .../Configuration/Optimization/Fields.tsx | 16 +- .../Configuration/Optimization/index.tsx | 10 +- .../Configuration/Optimization/utils.ts | 23 +- .../TimeSeriesManagement/Fields.tsx | 25 +- .../TimeSeriesManagement/index.tsx | 7 +- .../TimeSeriesManagement/utils.ts | 4 +- .../explore/Configuration/index.tsx | 2 +- .../Singlestudy/explore/Debug/Data/Folder.tsx | 16 +- .../Singlestudy/explore/Debug/Data/Json.tsx | 13 +- .../Singlestudy/explore/Debug/Data/Text.tsx | 13 +- .../Singlestudy/explore/Debug/Data/index.tsx | 5 +- .../explore/Debug/Tree/FileTreeItem.tsx | 2 +- .../Singlestudy/explore/Debug/Tree/index.tsx | 12 +- .../App/Singlestudy/explore/Debug/index.tsx | 13 +- .../App/Singlestudy/explore/Debug/utils.ts | 41 +- .../Modelization/Areas/AreaPropsView.tsx | 6 +- .../explore/Modelization/Areas/AreasTab.tsx | 6 +- .../Hydro/Allocation/AllocationField.tsx | 4 +- .../Areas/Hydro/Allocation/Fields.tsx | 4 +- .../Areas/Hydro/Allocation/index.tsx | 9 +- .../Areas/Hydro/Allocation/utils.ts | 19 +- .../Hydro/Correlation/CorrelationField.tsx | 4 +- .../Areas/Hydro/Correlation/Fields.tsx | 9 +- .../Areas/Hydro/Correlation/index.tsx | 6 +- .../Areas/Hydro/Correlation/utils.ts | 19 +- .../Modelization/Areas/Hydro/HydroMatrix.tsx | 2 +- .../Areas/Hydro/HydroMatrixDialog.tsx | 16 +- .../Areas/Hydro/InflowStructure/index.tsx | 4 +- .../Areas/Hydro/ManagementOptions/Fields.tsx | 35 +- .../Areas/Hydro/ManagementOptions/index.tsx | 6 +- .../Areas/Hydro/ManagementOptions/utils.ts | 11 +- .../Areas/Hydro/SplitHydroMatrix.tsx | 10 +- .../Areas/Hydro/ViewMatrixButton.tsx | 7 +- .../Areas/Hydro/hooks/useAreasOptions.ts | 10 +- .../Modelization/Areas/Hydro/index.tsx | 10 +- .../explore/Modelization/Areas/Hydro/style.ts | 3 +- .../explore/Modelization/Areas/Hydro/utils.ts | 15 +- .../explore/Modelization/Areas/MiscGen.tsx | 4 +- .../Modelization/Areas/Properties/Fields.tsx | 4 +- .../Modelization/Areas/Properties/index.tsx | 6 +- .../Modelization/Areas/Properties/utils.ts | 9 +- .../Modelization/Areas/Renewables/Fields.tsx | 13 +- .../Modelization/Areas/Renewables/Form.tsx | 14 +- .../Modelization/Areas/Renewables/Matrix.tsx | 2 +- .../Modelization/Areas/Renewables/index.tsx | 85 +- .../Modelization/Areas/Renewables/utils.ts | 43 +- .../explore/Modelization/Areas/Reserve.tsx | 11 +- .../Modelization/Areas/Storages/Fields.tsx | 15 +- .../Modelization/Areas/Storages/Form.tsx | 12 +- .../Modelization/Areas/Storages/Matrix.tsx | 16 +- .../Modelization/Areas/Storages/index.tsx | 37 +- .../Modelization/Areas/Storages/utils.ts | 22 +- .../Modelization/Areas/Thermal/Fields.tsx | 14 +- .../Modelization/Areas/Thermal/Form.tsx | 16 +- .../Modelization/Areas/Thermal/Matrix.tsx | 7 +- .../Modelization/Areas/Thermal/index.tsx | 85 +- .../Modelization/Areas/Thermal/utils.ts | 44 +- .../Areas/common/clustersUtils.ts | 11 +- .../explore/Modelization/Areas/index.tsx | 17 +- .../BindingConstraints/AddDialog.tsx | 26 +- .../BindingConstPropsView.tsx | 14 +- .../AddConstraintTermForm/OptionsList.tsx | 15 +- .../AddConstraintTermForm/index.tsx | 13 +- .../AddConstraintTermDialog/index.tsx | 31 +- .../BindingConstView/BindingConstForm.tsx | 41 +- .../BindingConstView/ConstraintFields.tsx | 19 +- .../ConstraintTerm/OptionsList.tsx | 34 +- .../BindingConstView/ConstraintTerm/index.tsx | 25 +- .../BindingConstView/Matrix.tsx | 20 +- .../constraintviews/ConstraintElement.tsx | 13 +- .../constraintviews/OffsetInput.tsx | 3 +- .../BindingConstView/constraintviews/style.ts | 3 +- .../BindingConstView/index.tsx | 23 +- .../BindingConstView/utils.ts | 22 +- .../Modelization/BindingConstraints/index.tsx | 11 +- .../Modelization/Links/LinkPropsView.tsx | 10 +- .../Modelization/Links/LinkView/LinkForm.tsx | 22 +- .../Links/LinkView/LinkMatrixView.tsx | 18 +- .../Modelization/Links/LinkView/index.tsx | 2 +- .../Modelization/Links/LinkView/utils.ts | 4 +- .../explore/Modelization/Links/index.tsx | 11 +- .../Modelization/Map/Areas/AreaConfig.tsx | 6 +- .../Modelization/Map/Areas/AreaLink.tsx | 7 +- .../Modelization/Map/Areas/AreaLinks.tsx | 22 +- .../Map/Areas/DeleteAreaDialog.tsx | 31 +- .../explore/Modelization/Map/Areas/index.tsx | 23 +- .../Modelization/Map/CreateAreaDialog.tsx | 5 +- .../Districts/CreateDistrictDialog.tsx | 7 +- .../Districts/UpdateDistrictDialog.tsx | 25 +- .../Map/MapConfig/Districts/index.tsx | 33 +- .../MapConfig/Layers/CreateLayerDialog.tsx | 13 +- .../MapConfig/Layers/UpdateLayerDialog.tsx | 15 +- .../Map/MapConfig/Layers/index.tsx | 20 +- .../Modelization/Map/MapConfig/index.tsx | 10 +- .../Modelization/Map/MapControlButtons.tsx | 7 +- .../explore/Modelization/Map/MapGraph.tsx | 35 +- .../explore/Modelization/Map/MapHeader.tsx | 20 +- .../explore/Modelization/Map/Node.tsx | 2 +- .../explore/Modelization/Map/index.tsx | 25 +- .../explore/Modelization/Map/style.ts | 54 +- .../explore/Modelization/Map/utils.ts | 22 +- .../explore/Modelization/index.tsx | 8 +- .../Results/ResultDetails/ResultFilters.tsx | 30 +- .../explore/Results/ResultDetails/index.tsx | 81 +- .../explore/Results/ResultDetails/utils.ts | 6 +- .../App/Singlestudy/explore/Results/index.tsx | 58 +- .../App/Singlestudy/explore/TabWrapper.tsx | 40 +- .../dialogs/CreateTemplateTableDialog.tsx | 12 +- .../dialogs/TableTemplateFormDialog.tsx | 14 +- .../dialogs/UpdateTemplateTableDialog.tsx | 13 +- .../explore/TableModeList/index.tsx | 26 +- .../explore/TableModeList/utils.ts | 2 +- .../Xpansion/Candidates/CandidateForm.tsx | 113 +- .../Candidates/CreateCandidateDialog.tsx | 31 +- .../Xpansion/Candidates/XpansionPropsView.tsx | 20 +- .../explore/Xpansion/Candidates/index.tsx | 80 +- .../Singlestudy/explore/Xpansion/FileList.tsx | 25 +- .../Xpansion/Settings/SettingsForm.tsx | 66 +- .../explore/Xpansion/Settings/index.tsx | 11 +- .../Singlestudy/explore/Xpansion/index.tsx | 30 +- .../explore/common/ListElement.tsx | 17 +- .../explore/common/OutputFilters.tsx | 10 +- .../App/Singlestudy/explore/common/types.ts | 7 +- .../src/components/App/Singlestudy/index.tsx | 18 +- .../components/App/Studies/BatchModeMenu.tsx | 13 +- .../App/Studies/CreateStudyDialog.tsx | 11 +- .../Filter/MultipleLinkElement/index.tsx | 13 +- .../ExportModal/ExportFilter/Filter/index.tsx | 20 +- .../ExportModal/ExportFilter/index.tsx | 36 +- .../App/Studies/ExportModal/index.tsx | 45 +- .../components/App/Studies/FilterDrawer.tsx | 25 +- .../components/App/Studies/HeaderBottom.tsx | 9 +- .../components/App/Studies/HeaderTopRight.tsx | 10 +- .../components/App/Studies/LauncherDialog.tsx | 62 +- .../App/Studies/MoveStudyDialog.tsx | 15 +- webapp/src/components/App/Studies/SideNav.tsx | 4 +- .../App/Studies/StudiesList/StudyCardCell.tsx | 9 +- .../App/Studies/StudiesList/index.tsx | 38 +- .../App/Studies/StudyCard/ActionsMenu.tsx | 59 +- .../App/Studies/StudyCard/index.tsx | 38 +- .../App/Studies/StudyTree/StudyTreeNode.tsx | 14 +- .../Studies/StudyTree/__test__/fixtures.ts | 6 +- .../Studies/StudyTree/__test__/utils.test.ts | 30 +- .../App/Studies/StudyTree/index.tsx | 24 +- .../components/App/Studies/StudyTree/utils.ts | 57 +- webapp/src/components/App/Studies/index.tsx | 9 +- .../src/components/App/Tasks/JobTableView.tsx | 28 +- .../components/App/Tasks/LaunchJobLogView.tsx | 17 +- .../App/Tasks/NotificationBadge.tsx | 13 +- webapp/src/components/App/Tasks/index.tsx | 163 +- webapp/src/components/App/index.tsx | 78 +- webapp/src/components/common/DataGrid.tsx | 88 +- webapp/src/components/common/DataGridForm.tsx | 52 +- webapp/src/components/common/DocLink.tsx | 13 +- webapp/src/components/common/DownloadLink.tsx | 3 +- .../common/DynamicDataTable/TableRowGroup.tsx | 26 +- .../common/DynamicDataTable/TableRowItem.tsx | 32 +- .../common/DynamicDataTable/TableToolbar.tsx | 14 +- .../common/DynamicDataTable/index.tsx | 43 +- .../common/DynamicDataTable/utils.ts | 17 +- webapp/src/components/common/DynamicList.tsx | 4 +- webapp/src/components/common/Fieldset.tsx | 17 +- webapp/src/components/common/FileTable.tsx | 30 +- webapp/src/components/common/Form/index.tsx | 79 +- webapp/src/components/common/Form/types.ts | 28 +- .../components/common/Form/useFormApiPlus.ts | 42 +- .../components/common/Form/useFormUndoRedo.ts | 14 +- webapp/src/components/common/Form/utils.ts | 6 +- .../common/GroupedDataTable/CreateDialog.tsx | 17 +- .../GroupedDataTable/DuplicateDialog.tsx | 9 +- .../common/GroupedDataTable/index.tsx | 40 +- .../common/GroupedDataTable/utils.ts | 17 +- webapp/src/components/common/Handsontable.tsx | 63 +- .../components/common/JSONEditor/index.tsx | 21 +- .../common/LinearProgressWithLabel.tsx | 16 +- webapp/src/components/common/LogModal.tsx | 29 +- .../MatrixActions/MatrixActions.test.tsx | 2 +- .../Matrix/components/MatrixActions/index.tsx | 37 +- .../components/MatrixGrid/MatrixGrid.test.tsx | 24 +- .../common/Matrix/components/MatrixUpload.tsx | 11 +- .../useColumnMapping/__tests__/fixtures.ts | 5 +- .../__tests__/useColumnMapping.test.ts | 9 +- .../hooks/useColumnMapping/__tests__/utils.ts | 8 +- .../Matrix/hooks/useColumnMapping/index.ts | 9 +- .../__tests__/assertions.ts | 14 +- .../__tests__/useGridCellContent.test.ts | 31 +- .../useGridCellContent/__tests__/utils.ts | 12 +- .../Matrix/hooks/useGridCellContent/index.ts | 39 +- .../Matrix/hooks/useGridCellContent/types.ts | 2 +- .../common/Matrix/hooks/useMatrix/index.ts | 57 +- .../Matrix/hooks/useMatrix/useMatrix.test.tsx | 22 +- webapp/src/components/common/Matrix/index.tsx | 14 +- .../Matrix/shared/__tests__/fixtures.ts | 8 +- .../Matrix/shared/__tests__/utils.test.ts | 63 +- .../common/Matrix/shared/constants.ts | 11 +- .../components/common/Matrix/shared/types.ts | 11 +- .../components/common/Matrix/shared/utils.ts | 46 +- webapp/src/components/common/Matrix/styles.ts | 2 +- .../src/components/common/PropertiesView.tsx | 17 +- webapp/src/components/common/SelectMulti.tsx | 20 +- webapp/src/components/common/SelectSingle.tsx | 19 +- .../components/common/SnackErrorMessage.tsx | 143 +- .../src/components/common/SplitLayoutView.tsx | 13 +- .../src/components/common/SplitView/index.tsx | 2 +- webapp/src/components/common/StarToggle.tsx | 10 +- .../src/components/common/TableForm/Table.tsx | 55 +- .../src/components/common/TableForm/index.tsx | 28 +- webapp/src/components/common/TableMode.tsx | 17 +- webapp/src/components/common/TabsView.tsx | 8 +- .../src/components/common/TextSeparator.tsx | 2 +- .../components/common/TreeItemEnhanced.tsx | 6 +- .../common/buttons/DownloadButton.tsx | 19 +- .../common/buttons/DownloadMatrixButton.tsx | 13 +- .../components/common/buttons/SplitButton.tsx | 2 +- .../common/buttons/UploadFileButton.tsx | 4 +- .../components/common/dialogs/BasicDialog.tsx | 27 +- .../common/dialogs/ConfirmationDialog.tsx | 23 +- .../common/dialogs/DataViewerDialog/index.tsx | 18 +- .../components/MatrixContent.tsx | 15 +- .../dialogs/DatabaseUploadDialog/index.tsx | 14 +- .../common/dialogs/DigestDialog.tsx | 21 +- .../components/common/dialogs/FormDialog.tsx | 36 +- .../components/common/dialogs/OkDialog.tsx | 11 +- .../common/dialogs/UploadDialog.tsx | 27 +- .../common/fieldEditors/BooleanFE.tsx | 18 +- .../common/fieldEditors/CheckBoxFE.tsx | 18 +- .../common/fieldEditors/CheckboxesTagsFE.tsx | 15 +- .../fieldEditors/ColorPickerFE/index.tsx | 20 +- .../fieldEditors/ColorPickerFE/utils.ts | 8 +- .../common/fieldEditors/ListFE/index.tsx | 52 +- .../common/fieldEditors/ListFE/utils.ts | 4 +- .../common/fieldEditors/NumberFE.tsx | 2 +- .../common/fieldEditors/PasswordFE.tsx | 2 +- .../common/fieldEditors/RadioFE.tsx | 15 +- .../common/fieldEditors/SearchFE.tsx | 13 +- .../common/fieldEditors/SelectFE.tsx | 10 +- .../common/fieldEditors/StringFE.tsx | 2 +- .../common/fieldEditors/SwitchFE.tsx | 14 +- .../components/common/loaders/AppLoader.tsx | 11 +- .../common/loaders/GlobalPageLoadingError.tsx | 18 +- .../common/loaders/SimpleLoader.tsx | 7 +- .../src/components/common/page/BasicPage.tsx | 5 +- .../src/components/common/page/EmptyView.tsx | 8 +- .../src/components/common/page/RootPage.tsx | 11 +- .../common/utils/UsePromiseCond.tsx | 17 +- .../src/components/common/utils/constants.ts | 2 +- .../src/components/wrappers/LoginWrapper.tsx | 15 +- .../MaintenanceWrapper/MessageInfoDialog.tsx | 7 +- .../wrappers/MaintenanceWrapper/index.tsx | 4 +- .../components/wrappers/MenuWrapper/index.tsx | 42 +- .../components/wrappers/MenuWrapper/styles.ts | 6 +- webapp/src/hoc/reactHookFormSupport.tsx | 64 +- webapp/src/hooks/useBlocker.ts | 2 +- webapp/src/hooks/useCloseFormSecurity.ts | 5 +- webapp/src/hooks/useDebounce.ts | 10 +- webapp/src/hooks/useDebouncedEffect.ts | 17 +- webapp/src/hooks/useDebouncedState.ts | 8 +- webapp/src/hooks/useEnqueueErrorSnackbar.tsx | 8 +- webapp/src/hooks/useNavigateOnCondition.ts | 4 +- .../src/hooks/useOperationInProgressCount.ts | 4 +- webapp/src/hooks/usePromise.ts | 8 +- webapp/src/hooks/usePromiseHandler.ts | 7 +- .../src/hooks/usePromiseWithSnackbarError.ts | 2 +- webapp/src/hooks/useUpdateEffectOnce.ts | 2 +- webapp/src/i18n.ts | 4 +- webapp/src/index.tsx | 2 +- .../components/UseAsyncAppSelectorCond.tsx | 11 +- webapp/src/redux/ducks/auth.ts | 76 +- webapp/src/redux/ducks/groups.ts | 25 +- webapp/src/redux/ducks/index.ts | 4 +- webapp/src/redux/ducks/studies.ts | 145 +- webapp/src/redux/ducks/studyMaps.ts | 223 +- webapp/src/redux/ducks/studySyntheses.ts | 53 +- webapp/src/redux/ducks/ui.ts | 22 +- webapp/src/redux/ducks/users.ts | 25 +- webapp/src/redux/hooks/useAppDispatch.ts | 2 +- webapp/src/redux/hooks/useAppSelector.ts | 4 +- webapp/src/redux/hooks/useAsyncAppSelector.ts | 8 +- webapp/src/redux/hooks/useStudyMaps.ts | 22 +- webapp/src/redux/hooks/useStudySynthesis.ts | 14 +- .../middlewares/localStorageMiddleware.ts | 4 +- webapp/src/redux/selectors.ts | 192 +- webapp/src/redux/store.ts | 6 +- webapp/src/redux/utils.ts | 23 +- webapp/src/services/api/auth.ts | 9 +- webapp/src/services/api/client.ts | 9 +- webapp/src/services/api/downloads.ts | 7 +- webapp/src/services/api/launcher.ts | 4 +- webapp/src/services/api/matrix.ts | 31 +- .../api/studies/config/playlist/index.ts | 9 +- .../studies/config/thematicTrimming/index.ts | 4 +- .../studies/config/thematicTrimming/types.ts | 2 +- .../src/services/api/studies/links/index.ts | 11 +- .../src/services/api/studies/links/types.ts | 11 +- webapp/src/services/api/studies/raw/index.ts | 24 +- webapp/src/services/api/studies/raw/types.ts | 4 +- .../services/api/studies/tableMode/index.ts | 11 +- .../services/api/studies/tableMode/types.ts | 9 +- webapp/src/services/api/studies/timeseries.ts | 10 +- webapp/src/services/api/study.ts | 144 +- webapp/src/services/api/studydata.ts | 48 +- webapp/src/services/api/tasks/types.ts | 4 +- webapp/src/services/api/user.ts | 29 +- webapp/src/services/api/variant.ts | 81 +- webapp/src/services/api/xpansion.ts | 146 +- webapp/src/services/config.ts | 17 +- webapp/src/services/utils/index.ts | 64 +- webapp/src/services/utils/localStorage.ts | 10 +- webapp/src/services/webSocket/constants.ts | 3 +- webapp/src/services/webSocket/types.ts | 8 +- webapp/src/services/webSocket/ws.ts | 31 +- .../src/tests/mocks/mockHTMLCanvasElement.ts | 4 +- webapp/src/theme.ts | 1 - webapp/src/utils/feUtils.ts | 10 +- webapp/src/utils/i18nUtils.ts | 4 +- webapp/src/utils/muiUtils.ts | 2 +- webapp/src/utils/reactUtils.ts | 12 +- webapp/src/utils/stringUtils.ts | 14 +- webapp/src/utils/studiesUtils.ts | 131 +- webapp/src/utils/tsUtils.ts | 2 +- .../utils/validation/__tests__/array.test.ts | 12 +- .../utils/validation/__tests__/number.test.ts | 40 +- .../utils/validation/__tests__/string.test.ts | 44 +- webapp/src/utils/validation/array.ts | 7 +- webapp/src/utils/validation/number.ts | 13 +- webapp/src/utils/validation/string.ts | 25 +- webapp/tsconfig.json | 5 +- 409 files changed, 6817 insertions(+), 9439 deletions(-) delete mode 100644 webapp/.eslintrc.cjs create mode 100644 webapp/eslint.config.js diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 1338b744f4..2b67b599d4 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -27,7 +27,7 @@ jobs: - name: 💚 Set up Node.js uses: actions/setup-node@v4 with: - node-version: 18.16.1 + node-version: 22.13.0 - name: 💚 Install dependencies run: npm install diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c0f87cc216..a5207a3d20 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -69,7 +69,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 18.16.1 + node-version: 22.13.0 - name: Cache node modules uses: actions/cache@v4 with: @@ -92,7 +92,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 18.16.1 + node-version: 22.13.0 - name: Restore node modules uses: actions/cache@v4 with: @@ -112,7 +112,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 18.16.1 + node-version: 22.13.0 - name: Restore node modules uses: actions/cache@v4 with: @@ -132,7 +132,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 18.16.1 + node-version: 22.13.0 - name: Restore node modules uses: actions/cache@v4 with: diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 959376e0d5..dd0f10a9f5 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1096,7 +1096,7 @@ v2.15.0 (2023-09-30) ### Chore -* **github-actions:** update Node.js version to 18.16.1 [`b9988f6`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/b9988f6dedc5a653de00bf5becc917487ce589e6) +* **github-actions:** update Node.js version to 22.13.0 [`b9988f6`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/b9988f6dedc5a653de00bf5becc917487ce589e6) * correct handling of base class with no `__annotations__` in `AllOptionalMetaclass` [`d9ed61f`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/d9ed61fdaaa32974431b41e9cce44be09bb92e79) * correct indentation [`4af01b4`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/4af01b4023cb828093f8fd9b139f76429806c7b8) * increase line length limit to 120 characters for Black and iSort [`586fb43`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/586fb438607824899c66db66f183451fbe4a88e4) diff --git a/docs/developer-guide/install/0-INSTALL.md b/docs/developer-guide/install/0-INSTALL.md index 8206af7c6e..b223683f0a 100644 --- a/docs/developer-guide/install/0-INSTALL.md +++ b/docs/developer-guide/install/0-INSTALL.md @@ -9,7 +9,7 @@ A local build allows using Antares Web as a desktop application. Requirements: - python : 3.11.x -- node : 18.16.1 +- node : 22.13.0 Then perform the following steps: diff --git a/webapp/.eslintrc.cjs b/webapp/.eslintrc.cjs deleted file mode 100644 index 29270da704..0000000000 --- a/webapp/.eslintrc.cjs +++ /dev/null @@ -1,89 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2022: true, - }, - extends: [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", // TODO: replace with recommended-type-checked - "plugin:@typescript-eslint/stylistic", // TODO: replace with stylistic-type-checked - "plugin:react/recommended", - "plugin:react/jsx-runtime", - "plugin:react-hooks/recommended", - "plugin:jsdoc/recommended-typescript", - "plugin:prettier/recommended", // Must be the last one - ], - plugins: [ - "license-header", - "react-refresh", - ], - ignorePatterns: [ - "dist", - "license-header.js", - ".eslintrc.cjs", - ], - parser: "@typescript-eslint/parser", - parserOptions: { - // `ecmaVersion` is automatically sets by `esXXXX` in `env` - sourceType: "module", - project: ["./tsconfig.json", "./tsconfig.node.json"], - tsconfigRootDir: __dirname, - }, - settings: { - react: { - version: "detect", - }, - }, - rules: { - "@typescript-eslint/array-type": ["error", { default: "array-simple" }], - "@typescript-eslint/no-unused-vars": [ - "error", - { args: "none", ignoreRestSiblings: true }, - ], - camelcase: [ - "error", - { - properties: "never", // TODO: remove when server responses are camel case - allow: [ - "MRT_", // For material-react-table - ], - }, - ], - curly: "error", - "jsdoc/no-defaults": "off", - "jsdoc/require-jsdoc": "off", - "jsdoc/require-hyphen-before-param-description": "warn", - "jsdoc/tag-lines": ["warn", "any", { startLines: 1 }], // Expected 1 line after block description - "license-header/header": ["error", "license-header.js"], - "no-console": "warn", - "no-param-reassign": [ - "error", - { - props: true, - ignorePropertyModificationsForRegex: [ - // For immer, 'acc' for - "^draft", - // For `Array.prototype.reduce()` - "acc", - "accumulator", - ], - }, - ], - "no-use-before-define": [ - "error", - { - // Function declarations are hoisted, so it’s safe. - functions: false, - }, - ], - "react-refresh/only-export-components": [ - "warn", - { allowConstantExport: true }, - ], - "react/hook-use-state": "error", - "react/prop-types": "off", - "react/self-closing-comp": "error", - "require-await": "warn", // TODO: switch to "error" when the quantity of warning will be low - }, -}; diff --git a/webapp/.nvmrc b/webapp/.nvmrc index 3876fd4986..6fa8dec4cd 100644 --- a/webapp/.nvmrc +++ b/webapp/.nvmrc @@ -1 +1 @@ -18.16.1 +22.13.0 diff --git a/webapp/.prettierrc.json b/webapp/.prettierrc.json index 168d9d2a0c..b1e09779e9 100644 --- a/webapp/.prettierrc.json +++ b/webapp/.prettierrc.json @@ -1,3 +1,4 @@ { - "endOfLine": "auto" + "endOfLine": "auto", + "printWidth": 100 } diff --git a/webapp/eslint.config.js b/webapp/eslint.config.js new file mode 100644 index 0000000000..5614d04606 --- /dev/null +++ b/webapp/eslint.config.js @@ -0,0 +1,130 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import globals from "globals"; +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import reactPlugin from "eslint-plugin-react"; +import reactHookPlugin from "eslint-plugin-react-hooks"; +import jsdocPlugin from "eslint-plugin-jsdoc"; +import prettierPluginRecommended from "eslint-plugin-prettier/recommended"; +import licenseHeaderPlugin from "eslint-plugin-license-header"; +import reactRefreshPlugin from "eslint-plugin-react-refresh"; + +export default [ + // Must be defined here to be applied to all configurations. + // cf. https://github.com/eslint/eslint/discussions/18304 + { + ignores: ["dist/*", "license-header.js"], + }, + eslint.configs.recommended, + ...tseslint.configs.recommended, + ...tseslint.configs.stylistic, + { + ...reactPlugin.configs.flat.recommended, + settings: { + react: { + version: "detect", + }, + }, + }, + reactPlugin.configs.flat["jsx-runtime"], + jsdocPlugin.configs["flat/recommended-typescript"], + prettierPluginRecommended, // Must be the last one + { + languageOptions: { + ecmaVersion: 2022, + sourceType: "module", + globals: { + ...globals.browser, + ...globals.es2022, + }, + }, + plugins: { + "license-header": licenseHeaderPlugin, + "react-hooks": reactHookPlugin, + "react-refresh": reactRefreshPlugin, + }, + rules: { + ...reactHookPlugin.configs.recommended.rules, + "@typescript-eslint/array-type": ["error", { default: "array-simple" }], + "@typescript-eslint/no-restricted-imports": [ + "error", + { + paths: [ + { + name: "lodash", + message: + 'Import method directly `import [METHOD] from "lodash/[METHOD]"` (safest for bundle size).', + allowTypeImports: true, + }, + ], + patterns: [ + { + group: ["react"], + importNamePattern: + "^(React|Function|Ref|Mutable|CSS|Component|Props|Form)|(Event|Handler|Attributes)$", + message: + 'Use `React.[TYPE]` (e.g. `React.ReactNode`) instead of importing it directly from "react".', + }, + ], + }, + ], + "@typescript-eslint/no-unused-expressions": ["error", { allowTernary: true }], + "@typescript-eslint/no-unused-vars": ["error", { args: "none", ignoreRestSiblings: true }], + camelcase: [ + "error", + { + properties: "never", // TODO: remove when server responses are camel case + allow: [ + "MRT_", // For material-react-table + ], + }, + ], + curly: "error", + "jsdoc/no-defaults": "off", + "jsdoc/require-jsdoc": "off", + "jsdoc/require-hyphen-before-param-description": "warn", + "jsdoc/tag-lines": ["warn", "any", { startLines: 1 }], // Expected 1 line after block description + "license-header/header": ["error", "license-header.js"], + "no-console": "warn", + "no-duplicate-imports": "error", + "no-param-reassign": [ + "error", + { + props: true, + ignorePropertyModificationsForRegex: [ + // For immer, 'acc' for + "^draft", + // For `Array.prototype.reduce()` + "acc", + "accumulator", + ], + }, + ], + "no-use-before-define": [ + "error", + { + // Function declarations are hoisted, so it’s safe. + functions: false, + }, + ], + "react-refresh/only-export-components": ["warn", { allowConstantExport: true }], + "react/hook-use-state": "error", + "react/prop-types": "off", + "react/self-closing-comp": "error", + "require-await": "warn", // TODO: switch to "error" when the quantity of warning will be low + }, + }, +]; diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 7fcf0b0270..2f7b3c31a4 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -69,12 +69,12 @@ "xml-js": "1.6.11" }, "devDependencies": { + "@eslint/js": "9.18.0", "@testing-library/jest-dom": "6.5.0", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", "@total-typescript/ts-reset": "0.6.1", "@types/d3": "5.16.0", - "@types/date-fns": "2.6.0", "@types/debug": "4.1.12", "@types/draft-convert": "2.1.8", "@types/draft-js": "0.11.18", @@ -94,43 +94,44 @@ "@types/react-virtualized-auto-sizer": "1.0.4", "@types/react-window": "1.8.8", "@types/swagger-ui-react": "4.18.3", - "@types/testing-library__jest-dom": "6.0.0", "@types/tinycolor2": "1.4.6", "@types/uuid": "10.0.0", - "@typescript-eslint/eslint-plugin": "7.2.0", - "@typescript-eslint/parser": "7.2.0", "@vitejs/plugin-react-swc": "3.7.0", "@vitest/coverage-v8": "2.1.1", "@vitest/ui": "2.1.1", - "eslint": "8.57.1", - "eslint-config-prettier": "9.1.0", - "eslint-plugin-jsdoc": "48.10.0", + "eslint": "9.18.0", + "eslint-config-prettier": "10.0.1", + "eslint-plugin-jsdoc": "50.6.1", "eslint-plugin-license-header": "0.6.1", "eslint-plugin-prettier": "5.2.1", - "eslint-plugin-react": "7.37.0", - "eslint-plugin-react-hooks": "4.6.2", - "eslint-plugin-react-refresh": "0.4.12", + "eslint-plugin-react": "7.37.4", + "eslint-plugin-react-hooks": "5.1.0", + "eslint-plugin-react-refresh": "0.4.18", + "globals": "15.14.0", "husky": "9.1.6", "jsdom": "25.0.1", - "prettier": "3.3.3", + "prettier": "3.4.2", "typescript": "5.4.5", + "typescript-eslint": "8.19.1", "vite": "5.4.8", "vitest": "2.1.1" }, "engines": { - "node": "18.16.1" + "node": "22.13.0" } }, "node_modules/@adobe/css-tools": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", - "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", - "dev": true + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.1.tgz", + "integrity": "sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==", + "dev": true, + "license": "MIT" }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -139,12 +140,38 @@ "node": ">=6.0.0" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.2.tgz", + "integrity": "sha512-RtWv9jFN2/bLExuZgFFZ0I3pWWeezAHGgrmjqGGWclATl1aDe3yhCUaI0Ilkp6OCk9zX7+FjvDasEX8Q9Rxc5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^11.0.2" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -152,28 +179,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -191,30 +220,34 @@ "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6", + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -223,26 +256,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -252,81 +286,61 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", + "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.26.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -340,6 +354,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -355,6 +370,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -366,6 +382,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -374,13 +391,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -390,9 +407,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -401,9 +419,10 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.6.tgz", - "integrity": "sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", + "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", + "license": "MIT", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -413,28 +432,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.5", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -442,14 +463,23 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", + "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -459,17 +489,20 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@braintree/sanitize-url": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.0.2.tgz", - "integrity": "sha512-NVf/1YycDMs6+FxS0Tb/W8MjJRDQdXF+tBfDtZ5UZeiRUkTmwKc4vmYCKZTyymfJk1gnMsauvZSX/HiV9jOABw==" + "integrity": "sha512-NVf/1YycDMs6+FxS0Tb/W8MjJRDQdXF+tBfDtZ5UZeiRUkTmwKc4vmYCKZTyymfJk1gnMsauvZSX/HiV9jOABw==", + "license": "MIT" }, "node_modules/@choojs/findup": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@choojs/findup/-/findup-0.2.1.tgz", "integrity": "sha512-YstAqNb0MCN8PjdLCDfRsBcGVRN41f3vgLvaI0IrIcBp4AqILRSS0DeWNGkicC+f/zRIPJLc+9RURVSepwvfBw==", + "license": "MIT", "dependencies": { "commander": "^2.15.1" }, @@ -477,16 +510,132 @@ "findup": "bin/findup.js" } }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", + "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", + "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", + "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.1", + "@csstools/css-calc": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@emotion/babel-plugin": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", - "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", - "@emotion/serialize": "^1.2.0", + "@emotion/serialize": "^1.3.3", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", @@ -496,13 +645,14 @@ } }, "node_modules/@emotion/cache": { - "version": "11.13.1", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", - "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", "dependencies": { "@emotion/memoize": "^0.9.0", "@emotion/sheet": "^1.4.0", - "@emotion/utils": "^1.4.0", + "@emotion/utils": "^1.4.2", "@emotion/weak-memoize": "^0.4.0", "stylis": "4.2.0" } @@ -510,12 +660,14 @@ "node_modules/@emotion/hash": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", - "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" }, "node_modules/@emotion/is-prop-valid": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", "dependencies": { "@emotion/memoize": "^0.9.0" } @@ -523,12 +675,14 @@ "node_modules/@emotion/memoize": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", - "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" }, "node_modules/@emotion/react": { "version": "11.13.3", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.12.0", @@ -549,26 +703,29 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", - "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", "dependencies": { "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", "@emotion/unitless": "^0.10.0", - "@emotion/utils": "^1.4.1", + "@emotion/utils": "^1.4.2", "csstype": "^3.0.2" } }, "node_modules/@emotion/sheet": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", - "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" }, "node_modules/@emotion/styled": { "version": "11.13.0", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.12.0", @@ -590,35 +747,40 @@ "node_modules/@emotion/unitless": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", - "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", - "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@emotion/utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", - "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" }, "node_modules/@emotion/weak-memoize": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", - "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz", - "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==", + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz", + "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==", "dev": true, + "license": "MIT", "dependencies": { "comment-parser": "1.4.1", "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~4.0.0" + "jsdoc-type-pratt-parser": "~4.1.0" }, "engines": { "node": ">=16" @@ -632,6 +794,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -648,6 +811,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -664,6 +828,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -680,6 +845,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -696,6 +862,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -712,6 +879,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -728,6 +896,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -744,6 +913,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -760,6 +930,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -776,6 +947,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -792,6 +964,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -808,6 +981,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -824,6 +998,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -840,6 +1015,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -856,6 +1032,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -872,6 +1049,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -888,6 +1066,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -904,6 +1083,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -920,6 +1100,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -936,6 +1117,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -952,6 +1134,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -968,6 +1151,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -984,6 +1168,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -993,39 +1178,110 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.10.0.tgz", + "integrity": "sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1033,7 +1289,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -1044,21 +1300,20 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1069,6 +1324,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1077,35 +1333,63 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.18.0.tgz", + "integrity": "sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==", "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz", + "integrity": "sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.10.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@floating-ui/core": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", - "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.9" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", - "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.8" + "@floating-ui/utils": "^0.2.9" } }, "node_modules/@floating-ui/react-dom": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" }, @@ -1115,14 +1399,16 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", - "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" }, "node_modules/@glideapps/glide-data-grid": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@glideapps/glide-data-grid/-/glide-data-grid-6.0.3.tgz", "integrity": "sha512-YXKggiNOaEemf0jP0jORq2EQKz+zXms+6mGzZc+q0mLMjmgzzoGLOQC1uYcynXSj1R61bd27JcPFsoH+Gj37Vg==", + "license": "MIT", "dependencies": { "@linaria/react": "^4.5.3", "canvas-hypertxt": "^1.0.3", @@ -1139,51 +1425,54 @@ "node_modules/@handsontable/pikaday": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@handsontable/pikaday/-/pikaday-1.0.0.tgz", - "integrity": "sha512-1VN6N38t5/DcjJ7y7XUYrDx1LuzvvzlrFdBdMG90Qo1xc8+LXHqbWbsTEm5Ec5gXTEbDEO53vUT35R+2COmOyg==" + "integrity": "sha512-1VN6N38t5/DcjJ7y7XUYrDx1LuzvvzlrFdBdMG90Qo1xc8+LXHqbWbsTEm5Ec5gXTEbDEO53vUT35R+2COmOyg==", + "license": "(0BSD OR MIT)" }, "node_modules/@handsontable/react": { "version": "14.5.0", "resolved": "https://registry.npmjs.org/@handsontable/react/-/react-14.5.0.tgz", "integrity": "sha512-Z6weZTELY1hqgW8TDno000xScd+I1sQ0DcswX2AdnCCwvvQkmC74xmIREalwtFE9CCi0Y/kiSvq/G0bYgl//pQ==", + "license": "SEE LICENSE IN LICENSE.txt", "peerDependencies": { "handsontable": ">=14.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, + "license": "Apache-2.0", "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1191,6 +1480,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1199,17 +1489,25 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@icons/material": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", + "license": "MIT", "peerDependencies": { "react": "*" } @@ -1219,6 +1517,7 @@ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1231,46 +1530,21 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1284,6 +1558,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1292,6 +1567,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1300,6 +1576,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", "peer": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -1309,12 +1586,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1324,6 +1603,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/@linaria/core/-/core-4.5.4.tgz", "integrity": "sha512-vMs/5iU0stxjfbBCxobIgY+wSQx4G8ukNwrhjPVD+6bF9QrTwi5rl0mKaCMxaGMjnfsLRiiM3i+hnWLIEYLdSg==", + "license": "MIT", "dependencies": { "@linaria/logger": "^4.5.0", "@linaria/tags": "^4.5.4", @@ -1337,6 +1617,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/@linaria/logger/-/logger-4.5.0.tgz", "integrity": "sha512-XdQLk242Cpcsc9a3Cz1ktOE5ysTo2TpxdeFQEPwMm8Z/+F/S6ZxBDdHYJL09srXWz3hkJr3oS2FPuMZNH1HIxw==", + "license": "MIT", "dependencies": { "debug": "^4.1.1", "picocolors": "^1.0.0" @@ -1349,6 +1630,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/@linaria/react/-/react-4.5.4.tgz", "integrity": "sha512-/dhCVCsfdGPfQCPV0q5yy+DDlFXepvfXrw/os2fC+Xo1v9J/9gyiaBBWHzcumauvNNFj8aN6vRkj89fMujPHew==", + "license": "MIT", "dependencies": { "@emotion/is-prop-valid": "^1.2.0", "@linaria/core": "^4.5.4", @@ -1369,6 +1651,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/@linaria/tags/-/tags-4.5.4.tgz", "integrity": "sha512-HPxLB6HlJWLi6o8+8lTLegOmDnbMbuzEE+zzunaPZEGSoIIYx8HAv5VbY/sG/zNyxDElk6laiAwEVWN8h5/zxg==", + "license": "MIT", "dependencies": { "@babel/generator": "^7.22.9", "@linaria/logger": "^4.5.0", @@ -1382,6 +1665,7 @@ "version": "4.5.3", "resolved": "https://registry.npmjs.org/@linaria/utils/-/utils-4.5.3.tgz", "integrity": "sha512-tSpxA3Zn0DKJ2n/YBnYAgiDY+MNvkmzAHrD8R9PKrpGaZ+wz1jQEmE1vGn1cqh8dJyWK0NzPAA8sf1cqa+RmAg==", + "license": "MIT", "dependencies": { "@babel/core": "^7.22.9", "@babel/generator": "^7.22.9", @@ -1404,6 +1688,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "license": "ISC", "dependencies": { "get-stream": "^6.0.1", "minimist": "^1.2.6" @@ -1415,7 +1700,8 @@ "node_modules/@mapbox/geojson-types": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", - "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==" + "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==", + "license": "ISC" }, "node_modules/@mapbox/jsonlint-lines-primitives": { "version": "2.0.2", @@ -1429,6 +1715,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==", + "license": "BSD-3-Clause", "peerDependencies": { "mapbox-gl": ">=0.32.1 <2.0.0" } @@ -1436,22 +1723,26 @@ "node_modules/@mapbox/point-geometry": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", - "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "license": "ISC" }, "node_modules/@mapbox/tiny-sdf": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", - "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==" + "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==", + "license": "BSD-2-Clause" }, "node_modules/@mapbox/unitbezier": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", - "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==", + "license": "BSD-2-Clause" }, "node_modules/@mapbox/vector-tile": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "license": "BSD-3-Clause", "dependencies": { "@mapbox/point-geometry": "~0.1.0" } @@ -1460,14 +1751,16 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "license": "ISC", "engines": { "node": ">=6.0.0" } }, "node_modules/@maplibre/maplibre-gl-style-spec": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.3.1.tgz", - "integrity": "sha512-5ueL4UDitzVtceQ8J4kY+Px3WK+eZTsmGwha3MBKHKqiHvKrjWWwBCIl1K8BuJSc5OFh83uI8IFNoFvQxX2uUw==", + "version": "20.4.0", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz", + "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==", + "license": "ISC", "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/unitbezier": "^0.0.1", @@ -1475,7 +1768,6 @@ "minimist": "^1.2.8", "quickselect": "^2.0.0", "rw": "^1.3.3", - "sort-object": "^3.0.3", "tinyqueue": "^3.0.0" }, "bin": { @@ -1487,17 +1779,20 @@ "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/@mapbox/unitbezier": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", - "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" }, "node_modules/@maplibre/maplibre-gl-style-spec/node_modules/tinyqueue": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", - "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==" + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" }, "node_modules/@mui/base": { "version": "5.0.0-beta.58", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.58.tgz", "integrity": "sha512-P0E7ZrxOuyYqBvVv9w8k7wm+Xzx/KRu+BGgFcR2htTsGCpJNQJCSUXNUZ50MUmSU9hzqhwbQWNXhV1MBTl6F7A==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.0", "@floating-ui/react-dom": "^2.1.1", @@ -1529,6 +1824,7 @@ "version": "6.0.0-rc.0", "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.0.0-rc.0.tgz", "integrity": "sha512-tBp0ILEXDL0bbDDT8PnZOjCqSm5Dfk2N0Z45uzRw+wVl6fVvloC9zw8avl+OdX1Bg3ubs/ttKn8nRNv17bpM5A==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.0", "@mui/types": "^7.2.15", @@ -1555,9 +1851,10 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.1.tgz", - "integrity": "sha512-VdQC1tPIIcZAnf62L2M1eQif0x2vlKg3YK4kGYbtijSH4niEgI21GnstykW1vQIs+Bc6L+Hua2GATYVjilJ22A==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.3.1.tgz", + "integrity": "sha512-2OmnEyoHpj5//dJJpMuxOeLItCCHdf99pjMFfUFdBteCunAK9jW+PwEo4mtdGcLs7P+IgZ+85ypd52eY4AigoQ==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" @@ -1567,6 +1864,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.1.tgz", "integrity": "sha512-sy/YKwcLPW8VcacNP2uWMYR9xyWuwO9NN9FXuGEU90bRshBXj8pdKk+joe3TCW7oviVS3zXLHlc94wQ0jNsQRQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.6" }, @@ -1592,6 +1890,7 @@ "version": "6.0.0-beta.10", "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-6.0.0-beta.10.tgz", "integrity": "sha512-eqCBz5SZS8Un9To3UcjH01AxkOOgvme/g0ZstFC8Nz1Kg5/EJMA0ByhKS5AvUMzUKrv0FXMdbuPqbBvF3bVrXg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.6", "@mui/base": "5.0.0-beta.58", @@ -1636,6 +1935,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.1.tgz", "integrity": "sha512-b+eULldTqtqTCbN++2BtBWCir/1LwEYw+2mIlOt2GiEUh1EBBw4/wIukGKKNt3xrCZqRA80yLLkV6tF61Lq3cA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.6", "@mui/core-downloads-tracker": "^6.1.1", @@ -1681,12 +1981,13 @@ } }, "node_modules/@mui/private-theming": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.1.tgz", - "integrity": "sha512-JlrjIdhyZUtewtdAuUsvi3ZnO0YS49IW4Mfz19ZWTlQ0sDGga6LNPVwHClWr2/zJK2we2BQx9/i8M32rgKuzrg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.3.1.tgz", + "integrity": "sha512-g0u7hIUkmXmmrmmf5gdDYv9zdAig0KoxhIQn1JN8IVqApzf/AyRhH3uDGx5mSvs8+a1zb4+0W6LC260SyTTtdQ==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.25.6", - "@mui/utils": "^6.1.1", + "@babel/runtime": "^7.26.0", + "@mui/utils": "^6.3.1", "prop-types": "^15.8.1" }, "engines": { @@ -1707,12 +2008,14 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.1.tgz", - "integrity": "sha512-HJyIoMpFb11fnHuRtUILOXgq6vj4LhIlE8maG4SwP/W+E5sa7HFexhnB3vOMT7bKys4UKNxhobC8jwWxYilGsA==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.3.1.tgz", + "integrity": "sha512-/7CC0d2fIeiUxN5kCCwYu4AWUDd9cCTxWCyo0v/Rnv6s8uk6hWgJC3VLZBoDENBHf/KjqDZuYJ2CR+7hD6QYww==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.25.6", - "@emotion/cache": "^11.13.1", + "@babel/runtime": "^7.26.0", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", "@emotion/sheet": "^1.4.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -1739,15 +2042,16 @@ } }, "node_modules/@mui/system": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.1.tgz", - "integrity": "sha512-PaYsCz2tUOcpu3T0okDEsSuP/yCDIj9JZ4Tox1JovRSKIjltHpXPsXZSGr3RiWdtM1MTQMFMCZzu0+CKbyy+Kw==", - "dependencies": { - "@babel/runtime": "^7.25.6", - "@mui/private-theming": "^6.1.1", - "@mui/styled-engine": "^6.1.1", - "@mui/types": "^7.2.17", - "@mui/utils": "^6.1.1", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.3.1.tgz", + "integrity": "sha512-AwqQ3EAIT2np85ki+N15fF0lFXX1iFPqenCzVOSl3QXKy2eifZeGd9dGtt7pGMoFw5dzW4dRGGzRpLAq9rkl7A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/private-theming": "^6.3.1", + "@mui/styled-engine": "^6.3.1", + "@mui/types": "^7.2.21", + "@mui/utils": "^6.3.1", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -1778,9 +2082,10 @@ } }, "node_modules/@mui/types": { - "version": "7.2.17", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.17.tgz", - "integrity": "sha512-oyumoJgB6jDV8JFzRqjBo2daUuHpzDjoO/e3IrRhhHo/FxJlaVhET6mcNrKHUq2E+R+q3ql0qAtvQ4rfWHhAeQ==", + "version": "7.2.21", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.21.tgz", + "integrity": "sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww==", + "license": "MIT", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -1791,16 +2096,17 @@ } }, "node_modules/@mui/utils": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.1.tgz", - "integrity": "sha512-HlRrgdJSPbYDXPpoVMWZV8AE7WcFtAk13rWNWAEVWKSanzBBkymjz3km+Th/Srowsh4pf1fTSP1B0L116wQBYw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.3.1.tgz", + "integrity": "sha512-sjGjXAngoio6lniQZKJ5zGfjm+LD2wvLwco7FbKe1fu8A7VIFmz2SwkLb+MDPLNX1lE7IscvNNyh1pobtZg2tw==", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.25.6", - "@mui/types": "^7.2.17", - "@types/prop-types": "^15.7.12", + "@babel/runtime": "^7.26.0", + "@mui/types": "^7.2.21", + "@types/prop-types": "^15.7.14", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.3.1" + "react-is": "^19.0.0" }, "engines": { "node": ">=14.0.0" @@ -1819,15 +2125,22 @@ } } }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, "node_modules/@mui/x-date-pickers": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.18.0.tgz", - "integrity": "sha512-12tXIoMj9vpS8fS/bS3kWPCoVrH38vNGCxgplI0vOnUrN9rJuYJz3agLPJe1S0xciTw+9W8ZSe3soaW+owoz1Q==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.23.6.tgz", + "integrity": "sha512-jt6rEAYLju3NZe3y2S+I5KcTiSHV79FW0jeNUEUTceg1qsPzseHbND66k3zVF0hO3N2oZtLtPywof6vN5Doe+Q==", + "license": "MIT", "peer": true, "dependencies": { - "@babel/runtime": "^7.25.6", - "@mui/utils": "^5.16.6", - "@mui/x-internals": "7.18.0", + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0", + "@mui/x-internals": "7.23.6", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", "prop-types": "^15.8.1", @@ -1846,14 +2159,14 @@ "@mui/material": "^5.15.14 || ^6.0.0", "@mui/system": "^5.15.14 || ^6.0.0", "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0", - "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0", + "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0 || ^4.0.0-0", "dayjs": "^1.10.7", "luxon": "^3.0.2", "moment": "^2.29.4", - "moment-hijri": "^2.1.2", + "moment-hijri": "^2.1.2 || ^3.0.0", "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -1885,43 +2198,15 @@ } } }, - "node_modules/@mui/x-date-pickers/node_modules/@mui/utils": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.6.tgz", - "integrity": "sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/types": "^7.2.15", - "@types/prop-types": "^15.7.12", - "clsx": "^2.1.1", - "prop-types": "^15.8.1", - "react-is": "^18.3.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/x-internals": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.18.0.tgz", - "integrity": "sha512-lzCHOWIR0cAIY1bGrWSprYerahbnH5C31ql/2OWCEjcngL2NAV1M6oKI2Vp4HheqzJ822c60UyWyapvyjSzY/A==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.23.6.tgz", + "integrity": "sha512-hT1Pa4PNCnxwiauPbYMC3p4DiEF1x05Iu4C1MtC/jMJ1LtthymLmTuQ6ZQ53/R9FeqK6sYd6A6noR+vNMjp5DA==", + "license": "MIT", + "peer": true, "dependencies": { - "@babel/runtime": "^7.25.6", - "@mui/utils": "^5.16.6" + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0" }, "engines": { "node": ">=14.0.0" @@ -1931,42 +2216,14 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "react": "^17.0.0 || ^18.0.0" - } - }, - "node_modules/@mui/x-internals/node_modules/@mui/utils": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.6.tgz", - "integrity": "sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==", - "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/types": "^7.2.15", - "@types/prop-types": "^15.7.12", - "clsx": "^2.1.1", - "prop-types": "^15.8.1", - "react-is": "^18.3.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/@mui/x-tree-view": { "version": "7.18.0", "resolved": "https://registry.npmjs.org/@mui/x-tree-view/-/x-tree-view-7.18.0.tgz", "integrity": "sha512-3UJAYtBquc0SzKxEEdM68XlKOuuCl70ktZPqqI3z4wTZ0HK445XXc32t/s0VPIL94kRxWQcGPpgWFauScDwhug==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.6", "@mui/utils": "^5.16.6", @@ -2001,16 +2258,17 @@ } }, "node_modules/@mui/x-tree-view/node_modules/@mui/utils": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.6.tgz", - "integrity": "sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==", + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.14.tgz", + "integrity": "sha512-wn1QZkRzSmeXD1IguBVvJJHV3s6rxJrfb6YuC9Kk6Noh9f8Fb54nUs5JRkKm+BOerRhj5fLg05Dhx/H3Ofb8Mg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.9", "@mui/types": "^7.2.15", "@types/prop-types": "^15.7.12", "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.3.1" + "react-is": "^19.0.0" }, "engines": { "node": ">=12.0.0" @@ -2020,8 +2278,8 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -2029,11 +2287,38 @@ } } }, + "node_modules/@mui/x-tree-view/node_modules/@mui/x-internals": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.18.0.tgz", + "integrity": "sha512-lzCHOWIR0cAIY1bGrWSprYerahbnH5C31ql/2OWCEjcngL2NAV1M6oKI2Vp4HheqzJ822c60UyWyapvyjSzY/A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/utils": "^5.16.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@mui/x-tree-view/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2047,6 +2332,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -2056,6 +2342,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2069,6 +2356,7 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -2079,6 +2367,7 @@ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -2089,12 +2378,14 @@ "node_modules/@plotly/d3": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/@plotly/d3/-/d3-3.8.2.tgz", - "integrity": "sha512-wvsNmh1GYjyJfyEBPKJLTMzgf2c2bEbSIL50lmqVUi+o1NHaLPi1Lb4v7VxXXJn043BhNyrxUrWI85Q+zmjOVA==" + "integrity": "sha512-wvsNmh1GYjyJfyEBPKJLTMzgf2c2bEbSIL50lmqVUi+o1NHaLPi1Lb4v7VxXXJn043BhNyrxUrWI85Q+zmjOVA==", + "license": "BSD-3-Clause" }, "node_modules/@plotly/d3-sankey": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/@plotly/d3-sankey/-/d3-sankey-0.7.2.tgz", "integrity": "sha512-2jdVos1N3mMp3QW0k2q1ph7Gd6j5PY1YihBrwpkFnKqO+cqtZq3AdEYUeSGXMeLsBDQYiqTVcihYfk8vr5tqhw==", + "license": "BSD-3-Clause", "dependencies": { "d3-array": "1", "d3-collection": "1", @@ -2105,6 +2396,7 @@ "version": "0.33.1", "resolved": "https://registry.npmjs.org/@plotly/d3-sankey-circular/-/d3-sankey-circular-0.33.1.tgz", "integrity": "sha512-FgBV1HEvCr3DV7RHhDsPXyryknucxtfnLwPtCKKxdolKyTFYoLX/ibEfX39iFYIL7DYbVeRtP43dbFcrHNE+KQ==", + "license": "MIT", "dependencies": { "d3-array": "^1.2.1", "d3-collection": "^1.0.4", @@ -2116,6 +2408,7 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/@plotly/mapbox-gl/-/mapbox-gl-1.13.4.tgz", "integrity": "sha512-sR3/Pe5LqT/fhYgp4rT4aSFf1rTsxMbGiH6Hojc7PH36ny5Bn17iVFUjpzycafETURuFbLZUfjODO8LvSI+5zQ==", + "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/geojson-types": "^1.0.2", @@ -2148,6 +2441,7 @@ "version": "3.1.9", "resolved": "https://registry.npmjs.org/@plotly/point-cluster/-/point-cluster-3.1.9.tgz", "integrity": "sha512-MwaI6g9scKf68Orpr1pHZ597pYx9uP8UEFXLPbsCmuw3a84obwz6pnMXGc90VhgDNeNiLEdlmuK7CPo+5PIxXw==", + "license": "MIT", "dependencies": { "array-bounds": "^1.0.1", "binary-search-bounds": "^2.0.4", @@ -2165,12 +2459,14 @@ "version": "1.0.0-next.28", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -2180,6 +2476,7 @@ "version": "1.9.6", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.6.tgz", "integrity": "sha512-Gc4ikl90ORF4viIdAkY06JNUnODjKfGxZRwATM30EdHq8hLSVoSrwXne5dd739yenP5bJxAX7tLuOWK5RPGtrw==", + "license": "MIT", "dependencies": { "immer": "^9.0.21", "redux": "^4.2.1", @@ -2203,231 +2500,299 @@ "version": "9.0.21", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.5.tgz", - "integrity": "sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", + "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.5.tgz", - "integrity": "sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", + "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.5.tgz", - "integrity": "sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", + "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.5.tgz", - "integrity": "sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", + "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", + "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", + "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.5.tgz", - "integrity": "sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", + "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.5.tgz", - "integrity": "sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", + "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.5.tgz", - "integrity": "sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.30.1.tgz", + "integrity": "sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.5.tgz", - "integrity": "sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.30.1.tgz", + "integrity": "sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", + "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.5.tgz", - "integrity": "sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", + "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.5.tgz", - "integrity": "sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", + "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.5.tgz", - "integrity": "sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", + "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.5.tgz", - "integrity": "sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", + "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.5.tgz", - "integrity": "sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", + "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.5.tgz", - "integrity": "sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", + "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.5.tgz", - "integrity": "sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", + "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.5.tgz", - "integrity": "sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", + "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true, + "license": "Apache-2.0" + }, "node_modules/@sphinxxxx/color-conversion": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz", - "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==" + "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==", + "license": "ISC" }, "node_modules/@swagger-api/apidom-ast": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-alpha.9.tgz", - "integrity": "sha512-SAOQrFSFwgDiI4QSIPDwAIJEb4Za+8bu45sNojgV3RMtCz+n4Agw66iqGsDib5YSI/Cg1h4AKFovT3iWdfGWfw==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-beta.6.tgz", + "integrity": "sha512-AAxEN/xTcH/ORpn/zEEuPPgtqX6/Q9EZC8RX2R7AlRdUeGZieE9OZ91mXYrg48FcHWi/xwWYqkPPHjyXTQkfww==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-error": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2435,13 +2800,14 @@ } }, "node_modules/@swagger-api/apidom-core": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-alpha.9.tgz", - "integrity": "sha512-vGl8BWRf6ODl39fxElcIOjRE2QG5AJhn8tTNMqjjHB/2WppNBuxOVStYZeVJoWfK03OPK8v4Fp/TAcaP9+R7DQ==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-beta.6.tgz", + "integrity": "sha512-gmHpE5+wJgUmpkb0C3ZIM6VsMXj0heujwQeXqEcFRkp1d0u4crCNmQ5iPTewzvILcnMbxac0AUFFKuJbBpqzPg==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-beta.6", + "@swagger-api/apidom-error": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "minim": "~0.23.8", "ramda": "~0.30.0", @@ -2451,36 +2817,39 @@ } }, "node_modules/@swagger-api/apidom-error": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-alpha.9.tgz", - "integrity": "sha512-FU/2sFSgsICB9HYFELJ79caRpXXzlAV41QTHsAM46WfRehbzZUQpOBQm4jRi3qJGSa/Jk+mQ7Vt8HLRFMpJFfg==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-beta.6.tgz", + "integrity": "sha512-bLttwjXj0u9pHIzc71L5rZWvhtcPFmGdvPDpXMoK4XOjmfpw9hqQKg1DGWKQHxNiMP/zlWAWO1RxjFQNYcO70g==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7" } }, "node_modules/@swagger-api/apidom-json-pointer": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-alpha.9.tgz", - "integrity": "sha512-/W8Ktbgbs29zdhed6KHTFk0qmuIRbvEFi8wu2MHGQ5UT4i99Bdu2OyUiayhnpejWztfQxDgL08pjrQPEwgY8Yg==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-beta.6.tgz", + "integrity": "sha512-9XdWnouDGnn8UCr48TgtB16e4s37L7ibWFFgn4ercSkUMsJKMzHULabZ005IKVfP20UbhdIa5/r2W/i8iRk8Vg==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-error": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-ns-api-design-systems": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-alpha.9.tgz", - "integrity": "sha512-aduC2vbwGgn6ia9IkKpqBYBaKyIDGM/80M3oU3DFgaYIIwynzuwVpN1TkBOLIFy3mAzkWoYKUS0jdZJhMy/6Ug==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-beta.6.tgz", + "integrity": "sha512-Qycf1LbBP5KxtxCeXHIAKazekKnz8kOHfnn2JT/FkWojM4reTECHBMi40DwQOQbj1CsWSasoTbnKjG64BxoJRg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-error": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2488,14 +2857,15 @@ } }, "node_modules/@swagger-api/apidom-ns-asyncapi-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-hZjxXJgMt517ADnAauWJh01k7WNRwkbWT5p6b7AXF2H3tl549A2hhLnIg3BBSE3GwB3Nv25GyrI3aA/1dFVC8A==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-beta.6.tgz", + "integrity": "sha512-bQ0eNdDYrrkr4Y4iyUcgXiYBFzj+wwJiBGKI8OBJ9hTVEDbDCb/8ZzlZw3wMQNGFMw6/NC2F6MEbocApDx9vnQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2503,13 +2873,14 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-alpha.9.tgz", - "integrity": "sha512-OfX4UBb08C0xD5+F80dQAM2yt5lXxcURWkVEeCwxz7i23BB3nNEbnZXNV91Qo9eaJflPh8dO9iiHQxvfw5IgSg==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-beta.6.tgz", + "integrity": "sha512-Cn4+CH8ZqniejbmbD7nfUzw/N+S9lwGztOB5ZSoS23r1/mFzcya/bTOSuUW6BJ4Pa1L+AvUWhqmRlzG66Ta0gA==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-beta.6", + "@swagger-api/apidom-core": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2517,15 +2888,16 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-alpha.9.tgz", - "integrity": "sha512-qzUVRSSrnlYGMhK6w57o/RboNvy1FO0iFgEnTk56dD4wN49JRNuFqKI18IgXc1W2r9tTTG70nG1khe4cPE8TNg==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-beta.6.tgz", + "integrity": "sha512-zwD2cKjbXBynMNFAyXHLsNz16Wbd4SOSehAZ1WJcWTJflC0GVk0kkFmzGFz92WI0YQihnrYwrAhpmZohUlHUWg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-error": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2533,15 +2905,16 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-alpha.9.tgz", - "integrity": "sha512-Zml8Z8VCckdFjvTogaec1dabd85hg1+xZDseWcCuD0tYkaTY/sZ8zzI0dz6/4HsKCb58qjiWSa0w60N8Syr6WQ==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-beta.6.tgz", + "integrity": "sha512-T1LMWiHitPJt9pM4G4FTPaGJntW8x6v/Y6236dEt8gO5aw5T3528PtaqEGfmI4uIvJO4dBwrobEte9GUXWVxig==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-error": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2549,15 +2922,16 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-WUZxt7Gs7P4EQsGtoD6cKAjf0uDJhkUxsIW9Bb4EAgO6tdp7LlXhbJ0fJ2QycCLY717SfJbvGLfhuSfTYo4Iow==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-beta.6.tgz", + "integrity": "sha512-SY+h67maS88egPr9o7E8yep2xdw4N/vRYO1vCRcX4Y6UfFpiAn3jSKxQkOP983DJGXwDLVirVML/ezb9VXbnDg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-error": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2565,14 +2939,15 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-0": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-alpha.9.tgz", - "integrity": "sha512-7ra5uoZGrfCn1LabfJLueChPcYXyg24//LCYBtjTstyueqd5Vp7JCPeP5NnJSAaqVAP47r8ygceBPoxNp9k1EQ==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-beta.6.tgz", + "integrity": "sha512-fqsF35X8O2yaENr74wbZtPqSgiuuomu9mT9KKj9P7z6in6SjBSTMMmGkbsjximdr+hVCrNm8ActDF1HRq3av7Q==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-error": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2580,15 +2955,16 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-nQOwNQgf0C8EVjf2loAAl4ifRuVOdcqycvXUdcTpsUfHN3fbndR8IKpb26mQNmnACmqgmX+LkbMdW9b+K6089g==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-beta.6.tgz", + "integrity": "sha512-GOtloezNXZExvhmSp5OT2NO7XLMwUY12stXUWl0bWR3O/6I6U522JFgoO9SHKxuSed5ateJpE7eR39HCJ/pyOQ==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-json-pointer": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-beta.6", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-json-pointer": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2596,14 +2972,15 @@ } }, "node_modules/@swagger-api/apidom-ns-workflows-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-yKo0p8OkQmDib93Kt1yqWmI7JsD6D9qUHxr/SCuAmNNWny1hxm7cZGoKJwJlGd0uAg84j4vmzWOlG3AsJbnT8g==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-1.0.0-beta.6.tgz", + "integrity": "sha512-5ViXxpioBNfkJJyGmgbp76OyvY3IRsfNwN9tXTl39vgpyPnQVtBPwhKwuViiqDr+GmyZgMCotB3QlYPNcxqEoA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -2611,263 +2988,323 @@ } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-alpha.9.tgz", - "integrity": "sha512-xfVMR4HrTzXU0HB4TtxwkNbUIa/cQrPa0BWutJZ0fMYMAtUox2s8GsFYnJfZP52XfpSHFM1VPclivorZqET14g==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-beta.6.tgz", + "integrity": "sha512-HLcCDO7QdBjPFQ/Mf4XmG0qcmwW+AnDZyPYzMOAyK1hU3xwQjAIn5zOlgp0feTe3vNUMzNY1NDHvCeDXSbN5sQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-alpha.9.tgz", - "integrity": "sha512-lJZkrhZ8qRTtc5fSLKefCv8j7Xzo8UBfMjpqTJhmETAtU8YfVV2i2znjgxJpm0QwV6FVQqGfK1+ASZQWPLiVcA==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-beta.6.tgz", + "integrity": "sha512-jL2fZv1a+3S6SiIVYc3kC0NAAk8bszNGcVTsBV8ehHgZxc0I+EANEJwgZE/YOcL3TlNEFscfjUcGhjyWkEQksQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-65nmKdPzw4C1bmtYn+3zoxXCI6Gnobr0StI9XE0YWiK+lpso7RH3Cgyl1yPZ0DBRVGzP+Fn9FVzmDNulEfR95w==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-beta.6.tgz", + "integrity": "sha512-hwSOnUwfZ78+wHXsokB/ho6xOgxK0qnWviSj1QkLvd2bomfP6RM0d4Uk19ND/Mh39oDXDwxiQ7jXHQsU8/Tq/g==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-RLI4FpVB3vB6mIuT77yrsv5V2LMZ80dW9XpV+Fmbd4Jkdj+ysAFwT38cI4AsUMOxixpTDIXY1oWD7AjvylHhQQ==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-beta.6.tgz", + "integrity": "sha512-NecW+P4oUgioPW/l1Ang6S76v26QevjTDls+5p0I9a7Kyln8xHbfzYOGH9AEopeygZmhaburC/TO6ochxBZqkw==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-json": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-alpha.9.tgz", - "integrity": "sha512-aOewp8/3zobf/O+5Jx8y7+bX3BPRfRlHIv15qp4YVTsLs6gLISWSzTO9JpWe9cR+AfhpsAalFq4t1LwIkmLk4A==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-beta.6.tgz", + "integrity": "sha512-a2ymHU7BJ11XcZvNpghmUjsyxa+hwf2Jt7MgLIKQGg6Kmnx+pHesx1/ZlqqvhkaKk6ZXbefpK7PTOBcGRerjlQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-beta.6", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-error": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", - "tree-sitter": "=0.20.4", - "tree-sitter-json": "=0.20.2", - "web-tree-sitter": "=0.20.3" + "tree-sitter": "=0.22.1", + "tree-sitter-json": "=0.24.8", + "web-tree-sitter": "=0.24.5" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-json/node_modules/tree-sitter": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.22.1.tgz", + "integrity": "sha512-gRO+jk2ljxZlIn20QRskIvpLCMtzuLl5T0BY6L9uvPYD17uUrxlxWkvYCiVqED2q2q7CVtY52Uex4WcYo2FEXw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-addon-api": "^8.2.1", + "node-gyp-build": "^4.8.2" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-zgtsAfkplCFusX2P/saqdn10J8P3kQizCXxHLvxd2j0EhMJk2wfu4HYN5Pej/7/qf/OR1QZxqtacwebd4RfpXA==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-beta.6.tgz", + "integrity": "sha512-NgbHpVUMqE81f6rDPU9bO0qbWmiwu7FlrFvBwePktZTbbFaxwt73jFQpqyzKmIumNrg/mCckxzTrbSEW7k85Vw==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-alpha.9.tgz", - "integrity": "sha512-iPuHf0cAZSUhSv8mB0FnVgatTc26cVYohgqz2cvjoGofdqoh5KKIfxOkWlIhm+qGuBp71CfZUrPYPRsd0dHgeg==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-beta.6.tgz", + "integrity": "sha512-cnFcTkzN7xAr6Zal5UnzRRkQpSe3fI910bYs9mjNMUYReo5D+hUyL16PtOf832Qa8vyDlU3WBHqAQuOEk1fepA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-jwkfO7tzZyyrAgok+O9fKFOv1q/5njMb9DBc3D/ZF3ZLTcnEw8uj4V2HkjKxUweH5k8ip/gc8ueKmO/i7p2fng==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-beta.6.tgz", + "integrity": "sha512-xkqyXhLWg6iWyriH/t/am3CHFTZOSIUrNP7uSZBHoD6PbvDArYSB+/gtnO7e/NphSSOkqlkRC4+7VTybA9LK+A==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-jEIDpjbjwFKXQXS/RHJeA4tthsguLoz+nJPYS3AOLfuSiby5QXsKTxgqHXxG/YJqF1xJbZL+5KcF8UyiDePumw==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-beta.6.tgz", + "integrity": "sha512-M91gx/QpM6xSf4m2k/OYaPw8Hapir+6KJMEIcLV8aP6UAnb+S2z6XoSLQ633n7QQjLYeLUL0pTzRgU1UPL9cyg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-alpha.9.tgz", - "integrity": "sha512-ieJL8dfIF8fmP3uJRNh/duJa3cCIIv6MzUe6o4uPT/oTDroy4qIATvnq9Dq/gtAv6rcPRpA9VhyghJ1DmjKsZQ==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-beta.6.tgz", + "integrity": "sha512-GdQ8jIgoYaPeIVp3Em5BGi1XwFB+LWa48mKQ7Z/M3S0u1I6YSo7P1iNhm2eRaeoL+LNb7C0ygEwixiJBaSmeew==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-EatIH7PZQSNDsRn9ompc62MYzboY7wAkjfYz+2FzBaSA8Vl5/+740qGQj22tu/xhwW4K72aV2NNL1m47QVF7hA==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-beta.6.tgz", + "integrity": "sha512-52guWmqVa9IReg0NRf4KKUZFmlV/fMniJAKk80Xv62XN5X/MduW2P7zln2+FJAA6uGV0rBZip0Zg1McVkPowSw==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-workflows-json-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-LylC2cQdAmvR7bXqwMwBt6FHTMVGinwIdI8pjl4EbPT9hCVm1rdED53caTYM4gCm+CJGRw20r4gb9vn3+N6RrA==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-1.0.0-beta.6.tgz", + "integrity": "sha512-B5WW7CSVKjU+1Lt3StUEKgJvaNGF1IHYKg91eH7nvhMfJ/oY6rNpE2+ziVkYETifbZeCWMFqbQYHPzJyqomnQQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-workflows-yaml-1": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-1.0.0-alpha.9.tgz", - "integrity": "sha512-TlA4+1ca33D7fWxO5jKBytSCv86IGI4Lze4JfrawWUXZ5efhi4LiNmW5TrGlZUyvL7yJtZcA4tn3betlj6jVwA==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-1.0.0-beta.6.tgz", + "integrity": "sha512-2lzE8JemYy998RDlGJ3l4d9SL3Rs1yxEMGC5a/bIml5QVXT2FSu0ohwaxzkX+HB6LbMd1PMlQZ75IJIlxmcb0Q==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.9", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-beta.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-alpha.9.tgz", - "integrity": "sha512-jSIHEB7lbh+MP3BhYIXFkeivDR01kugXN70e5FskW7oet2TIARsVEPheWKQFSP1U8bUZA4bsp9h9gOQ9xEeErw==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-beta.6.tgz", + "integrity": "sha512-iwoSjTdyM4DeYtJEenMEKA51EOsOLxMADOXu/9ixTqMpYghp2GMnkryrtH3mq6oCX+jO3ysADx1dfp/CaukBsg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^1.0.0-alpha.9", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", - "@swagger-api/apidom-error": "^1.0.0-alpha.9", + "@swagger-api/apidom-ast": "^1.0.0-beta.6", + "@swagger-api/apidom-core": "^1.0.0-beta.6", + "@swagger-api/apidom-error": "^1.0.0-beta.6", + "@tree-sitter-grammars/tree-sitter-yaml": "=0.7.0", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", - "tree-sitter": "=0.20.4", - "tree-sitter-yaml": "=0.5.0", - "web-tree-sitter": "=0.20.3" + "tree-sitter": "=0.22.1", + "web-tree-sitter": "=0.24.5" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2/node_modules/@tree-sitter-grammars/tree-sitter-yaml": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@tree-sitter-grammars/tree-sitter-yaml/-/tree-sitter-yaml-0.7.0.tgz", + "integrity": "sha512-GOMIK3IaDvECD0eZEhAsLl03RMtM1E8StxuGMn6PpMKFg7jyQ+jSzxJZ4Jmc/tYitah9/AECt8o4tlRQ5yEZQg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" + }, + "peerDependencies": { + "tree-sitter": "^0.22.1" + }, + "peerDependenciesMeta": { + "tree-sitter": { + "optional": true + } + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2/node_modules/tree-sitter": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.22.1.tgz", + "integrity": "sha512-gRO+jk2ljxZlIn20QRskIvpLCMtzuLl5T0BY6L9uvPYD17uUrxlxWkvYCiVqED2q2q7CVtY52Uex4WcYo2FEXw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-addon-api": "^8.2.1", + "node-gyp-build": "^4.8.2" } }, "node_modules/@swagger-api/apidom-reference": { - "version": "1.0.0-alpha.9", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-alpha.9.tgz", - "integrity": "sha512-KQ6wB5KplqdSsjxdA8BaQulj5zlF5VBCd5KP3RN/9vvixgsD/gyrVY59nisdzmPTqiL6yjhk612eQ96MgG8KiA==", + "version": "1.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-beta.6.tgz", + "integrity": "sha512-GdVPd+YAOWdAuJUJ5so63pZ4i0xlBNGClHJfTHirxZbEH9UQjNTKSkQgawUD0UBpg1HeQVzecl1cehoOp/+Uhw==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^1.0.0-alpha.9", + "@swagger-api/apidom-core": "^1.0.0-beta.6", "@types/ramda": "~0.30.0", - "axios": "^1.4.0", + "axios": "^1.7.4", "minimatch": "^7.4.3", "process": "^0.11.10", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" }, "optionalDependencies": { - "@swagger-api/apidom-error": "^1.0.0-alpha.1", - "@swagger-api/apidom-json-pointer": "^1.0.0-alpha.1", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.1", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.1", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.1", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.1", - "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-workflows-json-1": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-workflows-yaml-1": "^1.0.0-alpha.1", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.1" + "@swagger-api/apidom-error": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-json-pointer": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-workflows-json-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-workflows-yaml-1": "^1.0.0-beta.3 <1.0.0-rc.0", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.3 <1.0.0-rc.0" } }, "node_modules/@swagger-api/apidom-reference/node_modules/minimatch": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2878,15 +3315,28 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@swaggerexpert/cookie": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@swaggerexpert/cookie/-/cookie-1.4.1.tgz", + "integrity": "sha512-ZRbRC2017wMs+uZeIOC55ghwgbTxeolo+s6I0njzqina7MTrOhz8WMfTj0KGk3hfBUO/yhTQD/aQZ0lQHEIKxQ==", + "license": "Apache-2.0", + "dependencies": { + "apg-lite": "^1.0.3" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/@swc/core": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.7.26.tgz", - "integrity": "sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.7.tgz", + "integrity": "sha512-py91kjI1jV5D5W/Q+PurBdGsdU5TFbrzamP7zSCqLdMcHkKi3rQEM5jkQcZr0MXXSJTaayLxS3MWYTBIkzPDrg==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.12" + "@swc/types": "^0.1.17" }, "engines": { "node": ">=10" @@ -2896,16 +3346,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.7.26", - "@swc/core-darwin-x64": "1.7.26", - "@swc/core-linux-arm-gnueabihf": "1.7.26", - "@swc/core-linux-arm64-gnu": "1.7.26", - "@swc/core-linux-arm64-musl": "1.7.26", - "@swc/core-linux-x64-gnu": "1.7.26", - "@swc/core-linux-x64-musl": "1.7.26", - "@swc/core-win32-arm64-msvc": "1.7.26", - "@swc/core-win32-ia32-msvc": "1.7.26", - "@swc/core-win32-x64-msvc": "1.7.26" + "@swc/core-darwin-arm64": "1.10.7", + "@swc/core-darwin-x64": "1.10.7", + "@swc/core-linux-arm-gnueabihf": "1.10.7", + "@swc/core-linux-arm64-gnu": "1.10.7", + "@swc/core-linux-arm64-musl": "1.10.7", + "@swc/core-linux-x64-gnu": "1.10.7", + "@swc/core-linux-x64-musl": "1.10.7", + "@swc/core-win32-arm64-msvc": "1.10.7", + "@swc/core-win32-ia32-msvc": "1.10.7", + "@swc/core-win32-x64-msvc": "1.10.7" }, "peerDependencies": { "@swc/helpers": "*" @@ -2917,13 +3367,14 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz", - "integrity": "sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.7.tgz", + "integrity": "sha512-SI0OFg987P6hcyT0Dbng3YRISPS9uhLX1dzW4qRrfqQdb0i75lPJ2YWe9CN47HBazrIA5COuTzrD2Dc0TcVsSQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -2933,13 +3384,14 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz", - "integrity": "sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.7.tgz", + "integrity": "sha512-RFIAmWVicD/l3RzxgHW0R/G1ya/6nyMspE2cAeDcTbjHi0I5qgdhBWd6ieXOaqwEwiCd0Mot1g2VZrLGoBLsjQ==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "darwin" @@ -2949,13 +3401,14 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz", - "integrity": "sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.7.tgz", + "integrity": "sha512-QP8vz7yELWfop5mM5foN6KkLylVO7ZUgWSF2cA0owwIaziactB2hCPZY5QU690coJouk9KmdFsPWDnaCFUP8tg==", "cpu": [ "arm" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "linux" @@ -2965,13 +3418,14 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz", - "integrity": "sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.7.tgz", + "integrity": "sha512-NgUDBGQcOeLNR+EOpmUvSDIP/F7i/OVOKxst4wOvT5FTxhnkWrW+StJGKj+DcUVSK5eWOYboSXr1y+Hlywwokw==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -2981,13 +3435,14 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz", - "integrity": "sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.7.tgz", + "integrity": "sha512-gp5Un3EbeSThBIh6oac5ZArV/CsSmTKj5jNuuUAuEsML3VF9vqPO+25VuxCvsRf/z3py+xOWRaN2HY/rjMeZog==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -2997,13 +3452,14 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz", - "integrity": "sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.7.tgz", + "integrity": "sha512-k/OxLLMl/edYqbZyUNg6/bqEHTXJT15l9WGqsl/2QaIGwWGvles8YjruQYQ9d4h/thSXLT9gd8bExU2D0N+bUA==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -3013,13 +3469,14 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz", - "integrity": "sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.7.tgz", + "integrity": "sha512-XeDoURdWt/ybYmXLCEE8aSiTOzEn0o3Dx5l9hgt0IZEmTts7HgHHVeRgzGXbR4yDo0MfRuX5nE1dYpTmCz0uyA==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "linux" @@ -3029,13 +3486,14 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz", - "integrity": "sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.7.tgz", + "integrity": "sha512-nYAbi/uLS+CU0wFtBx8TquJw2uIMKBnl04LBmiVoFrsIhqSl+0MklaA9FVMGA35NcxSJfcm92Prl2W2LfSnTqQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -3045,13 +3503,14 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz", - "integrity": "sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.7.tgz", + "integrity": "sha512-+aGAbsDsIxeLxw0IzyQLtvtAcI1ctlXVvVcXZMNXIXtTURM876yNrufRo4ngoXB3jnb1MLjIIjgXfFs/eZTUSw==", "cpu": [ "ia32" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -3061,13 +3520,14 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.7.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.26.tgz", - "integrity": "sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.7.tgz", + "integrity": "sha512-TBf4clpDBjF/UUnkKrT0/th76/zwvudk5wwobiTFqDywMApHip5O0VpBgZ+4raY2TM8k5+ujoy7bfHb22zu17Q==", "cpu": [ "x64" ], "dev": true, + "license": "Apache-2.0 AND MIT", "optional": true, "os": [ "win32" @@ -3080,13 +3540,15 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@swc/types": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.12.tgz", - "integrity": "sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==", + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", + "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" } @@ -3095,6 +3557,7 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz", "integrity": "sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==", + "license": "MIT", "dependencies": { "remove-accents": "0.5.0" }, @@ -3110,6 +3573,7 @@ "version": "8.20.5", "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.5.tgz", "integrity": "sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA==", + "license": "MIT", "dependencies": { "@tanstack/table-core": "8.20.5" }, @@ -3129,6 +3593,7 @@ "version": "3.10.6", "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.10.6.tgz", "integrity": "sha512-xaSy6uUxB92O8mngHZ6CvbhGuqxQ5lIZWCBy+FjhrbHmOwc6BnOnKkYm2FsB1/BpKw/+FVctlMbEtI+F6I1aJg==", + "license": "MIT", "dependencies": { "@tanstack/virtual-core": "3.10.6" }, @@ -3145,6 +3610,7 @@ "version": "8.20.5", "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz", "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -3157,6 +3623,7 @@ "version": "3.10.6", "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.10.6.tgz", "integrity": "sha512-1giLc4dzgEKLMx5pgKjL6HlG5fjZMgCjzlKAlpr7yoUtetVPELgER1NtephAI910nMwfPTHNyWKSFmJdHkz2Cw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" @@ -3167,6 +3634,7 @@ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -3182,87 +3650,12 @@ "node": ">=18" } }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/jest-dom": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", "dev": true, + "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", "aria-query": "^5.0.0", @@ -3278,26 +3671,12 @@ "yarn": ">=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@testing-library/jest-dom/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3306,56 +3685,19 @@ "node": ">=8" } }, - "node_modules/@testing-library/jest-dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true - }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/@testing-library/react": { "version": "16.0.1", "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.0.1.tgz", "integrity": "sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5" }, @@ -3383,6 +3725,7 @@ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12", "npm": ">=6" @@ -3395,68 +3738,74 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.6.1.tgz", "integrity": "sha512-cka47fVSo6lfQDIATYqb/vO1nvFfbPw7uWLayIXIhGETj0wcOOlrlkobOMDNQOFr9QOafegUPq13V2+6vtD7yg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@turf/area": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.1.0.tgz", - "integrity": "sha512-w91FEe02/mQfMPRX2pXua48scFuKJ2dSVMF2XmJ6+BJfFiCPxp95I3+Org8+ZsYv93CDNKbf0oLNEPnuQdgs2g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-7.2.0.tgz", + "integrity": "sha512-zuTTdQ4eoTI9nSSjerIy4QwgvxqwJVciQJ8tOPuMHbXJ9N/dNjI7bU8tasjhxas/Cx3NE9NxVHtNpYHL0FSzoA==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^7.1.0", - "@turf/meta": "^7.1.0", + "@turf/helpers": "^7.2.0", + "@turf/meta": "^7.2.0", "@types/geojson": "^7946.0.10", - "tslib": "^2.6.2" + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, "node_modules/@turf/bbox": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.1.0.tgz", - "integrity": "sha512-PdWPz9tW86PD78vSZj2fiRaB8JhUHy6piSa/QXb83lucxPK+HTAdzlDQMTKj5okRCU8Ox/25IR2ep9T8NdopRA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.2.0.tgz", + "integrity": "sha512-wzHEjCXlYZiDludDbXkpBSmv8Zu6tPGLmJ1sXQ6qDwpLE1Ew3mcWqt8AaxfTP5QwDNQa3sf2vvgTEzNbPQkCiA==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^7.1.0", - "@turf/meta": "^7.1.0", + "@turf/helpers": "^7.2.0", + "@turf/meta": "^7.2.0", "@types/geojson": "^7946.0.10", - "tslib": "^2.6.2" + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, "node_modules/@turf/centroid": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.1.0.tgz", - "integrity": "sha512-1Y1b2l+ZB1CZ+ITjUCsGqC4/tSjwm/R4OUfDztVqyyCq/VvezkLmTNqvXTGXgfP0GXkpv68iCfxF5M7QdM5pJQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@turf/centroid/-/centroid-7.2.0.tgz", + "integrity": "sha512-yJqDSw25T7P48au5KjvYqbDVZ7qVnipziVfZ9aSo7P2/jTE7d4BP21w0/XLi3T/9bry/t9PR1GDDDQljN4KfDw==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^7.1.0", - "@turf/meta": "^7.1.0", + "@turf/helpers": "^7.2.0", + "@turf/meta": "^7.2.0", "@types/geojson": "^7946.0.10", - "tslib": "^2.6.2" + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, "node_modules/@turf/helpers": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.1.0.tgz", - "integrity": "sha512-dTeILEUVeNbaEeoZUOhxH5auv7WWlOShbx7QSd4s0T4Z0/iz90z9yaVCtZOLbU89umKotwKaJQltBNO9CzVgaQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.2.0.tgz", + "integrity": "sha512-cXo7bKNZoa7aC7ydLmUR02oB3IgDe7MxiPuRz3cCtYQHn+BJ6h1tihmamYDWWUlPHgSNF0i3ATc4WmDECZafKw==", + "license": "MIT", "dependencies": { "@types/geojson": "^7946.0.10", - "tslib": "^2.6.2" + "tslib": "^2.8.1" }, "funding": { "url": "https://opencollective.com/turf" } }, "node_modules/@turf/meta": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.1.0.tgz", - "integrity": "sha512-ZgGpWWiKz797Fe8lfRj7HKCkGR+nSJ/5aKXMyofCvLSc2PuYJs/qyyifDPWjASQQCzseJ7AlF2Pc/XQ/3XkkuA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.2.0.tgz", + "integrity": "sha512-igzTdHsQc8TV1RhPuOLVo74Px/hyPrVgVOTgjWQZzt3J9BVseCdpfY/0cJBdlSRI4S/yTmmHl7gAqjhpYH5Yaw==", + "license": "MIT", "dependencies": { - "@turf/helpers": "^7.1.0", + "@turf/helpers": "^7.2.0", "@types/geojson": "^7946.0.10" }, "funding": { @@ -3467,13 +3816,15 @@ "version": "0.0.52", "resolved": "https://registry.npmjs.org/@types/ace/-/ace-0.0.52.tgz", "integrity": "sha512-YPF9S7fzpuyrxru+sG/rrTpZkC6gpHBPF14W3x70kqVOD+ks6jkYLapk4yceh36xej7K4HYxcyz9ZDQ2lTvwgQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/d3": { @@ -3481,6 +3832,7 @@ "resolved": "https://registry.npmjs.org/@types/d3/-/d3-5.16.0.tgz", "integrity": "sha512-BPe6m763fJet428zPK3/fLBzgGlh204kEEisUcZGsUqgQHh0V+fOHhuGV3pyJtT2QLe+E0y5oqxNYix32OgmHA==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-array": "^1", "@types/d3-axis": "^1", @@ -3519,13 +3871,15 @@ "version": "1.2.12", "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-1.2.12.tgz", "integrity": "sha512-zIq9wCg/JO7MGC6vq3HRDaVYkqgSPIDjpo3JhAQxl7PHYVPA5D9SMiBfjW/ZoAvPd2a+rkovqBg0nS0QOChsJQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-axis": { "version": "1.0.19", "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.19.tgz", "integrity": "sha512-rXxE2jJYv6kar/6YWS8rM0weY+jjvnJvBxHKrIUqt3Yzomrfbf5tncpKG6jq6Aaw6TZyBcb1bxEWc0zGzcmbiw==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-selection": "^1" } @@ -3535,6 +3889,7 @@ "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.1.8.tgz", "integrity": "sha512-tPVjYAjJt02fgazF9yiX/309sj6qhIiIopLuHhP4FFFq9VKqu9NQBeCK3ger0RHVZGs9RKaSBUWyPUzii5biGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-selection": "^1" } @@ -3543,25 +3898,29 @@ "version": "1.0.14", "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.14.tgz", "integrity": "sha512-W9rCIbSAhwtmydW5iGg9dwTQIi3SGBOh68/T3ke3PyOgejuSLozmtAMaWNViGaGJCeuM4aFJHTUHQvMedl4ugA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-collection": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.13.tgz", "integrity": "sha512-v0Rgw3IZebRyamcwVmtTDCZ8OmQcj4siaYjNc7wGMZT7PmdSHawGsCOQMxyLvZ7lWjfohYLK0oXtilMOMgfY8A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-color": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.5.tgz", "integrity": "sha512-5sNP3DmtSnSozxcjqmzQKsDOuVJXZkceo1KJScDc1982kk/TS9mTPc6lpli1gTu1MIBF1YWutpHpjucNWcIj5g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-contour": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-1.3.6.tgz", "integrity": "sha512-RM/QHCx8j1ovj/p4cWCM3b48EIas6TTmfG+LR2Ud8npTqgrWTjMNCpHtoj47Qa3dJsifONXGu54VuFkXWL2mIg==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-array": "^1", "@types/geojson": "*" @@ -3571,13 +3930,15 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.12.tgz", "integrity": "sha512-vrhleoVNhGJGx7GQZ4207lYGyMbW/yj/iJTSvLKyfAp8nXFF+19dnMpPN/nEVs6fudIsQc7ZelBFUMe3aJDmKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-drag": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.2.8.tgz", "integrity": "sha512-QM6H8E6r9/51BcE4NEluQ0f9dTECCTDEALJSQIWn183+Mtz/6KvEjOxW8VzKYSnhhL+qMljMKKA1WOUUf/4Qhw==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-selection": "^1" } @@ -3586,19 +3947,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-ease": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.13.tgz", "integrity": "sha512-VAA4H8YNaNN0+UNIlpkwkLOj7xL5EGdyiQpdlAvOIRHckjGFCLK8eMoUd4+IMNEhQgweq0Yk/Dfzr70xhUo6hA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-fetch": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-dsv": "*" } @@ -3607,19 +3971,22 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.2.7.tgz", "integrity": "sha512-zySqZfnxn67RVEGWzpD9dQA0AbNIp4Rj0qGvAuUdUNfGLrwuGCbEGAGze5hEdNaHJKQT2gTqr6j+qAzncm11ew==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-format": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.4.5.tgz", "integrity": "sha512-mLxrC1MSWupOSncXN/HOlWUAAIffAEBaI4+PKy2uMPsKe4FNZlk7qrbTjmzJXITQQqBHivaks4Td18azgqnotA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-geo": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.12.7.tgz", "integrity": "sha512-QetZrWWjuMfCe0BHLjD+dOThlgk7YGZ2gj+yhFAbDN5TularNBEQiBs5/CIgX0+IBDjt7/fbkDd5V70J1LjjKA==", "dev": true, + "license": "MIT", "dependencies": { "@types/geojson": "*" } @@ -3628,13 +3995,15 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.11.tgz", "integrity": "sha512-lnQiU7jV+Gyk9oQYk0GGYccuexmQPTp08E0+4BidgFdiJivjEvf+esPSdZqCZ2C7UwTWejWpqetVaU8A+eX3FA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-interpolate": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-color": "*" } @@ -3643,31 +4012,36 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.11.tgz", "integrity": "sha512-4pQMp8ldf7UaB/gR8Fvvy69psNHkTpD/pVw3vmEi8iZAB9EPMBruB1JvHO4BIq9QkUUd2lV1F5YXpMNj7JPBpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-polygon": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.10.tgz", "integrity": "sha512-+hbHsFdCMs23vk9p/SpvIkHkCpl0vxkP2qWR2vEk0wRi0BXODWgB/6aHnfrz/BeQnk20XzZiQJIZ+11TGxuYMQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-quadtree": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.13.tgz", "integrity": "sha512-BAQD6gTHnXqmI7JRhXwM2pEYJJF27AT1f6zCC192BKAUhigzd5HZjdje5ufRXmYcUM/fr2IJ9KqVMeXaljmmOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-random": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.5.tgz", "integrity": "sha512-gB5CR+7xYMj56pt5zmSyDBjTNMEy96PdfUb2qBaAT9bmPcf4P/YHfhhTI5y8JoiqaSRLJY+3mqtaE9loBgB6Ng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-scale": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-time": "*" } @@ -3676,19 +4050,22 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.5.4.tgz", "integrity": "sha512-HwLVEm8laYTNOR9Kc9745XDKgRa69VIIChNkSKJgrJOsDLI9QSiFSH2Bi4wMbGrvFs+X64azev7NfBPq+VOFVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-selection": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.4.6.tgz", - "integrity": "sha512-0MhJ/LzJe6/vQVxiYJnvNq5CD/MF6Qy0dLp4BEQ6Dz8oOaB0EMXfx1GGeBFSW+3VzgjaUrxK6uECDQj9VLa/Mg==", - "dev": true + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.4.7.tgz", + "integrity": "sha512-aLaTOjdOJEFPhij59NdNwppvpHBheZFlLbcb7cIZZYLC0he9Wmdd/u4+1NZxlr7ncK+mq1PLmowMPw1GONrIQg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-shape": { "version": "1.3.12", "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.12.tgz", "integrity": "sha512-8oMzcd4+poSLGgV0R1Q1rOlx/xdmozS4Xab7np0eamFFUYq71AU9pOCJEFnkXW2aI/oXdVYJzw6pssbSut7Z9Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-path": "^1" } @@ -3697,25 +4074,29 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.4.tgz", "integrity": "sha512-JIvy2HjRInE+TXOmIGN5LCmeO0hkFZx5f9FZ7kiN+D+YTcc8pptsiLiuHsvwxwC7VVKmJ2ExHUgNlAiV7vQM9g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-time-format": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-timer": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.12.tgz", "integrity": "sha512-Tv9tkA4y3UvGQnrHyYAQhf5x/297FuYwotS4UW2TpwLblvRahbyL8r9HFYTJLPfPRqS63hwlqRItjKGmKtJxNg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-transition": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", - "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-selection": "*" } @@ -3724,33 +4105,26 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.12.tgz", "integrity": "sha512-DauBl25PKZZ0WVJr42a6CNvI6efsdzofl9sajqZr2Gf5Gu733WkDdUGiPkUHXiUvYGzNNlFQde2wdZdfQPG+yw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-zoom": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", "dev": true, + "license": "MIT", "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, - "node_modules/@types/date-fns": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@types/date-fns/-/date-fns-2.6.0.tgz", - "integrity": "sha512-9DSw2ZRzV0Tmpa6PHHJbMcZn79HHus+BBBohcOaDzkK/G3zMjDUDYjJIWBFLbkh+1+/IOS0A59BpQfdr37hASg==", - "deprecated": "This is a stub types definition for date-fns (https://github.com/date-fns/date-fns). date-fns provides its own type definitions, so you don't need @types/date-fns installed!", - "dev": true, - "dependencies": { - "date-fns": "*" - } - }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/ms": "*" } @@ -3760,6 +4134,7 @@ "resolved": "https://registry.npmjs.org/@types/draft-convert/-/draft-convert-2.1.8.tgz", "integrity": "sha512-gzHXLnOhDqdDv3ieMCZjqbmP992MBBn1u9HrhrCQ4+sip2pFz7d+fXL4GqaBgFjM/A5+iSNRhkr4ZP4tMR3jWw==", "dev": true, + "license": "MIT", "dependencies": { "@types/draft-js": "*", "@types/react": "*" @@ -3770,6 +4145,7 @@ "resolved": "https://registry.npmjs.org/@types/draft-js/-/draft-js-0.11.18.tgz", "integrity": "sha512-lP6yJ+EKv5tcG1dflWgDKeezdwBa8wJ7KkiNrrHqXuXhl/VGes1SKjEfKHDZqOz19KQbrAhFvNhDPWwnQXYZGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*", "immutable": "~3.7.4" @@ -3780,24 +4156,50 @@ "resolved": "https://registry.npmjs.org/@types/draftjs-to-html/-/draftjs-to-html-0.8.4.tgz", "integrity": "sha512-5FZcjFoJL57N/IttLCTCNI0krX+181oCl5hf76u3TqPkqBAphHrJAO9ReYesx9138kcObaYmpnWC2Yrqxoqd2Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/draft-js": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" }, "node_modules/@types/geojson": { - "version": "7946.0.14", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", - "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==" + "version": "7946.0.15", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.15.tgz", + "integrity": "sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==", + "license": "MIT" }, "node_modules/@types/geojson-vt": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/@types/geojson-vt/-/geojson-vt-3.2.5.tgz", "integrity": "sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==", + "license": "MIT", "dependencies": { "@types/geojson": "*" } @@ -3806,14 +4208,16 @@ "version": "2.3.10", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", + "license": "MIT", "dependencies": { "@types/unist": "^2" } }, "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", - "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", + "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", + "license": "MIT", "dependencies": { "@types/react": "*", "hoist-non-react-statics": "^3.3.0" @@ -3823,18 +4227,21 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, "node_modules/@types/jsoneditor": { "version": "9.9.5", "resolved": "https://registry.npmjs.org/@types/jsoneditor/-/jsoneditor-9.9.5.tgz", "integrity": "sha512-+Wex7QCirPcG90WA8/CmvDO21KUjz63/G7Yk52Yx/NhWHw5DyeET/L+wjZHAeNeNCCnMOTEtVX5gc3F4UXwXMQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/ace": "*", "ajv": "^6.12.0" @@ -3844,17 +4251,20 @@ "version": "4.17.9", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.9.tgz", "integrity": "sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mapbox__point-geometry": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", - "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==" + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", + "license": "MIT" }, "node_modules/@types/mapbox__vector-tile": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "license": "MIT", "dependencies": { "@types/geojson": "*", "@types/mapbox__point-geometry": "*", @@ -3865,12 +4275,14 @@ "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "22.7.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.3.tgz", "integrity": "sha512-qXKfhXXqGTyBskvWEzJZPUxSslAiLaB6JGP1ic/XTH9ctGgzdgYguuLP1C601aRTSDNlLb0jbKqXjZ48GNraSA==", + "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } @@ -3878,36 +4290,42 @@ "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" }, "node_modules/@types/pbf": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", - "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==" + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", + "license": "MIT" }, "node_modules/@types/pikaday": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/@types/pikaday/-/pikaday-1.7.4.tgz", "integrity": "sha512-0KsHVyw5pTG829nqG4IRu7m+BFQlFEBdbE/1i3S5182HeKUKv1uEW0gyEmkJVp5i4IV+9pyh23O83+KpRkSQbw==", + "license": "MIT", "dependencies": { "moment": ">=2.14.0" } }, "node_modules/@types/plotly.js": { - "version": "2.33.4", - "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-2.33.4.tgz", - "integrity": "sha512-BzAbsJTiUQyALkkYx1D31YZ9YvcU2ag3LlE/iePMo19eDPvM30cbM2EFNIcu31n39EhXj/9G7800XLA8/rfApA==", - "dev": true + "version": "2.35.2", + "resolved": "https://registry.npmjs.org/@types/plotly.js/-/plotly.js-2.35.2.tgz", + "integrity": "sha512-tn0Kp7F6VWiu96jknCvR/PcdIGIATeIK+Z5WXH3bEvG6CRwUNfhy34yBhfPYmTea7mMQxXvTZKGMm6/Y4wxESg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==" + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "license": "MIT" }, "node_modules/@types/ramda": { "version": "0.30.2", "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.30.2.tgz", "integrity": "sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA==", + "license": "MIT", "dependencies": { "types-ramda": "^0.30.1" } @@ -3916,6 +4334,7 @@ "version": "18.3.9", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.9.tgz", "integrity": "sha512-+BpAVyTpJkNWWSSnaLBk6ePpHLOGJKnEQNbINNovPWzvEUyAe3e+/d494QdEh71RekM/qV7lw6jzf1HGrJyAtQ==", + "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -3926,6 +4345,7 @@ "resolved": "https://registry.npmjs.org/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.1.8.tgz", "integrity": "sha512-E3TyFsro9pQuK4r8S/OL6G99eq7p8v29sX0PM7oT8Z+PJfZvSQTx4zTQbUJ+QZXioAF0e7TGBEcA1XhYhCweyQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } @@ -3935,6 +4355,7 @@ "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.12.tgz", "integrity": "sha512-pr3uKE3lSvf7GFo1Rn2K3QktiZQFFrSgSGJ/3iMvSOYWt2pPAJ97rVdVfhWxYJZ8prAEXzoP2XX//3qGSQgu7Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*", "@types/reactcss": "*" @@ -3945,6 +4366,7 @@ "resolved": "https://registry.npmjs.org/@types/react-d3-graph/-/react-d3-graph-2.6.5.tgz", "integrity": "sha512-bao1+Zu1qhuFyE7K/Nk9HdmDlz39YdDB2z6TpKhujip4IjoIfE3smL2cIe4pFirL772rVxaJdAARhwok1cB/sA==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } @@ -3954,6 +4376,7 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/react": "*" } @@ -3963,6 +4386,7 @@ "resolved": "https://registry.npmjs.org/@types/react-plotly.js/-/react-plotly.js-2.6.3.tgz", "integrity": "sha512-HBQwyGuu/dGXDsWhnQrhH+xcJSsHvjkwfSRjP+YpOsCCWryIuXF78ZCBjpfgO3sCc0Jo8sYp4NOGtqT7Cn3epQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/plotly.js": "*", "@types/react": "*" @@ -3972,6 +4396,7 @@ "version": "7.1.34", "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz", "integrity": "sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==", + "license": "MIT", "dependencies": { "@types/hoist-non-react-statics": "^3.3.0", "@types/react": "*", @@ -3984,15 +4409,17 @@ "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.13.tgz", "integrity": "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-transition-group": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", - "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", - "dependencies": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { "@types/react": "*" } }, @@ -4001,6 +4428,7 @@ "resolved": "https://registry.npmjs.org/@types/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.4.tgz", "integrity": "sha512-nhYwlFiYa8M3S+O2T9QO/e1FQUYMr/wJENUdf/O0dhRi1RS/93rjrYQFYdbUqtdFySuhrtnEDX29P6eKOttY+A==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } @@ -4010,29 +4438,26 @@ "resolved": "https://registry.npmjs.org/@types/react-window/-/react-window-1.8.8.tgz", "integrity": "sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/reactcss": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.12.tgz", - "integrity": "sha512-BrXUQ86/wbbFiZv8h/Q1/Q1XOsaHneYmCb/tHe9+M8XBAAUc2EHfdY0DY22ZZjVSaXr5ix7j+zsqO2eGZub8lQ==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.13.tgz", + "integrity": "sha512-gi3S+aUi6kpkF5vdhUsnkwbiSEIU/BEJyD7kBy2SudWBUuKmJk8AQKE0OVcQQeEy40Azh0lV6uynxlikYIJuwg==", "dev": true, - "dependencies": { + "license": "MIT", + "peerDependencies": { "@types/react": "*" } }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, "node_modules/@types/supercluster": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "license": "MIT", "dependencies": { "@types/geojson": "*" } @@ -4042,128 +4467,104 @@ "resolved": "https://registry.npmjs.org/@types/swagger-ui-react/-/swagger-ui-react-4.18.3.tgz", "integrity": "sha512-Mo/R7IjDVwtiFPs84pWvh5pI9iyNGBjmfielxqbOh2Jv+8WVSDVe8Nu25kb5BOuV2xmGS3o33jr6nwDJMBcX+Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } }, - "node_modules/@types/testing-library__jest-dom": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-6.0.0.tgz", - "integrity": "sha512-bnreXCgus6IIadyHNlN/oI5FfX4dWgvGhOPvpr7zzCYDGAPIfvyIoAozMBINmhmsVuqV0cncejF2y5KC7ScqOg==", - "deprecated": "This is a stub types definition. @testing-library/jest-dom provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "@testing-library/jest-dom": "*" - } - }, "node_modules/@types/tinycolor2": { "version": "1.4.6", "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/unist": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" }, "node_modules/@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", - "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==", + "license": "MIT" }, "node_modules/@types/uuid": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", - "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.1.tgz", + "integrity": "sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/type-utils": "7.2.0", - "@typescript-eslint/utils": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.19.1", + "@typescript-eslint/type-utils": "8.19.1", + "@typescript-eslint/utils": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.1.tgz", + "integrity": "sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/scope-manager": "8.19.1", + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/typescript-estree": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.1.tgz", + "integrity": "sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4171,39 +4572,37 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", - "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.1.tgz", + "integrity": "sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/typescript-estree": "8.19.1", + "@typescript-eslint/utils": "8.19.1", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.1.tgz", + "integrity": "sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==", "dev": true, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4211,46 +4610,30 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.1.tgz", + "integrity": "sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/visitor-keys": "8.19.1", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { @@ -4258,6 +4641,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4266,70 +4650,53 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.1.tgz", + "integrity": "sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "8.19.1", + "@typescript-eslint/types": "8.19.1", + "@typescript-eslint/typescript-estree": "8.19.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.1.tgz", + "integrity": "sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.19.1", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, "node_modules/@vitejs/plugin-react-swc": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.0.tgz", "integrity": "sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA==", "dev": true, + "license": "MIT", "dependencies": { "@swc/core": "^1.5.7" }, @@ -4342,6 +4709,7 @@ "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.1.tgz", "integrity": "sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", @@ -4374,6 +4742,7 @@ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.1.tgz", "integrity": "sha512-YeueunS0HiHiQxk+KEOnq/QMzlUuOzbU1Go+PgAsHvvv3tUkJPm9xWt+6ITNTlzsMXUjmgm5T+U7KBPK2qQV6w==", "dev": true, + "license": "MIT", "dependencies": { "@vitest/spy": "2.1.1", "@vitest/utils": "2.1.1", @@ -4389,6 +4758,7 @@ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.1.tgz", "integrity": "sha512-LNN5VwOEdJqCmJ/2XJBywB11DLlkbY0ooDJW3uRX5cZyYCrc4PI/ePX0iQhE3BiEGiQmK4GE7Q/PqCkkaiPnrA==", "dev": true, + "license": "MIT", "dependencies": { "@vitest/spy": "^2.1.0-beta.1", "estree-walker": "^3.0.3", @@ -4416,6 +4786,7 @@ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.1.tgz", "integrity": "sha512-SjxPFOtuINDUW8/UkElJYQSFtnWX7tMksSGW0vfjxMneFqxVr8YJ979QpMbDW7g+BIiq88RAGDjf7en6rvLPPQ==", "dev": true, + "license": "MIT", "dependencies": { "tinyrainbow": "^1.2.0" }, @@ -4428,6 +4799,7 @@ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.1.tgz", "integrity": "sha512-uTPuY6PWOYitIkLPidaY5L3t0JJITdGTSwBtwMjKzo5O6RCOEncz9PUN+0pDidX8kTHYjO0EwUIvhlGpnGpxmA==", "dev": true, + "license": "MIT", "dependencies": { "@vitest/utils": "2.1.1", "pathe": "^1.1.2" @@ -4441,6 +4813,7 @@ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.1.tgz", "integrity": "sha512-BnSku1WFy7r4mm96ha2FzN99AZJgpZOWrAhtQfoxjUU5YMRpq1zmHRq7a5K9/NjqonebO7iVDla+VvZS8BOWMw==", "dev": true, + "license": "MIT", "dependencies": { "@vitest/pretty-format": "2.1.1", "magic-string": "^0.30.11", @@ -4455,6 +4828,7 @@ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.1.tgz", "integrity": "sha512-ZM39BnZ9t/xZ/nF4UwRH5il0Sw93QnZXd9NAZGRpIgj0yvVwPpLd702s/Cx955rGaMlyBQkZJ2Ir7qyY48VZ+g==", "dev": true, + "license": "MIT", "dependencies": { "tinyspy": "^3.0.0" }, @@ -4467,6 +4841,7 @@ "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-2.1.1.tgz", "integrity": "sha512-IIxo2LkQDA+1TZdPLYPclzsXukBWd5dX2CKpGqH8CCt8Wh0ZuDn4+vuQ9qlppEju6/igDGzjWF/zyorfsf+nHg==", "dev": true, + "license": "MIT", "dependencies": { "@vitest/utils": "2.1.1", "fflate": "^0.8.2", @@ -4488,6 +4863,7 @@ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.1.tgz", "integrity": "sha512-Y6Q9TsI+qJ2CC0ZKj6VBb+T8UPz593N113nnUykqwANqhgf3QkZeHFlusgKLTqrnVHbj/XDKZcDHol+dxVT+rQ==", "dev": true, + "license": "MIT", "dependencies": { "@vitest/pretty-format": "2.1.1", "loupe": "^3.1.1", @@ -4498,182 +4874,203 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", "peer": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", "peer": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", "peer": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", "peer": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT", "peer": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "node_modules/@xobotyi/scrollbar-width": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", - "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" + "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==", + "license": "MIT" }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause", "peer": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0", "peer": true }, "node_modules/abs-svg-path": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", - "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==" + "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==", + "license": "MIT" }, "node_modules/ace-builds": { - "version": "1.36.2", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.36.2.tgz", - "integrity": "sha512-eqqfbGwx/GKjM/EnFu4QtQ+d2NNBu84MGgxoG8R5iyFpcVeQ4p9YlTL+ZzdEJqhdkASqoqOxCSNNGyB6lvMm+A==" + "version": "1.37.4", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.37.4.tgz", + "integrity": "sha512-niaXM/b7Nm6l/GKpc/jtG0jjExBOkqRN1pZbyV/ngb3GrQQF5fCB2032n5qaaAr7hWSGbc+PGfZ3C0LsmYQptA==", + "license": "BSD-3-Clause" }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4681,32 +5078,22 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "peer": true, - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, + "license": "MIT", "engines": { "node": ">= 14" } @@ -4715,6 +5102,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4726,10 +5114,53 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", + "peer": true + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", "peer": true, "peerDependencies": { "ajv": "^6.9.1" @@ -4738,38 +5169,47 @@ "node_modules/almost-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/almost-equal/-/almost-equal-1.1.0.tgz", - "integrity": "sha512-0V/PkoculFl5+0Lp47JoxUcO0xSxhIBvm+BxHdD/OgXNmdRpRHCFnKVuUoWyS9EzQP+otSGv0m9Lb4yVkQBn2A==" + "integrity": "sha512-0V/PkoculFl5+0Lp47JoxUcO0xSxhIBvm+BxHdD/OgXNmdRpRHCFnKVuUoWyS9EzQP+otSGv0m9Lb4yVkQBn2A==", + "license": "MIT" }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/apg-lite": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/apg-lite/-/apg-lite-1.0.4.tgz", - "integrity": "sha512-B32zCN3IdHIc99Vy7V9BaYTUzLeRA8YXYY1aQD1/5I2aqIrO0coi4t6hJPqMisidlBxhyME8UexkHt31SlR6Og==" + "integrity": "sha512-B32zCN3IdHIc99Vy7V9BaYTUzLeRA8YXYY1aQD1/5I2aqIrO0coi4t6hJPqMisidlBxhyME8UexkHt31SlR6Og==", + "license": "BSD-2-Clause" }, "node_modules/are-docs-informative": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -4777,38 +5217,34 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" } }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-bounds": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-bounds/-/array-bounds-1.0.1.tgz", - "integrity": "sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==" + "integrity": "sha512-8wdW3ZGk6UjMPJx/glyEt0sLzzwAE1bhToPsO1W2pbpR2gULyxe3BjSiuJFheP50T/GgODVPz2fuMUmIywt8cQ==", + "license": "MIT" }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -4821,6 +5257,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4830,6 +5267,7 @@ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4849,6 +5287,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/array-normalize/-/array-normalize-1.1.4.tgz", "integrity": "sha512-fCp0wKFLjvSPmCn4F5Tiw4M3lpMZoHlCjfcs7nNzuj3vqQQ1/a8cgB9DXcpDSn18c+coLnaW7rqfcYCvKbyJXg==", + "license": "MIT", "dependencies": { "array-bounds": "^1.0.0" } @@ -4856,27 +5295,21 @@ "node_modules/array-range": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-range/-/array-range-1.0.1.tgz", - "integrity": "sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==" + "integrity": "sha512-shdaI1zT3CVNL2hnx9c0JMc0ZogGaxDs5e85akgHWKYa0yVbIyp06Ind3dVkTj/uuFrzaHBOyqFzo+VV6aXgtA==", + "license": "MIT" }, "node_modules/array-rearrange": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/array-rearrange/-/array-rearrange-2.2.2.tgz", - "integrity": "sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } + "integrity": "sha512-UfobP5N12Qm4Qu4fwLDIi2v6+wZsSf6snYSxAMeKhrh37YGnNWZPRmVEKc/2wfms53TLQnzfpG8wCx2Y/6NG1w==", + "license": "MIT" }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4893,15 +5326,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4911,15 +5345,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4933,6 +5368,7 @@ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4945,19 +5381,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -4969,34 +5405,30 @@ "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/attr-accept": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", - "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "license": "MIT", "engines": { "node": ">=4" } @@ -5005,6 +5437,7 @@ "version": "3.16.2", "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz", "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" } @@ -5014,6 +5447,7 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -5028,6 +5462,7 @@ "version": "1.7.7", "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -5039,6 +5474,7 @@ "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-3.0.0.tgz", "integrity": "sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", "dependencies": { "deepmerge": "^2.2.1", "object.omit": "^3.0.0" @@ -5051,6 +5487,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -5064,17 +5501,20 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==", + "license": "MIT" }, "node_modules/base64-arraybuffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -5096,12 +5536,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/bignumber.js": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-8.1.1.tgz", "integrity": "sha512-QD46ppGintwPGuL1KqmwhR0O+N2cZUg8JG/VzwI2e28sM9TqHjQB10lI4QAaMHVbLzwVLLAwEglpKPViWX+5NQ==", + "license": "MIT", "engines": { "node": "*" } @@ -5109,22 +5551,26 @@ "node_modules/binary-search-bounds": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz", - "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==" + "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA==", + "license": "MIT" }, "node_modules/bit-twiddle": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", - "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==" + "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==", + "license": "MIT" }, "node_modules/bitmap-sdf": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz", - "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==" + "integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==", + "license": "MIT" }, "node_modules/bl": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", + "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -5134,6 +5580,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -5143,6 +5590,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -5151,9 +5599,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", - "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "funding": [ { "type": "opencollective", @@ -5168,11 +5616,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001663", - "electron-to-chromium": "^1.5.28", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -5181,72 +5630,64 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytewise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", - "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", - "dependencies": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "node_modules/bytewise-core": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", - "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", - "dependencies": { - "typewise-core": "^1.2" - } + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -5259,14 +5700,15 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001664", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", - "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", + "version": "1.0.30001692", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz", + "integrity": "sha512-A95VKan0kdtrsnMubMKxEKUKImOPSuCpYgxSQBo036P5YYgVIcOYJEgt/txJWqObiRQeISNCfef9nvlQ0vbV7A==", "funding": [ { "type": "opencollective", @@ -5280,12 +5722,14 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/canvas-fit": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/canvas-fit/-/canvas-fit-1.5.0.tgz", "integrity": "sha512-onIcjRpz69/Hx5bB5HGbYKUF2uC6QT6Gp+pfpGm3A7mPfcluSLV5v4Zu+oflDUwLdUw0rLIBhUbi0v8hM4FJQQ==", + "license": "MIT", "dependencies": { "element-size": "^1.1.1" } @@ -5293,13 +5737,15 @@ "node_modules/canvas-hypertxt": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/canvas-hypertxt/-/canvas-hypertxt-1.0.3.tgz", - "integrity": "sha512-+VsMpRr64jYgKq2IeFUNel3vCZH/IzS+iXSHxmUV3IUH5dXlC9xHz4AwtPZisDxZ5MWcuK0V+TXgPKFPiZnxzg==" + "integrity": "sha512-+VsMpRr64jYgKq2IeFUNel3vCZH/IzS+iXSHxmUV3IUH5dXlC9xHz4AwtPZisDxZ5MWcuK0V+TXgPKFPiZnxzg==", + "license": "MIT" }, "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^2.0.1", "check-error": "^2.1.1", @@ -5312,30 +5758,27 @@ } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/character-entities": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5345,6 +5788,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5354,6 +5798,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5364,6 +5809,7 @@ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" } @@ -5372,21 +5818,17 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-6.5.0.tgz", "integrity": "sha512-BwqQ/AgmKJ8jcMEjaSnfMybnKMgGTrtDKowfTP3pX4jwVy0kNjRsT/AP6h+wC3+3NC+X8X15VWBnTCQlX+wQFg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "regexp-to-ast": "0.4.0" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "optional": true - }, "node_modules/chrome-trace-event": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", "peer": true, "engines": { "node": ">=6.0" @@ -5395,17 +5837,20 @@ "node_modules/clamp": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", - "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==" + "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==", + "license": "MIT" }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -5414,6 +5859,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/color-alpha/-/color-alpha-1.0.4.tgz", "integrity": "sha512-lr8/t5NPozTSqli+duAN+x+no/2WaKTeWvxhHGN+aXT6AJ8vPlzLa7UriyjWak0pSC2jHol9JgjBYnnHsGha9A==", + "license": "MIT", "dependencies": { "color-parse": "^1.3.8" } @@ -5422,35 +5868,44 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0" } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-id": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/color-id/-/color-id-1.1.0.tgz", "integrity": "sha512-2iRtAn6dC/6/G7bBIo0uupVrIne1NsQJvJxZOBCzQOfk7jRq97feaDZ3RdzuHakRXXnHGNwglto3pqtRx1sX0g==", + "license": "MIT", "dependencies": { "clamp": "^1.0.1" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/color-normalize": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/color-normalize/-/color-normalize-1.5.0.tgz", "integrity": "sha512-rUT/HDXMr6RFffrR53oX3HGWkDOP9goSAQGBkUaAYKjOE2JxozccdGyufageWDlInRAjm/jYPrf/Y38oa+7obw==", + "license": "MIT", "dependencies": { "clamp": "^1.0.1", "color-rgba": "^2.1.1", @@ -5461,6 +5916,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.0.tgz", "integrity": "sha512-g2Z+QnWsdHLppAbrpcFWo629kLOnOPtpxYV69GCqm92gqSgyXbzlfyN3MXs0412fPBkFmiuS+rXposgBgBa6Kg==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0" } @@ -5469,6 +5925,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-2.1.1.tgz", "integrity": "sha512-VaX97wsqrMwLSOR6H7rU1Doa2zyVdmShabKrPEIFywLlHoibgD3QW9Dw6fSqM4+H/LfjprDNAUUW31qEQcGzNw==", + "license": "MIT", "dependencies": { "clamp": "^1.0.1", "color-parse": "^1.3.8", @@ -5479,6 +5936,7 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.3.tgz", "integrity": "sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0" } @@ -5487,6 +5945,7 @@ "version": "1.16.0", "resolved": "https://registry.npmjs.org/color-space/-/color-space-1.16.0.tgz", "integrity": "sha512-A6WMiFzunQ8KEPFmj02OnnoUnqhmSaHaZ/0LVFcPTdlvm8+3aMJ5x1HRHy3bDHPkovkf4sS0f4wsVvwk71fKkg==", + "license": "MIT", "dependencies": { "hsluv": "^0.0.3", "mumath": "^3.3.4" @@ -5496,6 +5955,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5507,6 +5967,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5515,13 +5976,15 @@ "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" }, "node_modules/comment-parser": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12.0.0" } @@ -5530,7 +5993,8 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -5539,6 +6003,7 @@ "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -5549,39 +6014,35 @@ "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" }, "node_modules/copy-to-clipboard": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "license": "MIT", "dependencies": { "toggle-selection": "^1.0.6" } }, "node_modules/core-js": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", - "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz", + "integrity": "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==", "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-pure": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", - "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.40.0.tgz", + "integrity": "sha512-AtDzVIgRrmRKQai62yuSIN5vNiQjcJakJb4fbhVw3ehxx7Lohphvw9SGNWKhLFqSxC4ilD0g/L1huAYFQU3Q6A==", "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -5590,12 +6051,14 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -5610,21 +6073,24 @@ "node_modules/country-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/country-regex/-/country-regex-1.1.0.tgz", - "integrity": "sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==" + "integrity": "sha512-iSPlClZP8vX7MC3/u6s3lrDuoQyhQukh5LyABJ3hvfzbQ3Yyayd4fp04zjLnfi267B/B2FkumcWWgrbban7sSA==", + "license": "MIT" }, "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", "dependencies": { - "node-fetch": "^2.6.12" + "node-fetch": "^2.7.0" } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5638,6 +6104,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "license": "MIT", "dependencies": { "tiny-invariant": "^1.0.6" } @@ -5646,6 +6113,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-font/-/css-font-1.2.0.tgz", "integrity": "sha512-V4U4Wps4dPDACJ4WpgofJ2RT5Yqwe1lEH6wlOOaIxMi0gTjdIijsc5FmxQlZ7ZZyKQkkutqqvULOp07l9c7ssA==", + "license": "MIT", "dependencies": { "css-font-size-keywords": "^1.0.0", "css-font-stretch-keywords": "^1.0.1", @@ -5661,32 +6129,38 @@ "node_modules/css-font-size-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", - "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==" + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==", + "license": "MIT" }, "node_modules/css-font-stretch-keywords": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", - "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==" + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==", + "license": "MIT" }, "node_modules/css-font-style-keywords": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", - "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==" + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==", + "license": "MIT" }, "node_modules/css-font-weight-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", - "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==" + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==", + "license": "MIT" }, "node_modules/css-global-keywords": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-global-keywords/-/css-global-keywords-1.0.1.tgz", - "integrity": "sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==" + "integrity": "sha512-X1xgQhkZ9n94WDwntqst5D/FKkmiU0GlJSFZSV3kLvyJ1WC5VeyoXDOuleUD+SIuH9C7W05is++0Woh0CGfKjQ==", + "license": "MIT" }, "node_modules/css-in-js-utils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", + "license": "MIT", "dependencies": { "hyphenate-style-name": "^1.0.3" } @@ -5695,6 +6169,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", @@ -5729,6 +6204,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5739,12 +6215,14 @@ "node_modules/css-system-font-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", - "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==" + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==", + "license": "MIT" }, "node_modules/css-tree": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -5757,6 +6235,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -5764,17 +6243,20 @@ "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "license": "MIT" }, "node_modules/csscolorparser": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", - "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==", + "license": "MIT" }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -5783,26 +6265,37 @@ } }, "node_modules/cssstyle": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", - "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz", + "integrity": "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==", "dev": true, + "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.7.1" + "@asamuzakjp/css-color": "^2.8.2", + "rrweb-cssom": "^0.8.0" }, "engines": { "node": ">=18" } }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" }, "node_modules/d": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", "dependencies": { "es5-ext": "^0.10.64", "type": "^2.7.2" @@ -5815,6 +6308,7 @@ "version": "5.16.0", "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", + "license": "BSD-3-Clause", "dependencies": { "d3-array": "1", "d3-axis": "1", @@ -5852,17 +6346,20 @@ "node_modules/d3-array": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "license": "BSD-3-Clause" }, "node_modules/d3-axis": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" + "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==", + "license": "BSD-3-Clause" }, "node_modules/d3-brush": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", + "license": "BSD-3-Clause", "dependencies": { "d3-dispatch": "1", "d3-drag": "1", @@ -5875,6 +6372,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", + "license": "BSD-3-Clause", "dependencies": { "d3-array": "1", "d3-path": "1" @@ -5883,17 +6381,20 @@ "node_modules/d3-collection": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "license": "BSD-3-Clause" }, "node_modules/d3-color": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", + "license": "BSD-3-Clause" }, "node_modules/d3-contour": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", + "license": "BSD-3-Clause", "dependencies": { "d3-array": "^1.1.1" } @@ -5901,12 +6402,14 @@ "node_modules/d3-dispatch": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", + "license": "BSD-3-Clause" }, "node_modules/d3-drag": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", + "license": "BSD-3-Clause", "dependencies": { "d3-dispatch": "1", "d3-selection": "1" @@ -5916,6 +6419,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", + "license": "BSD-3-Clause", "dependencies": { "commander": "2", "iconv-lite": "0.4", @@ -5936,12 +6440,14 @@ "node_modules/d3-ease": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==", + "license": "BSD-3-Clause" }, "node_modules/d3-fetch": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", + "license": "BSD-3-Clause", "dependencies": { "d3-dsv": "1" } @@ -5950,6 +6456,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "license": "BSD-3-Clause", "dependencies": { "d3-collection": "1", "d3-dispatch": "1", @@ -5960,12 +6467,14 @@ "node_modules/d3-format": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", + "license": "BSD-3-Clause" }, "node_modules/d3-geo": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "license": "BSD-3-Clause", "dependencies": { "d3-array": "1" } @@ -5974,6 +6483,7 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-2.9.0.tgz", "integrity": "sha512-ZULvK/zBn87of5rWAfFMc9mJOipeSo57O+BBitsKIXmU4rTVAnX1kSsJkE0R+TxY8pGNoM1nbyRRE7GYHhdOEQ==", + "license": "BSD-3-Clause", "dependencies": { "commander": "2", "d3-array": "1", @@ -5991,12 +6501,14 @@ "node_modules/d3-hierarchy": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", + "license": "BSD-3-Clause" }, "node_modules/d3-interpolate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "license": "BSD-3-Clause", "dependencies": { "d3-color": "1" } @@ -6004,27 +6516,32 @@ "node_modules/d3-path": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" }, "node_modules/d3-polygon": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" + "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==", + "license": "BSD-3-Clause" }, "node_modules/d3-quadtree": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" + "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", + "license": "BSD-3-Clause" }, "node_modules/d3-random": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" + "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==", + "license": "BSD-3-Clause" }, "node_modules/d3-scale": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "license": "BSD-3-Clause", "dependencies": { "d3-array": "^1.2.0", "d3-collection": "1", @@ -6038,6 +6555,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "license": "BSD-3-Clause", "dependencies": { "d3-color": "1", "d3-interpolate": "1" @@ -6046,12 +6564,14 @@ "node_modules/d3-selection": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", + "license": "BSD-3-Clause" }, "node_modules/d3-shape": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", "dependencies": { "d3-path": "1" } @@ -6059,12 +6579,14 @@ "node_modules/d3-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", + "license": "BSD-3-Clause" }, "node_modules/d3-time-format": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "license": "BSD-3-Clause", "dependencies": { "d3-time": "1" } @@ -6072,12 +6594,14 @@ "node_modules/d3-timer": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", + "license": "BSD-3-Clause" }, "node_modules/d3-transition": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", + "license": "BSD-3-Clause", "dependencies": { "d3-color": "1", "d3-dispatch": "1", @@ -6090,12 +6614,14 @@ "node_modules/d3-voronoi": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", + "license": "BSD-3-Clause" }, "node_modules/d3-zoom": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", + "license": "BSD-3-Clause", "dependencies": { "d3-dispatch": "1", "d3-drag": "1", @@ -6109,6 +6635,7 @@ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0" @@ -6118,14 +6645,15 @@ } }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6135,29 +6663,31 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -6172,6 +6702,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -6181,6 +6712,7 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -6197,28 +6729,15 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "optional": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "dev": true, + "license": "MIT" }, "node_modules/deep-eql": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6227,6 +6746,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -6235,12 +6755,14 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6250,6 +6772,7 @@ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -6267,6 +6790,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -6283,6 +6807,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6291,6 +6816,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -6300,6 +6826,7 @@ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6307,39 +6834,20 @@ "node_modules/detect-kerning": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-kerning/-/detect-kerning-2.1.2.tgz", - "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==" - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "integrity": "sha512-I3JIbrnKPAntNLl1I6TpSQQdQ4AutYzv/sKMFKbepawV/hlH0GmYKhUoOEMd4xqaUHT+Bm0f4127lh5qs1m1tw==", + "license": "MIT" }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-accessibility-api": { @@ -6347,26 +6855,30 @@ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, "node_modules/dompurify": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz", - "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==" + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.8.tgz", + "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==", + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/draft-convert": { "version": "2.1.13", "resolved": "https://registry.npmjs.org/draft-convert/-/draft-convert-2.1.13.tgz", "integrity": "sha512-/h/n4JCfyO8aWby7wKBkccHdsuVbbDyHWXi/B3Zf2pN++lN1lDOIVt5ulXCcbH2Y5YJEFzMJw/YGfN+R0axxxg==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.5.5", "immutable": "~3.7.4", @@ -6382,6 +6894,7 @@ "version": "0.11.7", "resolved": "https://registry.npmjs.org/draft-js/-/draft-js-0.11.7.tgz", "integrity": "sha512-ne7yFfN4sEL82QPQEn80xnADR8/Q6ALVworbC5UOSzOvjffmYfFsr3xSZtxbIirti14R7Y33EZC5rivpLgIbsg==", + "license": "MIT", "dependencies": { "fbjs": "^2.0.0", "immutable": "~3.7.4", @@ -6395,12 +6908,14 @@ "node_modules/draftjs-to-html": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/draftjs-to-html/-/draftjs-to-html-0.9.1.tgz", - "integrity": "sha512-fFstE6+IayaVFBEvaFt/wN8vdj8FsTRzij7dy7LI9QIwf5LgfHFi9zSpvCg+feJ2tbYVqHxUkjcibwpsTpgFVQ==" + "integrity": "sha512-fFstE6+IayaVFBEvaFt/wN8vdj8FsTRzij7dy7LI9QIwf5LgfHFi9zSpvCg+feJ2tbYVqHxUkjcibwpsTpgFVQ==", + "license": "MIT" }, "node_modules/drange": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -6409,6 +6924,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/draw-svg-path/-/draw-svg-path-1.0.0.tgz", "integrity": "sha512-P8j3IHxcgRMcY6sDzr0QvJDLzBnJJqpTG33UZ2Pvp8rw0apCHhJCWqYprqrXjrgHnJ6tuhP1iTJSAodPDHxwkg==", + "license": "MIT", "dependencies": { "abs-svg-path": "~0.1.1", "normalize-svg-path": "~0.1.0" @@ -6418,19 +6934,37 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/dup": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dup/-/dup-1.0.0.tgz", - "integrity": "sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==" + "integrity": "sha512-Bz5jxMMC0wgp23Zm15ip1x8IhYRqJvF3nFC0UInJUDkN1z4uNPk9jTnfCUJXbOGiQ1JbXLQsiV41Fb+HXcj5BA==", + "license": "MIT" }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -6441,28 +6975,33 @@ "node_modules/earcut": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "license": "ISC" }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.29", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz", - "integrity": "sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==" + "version": "1.5.80", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.80.tgz", + "integrity": "sha512-LTrKpW0AqIuHwmlVNV+cjFYTnXtM9K37OGhpe0ZI10ScPSxqVSryZHIY3WnCS5NSYbBODRTZyhRMS2h5FAEqAw==", + "license": "ISC" }, "node_modules/element-size": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/element-size/-/element-size-1.1.1.tgz", - "integrity": "sha512-eaN+GMOq/Q+BIWy0ybsgpcYImjGIdNLyjLFJU4XsLHXYQao5jCNb36GyN6C2qwmDDYSfIBmKpPpr4VnBdLCsPQ==" + "integrity": "sha512-eaN+GMOq/Q+BIWy0ybsgpcYImjGIdNLyjLFJU4XsLHXYQao5jCNb36GyN6C2qwmDDYSfIBmKpPpr4VnBdLCsPQ==", + "license": "MIT" }, "node_modules/elementary-circuits-directed-graph": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/elementary-circuits-directed-graph/-/elementary-circuits-directed-graph-1.3.1.tgz", "integrity": "sha512-ZEiB5qkn2adYmpXGnJKkxT8uJHlW/mxmBpmeqawEHzPxh9HkLD4/1mFYX5l0On+f6rcPIt8/EWlRU2Vo3fX6dQ==", + "license": "MIT", "dependencies": { "strongly-connected-components": "^1.0.1" } @@ -6471,20 +7010,23 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", + "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -6499,6 +7041,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -6510,6 +7053,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -6518,62 +7062,69 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -6583,13 +7134,11 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -6599,45 +7148,51 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.1.tgz", + "integrity": "sha512-BPOBuyUF9QIVhuNLhbToCLHP6+0MHwZ7xLBkPPCZqK4JmpJgGnv10035STzzQwFpqdzNFMB3irvDI63IagvDwA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -6646,14 +7201,16 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -6664,19 +7221,21 @@ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -6690,6 +7249,7 @@ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "hasInstallScript": true, + "license": "ISC", "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -6704,6 +7264,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", "dependencies": { "d": "1", "es5-ext": "^0.10.35", @@ -6714,6 +7275,7 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", "dependencies": { "d": "^1.0.2", "ext": "^1.7.0" @@ -6726,6 +7288,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "license": "ISC", "dependencies": { "d": "1", "es5-ext": "^0.10.46", @@ -6739,6 +7302,7 @@ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -6775,6 +7339,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -6783,6 +7348,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -6794,6 +7360,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -6814,89 +7381,98 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.18.0.tgz", + "integrity": "sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.10.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.18.0", + "@eslint/plugin-kit": "^0.2.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz", + "integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==", "dev": true, + "license": "MIT", "bin": { - "eslint-config-prettier": "bin/cli.js" + "eslint-config-prettier": "build/bin/cli.js" }, "peerDependencies": { "eslint": ">=7.0.0" } }, "node_modules/eslint-plugin-jsdoc": { - "version": "48.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.10.0.tgz", - "integrity": "sha512-BEli0k8E0dzhJairAllwlkGnyYDZVKNn4WDmyKy+v6J5qGNuofjzxwNUi+55BOGmyO9mKBhqaidwGy+dxndn/Q==", + "version": "50.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.6.1.tgz", + "integrity": "sha512-UWyaYi6iURdSfdVVqvfOs2vdCVz0J40O/z/HTsv2sFjdjmdlUI/qlKLOTmwbPQ2tAfQnE5F9vqx+B+poF71DBQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@es-joy/jsdoccomment": "~0.46.0", + "@es-joy/jsdoccomment": "~0.49.0", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", - "debug": "^4.3.5", + "debug": "^4.3.6", "escape-string-regexp": "^4.0.0", + "espree": "^10.1.0", "esquery": "^1.6.0", "parse-imports": "^2.1.1", "semver": "^7.6.3", @@ -6915,6 +7491,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6927,6 +7504,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-license-header/-/eslint-plugin-license-header-0.6.1.tgz", "integrity": "sha512-9aIz8q3OaMr1/uQmCGCWySjTs5nEXUJexNegz/8lluNcZbEl82Ag1Vyr1Hu3oIveRW1NbXDPs6nu4zu9mbrmWA==", "dev": true, + "license": "MIT", "dependencies": { "requireindex": "^1.2.0" } @@ -6936,6 +7514,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.9.1" @@ -6962,28 +7541,29 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.37.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.0.tgz", - "integrity": "sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA==", + "version": "7.37.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", + "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", + "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", + "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", + "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "engines": { @@ -6994,24 +7574,26 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.12.tgz", - "integrity": "sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg==", + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.18.tgz", + "integrity": "sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw==", "dev": true, + "license": "MIT", "peerDependencies": { - "eslint": ">=7" + "eslint": ">=8.40" } }, "node_modules/eslint-plugin-react/node_modules/brace-expansion": { @@ -7019,28 +7601,18 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-react/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7053,6 +7625,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -7066,166 +7639,87 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "*" } }, - "node_modules/eslint/node_modules/color-convert": { + "node_modules/esniff": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/esniff": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", - "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" }, "engines": { "node": ">=0.10" } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -7235,6 +7729,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -7248,6 +7743,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -7259,6 +7755,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -7270,6 +7767,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -7279,6 +7777,7 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } @@ -7287,6 +7786,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -7295,6 +7795,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", "dependencies": { "d": "1", "es5-ext": "~0.10.14" @@ -7304,50 +7805,25 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "optional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", "dependencies": { "type": "^2.7.2" } }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/falafel": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz", "integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==", + "license": "MIT", "dependencies": { "acorn": "^7.1.1", "isarray": "^2.0.1" @@ -7360,6 +7836,7 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -7370,25 +7847,28 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -7399,6 +7879,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -7410,6 +7891,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/fast-isnumeric/-/fast-isnumeric-1.1.4.tgz", "integrity": "sha512-1mM8qOr2LYz8zGaUdmiqRDiuue00Dxjgcb1NQR7TnhLVh6sQyngP9xvLo7Sl7LZpP/sk5eb+bcyWXw530NTBZw==", + "license": "MIT", "dependencies": { "is-string-blank": "^1.0.1" } @@ -7417,34 +7899,56 @@ "node_modules/fast-json-patch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", + "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-shallow-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" }, + "node_modules/fast-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", + "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, "node_modules/fastest-stable-stringify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz", - "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==" + "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==", + "license": "MIT" }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -7453,6 +7957,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "license": "MIT", "dependencies": { "format": "^0.2.0" }, @@ -7465,6 +7970,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "license": "BSD-3-Clause", "dependencies": { "fbjs": "^3.0.0" } @@ -7473,6 +7979,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "license": "MIT", "dependencies": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", @@ -7484,9 +7991,9 @@ } }, "node_modules/fbemitter/node_modules/ua-parser-js": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", - "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", + "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", "funding": [ { "type": "opencollective", @@ -7501,6 +8008,7 @@ "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", "bin": { "ua-parser-js": "script/cli.js" }, @@ -7512,6 +8020,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-2.0.0.tgz", "integrity": "sha512-8XA8ny9ifxrAWlyhAbexXcs3rRMtxWcs3M0lctLfB49jRDHiaxj+Mo0XxbwE7nKZYzgCFoq64FS+WFd4IycPPQ==", + "license": "MIT", "dependencies": { "core-js": "^3.6.4", "cross-fetch": "^3.0.4", @@ -7526,30 +8035,49 @@ "node_modules/fbjs-css-vars": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } }, "node_modules/fflate": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-selector": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", + "license": "MIT", "dependencies": { "tslib": "^2.4.0" }, @@ -7562,6 +8090,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7572,12 +8101,14 @@ "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7590,29 +8121,31 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" }, "node_modules/flatten-vertex-data": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", + "license": "MIT", "dependencies": { "dtype": "^2.0.0" } @@ -7621,6 +8154,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", + "license": "BSD-3-Clause", "dependencies": { "fbemitter": "^3.0.0", "fbjs": "^3.0.1" @@ -7633,6 +8167,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "license": "MIT", "dependencies": { "cross-fetch": "^3.1.5", "fbjs-css-vars": "^1.0.0", @@ -7644,9 +8179,9 @@ } }, "node_modules/flux/node_modules/ua-parser-js": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", - "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", + "version": "1.0.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", + "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==", "funding": [ { "type": "opencollective", @@ -7661,6 +8196,7 @@ "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", "bin": { "ua-parser-js": "script/cli.js" }, @@ -7678,6 +8214,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -7691,6 +8228,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/font-atlas/-/font-atlas-2.1.0.tgz", "integrity": "sha512-kP3AmvX+HJpW4w3d+PiPR2X6E1yvsBXt2yhuCw+yReO9F1WYhvZwx3c95DGZGwg9xYzDGrgJYa885xmVA+28Cg==", + "license": "MIT", "dependencies": { "css-font": "^1.0.0" } @@ -7699,6 +8237,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/font-measure/-/font-measure-1.2.2.tgz", "integrity": "sha512-mRLEpdrWzKe9hbfaF3Qpr06TAjquuBVP5cHy4b3hyeNdjc9i0PO6HniGsX5vjL5OWv7+Bd++NiooNpT/s8BvIA==", + "license": "MIT", "dependencies": { "css-font": "^1.2.0" } @@ -7708,6 +8247,7 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } @@ -7717,6 +8257,7 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -7729,9 +8270,10 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -7753,29 +8295,19 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "optional": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7788,20 +8320,24 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -7815,6 +8351,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7823,6 +8360,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -7830,33 +8368,32 @@ "node_modules/geojson-vt": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", + "license": "ISC" }, "node_modules/get-canvas-context": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-canvas-context/-/get-canvas-context-1.0.2.tgz", - "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==" - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } + "integrity": "sha512-LnpfLf/TNzr9zVOGiIY6aKCz8EKuXmlYNV7CM2pUjBa/B+c2I15tS7KLySep75+FuerJdmArvJLcsAXWEy2H0A==", + "license": "MIT" }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7865,10 +8402,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -7877,14 +8429,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7893,34 +8446,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "optional": true - }, "node_modules/gl-mat4": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gl-mat4/-/gl-mat4-1.2.0.tgz", - "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==" + "integrity": "sha512-sT5C0pwB1/e9G9AvAoLsoaJtbMGjfd/jfxo8jMCKqYYEnjZuFvqV5rehqar0538EmssjdDeiEWnKyBSTw7quoA==", + "license": "Zlib" }, "node_modules/gl-matrix": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", + "license": "MIT" }, "node_modules/gl-text": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/gl-text/-/gl-text-1.4.0.tgz", "integrity": "sha512-o47+XBqLCj1efmuNyCHt7/UEJmB9l66ql7pnobD6p+sgmBUdzfMZXIF0zD2+KRfpd99DJN+QXdvTFAGCKCVSmQ==", + "license": "MIT", "dependencies": { "bit-twiddle": "^1.0.2", "color-normalize": "^1.5.0", @@ -7945,6 +8487,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/gl-util/-/gl-util-3.1.3.tgz", "integrity": "sha512-dvRTggw5MSkJnCbh74jZzSoTOGnVYK+Bt+Ckqm39CVcl6+zSsxqWk4lr5NKhkqXHL6qvZAU9h17ZF8mIskY9mA==", + "license": "MIT", "dependencies": { "is-browser": "^2.0.1", "is-firefox": "^1.0.3", @@ -7956,21 +8499,21 @@ } }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "*" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7981,6 +8524,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -7992,34 +8536,14 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause", "peer": true }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/global-prefix": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-4.0.0.tgz", "integrity": "sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==", + "license": "MIT", "dependencies": { "ini": "^4.1.3", "kind-of": "^6.0.3", @@ -8033,6 +8557,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "license": "ISC", "engines": { "node": ">=16" } @@ -8041,6 +8566,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -8052,11 +8578,16 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -8064,6 +8595,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -8075,30 +8607,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/glsl-inject-defines": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/glsl-inject-defines/-/glsl-inject-defines-1.0.3.tgz", "integrity": "sha512-W49jIhuDtF6w+7wCMcClk27a2hq8znvHtlGnrYkSWEr8tHe9eA2dcnohlcAmxLYBSpSSdzOkRdyPTrx9fw49+A==", + "license": "MIT", "dependencies": { "glsl-token-inject-block": "^1.0.0", "glsl-token-string": "^1.0.1", @@ -8109,6 +8622,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/glsl-resolve/-/glsl-resolve-0.0.1.tgz", "integrity": "sha512-xxFNsfnhZTK9NBhzJjSBGX6IOqYpvBHxxmo+4vapiljyGNCY0Bekzn0firQkQrazK59c1hYxMDxYS8MDlhw4gA==", + "license": "MIT", "dependencies": { "resolve": "^0.6.1", "xtend": "^2.1.2" @@ -8117,7 +8631,8 @@ "node_modules/glsl-resolve/node_modules/resolve": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.6.3.tgz", - "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==" + "integrity": "sha512-UHBY3viPlJKf85YijDUcikKX6tmF4SokIDp518ZDVT92JNDcG5uKIthaT/owt3Sar0lwtOafsQuwrg22/v2Dwg==", + "license": "MIT" }, "node_modules/glsl-resolve/node_modules/xtend": { "version": "2.2.0", @@ -8130,12 +8645,14 @@ "node_modules/glsl-token-assignments": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/glsl-token-assignments/-/glsl-token-assignments-2.0.2.tgz", - "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==" + "integrity": "sha512-OwXrxixCyHzzA0U2g4btSNAyB2Dx8XrztY5aVUCjRSh4/D0WoJn8Qdps7Xub3sz6zE73W3szLrmWtQ7QMpeHEQ==", + "license": "MIT" }, "node_modules/glsl-token-defines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/glsl-token-defines/-/glsl-token-defines-1.0.0.tgz", "integrity": "sha512-Vb5QMVeLjmOwvvOJuPNg3vnRlffscq2/qvIuTpMzuO/7s5kT+63iL6Dfo2FYLWbzuiycWpbC0/KV0biqFwHxaQ==", + "license": "MIT", "dependencies": { "glsl-tokenizer": "^2.0.0" } @@ -8143,12 +8660,14 @@ "node_modules/glsl-token-depth": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/glsl-token-depth/-/glsl-token-depth-1.1.2.tgz", - "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==" + "integrity": "sha512-eQnIBLc7vFf8axF9aoi/xW37LSWd2hCQr/3sZui8aBJnksq9C7zMeUYHVJWMhFzXrBU7fgIqni4EhXVW4/krpg==", + "license": "MIT" }, "node_modules/glsl-token-descope": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/glsl-token-descope/-/glsl-token-descope-1.0.2.tgz", "integrity": "sha512-kS2PTWkvi/YOeicVjXGgX5j7+8N7e56srNDEHDTVZ1dcESmbmpmgrnpjPcjxJjMxh56mSXYoFdZqb90gXkGjQw==", + "license": "MIT", "dependencies": { "glsl-token-assignments": "^2.0.0", "glsl-token-depth": "^1.1.0", @@ -8159,32 +8678,38 @@ "node_modules/glsl-token-inject-block": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/glsl-token-inject-block/-/glsl-token-inject-block-1.1.0.tgz", - "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==" + "integrity": "sha512-q/m+ukdUBuHCOtLhSr0uFb/qYQr4/oKrPSdIK2C4TD+qLaJvqM9wfXIF/OOBjuSA3pUoYHurVRNao6LTVVUPWA==", + "license": "MIT" }, "node_modules/glsl-token-properties": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glsl-token-properties/-/glsl-token-properties-1.0.1.tgz", - "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==" + "integrity": "sha512-dSeW1cOIzbuUoYH0y+nxzwK9S9O3wsjttkq5ij9ZGw0OS41BirKJzzH48VLm8qLg+au6b0sINxGC0IrGwtQUcA==", + "license": "MIT" }, "node_modules/glsl-token-scope": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/glsl-token-scope/-/glsl-token-scope-1.1.2.tgz", - "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==" + "integrity": "sha512-YKyOMk1B/tz9BwYUdfDoHvMIYTGtVv2vbDSLh94PT4+f87z21FVdou1KNKgF+nECBTo0fJ20dpm0B1vZB1Q03A==", + "license": "MIT" }, "node_modules/glsl-token-string": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glsl-token-string/-/glsl-token-string-1.0.1.tgz", - "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==" + "integrity": "sha512-1mtQ47Uxd47wrovl+T6RshKGkRRCYWhnELmkEcUAPALWGTFe2XZpH3r45XAwL2B6v+l0KNsCnoaZCSnhzKEksg==", + "license": "MIT" }, "node_modules/glsl-token-whitespace-trim": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/glsl-token-whitespace-trim/-/glsl-token-whitespace-trim-1.0.0.tgz", - "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==" + "integrity": "sha512-ZJtsPut/aDaUdLUNtmBYhaCmhIjpKNg7IgZSfX5wFReMc2vnj8zok+gB/3Quqs0TsBSX/fGnqUUYZDqyuc2xLQ==", + "license": "MIT" }, "node_modules/glsl-tokenizer": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", + "license": "MIT", "dependencies": { "through2": "^0.6.3" } @@ -8192,12 +8717,14 @@ "node_modules/glsl-tokenizer/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" }, "node_modules/glsl-tokenizer/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -8208,12 +8735,14 @@ "node_modules/glsl-tokenizer/node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" }, "node_modules/glsl-tokenizer/node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "license": "MIT", "dependencies": { "readable-stream": ">=1.0.33-1 <1.1.0-0", "xtend": ">=4.0.0 <4.1.0-0" @@ -8223,6 +8752,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/glslify/-/glslify-7.1.1.tgz", "integrity": "sha512-bud98CJ6kGZcP9Yxcsi7Iz647wuDz3oN+IZsjCRi5X1PI7t/xPKeL0mOwXJjo+CRZMqvq0CkSJiywCcY7kVYog==", + "license": "MIT", "dependencies": { "bl": "^2.2.1", "concat-stream": "^1.5.2", @@ -8248,6 +8778,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/glslify-bundle/-/glslify-bundle-5.1.1.tgz", "integrity": "sha512-plaAOQPv62M1r3OsWf2UbjN0hUYAB7Aph5bfH58VxJZJhloRNbxOL9tl/7H71K7OLJoSJ2ZqWOKk3ttQ6wy24A==", + "license": "MIT", "dependencies": { "glsl-inject-defines": "^1.0.1", "glsl-token-defines": "^1.0.0", @@ -8265,6 +8796,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/glslify-deps/-/glslify-deps-1.3.2.tgz", "integrity": "sha512-7S7IkHWygJRjcawveXQjRXLO2FTjijPDYC7QfZyAQanY+yGLCFHYnPtsGT9bdyHiwPTw/5a1m1M9hamT2aBpag==", + "license": "ISC", "dependencies": { "@choojs/findup": "^0.2.0", "events": "^3.2.0", @@ -8277,20 +8809,22 @@ } }, "node_modules/goober": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.14.tgz", - "integrity": "sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==", + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz", + "integrity": "sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==", + "license": "MIT", "peerDependencies": { "csstype": "^3.0.10" } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8299,23 +8833,27 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/grid-index": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", - "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==", + "license": "ISC" }, "node_modules/handsontable": { "version": "14.5.0", "resolved": "https://registry.npmjs.org/handsontable/-/handsontable-14.5.0.tgz", "integrity": "sha512-fxCjDZS4z2LFwrmHXqtEKIcfrPxoD8+5AmX7r3pEYp2rjIhmtYKA45DFQ/3PP8PYvSFW8BGR58ZaKecMpGfJXg==", + "license": "SEE LICENSE IN LICENSE.txt", "dependencies": { "@handsontable/pikaday": "^1.0.0", "@types/pikaday": "1.7.4", @@ -8330,26 +8868,32 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-hover": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-hover/-/has-hover-1.0.1.tgz", "integrity": "sha512-0G6w7LnlcpyDzpeGUTuT0CEw05+QlMuGVk1IHNAlHrGJITGodjZu3x8BNDUMfKJSZXNB2ZAclqc1bvrd+uUpfg==", + "license": "MIT", "dependencies": { "is-browser": "^2.0.1" } @@ -8358,6 +8902,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-passive-events/-/has-passive-events-1.0.0.tgz", "integrity": "sha512-2vSj6IeIsgvsRMyeQ0JaCX5Q3lX4zMn5HpoVc7MEhQ6pv8Iq9rsXjsp+E5ZwaT7T0xhMT0KmU8gtt1EFVdbJiw==", + "license": "MIT", "dependencies": { "is-browser": "^2.0.1" } @@ -8367,6 +8912,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -8375,10 +8921,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -8387,10 +8937,11 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8403,6 +8954,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -8417,6 +8969,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -8428,6 +8981,7 @@ "version": "2.2.5", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -8437,6 +8991,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "license": "MIT", "dependencies": { "@types/hast": "^2.0.0", "comma-separated-tokens": "^1.0.0", @@ -8453,6 +9008,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/highlight-words/-/highlight-words-1.2.2.tgz", "integrity": "sha512-Mf4xfPXYm8Ay1wTibCrHpNWeR2nUMynMVFkXCi4mbl+TEgmNOe+I4hV7W3OCZcSvzGL6kupaqpfHOemliMTGxQ==", + "license": "MIT", "engines": { "node": ">= 16", "npm": ">= 8" @@ -8462,6 +9018,7 @@ "version": "10.7.3", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -8470,6 +9027,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.7.6" } @@ -8478,6 +9036,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", "dependencies": { "react-is": "^16.7.0" } @@ -8485,23 +9044,27 @@ "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/hsluv": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/hsluv/-/hsluv-0.0.3.tgz", - "integrity": "sha512-08iL2VyCRbkQKBySkSh6m8zMUa3sADAxGVWs3Z1aPcUkTJeK0ETG4Fc27tEmQBGUAXZjIsXOZqBvacuVNSC/fQ==" + "integrity": "sha512-08iL2VyCRbkQKBySkSh6m8zMUa3sADAxGVWs3Z1aPcUkTJeK0ETG4Fc27tEmQBGUAXZjIsXOZqBvacuVNSC/fQ==", + "license": "MIT" }, "node_modules/html-element-attributes": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/html-element-attributes/-/html-element-attributes-1.3.1.tgz", - "integrity": "sha512-UrRKgp5sQmRnDy4TEwAUsu14XBUlzKB8U3hjIYDjcZ3Hbp86Jtftzxfgrv6E/ii/h78tsaZwAnAE8HwnHr0dPA==" + "integrity": "sha512-UrRKgp5sQmRnDy4TEwAUsu14XBUlzKB8U3hjIYDjcZ3Hbp86Jtftzxfgrv6E/ii/h78tsaZwAnAE8HwnHr0dPA==", + "license": "MIT" }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-encoding": "^3.1.1" }, @@ -8513,12 +9076,14 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/html-parse-stringify": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "license": "MIT", "dependencies": { "void-elements": "3.1.0" } @@ -8528,6 +9093,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -8537,12 +9103,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -8554,6 +9121,7 @@ "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", "dev": true, + "license": "MIT", "bin": { "husky": "bin.js" }, @@ -8568,6 +9136,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/hyperformula/-/hyperformula-2.7.1.tgz", "integrity": "sha512-mpVF5zOyNpksZzgTaCQyRAzdC/X43+taz5x1n7zNbs/PUUv0AuLmsy2yfihCr+vihUzN/pk+gXBbOfNpXKOpgA==", + "license": "GPL-3.0-only", "optional": true, "dependencies": { "chevrotain": "^6.5.0", @@ -8577,7 +9146,8 @@ "node_modules/hyphenate-style-name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", - "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==" + "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", + "license": "BSD-3-Clause" }, "node_modules/i18next": { "version": "23.15.1", @@ -8597,6 +9167,7 @@ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" } ], + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.2" } @@ -8605,6 +9176,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.0.tgz", "integrity": "sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.2" } @@ -8613,6 +9185,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.6.1.tgz", "integrity": "sha512-rCilMAnlEQNeKOZY1+x8wLM5IpYOj10guGvEpeC59tNjj6MMreLIjIW8D1RclhD3ifLwn6d/Y9HEM1RUE6DSog==", + "license": "MIT", "dependencies": { "cross-fetch": "4.0.0" } @@ -8621,6 +9194,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } @@ -8629,6 +9203,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -8640,6 +9215,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -8664,13 +9240,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -8679,6 +9257,7 @@ "version": "10.1.1", "resolved": "https://registry.npmjs.org/immer/-/immer-10.1.1.tgz", "integrity": "sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/immer" @@ -8688,6 +9267,7 @@ "version": "3.7.6", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", "integrity": "sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.8.0" } @@ -8696,6 +9276,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8712,6 +9293,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -8721,30 +9303,22 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -8753,19 +9327,21 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz", "integrity": "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==", + "license": "MIT", "dependencies": { "css-in-js-utils": "^3.1.0" } }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8775,6 +9351,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" } @@ -8783,6 +9360,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8792,6 +9370,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "license": "MIT", "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -8802,13 +9381,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -8820,15 +9401,20 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" }, "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.0.tgz", + "integrity": "sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8838,25 +9424,30 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8868,13 +9459,15 @@ "node_modules/is-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-browser/-/is-browser-2.1.0.tgz", - "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==" + "integrity": "sha512-F5rTJxDQ2sW81fcfOR1GnCXT6sVJC104fCyfj+mjpwNEwaPYSn5fte5jiHmBg3DHsIoL/l8Kvw5VN5SsTRcRFQ==", + "license": "MIT" }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8883,9 +9476,10 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -8897,11 +9491,14 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, + "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -8912,12 +9509,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8930,6 +9529,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8939,6 +9539,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -8951,17 +9552,22 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8971,6 +9577,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "license": "MIT", "engines": { "node": ">=0.10.0" }, @@ -8982,6 +9589,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-firefox/-/is-firefox-1.0.3.tgz", "integrity": "sha512-6Q9ITjvWIm0Xdqv+5U12wgOKEM2KoBw4Y926m0OFkvlCxnbG94HKAsVz8w3fWcfAS5YA2fJORXX1dLrkprCCxA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8991,17 +9599,22 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -9015,6 +9628,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -9026,6 +9640,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9035,6 +9650,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-iexplorer/-/is-iexplorer-1.0.0.tgz", "integrity": "sha512-YeLzceuwg3K6O0MLM3UyUUjKAlyULetwryFp1mHy1I5PfArK0AEqlfa+MR4gkJjcbuJXoDJCvXbyqZVf5CR2Sg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9044,6 +9660,7 @@ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9054,36 +9671,28 @@ "node_modules/is-mobile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-mobile/-/is-mobile-4.0.0.tgz", - "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==" - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "integrity": "sha512-mlcHZA84t1qLSuWkt2v0I2l61PYdyQDt4aG1mLIXF5FDMm4+haBCxCPYSr/uwqQNRk1MiTizn0ypEuRAOLRAew==", + "license": "MIT" }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9096,23 +9705,16 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9121,6 +9723,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -9132,16 +9735,20 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -9155,6 +9762,7 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9163,12 +9771,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -9178,12 +9787,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -9195,20 +9806,25 @@ "node_modules/is-string-blank": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-string-blank/-/is-string-blank-1.0.1.tgz", - "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==" + "integrity": "sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==", + "license": "MIT" }, "node_modules/is-svg-path": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-svg-path/-/is-svg-path-1.0.2.tgz", - "integrity": "sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==" + "integrity": "sha512-Lj4vePmqpPR1ZnRctHv8ltSh1OrSxHkhUkd7wi+VQdcdP15/KvQFyk7LhNuM7ZW0EVbJz8kZLVmL9quLrfq4Kg==", + "license": "MIT" }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -9218,12 +9834,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -9237,6 +9854,7 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9245,25 +9863,30 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -9275,18 +9898,21 @@ "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9296,6 +9922,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -9305,6 +9932,7 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -9314,32 +9942,12 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-source-maps": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", "debug": "^4.1.1", @@ -9354,6 +9962,7 @@ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -9363,16 +9972,21 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/jackspeak": { @@ -9380,6 +9994,7 @@ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -9393,12 +10008,14 @@ "node_modules/javascript-natural-sort": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==" + "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", + "license": "MIT" }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", "peer": true, "dependencies": { "@types/node": "*", @@ -9409,19 +10026,11 @@ "node": ">= 10.13.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -9437,6 +10046,7 @@ "version": "0.16.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "license": "Apache-2.0", "engines": { "node": ">= 0.6.0" } @@ -9445,6 +10055,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", "engines": { "node": ">=14" } @@ -9452,17 +10063,20 @@ "node_modules/js-file-download": { "version": "0.4.12", "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz", - "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==" + "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==", + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -9471,10 +10085,11 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.0.0" } @@ -9484,6 +10099,7 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", "dev": true, + "license": "MIT", "dependencies": { "cssstyle": "^4.1.0", "data-urls": "^5.0.0", @@ -9520,52 +10136,60 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" }, "node_modules/json-source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz", - "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==" + "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==", + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-pretty-compact": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", - "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==" + "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -9577,6 +10201,7 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/jsoneditor/-/jsoneditor-10.1.0.tgz", "integrity": "sha512-s+BP/x9Rx9ukNyTjeWCvIAGTEvXwCw6l4NX4mlxXfkK87F1ZgsesHbD9SsyZDLP27dvcFgr9H/j1jy/Bzzk07Q==", + "license": "Apache-2.0", "dependencies": { "ace-builds": "^1.35.0", "ajv": "^6.12.6", @@ -9590,9 +10215,10 @@ } }, "node_modules/jsonrepair": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.8.1.tgz", - "integrity": "sha512-5wnjaO53EJOhfLFY92nvBz2B9gqF9ql/D4HKUb1WOSBaqtVcAifFfmurblnhCJn/ySqKFA8U3n7nhGMAu/hEjQ==", + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.11.2.tgz", + "integrity": "sha512-ejydGcTq0qKk1r0NUBwjtvswbPFhs19+QEfwSeGwB8KJZ59W7/AOFmQh04c68mkJ+2hGk+OkOmkr2bKG4tGlLQ==", + "license": "ISC", "bin": { "jsonrepair": "bin/cli.js" } @@ -9602,6 +10228,7 @@ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -9616,6 +10243,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "license": "MIT", "engines": { "node": ">=18" } @@ -9623,13 +10251,15 @@ "node_modules/kdbush": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", - "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==" + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "license": "ISC" }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -9638,6 +10268,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9647,6 +10278,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -9658,12 +10290,14 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", "peer": true, "engines": { "node": ">=6.11.5" @@ -9673,6 +10307,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -9686,37 +10321,44 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" }, "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" }, "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==", + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" }, "node_modules/lodash.flow": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==", + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -9725,18 +10367,17 @@ } }, "node_modules/loupe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } + "license": "MIT" }, "node_modules/lowlight": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "license": "MIT", "dependencies": { "fault": "^1.0.0", "highlight.js": "~10.7.0" @@ -9750,6 +10391,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -9759,16 +10401,18 @@ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, + "license": "MIT", "peer": true, "bin": { "lz-string": "bin/bin.js" } }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } @@ -9778,6 +10422,7 @@ "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.25.4", "@babel/types": "^7.25.4", @@ -9789,6 +10434,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -9804,6 +10450,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -9815,6 +10462,7 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", + "license": "MIT", "dependencies": { "once": "~1.3.0" } @@ -9823,6 +10471,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -9831,6 +10480,7 @@ "version": "1.13.3", "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.13.3.tgz", "integrity": "sha512-p8lJFEiqmEQlyv+DQxFAOG/XPWN0Wp7j/Psq93Zywz7qt9CcUKFYDBOoOEKzqe6gudHVJY8/Bhqw6VDpX2lSBg==", + "license": "SEE LICENSE IN LICENSE.txt", "peer": true, "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", @@ -9864,6 +10514,7 @@ "version": "4.7.1", "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-4.7.1.tgz", "integrity": "sha512-lgL7XpIwsgICiL82ITplfS7IGwrB1OJIw/pCvprDp2dhmSSEBgmPzYRvwYYYvJGJD7fxUv1Tvpih4nZ6VrLuaA==", + "license": "BSD-3-Clause", "dependencies": { "@mapbox/geojson-rewind": "^0.5.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", @@ -9903,37 +10554,44 @@ "node_modules/maplibre-gl/node_modules/@mapbox/tiny-sdf": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", - "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==", + "license": "BSD-2-Clause" }, "node_modules/maplibre-gl/node_modules/@mapbox/unitbezier": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", - "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==" + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "license": "BSD-2-Clause" }, "node_modules/maplibre-gl/node_modules/earcut": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.0.tgz", - "integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.1.tgz", + "integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==", + "license": "ISC" }, "node_modules/maplibre-gl/node_modules/geojson-vt": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-4.0.2.tgz", - "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==" + "integrity": "sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==", + "license": "ISC" }, "node_modules/maplibre-gl/node_modules/potpack": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", - "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==" + "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==", + "license": "ISC" }, "node_modules/maplibre-gl/node_modules/quickselect": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz", - "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==" + "integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==", + "license": "ISC" }, "node_modules/maplibre-gl/node_modules/supercluster": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "license": "ISC", "dependencies": { "kdbush": "^4.0.2" } @@ -9941,12 +10599,14 @@ "node_modules/maplibre-gl/node_modules/tinyqueue": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz", - "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==" + "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==", + "license": "ISC" }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "license": "MIT", "peer": true, "bin": { "marked": "bin/marked.js" @@ -9958,12 +10618,14 @@ "node_modules/material-colors": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", + "license": "ISC" }, "node_modules/material-react-table": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/material-react-table/-/material-react-table-3.0.1.tgz", "integrity": "sha512-RP+bnpsOAH5j6zwP04u9HB37fyqbd6mVv9mkT4IUJC3e3gEqixZmkNdJMVM1ZVHoq7yIaM381xf22mpBVe0IaA==", + "license": "MIT", "dependencies": { "@tanstack/match-sorter-utils": "8.19.4", "@tanstack/react-table": "8.20.5", @@ -9987,10 +10649,21 @@ "react-dom": ">=18.0" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/math-log2": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/math-log2/-/math-log2-1.0.1.tgz", "integrity": "sha512-9W0yGtkaMAkf74XGYVy4Dqw3YUMnTNB2eeiw9aQbUl4A3KmuCEHTt2DgAB07ENzOYAjsYSAYufkAq0Zd+jU7zA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9998,17 +10671,20 @@ "node_modules/mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT", "peer": true }, "node_modules/merge2": { @@ -10016,6 +10692,7 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -10025,6 +10702,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -10033,10 +10711,24 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10045,6 +10737,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -10052,23 +10745,12 @@ "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -10077,6 +10759,7 @@ "version": "0.23.8", "resolved": "https://registry.npmjs.org/minim/-/minim-0.23.8.tgz", "integrity": "sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==", + "license": "MIT", "dependencies": { "lodash": "^4.15.0" }, @@ -10088,6 +10771,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10102,6 +10786,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10111,25 +10796,22 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "optional": true - }, "node_modules/mobius1-selectr": { "version": "2.4.13", "resolved": "https://registry.npmjs.org/mobius1-selectr/-/mobius1-selectr-2.4.13.tgz", - "integrity": "sha512-Mk9qDrvU44UUL0EBhbAA1phfQZ7aMZPjwtL7wkpiBzGh8dETGqfsh50mWoX9EkjDlkONlErWXArHCKfoxVg0Bw==" + "integrity": "sha512-Mk9qDrvU44UUL0EBhbAA1phfQZ7aMZPjwtL7wkpiBzGh8dETGqfsh50mWoX9EkjDlkONlErWXArHCKfoxVg0Bw==", + "license": "MIT" }, "node_modules/moment": { "version": "2.30.1", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", "engines": { "node": "*" } @@ -10138,6 +10820,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/mouse-change/-/mouse-change-1.4.0.tgz", "integrity": "sha512-vpN0s+zLL2ykyyUDh+fayu9Xkor5v/zRD9jhSqjRS1cJTGS0+oakVZzNm5n19JvvEj0you+MXlYTpNxUDQUjkQ==", + "license": "MIT", "dependencies": { "mouse-event": "^1.0.0" } @@ -10145,17 +10828,20 @@ "node_modules/mouse-event": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/mouse-event/-/mouse-event-1.0.5.tgz", - "integrity": "sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==" + "integrity": "sha512-ItUxtL2IkeSKSp9cyaX2JLUuKk2uMoxBg4bbOWVd29+CskYJR9BGsUqtXenNzKbnDshvupjUewDIYVrOB6NmGw==", + "license": "MIT" }, "node_modules/mouse-event-offset": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/mouse-event-offset/-/mouse-event-offset-3.0.2.tgz", - "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==" + "integrity": "sha512-s9sqOs5B1Ykox3Xo8b3Ss2IQju4UwlW6LSR+Q5FXWpprJ5fzMLefIIItr3PH8RwzfGy6gxs/4GAmiNuZScE25w==", + "license": "MIT" }, "node_modules/mouse-wheel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mouse-wheel/-/mouse-wheel-1.2.0.tgz", "integrity": "sha512-+OfYBiUOCTWcTECES49neZwL5AoGkXE+lFjIvzwNCnYRlso+EnfvovcBxGoyQ0yQt806eSPjS675K0EwWknXmw==", + "license": "MIT", "dependencies": { "right-now": "^1.0.0", "signum": "^1.0.0", @@ -10167,6 +10853,7 @@ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -10174,13 +10861,15 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/mumath": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/mumath/-/mumath-3.3.4.tgz", "integrity": "sha512-VAFIOG6rsxoc7q/IaY3jdjmrsuX9f15KlRLYTHmixASBZkZEKC1IFqE2BC5CdhXmK6WLM1Re33z//AGmeRI6FA==", "deprecated": "Redundant dependency in your project.", + "license": "Unlicense", "dependencies": { "almost-equal": "^1.1.0" } @@ -10188,18 +10877,14 @@ "node_modules/murmurhash-js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", - "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==" - }, - "node_modules/nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", - "optional": true + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "license": "MIT" }, "node_modules/nano-css": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.6.2.tgz", "integrity": "sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==", + "license": "Unlicense", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "css-tree": "^1.1.2", @@ -10216,20 +10901,22 @@ } }, "node_modules/nano-css/node_modules/stylis": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", - "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==" + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.5.tgz", + "integrity": "sha512-K7npNOKGRYuhAFFzkzMGfxFDpN6gDwf8hcMiE+uveTVbBgm93HrNP3ZDUpKqzZ4pG7TP6fmb+EMAQPjq9FqqvA==", + "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -10237,27 +10924,24 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "optional": true - }, "node_modules/native-promise-only": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==" + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/needle": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", + "license": "MIT", "dependencies": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -10274,6 +10958,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -10282,12 +10967,14 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT", "peer": true }, "node_modules/neotraverse": { "version": "0.6.18", "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", "engines": { "node": ">= 10" } @@ -10295,36 +10982,24 @@ "node_modules/next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-abi": { - "version": "3.68.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.68.0.tgz", - "integrity": "sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==", - "optional": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" }, "node_modules/node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==" + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.0.tgz", + "integrity": "sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } }, "node_modules/node-domexception": { "version": "1.0.0", @@ -10340,6 +11015,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } @@ -10348,6 +11024,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -10367,6 +11044,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz", "integrity": "sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==", + "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -10382,36 +11060,54 @@ "node_modules/node-fetch/node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" }, "node_modules/normalize-svg-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-0.1.0.tgz", - "integrity": "sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==" + "integrity": "sha512-1/kmYej2iedi5+ROxkRESL/pI02pkg0OBnaR4hJkSIX6+ORzepwbuUXfrdZaPjysTsJInj0Rj5NuX027+dMBvA==", + "license": "MIT" }, "node_modules/notistack": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/notistack/-/notistack-3.0.1.tgz", "integrity": "sha512-ntVZXXgSQH5WYfyU+3HfcXuKaapzAJ8fBLQ/G618rn3yvSzEbnOB8ZSOwhX+dAORy/lw+GC2N061JA0+gYWTVA==", + "license": "MIT", "dependencies": { "clsx": "^1.1.0", "goober": "^2.0.33" @@ -10433,6 +11129,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -10441,6 +11138,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-integer/-/number-is-integer-1.0.1.tgz", "integrity": "sha512-Dq3iuiFBkrbmuQjGFFF3zckXNCQoSD37/SdSbgcBailUx6knDvDwb5CympBgcoWHy36sfS12u74MHYkXyHq6bg==", + "license": "MIT", "dependencies": { "is-finite": "^1.0.1" }, @@ -10452,6 +11150,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/numbro/-/numbro-2.1.2.tgz", "integrity": "sha512-7w833BxZmKGLE9HI0aREtNVRVH6WTYUUlWf4qgA5gKNhPQ4F/MRZ14sc0v8eoLORprk9ZTVwYaLwj8N3Zgxwiw==", + "license": "MIT", "dependencies": { "bignumber.js": "^8.0.1" }, @@ -10460,24 +11159,27 @@ } }, "node_modules/nwsapi": { - "version": "2.2.13", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", - "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", - "dev": true + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", + "dev": true, + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10490,19 +11192,23 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -10517,6 +11223,7 @@ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10531,6 +11238,7 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10548,6 +11256,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "license": "MIT", "dependencies": { "is-extendable": "^1.0.0" }, @@ -10556,12 +11265,14 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -10576,27 +11287,30 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/openapi-path-templating": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/openapi-path-templating/-/openapi-path-templating-1.6.0.tgz", - "integrity": "sha512-1atBNwOUrZXthTvlvvX8k8ovFEF3iA8mDidYMkdOtvVdndBhTrspbwGXNOzEUaJhm9iUl4Tf5uQaeTLAJvwPig==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/openapi-path-templating/-/openapi-path-templating-2.1.0.tgz", + "integrity": "sha512-fLs5eJmLyU8wPRz+JSH5uLE7TE4Ohg6VHOtj0C0AlD3GTCCcw2LgKW6MSN1A8ZBKHEg2O4/d02knmVU1nvGAKQ==", + "license": "Apache-2.0", "dependencies": { - "apg-lite": "^1.0.3" + "apg-lite": "^1.0.4" }, "engines": { "node": ">=12.20.0" } }, "node_modules/openapi-server-url-templating": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/openapi-server-url-templating/-/openapi-server-url-templating-1.1.0.tgz", - "integrity": "sha512-dtyTFKx2xVcO0W8JKaluXIHC9l/MLjHeflBaWjiWNMCHp/TBs9dEjQDbj/VFlHR4omFOKjjmqm1pW1aCAhmPBg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/openapi-server-url-templating/-/openapi-server-url-templating-1.3.0.tgz", + "integrity": "sha512-DPlCms3KKEbjVQb0spV6Awfn6UWNheuG/+folQPzh/wUaKwuqvj8zt5gagD7qoyxtE03cIiKPgLFS3Q8Bz00uQ==", + "license": "Apache-2.0", "dependencies": { - "apg-lite": "^1.0.3" + "apg-lite": "^1.0.4" }, "engines": { "node": ">=12.20.0" @@ -10607,6 +11321,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -10619,10 +11334,29 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -10637,6 +11371,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -10651,12 +11386,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -10667,12 +11404,14 @@ "node_modules/parenthesis": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/parenthesis/-/parenthesis-3.1.8.tgz", - "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==" + "integrity": "sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==", + "license": "MIT" }, "node_modules/parse-entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "license": "MIT", "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -10691,6 +11430,7 @@ "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", "dev": true, + "license": "Apache-2.0 AND MIT", "dependencies": { "es-module-lexer": "^1.5.3", "slashes": "^3.0.12" @@ -10703,6 +11443,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -10720,6 +11461,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/parse-rect/-/parse-rect-1.2.0.tgz", "integrity": "sha512-4QZ6KYbnE6RTwg9E0HpLchUM9EZt6DnDxajFZZDSV4p/12ZJEvPO702DZpGvRYEPo00yKDys7jASi+/w7aO8LA==", + "license": "MIT", "dependencies": { "pick-by-alias": "^1.2.0" } @@ -10727,20 +11469,23 @@ "node_modules/parse-svg-path": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", - "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==" + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==", + "license": "MIT" }, "node_modules/parse-unit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-unit/-/parse-unit-1.0.1.tgz", - "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==" + "integrity": "sha512-hrqldJHokR3Qj88EIlV/kAyAi/G5R2+R56TBANxNMy0uPlYcttx0jnMW6Yx5KsKPSbC3KddM/7qQm3+0wEXKxg==", + "license": "MIT" }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", "dev": true, + "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^4.5.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -10750,24 +11495,17 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10775,13 +11513,15 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -10797,12 +11537,14 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", "engines": { "node": ">=8" } @@ -10811,13 +11553,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.16" } @@ -10826,6 +11570,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.3.0.tgz", "integrity": "sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==", + "license": "BSD-3-Clause", "dependencies": { "ieee754": "^1.1.12", "resolve-protobuf-schema": "^2.1.0" @@ -10837,25 +11582,29 @@ "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" }, "node_modules/pick-by-alias": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pick-by-alias/-/pick-by-alias-1.2.0.tgz", - "integrity": "sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==" + "integrity": "sha512-ESj2+eBxhGrcA1azgHs7lARG5+5iLakc/6nlfbpjcLl00HuuUOIuORhYXN4D1HfvMSKuVtFQjAlnwi1JHEeDIw==", + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -10864,17 +11613,20 @@ "node_modules/picomodal": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/picomodal/-/picomodal-3.0.0.tgz", - "integrity": "sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw==" + "integrity": "sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw==", + "license": "MIT" }, "node_modules/pikaday": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/pikaday/-/pikaday-1.8.2.tgz", - "integrity": "sha512-TNtsE+34BIax3WtkB/qqu5uepV1McKYEgvL3kWzU7aqPCpMEN6rBF3AOwu4WCwAealWlBGobXny/9kJb49C1ew==" + "integrity": "sha512-TNtsE+34BIax3WtkB/qqu5uepV1McKYEgvL3kWzU7aqPCpMEN6rBF3AOwu4WCwAealWlBGobXny/9kJb49C1ew==", + "license": "(0BSD OR MIT)" }, "node_modules/plotly.js": { "version": "2.35.2", "resolved": "https://registry.npmjs.org/plotly.js/-/plotly.js-2.35.2.tgz", "integrity": "sha512-s0knlWzRvLQXxzf3JQ6qbm8FpwKuMjkr+6r04f8/yCEByAQ+I0jkUzY/hSGRGb+u7iljTh9hgpEiiJP90vjyeQ==", + "license": "MIT", "dependencies": { "@plotly/d3": "3.8.2", "@plotly/d3-sankey": "0.7.2", @@ -10934,6 +11686,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -10944,26 +11697,29 @@ "node_modules/point-in-polygon": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/point-in-polygon/-/point-in-polygon-1.1.0.tgz", - "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==" + "integrity": "sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==", + "license": "MIT" }, "node_modules/polybooljs": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/polybooljs/-/polybooljs-1.2.2.tgz", - "integrity": "sha512-ziHW/02J0XuNuUtmidBc6GXE8YohYydp3DWPWXYsd7O721TjcmN+k6ezjdwkDqep+gnWnFY+yqZHvzElra2oCg==" + "integrity": "sha512-ziHW/02J0XuNuUtmidBc6GXE8YohYydp3DWPWXYsd7O721TjcmN+k6ezjdwkDqep+gnWnFY+yqZHvzElra2oCg==", + "license": "MIT" }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.0.tgz", + "integrity": "sha512-27VKOqrYfPncKA2NrFOVhP5MGAfHKLYn/Q0mz9cNQyRAKYi3VNHwYU2qKKqPCqgBmeeJ0uAFB56NumXZ5ZReXg==", "funding": [ { "type": "opencollective", @@ -10978,9 +11734,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -10991,6 +11748,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -10999,12 +11757,13 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -11015,11 +11774,12 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" @@ -11032,6 +11792,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -11043,9 +11804,10 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -11057,53 +11819,31 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" }, "node_modules/potpack": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.2.tgz", - "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==" - }, - "node_modules/prebuild-install": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", - "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } + "integrity": "sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ==", + "license": "ISC" }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -11119,6 +11859,7 @@ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -11131,6 +11872,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "ansi-regex": "^5.0.1", @@ -11146,6 +11888,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -11159,12 +11902,14 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/prismjs": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -11173,6 +11918,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-7.2.3.tgz", "integrity": "sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==", + "license": "MIT", "dependencies": { "lodash.merge": "^4.6.2", "needle": "^2.5.2", @@ -11183,6 +11929,7 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -11190,12 +11937,14 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" }, "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "license": "MIT", "dependencies": { "asap": "~2.0.3" } @@ -11204,6 +11953,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -11213,12 +11963,14 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/property-information": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "license": "MIT", "dependencies": { "xtend": "^4.0.0" }, @@ -11230,27 +11982,20 @@ "node_modules/protocol-buffers-schema": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "license": "MIT" }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "optional": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -11258,12 +12003,14 @@ "node_modules/pure-color": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==", + "license": "MIT" }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -11283,17 +12030,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quickselect": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "license": "ISC" }, "node_modules/raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", "dependencies": { "performance-now": "^2.1.0" } @@ -11301,12 +12051,14 @@ "node_modules/raf-schd": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", - "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==" + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==", + "license": "MIT" }, "node_modules/ramda": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz", "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/ramda" @@ -11316,6 +12068,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-5.1.0.tgz", "integrity": "sha512-8qCpl2vZBXEJyNbi4zqcgdfHtcdsWjOGbiNSEnEBrM6Y0OKOT8UxJbIVGm1TIcjaSu2MxaWcgtsNlKlCk7o7qg==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.3" }, @@ -11331,6 +12084,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "license": "MIT", "dependencies": { "drange": "^1.0.2", "ret": "^0.2.0" @@ -11343,44 +12097,16 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "optional": true - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -11392,6 +12118,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "license": "MIT", "dependencies": { "base16": "^1.0.0", "lodash.curry": "^4.0.1", @@ -11403,6 +12130,8 @@ "version": "13.1.1", "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz", "integrity": "sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ==", + "deprecated": "react-beautiful-dnd is now deprecated. Context and options: https://github.com/atlassian/react-beautiful-dnd/issues/2672", + "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.9.2", "css-box-model": "^1.2.0", @@ -11420,12 +12149,14 @@ "node_modules/react-beautiful-dnd/node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" }, "node_modules/react-beautiful-dnd/node_modules/react-redux": { "version": "7.2.9", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.15.4", "@types/react-redux": "^7.1.20", @@ -11450,6 +12181,7 @@ "version": "2.19.3", "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "license": "MIT", "dependencies": { "@icons/material": "^0.2.4", "lodash": "^4.17.15", @@ -11467,6 +12199,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "license": "MIT", "dependencies": { "copy-to-clipboard": "^3.3.1", "prop-types": "^15.8.1" @@ -11479,6 +12212,7 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/react-d3-graph/-/react-d3-graph-2.6.0.tgz", "integrity": "sha512-U72didZuPuYEqAi1n2bJvnph+9MviIw2x9I0eoxb1IKk3cyEwsJV96n3RL72z/7HDsa1FOvDKuOJE7ujSNZB/Q==", + "license": "MIT", "engines": { "node": ">=8.9.0" }, @@ -11491,6 +12225,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.3.0.tgz", "integrity": "sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==", + "license": "MIT", "dependencies": { "lodash.debounce": "^4", "prop-types": "^15.8.1" @@ -11503,6 +12238,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -11515,6 +12251,7 @@ "version": "14.2.3", "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", + "license": "MIT", "dependencies": { "attr-accept": "^2.2.2", "file-selector": "^0.6.0", @@ -11531,6 +12268,7 @@ "version": "0.0.21", "resolved": "https://registry.npmjs.org/react-easy-swipe/-/react-easy-swipe-0.0.21.tgz", "integrity": "sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg==", + "license": "MIT", "peer": true, "dependencies": { "prop-types": "^15.5.8" @@ -11543,6 +12281,7 @@ "version": "7.53.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.53.0.tgz", "integrity": "sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==", + "license": "MIT", "engines": { "node": ">=18.0.0" }, @@ -11558,6 +12297,7 @@ "version": "1.4.6", "resolved": "https://registry.npmjs.org/react-html-attributes/-/react-html-attributes-1.4.6.tgz", "integrity": "sha512-uS3MmThNKFH2EZUQQw4k5pIcU7XIr208UE5dktrj/GOH1CMagqxDl4DCLpt3o2l9x+IB5nVYBeN3Cr4IutBXAg==", + "license": "MIT", "dependencies": { "html-element-attributes": "^1.0.0" } @@ -11566,6 +12306,7 @@ "version": "15.0.2", "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.0.2.tgz", "integrity": "sha512-z0W3/RES9Idv3MmJUcf0mDNeeMOUXe+xoL0kPfQPbDoZHmni/XsIoq5zgT2MCFUiau283GuBUK578uD/mkAbLQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.0", "html-parse-stringify": "^3.0.1" @@ -11587,6 +12328,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.2.0.tgz", "integrity": "sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==", + "license": "MIT", "dependencies": { "invariant": "^2.2.2" }, @@ -11598,6 +12340,7 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/react-immutable-pure-component/-/react-immutable-pure-component-2.2.2.tgz", "integrity": "sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A==", + "license": "MIT", "peerDependencies": { "immutable": ">= 2 || >= 4.0.0-rc", "react": ">= 16.6", @@ -11608,6 +12351,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", + "license": "MIT", "peerDependencies": { "react": "^16.8.4 || ^17.0.0 || ^18.0.0" } @@ -11615,12 +12359,14 @@ "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" }, "node_modules/react-json-view": { "version": "1.21.3", "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "license": "MIT", "dependencies": { "flux": "^4.0.1", "react-base16-styling": "^0.6.0", @@ -11635,21 +12381,24 @@ "node_modules/react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "license": "MIT" }, "node_modules/react-number-format": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.2.tgz", - "integrity": "sha512-cg//jVdS49PYDgmcYoBnMMHl4XNTMuV723ZnHD2aXYtWWWqbVF3hjQ8iB+UZEuXapLbeA8P8H+1o6ZB1lcw3vg==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.3.tgz", + "integrity": "sha512-VCY5hFg/soBighAoGcdE+GagkJq0230qN6jcS5sp8wQX1qy1fYN/RX7/BXkrs0oyzzwqR8/+eSUrqXbGeywdUQ==", + "license": "MIT", "peerDependencies": { - "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/react-plotly.js": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/react-plotly.js/-/react-plotly.js-2.6.0.tgz", "integrity": "sha512-g93xcyhAVCSt9kV1svqG1clAEdL6k3U+jjuSzfTV7owaSU9Go6Ph8bl25J+jKfKvIGAEYpe4qj++WHJuc9IaeA==", + "license": "MIT", "dependencies": { "prop-types": "^15.8.1" }, @@ -11662,6 +12411,7 @@ "version": "8.1.3", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.1", "@types/hoist-non-react-statics": "^3.3.1", @@ -11700,6 +12450,7 @@ "version": "3.2.23", "resolved": "https://registry.npmjs.org/react-responsive-carousel/-/react-responsive-carousel-3.2.23.tgz", "integrity": "sha512-pqJLsBaKHWJhw/ItODgbVoziR2z4lpcJg+YwmRlSk4rKH32VE633mAtZZ9kDXjy4wFO+pgUZmDKPsPe1fPmHCg==", + "license": "MIT", "peer": true, "dependencies": { "classnames": "^2.2.5", @@ -11711,6 +12462,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz", "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==", + "license": "MIT", "dependencies": { "history": "^5.2.0" }, @@ -11722,6 +12474,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz", "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==", + "license": "MIT", "dependencies": { "history": "^5.2.0", "react-router": "6.3.0" @@ -11735,6 +12488,7 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/react-split/-/react-split-2.0.14.tgz", "integrity": "sha512-bKWydgMgaKTg/2JGQnaJPg51T6dmumTWZppFgEbbY0Fbme0F5TuatAScCLaqommbGQQf/ZT1zaejuPDriscISA==", + "license": "MIT", "dependencies": { "prop-types": "^15.5.7", "split.js": "^1.6.0" @@ -11747,6 +12501,7 @@ "version": "15.5.0", "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz", "integrity": "sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "highlight.js": "^10.4.1", @@ -11759,9 +12514,10 @@ } }, "node_modules/react-textarea-autosize": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", - "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", + "version": "8.5.7", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.7.tgz", + "integrity": "sha512-2MqJ3p0Jh69yt9ktFIaZmORHXw4c4bxSIhCeWiFwmJ9EYKgLmuNII3e9c9b2UO+ijl4StnpZdqpxNIhTdHvqtQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", @@ -11771,13 +12527,14 @@ "node": ">=10" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -11802,6 +12559,7 @@ "version": "17.5.1", "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.5.1.tgz", "integrity": "sha512-LG/uPEVRflLWMwi3j/sZqR00nF6JGqTTDblkXK2nzXsIvij06hXl1V/MZIlwj1OKIQUtlh1l9jK8gLsRyCQxMg==", + "license": "Unlicense", "dependencies": { "@types/js-cookie": "^2.2.6", "@xobotyi/scrollbar-width": "^1.9.5", @@ -11826,17 +12584,20 @@ "node_modules/react-use/node_modules/@types/js-cookie": { "version": "2.2.7", "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==" + "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==", + "license": "MIT" }, "node_modules/react-use/node_modules/js-cookie": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "license": "MIT" }, "node_modules/react-virtualized-auto-sizer": { "version": "1.0.24", "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.24.tgz", "integrity": "sha512-3kCn7N9NEb3FlvJrSHWGQ4iVl+ydQObq2fHMn12i5wbtm74zHOPhz/i64OL3c1S1vi9i2GXtZqNqUJTQ+BnNfg==", + "license": "MIT", "peerDependencies": { "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0", "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0" @@ -11846,6 +12607,7 @@ "version": "1.8.10", "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.10.tgz", "integrity": "sha512-Y0Cx+dnU6NLa5/EvoHukUD0BklJ8qITCtVEPY1C/nL8wwoZ0b5aEw8Ff1dOVHw7fCzMt55XfJDd8S8W8LCaUCg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", "memoize-one": ">=3.1.1 <6" @@ -11862,6 +12624,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "license": "MIT", "dependencies": { "lodash": "^4.0.1" } @@ -11870,6 +12633,7 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11883,18 +12647,21 @@ "node_modules/readable-stream/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" }, "node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -11907,6 +12674,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.9.2" } @@ -11915,23 +12683,26 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "license": "MIT", "peerDependencies": { "redux": "^4" } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -11944,6 +12715,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", + "license": "MIT", "dependencies": { "hastscript": "^6.0.0", "parse-entities": "^2.0.0", @@ -11958,6 +12730,7 @@ "version": "1.27.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -11965,24 +12738,29 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" }, "node_modules/regexp-to-ast": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.4.0.tgz", "integrity": "sha512-4qf/7IsIKfSNHQXSwial1IFmfM1Cc/whNBQqRwe0V2stPe7KmN1U0tWQiIx6JiirgSrisjE0eECdNf7Tav1Ntw==", + "license": "MIT", "optional": true }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -11995,12 +12773,14 @@ "name": "@plotly/regl", "version": "2.1.2", "resolved": "https://registry.npmjs.org/@plotly/regl/-/regl-2.1.2.tgz", - "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==" + "integrity": "sha512-Mdk+vUACbQvjd0m/1JJjOOafmkp/EpmHjISsopEz5Av44CBq7rPC05HHNbYGKVyNUF2zmEoBS/TT0pd0SPFFyw==", + "license": "MIT" }, "node_modules/regl-error2d": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/regl-error2d/-/regl-error2d-2.0.12.tgz", "integrity": "sha512-r7BUprZoPO9AbyqM5qlJesrSRkl+hZnVKWKsVp7YhOl/3RIpi4UDGASGJY0puQ96u5fBYw/OlqV24IGcgJ0McA==", + "license": "MIT", "dependencies": { "array-bounds": "^1.0.1", "color-normalize": "^1.5.0", @@ -12015,6 +12795,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/regl-line2d/-/regl-line2d-3.1.3.tgz", "integrity": "sha512-fkgzW+tTn4QUQLpFKsUIE0sgWdCmXAM3ctXcCgoGBZTSX5FE2A0M7aynz7nrZT5baaftLrk9te54B+MEq4QcSA==", + "license": "MIT", "dependencies": { "array-bounds": "^1.0.1", "array-find-index": "^1.0.2", @@ -12033,6 +12814,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/regl-scatter2d/-/regl-scatter2d-3.3.1.tgz", "integrity": "sha512-seOmMIVwaCwemSYz/y4WE0dbSO9svNFSqtTh5RE57I7PjGo3tcUYKtH0MTSoshcAsreoqN8HoCtnn8wfHXXfKQ==", + "license": "MIT", "dependencies": { "@plotly/point-cluster": "^3.1.9", "array-range": "^1.0.1", @@ -12055,6 +12837,7 @@ "version": "1.0.14", "resolved": "https://registry.npmjs.org/regl-splom/-/regl-splom-1.0.14.tgz", "integrity": "sha512-OiLqjmPRYbd7kDlHC6/zDf6L8lxgDC65BhC8JirhP4ykrK4x22ZyS+BnY8EUinXKDeMgmpRwCvUmk7BK4Nweuw==", + "license": "MIT", "dependencies": { "array-bounds": "^1.0.1", "array-range": "^1.0.1", @@ -12070,6 +12853,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz", "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==", + "license": "MIT", "dependencies": { "argparse": "^1.0.10", "autolinker": "^3.11.0" @@ -12085,6 +12869,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -12092,21 +12877,34 @@ "node_modules/remove-accents": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", - "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", + "license": "MIT" }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", "engines": { "node": ">=0.10" } }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.5" } @@ -12114,30 +12912,37 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" }, "node_modules/reselect": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", - "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", + "license": "MIT" }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12146,6 +12951,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", "engines": { "node": ">=4" } @@ -12154,6 +12960,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "license": "MIT", "dependencies": { "protocol-buffers-schema": "^3.3.1" } @@ -12162,6 +12969,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "license": "MIT", "engines": { "node": ">=4" } @@ -12171,6 +12979,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -12179,29 +12988,15 @@ "node_modules/right-now": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz", - "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "integrity": "sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==", + "license": "MIT" }, "node_modules/rollup": { - "version": "4.22.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.5.tgz", - "integrity": "sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w==", + "version": "4.30.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.30.1.tgz", + "integrity": "sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.6" }, @@ -12213,22 +13008,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.22.5", - "@rollup/rollup-android-arm64": "4.22.5", - "@rollup/rollup-darwin-arm64": "4.22.5", - "@rollup/rollup-darwin-x64": "4.22.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.22.5", - "@rollup/rollup-linux-arm-musleabihf": "4.22.5", - "@rollup/rollup-linux-arm64-gnu": "4.22.5", - "@rollup/rollup-linux-arm64-musl": "4.22.5", - "@rollup/rollup-linux-powerpc64le-gnu": "4.22.5", - "@rollup/rollup-linux-riscv64-gnu": "4.22.5", - "@rollup/rollup-linux-s390x-gnu": "4.22.5", - "@rollup/rollup-linux-x64-gnu": "4.22.5", - "@rollup/rollup-linux-x64-musl": "4.22.5", - "@rollup/rollup-win32-arm64-msvc": "4.22.5", - "@rollup/rollup-win32-ia32-msvc": "4.22.5", - "@rollup/rollup-win32-x64-msvc": "4.22.5", + "@rollup/rollup-android-arm-eabi": "4.30.1", + "@rollup/rollup-android-arm64": "4.30.1", + "@rollup/rollup-darwin-arm64": "4.30.1", + "@rollup/rollup-darwin-x64": "4.30.1", + "@rollup/rollup-freebsd-arm64": "4.30.1", + "@rollup/rollup-freebsd-x64": "4.30.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", + "@rollup/rollup-linux-arm-musleabihf": "4.30.1", + "@rollup/rollup-linux-arm64-gnu": "4.30.1", + "@rollup/rollup-linux-arm64-musl": "4.30.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", + "@rollup/rollup-linux-riscv64-gnu": "4.30.1", + "@rollup/rollup-linux-s390x-gnu": "4.30.1", + "@rollup/rollup-linux-x64-gnu": "4.30.1", + "@rollup/rollup-linux-x64-musl": "4.30.1", + "@rollup/rollup-win32-arm64-msvc": "4.30.1", + "@rollup/rollup-win32-ia32-msvc": "4.30.1", + "@rollup/rollup-win32-x64-msvc": "4.30.1", "fsevents": "~2.3.2" } }, @@ -12236,12 +13034,14 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rtl-css-js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2" } @@ -12265,6 +13065,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -12272,17 +13073,20 @@ "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -12309,17 +13113,36 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -12331,18 +13154,21 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, + "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -12354,6 +13180,7 @@ "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } @@ -12362,6 +13189,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -12380,6 +13208,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" }, @@ -12391,6 +13220,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -12399,6 +13229,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -12413,6 +13244,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", "peer": true, "dependencies": { "randombytes": "^2.1.0" @@ -12423,6 +13255,7 @@ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -12440,6 +13273,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -12454,41 +13288,37 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==", + "license": "Unlicense", "engines": { "node": ">=6.9" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -12500,13 +13330,15 @@ "node_modules/shallow-copy": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==", + "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -12519,6 +13351,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12527,21 +13360,80 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-5.2.0.tgz", "integrity": "sha512-cMGfwNyfDZ/nzJ2k2M+ClthBIh//GlZl1JEf47Uoa9XR11bz8Pa2T2wQO4bVrRdH48LrIDWJahQziKo3MjhsWg==", + "license": "Apache-2.0", "bin": { "short-unique-id": "bin/short-unique-id", "suid": "bin/short-unique-id" } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -12554,13 +13446,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -12571,58 +13465,15 @@ "node_modules/signum": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/signum/-/signum-1.0.0.tgz", - "integrity": "sha512-yodFGwcyt59XRh7w5W3jPcIQb3Bwi21suEfT7MAWnBX3iCdklJpgDgvGT9o04UonglZN5SNMfJFkHIR/jO8GHw==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } + "integrity": "sha512-yodFGwcyt59XRh7w5W3jPcIQb3Bwi21suEfT7MAWnBX3iCdklJpgDgvGT9o04UonglZN5SNMfJFkHIR/jO8GHw==", + "license": "MIT" }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, + "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", @@ -12632,65 +13483,18 @@ "node": ">= 10" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/slashes": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", - "dev": true - }, - "node_modules/sort-asc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", - "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-desc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", - "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-object": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", - "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", - "dependencies": { - "bytewise": "^1.1.0", - "get-value": "^2.0.2", - "is-extendable": "^0.1.1", - "sort-asc": "^0.2.0", - "sort-desc": "^0.2.0", - "union-value": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-object/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } + "dev": true, + "license": "ISC" }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -12699,6 +13503,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -12707,6 +13512,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", "peer": true, "dependencies": { "buffer-from": "^1.0.0", @@ -12717,6 +13523,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.10.0" @@ -12726,6 +13533,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -12735,13 +13543,15 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -12751,45 +13561,26 @@ "version": "3.0.20", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } + "dev": true, + "license": "CC0-1.0" }, "node_modules/split.js": { "version": "1.6.5", "resolved": "https://registry.npmjs.org/split.js/-/split.js-1.6.5.tgz", - "integrity": "sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw==" + "integrity": "sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw==", + "license": "MIT" }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" }, "node_modules/stack-generator": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", + "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } @@ -12806,17 +13597,20 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stackframe": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" }, "node_modules/stacktrace-gps": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", + "license": "MIT", "dependencies": { "source-map": "0.5.6", "stackframe": "^1.3.4" @@ -12826,6 +13620,7 @@ "version": "0.5.6", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -12834,6 +13629,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "license": "MIT", "dependencies": { "error-stack-parser": "^2.0.6", "stack-generator": "^2.0.5", @@ -12844,20 +13640,23 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz", "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==", + "license": "MIT", "dependencies": { "escodegen": "^2.1.0" } }, "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", - "dev": true + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "dev": true, + "license": "MIT" }, "node_modules/stream-parser": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", "integrity": "sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==", + "license": "MIT", "dependencies": { "debug": "2" } @@ -12866,6 +13665,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -12873,17 +13673,20 @@ "node_modules/stream-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/stream-shift": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT" }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -12891,12 +13694,14 @@ "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" }, "node_modules/string-split-by": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/string-split-by/-/string-split-by-1.0.0.tgz", "integrity": "sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==", + "license": "MIT", "dependencies": { "parenthesis": "^3.1.5" } @@ -12906,6 +13711,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -12924,6 +13730,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12937,53 +13744,42 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } + "license": "MIT" }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -12997,21 +13793,26 @@ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -13021,15 +13822,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13039,6 +13845,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -13052,15 +13859,19 @@ } }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-ansi-cjs": { @@ -13069,6 +13880,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13076,11 +13888,25 @@ "node": ">=8" } }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -13093,6 +13919,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -13103,12 +13930,14 @@ "node_modules/strongly-connected-components": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strongly-connected-components/-/strongly-connected-components-1.0.1.tgz", - "integrity": "sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==" + "integrity": "sha512-i0TFx4wPcO0FwX+4RkLJi1MxmcTv90jNZgxMu9XRnMXMeFUY1VJlIoXpZunPUvUUqbCT1pg5PEkFqqpcaElNaA==", + "license": "MIT" }, "node_modules/style-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", + "license": "MIT", "engines": { "node": ">= 18.12.0" }, @@ -13123,12 +13952,14 @@ "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" }, "node_modules/supercluster": { "version": "7.1.5", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", "integrity": "sha512-EulshI3pGUM66o6ZdH3ReiFcvHpM3vAigyK+vcxdjpJyEbIIrtbmBdY23mGgnI24uXiGFvrGq9Gkum/8U7vJWg==", + "license": "ISC", "dependencies": { "kdbush": "^3.0.0" } @@ -13136,28 +13967,33 @@ "node_modules/supercluster/node_modules/kdbush": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", - "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==", + "license": "ISC" }, "node_modules/superscript-text": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/superscript-text/-/superscript-text-1.0.0.tgz", - "integrity": "sha512-gwu8l5MtRZ6koO0icVTlmN5pm7Dhh1+Xpe9O4x6ObMAsW+3jPbW14d1DsBq1F4wiI+WOFjXF35pslgec/G8yCQ==" + "integrity": "sha512-gwu8l5MtRZ6koO0icVTlmN5pm7Dhh1+Xpe9O4x6ObMAsW+3jPbW14d1DsBq1F4wiI+WOFjXF35pslgec/G8yCQ==", + "license": "MIT" }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -13168,12 +14004,14 @@ "node_modules/svg-arc-to-cubic-bezier": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", - "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==" + "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==", + "license": "ISC" }, "node_modules/svg-path-bounds": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/svg-path-bounds/-/svg-path-bounds-1.0.2.tgz", "integrity": "sha512-H4/uAgLWrppIC0kHsb2/dWUYSmb4GE5UqH06uqWBcg6LBjX2fu0A8+JrO2/FJPZiSsNOKZAhyFFgsLTdYUvSqQ==", + "license": "MIT", "dependencies": { "abs-svg-path": "^0.1.1", "is-svg-path": "^1.0.1", @@ -13185,6 +14023,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", + "license": "MIT", "dependencies": { "svg-arc-to-cubic-bezier": "^3.0.0" } @@ -13193,6 +14032,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/svg-path-sdf/-/svg-path-sdf-1.1.3.tgz", "integrity": "sha512-vJJjVq/R5lSr2KLfVXVAStktfcfa1pNFjFOgyJnzZFXlO/fDZ5DmM8FpnSKKzLPfEYTVeXuVBTHF296TpxuJVg==", + "license": "MIT", "dependencies": { "bitmap-sdf": "^1.0.0", "draw-svg-path": "^1.0.0", @@ -13202,25 +14042,27 @@ } }, "node_modules/swagger-client": { - "version": "3.29.3", - "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.29.3.tgz", - "integrity": "sha512-OhhMAO2dwDEaxtUNDxwaqzw75uiZY5lX/2vx+U6eKCYZYhXWQ5mylU/0qfk/xMR20VyitsnzRc6KcFFjRoCS7A==", + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.33.2.tgz", + "integrity": "sha512-LL91X4+KZr3qMdm2knL1ncF104LlmQMNlrlQwm83r793eQiOdB5iuEz1ppdRv/r211vZE66m38VzHclXmqwW7A==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.22.15", - "@swagger-api/apidom-core": ">=1.0.0-alpha.9 <1.0.0-beta.0", - "@swagger-api/apidom-error": ">=1.0.0-alpha.9 <1.0.0-beta.0", - "@swagger-api/apidom-json-pointer": ">=1.0.0-alpha.9 <1.0.0-beta.0", - "@swagger-api/apidom-ns-openapi-3-1": ">=1.0.0-alpha.9 <1.0.0-beta.0", - "@swagger-api/apidom-reference": ">=1.0.0-alpha.9 <1.0.0-beta.0", - "cookie": "~0.6.0", + "@scarf/scarf": "=1.4.0", + "@swagger-api/apidom-core": ">=1.0.0-beta.6 <1.0.0-rc.0", + "@swagger-api/apidom-error": ">=1.0.0-beta.6 <1.0.0-rc.0", + "@swagger-api/apidom-json-pointer": ">=1.0.0-beta.6 <1.0.0-rc.0", + "@swagger-api/apidom-ns-openapi-3-1": ">=1.0.0-beta.6 <1.0.0-rc.0", + "@swagger-api/apidom-reference": ">=1.0.0-beta.6 <1.0.0-rc.0", + "@swaggerexpert/cookie": "^1.4.1", "deepmerge": "~4.3.0", "fast-json-patch": "^3.0.0-1", "js-yaml": "^4.1.0", "neotraverse": "=0.6.18", "node-abort-controller": "^3.1.1", "node-fetch-commonjs": "^3.3.2", - "openapi-path-templating": "^1.5.1", - "openapi-server-url-templating": "^1.0.0", + "openapi-path-templating": "^2.0.1", + "openapi-server-url-templating": "^1.2.0", "ramda": "^0.30.1", "ramda-adjunct": "^5.0.0" } @@ -13229,6 +14071,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13237,6 +14080,7 @@ "version": "5.17.14", "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.17.14.tgz", "integrity": "sha512-mCXerZrbcn4ftPYifUF0+iKIRTHoVCv0HcJc/sXl9nCe3oeWdsjmOWVqKabzzAkAa0NwsbKNJFv2UL/Ivnf6VQ==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.24.5", "@braintree/sanitize-url": "=7.0.2", @@ -13277,30 +14121,39 @@ "react-dom": ">=16.8.0 <19" } }, + "node_modules/swagger-ui-react/node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, "node_modules/swagger-ui-react/node_modules/dompurify": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.4.tgz", - "integrity": "sha512-2gnshi6OshmuKil8rMZuQCGiUF3cUxHY3NGDzUAdUx/NPEe5DVnO8BDoAQouvgwnx0R/+a6jUn36Z0FSdq8vww==" + "integrity": "sha512-2gnshi6OshmuKil8rMZuQCGiUF3cUxHY3NGDzUAdUx/NPEe5DVnO8BDoAQouvgwnx0R/+a6jUn36Z0FSdq8vww==", + "license": "(MPL-2.0 OR Apache-2.0)" }, "node_modules/swagger-ui-react/node_modules/immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/swagger-ui-react/node_modules/react-redux": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz", - "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", + "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "license": "MIT", "dependencies": { - "@types/use-sync-external-store": "^0.0.3", - "use-sync-external-store": "^1.0.0" + "@types/use-sync-external-store": "^0.0.6", + "use-sync-external-store": "^1.4.0" }, "peerDependencies": { - "@types/react": "^18.2.25", - "react": "^18.0", + "@types/react": "^18.2.25 || ^19", + "react": "^18.0 || ^19", "redux": "^5.0.0" }, "peerDependenciesMeta": { @@ -13315,12 +14168,14 @@ "node_modules/swagger-ui-react/node_modules/redux": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", - "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" }, "node_modules/swagger-ui-react/node_modules/redux-immutable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz", "integrity": "sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==", + "license": "BSD-3-Clause", "peerDependencies": { "immutable": "^3.8.1 || ^4.0.0-rc.1" } @@ -13328,19 +14183,22 @@ "node_modules/swagger-ui-react/node_modules/reselect": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", - "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==" + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/synckit": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", - "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", "dev": true, + "license": "MIT", "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" @@ -13353,71 +14211,20 @@ } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "optional": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "peer": true, "engines": { - "node": ">= 6" + "node": ">=6" } }, "node_modules/terser": { - "version": "5.34.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz", - "integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -13433,16 +14240,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", + "license": "MIT", "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -13466,11 +14274,69 @@ } } }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", + "peer": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/test-exclude": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^10.4.1", @@ -13480,36 +14346,11 @@ "node": ">=18" } }, - "node_modules/test-exclude/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, "node_modules/throttle-debounce": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", + "license": "MIT", "engines": { "node": ">=10" } @@ -13518,6 +14359,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -13527,74 +14369,55 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "license": "MIT", "optional": true }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tinycolor2": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", - "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", - "dev": true + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.6.tgz", - "integrity": "sha512-NbBoFBpqfcgd1tCiO8Lkfdk+xrA7mlLR9zgvZcZWQQwU63XAfUePyd6wZBaU93Hqw347lHnwFzttAkemHzzz4g==", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", "dev": true, + "license": "MIT", "dependencies": { - "fdir": "^6.3.0", + "fdir": "^6.4.2", "picomatch": "^4.0.2" }, "engines": { "node": ">=12.0.0" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.3.0.tgz", - "integrity": "sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==", - "dev": true, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/tinypool": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", - "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" } @@ -13602,13 +14425,15 @@ "node_modules/tinyqueue": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", - "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "license": "ISC" }, "node_modules/tinyrainbow": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -13618,45 +14443,42 @@ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/tldts": { - "version": "6.1.48", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.48.tgz", - "integrity": "sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==", + "version": "6.1.71", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.71.tgz", + "integrity": "sha512-LQIHmHnuzfZgZWAf2HzL83TIIrD8NhhI0DVxqo9/FdOd4ilec+NTNZOlDZf7EwrTNoutccbsHjvWHYXLAtvxjw==", "dev": true, + "license": "MIT", "dependencies": { - "tldts-core": "^6.1.48" + "tldts-core": "^6.1.71" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "6.1.48", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.48.tgz", - "integrity": "sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } + "version": "6.1.71", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.71.tgz", + "integrity": "sha512-LRbChn2YRpic1KxY+ldL1pGXN/oVvKfCVufwfVzEQdFYNo39uF7AJa/WXdo+gYO7PTvdfkCPCed6Hkvz/kR7jg==", + "dev": true, + "license": "MIT" }, "node_modules/to-float32": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/to-float32/-/to-float32-1.1.0.tgz", - "integrity": "sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==" + "integrity": "sha512-keDnAusn/vc+R3iEiSDw8TOF7gPiTLdK1ArvWtYbJQiVfmRg6i/CAvbKq3uIS0vWroAC7ZecN3DjQKw3aSklUg==", + "license": "MIT" }, "node_modules/to-px": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-px/-/to-px-1.0.1.tgz", "integrity": "sha512-2y3LjBeIZYL19e5gczp14/uRWFDtDUErJPVN3VU9a7SJO+RjGRtYR47aMN2bZgGlxvW4ZcEz2ddUPVHXcMfuXw==", + "license": "MIT", "dependencies": { "parse-unit": "^1.0.1" } @@ -13666,6 +14488,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -13676,12 +14499,14 @@ "node_modules/toggle-selection": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", + "license": "MIT" }, "node_modules/topojson-client": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "license": "ISC", "dependencies": { "commander": "2" }, @@ -13696,15 +14521,17 @@ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tough-cookie": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.0.tgz", + "integrity": "sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tldts": "^6.1.32" }, @@ -13717,6 +14544,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, @@ -13725,57 +14553,62 @@ } }, "node_modules/tree-sitter": { - "version": "0.20.4", - "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.20.4.tgz", - "integrity": "sha512-rjfR5dc4knG3jnJNN/giJ9WOoN1zL/kZyrS0ILh+eqq8RNcIbiXA63JsMEgluug0aNvfQvK4BfCErN1vIzvKog==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.1.tgz", + "integrity": "sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==", "hasInstallScript": true, + "license": "MIT", "optional": true, + "peer": true, "dependencies": { - "nan": "^2.17.0", - "prebuild-install": "^7.1.1" + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.8.0" } }, "node_modules/tree-sitter-json": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.20.2.tgz", - "integrity": "sha512-eUxrowp4F1QEGk/i7Sa+Xl8Crlfp7J0AXxX1QdJEQKQYMWhgMbCIgyQvpO3Q0P9oyTrNQxRLlRipDS44a8EtRw==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.18.0" - } - }, - "node_modules/tree-sitter-yaml": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/tree-sitter-yaml/-/tree-sitter-yaml-0.5.0.tgz", - "integrity": "sha512-POJ4ZNXXSWIG/W4Rjuyg36MkUD4d769YRUGKRqN+sVaj/VCo6Dh6Pkssn1Rtewd5kybx+jT1BWMyWN0CijXnMA==", + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.24.8.tgz", + "integrity": "sha512-Tc9ZZYwHyWZ3Tt1VEw7Pa2scu1YO7/d2BCBbKTx5hXwig3UfdQjsOPkPyLpDJOn/m1UBEWYAtSdGAwCSyagBqQ==", "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { - "nan": "^2.14.0" + "node-addon-api": "^8.2.2", + "node-gyp-build": "^4.8.2" + }, + "peerDependencies": { + "tree-sitter": "^0.21.1" + }, + "peerDependenciesMeta": { + "tree-sitter": { + "optional": true + } } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.0.tgz", + "integrity": "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-easing": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", - "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" + "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==", + "license": "Unlicense" }, "node_modules/ts-invariant": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" }, @@ -13786,40 +14619,33 @@ "node_modules/ts-mixer": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", - "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==", + "license": "MIT" }, "node_modules/ts-toolbelt": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==" + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "license": "Apache-2.0" }, "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/type": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -13831,6 +14657,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -13839,30 +14666,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -13872,17 +14701,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -13892,17 +14723,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -13914,12 +14746,14 @@ "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" }, "node_modules/typedarray-pool": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/typedarray-pool/-/typedarray-pool-1.2.0.tgz", "integrity": "sha512-YTSQbzX43yvtpfRtIDAYygoYtgT+Rpjuxy9iOpczrjpXLgGoyG7aS5USJXV2d3nn8uHTeb9rXDvzS27zUg5KYQ==", + "license": "MIT", "dependencies": { "bit-twiddle": "^1.0.0", "dup": "^1.0.0" @@ -13929,6 +14763,7 @@ "version": "0.30.1", "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.30.1.tgz", "integrity": "sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==", + "license": "MIT", "dependencies": { "ts-toolbelt": "^9.6.0" } @@ -13938,6 +14773,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13946,23 +14782,33 @@ "node": ">=14.17" } }, - "node_modules/typewise": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", - "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", + "node_modules/typescript-eslint": { + "version": "8.19.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.19.1.tgz", + "integrity": "sha512-LKPUQpdEMVOeKluHi8md7rwLcoXHhwvWp3x+sJkMuq3gGm9yaYJtPo8sRZSblMFJ5pcOGCAak/scKf1mvZDlQw==", + "dev": true, + "license": "MIT", "dependencies": { - "typewise-core": "^1.2.0" + "@typescript-eslint/eslint-plugin": "8.19.1", + "@typescript-eslint/parser": "8.19.1", + "@typescript-eslint/utils": "8.19.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/typewise-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", - "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==" - }, "node_modules/ua-parser-js": { - "version": "0.7.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", - "integrity": "sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==", + "version": "0.7.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz", + "integrity": "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==", "funding": [ { "type": "opencollective", @@ -13977,6 +14823,7 @@ "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", "bin": { "ua-parser-js": "script/cli.js" }, @@ -13985,15 +14832,19 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -14002,44 +14853,25 @@ "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" }, "node_modules/unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "license": "MIT" }, "node_modules/unraw": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz", - "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==" + "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==", + "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", "funding": [ { "type": "opencollective", @@ -14054,9 +14886,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -14068,12 +14901,14 @@ "node_modules/update-diff": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-diff/-/update-diff-1.1.0.tgz", - "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==" + "integrity": "sha512-rCiBPiHxZwT4+sBhEbChzpO5hYHjm91kScWgdHf4Qeafs6Ba7MBl+d9GlGv72bcTZQO0sLmtQS1pHSWoCLtN/A==", + "license": "MIT" }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -14082,25 +14917,33 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", + "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", + "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz", + "integrity": "sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==", + "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -14109,14 +14952,15 @@ } }, "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", + "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", + "license": "MIT", "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -14128,22 +14972,25 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/use-sync-external-store": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", - "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/use-undo": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/use-undo/-/use-undo-1.1.1.tgz", "integrity": "sha512-2NNpJv7TDQpyETgRTG5I/CsABX5nhExpx8PEhWiDsnW9C5BA6Xnn8G9u/lPeg3+JsBrBtUx8/5bMbGmpnWz1Cw==", + "license": "MIT", "peerDependencies": { "react": ">=16.8.6", "react-dom": ">=16.8.6" @@ -14152,7 +14999,8 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/uuid": { "version": "10.0.0", @@ -14162,6 +15010,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -14170,6 +15019,7 @@ "version": "2.12.3", "resolved": "https://registry.npmjs.org/vanilla-picker/-/vanilla-picker-2.12.3.tgz", "integrity": "sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==", + "license": "ISC", "dependencies": { "@sphinxxxx/color-conversion": "^2.2.2" } @@ -14179,6 +15029,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -14238,6 +15089,7 @@ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.1.tgz", "integrity": "sha512-N/mGckI1suG/5wQI35XeR9rsMsPqKXzq1CdUndzVstBj/HvyxxGctwnK6WX43NGt5L3Z5tcRf83g4TITKJhPrA==", "dev": true, + "license": "MIT", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.6", @@ -14259,6 +15111,7 @@ "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.1.tgz", "integrity": "sha512-97We7/VC0e9X5zBVkvt7SGQMGrRtn3KtySFQG5fpaMlS+l62eeXRQO633AYhSTC3z7IMebnPPNjGXVGNRFlxBA==", "dev": true, + "license": "MIT", "dependencies": { "@vitest/expect": "2.1.1", "@vitest/mocker": "2.1.1", @@ -14322,6 +15175,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14330,6 +15184,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "license": "MIT", "dependencies": { "@mapbox/point-geometry": "0.1.0", "@mapbox/vector-tile": "^1.3.1", @@ -14341,6 +15196,7 @@ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, + "license": "MIT", "dependencies": { "xml-name-validator": "^5.0.0" }, @@ -14352,6 +15208,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", "peer": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -14364,26 +15221,30 @@ "node_modules/weak-map": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.8.tgz", - "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==" + "integrity": "sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==", + "license": "Apache-2.0" }, "node_modules/web-streams-polyfill": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/web-tree-sitter": { - "version": "0.20.3", - "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.3.tgz", - "integrity": "sha512-zKGJW9r23y3BcJusbgvnOH2OYAW40MXAOi9bi3Gcc7T4Gms9WWgXF8m6adsJWpGJEhgOzCrfiz1IzKowJWrtYw==", + "version": "0.24.5", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.5.tgz", + "integrity": "sha512-+J/2VSHN8J47gQUAvF8KDadrfz6uFYVjxoxbKWDoXVsH2u7yLdarCnIURnrMA6uSRkgX3SdmqM5BOoQjPdSh5w==", + "license": "MIT", "optional": true }, "node_modules/webgl-context": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/webgl-context/-/webgl-context-2.2.0.tgz", "integrity": "sha512-q/fGIivtqTT7PEoF07axFIlHNk/XCPaYpq64btnepopSWvKNFkoORlQYgqDigBIuGA1ExnFd/GnSUnBNEPQY7Q==", + "license": "MIT", "dependencies": { "get-canvas-context": "^1.0.1" } @@ -14393,23 +15254,25 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/webpack": { - "version": "5.95.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", - "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "license": "MIT", "peer": true, "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", @@ -14447,6 +15310,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", "peer": true, "engines": { "node": ">=10.13.0" @@ -14456,6 +15320,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { "esrecurse": "^4.3.0", @@ -14469,6 +15334,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -14479,6 +15345,7 @@ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, @@ -14491,6 +15358,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -14503,15 +15371,17 @@ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz", + "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" @@ -14525,6 +15395,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -14536,39 +15407,45 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, + "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, + "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -14582,6 +15459,7 @@ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -14596,15 +15474,17 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -14619,6 +15499,7 @@ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, + "license": "MIT", "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" @@ -14635,6 +15516,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14643,6 +15525,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/world-calendars/-/world-calendars-1.0.3.tgz", "integrity": "sha512-sAjLZkBnsbHkHWVhrsCU5Sa/EVuf9QqgvrN8zyJ2L/F9FR9Oc6CvVK0674+PGAtmmmYQMH98tCUSO4QLQv3/TQ==", + "license": "MIT", "dependencies": { "object-assign": "^4.1.0" } @@ -14652,6 +15535,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -14670,6 +15554,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14682,50 +15567,19 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14735,16 +15589,17 @@ "node": ">=8" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=8" } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { @@ -14752,6 +15607,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -14759,31 +15615,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -14803,12 +15646,14 @@ "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==" + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "license": "MIT" }, "node_modules/xml-but-prettier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml-but-prettier/-/xml-but-prettier-1.0.1.tgz", "integrity": "sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==", + "license": "MIT", "dependencies": { "repeat-string": "^1.5.2" } @@ -14817,6 +15662,7 @@ "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "license": "MIT", "dependencies": { "sax": "^1.2.4" }, @@ -14829,6 +15675,7 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=18" } @@ -14837,12 +15684,14 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } @@ -14850,12 +15699,14 @@ "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", "engines": { "node": ">= 6" } @@ -14864,6 +15715,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -14874,7 +15726,8 @@ "node_modules/zenscroll": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/zenscroll/-/zenscroll-4.0.2.tgz", - "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==" + "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==", + "license": "Unlicense" } } } diff --git a/webapp/package.json b/webapp/package.json index aea940a029..44b17df552 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -8,7 +8,7 @@ "clean": "rm -rf dist node_modules/.vite", "coverage": "vitest run --coverage", "dev": "vite", - "lint": "tsc --noEmit && eslint . --ext ts,tsx --report-unused-disable-directives", + "lint": "tsc --noEmit && eslint . --report-unused-disable-directives", "preview": "vite preview", "test": "vitest", "test:ui": "vitest --ui" @@ -75,12 +75,12 @@ "xml-js": "1.6.11" }, "devDependencies": { + "@eslint/js": "9.18.0", "@testing-library/jest-dom": "6.5.0", "@testing-library/react": "16.0.1", "@testing-library/user-event": "14.5.2", "@total-typescript/ts-reset": "0.6.1", "@types/d3": "5.16.0", - "@types/date-fns": "2.6.0", "@types/debug": "4.1.12", "@types/draft-convert": "2.1.8", "@types/draft-js": "0.11.18", @@ -100,31 +100,30 @@ "@types/react-virtualized-auto-sizer": "1.0.4", "@types/react-window": "1.8.8", "@types/swagger-ui-react": "4.18.3", - "@types/testing-library__jest-dom": "6.0.0", "@types/tinycolor2": "1.4.6", "@types/uuid": "10.0.0", - "@typescript-eslint/eslint-plugin": "7.2.0", - "@typescript-eslint/parser": "7.2.0", "@vitejs/plugin-react-swc": "3.7.0", "@vitest/coverage-v8": "2.1.1", "@vitest/ui": "2.1.1", - "eslint": "8.57.1", - "eslint-config-prettier": "9.1.0", - "eslint-plugin-jsdoc": "48.10.0", + "eslint": "9.18.0", + "eslint-config-prettier": "10.0.1", + "eslint-plugin-jsdoc": "50.6.1", "eslint-plugin-license-header": "0.6.1", "eslint-plugin-prettier": "5.2.1", - "eslint-plugin-react": "7.37.0", - "eslint-plugin-react-hooks": "4.6.2", - "eslint-plugin-react-refresh": "0.4.12", + "eslint-plugin-react": "7.37.4", + "eslint-plugin-react-hooks": "5.1.0", + "eslint-plugin-react-refresh": "0.4.18", + "globals": "15.14.0", "husky": "9.1.6", "jsdom": "25.0.1", - "prettier": "3.3.3", + "prettier": "3.4.2", "typescript": "5.4.5", + "typescript-eslint": "8.19.1", "vite": "5.4.8", "vitest": "2.1.1" }, "engines": { - "node": "18.16.1" + "node": "22.13.0" }, "overrides": { "react-d3-graph": { diff --git a/webapp/src/components/App/Api.tsx b/webapp/src/components/App/Api.tsx index 837b80e729..7f661903d0 100644 --- a/webapp/src/components/App/Api.tsx +++ b/webapp/src/components/App/Api.tsx @@ -30,9 +30,7 @@ function Api() { sx={{ backgroundColor: "#eee" }} > - + ); diff --git a/webapp/src/components/App/Data/DataListing.tsx b/webapp/src/components/App/Data/DataListing.tsx index 30968f4f30..ef552cc100 100644 --- a/webapp/src/components/App/Data/DataListing.tsx +++ b/webapp/src/components/App/Data/DataListing.tsx @@ -15,9 +15,9 @@ import { memo } from "react"; import { Typography, Box, styled } from "@mui/material"; import AutoSizer from "react-virtualized-auto-sizer"; -import { FixedSizeList, areEqual, ListChildComponentProps } from "react-window"; +import { FixedSizeList, areEqual, type ListChildComponentProps } from "react-window"; import ArrowRightIcon from "@mui/icons-material/ArrowRight"; -import { MatrixDataSetDTO } from "../../../common/types"; +import type { MatrixDataSetDTO } from "../../../common/types"; const ROW_ITEM_SIZE = 45; const BUTTONS_SIZE = 40; @@ -107,11 +107,7 @@ function DataListing(props: PropsType) { const idealHeight = ROW_ITEM_SIZE * datasets.length; return ( height - ? height + ROW_ITEM_SIZE - BUTTONS_SIZE - : idealHeight - } + height={idealHeight > height ? height + ROW_ITEM_SIZE - BUTTONS_SIZE : idealHeight} width={width} itemCount={datasets.length} itemSize={ROW_ITEM_SIZE} diff --git a/webapp/src/components/App/Data/DataPropsView.tsx b/webapp/src/components/App/Data/DataPropsView.tsx index c4b5215cf5..75a07b6ef7 100644 --- a/webapp/src/components/App/Data/DataPropsView.tsx +++ b/webapp/src/components/App/Data/DataPropsView.tsx @@ -13,7 +13,7 @@ */ import { useState } from "react"; -import { MatrixDataSetDTO, MatrixInfoDTO } from "../../../common/types"; +import type { MatrixDataSetDTO, MatrixInfoDTO } from "../../../common/types"; import PropertiesView from "../../common/PropertiesView"; import DataListing from "./DataListing"; import { StyledListingBox } from "./styles"; @@ -33,9 +33,7 @@ function DataPropsView(props: PropTypes) { return dataset.filter( (item) => item.name.search(input) >= 0 || - !!item.matrices.find( - (matrix: MatrixInfoDTO) => matrix.id.search(input) >= 0, - ), + !!item.matrices.find((matrix: MatrixInfoDTO) => matrix.id.search(input) >= 0), ); }; diff --git a/webapp/src/components/App/Data/DatasetCreationDialog.tsx b/webapp/src/components/App/Data/DatasetCreationDialog.tsx index 90764a1977..a58cf72d25 100644 --- a/webapp/src/components/App/Data/DatasetCreationDialog.tsx +++ b/webapp/src/components/App/Data/DatasetCreationDialog.tsx @@ -12,22 +12,14 @@ * This file is part of the Antares project. */ -import { useState, useEffect, forwardRef, ChangeEvent } from "react"; -import { - Box, - TextField, - Typography, - Button, - Checkbox, - Chip, - Tooltip, -} from "@mui/material"; +import { useState, useEffect, forwardRef } from "react"; +import { Box, TextField, Typography, Button, Checkbox, Chip, Tooltip } from "@mui/material"; import { useSnackbar } from "notistack"; import { useTranslation } from "react-i18next"; -import axios, { AxiosError } from "axios"; +import axios, { type AxiosError } from "axios"; import HelpIcon from "@mui/icons-material/Help"; import { getGroups } from "../../../services/api/user"; -import { GroupDTO, MatrixDataSetDTO } from "../../../common/types"; +import type { GroupDTO, MatrixDataSetDTO } from "../../../common/types"; import { saveMatrix } from "./utils"; import useEnqueueErrorSnackbar from "../../../hooks/useEnqueueErrorSnackbar"; import SimpleLoader from "../../common/loaders/SimpleLoader"; @@ -104,7 +96,7 @@ function DatasetCreationDialog(props: PropTypes) { } }; - const onUpload = (e: ChangeEvent) => { + const onUpload = (e: React.ChangeEvent) => { const { target } = e; if (target && target.files && target.files.length === 1) { setCurrentFile(target.files[0]); @@ -115,9 +107,7 @@ function DatasetCreationDialog(props: PropTypes) { if (add) { setSelectedGroupList(selectedGroupList.concat([item])); } else { - setSelectedGroupList( - selectedGroupList.filter((elm) => item.id !== elm.id), - ); + setSelectedGroupList(selectedGroupList.filter((elm) => item.id !== elm.id)); } }; @@ -133,7 +123,7 @@ function DatasetCreationDialog(props: PropTypes) { setPublicStatus(data.public); setName(data.name); } - } catch (e) { + } catch { enqueueSnackbar(t("settings.error.groupsError"), { variant: "error", }); @@ -150,10 +140,7 @@ function DatasetCreationDialog(props: PropTypes) { return ( {uploadProgress < 100 ? ( - + ) : ( )} @@ -238,10 +225,7 @@ function DatasetCreationDialog(props: PropTypes) { > {currentFile ? currentFile.name : t("global.chooseFile")} - + @@ -287,9 +271,7 @@ function DatasetCreationDialog(props: PropTypes) { }} > {groupList.map((item) => { - const index = selectedGroupList.findIndex( - (elm) => item.id === elm.id, - ); + const index = selectedGroupList.findIndex((elm) => item.id === elm.id); if (index >= 0) { return ( onGroupClick(true, item)} - /> + onGroupClick(true, item)} /> ); })} diff --git a/webapp/src/components/App/Data/MatrixDialog.tsx b/webapp/src/components/App/Data/MatrixDialog.tsx index 4d2b0b7765..7c26d54178 100644 --- a/webapp/src/components/App/Data/MatrixDialog.tsx +++ b/webapp/src/components/App/Data/MatrixDialog.tsx @@ -13,7 +13,7 @@ */ import { useTranslation } from "react-i18next"; -import { MatrixInfoDTO } from "../../../common/types"; +import type { MatrixInfoDTO } from "../../../common/types"; import BasicDialog from "@/components/common/dialogs/BasicDialog"; import MatrixContent from "@/components/common/dialogs/DatabaseUploadDialog/components/MatrixContent"; import { Button } from "@mui/material"; diff --git a/webapp/src/components/App/Data/index.tsx b/webapp/src/components/App/Data/index.tsx index 6b7fd4469b..f64764b3e0 100644 --- a/webapp/src/components/App/Data/index.tsx +++ b/webapp/src/components/App/Data/index.tsx @@ -13,7 +13,7 @@ */ import { useState, useEffect } from "react"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useSnackbar } from "notistack"; import { useTranslation } from "react-i18next"; import DeleteIcon from "@mui/icons-material/Delete"; @@ -28,7 +28,7 @@ import { getMatrixList, getExportMatrixUrl, } from "../../../services/api/matrix"; -import { MatrixInfoDTO, MatrixDataSetDTO } from "../../../common/types"; +import type { MatrixInfoDTO, MatrixDataSetDTO } from "../../../common/types"; import DatasetCreationDialog from "./DatasetCreationDialog"; import ConfirmationDialog from "../../common/dialogs/ConfirmationDialog"; import RootPage from "../../common/page/RootPage"; @@ -52,15 +52,10 @@ function Data() { // User modal const [openModal, setOpenModal] = useState(false); - const [openConfirmationModal, setOpenConfirmationModal] = - useState(false); + const [openConfirmationModal, setOpenConfirmationModal] = useState(false); const [matrixModal, setMatrixModal] = useState(false); - const [currentData, setCurrentData] = useState< - MatrixDataSetDTO | undefined - >(); - const [currentMatrix, setCurrentMatrix] = useState< - MatrixInfoDTO | undefined - >(); + const [currentData, setCurrentData] = useState(); + const [currentMatrix, setCurrentMatrix] = useState(); const handleCreation = () => { setCurrentData(undefined); @@ -170,9 +165,7 @@ function Data() { item.id === selectedItem)?.owner - .id ? ( + user.id === dataList.find((item) => item.id === selectedItem)?.owner.id ? ( - {`Matrices - ${ - dataList.find((item) => item.id === selectedItem) - ?.name - }`} + {`Matrices - ${dataList.find((item) => item.id === selectedItem)?.name}`} @@ -238,9 +228,7 @@ function Data() { alignItems: "center", }} > - {`Matrices - ${ - dataList.find((item) => item.id === selectedItem)?.name - }`} + {`Matrices - ${dataList.find((item) => item.id === selectedItem)?.name}`} ) } @@ -258,11 +246,7 @@ function Data() { )} {!loaded && } {matrixModal && currentMatrix && ( - + )} {openModal && ( 0) { - const promises = permissions.map( - (perm: { user: UserDTO; type: number }) => - createRole({ - group_id: newGroup.id, - type: perm.type, - identity_id: perm.user.id, - }), + const promises = permissions.map((perm: { user: UserDTO; type: number }) => + createRole({ + group_id: newGroup.id, + type: perm.type, + identity_id: perm.user.id, + }), ); const res: RoleDetailsDTO[] = await mounted(Promise.all(promises)); @@ -93,10 +86,7 @@ function CreateGroupDialog(props: Props) { // Because we cannot recover roles eventually created reloadFetchGroups(); - enqueueErrorSnackbar( - t("settings.error.userRolesSave", { 0: newGroup.name }), - e as Error, - ); + enqueueErrorSnackbar(t("settings.error.userRolesSave", { 0: newGroup.name }), e as Error); } closeDialog(); diff --git a/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/GroupForm.tsx b/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/GroupForm.tsx index 87e47d9db2..f440270aee 100644 --- a/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/GroupForm.tsx +++ b/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/GroupForm.tsx @@ -31,24 +31,20 @@ import { ListItemIcon, ListItemText, CircularProgress, - SelectChangeEvent, + type SelectChangeEvent, } from "@mui/material"; import { Controller, useFieldArray } from "react-hook-form"; import { v4 as uuidv4 } from "uuid"; import DeleteIcon from "@mui/icons-material/Delete"; import GroupIcon from "@mui/icons-material/Group"; -import { - RESERVED_GROUP_NAMES, - RESERVED_USER_NAMES, - ROLE_TYPE_KEYS, -} from "../../../utils"; -import { RoleType, UserDTO } from "../../../../../../common/types"; +import { RESERVED_GROUP_NAMES, RESERVED_USER_NAMES, ROLE_TYPE_KEYS } from "../../../utils"; +import { RoleType, type UserDTO } from "../../../../../../common/types"; import { roleToString, sortByName } from "../../../../../../services/utils"; import usePromise from "../../../../../../hooks/usePromise"; import { getGroups, getUsers } from "../../../../../../services/api/user"; import { getAuthUser } from "../../../../../../redux/selectors"; import useAppSelector from "../../../../../../redux/hooks/useAppSelector"; -import { UseFormReturnPlus } from "../../../../../common/Form/types"; +import type { UseFormReturnPlus } from "../../../../../common/Form/types"; import { validateString } from "@/utils/validation/string"; function GroupForm(props: UseFormReturnPlus) { @@ -66,10 +62,7 @@ function GroupForm(props: UseFormReturnPlus) { const { data: users, isLoading: isUsersLoading } = usePromise(getUsers); const { data: groups } = usePromise(getGroups); - const existingGroups = useMemo( - () => groups?.map((group) => group.name), - [groups], - ); + const existingGroups = useMemo(() => groups?.map((group) => group.name), [groups]); const { fields, append, remove } = useFieldArray({ control, @@ -78,9 +71,7 @@ function GroupForm(props: UseFormReturnPlus) { const allowToAddPermission = selectedUser && - !getValues("permissions").some( - ({ user }: { user: UserDTO }) => user.id === selectedUser.id, - ); + !getValues("permissions").some(({ user }: { user: UserDTO }) => user.id === selectedUser.id); const filteredAndSortedUsers = useMemo(() => { if (!users) { @@ -88,10 +79,7 @@ function GroupForm(props: UseFormReturnPlus) { } return sortByName( - users.filter( - (user) => - !RESERVED_USER_NAMES.includes(user.name) && user.id !== authUser?.id, - ), + users.filter((user) => !RESERVED_USER_NAMES.includes(user.name) && user.id !== authUser?.id), ); }, [users, authUser]); @@ -138,8 +126,7 @@ function GroupForm(props: UseFormReturnPlus) { sx={{ p: 2, mt: 2, - backgroundImage: - "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", + backgroundImage: "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", }} > {t("global.permissions")} @@ -211,11 +198,7 @@ function GroupForm(props: UseFormReturnPlus) { disablePadding dense > - + diff --git a/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/index.tsx b/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/index.tsx index ef29ca1722..66d4cd1132 100644 --- a/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/index.tsx +++ b/webapp/src/components/App/Settings/Groups/dialog/GroupFormDialog/index.tsx @@ -12,14 +12,11 @@ * This file is part of the Antares project. */ -import FormDialog, { - FormDialogProps, -} from "../../../../../common/dialogs/FormDialog"; -import { RoleType, UserDTO } from "../../../../../../common/types"; +import FormDialog, { type FormDialogProps } from "../../../../../common/dialogs/FormDialog"; +import type { RoleType, UserDTO } from "../../../../../../common/types"; import GroupForm from "./GroupForm"; -export interface GroupFormDialogProps - extends Omit { +export interface GroupFormDialogProps extends Omit { defaultValues?: { name?: string; permissions?: Array<{ user: UserDTO; type: RoleType }>; diff --git a/webapp/src/components/App/Settings/Groups/dialog/UpdateGroupDialog.tsx b/webapp/src/components/App/Settings/Groups/dialog/UpdateGroupDialog.tsx index 42e4541ed9..a609b06d0e 100644 --- a/webapp/src/components/App/Settings/Groups/dialog/UpdateGroupDialog.tsx +++ b/webapp/src/components/App/Settings/Groups/dialog/UpdateGroupDialog.tsx @@ -18,7 +18,7 @@ import { useTranslation } from "react-i18next"; import { usePromise as usePromiseWrapper } from "react-use"; import { useSnackbar } from "notistack"; import * as R from "ramda"; -import { GroupDetailsDTO } from "../../../../../common/types"; +import type { GroupDetailsDTO } from "../../../../../common/types"; import { createRole, deleteUserRole, @@ -26,16 +26,11 @@ import { updateGroup, } from "../../../../../services/api/user"; import useEnqueueErrorSnackbar from "../../../../../hooks/useEnqueueErrorSnackbar"; -import GroupFormDialog, { GroupFormDialogProps } from "./GroupFormDialog"; -import { GroupEdit } from ".."; -import { SubmitHandlerPlus } from "../../../../common/Form/types"; +import GroupFormDialog, { type GroupFormDialogProps } from "./GroupFormDialog"; +import type { GroupEdit } from ".."; +import type { SubmitHandlerPlus } from "../../../../common/Form/types"; -type InheritPropsToOmit = - | "title" - | "titleIcon" - | "defaultValues" - | "onSubmit" - | "onCancel"; +type InheritPropsToOmit = "title" | "titleIcon" | "defaultValues" | "onSubmit" | "onCancel"; interface Props extends Omit { group: GroupDetailsDTO; @@ -76,8 +71,7 @@ function UpdateGroupDialog(props: Props) { //////////////////////////////////////////////////////////////// const handleSubmit = async (data: SubmitHandlerPlus) => { - const { name, permissions }: GroupFormDialogProps["defaultValues"] = - data.dirtyValues; + const { name, permissions }: GroupFormDialogProps["defaultValues"] = data.dirtyValues; const groupName = name || group.name; const notifySuccess = R.once(() => @@ -92,10 +86,7 @@ function UpdateGroupDialog(props: Props) { editGroup({ id: group.id, name: groupName }); notifySuccess(); } catch (e) { - enqueueErrorSnackbar( - t("settings.error.groupSave", { 0: groupName }), - e as Error, - ); + enqueueErrorSnackbar(t("settings.error.groupSave", { 0: groupName }), e as Error); throw e; } } @@ -152,10 +143,7 @@ function UpdateGroupDialog(props: Props) { // Because we cannot recover roles eventually deleted/created reloadFetchUsers(); - enqueueErrorSnackbar( - t("settings.error.groupRolesSave", { 0: groupName }), - e as Error, - ); + enqueueErrorSnackbar(t("settings.error.groupRolesSave", { 0: groupName }), e as Error); } } diff --git a/webapp/src/components/App/Settings/Groups/index.tsx b/webapp/src/components/App/Settings/Groups/index.tsx index b92e62ffe8..ede5b9012b 100644 --- a/webapp/src/components/App/Settings/Groups/index.tsx +++ b/webapp/src/components/App/Settings/Groups/index.tsx @@ -25,16 +25,16 @@ import { Typography, } from "@mui/material"; import { produce } from "immer"; -import { ReactNode, useMemo, useReducer, useState } from "react"; +import { useMemo, useReducer, useState } from "react"; import { useTranslation } from "react-i18next"; import { usePromise as usePromiseWrapper, useUpdateEffect } from "react-use"; -import { Action } from "redux"; +import type { Action } from "redux"; import DeleteIcon from "@mui/icons-material/Delete"; import EditIcon from "@mui/icons-material/Edit"; import * as R from "ramda"; import GroupIcon from "@mui/icons-material/Group"; import { useSnackbar } from "notistack"; -import { GroupDetailsDTO } from "../../../../common/types"; +import type { GroupDetailsDTO } from "../../../../common/types"; import usePromiseWithSnackbarError from "../../../../hooks/usePromiseWithSnackbarError"; import { deleteGroup, getGroups } from "../../../../services/api/user"; import { sortByName } from "../../../../services/utils"; @@ -59,11 +59,7 @@ export type GroupEdit = Partial & { }; interface GroupAction extends Action { - payload?: - | GroupDetailsDTO["id"] - | GroupDetailsDTO - | GroupDetailsDTO[] - | GroupEdit; + payload?: GroupDetailsDTO["id"] | GroupDetailsDTO | GroupDetailsDTO[] | GroupEdit; } const reducer = produce((draft, action) => { @@ -171,10 +167,7 @@ function Groups() { }); }) .catch((err) => { - enqueueErrorSnackbar( - t("settings.error.groupDelete", { 0: group.name }), - err, - ); + enqueueErrorSnackbar(t("settings.error.groupDelete", { 0: group.name }), err); }) .finally(() => { setGroupsInLoading((prev) => prev.filter((u) => u !== group)); @@ -208,7 +201,7 @@ function Groups() { - )) as ReactNode, + )) as React.ReactNode, ], // Group list [ @@ -227,10 +220,7 @@ function Groups() { setGroupToEdit(group)}> - setGroupToDelete(group)} - > + setGroupToDelete(group)}> diff --git a/webapp/src/components/App/Settings/Maintenance/index.tsx b/webapp/src/components/App/Settings/Maintenance/index.tsx index 624006a4e6..352540fbf9 100644 --- a/webapp/src/components/App/Settings/Maintenance/index.tsx +++ b/webapp/src/components/App/Settings/Maintenance/index.tsx @@ -24,7 +24,7 @@ import { } from "@mui/material"; import { useSnackbar } from "notistack"; import { useState } from "react"; -import { Controller, FieldValues, useForm } from "react-hook-form"; +import { Controller, useForm, type FieldValues } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { useUpdateEffect } from "react-use"; import useEnqueueErrorSnackbar from "../../../../hooks/useEnqueueErrorSnackbar"; @@ -113,9 +113,7 @@ function Maintenance() { return ( <> - + - ({ - group: perm.group.id, - role: perm.type, - }), - ) as BotCreateDTO["roles"]; + const roles = permissions.map((perm: { group: GroupDTO; type: RoleType }) => ({ + group: perm.group.id, + role: perm.type, + })) as BotCreateDTO["roles"]; - const tokenValue = await mounted( - createBot({ name, is_author: false, roles }), - ); + const tokenValue = await mounted(createBot({ name, is_author: false, roles })); setTokenValueToDisplay(tokenValue); @@ -73,10 +64,7 @@ function CreateTokenDialog(props: Props) { variant: "success", }); } catch (e) { - enqueueErrorSnackbar( - t("settings.error.tokenSave", { 0: name }), - e as Error, - ); + enqueueErrorSnackbar(t("settings.error.tokenSave", { 0: name }), e as Error); closeDialog(); } finally { reloadFetchTokens(); @@ -84,9 +72,7 @@ function CreateTokenDialog(props: Props) { }; const handleCopyClick = () => { - navigator.clipboard - .writeText(tokenValueToDisplay) - .then(() => setShowCopiedTooltip(true)); + navigator.clipboard.writeText(tokenValueToDisplay).then(() => setShowCopiedTooltip(true)); }; //////////////////////////////////////////////////////////////// @@ -122,10 +108,7 @@ function CreateTokenDialog(props: Props) { }} > {tokenValueToDisplay} - + !RESERVED_GROUP_NAMES.includes(group.name)), - ); + return sortByName(groups.filter((group) => !RESERVED_GROUP_NAMES.includes(group.name))); }, [groups]); //////////////////////////////////////////////////////////////// @@ -109,9 +104,7 @@ function TokenForm(props: Props) { } const group = authUser?.groups?.find((gp) => gp.name === groupName); - return group - ? ROLE_TYPE_KEYS.filter((key) => RoleType[key] <= group.role) - : []; + return group ? ROLE_TYPE_KEYS.filter((key) => RoleType[key] <= group.role) : []; }; //////////////////////////////////////////////////////////////// @@ -140,8 +133,7 @@ function TokenForm(props: Props) { sx={{ p: 2, mt: 2, - backgroundImage: - "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", + backgroundImage: "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", }} > {t("global.permissions")} @@ -225,11 +217,7 @@ function TokenForm(props: Props) { disablePadding dense > - + diff --git a/webapp/src/components/App/Settings/Tokens/dialog/TokenFormDialog/index.tsx b/webapp/src/components/App/Settings/Tokens/dialog/TokenFormDialog/index.tsx index 24516f6b7e..c7ee54b9be 100644 --- a/webapp/src/components/App/Settings/Tokens/dialog/TokenFormDialog/index.tsx +++ b/webapp/src/components/App/Settings/Tokens/dialog/TokenFormDialog/index.tsx @@ -12,13 +12,10 @@ * This file is part of the Antares project. */ -import FormDialog, { - FormDialogProps, -} from "../../../../../common/dialogs/FormDialog"; +import FormDialog, { type FormDialogProps } from "../../../../../common/dialogs/FormDialog"; import TokenForm from "./TokenForm"; -export interface TokenFormDialogProps - extends Omit { +export interface TokenFormDialogProps extends Omit { onlyPermissions?: boolean; } @@ -27,9 +24,7 @@ function TokenFormDialog(props: TokenFormDialogProps) { return ( - {(formObj) => ( - - )} + {(formObj) => } ); } diff --git a/webapp/src/components/App/Settings/Tokens/dialog/TokenInfoDialog.tsx b/webapp/src/components/App/Settings/Tokens/dialog/TokenInfoDialog.tsx index 23f12dc088..6d7f1ad31b 100644 --- a/webapp/src/components/App/Settings/Tokens/dialog/TokenInfoDialog.tsx +++ b/webapp/src/components/App/Settings/Tokens/dialog/TokenInfoDialog.tsx @@ -16,9 +16,9 @@ import { DialogContentText } from "@mui/material"; import { useTranslation } from "react-i18next"; import InfoIcon from "@mui/icons-material/Info"; import { useMemo } from "react"; -import { FieldValues } from "react-hook-form"; -import { BotDetailsDTO } from "../../../../../common/types"; -import OkDialog, { OkDialogProps } from "../../../../common/dialogs/OkDialog"; +import type { FieldValues } from "react-hook-form"; +import type { BotDetailsDTO } from "../../../../../common/types"; +import OkDialog, { type OkDialogProps } from "../../../../common/dialogs/OkDialog"; import TokenForm from "./TokenFormDialog/TokenForm"; import Form from "../../../../common/Form"; @@ -54,9 +54,7 @@ function TokenInfoDialog(props: Props) { title={t("global.permissions")} titleIcon={InfoIcon} > - - {t("settings.currentToken", { 0: token.name })} - + {t("settings.currentToken", { 0: token.name })}
      {(formObj) => } diff --git a/webapp/src/components/App/Settings/Tokens/index.tsx b/webapp/src/components/App/Settings/Tokens/index.tsx index 18aa3b4d9a..85e5ee4ec8 100644 --- a/webapp/src/components/App/Settings/Tokens/index.tsx +++ b/webapp/src/components/App/Settings/Tokens/index.tsx @@ -25,23 +25,18 @@ import { Typography, } from "@mui/material"; import { produce } from "immer"; -import { ReactNode, useMemo, useReducer, useState } from "react"; +import { useMemo, useReducer, useState } from "react"; import { useTranslation } from "react-i18next"; import { usePromise as usePromiseWrapper, useUpdateEffect } from "react-use"; -import { Action } from "redux"; +import type { Action } from "redux"; import DeleteIcon from "@mui/icons-material/Delete"; import InfoIcon from "@mui/icons-material/Info"; import TokenIcon from "@mui/icons-material/Token"; import * as R from "ramda"; import { useSnackbar } from "notistack"; -import { BotDTO, BotDetailsDTO, UserDTO } from "../../../../common/types"; +import type { BotDTO, BotDetailsDTO, UserDTO } from "../../../../common/types"; import usePromiseWithSnackbarError from "../../../../hooks/usePromiseWithSnackbarError"; -import { - deleteBot, - getBots, - getUser, - getUsers, -} from "../../../../services/api/user"; +import { deleteBot, getBots, getUser, getUsers } from "../../../../services/api/user"; import { isUserAdmin, sortByProp } from "../../../../services/utils"; import ConfirmationDialog from "../../../common/dialogs/ConfirmationDialog"; import useEnqueueErrorSnackbar from "../../../../hooks/useEnqueueErrorSnackbar"; @@ -65,27 +60,25 @@ interface TokenAction extends Action { payload?: BotDTO["id"] | BotDTO | BotDTO[]; } -const reducer = produce( - (draft, action) => { - const { payload } = action; +const reducer = produce((draft, action) => { + const { payload } = action; - switch (action.type) { - case TokenActionKind.ADD: { - draft.push(payload as BotDetailsDtoWithUser); - return; - } - case TokenActionKind.DELETE: { - const index = draft.findIndex((token) => token.id === payload); - if (index > -1) { - draft.splice(index, 1); - } - return; + switch (action.type) { + case TokenActionKind.ADD: { + draft.push(payload as BotDetailsDtoWithUser); + return; + } + case TokenActionKind.DELETE: { + const index = draft.findIndex((token) => token.id === payload); + if (index > -1) { + draft.splice(index, 1); } - case TokenActionKind.RESET: - return payload as BotDetailsDtoWithUser[]; + return; } - }, -); + case TokenActionKind.RESET: + return payload as BotDetailsDtoWithUser[]; + } +}); function Tokens() { const [tokenToDisplayInfo, setTokenToDisplayInfo] = useState(); @@ -175,10 +168,7 @@ function Tokens() { }); }) .catch((err) => { - enqueueErrorSnackbar( - t("settings.error.tokenDelete", { 0: token.name }), - err, - ); + enqueueErrorSnackbar(t("settings.error.tokenDelete", { 0: token.name }), err); }) .finally(() => { setTokensInLoading((prev) => prev.filter((u) => u !== token)); @@ -212,7 +202,7 @@ function Tokens() { - )) as ReactNode, + )) as React.ReactNode, ], // Token list [ @@ -228,15 +218,10 @@ function Tokens() {
      ) : ( <> - setTokenToDisplayInfo(token)} - > + setTokenToDisplayInfo(token)}> - setTokenToDelete(token)} - > + setTokenToDelete(token)}> @@ -252,9 +237,7 @@ function Tokens() { primary={ {token.name} - + {token.user.name} diff --git a/webapp/src/components/App/Settings/Users/Header.tsx b/webapp/src/components/App/Settings/Users/Header.tsx index 47969745bf..3340e5f836 100644 --- a/webapp/src/components/App/Settings/Users/Header.tsx +++ b/webapp/src/components/App/Settings/Users/Header.tsx @@ -17,7 +17,7 @@ import PersonAddAltIcon from "@mui/icons-material/PersonAddAlt"; import { useTranslation } from "react-i18next"; import { useState } from "react"; import CreateUserDialog from "./dialog/CreateUserDialog"; -import { UserDetailsDTO } from "../../../../common/types"; +import type { UserDetailsDTO } from "../../../../common/types"; import SearchFE from "../../../common/fieldEditors/SearchFE"; interface Props { diff --git a/webapp/src/components/App/Settings/Users/dialog/CreateUserDialog.tsx b/webapp/src/components/App/Settings/Users/dialog/CreateUserDialog.tsx index 298b7fb84d..2e1d710317 100644 --- a/webapp/src/components/App/Settings/Users/dialog/CreateUserDialog.tsx +++ b/webapp/src/components/App/Settings/Users/dialog/CreateUserDialog.tsx @@ -16,7 +16,7 @@ import PersonAddIcon from "@mui/icons-material/PersonAdd"; import { useSnackbar } from "notistack"; import { useTranslation } from "react-i18next"; import { usePromise as usePromiseWrapper } from "react-use"; -import { +import type { GroupDTO, RoleDetailsDTO, RoleType, @@ -25,8 +25,8 @@ import { } from "../../../../../common/types"; import useEnqueueErrorSnackbar from "../../../../../hooks/useEnqueueErrorSnackbar"; import { createRole, createUser } from "../../../../../services/api/user"; -import { SubmitHandlerPlus } from "../../../../common/Form/types"; -import UserFormDialog, { UserFormDialogProps } from "./UserFormDialog"; +import type { SubmitHandlerPlus } from "../../../../common/Form/types"; +import UserFormDialog, { type UserFormDialogProps } from "./UserFormDialog"; type InheritPropsToOmit = "title" | "titleIcon" | "onSubmit" | "onCancel"; @@ -57,10 +57,7 @@ function CreateUserDialog(props: Props) { variant: "success", }); } catch (e) { - enqueueErrorSnackbar( - t("settings.error.userSave", { 0: username }), - e as Error, - ); + enqueueErrorSnackbar(t("settings.error.userSave", { 0: username }), e as Error); throw e; } @@ -68,13 +65,12 @@ function CreateUserDialog(props: Props) { let roles: UserDetailsDTO["roles"] = []; if (permissions.length > 0) { - const promises = permissions.map( - (perm: { group: GroupDTO; type: RoleType }) => - createRole({ - group_id: perm.group.id, - type: perm.type, - identity_id: newUser.id, - }), + const promises = permissions.map((perm: { group: GroupDTO; type: RoleType }) => + createRole({ + group_id: perm.group.id, + type: perm.type, + identity_id: newUser.id, + }), ); const res: RoleDetailsDTO[] = await mounted(Promise.all(promises)); @@ -92,10 +88,7 @@ function CreateUserDialog(props: Props) { // Because we cannot recover roles eventually created reloadFetchUsers(); - enqueueErrorSnackbar( - t("settings.error.userRolesSave", { 0: newUser.name }), - e as Error, - ); + enqueueErrorSnackbar(t("settings.error.userRolesSave", { 0: newUser.name }), e as Error); } closeDialog(); diff --git a/webapp/src/components/App/Settings/Users/dialog/UpdateUserDialog.tsx b/webapp/src/components/App/Settings/Users/dialog/UpdateUserDialog.tsx index 1f8f6afabb..e796c5a3ce 100644 --- a/webapp/src/components/App/Settings/Users/dialog/UpdateUserDialog.tsx +++ b/webapp/src/components/App/Settings/Users/dialog/UpdateUserDialog.tsx @@ -17,23 +17,14 @@ import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { usePromise as usePromiseWrapper } from "react-use"; import { useSnackbar } from "notistack"; -import { - GroupDTO, - RoleType, - UserDetailsDTO, -} from "../../../../../common/types"; +import type { GroupDTO, RoleType, UserDetailsDTO } from "../../../../../common/types"; import { createRole, deleteUserRoles } from "../../../../../services/api/user"; -import UserFormDialog, { UserFormDialogProps } from "./UserFormDialog"; -import { UserEdit } from ".."; +import UserFormDialog, { type UserFormDialogProps } from "./UserFormDialog"; +import type { UserEdit } from ".."; import useEnqueueErrorSnackbar from "../../../../../hooks/useEnqueueErrorSnackbar"; -import { SubmitHandlerPlus } from "../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../common/Form/types"; -type InheritPropsToOmit = - | "title" - | "titleIcon" - | "defaultValues" - | "onSubmit" - | "onCancel"; +type InheritPropsToOmit = "title" | "titleIcon" | "defaultValues" | "onSubmit" | "onCancel"; interface Props extends Omit { user: UserDetailsDTO; @@ -43,8 +34,7 @@ interface Props extends Omit { } function UpdateUserDialog(props: Props) { - const { user, closeDialog, editUser, reloadFetchUsers, ...dialogProps } = - props; + const { user, closeDialog, editUser, reloadFetchUsers, ...dialogProps } = props; const { t } = useTranslation(); const mounted = usePromiseWrapper(); const { enqueueSnackbar } = useSnackbar(); @@ -75,13 +65,12 @@ function UpdateUserDialog(props: Props) { try { await mounted(deleteUserRoles(user.id)); - const promises = permissions.map( - (perm: { group: GroupDTO; type: RoleType }) => - createRole({ - group_id: perm.group.id, - type: perm.type, - identity_id: user.id, - }), + const promises = permissions.map((perm: { group: GroupDTO; type: RoleType }) => + createRole({ + group_id: perm.group.id, + type: perm.type, + identity_id: user.id, + }), ); const res = await mounted(Promise.all(promises)); @@ -102,10 +91,7 @@ function UpdateUserDialog(props: Props) { // Because we cannot recover roles eventually deleted/created reloadFetchUsers(); - enqueueErrorSnackbar( - t("settings.error.userRolesSave", { 0: user.name }), - e as Error, - ); + enqueueErrorSnackbar(t("settings.error.userRolesSave", { 0: user.name }), e as Error); } closeDialog(); diff --git a/webapp/src/components/App/Settings/Users/dialog/UserFormDialog/UserForm.tsx b/webapp/src/components/App/Settings/Users/dialog/UserFormDialog/UserForm.tsx index 7607a4a00f..9a388f8f1b 100644 --- a/webapp/src/components/App/Settings/Users/dialog/UserFormDialog/UserForm.tsx +++ b/webapp/src/components/App/Settings/Users/dialog/UserFormDialog/UserForm.tsx @@ -31,23 +31,19 @@ import { ListItemIcon, ListItemText, CircularProgress, - SelectChangeEvent, + type SelectChangeEvent, } from "@mui/material"; import { Controller, useFieldArray } from "react-hook-form"; import { v4 as uuidv4 } from "uuid"; import DeleteIcon from "@mui/icons-material/Delete"; import GroupIcon from "@mui/icons-material/Group"; -import { - RESERVED_GROUP_NAMES, - RESERVED_USER_NAMES, - ROLE_TYPE_KEYS, -} from "../../../utils"; -import { GroupDTO, RoleType } from "../../../../../../common/types"; +import { RESERVED_GROUP_NAMES, RESERVED_USER_NAMES, ROLE_TYPE_KEYS } from "../../../utils"; +import { RoleType, type GroupDTO } from "../../../../../../common/types"; import { roleToString, sortByName } from "../../../../../../services/utils"; import usePromise from "../../../../../../hooks/usePromise"; import { getGroups, getUsers } from "../../../../../../services/api/user"; -import { UserFormDialogProps } from "."; -import { UseFormReturnPlus } from "../../../../../common/Form/types"; +import type { UserFormDialogProps } from "."; +import type { UseFormReturnPlus } from "../../../../../common/Form/types"; import { validatePassword, validateString } from "@/utils/validation/string"; interface Props extends UseFormReturnPlus { @@ -91,9 +87,7 @@ function UserForm(props: Props) { if (!groups) { return []; } - return sortByName( - groups.filter((group) => !RESERVED_GROUP_NAMES.includes(group.name)), - ); + return sortByName(groups.filter((group) => !RESERVED_GROUP_NAMES.includes(group.name))); }, [groups]); //////////////////////////////////////////////////////////////// @@ -148,8 +142,7 @@ function UserForm(props: Props) { {...commonTextFieldProps} {...register("confirmPassword", { validate: (v) => - v === getValues("password") || - t("settings.user.form.error.passwordMismatch"), + v === getValues("password") || t("settings.user.form.error.passwordMismatch"), })} /> @@ -159,8 +152,7 @@ function UserForm(props: Props) { sx={{ p: 2, mt: 2, - backgroundImage: - "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", + backgroundImage: "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", }} > {t("global.permissions")} @@ -232,11 +224,7 @@ function UserForm(props: Props) { disablePadding dense > - + diff --git a/webapp/src/components/App/Settings/Users/dialog/UserFormDialog/index.tsx b/webapp/src/components/App/Settings/Users/dialog/UserFormDialog/index.tsx index cc2dd19efd..425a3adbe2 100644 --- a/webapp/src/components/App/Settings/Users/dialog/UserFormDialog/index.tsx +++ b/webapp/src/components/App/Settings/Users/dialog/UserFormDialog/index.tsx @@ -13,10 +13,8 @@ */ import { DialogContentText } from "@mui/material"; -import FormDialog, { - FormDialogProps, -} from "../../../../../common/dialogs/FormDialog"; -import { GroupDTO, RoleType } from "../../../../../../common/types"; +import FormDialog, { type FormDialogProps } from "../../../../../common/dialogs/FormDialog"; +import type { GroupDTO, RoleType } from "../../../../../../common/types"; import UserForm from "./UserForm"; export interface UserFormDialogProps extends Omit { diff --git a/webapp/src/components/App/Settings/Users/index.tsx b/webapp/src/components/App/Settings/Users/index.tsx index 373ca36b84..67ac430351 100644 --- a/webapp/src/components/App/Settings/Users/index.tsx +++ b/webapp/src/components/App/Settings/Users/index.tsx @@ -26,12 +26,12 @@ import { } from "@mui/material"; import DeleteIcon from "@mui/icons-material/Delete"; import EditIcon from "@mui/icons-material/Edit"; -import { useMemo, useReducer, useState, ReactNode } from "react"; +import { useMemo, useReducer, useState } from "react"; import { useTranslation } from "react-i18next"; import PersonIcon from "@mui/icons-material/Person"; import { produce } from "immer"; import { usePromise as usePromiseWrapper, useUpdateEffect } from "react-use"; -import { Action } from "redux"; +import type { Action } from "redux"; import { useSnackbar } from "notistack"; import * as R from "ramda"; import { deleteUser, getUsers } from "../../../../services/api/user"; @@ -40,7 +40,7 @@ import useEnqueueErrorSnackbar from "../../../../hooks/useEnqueueErrorSnackbar"; import ConfirmationDialog from "../../../common/dialogs/ConfirmationDialog"; import Header from "./Header"; import { RESERVED_USER_NAMES } from "../utils"; -import { UserDetailsDTO } from "../../../../common/types"; +import type { UserDetailsDTO } from "../../../../common/types"; import UpdateUserDialog from "./dialog/UpdateUserDialog"; import { sortByName } from "../../../../services/utils"; import { isSearchMatching } from "../../../../utils/stringUtils"; @@ -154,10 +154,7 @@ function Users() { }); }) .catch((err) => { - enqueueErrorSnackbar( - t("settings.error.userDelete", { 0: user.name }), - err, - ); + enqueueErrorSnackbar(t("settings.error.userDelete", { 0: user.name }), err); }) .finally(() => { setUsersInLoading((prev) => prev.filter((u) => u !== user)); @@ -191,7 +188,7 @@ function Users() { - )) as ReactNode, + )) as React.ReactNode, ], // User list [ @@ -210,10 +207,7 @@ function Users() { setUserToEdit(user)}> - setUserToDelete(user)} - > + setUserToDelete(user)}> diff --git a/webapp/src/components/App/Settings/index.tsx b/webapp/src/components/App/Settings/index.tsx index 60063a8e1b..ff5919e36a 100644 --- a/webapp/src/components/App/Settings/index.tsx +++ b/webapp/src/components/App/Settings/index.tsx @@ -15,7 +15,7 @@ import SettingsIcon from "@mui/icons-material/Settings"; import { TabContext, TabList, TabPanel } from "@mui/lab"; import { Box, Tab } from "@mui/material"; -import { SyntheticEvent, useMemo, useState } from "react"; +import { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import RootPage from "../../common/page/RootPage"; import Groups from "./Groups"; @@ -24,10 +24,7 @@ import Tokens from "./Tokens"; import Users from "./Users"; import General from "./General"; import useAppSelector from "../../../redux/hooks/useAppSelector"; -import { - isAuthUserAdmin, - isAuthUserInGroupAdmin, -} from "../../../redux/selectors"; +import { isAuthUserAdmin, isAuthUserInGroupAdmin } from "../../../redux/selectors"; import { tuple } from "../../../utils/tsUtils"; function Settings() { @@ -40,8 +37,7 @@ function Settings() { return [ tuple(t("global.general"), () => ), isUserAdmin && tuple(t("global.users"), () => ), - (isUserAdmin || isUserInGroupAdmin) && - tuple(t("global.group"), () => ), + (isUserAdmin || isUserInGroupAdmin) && tuple(t("global.group"), () => ), tuple(t("global.tokens"), () => ), isUserAdmin && tuple(t("global.maintenance"), () => ), ].filter(Boolean); @@ -51,7 +47,7 @@ function Settings() { // Event Handlers //////////////////////////////////////////////////////////////// - const handleTabChange = (event: SyntheticEvent, newValue: string) => { + const handleTabChange = (event: React.SyntheticEvent, newValue: string) => { setTabValue(newValue); }; diff --git a/webapp/src/components/App/Settings/utils.ts b/webapp/src/components/App/Settings/utils.ts index b074304987..3e2ceb4b05 100644 --- a/webapp/src/components/App/Settings/utils.ts +++ b/webapp/src/components/App/Settings/utils.ts @@ -18,6 +18,6 @@ import { RoleType } from "../../../common/types"; export const RESERVED_USER_NAMES = ["admin"]; export const RESERVED_GROUP_NAMES = ["admin"]; -export const ROLE_TYPE_KEYS = Object.values(RoleType).filter( - RA.isString, -) as Array; +export const ROLE_TYPE_KEYS = Object.values(RoleType).filter(RA.isString) as Array< + keyof typeof RoleType +>; diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandImportButton.tsx b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandImportButton.tsx index 3c0912d1f4..dab8eeac63 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandImportButton.tsx +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandImportButton.tsx @@ -51,7 +51,7 @@ function CommandImportButton(props: PropTypes) { const json = JSON.parse(text as string); onImport(json); } - } catch (error) { + } catch { enqueueSnackbar(t("variants.error.jsonParsing"), { variant: "error", }); @@ -64,11 +64,7 @@ function CommandImportButton(props: PropTypes) { return ( - + , + icon: , text: item.user || t("global.unknown"), }, { - icon: , + icon: , text: item.updatedAt ? formatDate(item.updatedAt) : t("global.unknown"), - tooltip: item.updatedAt - ? formatDateWithLocale(item.updatedAt) - : t("global.unknown"), + tooltip: item.updatedAt ? formatDateWithLocale(item.updatedAt) : t("global.unknown"), }, ]; @@ -61,9 +60,7 @@ function CommandDetails({ item }: Props) { {details.map((detail, index) => ( - {index > 0 && ( - - )} + {index > 0 && } {detail.icon} {detail.tooltip ? ( diff --git a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/CommandMatrixViewer.tsx b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/CommandMatrixViewer.tsx index 51fbb8a7f4..f55b061ed9 100644 --- a/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/CommandMatrixViewer.tsx +++ b/webapp/src/components/App/Singlestudy/Commands/Edition/DraggableCommands/CommandListItem/CommandMatrixViewer.tsx @@ -13,11 +13,11 @@ */ import { Box, Button } from "@mui/material"; -import { isString } from "ramda-adjunct"; +import * as RA from "ramda-adjunct"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import MatrixDialog from "../../../../../Data/MatrixDialog"; -import { CommandEnum, CommandItem } from "../../commandTypes"; +import { CommandEnum, type CommandItem } from "../../commandTypes"; interface PropTypes { command: CommandItem; @@ -31,7 +31,7 @@ function CommandMatrixViewer(props: PropTypes) { const [openViewer, setOpenViewer] = useState(false); const [t] = useTranslation(); - if (action === CommandEnum.REPLACE_MATRIX && isString(matrixId)) { + if (action === CommandEnum.REPLACE_MATRIX && RA.isString(matrixId)) { return ( - @@ -114,16 +99,10 @@ function NoteEditorModal(props: Props) { >
      - onStyleClick("BOLD")} - > + onStyleClick("BOLD")}> B - onStyleClick("ITALIC")} - > + onStyleClick("ITALIC")}> I - EditorState.createEmpty(), - ); + const [editorState, setEditorState] = useState(() => EditorState.createEmpty()); const [editionMode, setEditionMode] = useState(false); const [content, setContent] = useState(""); const { status: synthesisStatus } = useStudySynthesis({ studyId: study.id }); const areas = useAppSelector((state) => getAreas(state, study.id)); const links = useAppSelector((state) => getLinks(state, study.id)); - const { data: diskUsage, isLoading: isDiskUsageLoading } = - usePromiseWithSnackbarError(() => getStudyDiskUsage(study.id), { + const { data: diskUsage, isLoading: isDiskUsageLoading } = usePromiseWithSnackbarError( + () => getStudyDiskUsage(study.id), + { errorMessage: t("studies.error.retrieveData"), deps: [study?.id], - }); + }, + ); const commentRes = usePromiseWithSnackbarError(() => getComments(study.id), { errorMessage: t("studies.error.retrieveData"), @@ -115,9 +111,7 @@ function Notes({ study }: Props) { useEffect(() => { const comments = commentRes.data; if (comments) { - setEditorState( - EditorState.createWithContent(convertXMLToDraftJS(comments)), - ); + setEditorState(EditorState.createWithContent(convertXMLToDraftJS(comments))); setContent(comments); } }, [commentRes.data]); @@ -129,9 +123,7 @@ function Notes({ study }: Props) { const handleSave = async (newContent: string) => { const prevEditorState = editorState; setEditionMode("loading"); - setEditorState( - EditorState.createWithContent(convertXMLToDraftJS(newContent)), - ); + setEditorState(EditorState.createWithContent(convertXMLToDraftJS(newContent))); try { await editComments(study.id, newContent); @@ -200,11 +192,7 @@ function Notes({ study }: Props) { - ) : ( - convertSize(diskUsage || 0) - ), + content: isDiskUsageLoading ? : convertSize(diskUsage || 0), label: t("study.diskUsage"), icon: StorageIcon, iconColor: getColorForSize(diskUsage || 0), diff --git a/webapp/src/components/App/Singlestudy/HomeView/InformationView/Notes/utils.ts b/webapp/src/components/App/Singlestudy/HomeView/InformationView/Notes/utils.ts index 4f2d146330..5e5d2fd643 100644 --- a/webapp/src/components/App/Singlestudy/HomeView/InformationView/Notes/utils.ts +++ b/webapp/src/components/App/Singlestudy/HomeView/InformationView/Notes/utils.ts @@ -14,10 +14,10 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable no-param-reassign */ -import { ContentState, convertToRaw, EditorState } from "draft-js"; +import { convertToRaw, type ContentState, type EditorState } from "draft-js"; import draftToHtml from "draftjs-to-html"; import { convertFromHTML } from "draft-convert"; -import { Element as XMLElement, js2xml, xml2json } from "xml-js"; +import { js2xml, xml2json, type Element as XMLElement } from "xml-js"; import theme from "../../../../../../theme"; interface BlockMap { @@ -143,17 +143,12 @@ const parseXMLToHTMLNode = ( if (attributesUtils.list !== undefined) { if (prevListSeq === undefined) { attributesUtils.openBalise = `${ - attributesUtils.list === "Numbered List" - ? "
      1. " - : "
        • " + attributesUtils.list === "Numbered List" ? "
          1. " : "
            • " }${attributesUtils.openBalise}`; } else if (prevListSeq !== attributesUtils.list) { - const closePrevBalise = - prevListSeq === "Numbered List" ? "
          " : "
        "; // Close previous list + const closePrevBalise = prevListSeq === "Numbered List" ? "
      " : ""; // Close previous list attributesUtils.openBalise = `${closePrevBalise}${ - attributesUtils.list === "Numbered List" - ? "
      1. " - : "
        • " + attributesUtils.list === "Numbered List" ? "
          1. " : "
            • " }${attributesUtils.openBalise}`; } else { attributesUtils.openBalise = `
            • ${attributesUtils.openBalise}`; @@ -164,21 +159,16 @@ const parseXMLToHTMLNode = ( attributesUtils.list === "Numbered List" ? "
          " : "
        "; } } else if (prevListSeq !== undefined) { - const closePrevBalise = - prevListSeq === "Numbered List" ? "
      " : ""; // Close previous list + const closePrevBalise = prevListSeq === "Numbered List" ? "

      M+j4sc7@?u=^?q9iO)9cr8U#o_ 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 huiX?#yNCK%fUE=(^49PTweeH diff --git a/tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.expected.zip b/tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.expected.zip deleted file mode 100644 index bb83d7774579e14cb7323c200b3408052271027f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128576 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 S`zOfHAmj+9cre5T0RI84ZPjxC diff --git a/tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.zip b/tests/storage/study_upgrader/upgrade_870/nominal_case/little_study_860.zip deleted file mode 100644 index ee4aef0d3469bf3ebd76dd6b56244d6d3cf4a4d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126416 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 uZKCaZw8MZg|)!q+l55(B?ynF76^OZD< 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%0AT#XkpzsROgSOD;u;(5tMB8R+?!yo(88+ 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 Wh$A6y|M$<3Up<-tzyPEH0N{U5)ts#W diff --git a/tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.expected.zip b/tests/storage/study_upgrader/upgrade_880/nominal_case/little_study_870.expected.zip deleted file mode 100644 index ddeb10ad18899a88440167951bdf193a96b530ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135401 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 z 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 Date: Tue, 19 Nov 2024 18:29:32 +0100 Subject: [PATCH 06/86] feat(matrix): allow import for comma-separated csv (#2237) --- antarest/study/service.py | 14 ++++++++------ .../raw_studies_blueprint/test_fetch_raw_data.py | 6 ++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/antarest/study/service.py b/antarest/study/service.py index d8f708862d..dfff080319 100644 --- a/antarest/study/service.py +++ b/antarest/study/service.py @@ -1535,15 +1535,17 @@ def _create_edit_study_command( if isinstance(data, bytes): # noinspection PyTypeChecker str_data = data.decode("utf-8") - try: - delimiter = csv.Sniffer().sniff(str_data, delimiters=r"[,;\t]").delimiter - except csv.Error: - # Can happen with data with only one column. In this case, we don't care about the delimiter. - delimiter = "\t" if not str_data: matrix = np.zeros(shape=(0, 0)) else: - matrix = pd.read_csv(io.BytesIO(data), delimiter=delimiter, header=None).to_numpy(dtype=np.float64) + size_to_check = min(len(str_data), 64) # sniff a chunk only to speed up the code + try: + delimiter = csv.Sniffer().sniff(str_data[:size_to_check], delimiters=r"[,;\t]").delimiter + except csv.Error: + # Can happen with data with only one column. In this case, we don't care about the delimiter. + delimiter = "\t" + df = pd.read_csv(io.BytesIO(data), delimiter=delimiter, header=None).replace(",", ".", regex=True) + matrix = df.to_numpy(dtype=np.float64) matrix = matrix.reshape((1, 0)) if matrix.size == 0 else matrix return ReplaceMatrix( target=url, matrix=matrix.tolist(), command_context=context, study_version=study_version diff --git a/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py b/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py index 6fb269dbf2..da4426bdb2 100644 --- a/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py +++ b/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py @@ -151,8 +151,9 @@ def test_get_study( b"", b"\xef\xbb\xbf1;1;1;1;1\r\n1;1;1;1;1", b"1;1;1;1;1\r1;1;1;1;1", + b"0,000000;0,000000;0,000000;0,000000\n0,000000;0,000000;0,000000;0,000000", ], - ["\t", "\t", ",", "\t", ";", ";"], + ["\t", "\t", ",", "\t", ";", ";", ";"], ): res = client.put(raw_url, params={"path": matrix_path}, files={"file": io.BytesIO(content)}) assert res.status_code == 204, res.json() @@ -162,7 +163,8 @@ def test_get_study( # For some reason the `GET` returns the default matrix when it's empty expected = 8760 * [[0]] else: - expected = pd.read_csv(io.BytesIO(content), delimiter=delimiter, header=None).to_numpy().tolist() + df = pd.read_csv(io.BytesIO(content), delimiter=delimiter, header=None).replace(",", ".", regex=True) + expected = df.to_numpy(dtype=np.float64).tolist() assert written_data == expected # If we ask for properties, we should have a JSON content From 56bf28f6026b982ee198d8c1150ee0b5473374c0 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Wed, 20 Nov 2024 11:56:47 +0100 Subject: [PATCH 07/86] feat(ui-commons,ui-api): allow to export matrices to CSV (#2236) --- webapp/public/locales/en/main.json | 1 + webapp/public/locales/fr/main.json | 1 + .../common/buttons/DownloadMatrixButton.tsx | 32 +++++++++++-------- .../src/services/api/studies/raw/constants.ts | 21 ++++++++++++ webapp/src/services/api/studies/raw/types.ts | 6 +++- 5 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 webapp/src/services/api/studies/raw/constants.ts diff --git a/webapp/public/locales/en/main.json b/webapp/public/locales/en/main.json index 58404fb446..f1b86728c2 100644 --- a/webapp/public/locales/en/main.json +++ b/webapp/public/locales/en/main.json @@ -76,6 +76,7 @@ "global.close": "Close", "global.replace": "Replace", "global.status": "Status", + "global.semicolon": "Semicolon", "global.language": "Language", "global.time.hourly": "Hourly", "global.time.daily": "Daily", diff --git a/webapp/public/locales/fr/main.json b/webapp/public/locales/fr/main.json index 783346f988..ce4885b1cd 100644 --- a/webapp/public/locales/fr/main.json +++ b/webapp/public/locales/fr/main.json @@ -76,6 +76,7 @@ "global.close": "Fermer", "global.replace": "Remplacer", "global.status": "Statut", + "global.semicolon": "Point-virgule", "global.language": "Langue", "global.time.hourly": "Horaire", "global.time.daily": "Journalier", diff --git a/webapp/src/components/common/buttons/DownloadMatrixButton.tsx b/webapp/src/components/common/buttons/DownloadMatrixButton.tsx index 88b4ec2847..55e0d029c3 100644 --- a/webapp/src/components/common/buttons/DownloadMatrixButton.tsx +++ b/webapp/src/components/common/buttons/DownloadMatrixButton.tsx @@ -17,6 +17,7 @@ import { downloadFile } from "../../../utils/fileUtils"; import { StudyMetadata } from "../../../common/types"; import { useTranslation } from "react-i18next"; import DownloadButton from "./DownloadButton"; +import type { TTableExportFormat } from "@/services/api/studies/raw/types"; export interface DownloadMatrixButtonProps { studyId: StudyMetadata["id"]; @@ -25,39 +26,44 @@ export interface DownloadMatrixButtonProps { label?: string; } -const EXPORT_OPTIONS = [ - { label: "TSV", value: "tsv" }, - { label: "Excel", value: "xlsx" }, -] as const; - -type ExportFormat = (typeof EXPORT_OPTIONS)[number]["value"]; - function DownloadMatrixButton(props: DownloadMatrixButtonProps) { const { t } = useTranslation(); const { studyId, path, disabled, label = t("global.export") } = props; + const options: Array<{ label: string; value: TTableExportFormat }> = [ + { label: "CSV", value: "csv" }, + { + label: `CSV (${t("global.semicolon").toLowerCase()})`, + value: "csv (semicolon)", + }, + { label: "TSV", value: "tsv" }, + { label: "XLSX", value: "xlsx" }, + ]; + //////////////////////////////////////////////////////////////// // Event Handlers //////////////////////////////////////////////////////////////// - const handleDownload = async (format: ExportFormat) => { + const handleDownload = async (format: TTableExportFormat) => { if (!path) { return; } - const isExcel = format === "xlsx"; + const isXlsx = format === "xlsx"; const res = await downloadMatrix({ studyId, path, format, - header: isExcel, - index: isExcel, + header: isXlsx, + index: isXlsx, }); + const extension = format === "csv (semicolon)" ? "csv" : format; + return downloadFile( res, - `matrix_${studyId}_${path.replace("/", "_")}.${format}`, + `matrix_${studyId}_${path.replace("/", "_")}.${extension}`, ); }; @@ -67,7 +73,7 @@ function DownloadMatrixButton(props: DownloadMatrixButtonProps) { return ( diff --git a/webapp/src/services/api/studies/raw/constants.ts b/webapp/src/services/api/studies/raw/constants.ts new file mode 100644 index 0000000000..9481e0557c --- /dev/null +++ b/webapp/src/services/api/studies/raw/constants.ts @@ -0,0 +1,21 @@ +/** + * Copyright (c) 2024, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +export const TableExportFormat = { + XLSX: "xlsx", + HDF5: "hdf5", + TSV: "tsv", + CSV: "csv", + CSV_SEMICOLON: "csv (semicolon)", +} as const; diff --git a/webapp/src/services/api/studies/raw/types.ts b/webapp/src/services/api/studies/raw/types.ts index 0ab6a84f8d..937fd84119 100644 --- a/webapp/src/services/api/studies/raw/types.ts +++ b/webapp/src/services/api/studies/raw/types.ts @@ -14,11 +14,15 @@ import type { AxiosRequestConfig } from "axios"; import type { StudyMetadata } from "../../../../common/types"; +import { O } from "ts-toolbelt"; +import { TableExportFormat } from "./constants"; + +export type TTableExportFormat = O.UnionOf; export interface DownloadMatrixParams { studyId: StudyMetadata["id"]; path: string; - format?: "tsv" | "xlsx"; + format?: TTableExportFormat; header?: boolean; index?: boolean; } From aabf89f7bfdf362362f354630f1fab95dae2b89a Mon Sep 17 00:00:00 2001 From: Theo Pascoli <48944759+TheoPascoli@users.noreply.github.com> Date: Fri, 29 Nov 2024 09:45:41 +0100 Subject: [PATCH 08/86] feat(link): add update endpoint for link (#2175) Co-authored-by: Samir Kamal <1954121+skamril@users.noreply.github.com> Co-authored-by: belthlemar Co-authored-by: Sylvain Leclerc --- antarest/core/exceptions.py | 5 + antarest/study/business/link_management.py | 47 +++- antarest/study/business/model/link_model.py | 30 ++- .../study/business/table_mode_management.py | 6 +- .../study/business/xpansion_management.py | 7 +- antarest/study/service.py | 23 +- .../variantstudy/business/command_reverter.py | 4 + .../storage/variantstudy/command_factory.py | 2 + .../variantstudy/model/command/common.py | 1 + .../variantstudy/model/command/create_link.py | 247 ++++++++++-------- .../variantstudy/model/command/update_link.py | 78 ++++++ antarest/study/web/study_data_blueprint.py | 22 +- .../study_data_blueprint/test_link.py | 97 +++++++ .../model/command/test_create_link.py | 18 +- .../model/command/test_remove_area.py | 2 +- tests/variantstudy/test_command_factory.py | 14 +- 16 files changed, 464 insertions(+), 139 deletions(-) create mode 100644 antarest/study/storage/variantstudy/model/command/update_link.py diff --git a/antarest/core/exceptions.py b/antarest/core/exceptions.py index 5d574421a6..81edd606eb 100644 --- a/antarest/core/exceptions.py +++ b/antarest/core/exceptions.py @@ -300,6 +300,11 @@ def __init__(self, message: str) -> None: super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) +class LinkNotFound(HTTPException): + def __init__(self, message: str) -> None: + super().__init__(HTTPStatus.NOT_FOUND, message) + + class VariantStudyParentNotValid(HTTPException): def __init__(self, message: str) -> None: super().__init__(HTTPStatus.UNPROCESSABLE_ENTITY, message) diff --git a/antarest/study/business/link_management.py b/antarest/study/business/link_management.py index 0a303d49a7..777ce3cd9e 100644 --- a/antarest/study/business/link_management.py +++ b/antarest/study/business/link_management.py @@ -11,20 +11,23 @@ # This file is part of the Antares project. import typing as t +from typing import Any, Dict from antares.study.version import StudyVersion -from antarest.core.exceptions import ConfigFileNotFound +from antarest.core.exceptions import ConfigFileNotFound, LinkNotFound, LinkValidationError from antarest.core.model import JSON from antarest.study.business.all_optional_meta import all_optional_model, camel_case_model -from antarest.study.business.model.link_model import LinkDTO, LinkInternal +from antarest.study.business.model.link_model import LinkBaseDTO, LinkDTO, LinkInternal from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import RawStudy, Study from antarest.study.storage.rawstudy.model.filesystem.config.links import LinkProperties +from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.model.command.create_link import CreateLink from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig +from antarest.study.storage.variantstudy.model.command.update_link import UpdateLink _ALL_LINKS_PATH = "input/links" @@ -76,6 +79,46 @@ def create_link(self, study: Study, link_creation_dto: LinkDTO) -> LinkDTO: return link_creation_dto + def update_link(self, study: RawStudy, area_from: str, area_to: str, link_update_dto: LinkBaseDTO) -> LinkDTO: + link_dto = LinkDTO(area1=area_from, area2=area_to, **link_update_dto.model_dump()) + + link = link_dto.to_internal(StudyVersion.parse(study.version)) + file_study = self.storage_service.get_storage(study).get_raw(study) + + self.get_link_if_exists(file_study, link) + + command = UpdateLink( + area1=area_from, + area2=area_to, + parameters=link.model_dump( + include=link_update_dto.model_fields_set, exclude={"area1", "area2"}, exclude_none=True + ), + command_context=self.storage_service.variant_study_service.command_factory.command_context, + study_version=file_study.config.version, + ) + + execute_or_add_commands(study, file_study, [command], self.storage_service) + + updated_link = self.get_internal_link(study, link) + + return updated_link.to_dto() + + def get_link_if_exists(self, file_study: FileStudy, link: LinkInternal) -> dict[str, Any]: + try: + return file_study.tree.get(["input", "links", link.area1, "properties", link.area2]) + except KeyError: + raise LinkNotFound(f"The link {link.area1} -> {link.area2} is not present in the study") + + def get_internal_link(self, study: RawStudy, link: LinkInternal) -> LinkInternal: + file_study = self.storage_service.get_storage(study).get_raw(study) + + link_properties = self.get_link_if_exists(file_study, link) + + link_properties.update({"area1": link.area1, "area2": link.area2}) + updated_link = LinkInternal.model_validate(link_properties) + + return updated_link + def delete_link(self, study: RawStudy, area1_id: str, area2_id: str) -> None: file_study = self.storage_service.get_storage(study).get_raw(study) command = RemoveLink( diff --git a/antarest/study/business/model/link_model.py b/antarest/study/business/model/link_model.py index d43a9e6e0b..977ce69ee3 100644 --- a/antarest/study/business/model/link_model.py +++ b/antarest/study/business/model/link_model.py @@ -36,18 +36,7 @@ ] -class Area(AntaresBaseModel): - area1: str - area2: str - - @model_validator(mode="after") - def validate_areas(self) -> t.Self: - if self.area1 == self.area2: - raise LinkValidationError(f"Cannot create a link that goes from and to the same single area: {self.area1}") - return self - - -class LinkDTO(Area): +class LinkBaseDTO(AntaresBaseModel): model_config = ConfigDict(alias_generator=to_camel_case, populate_by_name=True, extra="forbid") hurdles_cost: bool = False @@ -61,10 +50,25 @@ class LinkDTO(Area): colorg: int = Field(default=DEFAULT_COLOR, ge=0, le=255) link_width: float = 1 link_style: LinkStyle = LinkStyle.PLAIN - filter_synthesis: t.Optional[comma_separated_enum_list] = FILTER_VALUES filter_year_by_year: t.Optional[comma_separated_enum_list] = FILTER_VALUES + +class Area(AntaresBaseModel): + area1: str + area2: str + + @model_validator(mode="after") + def validate_areas(self) -> t.Self: + if self.area1 == self.area2: + raise LinkValidationError(f"Cannot create a link that goes from and to the same single area: {self.area1}") + area_from, area_to = sorted([self.area1, self.area2]) + self.area1 = area_from + self.area2 = area_to + return self + + +class LinkDTO(Area, LinkBaseDTO): def to_internal(self, version: StudyVersion) -> "LinkInternal": if version < STUDY_VERSION_8_2 and {"filter_synthesis", "filter_year_by_year"} & self.model_fields_set: raise LinkValidationError("Cannot specify a filter value for study's version earlier than v8.2") diff --git a/antarest/study/business/table_mode_management.py b/antarest/study/business/table_mode_management.py index ded9133a46..5905c78faf 100644 --- a/antarest/study/business/table_mode_management.py +++ b/antarest/study/business/table_mode_management.py @@ -201,7 +201,11 @@ def update_table_data( elif table_type == TableModeType.LINK: links_map = {tuple(key.split(" / ")): LinkOutput(**values) for key, values in data.items()} updated_map = self._link_manager.update_links_props(study, links_map) # type: ignore - excludes = set() if int(study.version) >= STUDY_VERSION_8_2 else {"filter_synthesis", "filter_year_by_year"} + excludes = ( + set() + if StudyVersion.parse(study.version) >= STUDY_VERSION_8_2 + else {"filter_synthesis", "filter_year_by_year"} + ) data = { f"{area1_id} / {area2_id}": link.model_dump(by_alias=True, exclude=excludes) for (area1_id, area2_id), link in updated_map.items() diff --git a/antarest/study/business/xpansion_management.py b/antarest/study/business/xpansion_management.py index 02e1fc795c..c86dd5cab7 100644 --- a/antarest/study/business/xpansion_management.py +++ b/antarest/study/business/xpansion_management.py @@ -21,7 +21,7 @@ from fastapi import HTTPException, UploadFile from pydantic import Field, ValidationError, field_validator, model_validator -from antarest.core.exceptions import BadZipBinary, ChildNotFoundError +from antarest.core.exceptions import BadZipBinary, ChildNotFoundError, LinkNotFound from antarest.core.model import JSON from antarest.core.serialization import AntaresBaseModel from antarest.study.business.all_optional_meta import all_optional_model @@ -255,11 +255,6 @@ class XpansionCandidateDTO(AntaresBaseModel): ) -class LinkNotFound(HTTPException): - def __init__(self, message: str) -> None: - super().__init__(http.HTTPStatus.NOT_FOUND, message) - - class XpansionFileNotFoundError(HTTPException): def __init__(self, message: str) -> None: super().__init__(http.HTTPStatus.NOT_FOUND, message) diff --git a/antarest/study/service.py b/antarest/study/service.py index dfff080319..386173b788 100644 --- a/antarest/study/service.py +++ b/antarest/study/service.py @@ -89,7 +89,7 @@ from antarest.study.business.general_management import GeneralManager from antarest.study.business.link_management import LinkManager from antarest.study.business.matrix_management import MatrixManager, MatrixManagerError -from antarest.study.business.model.link_model import LinkDTO +from antarest.study.business.model.link_model import LinkBaseDTO, LinkDTO from antarest.study.business.optimization_management import OptimizationManager from antarest.study.business.playlist_management import PlaylistManager from antarest.study.business.scenario_builder_management import ScenarioBuilderManager @@ -1905,6 +1905,27 @@ def create_link( ) return new_link + def update_link( + self, + uuid: str, + area_from: str, + area_to: str, + link_update_dto: LinkBaseDTO, + params: RequestParameters, + ) -> LinkDTO: + study = self.get_study(uuid) + assert_permission(params.user, study, StudyPermissionType.WRITE) + self._assert_study_unarchived(study) + updated_link = self.links_manager.update_link(study, area_from, area_to, link_update_dto) + self.event_bus.push( + Event( + type=EventType.STUDY_DATA_EDITED, + payload=study.to_json_summary(), + permissions=PermissionInfo.from_study(study), + ) + ) + return updated_link + def update_area( self, uuid: str, diff --git a/antarest/study/storage/variantstudy/business/command_reverter.py b/antarest/study/storage/variantstudy/business/command_reverter.py index 43dff3f981..dead380125 100644 --- a/antarest/study/storage/variantstudy/business/command_reverter.py +++ b/antarest/study/storage/variantstudy/business/command_reverter.py @@ -99,6 +99,10 @@ def _revert_create_link(base_command: CreateLink, history: t.List["ICommand"], b ) ] + @staticmethod + def _revert_update_link(base_command: CreateLink, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: + raise NotImplementedError("The revert function for UpdateLink is not available") + @staticmethod def _revert_remove_link(base_command: RemoveLink, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: raise NotImplementedError("The revert function for RemoveLink is not available") diff --git a/antarest/study/storage/variantstudy/command_factory.py b/antarest/study/storage/variantstudy/command_factory.py index c22b2319f7..958ff66690 100644 --- a/antarest/study/storage/variantstudy/command_factory.py +++ b/antarest/study/storage/variantstudy/command_factory.py @@ -43,6 +43,7 @@ from antarest.study.storage.variantstudy.model.command.update_comments import UpdateComments from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command.update_district import UpdateDistrict +from antarest.study.storage.variantstudy.model.command.update_link import UpdateLink from antarest.study.storage.variantstudy.model.command.update_playlist import UpdatePlaylist from antarest.study.storage.variantstudy.model.command.update_raw_file import UpdateRawFile from antarest.study.storage.variantstudy.model.command.update_scenario_builder import UpdateScenarioBuilder @@ -55,6 +56,7 @@ CommandName.CREATE_DISTRICT.value: CreateDistrict, CommandName.REMOVE_DISTRICT.value: RemoveDistrict, CommandName.CREATE_LINK.value: CreateLink, + CommandName.UPDATE_LINK.value: UpdateLink, CommandName.REMOVE_LINK.value: RemoveLink, CommandName.CREATE_BINDING_CONSTRAINT.value: CreateBindingConstraint, CommandName.UPDATE_BINDING_CONSTRAINT.value: UpdateBindingConstraint, diff --git a/antarest/study/storage/variantstudy/model/command/common.py b/antarest/study/storage/variantstudy/model/command/common.py index dc5dce4331..0e961effa1 100644 --- a/antarest/study/storage/variantstudy/model/command/common.py +++ b/antarest/study/storage/variantstudy/model/command/common.py @@ -31,6 +31,7 @@ class CommandName(Enum): CREATE_DISTRICT = "create_district" REMOVE_DISTRICT = "remove_district" CREATE_LINK = "create_link" + UPDATE_LINK = "update_link" REMOVE_LINK = "remove_link" CREATE_BINDING_CONSTRAINT = "create_binding_constraint" UPDATE_BINDING_CONSTRAINT = "update_binding_constraint" diff --git a/antarest/study/storage/variantstudy/model/command/create_link.py b/antarest/study/storage/variantstudy/model/command/create_link.py index 5090608820..1e46c20bf1 100644 --- a/antarest/study/storage/variantstudy/model/command/create_link.py +++ b/antarest/study/storage/variantstudy/model/command/create_link.py @@ -9,10 +9,13 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. +from abc import ABCMeta from typing import Any, Dict, List, Optional, Tuple, Union, cast +from antares.study.version import StudyVersion from pydantic import ValidationInfo, field_validator, model_validator +from antarest.core.exceptions import LinkValidationError from antarest.core.utils.utils import assert_this from antarest.matrixstore.model import MatrixData from antarest.study.business.model.link_model import LinkInternal @@ -27,17 +30,11 @@ from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener from antarest.study.storage.variantstudy.model.model import CommandDTO +MATRIX_ATTRIBUTES = ["series", "direct", "indirect"] -class CreateLink(ICommand): - """ - Command used to create a link between two areas. - """ - - # Overloaded metadata - # =================== - command_name: CommandName = CommandName.CREATE_LINK - version: int = 1 +class AbstractLinkCommand(ICommand, metaclass=ABCMeta): + command_name: CommandName # Command parameters # ================== @@ -57,11 +54,133 @@ def validate_series( return validate_matrix(v, new_values) if v is not None else v @model_validator(mode="after") - def validate_areas(self) -> "CreateLink": + def validate_areas(self) -> "AbstractLinkCommand": if self.area1 == self.area2: raise ValueError("Cannot create link on same node") + + if self.study_version < STUDY_VERSION_8_2 and (self.direct is not None or self.indirect is not None): + raise LinkValidationError( + "The fields 'direct' and 'indirect' cannot be provided when the version is less than 820." + ) + return self + def to_dto(self) -> CommandDTO: + args = { + "area1": self.area1, + "area2": self.area2, + "parameters": self.parameters, + } + for attr in MATRIX_ATTRIBUTES: + if value := getattr(self, attr, None): + args[attr] = strip_matrix_protocol(value) + return CommandDTO(action=self.command_name.value, args=args, study_version=self.study_version) + + def match(self, other: ICommand, equal: bool = False) -> bool: + if not isinstance(other, self.__class__): + return False + simple_match = self.area1 == other.area1 and self.area2 == other.area2 + if not equal: + return simple_match + return ( + simple_match + and self.parameters == other.parameters + and self.series == other.series + and self.direct == other.direct + and self.indirect == other.indirect + ) + + def match_signature(self) -> str: + return str( + self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.area1 + MATCH_SIGNATURE_SEPARATOR + self.area2 + ) + + def _create_diff(self, other: "ICommand") -> List["ICommand"]: + other = cast(AbstractLinkCommand, other) + + commands: List[ICommand] = [] + area_from, area_to = sorted([self.area1, self.area2]) + if self.parameters != other.parameters: + properties = LinkInternal.model_validate(other.parameters or {}).model_dump( + mode="json", by_alias=True, exclude_none=True, exclude={"area1", "area2"} + ) + commands.append( + UpdateConfig( + target=f"input/links/{area_from}/properties/{area_to}", + data=properties, + command_context=self.command_context, + study_version=self.study_version, + ) + ) + if self.series != other.series: + commands.append( + ReplaceMatrix( + target=f"@links_series/{area_from}/{area_to}", + matrix=strip_matrix_protocol(other.series), + command_context=self.command_context, + study_version=self.study_version, + ) + ) + return commands + + def get_inner_matrices(self) -> List[str]: + list_matrices = [] + for attr in MATRIX_ATTRIBUTES: + if value := getattr(self, attr, None): + assert_this(isinstance(value, str)) + list_matrices.append(strip_matrix_protocol(value)) + return list_matrices + + def save_series(self, area_from: str, area_to: str, study_data: FileStudy, version: StudyVersion) -> None: + assert isinstance(self.series, str) + if version < STUDY_VERSION_8_2: + study_data.tree.save(self.series, ["input", "links", area_from, area_to]) + else: + study_data.tree.save( + self.series, + ["input", "links", area_from, f"{area_to}_parameters"], + ) + + def save_direct(self, area_from: str, area_to: str, study_data: FileStudy, version: StudyVersion) -> None: + assert isinstance(self.direct, str) + if version >= STUDY_VERSION_8_2: + study_data.tree.save( + self.direct, + [ + "input", + "links", + area_from, + "capacities", + f"{area_to}_direct", + ], + ) + + def save_indirect(self, area_from: str, area_to: str, study_data: FileStudy, version: StudyVersion) -> None: + assert isinstance(self.indirect, str) + if version >= STUDY_VERSION_8_2: + study_data.tree.save( + self.indirect, + [ + "input", + "links", + area_from, + "capacities", + f"{area_to}_indirect", + ], + ) + + +class CreateLink(AbstractLinkCommand): + """ + Command used to create a link between two areas. + """ + + # Overloaded metadata + # =================== + + command_name: CommandName = CommandName.CREATE_LINK + version: int = 1 + def _create_link_in_config(self, area_from: str, area_to: str, study_data: FileStudyTreeConfig) -> None: self.parameters = self.parameters or {} study_data.areas[area_from].links[area_to] = Link( @@ -158,115 +277,23 @@ def _apply(self, study_data: FileStudy, listener: Optional[ICommandListener] = N self.direct = self.direct or (self.command_context.generator_matrix_constants.get_link_direct()) self.indirect = self.indirect or (self.command_context.generator_matrix_constants.get_link_indirect()) - assert type(self.series) is str - if version < STUDY_VERSION_8_2: - study_data.tree.save(self.series, ["input", "links", area_from, area_to]) - else: - study_data.tree.save( - self.series, - ["input", "links", area_from, f"{area_to}_parameters"], - ) - - study_data.tree.save({}, ["input", "links", area_from, "capacities"]) - if self.direct: - assert isinstance(self.direct, str) - study_data.tree.save( - self.direct, - [ - "input", - "links", - area_from, - "capacities", - f"{area_to}_direct", - ], - ) - - if self.indirect: - assert isinstance(self.indirect, str) - study_data.tree.save( - self.indirect, - [ - "input", - "links", - area_from, - "capacities", - f"{area_to}_indirect", - ], - ) + self.save_series(area_from, area_to, study_data, version) + self.save_direct(area_from, area_to, study_data, version) + self.save_indirect(area_from, area_to, study_data, version) return output def to_dto(self) -> CommandDTO: - args = { - "area1": self.area1, - "area2": self.area2, - "parameters": self.parameters, - } - if self.series: - args["series"] = strip_matrix_protocol(self.series) - if self.direct: - args["direct"] = strip_matrix_protocol(self.direct) - if self.indirect: - args["indirect"] = strip_matrix_protocol(self.indirect) - return CommandDTO(action=CommandName.CREATE_LINK.value, args=args, study_version=self.study_version) + return super().to_dto() def match_signature(self) -> str: - return str( - self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.area1 + MATCH_SIGNATURE_SEPARATOR + self.area2 - ) + return super().match_signature() def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, CreateLink): - return False - simple_match = self.area1 == other.area1 and self.area2 == other.area2 - if not equal: - return simple_match - return ( - simple_match - and self.parameters == other.parameters - and self.series == other.series - and self.direct == other.direct - and self.indirect == other.indirect - ) + return super().match(other, equal) def _create_diff(self, other: "ICommand") -> List["ICommand"]: - other = cast(CreateLink, other) - - commands: List[ICommand] = [] - area_from, area_to = sorted([self.area1, self.area2]) - if self.parameters != other.parameters: - properties = LinkInternal.model_validate(other.parameters or {}) - link_property = properties.model_dump( - mode="json", by_alias=True, exclude_none=True, exclude={"area1", "area2"} - ) - commands.append( - UpdateConfig( - target=f"input/links/{area_from}/properties/{area_to}", - data=link_property, - command_context=self.command_context, - study_version=self.study_version, - ) - ) - if self.series != other.series: - commands.append( - ReplaceMatrix( - target=f"@links_series/{area_from}/{area_to}", - matrix=strip_matrix_protocol(other.series), - command_context=self.command_context, - study_version=self.study_version, - ) - ) - return commands + return super()._create_diff(other) def get_inner_matrices(self) -> List[str]: - list_matrices = [] - if self.series: - assert_this(isinstance(self.series, str)) - list_matrices.append(strip_matrix_protocol(self.series)) - if self.direct: - assert_this(isinstance(self.direct, str)) - list_matrices.append(strip_matrix_protocol(self.direct)) - if self.indirect: - assert_this(isinstance(self.indirect, str)) - list_matrices.append(strip_matrix_protocol(self.indirect)) - return list_matrices + return super().get_inner_matrices() diff --git a/antarest/study/storage/variantstudy/model/command/update_link.py b/antarest/study/storage/variantstudy/model/command/update_link.py new file mode 100644 index 0000000000..ceab38ed56 --- /dev/null +++ b/antarest/study/storage/variantstudy/model/command/update_link.py @@ -0,0 +1,78 @@ +# Copyright (c) 2024, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. +import typing as t + +from antarest.study.business.model.link_model import LinkInternal +from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig +from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput +from antarest.study.storage.variantstudy.model.command.create_link import AbstractLinkCommand +from antarest.study.storage.variantstudy.model.command.icommand import ICommand, OutputTuple +from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener +from antarest.study.storage.variantstudy.model.model import CommandDTO + + +class UpdateLink(AbstractLinkCommand): + """ + Command used to update a link between two areas. + """ + + # Overloaded metadata + # =================== + + command_name: CommandName = CommandName.UPDATE_LINK + version: int = 1 + + def _apply_config(self, study_data: FileStudyTreeConfig) -> OutputTuple: + return ( + CommandOutput( + status=True, + message=f"Link between '{self.area1}' and '{self.area2}' updated", + ), + {}, + ) + + def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = None) -> CommandOutput: + version = study_data.config.version + + properties = study_data.tree.get(["input", "links", self.area1, "properties", self.area2]) + + new_properties = LinkInternal.model_validate(self.parameters).model_dump(include=self.parameters, by_alias=True) + + properties.update(new_properties) + + study_data.tree.save(properties, ["input", "links", self.area1, "properties", self.area2]) + + output, _ = self._apply_config(study_data.config) + + if self.series: + self.save_series(self.area1, self.area2, study_data, version) + + if self.direct: + self.save_direct(self.area1, self.area2, study_data, version) + + if self.indirect: + self.save_indirect(self.area1, self.area2, study_data, version) + + return output + + def to_dto(self) -> CommandDTO: + return super().to_dto() + + def match_signature(self) -> str: + return super().match_signature() + + def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: + return super()._create_diff(other) + + def get_inner_matrices(self) -> t.List[str]: + return super().get_inner_matrices() diff --git a/antarest/study/web/study_data_blueprint.py b/antarest/study/web/study_data_blueprint.py index 6d94a48c54..9f267df774 100644 --- a/antarest/study/web/study_data_blueprint.py +++ b/antarest/study/web/study_data_blueprint.py @@ -68,7 +68,7 @@ ) from antarest.study.business.district_manager import DistrictCreationDTO, DistrictInfoDTO, DistrictUpdateDTO from antarest.study.business.general_management import GeneralFormFields -from antarest.study.business.model.link_model import LinkDTO +from antarest.study.business.model.link_model import LinkBaseDTO, LinkDTO from antarest.study.business.optimization_management import OptimizationFormFields from antarest.study.business.playlist_management import PlaylistColumns from antarest.study.business.scenario_builder_management import Rulesets, ScenarioType @@ -197,6 +197,26 @@ def create_link( params = RequestParameters(user=current_user) return study_service.create_link(uuid, link_creation_info, params) + @bp.put( + "/studies/{uuid}/links/{area_from}/{area_to}", + tags=[APITag.study_data], + summary="Update a link", + response_model=LinkDTO, + ) + def update_link( + uuid: str, + area_from: str, + area_to: str, + link_update_dto: LinkBaseDTO, + current_user: JWTUser = Depends(auth.get_current_user), + ) -> t.Any: + logger.info( + f"Updating link {area_from} -> {area_to} for study {uuid}", + extra={"user": current_user.id}, + ) + params = RequestParameters(user=current_user) + return study_service.update_link(uuid, area_from, area_to, link_update_dto, params) + @bp.put( "/studies/{uuid}/areas/{area_id}/ui", tags=[APITag.study_data], diff --git a/tests/integration/study_data_blueprint/test_link.py b/tests/integration/study_data_blueprint/test_link.py index 7e4d18bf2c..635aedb830 100644 --- a/tests/integration/study_data_blueprint/test_link.py +++ b/tests/integration/study_data_blueprint/test_link.py @@ -9,6 +9,7 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. +from sys import stderr import pytest from starlette.testclient import TestClient @@ -19,6 +20,102 @@ @pytest.mark.unit_test class TestLink: + @pytest.mark.parametrize("study_type", ["raw", "variant"]) + def test_link_update(self, client: TestClient, user_access_token: str, study_type: str) -> None: + client.headers = {"Authorization": f"Bearer {user_access_token}"} # type: ignore + + preparer = PreparerProxy(client, user_access_token) + study_id = preparer.create_study("foo", version=820) + if study_type == "variant": + study_id = preparer.create_variant(study_id, name="Variant 1") + + area1_id = preparer.create_area(study_id, name="Area 1")["id"] + area2_id = preparer.create_area(study_id, name="Area 2")["id"] + client.post(f"/v1/studies/{study_id}/links", json={"area1": area1_id, "area2": area2_id, "hurdlesCost": True}) + res = client.put( + f"/v1/studies/{study_id}/links/{area1_id}/{area2_id}", + json={"colorr": 150}, + ) + + assert res.status_code == 200 + expected = { + "area1": "area 1", + "area2": "area 2", + "assetType": "ac", + "colorb": 112, + "colorg": 112, + "colorr": 150, + "displayComments": True, + "filterSynthesis": "hourly, daily, weekly, monthly, annual", + "filterYearByYear": "hourly, daily, weekly, monthly, annual", + "hurdlesCost": True, + "linkStyle": "plain", + "linkWidth": 1.0, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": False, + } + assert expected == res.json() + + # Test update link same area + + res = client.put( + f"/v1/studies/{study_id}/links/{area1_id}/{area1_id}", + json={"hurdlesCost": False}, + ) + assert res.status_code == 422 + expected = { + "description": "Cannot create a link that goes from and to the same single area: area 1", + "exception": "LinkValidationError", + } + assert expected == res.json() + + # Test update link with non existing area + + res = client.put( + f"/v1/studies/{study_id}/links/{area1_id}/id_do_not_exist", + json={"hurdlesCost": False}, + ) + assert res.status_code == 404 + expected = { + "description": "The link area 1 -> id_do_not_exist is not present in the study", + "exception": "LinkNotFound", + } + assert expected == res.json() + + # Test update link fails when given wrong parameters + if study_type == "raw": + res = client.post( + f"/v1/studies/{study_id}/commands", + json=[ + { + "action": "update_link", + "args": { + "area1": area1_id, + "area2": area2_id, + "parameters": {"hurdles-cost": False, "wrong": "parameter"}, + }, + } + ], + ) + assert res.status_code == 500 + expected = "Unexpected exception occurred when trying to apply command CommandName.UPDATE_LINK" + assert expected in res.json()["description"] + + # Test update link variant returns only modified values + + if study_type == "variant": + res = client.put( + f"/v1/studies/{study_id}/links/{area1_id}/{area2_id}", + json={"hurdlesCost": False}, + ) + assert res.status_code == 200 + + res = client.get(f"/v1/studies/{study_id}/commands") + commands = res.json() + command_args = commands[-1]["args"] + assert command_args["parameters"] == {"hurdles_cost": False} + @pytest.mark.parametrize("study_type", ["raw", "variant"]) def test_link_820(self, client: TestClient, user_access_token: str, study_type: str) -> None: client.headers = {"Authorization": f"Bearer {user_access_token}"} # type: ignore diff --git a/tests/variantstudy/model/command/test_create_link.py b/tests/variantstudy/model/command/test_create_link.py index c2e49e6509..bd4bac60ef 100644 --- a/tests/variantstudy/model/command/test_create_link.py +++ b/tests/variantstudy/model/command/test_create_link.py @@ -17,6 +17,7 @@ import pytest from pydantic import ValidationError +from antarest.core.exceptions import LinkValidationError from antarest.study.business.link_management import LinkInternal from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader @@ -136,8 +137,8 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): "area1": area1_id, "area2": area2_id, "parameters": {}, - "series": [[0]], "command_context": command_context, + "series": [[0]], "study_version": study_version, } ).apply(study_data=empty_study) @@ -165,8 +166,8 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): "area1": area3_id, "area2": area1_id, "parameters": parameters, - "series": [[0]], "command_context": command_context, + "series": [[0]], "study_version": study_version, } ) @@ -175,6 +176,17 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): ) assert output.status + with pytest.raises(LinkValidationError): + CreateLink.model_validate( + { + "area1": area3_id, + "area2": area1_id, + "parameters": parameters, + "direct": [[0]], + "command_context": command_context, + "study_version": study_version, + } + ) assert (study_path / "input" / "links" / area1_id / f"{area3_id}.txt.link").exists() @@ -201,8 +213,8 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): area1="does_not_exist", area2=area2_id, parameters={}, - series=[[0]], command_context=command_context, + series=[[0]], study_version=study_version, ).apply(empty_study) assert not output.status diff --git a/tests/variantstudy/model/command/test_remove_area.py b/tests/variantstudy/model/command/test_remove_area.py index 014d9f9e5f..b3de1c3342 100644 --- a/tests/variantstudy/model/command/test_remove_area.py +++ b/tests/variantstudy/model/command/test_remove_area.py @@ -135,8 +135,8 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): area2=area_id2, parameters={}, command_context=command_context, - study_version=study_version, series=[[0]], + study_version=study_version, ) output = create_link_command.apply(study_data=empty_study) assert output.status, output.message diff --git a/tests/variantstudy/test_command_factory.py b/tests/variantstudy/test_command_factory.py index 10846b389a..79dde561e7 100644 --- a/tests/variantstudy/test_command_factory.py +++ b/tests/variantstudy/test_command_factory.py @@ -86,6 +86,18 @@ ], study_version=STUDY_VERSION_8_8, ), + CommandDTO( + action=CommandName.UPDATE_LINK.value, + args=[ + { + "area1": "area1", + "area2": "area2", + "parameters": {}, + "series": "series", + } + ], + study_version=STUDY_VERSION_8_8, + ), CommandDTO( action=CommandName.REMOVE_LINK.value, args={ @@ -414,7 +426,7 @@ def _get_command_classes(self) -> Set[str]: f".{name}", package="antarest.study.storage.variantstudy.model.command", ) - abstract_commands = {"AbstractBindingConstraintCommand"} + abstract_commands = {"AbstractBindingConstraintCommand", "AbstractLinkCommand"} return {cmd.__name__ for cmd in ICommand.__subclasses__() if cmd.__name__ not in abstract_commands} def test_all_commands_are_tested(self, command_factory: CommandFactory): From 9ea20c67accb39646b8332f1d9967546bbd4c0d5 Mon Sep 17 00:00:00 2001 From: MartinBelthle Date: Fri, 29 Nov 2024 15:16:12 +0100 Subject: [PATCH 09/86] feat(raw): allow folder creation inside `user` folder (#2216) --- antarest/core/exceptions.py | 14 +- antarest/study/service.py | 153 ++++++++------ .../variantstudy/business/command_reverter.py | 20 ++ .../storage/variantstudy/command_factory.py | 4 + .../variantstudy/model/command/common.py | 9 + .../model/command/create_user_resource.py | 102 +++++++++ .../model/command/remove_user_resource.py | 84 ++++++++ antarest/study/web/raw_studies_blueprint.py | 37 ++-- tests/integration/prepare_proxy.py | 4 +- .../test_fetch_raw_data.py | 199 +++++++++++++++--- tests/storage/test_service.py | 11 +- .../variantstudy/test_snapshot_generator.py | 46 ---- tests/variantstudy/test_command_factory.py | 16 +- 13 files changed, 542 insertions(+), 157 deletions(-) create mode 100644 antarest/study/storage/variantstudy/model/command/create_user_resource.py create mode 100644 antarest/study/storage/variantstudy/model/command/remove_user_resource.py diff --git a/antarest/core/exceptions.py b/antarest/core/exceptions.py index 81edd606eb..d41d04d9cf 100644 --- a/antarest/core/exceptions.py +++ b/antarest/core/exceptions.py @@ -353,13 +353,23 @@ def __init__(self, is_variant: bool) -> None: super().__init__(HTTPStatus.EXPECTATION_FAILED, "Upgrade not supported for parent of variants") -class FileDeletionNotAllowed(HTTPException): +class ResourceDeletionNotAllowed(HTTPException): """ Exception raised when deleting a file or a folder which isn't inside the 'User' folder. """ def __init__(self, message: str) -> None: - msg = f"Raw deletion failed because {message}" + msg = f"Resource deletion failed because {message}" + super().__init__(HTTPStatus.FORBIDDEN, msg) + + +class FolderCreationNotAllowed(HTTPException): + """ + Exception raised when creating a folder which isn't inside the 'User' folder. + """ + + def __init__(self, message: str) -> None: + msg = f"Folder creation failed because {message}" super().__init__(HTTPStatus.FORBIDDEN, msg) diff --git a/antarest/study/service.py b/antarest/study/service.py index 3577a75beb..7e1198c6b7 100644 --- a/antarest/study/service.py +++ b/antarest/study/service.py @@ -36,13 +36,14 @@ BadEditInstructionException, ChildNotFoundError, CommandApplicationError, - FileDeletionNotAllowed, + FolderCreationNotAllowed, IncorrectPathError, NotAManagedStudyException, OutputAlreadyArchived, OutputAlreadyUnarchived, OutputNotFound, ReferencedObjectDeletionNotAllowed, + ResourceDeletionNotAllowed, StudyDeletionNotAllowed, StudyNotFoundError, StudyTypeUnsupported, @@ -138,7 +139,6 @@ from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency from antarest.study.storage.rawstudy.model.filesystem.matrix.output_series_matrix import OutputSeriesMatrix from antarest.study.storage.rawstudy.model.filesystem.raw_file_node import RawFileNode -from antarest.study.storage.rawstudy.model.filesystem.root.user.user import User from antarest.study.storage.rawstudy.raw_study_service import RawStudyService from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.study_download_utils import StudyDownloader, get_output_variables_information @@ -151,10 +151,19 @@ remove_from_cache, ) from antarest.study.storage.variantstudy.business.utils import transform_command_to_dto +from antarest.study.storage.variantstudy.model.command.create_user_resource import ( + CreateUserResource, + CreateUserResourceData, + ResourceType, +) from antarest.study.storage.variantstudy.model.command.generate_thermal_cluster_timeseries import ( GenerateThermalClusterTimeSeries, ) from antarest.study.storage.variantstudy.model.command.icommand import ICommand +from antarest.study.storage.variantstudy.model.command.remove_user_resource import ( + RemoveUserResource, + RemoveUserResourceData, +) from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix from antarest.study.storage.variantstudy.model.command.update_comments import UpdateComments from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig @@ -185,6 +194,20 @@ def get_disk_usage(path: t.Union[str, Path]) -> int: return total_size +def _get_path_inside_user_folder( + path: str, exception_class: t.Type[t.Union[FolderCreationNotAllowed, ResourceDeletionNotAllowed]] +) -> str: + """ + Retrieves the path inside the `user` folder for a given user path + + Raises exception_class if the path is not located inside the `user` folder + """ + url = [item for item in path.split("/") if item] + if len(url) < 2 or url[0] != "user": + raise exception_class(f"the given path isn't inside the 'User' folder: {path}") + return "/".join(url[1:]) + + class TaskProgressRecorder(ICommandListener): def __init__(self, notifier: ITaskNotifier) -> None: self.notifier = notifier @@ -1576,7 +1599,7 @@ def _edit_study_using_command( data: SUB_JSON, *, create_missing: bool = False, - ) -> ICommand: + ) -> t.List[ICommand]: """ Replace data on disk with new, using variant commands. @@ -1591,57 +1614,39 @@ def _edit_study_using_command( """ study_service = self.storage_service.get_storage(study) file_study = study_service.get_raw(metadata=study) + version = file_study.config.version + commands: t.List[ICommand] = [] file_relpath = PurePosixPath(url.strip().strip("/")) file_path = study_service.get_study_path(study).joinpath(file_relpath) create_missing &= not file_path.exists() if create_missing: - # IMPORTANT: We prohibit deep file system changes in private directories. - # - File and directory creation is only possible for the "user" directory, - # because the "input" and "output" directories are managed by Antares. - # - We also prohibit writing files in the "user/expansion" folder which currently - # contains the Xpansion tool configuration. - # This configuration should be moved to the "input/expansion" directory in the future. - if file_relpath and file_relpath.parts[0] == "user" and file_relpath.parts[1] != "expansion": - # In the case of variants, we must write the file directly in the study's snapshot folder, - # because the "user" folder is not managed by the command mechanism. - file_path.parent.mkdir(parents=True, exist_ok=True) - file_path.touch() - - # A 404 Not Found error is raised if the file does not exist. - tree_node = file_study.tree.get_node(file_relpath.parts) # type: ignore - - study_version = file_study.config.version - command = self._create_edit_study_command(tree_node=tree_node, url=url, data=data, study_version=study_version) + context = self.storage_service.variant_study_service.command_factory.command_context + user_path = _get_path_inside_user_folder(str(file_relpath), FolderCreationNotAllowed) + args = {"path": user_path, "resource_type": ResourceType.FILE} + command_data = CreateUserResourceData.model_validate(args) + cmd_1 = CreateUserResource(data=command_data, command_context=context, study_version=version) + assert isinstance(data, bytes) + cmd_2 = UpdateRawFile( + target=url, + b64Data=base64.b64encode(data).decode("utf-8"), + command_context=context, + study_version=version, + ) + commands.extend([cmd_1, cmd_2]) + else: + # A 404 Not Found error is raised if the file does not exist. + tree_node = file_study.tree.get_node(file_relpath.parts) # type: ignore + commands.append(self._create_edit_study_command(tree_node, url, data, version)) if isinstance(study_service, RawStudyService): - res = command.apply(study_data=file_study) - if not is_managed(study): - tree_node.denormalize() - if not res.status: - raise CommandApplicationError(res.message) - - # noinspection SpellCheckingInspection url = "study/antares/lastsave" last_save_node = file_study.tree.get_node(url.split("/")) - cmd = self._create_edit_study_command( - tree_node=last_save_node, url=url, data=int(time.time()), study_version=study_version - ) - cmd.apply(file_study) + cmd = self._create_edit_study_command(last_save_node, url, int(time.time()), version) + commands.append(cmd) - self.storage_service.variant_study_service.invalidate_cache(study) - - elif isinstance(study_service, VariantStudyService): - study_service.append_command( - study_id=file_study.config.study_id, - command=command.to_dto(), - params=RequestParameters(user=DEFAULT_ADMIN_USER), - ) - - else: # pragma: no cover - raise TypeError(repr(type(study_service))) - - return command # for testing purpose + execute_or_add_commands(study, file_study, commands, self.storage_service) + return commands # for testing purpose def apply_commands( self, uuid: str, commands: t.List[CommandDTO], params: RequestParameters @@ -2735,7 +2740,7 @@ def asserts_no_thermal_in_binding_constraints( binding_ids = [bc.id for bc in ref_bcs] raise ReferencedObjectDeletionNotAllowed(cluster_id, binding_ids, object_type="Cluster") - def delete_file_or_folder(self, study_id: str, path: str, current_user: JWTUser) -> None: + def delete_user_file_or_folder(self, study_id: str, path: str, current_user: JWTUser) -> None: """ Deletes a file or a folder of the study. The data must be located inside the 'User' folder. @@ -2747,26 +2752,56 @@ def delete_file_or_folder(self, study_id: str, path: str, current_user: JWTUser) current_user: User that called the endpoint Raises: - FileDeletionNotAllowed: if the path does not comply with the above rules + ResourceDeletionNotAllowed: if the path does not comply with the above rules """ - study = self.get_study(study_id) - assert_permission(current_user, study, StudyPermissionType.WRITE) + cmd_data = RemoveUserResourceData(**{"path": _get_path_inside_user_folder(path, ResourceDeletionNotAllowed)}) + self._alter_user_folder(study_id, cmd_data, RemoveUserResource, ResourceDeletionNotAllowed, current_user) - url = [item for item in path.split("/") if item] - if len(url) < 2 or url[0] != "user": - raise FileDeletionNotAllowed(f"the targeted data isn't inside the 'User' folder: {path}") + def create_user_folder(self, study_id: str, path: str, current_user: JWTUser) -> None: + """ + Creates a folder inside the study. + The data must be located inside the 'User' folder. + Also, it can not be inside the 'expansion' folder. + + Args: + study_id: UUID of the concerned study + path: Path corresponding to the resource to be deleted + current_user: User that called the endpoint + + Raises: + FolderCreationNotAllowed: if the path does not comply with the above rules + """ + args = { + "path": _get_path_inside_user_folder(path, FolderCreationNotAllowed), + "resource_type": ResourceType.FOLDER, + } + command_data = CreateUserResourceData.model_validate(args) + self._alter_user_folder(study_id, command_data, CreateUserResource, FolderCreationNotAllowed, current_user) - study_tree = self.storage_service.raw_study_service.get_raw(study, True).tree - user_node = t.cast(User, study_tree.get_node(["user"])) - if url[1] in [file.filename for file in user_node.registered_files]: - raise FileDeletionNotAllowed(f"you are not allowed to delete this resource : {path}") + def _alter_user_folder( + self, + study_id: str, + command_data: t.Union[CreateUserResourceData, RemoveUserResourceData], + command_class: t.Type[t.Union[CreateUserResource, RemoveUserResource]], + exception_class: t.Type[t.Union[FolderCreationNotAllowed, ResourceDeletionNotAllowed]], + current_user: JWTUser, + ) -> None: + study = self.get_study(study_id) + assert_permission(current_user, study, StudyPermissionType.WRITE) + args = { + "data": command_data, + "study_version": StudyVersion.parse(study.version), + "command_context": self.storage_service.variant_study_service.command_factory.command_context, + } + command = command_class.model_validate(args) + file_study = self.storage_service.get_storage(study).get_raw(study, True) try: - user_node.delete(url[1:]) - except ChildNotFoundError as e: - raise FileDeletionNotAllowed("the given path doesn't exist") from e + execute_or_add_commands(study, file_study, [command], self.storage_service) + except CommandApplicationError as e: + raise exception_class(e.detail) from e # update cache cache_id = f"{CacheConstants.RAW_STUDY}/{study.id}" - updated_tree = study_tree.get() + updated_tree = file_study.tree.get() self.storage_service.get_storage(study).cache.put(cache_id, updated_tree) # type: ignore diff --git a/antarest/study/storage/variantstudy/business/command_reverter.py b/antarest/study/storage/variantstudy/business/command_reverter.py index dead380125..7b585f46b5 100644 --- a/antarest/study/storage/variantstudy/business/command_reverter.py +++ b/antarest/study/storage/variantstudy/business/command_reverter.py @@ -28,6 +28,7 @@ from antarest.study.storage.variantstudy.model.command.create_link import CreateLink from antarest.study.storage.variantstudy.model.command.create_renewables_cluster import CreateRenewablesCluster from antarest.study.storage.variantstudy.model.command.create_st_storage import CreateSTStorage +from antarest.study.storage.variantstudy.model.command.create_user_resource import CreateUserResource from antarest.study.storage.variantstudy.model.command.generate_thermal_cluster_timeseries import ( GenerateThermalClusterTimeSeries, ) @@ -39,6 +40,7 @@ from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink from antarest.study.storage.variantstudy.model.command.remove_renewables_cluster import RemoveRenewablesCluster from antarest.study.storage.variantstudy.model.command.remove_st_storage import RemoveSTStorage +from antarest.study.storage.variantstudy.model.command.remove_user_resource import RemoveUserResource from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix from antarest.study.storage.variantstudy.model.command.update_binding_constraint import UpdateBindingConstraint from antarest.study.storage.variantstudy.model.command.update_comments import UpdateComments @@ -355,6 +357,24 @@ def _revert_generate_thermal_cluster_timeseries( ) -> t.List[ICommand]: raise NotImplementedError("The revert function for GenerateThermalClusterTimeSeries is not available") + @staticmethod + def _revert_create_user_resource( + base_command: CreateUserResource, history: t.List["ICommand"], base: FileStudy + ) -> t.List[ICommand]: + return [ + RemoveUserResource( + data=base_command.data, + command_context=base_command.command_context, + study_version=base_command.study_version, + ) + ] + + @staticmethod + def _revert_remove_user_resource( + base_command: RemoveUserResource, history: t.List["ICommand"], base: FileStudy + ) -> t.List[ICommand]: + raise NotImplementedError("The revert function for RemoveUserResource is not available") + def revert( self, base_command: ICommand, diff --git a/antarest/study/storage/variantstudy/command_factory.py b/antarest/study/storage/variantstudy/command_factory.py index 958ff66690..567567a263 100644 --- a/antarest/study/storage/variantstudy/command_factory.py +++ b/antarest/study/storage/variantstudy/command_factory.py @@ -27,6 +27,7 @@ from antarest.study.storage.variantstudy.model.command.create_link import CreateLink from antarest.study.storage.variantstudy.model.command.create_renewables_cluster import CreateRenewablesCluster from antarest.study.storage.variantstudy.model.command.create_st_storage import CreateSTStorage +from antarest.study.storage.variantstudy.model.command.create_user_resource import CreateUserResource from antarest.study.storage.variantstudy.model.command.generate_thermal_cluster_timeseries import ( GenerateThermalClusterTimeSeries, ) @@ -38,6 +39,7 @@ from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink from antarest.study.storage.variantstudy.model.command.remove_renewables_cluster import RemoveRenewablesCluster from antarest.study.storage.variantstudy.model.command.remove_st_storage import RemoveSTStorage +from antarest.study.storage.variantstudy.model.command.remove_user_resource import RemoveUserResource from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix from antarest.study.storage.variantstudy.model.command.update_binding_constraint import UpdateBindingConstraint from antarest.study.storage.variantstudy.model.command.update_comments import UpdateComments @@ -75,6 +77,8 @@ CommandName.UPDATE_PLAYLIST.value: UpdatePlaylist, CommandName.UPDATE_SCENARIO_BUILDER.value: UpdateScenarioBuilder, CommandName.GENERATE_THERMAL_CLUSTER_TIMESERIES.value: GenerateThermalClusterTimeSeries, + CommandName.CREATE_USER_RESOURCE.value: CreateUserResource, + CommandName.REMOVE_USER_RESOURCE.value: RemoveUserResource, } diff --git a/antarest/study/storage/variantstudy/model/command/common.py b/antarest/study/storage/variantstudy/model/command/common.py index 0e961effa1..c2d604e55b 100644 --- a/antarest/study/storage/variantstudy/model/command/common.py +++ b/antarest/study/storage/variantstudy/model/command/common.py @@ -10,9 +10,12 @@ # # This file is part of the Antares project. +import typing as t from dataclasses import dataclass from enum import Enum +from antarest.study.storage.rawstudy.model.filesystem.root.user.user import User + @dataclass class CommandOutput: @@ -50,3 +53,9 @@ class CommandName(Enum): UPDATE_PLAYLIST = "update_playlist" UPDATE_SCENARIO_BUILDER = "update_scenario_builder" GENERATE_THERMAL_CLUSTER_TIMESERIES = "generate_thermal_cluster_timeseries" + CREATE_USER_RESOURCE = "create_user_resource" + REMOVE_USER_RESOURCE = "remove_user_resource" + + +def is_url_writeable(user_node: User, url: t.List[str]) -> bool: + return url[0] not in [file.filename for file in user_node.registered_files] diff --git a/antarest/study/storage/variantstudy/model/command/create_user_resource.py b/antarest/study/storage/variantstudy/model/command/create_user_resource.py new file mode 100644 index 0000000000..a62fd1f8b0 --- /dev/null +++ b/antarest/study/storage/variantstudy/model/command/create_user_resource.py @@ -0,0 +1,102 @@ +# Copyright (c) 2024, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. +import typing as t +from enum import StrEnum + +from antarest.core.exceptions import ChildNotFoundError +from antarest.core.model import JSON +from antarest.core.serialization import AntaresBaseModel +from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig +from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.rawstudy.model.filesystem.root.user.user import User +from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput, is_url_writeable +from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand +from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener +from antarest.study.storage.variantstudy.model.model import CommandDTO + + +class ResourceType(StrEnum): + FILE = "file" + FOLDER = "folder" + + +class CreateUserResourceData(AntaresBaseModel): + path: str + resource_type: ResourceType + + +class CreateUserResource(ICommand): + """ + Command used to create a resource inside the `user` folder. + """ + + # Overloaded metadata + # =================== + + command_name: CommandName = CommandName.CREATE_USER_RESOURCE + version: int = 1 + + # Command parameters + # ================== + + data: CreateUserResourceData + + def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: + return CommandOutput(status=True, message="ok"), {} + + def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = None) -> CommandOutput: + url = [item for item in self.data.path.split("/") if item] + study_tree = study_data.tree + user_node = t.cast(User, study_tree.get_node(["user"])) + if not is_url_writeable(user_node, url): + return CommandOutput( + status=False, message=f"you are not allowed to create a resource here: {self.data.path}" + ) + try: + study_tree.get_node(["user"] + url) + except ChildNotFoundError: + # Creates the tree recursively to be able to create a resource inside a non-existing folder. + last_value = b"" if self.data.resource_type == ResourceType.FILE else {} + nested_dict: JSON = {url[-1]: last_value} + for key in reversed(url[:-1]): + nested_dict = {key: nested_dict} + study_tree.save({"user": nested_dict}) + else: + return CommandOutput(status=False, message=f"the given resource already exists: {self.data.path}") + return CommandOutput(status=True, message="ok") + + def to_dto(self) -> CommandDTO: + return CommandDTO( + action=self.command_name.value, + args={"data": self.data.model_dump(mode="json")}, + study_version=self.study_version, + ) + + def match_signature(self) -> str: + return str( + self.command_name.value + + MATCH_SIGNATURE_SEPARATOR + + self.data.path + + MATCH_SIGNATURE_SEPARATOR + + self.data.resource_type.value + ) + + def match(self, other: ICommand, equal: bool = False) -> bool: + if not isinstance(other, CreateUserResource): + return False + return self.data.path == other.data.path and self.data.resource_type == other.data.resource_type + + def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: + return [other] + + def get_inner_matrices(self) -> t.List[str]: + return [] diff --git a/antarest/study/storage/variantstudy/model/command/remove_user_resource.py b/antarest/study/storage/variantstudy/model/command/remove_user_resource.py new file mode 100644 index 0000000000..4f24041589 --- /dev/null +++ b/antarest/study/storage/variantstudy/model/command/remove_user_resource.py @@ -0,0 +1,84 @@ +# Copyright (c) 2024, RTE (https://www.rte-france.com) +# +# See AUTHORS.txt +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +# This file is part of the Antares project. + +import typing as t + +from antarest.core.exceptions import ChildNotFoundError +from antarest.core.serialization import AntaresBaseModel +from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig +from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy +from antarest.study.storage.rawstudy.model.filesystem.root.user.user import User +from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput, is_url_writeable +from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand +from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener +from antarest.study.storage.variantstudy.model.model import CommandDTO + + +class RemoveUserResourceData(AntaresBaseModel): + path: str + + +class RemoveUserResource(ICommand): + """ + Command used to delete a resource inside the `user` folder. + """ + + # Overloaded metadata + # =================== + + command_name: CommandName = CommandName.REMOVE_USER_RESOURCE + version: int = 1 + + # Command parameters + # ================== + + data: RemoveUserResourceData + + def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: + return CommandOutput(status=True, message="ok"), {} + + def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = None) -> CommandOutput: + url = [item for item in self.data.path.split("/") if item] + study_tree = study_data.tree + user_node = t.cast(User, study_tree.get_node(["user"])) + if not is_url_writeable(user_node, url): + return CommandOutput( + status=False, message=f"you are not allowed to delete this resource : {self.data.path}" + ) + + try: + user_node.delete(url) + except ChildNotFoundError: + return CommandOutput(status=False, message="the given path doesn't exist") + + return CommandOutput(status=True, message="ok") + + def to_dto(self) -> CommandDTO: + return CommandDTO( + action=self.command_name.value, + args={"data": self.data.model_dump(mode="json")}, + study_version=self.study_version, + ) + + def match_signature(self) -> str: + return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.data.path) + + def match(self, other: ICommand, equal: bool = False) -> bool: + if not isinstance(other, RemoveUserResource): + return False + return self.data.path == other.data.path + + def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: + return [other] + + def get_inner_matrices(self) -> t.List[str]: + return [] diff --git a/antarest/study/web/raw_studies_blueprint.py b/antarest/study/web/raw_studies_blueprint.py index e3b114d6d5..fcab2738fd 100644 --- a/antarest/study/web/raw_studies_blueprint.py +++ b/antarest/study/web/raw_studies_blueprint.py @@ -39,6 +39,7 @@ from antarest.study.service import StudyService from antarest.study.storage.df_download import TableExportFormat, export_file from antarest.study.storage.rawstudy.model.filesystem.matrix.matrix import MatrixFrequency +from antarest.study.storage.variantstudy.model.command.create_user_resource import ResourceType try: import tables # type: ignore @@ -198,7 +199,7 @@ def delete_file( ) -> t.Any: uuid = sanitize_uuid(uuid) logger.info(f"Deleting path {path} inside study {uuid}", extra={"user": current_user.id}) - study_service.delete_file_or_folder(uuid, path, current_user) + study_service.delete_user_file_or_folder(uuid, path, current_user) @bp.get( "/studies/{uuid}/areas/aggregate/mc-ind/{output_id}", @@ -476,7 +477,7 @@ def aggregate_links_raw_data__all( "/studies/{uuid}/raw", status_code=http.HTTPStatus.NO_CONTENT, tags=[APITag.study_raw_data], - summary="Update data by posting formatted data", + summary="Update study by posting formatted data", ) def edit_study( uuid: str, @@ -493,13 +494,10 @@ def edit_study( - `uuid`: The UUID of the study. - `path`: The path to the data to update. Defaults to "/". - - `data`: The formatted data to be posted. Defaults to an empty string. - The data could be a JSON object, or a simple string. + - `data`: The formatted data to be posted. Could be a JSON object, or a string. Defaults to an empty string. + """ - logger.info( - f"Editing data at {path} for study {uuid}", - extra={"user": current_user.id}, - ) + logger.info(f"Editing data at {path} for study {uuid}", extra={"user": current_user.id}) path = sanitize_string(path) params = RequestParameters(user=current_user) study_service.edit_study(uuid, path, data, params) @@ -513,11 +511,12 @@ def edit_study( def replace_study_file( uuid: str, path: str = Param("/", examples=get_path_examples()), # type: ignore - file: bytes = File(...), + file: bytes = File(default=None), create_missing: bool = Query( False, description="Create file or parent directories if missing.", ), # type: ignore + resource_type: ResourceType = ResourceType.FILE, current_user: JWTUser = Depends(auth.get_current_user), ) -> None: """ @@ -528,15 +527,23 @@ def replace_study_file( - `uuid`: The UUID of the study. - `path`: The path to the data to update. Defaults to "/". - `file`: The raw file to be posted (e.g. a CSV file opened in binary mode). - - `create_missing`: Flag to indicate whether to create file or parent directories if missing. + - `create_missing`: Flag to indicate whether to create file and parent directories if missing. + - `resource_type`: When set to "folder" and `create_missing` is True, creates a folder. Else (default value), it's ignored. + """ - logger.info( - f"Uploading new data file at {path} for study {uuid}", - extra={"user": current_user.id}, - ) + if file is not None and resource_type == ResourceType.FOLDER: + raise HTTPException(status_code=422, detail="Argument mismatch: Cannot give a content to create a folder") + if file is None and resource_type == ResourceType.FILE: + raise HTTPException(status_code=422, detail="Argument mismatch: Must give a content to create a file") + path = sanitize_string(path) params = RequestParameters(user=current_user) - study_service.edit_study(uuid, path, file, params, create_missing=create_missing) + if resource_type == ResourceType.FOLDER and create_missing: # type: ignore + logger.info(f"Creating folder {path} for study {uuid}", extra={"user": current_user.id}) + study_service.create_user_folder(uuid, path, current_user) + else: + logger.info(f"Uploading new data file at {path} for study {uuid}", extra={"user": current_user.id}) + study_service.edit_study(uuid, path, file, params, create_missing=create_missing) @bp.get( "/studies/{uuid}/raw/validate", diff --git a/tests/integration/prepare_proxy.py b/tests/integration/prepare_proxy.py index 47e5a33294..b1fa804a1f 100644 --- a/tests/integration/prepare_proxy.py +++ b/tests/integration/prepare_proxy.py @@ -109,9 +109,9 @@ def upload_matrix(self, study_id: str, matrix_path: str, df: pd.DataFrame) -> No # noinspection SpellCheckingInspection res = self.client.put( f"/v1/studies/{study_id}/raw", - params={"path": matrix_path, "create_missing": True}, # type: ignore + params={"path": matrix_path}, # type: ignore headers=self.headers, - files={"file": tsv, "create_missing": "true"}, # type: ignore + files={"file": tsv}, # type: ignore ) res.raise_for_status() diff --git a/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py b/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py index da4426bdb2..58749c0b09 100644 --- a/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py +++ b/tests/integration/raw_studies_blueprint/test_fetch_raw_data.py @@ -21,26 +21,48 @@ import numpy as np import pandas as pd import pytest +from httpx import Response from starlette.testclient import TestClient +from antarest.core.tasks.model import TaskStatus from antarest.core.utils.fastapi_sqlalchemy import db from antarest.study.model import RawStudy, Study from tests.integration.raw_studies_blueprint.assets import ASSETS_DIR from tests.integration.utils import wait_for +def _check_endpoint_response( + study_type: str, res: Response, client: TestClient, study_id: str, expected_msg: str, exception: str +): + # The command will only fail when applied so on raw studies only. + # So we have to differentiate the test based on the study type. + if study_type == "raw": + assert res.status_code == 403 + assert res.json()["exception"] == exception + assert expected_msg in res.json()["description"] + else: + res.raise_for_status() + task_id = client.put(f"/v1/studies/{study_id}/generate").json() + res = client.get(f"/v1/tasks/{task_id}?wait_for_completion=True") + task = res.json() + assert task["status"] == TaskStatus.FAILED.value + assert not task["result"]["success"] + assert expected_msg in task["result"]["message"] + # We have to delete the command to make the variant "clean" again. + res = client.get(f"/v1/studies/{study_id}/commands") + cmd_id = res.json()[-1]["id"] + res = client.delete(f"/v1/studies/{study_id}/commands/{cmd_id}") + res.raise_for_status() + + @pytest.mark.integration_test class TestFetchRawData: """ Check the retrieval of Raw Data from Study: JSON, Text, or File Attachment. """ - def test_get_study( - self, - client: TestClient, - user_access_token: str, - internal_study_id: str, - ): + @pytest.mark.parametrize("study_type", ["raw", "variant"]) + def test_get_study(self, client: TestClient, user_access_token: str, internal_study_id: str, study_type: str): """ Test the `get_study` endpoint for fetching raw data from a study. @@ -54,12 +76,16 @@ def test_get_study( 4. Uses the API to download files from the "user/unknown" directory. 5. Checks for a 415 error when the extension of a file is unknown. """ + + # ============================= + # SET UP + # ============================= + # First copy the user resources in the Study directory with db(): study: RawStudy = db.session.get(Study, internal_study_id) study_dir = pathlib.Path(study.path) client.headers = {"Authorization": f"Bearer {user_access_token}"} - raw_url = f"/v1/studies/{internal_study_id}/raw" shutil.copytree( ASSETS_DIR.joinpath("user"), @@ -67,6 +93,24 @@ def test_get_study( dirs_exist_ok=True, ) + if study_type == "variant": + # Copies the study, to convert it into a managed one. + res = client.post( + f"/v1/studies/{internal_study_id}/copy", + headers={"Authorization": f"Bearer {user_access_token}"}, + params={"dest": "default", "with_outputs": False, "use_task": False}, + ) + assert res.status_code == 201 + parent_id = res.json() + res = client.post(f"/v1/studies/{parent_id}/variants", params={"name": "variant 1"}) + internal_study_id = res.json() + + raw_url = f"/v1/studies/{internal_study_id}/raw" + + # ============================= + # NOMINAL CASES + # ============================= + # Then, use the API to download the files from the "user/folder" directory user_folder_dir = study_dir.joinpath("user/folder") for file_path in user_folder_dir.glob("*.*"): @@ -120,24 +164,40 @@ def test_get_study( # To create a resource, you can use PUT method and the `create_missing` flag. # The expected status code should be 204 No Content. + file_to_create = "user/somewhere/something.txt" res = client.put( raw_url, - params={"path": "user/somewhere/something.txt", "create_missing": True}, + params={"path": file_to_create, "create_missing": True}, files={"file": io.BytesIO(b"Goodbye Cruel World!")}, ) assert res.status_code == 204, res.json() + if study_type == "variant": + # Asserts the generation succeeds + task_id = client.put(f"/v1/studies/{internal_study_id}/generate?from_scratch=True").json() + res = client.get(f"/v1/tasks/{task_id}?wait_for_completion=True") + task = res.json() + assert task["status"] == TaskStatus.COMPLETED.value + assert task["result"]["success"] + # Checks created commands + res = client.get(f"/v1/studies/{internal_study_id}/commands") + commands = res.json() + # First command is created automatically to respect owners, we ignore it. + assert commands[1]["action"] == "create_user_resource" + assert commands[1]["args"] == [{"data": {"path": "somewhere/something.txt", "resource_type": "file"}}] + assert commands[2]["action"] == "update_file" + assert commands[2]["args"] == [{"target": file_to_create, "b64Data": "R29vZGJ5ZSBDcnVlbCBXb3JsZCE="}] # To update a resource, you can use PUT method, with or without the `create_missing` flag. # The expected status code should be 204 No Content. res = client.put( raw_url, - params={"path": "user/somewhere/something.txt", "create_missing": True}, + params={"path": file_to_create, "create_missing": True}, files={"file": io.BytesIO(b"This is the end!")}, ) assert res.status_code == 204, res.json() # You can check that the resource has been created or updated. - res = client.get(raw_url, params={"path": "user/somewhere/something.txt"}) + res = client.get(raw_url, params={"path": file_to_create}) assert res.status_code == 200, res.json() assert res.content == b"This is the end!" @@ -161,7 +221,7 @@ def test_get_study( written_data = res.json()["data"] if not content.decode("utf-8"): # For some reason the `GET` returns the default matrix when it's empty - expected = 8760 * [[0]] + expected = 8760 * [[0]] if study_type == "raw" else [[]] else: df = pd.read_csv(io.BytesIO(content), delimiter=delimiter, header=None).replace(",", ".", regex=True) expected = df.to_numpy(dtype=np.float64).tolist() @@ -196,7 +256,6 @@ def test_get_study( assert actual == {"index": ANY, "columns": ANY, "data": ANY} # If we ask for a matrix, we should have a CSV content if formatted is False - rel_path = "/input/links/de/fr" res = client.get(raw_url, params={"path": rel_path, "formatted": False}) assert res.status_code == 200, res.json() actual = res.text @@ -228,9 +287,10 @@ def test_get_study( assert res.json() == ["DE", "ES", "FR", "IT"] # asserts that the GET /raw endpoint is able to read matrix containing NaN values - res = client.get(raw_url, params={"path": "output/20201014-1427eco/economy/mc-all/areas/de/id-monthly"}) - assert res.status_code == 200 - assert np.isnan(res.json()["data"][0]).any() + if study_type == "raw": + res = client.get(raw_url, params={"path": "output/20201014-1427eco/economy/mc-all/areas/de/id-monthly"}) + assert res.status_code == 200 + assert np.isnan(res.json()["data"][0]).any() # Iterate over all possible combinations of path and depth for path, depth in itertools.product([None, "", "/"], [0, 1, 2]): @@ -238,11 +298,27 @@ def test_get_study( assert res.status_code == 200, f"Error for path={path} and depth={depth}" -def test_delete_raw(client: TestClient, user_access_token: str, internal_study_id: str) -> None: +@pytest.mark.parametrize("study_type", ["raw", "variant"]) +def test_delete_raw(client: TestClient, user_access_token: str, internal_study_id: str, study_type: str) -> None: + # ============================= + # SET UP + # ============================= client.headers = {"Authorization": f"Bearer {user_access_token}"} + if study_type == "variant": + # Copies the study, to convert it into a managed one. + res = client.post( + f"/v1/studies/{internal_study_id}/copy", + headers={"Authorization": f"Bearer {user_access_token}"}, + params={"dest": "default", "with_outputs": False, "use_task": False}, + ) + assert res.status_code == 201 + parent_id = res.json() + res = client.post(f"/v1/studies/{parent_id}/variants", params={"name": "variant 1"}) + internal_study_id = res.json() + # ============================= - # SET UP + NOMINAL CASES + # NOMINAL CASES # ============================= content = io.BytesIO(b"This is the end!") @@ -284,21 +360,96 @@ def test_delete_raw(client: TestClient, user_access_token: str, internal_study_i # try to delete expansion folder res = client.delete(f"/v1/studies/{internal_study_id}/raw?path=/user/expansion") - assert res.status_code == 403 - assert res.json()["exception"] == "FileDeletionNotAllowed" - assert "you are not allowed to delete this resource" in res.json()["description"] + expected_msg = "you are not allowed to delete this resource" + _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "ResourceDeletionNotAllowed") # try to delete a file which isn't inside the 'User' folder res = client.delete(f"/v1/studies/{internal_study_id}/raw?path=/input/thermal") + expected_msg = "the given path isn't inside the 'User' folder" assert res.status_code == 403 - assert res.json()["exception"] == "FileDeletionNotAllowed" - assert "the targeted data isn't inside the 'User' folder" in res.json()["description"] + assert res.json()["exception"] == "ResourceDeletionNotAllowed" + assert expected_msg in res.json()["description"] # With a path that doesn't exist res = client.delete(f"/v1/studies/{internal_study_id}/raw?path=user/fake_folder/fake_file.txt") + expected_msg = "the given path doesn't exist" + _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "ResourceDeletionNotAllowed") + + +@pytest.mark.parametrize("study_type", ["raw", "variant"]) +def test_create_folder(client: TestClient, user_access_token: str, internal_study_id: str, study_type: str) -> None: + client.headers = {"Authorization": f"Bearer {user_access_token}"} + + if study_type == "variant": + # Copies the study, to convert it into a managed one. + res = client.post( + f"/v1/studies/{internal_study_id}/copy", + headers={"Authorization": f"Bearer {user_access_token}"}, + params={"dest": "default", "with_outputs": False, "use_task": False}, + ) + assert res.status_code == 201 + parent_id = res.json() + res = client.post(f"/v1/studies/{parent_id}/variants", params={"name": "variant 1"}) + internal_study_id = res.json() + + raw_url = f"/v1/studies/{internal_study_id}/raw" + + # ============================= + # NOMINAL CASES + # ============================= + additional_params = {"resource_type": "folder", "create_missing": True} + + res = client.put(raw_url, params={"path": "user/folder_1", **additional_params}) + assert res.status_code == 204 + + # same case with different writing should succeed + res = client.put(raw_url, params={"path": "/user/folder_2", **additional_params}) + assert res.status_code == 204 + + # create a folder within a non-existing one + res = client.put(raw_url, params={"path": "/user/folder_x/folder_y", **additional_params}) + assert res.status_code == 204 + + # checks debug view to see that folders were created + res = client.get(f"/v1/studies/{internal_study_id}/raw?path=&depth=-1") + assert res.status_code == 200 + tree = res.json()["user"] + assert list(tree.keys()) == ["expansion", "folder_1", "folder_2", "folder_x"] + assert tree["folder_x"] == {"folder_y": {}} + + # ============================= + # ERRORS + # ============================= + + # we can't create a file without specifying a content + res = client.put(raw_url, params={"path": "fake_path"}) + assert res.status_code == 422 + assert res.json()["description"] == "Argument mismatch: Must give a content to create a file" + + # we can't create a folder and specify a content at the same time + res = client.put(raw_url, params={"path": "", "resource_type": "folder"}, files={"file": b"content"}) + assert res.status_code == 422 + assert res.json()["description"] == "Argument mismatch: Cannot give a content to create a folder" + + # try to create a folder outside `user` folder + wrong_folder = "input/wrong_folder" + expected_msg = f"the given path isn't inside the 'User' folder: {wrong_folder}" + res = client.put(raw_url, params={"path": wrong_folder, **additional_params}) assert res.status_code == 403 - assert res.json()["exception"] == "FileDeletionNotAllowed" - assert "the given path doesn't exist" in res.json()["description"] + assert res.json()["exception"] == "FolderCreationNotAllowed" + assert expected_msg in res.json()["description"] + + # try to create a folder inside the 'expansion` folder + expansion_folder = "user/expansion/wrong_folder" + expected_msg = "you are not allowed to create a resource here" + res = client.put(raw_url, params={"path": expansion_folder, **additional_params}) + _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "FolderCreationNotAllowed") + + # try to create an already existing folder + existing_folder = "user/folder_1" + expected_msg = "the given resource already exists" + res = client.put(raw_url, params={"path": existing_folder, **additional_params}) + _check_endpoint_response(study_type, res, client, internal_study_id, expected_msg, "FolderCreationNotAllowed") def test_retrieve_from_archive(client: TestClient, user_access_token: str) -> None: diff --git a/tests/storage/test_service.py b/tests/storage/test_service.py index 4d7bc33430..8359bd063f 100644 --- a/tests/storage/test_service.py +++ b/tests/storage/test_service.py @@ -1302,19 +1302,14 @@ def test_edit_study_with_command() -> None: study_service.get_raw.return_value = file_study service.storage_service.get_storage = Mock(return_value=study_service) - service._edit_study_using_command(study=Mock(), url="", data=[]) - command.apply.assert_called_with(file_study) + service._edit_study_using_command(study=Mock(spec=RawStudy), url="", data=[]) + command.apply.assert_called_with(file_study, None) study_service = Mock(spec=VariantStudyService) study_service.get_raw.return_value = file_study service.storage_service.get_storage = Mock(return_value=study_service) service._edit_study_using_command(study=Mock(), url="", data=[]) - - study_service.append_command.assert_called_once_with( - study_id=study_id, - command=command.to_dto(), - params=RequestParameters(user=DEFAULT_ADMIN_USER), - ) + service.storage_service.variant_study_service.append_commands.assert_called_once() @pytest.mark.unit_test diff --git a/tests/study/storage/variantstudy/test_snapshot_generator.py b/tests/study/storage/variantstudy/test_snapshot_generator.py index 62d173a57c..70a05c391a 100644 --- a/tests/study/storage/variantstudy/test_snapshot_generator.py +++ b/tests/study/storage/variantstudy/test_snapshot_generator.py @@ -996,52 +996,6 @@ def test_generate__nominal_case( # Check: the simulation outputs are not copied. assert not (snapshot_dir / "output").exists() - @with_db_context - def test_generate__with_user_dir( - self, - variant_study: VariantStudy, - variant_study_service: VariantStudyService, - jwt_user: JWTUser, - ) -> None: - """ - Test the generation of a variant study containing a user directory. - We expect that the user directory is correctly preserved. - """ - generator = SnapshotGenerator( - cache=variant_study_service.cache, - raw_study_service=variant_study_service.raw_study_service, - command_factory=variant_study_service.command_factory, - study_factory=variant_study_service.study_factory, - patch_service=variant_study_service.patch_service, - repository=variant_study_service.repository, - ) - - # Generate the snapshot once - generator.generate_snapshot( - variant_study.id, - jwt_user, - denormalize=False, - from_scratch=False, - ) - - # Add a user directory to the variant study. - user_dir = Path(variant_study.snapshot_dir) / "user" - user_dir.mkdir(parents=True, exist_ok=True) - user_dir.joinpath("user_file.txt").touch() - - # Generate the snapshot again - generator.generate_snapshot( - variant_study.id, - jwt_user, - denormalize=False, - from_scratch=False, - ) - - # Check that the user directory is correctly preserved. - user_dir = Path(variant_study.snapshot_dir) / "user" - assert user_dir.is_dir() - assert user_dir.joinpath("user_file.txt").exists() - @with_db_context def test_generate__with_denormalize_true( self, diff --git a/tests/variantstudy/test_command_factory.py b/tests/variantstudy/test_command_factory.py index 79dde561e7..e031d07e1e 100644 --- a/tests/variantstudy/test_command_factory.py +++ b/tests/variantstudy/test_command_factory.py @@ -17,7 +17,6 @@ from unittest.mock import Mock import pytest -from antares.study.version import StudyVersion from antarest.matrixstore.service import MatrixService from antarest.study.model import STUDY_VERSION_8_8 @@ -399,6 +398,21 @@ CommandDTO( action=CommandName.GENERATE_THERMAL_CLUSTER_TIMESERIES.value, args=[{}], study_version=STUDY_VERSION_8_8 ), + CommandDTO( + action=CommandName.CREATE_USER_RESOURCE.value, + args=[{"data": {"path": "folder_1", "resource_type": "folder"}}], + study_version=STUDY_VERSION_8_8, + ), + CommandDTO( + action=CommandName.REMOVE_USER_RESOURCE.value, + args=[{"data": {"path": "folder_1"}}], + study_version=STUDY_VERSION_8_8, + ), + CommandDTO( + action=CommandName.REMOVE_USER_RESOURCE.value, + args=[{"data": {"path": "file_1.txt"}}], + study_version=STUDY_VERSION_8_8, + ), ] From 1d4f40eb08ac033f2bcbc76a4769751031629274 Mon Sep 17 00:00:00 2001 From: Sylvain Leclerc Date: Tue, 3 Dec 2024 10:02:40 +0100 Subject: [PATCH 10/86] fix(ci): use fixed versions for gh actions for build stability (#2255) --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0e41bf08b1..c0f87cc216 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,7 +18,7 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements-dev.txt - - uses: isort/isort-action@master + - uses: isort/isort-action@v1.1.1 with: sort-paths: antarest, tests requirementsFiles: "requirements-dev.txt" @@ -156,7 +156,7 @@ jobs: with: name: python-code-coverage-report - name: SonarCloud Scan - uses: sonarsource/sonarcloud-github-action@master + uses: sonarsource/sonarcloud-github-action@v3.1.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} \ No newline at end of file From fe4bf0a6a23ec6f7adb30ba3e94f9ec27317f35e Mon Sep 17 00:00:00 2001 From: Theo Pascoli <48944759+TheoPascoli@users.noreply.github.com> Date: Tue, 3 Dec 2024 10:06:25 +0100 Subject: [PATCH 11/86] fix(links): fix a bug that occurred when updating links via table-mode (#2256) --- antarest/study/business/link_management.py | 127 +++------- antarest/study/business/model/link_model.py | 119 ++++++++- .../study/business/table_mode_management.py | 13 +- .../rawstudy/model/filesystem/config/links.py | 231 ------------------ .../study_data_blueprint/test_link.py | 58 ++++- .../study_data_blueprint/test_table_mode.py | 159 ++++++------ .../storage/business/test_arealink_manager.py | 2 +- 7 files changed, 297 insertions(+), 412 deletions(-) delete mode 100644 antarest/study/storage/rawstudy/model/filesystem/config/links.py diff --git a/antarest/study/business/link_management.py b/antarest/study/business/link_management.py index 777ce3cd9e..7c6a971fde 100644 --- a/antarest/study/business/link_management.py +++ b/antarest/study/business/link_management.py @@ -11,34 +11,21 @@ # This file is part of the Antares project. import typing as t -from typing import Any, Dict +from typing import Any from antares.study.version import StudyVersion -from antarest.core.exceptions import ConfigFileNotFound, LinkNotFound, LinkValidationError +from antarest.core.exceptions import LinkNotFound from antarest.core.model import JSON -from antarest.study.business.all_optional_meta import all_optional_model, camel_case_model from antarest.study.business.model.link_model import LinkBaseDTO, LinkDTO, LinkInternal from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import RawStudy, Study -from antarest.study.storage.rawstudy.model.filesystem.config.links import LinkProperties from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.model.command.create_link import CreateLink from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink -from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command.update_link import UpdateLink -_ALL_LINKS_PATH = "input/links" - - -@all_optional_model -@camel_case_model -class LinkOutput(LinkProperties): - """ - DTO object use to get the link information. - """ - class LinkManager: def __init__(self, storage_service: StudyStorageService) -> None: @@ -61,6 +48,17 @@ def get_all_links(self, study: Study) -> t.List[LinkDTO]: return result + def get_link(self, study: RawStudy, link: LinkInternal) -> LinkInternal: + file_study = self.storage_service.get_storage(study).get_raw(study) + + link_properties = self._get_link_if_exists(file_study, link) + + link_properties.update({"area1": link.area1, "area2": link.area2}) + + updated_link = LinkInternal.model_validate(link_properties) + + return updated_link + def create_link(self, study: Study, link_creation_dto: LinkDTO) -> LinkDTO: link = link_creation_dto.to_internal(StudyVersion.parse(study.version)) @@ -80,16 +78,16 @@ def create_link(self, study: Study, link_creation_dto: LinkDTO) -> LinkDTO: return link_creation_dto def update_link(self, study: RawStudy, area_from: str, area_to: str, link_update_dto: LinkBaseDTO) -> LinkDTO: - link_dto = LinkDTO(area1=area_from, area2=area_to, **link_update_dto.model_dump()) + link_dto = LinkDTO(area1=area_from, area2=area_to, **link_update_dto.model_dump(exclude_unset=True)) link = link_dto.to_internal(StudyVersion.parse(study.version)) file_study = self.storage_service.get_storage(study).get_raw(study) - self.get_link_if_exists(file_study, link) + self._get_link_if_exists(file_study, link) command = UpdateLink( - area1=area_from, - area2=area_to, + area1=link.area1, + area2=link.area2, parameters=link.model_dump( include=link_update_dto.model_fields_set, exclude={"area1", "area2"}, exclude_none=True ), @@ -99,25 +97,21 @@ def update_link(self, study: RawStudy, area_from: str, area_to: str, link_update execute_or_add_commands(study, file_study, [command], self.storage_service) - updated_link = self.get_internal_link(study, link) + updated_link = self.get_link(study, link) return updated_link.to_dto() - def get_link_if_exists(self, file_study: FileStudy, link: LinkInternal) -> dict[str, Any]: - try: - return file_study.tree.get(["input", "links", link.area1, "properties", link.area2]) - except KeyError: - raise LinkNotFound(f"The link {link.area1} -> {link.area2} is not present in the study") - - def get_internal_link(self, study: RawStudy, link: LinkInternal) -> LinkInternal: - file_study = self.storage_service.get_storage(study).get_raw(study) - - link_properties = self.get_link_if_exists(file_study, link) - - link_properties.update({"area1": link.area1, "area2": link.area2}) - updated_link = LinkInternal.model_validate(link_properties) + def update_links( + self, + study: RawStudy, + update_links_by_ids: t.Mapping[t.Tuple[str, str], LinkBaseDTO], + ) -> t.Mapping[t.Tuple[str, str], LinkBaseDTO]: + new_links_by_ids = {} + for (area1, area2), update_link_dto in update_links_by_ids.items(): + updated_link = self.update_link(study, area1, area2, update_link_dto) + new_links_by_ids[(area1, area2)] = updated_link - return updated_link + return new_links_by_ids def delete_link(self, study: RawStudy, area1_id: str, area2_id: str) -> None: file_study = self.storage_service.get_storage(study).get_raw(study) @@ -129,69 +123,12 @@ def delete_link(self, study: RawStudy, area1_id: str, area2_id: str) -> None: ) execute_or_add_commands(study, file_study, [command], self.storage_service) - def get_all_links_props(self, study: RawStudy) -> t.Mapping[t.Tuple[str, str], LinkOutput]: - """ - Retrieves all links properties from the study. - - Args: - study: The raw study object. - Returns: - A mapping of link IDS `(area1_id, area2_id)` to link properties. - Raises: - ConfigFileNotFound: if a configuration file is not found. - """ - file_study = self.storage_service.get_storage(study).get_raw(study) - - # Get the link information from the `input/links/{area1}/properties.ini` file. - path = _ALL_LINKS_PATH + def _get_link_if_exists(self, file_study: FileStudy, link: LinkInternal) -> dict[str, Any]: try: - links_cfg = file_study.tree.get(path.split("/"), depth=5) + return file_study.tree.get(["input", "links", link.area1, "properties", link.area2]) except KeyError: - raise ConfigFileNotFound(path) from None - - # areas_cfg contains a dictionary where the keys are the area IDs, - # and the values are objects that can be converted to `LinkFolder`. - links_by_ids = {} - for area1_id, entries in links_cfg.items(): - property_map = entries.get("properties") or {} - for area2_id, properties_cfg in property_map.items(): - area1_id, area2_id = sorted([area1_id, area2_id]) - properties = LinkProperties(**properties_cfg) - links_by_ids[(area1_id, area2_id)] = LinkOutput(**properties.model_dump(mode="json", by_alias=False)) - - return links_by_ids - - def update_links_props( - self, - study: RawStudy, - update_links_by_ids: t.Mapping[t.Tuple[str, str], LinkOutput], - ) -> t.Mapping[t.Tuple[str, str], LinkOutput]: - old_links_by_ids = self.get_all_links_props(study) - new_links_by_ids = {} - file_study = self.storage_service.get_storage(study).get_raw(study) - commands = [] - for (area1, area2), update_link_dto in update_links_by_ids.items(): - # Update the link properties. - old_link_dto = old_links_by_ids[(area1, area2)] - new_link_dto = old_link_dto.copy( - update=update_link_dto.model_dump(mode="json", by_alias=False, exclude_none=True) - ) - new_links_by_ids[(area1, area2)] = new_link_dto - - # Convert the DTO to a configuration object and update the configuration file. - properties = LinkProperties(**new_link_dto.model_dump(by_alias=False)) - path = f"{_ALL_LINKS_PATH}/{area1}/properties/{area2}" - cmd = UpdateConfig( - target=path, - data=properties.to_config(), - command_context=self.storage_service.variant_study_service.command_factory.command_context, - study_version=file_study.config.version, - ) - commands.append(cmd) - - execute_or_add_commands(study, file_study, commands, self.storage_service) - return new_links_by_ids + raise LinkNotFound(f"The link {link.area1} -> {link.area2} is not present in the study") @staticmethod def get_table_schema() -> JSON: - return LinkOutput.schema() + return LinkBaseDTO.model_json_schema() diff --git a/antarest/study/business/model/link_model.py b/antarest/study/business/model/link_model.py index 977ce69ee3..07398dc88d 100644 --- a/antarest/study/business/model/link_model.py +++ b/antarest/study/business/model/link_model.py @@ -12,19 +12,122 @@ import typing as t from antares.study.version import StudyVersion -from pydantic import ConfigDict, Field, model_validator +from pydantic import BeforeValidator, ConfigDict, Field, PlainSerializer, model_validator from antarest.core.exceptions import LinkValidationError from antarest.core.serialization import AntaresBaseModel from antarest.core.utils.string import to_camel_case, to_kebab_case +from antarest.study.business.enum_ignore_case import EnumIgnoreCase from antarest.study.model import STUDY_VERSION_8_2 -from antarest.study.storage.rawstudy.model.filesystem.config.links import ( - AssetType, - FilterOption, - LinkStyle, - TransmissionCapacity, - comma_separated_enum_list, -) + + +class AssetType(EnumIgnoreCase): + """ + Enum representing the type of asset for a link between two areas. + + Attributes: + AC: Represents an Alternating Current link. This is the most common type of electricity transmission. + DC: Represents a Direct Current link. This is typically used for long-distance transmission. + GAZ: Represents a gas link. This is used when the link is related to gas transmission. + VIRT: Represents a virtual link. This is used when the link doesn't physically exist + but is used for modeling purposes. + OTHER: Represents any other type of link that doesn't fall into the above categories. + """ + + AC = "ac" + DC = "dc" + GAZ = "gaz" + VIRT = "virt" + OTHER = "other" + + +class TransmissionCapacity(EnumIgnoreCase): + """ + Enum representing the transmission capacity of a link. + + Attributes: + INFINITE: Represents a link with infinite transmission capacity. + This means there are no limits on the amount of electricity that can be transmitted. + IGNORE: Represents a link where the transmission capacity is ignored. + This means the capacity is not considered during simulations. + ENABLED: Represents a link with a specific transmission capacity. + This means the capacity is considered in the model and has a certain limit. + """ + + INFINITE = "infinite" + IGNORE = "ignore" + ENABLED = "enabled" + + +class LinkStyle(EnumIgnoreCase): + """ + Enum representing the style of a link in a network visualization. + + Attributes: + DOT: Represents a dotted line style. + PLAIN: Represents a solid line style. + DASH: Represents a dashed line style. + DOT_DASH: Represents a line style with alternating dots and dashes. + """ + + DOT = "dot" + PLAIN = "plain" + DASH = "dash" + DOT_DASH = "dotdash" + OTHER = "other" + + +class FilterOption(EnumIgnoreCase): + """ + Enum representing the time filter options for data visualization or analysis in Antares Web. + + Attributes: + HOURLY: Represents filtering data by the hour. + DAILY: Represents filtering data by the day. + WEEKLY: Represents filtering data by the week. + MONTHLY: Represents filtering data by the month. + ANNUAL: Represents filtering data by the year. + """ + + HOURLY = "hourly" + DAILY = "daily" + WEEKLY = "weekly" + MONTHLY = "monthly" + ANNUAL = "annual" + + +def validate_filters( + filter_value: t.Union[t.List[FilterOption], str], enum_cls: t.Type[FilterOption] +) -> t.List[FilterOption]: + if isinstance(filter_value, str): + if not filter_value.strip(): + return [] + + filter_accepted_values = [e for e in enum_cls] + + options = filter_value.replace(" ", "").split(",") + + invalid_options = [opt for opt in options if opt not in filter_accepted_values] + if invalid_options: + raise LinkValidationError( + f"Invalid value(s) in filters: {', '.join(invalid_options)}. " + f"Allowed values are: {', '.join(filter_accepted_values)}." + ) + options_enum: t.List[FilterOption] = list(dict.fromkeys(enum_cls(opt) for opt in options)) + return options_enum + + return filter_value + + +def join_with_comma(values: t.List[FilterOption]) -> str: + return ", ".join(value.name.lower() for value in values) + + +comma_separated_enum_list = t.Annotated[ + t.List[FilterOption], + BeforeValidator(lambda x: validate_filters(x, FilterOption)), + PlainSerializer(lambda x: join_with_comma(x)), +] DEFAULT_COLOR = 112 FILTER_VALUES: t.List[FilterOption] = [ diff --git a/antarest/study/business/table_mode_management.py b/antarest/study/business/table_mode_management.py index 5905c78faf..aba99c9b57 100644 --- a/antarest/study/business/table_mode_management.py +++ b/antarest/study/business/table_mode_management.py @@ -25,7 +25,8 @@ from antarest.study.business.areas.thermal_management import ThermalClusterInput, ThermalManager from antarest.study.business.binding_constraint_management import BindingConstraintManager, ConstraintInput from antarest.study.business.enum_ignore_case import EnumIgnoreCase -from antarest.study.business.link_management import LinkManager, LinkOutput +from antarest.study.business.link_management import LinkManager +from antarest.study.business.model.link_model import LinkBaseDTO from antarest.study.model import STUDY_VERSION_8_2, RawStudy _TableIndex = str # row name @@ -98,15 +99,15 @@ def _get_table_data_unsafe(self, study: RawStudy, table_type: TableModeType) -> areas_map = self._area_manager.get_all_area_props(study) data = {area_id: area.model_dump(mode="json", by_alias=True) for area_id, area in areas_map.items()} elif table_type == TableModeType.LINK: - links_map = self._link_manager.get_all_links_props(study) + links_map = self._link_manager.get_all_links(study) excludes = ( set() if StudyVersion.parse(study.version) >= STUDY_VERSION_8_2 else {"filter_synthesis", "filter_year_by_year"} ) data = { - f"{area1_id} / {area2_id}": link.model_dump(mode="json", by_alias=True, exclude=excludes) - for (area1_id, area2_id), link in links_map.items() + f"{link.area1} / {link.area2}": link.model_dump(mode="json", by_alias=True, exclude=excludes) + for link in links_map } elif table_type == TableModeType.THERMAL: thermals_by_areas = self._thermal_manager.get_all_thermals_props(study) @@ -199,8 +200,8 @@ def update_table_data( data = {area_id: area.model_dump(by_alias=True, exclude_none=True) for area_id, area in areas_map.items()} return data elif table_type == TableModeType.LINK: - links_map = {tuple(key.split(" / ")): LinkOutput(**values) for key, values in data.items()} - updated_map = self._link_manager.update_links_props(study, links_map) # type: ignore + links_map = {tuple(key.split(" / ")): LinkBaseDTO(**values) for key, values in data.items()} + updated_map = self._link_manager.update_links(study, links_map) # type: ignore excludes = ( set() if StudyVersion.parse(study.version) >= STUDY_VERSION_8_2 diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/links.py b/antarest/study/storage/rawstudy/model/filesystem/config/links.py deleted file mode 100644 index 9bfe12cd11..0000000000 --- a/antarest/study/storage/rawstudy/model/filesystem/config/links.py +++ /dev/null @@ -1,231 +0,0 @@ -# Copyright (c) 2024, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -""" -Object model used to read and update link configuration. -""" - -import typing as t - -from pydantic import BeforeValidator, Field, PlainSerializer, field_validator, model_validator - -from antarest.core.exceptions import LinkValidationError -from antarest.study.business.enum_ignore_case import EnumIgnoreCase -from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import ( - validate_color_rgb, - validate_colors, - validate_filtering, -) -from antarest.study.storage.rawstudy.model.filesystem.config.ini_properties import IniProperties - - -# noinspection SpellCheckingInspection -class AssetType(EnumIgnoreCase): - """ - Enum representing the type of asset for a link between two areas. - - Attributes: - AC: Represents an Alternating Current link. This is the most common type of electricity transmission. - DC: Represents a Direct Current link. This is typically used for long-distance transmission. - GAZ: Represents a gas link. This is used when the link is related to gas transmission. - VIRT: Represents a virtual link. This is used when the link doesn't physically exist - but is used for modeling purposes. - OTHER: Represents any other type of link that doesn't fall into the above categories. - """ - - AC = "ac" - DC = "dc" - GAZ = "gaz" - VIRT = "virt" - OTHER = "other" - - -class TransmissionCapacity(EnumIgnoreCase): - """ - Enum representing the transmission capacity of a link. - - Attributes: - INFINITE: Represents a link with infinite transmission capacity. - This means there are no limits on the amount of electricity that can be transmitted. - IGNORE: Represents a link where the transmission capacity is ignored. - This means the capacity is not considered during simulations. - ENABLED: Represents a link with a specific transmission capacity. - This means the capacity is considered in the model and has a certain limit. - """ - - INFINITE = "infinite" - IGNORE = "ignore" - ENABLED = "enabled" - - -class LinkStyle(EnumIgnoreCase): - """ - Enum representing the style of a link in a network visualization. - - Attributes: - DOT: Represents a dotted line style. - PLAIN: Represents a solid line style. - DASH: Represents a dashed line style. - DOT_DASH: Represents a line style with alternating dots and dashes. - """ - - DOT = "dot" - PLAIN = "plain" - DASH = "dash" - DOT_DASH = "dotdash" - OTHER = "other" - - -class FilterOption(EnumIgnoreCase): - """ - Enum representing the time filter options for data visualization or analysis in Antares Web. - - Attributes: - HOURLY: Represents filtering data by the hour. - DAILY: Represents filtering data by the day. - WEEKLY: Represents filtering data by the week. - MONTHLY: Represents filtering data by the month. - ANNUAL: Represents filtering data by the year. - """ - - HOURLY = "hourly" - DAILY = "daily" - WEEKLY = "weekly" - MONTHLY = "monthly" - ANNUAL = "annual" - - -def validate_filters( - filter_value: t.Union[t.List[FilterOption], str], enum_cls: t.Type[FilterOption] -) -> t.List[FilterOption]: - if isinstance(filter_value, str): - if not filter_value.strip(): - return [] - - filter_accepted_values = [e for e in enum_cls] - - options = filter_value.replace(" ", "").split(",") - - invalid_options = [opt for opt in options if opt not in filter_accepted_values] - if invalid_options: - raise LinkValidationError( - f"Invalid value(s) in filters: {', '.join(invalid_options)}. " - f"Allowed values are: {', '.join(filter_accepted_values)}." - ) - - return [enum_cls(opt) for opt in options] - - return filter_value - - -def join_with_comma(values: t.List[FilterOption]) -> str: - return ", ".join(value.name.lower() for value in values) - - -comma_separated_enum_list = t.Annotated[ - t.List[FilterOption], - BeforeValidator(lambda x: validate_filters(x, FilterOption)), - PlainSerializer(lambda x: join_with_comma(x)), -] - - -class LinkProperties(IniProperties): - """ - Configuration read from a section in the `input/links//properties.ini` file. - - Usage: - - >>> from antarest.study.storage.rawstudy.model.filesystem.config.links import LinkProperties - >>> from pprint import pprint - - Create and validate a new `LinkProperties` object from a dictionary read from a configuration file. - - >>> obj = { - ... "hurdles-cost": "false", - ... "loop-flow": "false", - ... "use-phase-shifter": "false", - ... "transmission-capacities": "infinite", - ... "asset-type": "ac", - ... "link-style": "plain", - ... "link-width": "1", - ... "colorr": "80", - ... "colorg": "192", - ... "colorb": "255", - ... "comments": "This is a link", - ... "display-comments": "true", - ... "filter-synthesis": "hourly, daily, weekly, monthly, annual", - ... "filter-year-by-year": "hourly, daily, weekly, monthly, annual", - ... } - - >>> opt = LinkProperties(**obj) - - >>> pprint(opt.model_dump(by_alias=True), width=80) - {'asset-type': , - 'colorRgb': '#50C0FF', - 'comments': 'This is a link', - 'display-comments': True, - 'filter-synthesis': 'hourly, daily, weekly, monthly, annual', - 'filter-year-by-year': 'hourly, daily, weekly, monthly, annual', - 'hurdles-cost': False, - 'link-style': 'plain', - 'link-width': 1, - 'loop-flow': False, - 'transmission-capacities': , - 'use-phase-shifter': False} - - >>> pprint(opt.to_config(), width=80) - {'asset-type': 'ac', - 'colorb': 255, - 'colorg': 192, - 'colorr': 80, - 'comments': 'This is a link', - 'display-comments': True, - 'filter-synthesis': 'hourly, daily, weekly, monthly, annual', - 'filter-year-by-year': 'hourly, daily, weekly, monthly, annual', - 'hurdles-cost': False, - 'link-style': 'plain', - 'link-width': 1, - 'loop-flow': False, - 'transmission-capacities': 'infinite', - 'use-phase-shifter': False} - """ - - hurdles_cost: bool = Field(default=False, alias="hurdles-cost") - loop_flow: bool = Field(default=False, alias="loop-flow") - use_phase_shifter: bool = Field(default=False, alias="use-phase-shifter") - transmission_capacities: TransmissionCapacity = Field( - default=TransmissionCapacity.ENABLED, alias="transmission-capacities" - ) - asset_type: AssetType = Field(default=AssetType.AC, alias="asset-type") - link_style: str = Field(default="plain", alias="link-style") - link_width: int = Field(default=1, alias="link-width") - comments: str = Field(default="", alias="comments") # unknown field?! - display_comments: bool = Field(default=True, alias="display-comments") - filter_synthesis: str = Field(default="", alias="filter-synthesis") - filter_year_by_year: str = Field(default="", alias="filter-year-by-year") - color_rgb: str = Field( - "#707070", - alias="colorRgb", - description="color of the area in the map", - ) - - @field_validator("filter_synthesis", "filter_year_by_year", mode="before") - def _validate_filtering(cls, v: t.Any) -> str: - return validate_filtering(v) - - @field_validator("color_rgb", mode="before") - def _validate_color_rgb(cls, v: t.Any) -> str: - return validate_color_rgb(v) - - @model_validator(mode="before") - def _validate_colors(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: - return validate_colors(values) diff --git a/tests/integration/study_data_blueprint/test_link.py b/tests/integration/study_data_blueprint/test_link.py index 635aedb830..8cf04d58f8 100644 --- a/tests/integration/study_data_blueprint/test_link.py +++ b/tests/integration/study_data_blueprint/test_link.py @@ -9,12 +9,10 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. -from sys import stderr - import pytest from starlette.testclient import TestClient -from antarest.study.storage.rawstudy.model.filesystem.config.links import TransmissionCapacity +from antarest.study.business.model.link_model import TransmissionCapacity from tests.integration.prepare_proxy import PreparerProxy @@ -70,6 +68,32 @@ def test_link_update(self, client: TestClient, user_access_token: str, study_typ } assert expected == res.json() + # Test update link area not ordered + + res = client.put( + f"/v1/studies/{study_id}/links/{area2_id}/{area1_id}", + json={"hurdlesCost": False}, + ) + assert res.status_code == 200 + expected = { + "area1": "area 1", + "area2": "area 2", + "assetType": "ac", + "colorb": 112, + "colorg": 112, + "colorr": 150, + "displayComments": True, + "filterSynthesis": "hourly, daily, weekly, monthly, annual", + "filterYearByYear": "hourly, daily, weekly, monthly, annual", + "hurdlesCost": False, + "linkStyle": "plain", + "linkWidth": 1.0, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": False, + } + assert expected == res.json() + # Test update link with non existing area res = client.put( @@ -286,6 +310,34 @@ def test_link_820(self, client: TestClient, user_access_token: str, study_type: } assert expected == res.json() + # Test create link with double value in filter + + client.delete(f"/v1/studies/{study_id}/links/{area1_id}/{area2_id}") + res = client.post( + f"/v1/studies/{study_id}/links", + json={"area1": area1_id, "area2": area2_id, "filterSynthesis": "hourly, hourly"}, + ) + + assert res.status_code == 200, res.json() + expected = { + "area1": "area 1", + "area2": "area 2", + "assetType": "ac", + "colorb": 112, + "colorg": 112, + "colorr": 112, + "displayComments": True, + "filterSynthesis": "hourly", + "filterYearByYear": "hourly, daily, weekly, monthly, annual", + "hurdlesCost": False, + "linkStyle": "plain", + "linkWidth": 1.0, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": False, + } + assert expected == res.json() + def test_create_link_810(self, client: TestClient, user_access_token: str) -> None: client.headers = {"Authorization": f"Bearer {user_access_token}"} # type: ignore diff --git a/tests/integration/study_data_blueprint/test_table_mode.py b/tests/integration/study_data_blueprint/test_table_mode.py index a7b1878020..17133f63be 100644 --- a/tests/integration/study_data_blueprint/test_table_mode.py +++ b/tests/integration/study_data_blueprint/test_table_mode.py @@ -14,9 +14,11 @@ import typing as t import pytest +from antares.study.version import StudyVersion from starlette.testclient import TestClient from antarest.core.tasks.model import TaskStatus +from antarest.study.model import STUDY_VERSION_8_2 from tests.integration.utils import wait_task_completion # noinspection SpellCheckingInspection @@ -188,61 +190,63 @@ def test_lifecycle__nominal( assert res.status_code == 200, res.json() actual = res.json() assert set(actual["properties"]) == { - "colorRgb", - "comments", - "hurdlesCost", - "loopFlow", - "usePhaseShifter", - "transmissionCapacities", "assetType", - "linkStyle", - "linkWidth", + "colorb", + "colorg", + "colorr", "displayComments", "filterSynthesis", "filterYearByYear", + "hurdlesCost", + "linkStyle", + "linkWidth", + "loopFlow", + "transmissionCapacities", + "usePhaseShifter", } - res = client.put( - f"/v1/studies/{internal_study_id}/table-mode/links", - json={ - "de / fr": { - "colorRgb": "#FFA500", - "displayComments": False, - "filterSynthesis": "hourly, daily, weekly, annual", - "filterYearByYear": "hourly, daily, monthly, annual", - "hurdlesCost": True, - "linkStyle": "plain", - "linkWidth": 2, - "loopFlow": False, - "transmissionCapacities": "ignore", - }, - "es / fr": { - "colorRgb": "#FF6347", - "displayComments": True, - "filterSynthesis": "hourly, daily, weekly, monthly, annual, annual", # duplicate is ignored - "filterYearByYear": "hourly, daily, weekly, annual", - "hurdlesCost": True, - "linkStyle": "plain", - "linkWidth": 1, - "loopFlow": False, - "transmissionCapacities": "enabled", - "usePhaseShifter": True, - }, - "fr / it": { - "comments": "Link from France to Italie", - "assetType": "DC", # case-insensitive - }, + # Test links + + json_input = { + "de / fr": { + "assetType": "ac", + "colorb": 100, + "colorg": 150, + "colorr": 200, + "displayComments": False, + "hurdlesCost": True, + "linkStyle": "plain", + "linkWidth": 2, + "loopFlow": False, + "transmissionCapacities": "ignore", }, - ) - assert res.status_code == 200, res.json() + "es / fr": { + "assetType": "ac", + "colorb": 100, + "colorg": 150, + "colorr": 200, + "displayComments": True, + "hurdlesCost": True, + "linkStyle": "plain", + "linkWidth": 1, + "loopFlow": False, + "transmissionCapacities": "enabled", + "usePhaseShifter": True, + }, + "fr / it": { + "assetType": "dc", # case-insensitive + }, + } + expected_links = { "de / fr": { + "area1": "de", + "area2": "fr", "assetType": "ac", - "colorRgb": "#FFA500", - "comments": "", + "colorb": 100, + "colorg": 150, + "colorr": 200, "displayComments": False, - "filterSynthesis": "hourly, daily, weekly, annual", - "filterYearByYear": "hourly, daily, monthly, annual", "hurdlesCost": True, "linkStyle": "plain", "linkWidth": 2, @@ -251,12 +255,13 @@ def test_lifecycle__nominal( "usePhaseShifter": False, }, "de / it": { + "area1": "de", + "area2": "it", "assetType": "ac", - "colorRgb": "#707070", - "comments": "", + "colorr": 112, + "colorg": 112, + "colorb": 112, "displayComments": True, - "filterSynthesis": "hourly, daily, weekly, monthly, annual", - "filterYearByYear": "hourly, daily, weekly, monthly, annual", "hurdlesCost": False, "linkStyle": "plain", "linkWidth": 1, @@ -265,12 +270,13 @@ def test_lifecycle__nominal( "usePhaseShifter": False, }, "es / fr": { + "area1": "es", + "area2": "fr", "assetType": "ac", - "colorRgb": "#FF6347", - "comments": "", + "colorb": 100, + "colorg": 150, + "colorr": 200, "displayComments": True, - "filterSynthesis": "hourly, daily, weekly, monthly, annual", - "filterYearByYear": "hourly, daily, weekly, annual", "hurdlesCost": True, "linkStyle": "plain", "linkWidth": 1, @@ -279,12 +285,13 @@ def test_lifecycle__nominal( "usePhaseShifter": True, }, "fr / it": { + "area1": "fr", + "area2": "it", "assetType": "dc", - "colorRgb": "#707070", - "comments": "Link from France to Italie", + "colorb": 112, + "colorg": 112, + "colorr": 112, "displayComments": True, - "filterSynthesis": "", - "filterYearByYear": "hourly", "hurdlesCost": True, "linkStyle": "plain", "linkWidth": 1, @@ -293,23 +300,39 @@ def test_lifecycle__nominal( "usePhaseShifter": False, }, } - # removes filter fields for study version prior to v8.2 - if study_version < 820: - for key in expected_links: - del expected_links[key]["filterSynthesis"] - del expected_links[key]["filterYearByYear"] - # asserts actual equals expected without the non-updated link. + # Add filters for versions > 8.2 + if StudyVersion.parse(study_version) > STUDY_VERSION_8_2: + for link in json_input.values(): + link.update( + { + "filterSynthesis": "hourly, daily, weekly, monthly, annual", + "filterYearByYear": "hourly, daily, weekly, monthly, annual", + } + ) + for link in expected_links.values(): + link.update( + { + "filterSynthesis": "hourly, daily, weekly, monthly, annual", + "filterYearByYear": "hourly, daily, weekly, monthly, annual", + } + ) + + res = client.put(f"/v1/studies/{internal_study_id}/table-mode/links", json=json_input) + assert res.status_code == 200, res.json() + actual = res.json() - expected_result = copy.deepcopy(expected_links) - del expected_result["de / it"] - assert actual == expected_result + expected_partial = copy.deepcopy(expected_links) + del expected_partial["de / it"] + assert actual == expected_partial res = client.get(f"/v1/studies/{internal_study_id}/table-mode/links") assert res.status_code == 200, res.json() - actual = res.json() - # asserts the `de / it` link is not removed. - assert actual == expected_links + assert res.json() == expected_links + + # GET request to make sure that the GET /links works + res = client.get(f"/v1/studies/{internal_study_id}/links") + assert res.status_code == 200, res.json() # Table Mode - Thermal Clusters # ============================= diff --git a/tests/storage/business/test_arealink_manager.py b/tests/storage/business/test_arealink_manager.py index adae212c4f..b61074b8b7 100644 --- a/tests/storage/business/test_arealink_manager.py +++ b/tests/storage/business/test_arealink_manager.py @@ -25,11 +25,11 @@ from antarest.matrixstore.service import SimpleMatrixService from antarest.study.business.area_management import AreaCreationDTO, AreaManager, AreaType, UpdateAreaUi from antarest.study.business.link_management import LinkDTO, LinkManager +from antarest.study.business.model.link_model import AssetType, LinkStyle, TransmissionCapacity from antarest.study.model import Patch, PatchArea, PatchCluster, RawStudy, StudyAdditionalData from antarest.study.repository import StudyMetadataRepository from antarest.study.storage.patch_service import PatchService from antarest.study.storage.rawstudy.model.filesystem.config.files import build -from antarest.study.storage.rawstudy.model.filesystem.config.links import AssetType, LinkStyle, TransmissionCapacity from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, DistrictSet, FileStudyTreeConfig, Link from antarest.study.storage.rawstudy.model.filesystem.config.thermal import ThermalConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy From 7ad68038d6fca4774c0cd57059e99303022c40e6 Mon Sep 17 00:00:00 2001 From: Sylvain Leclerc Date: Fri, 6 Dec 2024 17:32:56 +0100 Subject: [PATCH 12/86] fix(tasks): fix frozen task with load balanced pgpool (#2263) This work aims at fixing issues encountered with load balanced pgpool, where a commit is not always instantly visible in another session (when read from replica). Fixes are: - restore a workaround which consists in re-trying the read until success - ensure exceptions occurring in the task execution thread are ALL caught Also removing a technical debt: - remove optional session from task job repo which was just used in tests. It did not work with code which uses both the repo and also the session from the singleton db.session. Signed-off-by: Sylvain Leclerc --- antarest/core/tasks/repository.py | 15 +---- antarest/core/tasks/service.py | 105 +++++++++++++++++------------- antarest/core/utils/utils.py | 2 +- tests/core/test_tasks.py | 46 ++++++------- 4 files changed, 85 insertions(+), 83 deletions(-) diff --git a/antarest/core/tasks/repository.py b/antarest/core/tasks/repository.py index 0a2028db33..74c9e84b78 100644 --- a/antarest/core/tasks/repository.py +++ b/antarest/core/tasks/repository.py @@ -27,15 +27,6 @@ class TaskJobRepository: Database connector to manage Tasks/Jobs entities. """ - def __init__(self, session: t.Optional[Session] = None): - """ - Initialize the repository. - - Args: - session: Optional SQLAlchemy session to be used. - """ - self._session = session - @property def session(self) -> Session: """ @@ -44,11 +35,7 @@ def session(self) -> Session: Returns: SQLAlchemy session. """ - if self._session is None: - # Get or create the session from a context variable (thread local variable) - return db.session - # Get the user-defined session - return self._session + return db.session def save(self, task: TaskJob) -> TaskJob: session = self.session diff --git a/antarest/core/tasks/service.py b/antarest/core/tasks/service.py index f992e227c6..a97a2fedf5 100644 --- a/antarest/core/tasks/service.py +++ b/antarest/core/tasks/service.py @@ -38,6 +38,7 @@ ) from antarest.core.tasks.repository import TaskJobRepository from antarest.core.utils.fastapi_sqlalchemy import db +from antarest.core.utils.utils import retry from antarest.worker.worker import WorkerTaskCommand, WorkerTaskResult logger = logging.getLogger(__name__) @@ -390,35 +391,41 @@ def _run_task( task_id: str, custom_event_messages: t.Optional[CustomTaskEventMessages] = None, ) -> None: - # attention: this function is executed in a thread, not in the main process - with db(): - task = db.session.query(TaskJob).get(task_id) - task_type = task.type - study_id = task.ref_id + # We need to catch all exceptions so that the calling thread is guaranteed + # to not die + try: + # attention: this function is executed in a thread, not in the main process + with db(): + # Important to keep this retry for now, + # in case commit is not visible (read from replica ...) + task = retry(lambda: self.repo.get_or_raise(task_id)) + task_type = task.type + study_id = task.ref_id - self.event_bus.push( - Event( - type=EventType.TASK_RUNNING, - payload=TaskEventPayload( - id=task_id, - message=custom_event_messages.running - if custom_event_messages is not None - else f"Task {task_id} is running", - type=task_type, - study_id=study_id, - ).model_dump(), - permissions=PermissionInfo(public_mode=PublicMode.READ), - channel=EventChannelDirectory.TASK + task_id, + self.event_bus.push( + Event( + type=EventType.TASK_RUNNING, + payload=TaskEventPayload( + id=task_id, + message=custom_event_messages.running + if custom_event_messages is not None + else f"Task {task_id} is running", + type=task_type, + study_id=study_id, + ).model_dump(), + permissions=PermissionInfo(public_mode=PublicMode.READ), + channel=EventChannelDirectory.TASK + task_id, + ) ) - ) - logger.info(f"Starting task {task_id}") - with db(): - db.session.query(TaskJob).filter(TaskJob.id == task_id).update({TaskJob.status: TaskStatus.RUNNING.value}) - db.session.commit() - logger.info(f"Task {task_id} set to RUNNING") + logger.info(f"Starting task {task_id}") + with db(): + db.session.query(TaskJob).filter(TaskJob.id == task_id).update( + {TaskJob.status: TaskStatus.RUNNING.value} + ) + db.session.commit() + logger.info(f"Task {task_id} set to RUNNING") - try: with db(): # We must use the DB session attached to the current thread result = callback(TaskLogAndProgressRecorder(task_id, db.session, self.event_bus)) @@ -463,29 +470,35 @@ def _run_task( err_msg = f"Task {task_id} failed: Unhandled exception {exc}" logger.error(err_msg, exc_info=exc) - with db(): - result_msg = f"{err_msg}\nSee the logs for detailed information and the error traceback." - db.session.query(TaskJob).filter(TaskJob.id == task_id).update( - { - TaskJob.status: TaskStatus.FAILED.value, - TaskJob.result_msg: result_msg, - TaskJob.result_status: False, - TaskJob.completion_date: datetime.datetime.utcnow(), - } + try: + with db(): + result_msg = f"{err_msg}\nSee the logs for detailed information and the error traceback." + db.session.query(TaskJob).filter(TaskJob.id == task_id).update( + { + TaskJob.status: TaskStatus.FAILED.value, + TaskJob.result_msg: result_msg, + TaskJob.result_status: False, + TaskJob.completion_date: datetime.datetime.utcnow(), + } + ) + db.session.commit() + + message = err_msg if custom_event_messages is None else custom_event_messages.end + self.event_bus.push( + Event( + type=EventType.TASK_FAILED, + payload=TaskEventPayload( + id=task_id, message=message, type=task_type, study_id=study_id + ).model_dump(), + permissions=PermissionInfo(public_mode=PublicMode.READ), + channel=EventChannelDirectory.TASK + task_id, + ) ) - db.session.commit() - - message = err_msg if custom_event_messages is None else custom_event_messages.end - self.event_bus.push( - Event( - type=EventType.TASK_FAILED, - payload=TaskEventPayload( - id=task_id, message=message, type=task_type, study_id=study_id - ).model_dump(), - permissions=PermissionInfo(public_mode=PublicMode.READ), - channel=EventChannelDirectory.TASK + task_id, + except Exception as inner_exc: + logger.error( + f"An exception occurred while handling execution error of task {task_id}: {inner_exc}", + exc_info=inner_exc, ) - ) def get_task_progress(self, task_id: str, params: RequestParameters) -> t.Optional[int]: task = self.repo.get_or_raise(task_id) diff --git a/antarest/core/utils/utils.py b/antarest/core/utils/utils.py index c748420549..2940db582a 100644 --- a/antarest/core/utils/utils.py +++ b/antarest/core/utils/utils.py @@ -105,7 +105,7 @@ def retry(func: t.Callable[[], T], attempts: int = 10, interval: float = 0.5) -> attempt += 1 return func() except Exception as e: - logger.info(f"💤 Sleeping {interval} second(s)...") + logger.info(f"💤 Sleeping {interval} second(s) before retry...", exc_info=e) time.sleep(interval) caught_exception = e raise caught_exception or ShouldNotHappenException() diff --git a/tests/core/test_tasks.py b/tests/core/test_tasks.py index 139db56691..5a8b490047 100644 --- a/tests/core/test_tasks.py +++ b/tests/core/test_tasks.py @@ -204,21 +204,22 @@ def _execute_task(self, task_info: WorkerTaskCommand) -> TaskResult: return TaskResult(success=True, message="") -def test_repository(db_session: Session) -> None: +@with_db_context +def test_repository() -> None: # Prepare two users in the database user1_id = 9 - db_session.add(User(id=user1_id, name="John")) + db.session.add(User(id=user1_id, name="John")) user2_id = 10 - db_session.add(User(id=user2_id, name="Jane")) - db_session.commit() + db.session.add(User(id=user2_id, name="Jane")) + db.session.commit() # Create a RawStudy in the database study_id = "e34fe4d5-5964-4ef2-9baf-fad66dadc512" - db_session.add(RawStudy(id=study_id, name="foo", version="860")) - db_session.commit() + db.session.add(RawStudy(id=study_id, name="foo", version="860")) + db.session.commit() # Create a TaskJobService - task_job_repo = TaskJobRepository(db_session) + task_job_repo = TaskJobRepository() new_task = TaskJob(name="foo", owner_id=user1_id, type=TaskType.COPY) @@ -282,10 +283,10 @@ def test_repository(db_session: Session) -> None: assert len(new_task.logs) == 2 assert new_task.logs[0].message == "hello" - assert len(db_session.query(TaskJobLog).where(TaskJobLog.task_id == new_task.id).all()) == 2 + assert len(db.session.query(TaskJobLog).where(TaskJobLog.task_id == new_task.id).all()) == 2 task_job_repo.delete(new_task.id) - assert len(db_session.query(TaskJobLog).where(TaskJobLog.task_id == new_task.id).all()) == 0 + assert len(db.session.query(TaskJobLog).where(TaskJobLog.task_id == new_task.id).all()) == 0 assert task_job_repo.get(new_task.id) is None @@ -390,21 +391,22 @@ def test_cancel_orphan_tasks( assert (datetime.datetime.utcnow() - updated_task_job.completion_date).seconds <= max_diff_seconds -def test_get_progress(db_session: Session, admin_user: JWTUser, core_config: Config, event_bus: IEventBus) -> None: +@with_db_context +def test_get_progress(admin_user: JWTUser, core_config: Config, event_bus: IEventBus) -> None: # Prepare two users in the database user1_id = 9 - db_session.add(User(id=user1_id, name="John")) + db.session.add(User(id=user1_id, name="John")) user2_id = 10 - db_session.add(User(id=user2_id, name="Jane")) - db_session.commit() + db.session.add(User(id=user2_id, name="Jane")) + db.session.commit() # Create a RawStudy in the database study_id = "e34fe4d5-5964-4ef2-9baf-fad66dadc512" - db_session.add(RawStudy(id=study_id, name="foo", version="860")) - db_session.commit() + db.session.add(RawStudy(id=study_id, name="foo", version="860")) + db.session.commit() # Create a TaskJobService - task_job_repo = TaskJobRepository(db_session) + task_job_repo = TaskJobRepository() # User 1 launches a ts generation first_task = TaskJob( @@ -451,12 +453,12 @@ def test_get_progress(db_session: Session, admin_user: JWTUser, core_config: Con service.get_task_progress(wrong_id, RequestParameters(user)) +@with_db_context def test_ts_generation_task( tmp_path: Path, core_config: Config, admin_user: JWTUser, raw_study_service: RawStudyService, - db_session: Session, ) -> None: # ======================= # SET UP @@ -465,7 +467,7 @@ def test_ts_generation_task( event_bus = DummyEventBusService() # Create a TaskJobService and add tasks - task_job_repo = TaskJobRepository(db_session) + task_job_repo = TaskJobRepository() # Create a TaskJobService task_job_service = TaskJobService(config=core_config, repository=task_job_repo, event_bus=event_bus) @@ -474,8 +476,8 @@ def test_ts_generation_task( raw_study_path = tmp_path / "study" regular_user = User(id=99, name="regular") - db_session.add(regular_user) - db_session.commit() + db.session.add(regular_user) + db.session.commit() raw_study = RawStudy( id="my_raw_study", @@ -490,8 +492,8 @@ def test_ts_generation_task( path=str(raw_study_path), ) study_metadata_repository = StudyMetadataRepository(Mock(), None) - db_session.add(raw_study) - db_session.commit() + db.session.add(raw_study) + db.session.commit() # Set up the Raw Study raw_study_service.create(raw_study) From a5a2e1e3d8d018fb8bef2fd06c778918873b2128 Mon Sep 17 00:00:00 2001 From: MartinBelthle Date: Tue, 10 Dec 2024 13:58:11 +0100 Subject: [PATCH 13/86] feat(clusters): convert cluster groups and names to lower case (#2182) Implementation note: groups and cluster names are converted to lower case as soon as possible when at the borders of the application (using LowerCaseStr): in the API, in the properties classes read from files, in the command data from database ... This way, we don't have to bother about it inside the application logic. [ANT-2311] --- antarest/core/model.py | 4 + .../extensions/adequacy_patch/extension.py | 2 +- antarest/study/business/area_management.py | 3 +- .../business/areas/renewable_management.py | 30 ++-- .../business/areas/st_storage_management.py | 14 +- .../business/areas/thermal_management.py | 49 +++--- .../business/binding_constraint_management.py | 6 +- antarest/study/business/district_manager.py | 2 +- .../study/business/table_mode_management.py | 7 +- .../model/filesystem/config/cluster.py | 7 +- .../filesystem/config/field_validators.py | 27 +++- .../rawstudy/model/filesystem/config/files.py | 6 +- .../model/filesystem/config/identifier.py | 32 +--- .../rawstudy/model/filesystem/config/model.py | 20 --- .../model/filesystem/config/renewable.py | 44 ++++-- .../model/filesystem/config/st_storage.py | 40 +++-- .../model/filesystem/config/thermal.py | 57 ++++--- .../root/input/thermal/prepro/area/area.py | 5 +- .../business/command_extractor.py | 2 +- .../variantstudy/business/command_reverter.py | 4 +- .../variantstudy/model/command/create_area.py | 8 +- .../command/create_binding_constraint.py | 14 +- .../model/command/create_cluster.py | 86 +++++------ .../model/command/create_district.py | 15 +- .../command/create_renewables_cluster.py | 52 ++++--- .../model/command/create_st_storage.py | 50 ++++--- .../model/command/remove_cluster.py | 5 +- .../variantstudy/model/command/remove_link.py | 5 +- .../command/remove_renewables_cluster.py | 6 +- .../model/command/remove_st_storage.py | 3 +- antarest/study/web/study_data_blueprint.py | 12 +- tests/integration/assets/base_study.zip | Bin 305876 -> 331678 bytes tests/integration/assets/variant_study.zip | Bin 311282 -> 309622 bytes .../test_synthesis/raw_study.synthesis.json | 72 ++++----- .../variant_study.synthesis.json | 72 ++++----- .../test_binding_constraints.py | 16 +- .../study_data_blueprint/test_renewable.py | 28 ++-- .../study_data_blueprint/test_st_storage.py | 36 +++-- .../study_data_blueprint/test_table_mode.py | 108 +++++++------- .../study_data_blueprint/test_thermal.py | 45 +++--- tests/integration/test_integration.py | 59 ++++---- .../test_integration_token_end_to_end.py | 18 +-- .../test_renewable_cluster.py | 38 ++--- .../variant_blueprint/test_st_storage.py | 2 +- .../variant_blueprint/test_thermal_cluster.py | 4 +- .../business/test_study_version_upgrader.py | 2 +- .../filesystem/config/test_utils.py | 5 +- .../areas/test_st_storage_management.py | 14 +- .../business/areas/test_thermal_management.py | 6 +- .../rawstudy/test_raw_study_service.py | 21 ++- .../variantstudy/test_snapshot_generator.py | 52 +++++-- .../test_variant_study_service.py | 22 ++- .../model/command/test_create_area.py | 3 +- .../model/command/test_create_cluster.py | 44 +++--- .../model/command/test_create_link.py | 2 +- .../command/test_create_renewables_cluster.py | 37 +++-- .../model/command/test_create_st_storage.py | 139 +++++++----------- .../test_manage_binding_constraints.py | 2 +- .../model/command/test_manage_district.py | 2 +- .../model/command/test_remove_area.py | 2 +- .../model/command/test_remove_cluster.py | 12 +- .../model/command/test_remove_link.py | 4 +- .../command/test_remove_renewables_cluster.py | 5 +- .../model/command/test_remove_st_storage.py | 19 +-- .../model/command/test_replace_matrix.py | 2 +- .../model/command/test_update_config.py | 2 +- tests/variantstudy/test_command_factory.py | 84 +++++------ 67 files changed, 834 insertions(+), 762 deletions(-) diff --git a/antarest/core/model.py b/antarest/core/model.py index 78aa7a1e82..adb554e542 100644 --- a/antarest/core/model.py +++ b/antarest/core/model.py @@ -13,6 +13,9 @@ import enum from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union +import typing_extensions as te +from pydantic import StringConstraints + from antarest.core.serialization import AntaresBaseModel if TYPE_CHECKING: @@ -22,6 +25,7 @@ JSON = Dict[str, Any] ELEMENT = Union[str, int, float, bool, bytes] SUB_JSON = Union[ELEMENT, JSON, List[Any], None] +LowerCaseStr = te.Annotated[str, StringConstraints(to_lower=True)] class PublicMode(enum.StrEnum): diff --git a/antarest/launcher/extensions/adequacy_patch/extension.py b/antarest/launcher/extensions/adequacy_patch/extension.py index 20cd3407cd..bb4d19f323 100644 --- a/antarest/launcher/extensions/adequacy_patch/extension.py +++ b/antarest/launcher/extensions/adequacy_patch/extension.py @@ -23,7 +23,7 @@ from antarest.core.utils.utils import assert_this from antarest.launcher.extensions.interface import ILauncherExtension from antarest.study.service import StudyService -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy logger = logging.getLogger(__name__) diff --git a/antarest/study/business/area_management.py b/antarest/study/business/area_management.py index 5220b0e8e1..e2b89f7979 100644 --- a/antarest/study/business/area_management.py +++ b/antarest/study/business/area_management.py @@ -32,7 +32,8 @@ ThermalAreasProperties, UIProperties, ) -from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, DistrictSet, transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, DistrictSet from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.model.command.create_area import CreateArea diff --git a/antarest/study/business/areas/renewable_management.py b/antarest/study/business/areas/renewable_management.py index 2063750ca3..14ba0e60e7 100644 --- a/antarest/study/business/areas/renewable_management.py +++ b/antarest/study/business/areas/renewable_management.py @@ -22,12 +22,13 @@ from antarest.study.business.enum_ignore_case import EnumIgnoreCase from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import Study -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.renewable import ( RenewableConfig, RenewableConfigType, RenewableProperties, create_renewable_config, + create_renewable_properties, ) from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.storage_service import StudyStorageService @@ -274,7 +275,6 @@ def update_cluster( Raises: RenewableClusterNotFound: If the cluster to update is not found. """ - study_version = StudyVersion.parse(study.version) file_study = self._get_file_study(study) path = _CLUSTER_PATH.format(area_id=area_id, cluster_id=cluster_id) @@ -284,19 +284,19 @@ def update_cluster( except KeyError: raise RenewableClusterNotFound(path, cluster_id) from None else: - old_config = create_renewable_config(study_version, **values) + old_properties = create_renewable_properties(study_version, **values) # use Python values to synchronize Config and Form values new_values = cluster_data.model_dump(by_alias=False, exclude_none=True) - new_config = old_config.copy(exclude={"id"}, update=new_values) - new_data = new_config.model_dump(mode="json", by_alias=True, exclude={"id"}) + new_properties = old_properties.copy(exclude={"id"}, update=new_values) # create the dict containing the new values using aliases data: t.Dict[str, t.Any] = {} - for field_name, field in new_config.model_fields.items(): - if field_name in new_values: - name = field.alias if field.alias else field_name - data[name] = new_data[name] + for updated_field, updated_value in new_values.items(): + if updated_field in old_properties.model_fields: + field_info = old_properties.model_fields[updated_field] + field_name = field_info.alias if field_info.alias else updated_field + data[field_name] = updated_value # create the update config commands with the modified data command_context = self.storage_service.variant_study_service.command_factory.command_context @@ -308,7 +308,7 @@ def update_cluster( ] execute_or_add_commands(study, file_study, commands, self.storage_service) - values = new_config.model_dump(by_alias=False) + values = new_properties.model_dump(by_alias=False) return RenewableClusterOutput(**values, id=cluster_id) def delete_clusters(self, study: Study, area_id: str, cluster_ids: t.Sequence[str]) -> None: @@ -357,9 +357,8 @@ def duplicate_cluster( Raises: DuplicateRenewableCluster: If a cluster with the new name already exists in the area. """ - new_id = transform_name_to_id(new_cluster_name, lower=False) - lower_new_id = new_id.lower() - if any(lower_new_id == cluster.id.lower() for cluster in self.get_clusters(study, area_id)): + new_id = transform_name_to_id(new_cluster_name) + if any(new_id == cluster.id for cluster in self.get_clusters(study, area_id)): raise DuplicateRenewableCluster(area_id, new_id) # Cluster duplication @@ -371,9 +370,8 @@ def duplicate_cluster( create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config, study_version) # Matrix edition - lower_source_id = source_id.lower() - source_path = f"input/renewables/series/{area_id}/{lower_source_id}/series" - new_path = f"input/renewables/series/{area_id}/{lower_new_id}/series" + source_path = f"input/renewables/series/{area_id}/{source_id}/series" + new_path = f"input/renewables/series/{area_id}/{new_id}/series" # Prepare and execute commands storage_service = self.storage_service.get_storage(study) diff --git a/antarest/study/business/areas/st_storage_management.py b/antarest/study/business/areas/st_storage_management.py index b0ef5322ab..5786b4183b 100644 --- a/antarest/study/business/areas/st_storage_management.py +++ b/antarest/study/business/areas/st_storage_management.py @@ -33,7 +33,7 @@ from antarest.study.business.all_optional_meta import all_optional_model, camel_case_model from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import STUDY_VERSION_8_8, Study -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import ( STStorage880Config, STStorage880Properties, @@ -305,7 +305,7 @@ def _make_create_cluster_cmd( ) -> CreateSTStorage: command = CreateSTStorage( area_id=area_id, - parameters=cluster, + parameters=cluster.model_dump(mode="json", by_alias=True, exclude={"id"}), command_context=self.storage_service.variant_study_service.command_factory.command_context, study_version=study_version, ) @@ -551,8 +551,7 @@ def duplicate_cluster(self, study: Study, area_id: str, source_id: str, new_clus ClusterAlreadyExists: If a cluster with the new name already exists in the area. """ new_id = transform_name_to_id(new_cluster_name) - lower_new_id = new_id.lower() - if any(lower_new_id == storage.id.lower() for storage in self.get_storages(study, area_id)): + if any(new_id == storage.id for storage in self.get_storages(study, area_id)): raise DuplicateSTStorage(area_id, new_id) # Cluster duplication @@ -571,16 +570,13 @@ def duplicate_cluster(self, study: Study, area_id: str, source_id: str, new_clus create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config, study_version) # Matrix edition - lower_source_id = source_id.lower() # noinspection SpellCheckingInspection ts_names = ["pmax_injection", "pmax_withdrawal", "lower_rule_curve", "upper_rule_curve", "inflows"] source_paths = [ - _STORAGE_SERIES_PATH.format(area_id=area_id, storage_id=lower_source_id, ts_name=ts_name) - for ts_name in ts_names + _STORAGE_SERIES_PATH.format(area_id=area_id, storage_id=source_id, ts_name=ts_name) for ts_name in ts_names ] new_paths = [ - _STORAGE_SERIES_PATH.format(area_id=area_id, storage_id=lower_new_id, ts_name=ts_name) - for ts_name in ts_names + _STORAGE_SERIES_PATH.format(area_id=area_id, storage_id=new_id, ts_name=ts_name) for ts_name in ts_names ] # Prepare and execute commands diff --git a/antarest/study/business/areas/thermal_management.py b/antarest/study/business/areas/thermal_management.py index cbd0f7e997..150dd7adfa 100644 --- a/antarest/study/business/areas/thermal_management.py +++ b/antarest/study/business/areas/thermal_management.py @@ -28,12 +28,13 @@ from antarest.study.business.all_optional_meta import all_optional_model, camel_case_model from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import STUDY_VERSION_8_7, Study -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.thermal import ( Thermal870Config, Thermal870Properties, ThermalConfigType, create_thermal_config, + create_thermal_properties, ) from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.storage_service import StudyStorageService @@ -348,7 +349,6 @@ def update_cluster( ThermalClusterNotFound: If the provided `cluster_id` does not match the ID of the cluster in the provided cluster_data. """ - study_version = StudyVersion.parse(study.version) file_study = self._get_file_study(study) path = _CLUSTER_PATH.format(area_id=area_id, cluster_id=cluster_id) @@ -357,19 +357,19 @@ def update_cluster( except KeyError: raise ThermalClusterNotFound(path, cluster_id) from None else: - old_config = create_thermal_config(study_version, **values) + old_properties = create_thermal_properties(study_version, **values) # Use Python values to synchronize Config and Form values new_values = cluster_data.model_dump(mode="json", by_alias=False, exclude_none=True) - new_config = old_config.copy(exclude={"id"}, update=new_values) - new_data = new_config.model_dump(mode="json", by_alias=True, exclude={"id"}) + new_properties = old_properties.copy(exclude={"id"}, update=new_values) # create the dict containing the new values using aliases data: t.Dict[str, t.Any] = {} - for field_name, field in new_config.model_fields.items(): - if field_name in new_values: - name = field.alias if field.alias else field_name - data[name] = new_data[name] + for updated_field, updated_value in new_values.items(): + if updated_field in old_properties.model_fields: + field_info = old_properties.model_fields[updated_field] + field_name = field_info.alias if field_info.alias else updated_field + data[field_name] = updated_value # create the update config commands with the modified data command_context = self.storage_service.variant_study_service.command_factory.command_context @@ -381,7 +381,7 @@ def update_cluster( ] execute_or_add_commands(study, file_study, commands, self.storage_service) - values = {**new_config.model_dump(mode="json", by_alias=False), "id": cluster_id} + values = {**new_properties.model_dump(mode="json", by_alias=False), "id": cluster_id} return ThermalClusterOutput.model_validate(values) def delete_clusters(self, study: Study, area_id: str, cluster_ids: t.Sequence[str]) -> None: @@ -431,9 +431,8 @@ def duplicate_cluster( Raises: ClusterAlreadyExists: If a cluster with the new name already exists in the area. """ - new_id = transform_name_to_id(new_cluster_name, lower=False) - lower_new_id = new_id.lower() - if any(lower_new_id == cluster.id.lower() for cluster in self.get_clusters(study, area_id)): + new_id = transform_name_to_id(new_cluster_name) + if any(new_id == cluster.id for cluster in self.get_clusters(study, area_id)): raise DuplicateThermalCluster(area_id, new_id) # Cluster duplication @@ -445,23 +444,22 @@ def duplicate_cluster( create_cluster_cmd = self._make_create_cluster_cmd(area_id, new_config, study_version) # Matrix edition - lower_source_id = source_id.lower() source_paths = [ - f"input/thermal/series/{area_id}/{lower_source_id}/series", - f"input/thermal/prepro/{area_id}/{lower_source_id}/modulation", - f"input/thermal/prepro/{area_id}/{lower_source_id}/data", + f"input/thermal/series/{area_id}/{source_id}/series", + f"input/thermal/prepro/{area_id}/{source_id}/modulation", + f"input/thermal/prepro/{area_id}/{source_id}/data", ] new_paths = [ - f"input/thermal/series/{area_id}/{lower_new_id}/series", - f"input/thermal/prepro/{area_id}/{lower_new_id}/modulation", - f"input/thermal/prepro/{area_id}/{lower_new_id}/data", + f"input/thermal/series/{area_id}/{new_id}/series", + f"input/thermal/prepro/{area_id}/{new_id}/modulation", + f"input/thermal/prepro/{area_id}/{new_id}/data", ] study_version = StudyVersion.parse(study.version) if study_version >= STUDY_VERSION_8_7: - source_paths.append(f"input/thermal/series/{area_id}/{lower_source_id}/CO2Cost") - source_paths.append(f"input/thermal/series/{area_id}/{lower_source_id}/fuelCost") - new_paths.append(f"input/thermal/series/{area_id}/{lower_new_id}/CO2Cost") - new_paths.append(f"input/thermal/series/{area_id}/{lower_new_id}/fuelCost") + source_paths.append(f"input/thermal/series/{area_id}/{source_id}/CO2Cost") + source_paths.append(f"input/thermal/series/{area_id}/{source_id}/fuelCost") + new_paths.append(f"input/thermal/series/{area_id}/{new_id}/CO2Cost") + new_paths.append(f"input/thermal/series/{area_id}/{new_id}/fuelCost") # Prepare and execute commands commands: t.List[t.Union[CreateCluster, ReplaceMatrix]] = [create_cluster_cmd] @@ -479,8 +477,7 @@ def duplicate_cluster( return ThermalClusterOutput(**new_config.model_dump(mode="json", by_alias=False)) def validate_series(self, study: Study, area_id: str, cluster_id: str) -> bool: - lower_cluster_id = cluster_id.lower() - thermal_cluster_path = Path(f"input/thermal/series/{area_id}/{lower_cluster_id}") + thermal_cluster_path = Path(f"input/thermal/series/{area_id}/{cluster_id.lower()}") series_path = [thermal_cluster_path / "series"] if StudyVersion.parse(study.version) >= STUDY_VERSION_8_7: series_path.append(thermal_cluster_path / "CO2Cost") diff --git a/antarest/study/business/binding_constraint_management.py b/antarest/study/business/binding_constraint_management.py index 19e9c0f782..de461cf681 100644 --- a/antarest/study/business/binding_constraint_management.py +++ b/antarest/study/business/binding_constraint_management.py @@ -30,7 +30,7 @@ MatrixWidthMismatchError, WrongMatrixHeightError, ) -from antarest.core.model import JSON +from antarest.core.model import JSON, LowerCaseStr from antarest.core.requests import CaseInsensitiveDict from antarest.core.serialization import AntaresBaseModel from antarest.core.utils.string import to_camel_case @@ -44,7 +44,7 @@ BindingConstraintFrequency, BindingConstraintOperator, ) -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.business.matrix_constants.binding_constraint.series_after_v87 import ( @@ -340,7 +340,7 @@ class ConstraintOutput830(ConstraintOutputBase): class ConstraintOutput870(ConstraintOutput830): - group: str = DEFAULT_GROUP + group: LowerCaseStr = DEFAULT_GROUP # WARNING: Do not change the order of the following line, it is used to determine diff --git a/antarest/study/business/district_manager.py b/antarest/study/business/district_manager.py index 2cfec172d8..9147fb22f2 100644 --- a/antarest/study/business/district_manager.py +++ b/antarest/study/business/district_manager.py @@ -16,7 +16,7 @@ from antarest.core.serialization import AntaresBaseModel from antarest.study.business.utils import execute_or_add_commands from antarest.study.model import Study -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.storage_service import StudyStorageService from antarest.study.storage.variantstudy.model.command.create_district import CreateDistrict, DistrictBaseFilter from antarest.study.storage.variantstudy.model.command.remove_district import RemoveDistrict diff --git a/antarest/study/business/table_mode_management.py b/antarest/study/business/table_mode_management.py index aba99c9b57..e7a12b0289 100644 --- a/antarest/study/business/table_mode_management.py +++ b/antarest/study/business/table_mode_management.py @@ -217,7 +217,9 @@ def update_table_data( thermals_by_areas = collections.defaultdict(dict) for key, values in data.items(): area_id, cluster_id = key.split(" / ") - thermals_by_areas[area_id][cluster_id] = ThermalClusterInput(**values) + # Thermal clusters ids were not lowered at the time. + # So to ensure this endpoint still works with old scripts we have to lower the id at first. + thermals_by_areas[area_id][cluster_id.lower()] = ThermalClusterInput(**values) thermals_map = self._thermal_manager.update_thermals_props(study, thermals_by_areas) data = { f"{area_id} / {cluster_id}": cluster.model_dump(by_alias=True, exclude={"id", "name"}) @@ -230,7 +232,8 @@ def update_table_data( renewables_by_areas = collections.defaultdict(dict) for key, values in data.items(): area_id, cluster_id = key.split(" / ") - renewables_by_areas[area_id][cluster_id] = RenewableClusterInput(**values) + # Same reason as for thermal clusters + renewables_by_areas[area_id][cluster_id.lower()] = RenewableClusterInput(**values) renewables_map = self._renewable_manager.update_renewables_props(study, renewables_by_areas) data = { f"{area_id} / {cluster_id}": cluster.model_dump(by_alias=True, exclude={"id", "name"}) diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py b/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py index f2a6349d90..238012858e 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/cluster.py @@ -21,6 +21,7 @@ from pydantic import Field +from antarest.core.model import LowerCaseStr from antarest.core.serialization import AntaresBaseModel @@ -47,9 +48,9 @@ class ItemProperties( [('group-A', 'cluster-01'), ('GROUP-A', 'cluster-02'), ('Group-B', 'CLUSTER-01')] """ - group: str = Field(default="", description="Cluster group") + group: LowerCaseStr = Field(default="", description="Cluster group") - name: str = Field(description="Cluster name", pattern=r"[a-zA-Z0-9_(),& -]+") + name: LowerCaseStr = Field(description="Cluster name", pattern=r"[a-zA-Z0-9_(),& -]+") def __lt__(self, other: t.Any) -> bool: """ @@ -58,7 +59,7 @@ def __lt__(self, other: t.Any) -> bool: This method may be used to sort and group clusters by `group` and `name`. """ if isinstance(other, ItemProperties): - return (self.group.upper(), self.name.upper()).__lt__((other.group.upper(), other.name.upper())) + return (self.group, self.name).__lt__((other.group, other.name)) return NotImplemented diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py b/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py index f6a371769b..5761cdc587 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/field_validators.py @@ -9,7 +9,7 @@ # SPDX-License-Identifier: MPL-2.0 # # This file is part of the Antares project. - +import re import typing as t _ALL_FILTERING = ["hourly", "daily", "weekly", "monthly", "annual"] @@ -87,3 +87,28 @@ def validate_color_rgb(v: t.Any) -> str: raise TypeError(f"Invalid type for 'color_rgb': {type(v)}") return f"#{r:02X}{g:02X}{b:02X}" + + +# Invalid chars was taken from Antares Simulator (C++). +_sub_invalid_chars = re.compile(r"[^a-zA-Z0-9_(),& -]+").sub + + +def transform_name_to_id(name: str) -> str: + """ + Transform a name into an identifier by replacing consecutive + invalid characters by a single white space, then whitespaces + are striped from both ends and the id is lowered. + + Valid characters are `[a-zA-Z0-9_(),& -]` (including space). + + Args: + name: The name to convert. + """ + return _sub_invalid_chars(" ", name).strip().lower() + + +def validate_id_against_name(name: str) -> str: + to_return = transform_name_to_id(name) + if not to_return: + raise ValueError("Cluster name must only contains [a-zA-Z0-9],&,-,_,(,) characters") + return to_return diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/files.py b/antarest/study/storage/rawstudy/model/filesystem/config/files.py index 8f23fecd25..4d65f380b9 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/files.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/files.py @@ -42,7 +42,10 @@ SimulationParsingError, XpansionParsingError, ) -from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import extract_filtering +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import ( + extract_filtering, + transform_name_to_id, +) from antarest.study.storage.rawstudy.model.filesystem.config.model import ( Area, BindingConstraintDTO, @@ -50,7 +53,6 @@ FileStudyTreeConfig, Link, Simulation, - transform_name_to_id, ) from antarest.study.storage.rawstudy.model.filesystem.config.renewable import ( RenewableConfigType, diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/identifier.py b/antarest/study/storage/rawstudy/model/filesystem/config/identifier.py index ab428fca75..66e69fc7d1 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/identifier.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/identifier.py @@ -14,12 +14,12 @@ from pydantic import Field, model_validator -__all__ = ("IgnoreCaseIdentifier", "LowerCaseIdentifier") +__all__ = "LowerCaseIdentifier" from antarest.core.serialization import AntaresBaseModel -class IgnoreCaseIdentifier( +class LowerCaseIdentifier( AntaresBaseModel, extra="forbid", validate_assignment=True, @@ -43,9 +43,9 @@ def generate_id(cls, name: str) -> str: The ID of the section. """ # Avoid circular imports - from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id + from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id - return transform_name_to_id(name, lower=False) + return transform_name_to_id(name) @model_validator(mode="before") def validate_id(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.Any]: @@ -74,27 +74,3 @@ def validate_id(cls, values: t.MutableMapping[str, t.Any]) -> t.Mapping[str, t.A else: raise ValueError(f"Invalid name '{name}'.") return values - - -class LowerCaseIdentifier(IgnoreCaseIdentifier): - """ - Base class for all configuration sections with a lower case ID. - """ - - id: str = Field(description="ID (section name)", pattern=r"[a-z0-9_(),& -]+") - - @classmethod - def generate_id(cls, name: str) -> str: - """ - Generate an ID from a name. - - Args: - name: Name of a section read from an INI file - - Returns: - The ID of the section. - """ - # Avoid circular imports - from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id - - return transform_name_to_id(name, lower=True) diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/model.py b/antarest/study/storage/rawstudy/model/filesystem/config/model.py index 2f96b845a2..938cddaba3 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/model.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/model.py @@ -285,26 +285,6 @@ def get_filters_year(self, area: str, link: t.Optional[str] = None) -> t.List[st return self.areas[area].filters_year -# Invalid chars was taken from Antares Simulator (C++). -_sub_invalid_chars = re.compile(r"[^a-zA-Z0-9_(),& -]+").sub - - -def transform_name_to_id(name: str, lower: bool = True) -> str: - """ - Transform a name into an identifier by replacing consecutive - invalid characters by a single white space, and then whitespaces - are striped from both ends. - - Valid characters are `[a-zA-Z0-9_(),& -]` (including space). - - Args: - name: The name to convert. - lower: The flag used to turn the identifier in lower case. - """ - valid_id = _sub_invalid_chars(" ", name).strip() - return valid_id.lower() if lower else valid_id - - class FileStudyTreeConfigDTO(AntaresBaseModel): study_path: Path path: Path diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py b/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py index e796ed1beb..dcd7e6f16c 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/renewable.py @@ -18,7 +18,7 @@ from antarest.study.business.enum_ignore_case import EnumIgnoreCase from antarest.study.model import STUDY_VERSION_8_1 from antarest.study.storage.rawstudy.model.filesystem.config.cluster import ClusterProperties -from antarest.study.storage.rawstudy.model.filesystem.config.identifier import IgnoreCaseIdentifier +from antarest.study.storage.rawstudy.model.filesystem.config.identifier import LowerCaseIdentifier class TimeSeriesInterpretation(EnumIgnoreCase): @@ -44,15 +44,15 @@ class RenewableClusterGroup(EnumIgnoreCase): If not specified, the renewable cluster will be part of the group "Other RES 1". """ - THERMAL_SOLAR = "Solar Thermal" - PV_SOLAR = "Solar PV" - ROOFTOP_SOLAR = "Solar Rooftop" - WIND_ON_SHORE = "Wind Onshore" - WIND_OFF_SHORE = "Wind Offshore" - OTHER1 = "Other RES 1" - OTHER2 = "Other RES 2" - OTHER3 = "Other RES 3" - OTHER4 = "Other RES 4" + THERMAL_SOLAR = "solar thermal" + PV_SOLAR = "solar pv" + ROOFTOP_SOLAR = "solar rooftop" + WIND_ON_SHORE = "wind onshore" + WIND_OFF_SHORE = "wind offshore" + OTHER1 = "other res 1" + OTHER2 = "other res 2" + OTHER3 = "other res 3" + OTHER4 = "other res 4" def __repr__(self) -> str: return f"{self.__class__.__name__}.{self.name}" @@ -65,7 +65,7 @@ def _missing_(cls, value: object) -> t.Optional["RenewableClusterGroup"]: if isinstance(value, str): # Check if any group value matches the input value ignoring case sensitivity. # noinspection PyUnresolvedReferences - if any(value.upper() == group.value.upper() for group in cls): + if any(value.lower() == group.value for group in cls): return t.cast(RenewableClusterGroup, super()._missing_(value)) # If a group is not found, return the default group ('OTHER1' by default). return cls.OTHER1 @@ -91,7 +91,7 @@ class RenewableProperties(ClusterProperties): ) -class RenewableConfig(RenewableProperties, IgnoreCaseIdentifier): +class RenewableConfig(RenewableProperties, LowerCaseIdentifier): """ Configuration of a renewable cluster. @@ -110,6 +110,7 @@ class RenewableConfig(RenewableProperties, IgnoreCaseIdentifier): RenewableConfigType = RenewableConfig +RenewablePropertiesType = RenewableProperties def get_renewable_config_cls(study_version: StudyVersion) -> t.Type[RenewableConfig]: @@ -127,6 +128,25 @@ def get_renewable_config_cls(study_version: StudyVersion) -> t.Type[RenewableCon raise ValueError(f"Unsupported study version {study_version}, required 810 or above.") +def create_renewable_properties(study_version: StudyVersion, **kwargs: t.Any) -> RenewablePropertiesType: + """ + Factory method to create renewable properties. + + Args: + study_version: The version of the study. + **kwargs: The properties to be used to initialize the model. + + Returns: + The renewable properties. + + Raises: + ValueError: If the study version is not supported. + """ + if study_version >= STUDY_VERSION_8_1: + return RenewableProperties.model_validate(kwargs) + raise ValueError(f"Unsupported study version {study_version}, required 810 or above.") + + def create_renewable_config(study_version: StudyVersion, **kwargs: t.Any) -> RenewableConfigType: """ Factory method to create a renewable configuration model. diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py b/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py index 426e263baa..74df0803ac 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/st_storage.py @@ -34,15 +34,15 @@ class STStorageGroup(EnumIgnoreCase): - OTHER1...OTHER5: Represents other energy storage systems. """ - PSP_OPEN = "PSP_open" - PSP_CLOSED = "PSP_closed" - PONDAGE = "Pondage" - BATTERY = "Battery" - OTHER1 = "Other1" - OTHER2 = "Other2" - OTHER3 = "Other3" - OTHER4 = "Other4" - OTHER5 = "Other5" + PSP_OPEN = "psp_open" + PSP_CLOSED = "psp_closed" + PONDAGE = "pondage" + BATTERY = "battery" + OTHER1 = "other1" + OTHER2 = "other2" + OTHER3 = "other3" + OTHER4 = "other4" + OTHER5 = "other5" # noinspection SpellCheckingInspection @@ -161,6 +161,28 @@ class STStorage880Config(STStorage880Properties, LowerCaseIdentifier): # NOTE: In the following Union, it is important to place the older version first, # because otherwise, creating a short term storage always creates a v8.8 one. STStorageConfigType = t.Union[STStorageConfig, STStorage880Config] +STStoragePropertiesType = t.Union[STStorageProperties, STStorage880Properties] + + +def create_st_storage_properties(study_version: StudyVersion, **kwargs: t.Any) -> STStoragePropertiesType: + """ + Factory method to create st_storage properties. + + Args: + study_version: The version of the study. + **kwargs: The properties to be used to initialize the model. + + Returns: + The short term storage properties. + + Raises: + ValueError: If the study version is not supported. + """ + if study_version >= STUDY_VERSION_8_8: + return STStorage880Properties.model_validate(kwargs) + elif study_version >= STUDY_VERSION_8_6: + return STStorageProperties.model_validate(kwargs) + raise ValueError(f"Unsupported study version: {study_version}") def get_st_storage_config_cls(study_version: StudyVersion) -> t.Type[STStorageConfigType]: diff --git a/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py b/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py index ff095c2b2e..5093c9c289 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py +++ b/antarest/study/storage/rawstudy/model/filesystem/config/thermal.py @@ -13,11 +13,11 @@ import typing as t from antares.study.version import StudyVersion -from pydantic import Field +from pydantic import Field, ValidationError from antarest.study.business.enum_ignore_case import EnumIgnoreCase from antarest.study.storage.rawstudy.model.filesystem.config.cluster import ClusterProperties -from antarest.study.storage.rawstudy.model.filesystem.config.identifier import IgnoreCaseIdentifier +from antarest.study.storage.rawstudy.model.filesystem.config.identifier import LowerCaseIdentifier class LocalTSGenerationBehavior(EnumIgnoreCase): @@ -58,16 +58,16 @@ class ThermalClusterGroup(EnumIgnoreCase): The group `OTHER1` is used by default. """ - NUCLEAR = "Nuclear" - LIGNITE = "Lignite" - HARD_COAL = "Hard Coal" - GAS = "Gas" - OIL = "Oil" - MIXED_FUEL = "Mixed Fuel" - OTHER1 = "Other 1" - OTHER2 = "Other 2" - OTHER3 = "Other 3" - OTHER4 = "Other 4" + NUCLEAR = "nuclear" + LIGNITE = "lignite" + HARD_COAL = "hard coal" + GAS = "gas" + OIL = "oil" + MIXED_FUEL = "mixed fuel" + OTHER1 = "other 1" + OTHER2 = "other 2" + OTHER3 = "other 3" + OTHER4 = "other 4" def __repr__(self) -> str: # pragma: no cover return f"{self.__class__.__name__}.{self.name}" @@ -80,10 +80,8 @@ def _missing_(cls, value: object) -> t.Optional["ThermalClusterGroup"]: if isinstance(value, str): # Check if any group value matches the input value ignoring case sensitivity. # noinspection PyUnresolvedReferences - if any(value.upper() == group.value.upper() for group in cls): + if any(value.lower() == group.value for group in cls): return t.cast(ThermalClusterGroup, super()._missing_(value)) - # If a group is not found, return the default group ('OTHER1' by default). - # Note that 'OTHER' is an alias for 'OTHER1'. return cls.OTHER1 return t.cast(t.Optional["ThermalClusterGroup"], super()._missing_(value)) @@ -330,7 +328,7 @@ class Thermal870Properties(Thermal860Properties): ) -class ThermalConfig(ThermalProperties, IgnoreCaseIdentifier): +class ThermalConfig(ThermalProperties, LowerCaseIdentifier): """ Thermal properties with section ID. @@ -351,7 +349,7 @@ class ThermalConfig(ThermalProperties, IgnoreCaseIdentifier): AttributeError: 'ThermalConfig' object has no attribute 'nh3'""" -class Thermal860Config(Thermal860Properties, IgnoreCaseIdentifier): +class Thermal860Config(Thermal860Properties, LowerCaseIdentifier): """ Thermal properties for study in version 860 @@ -373,7 +371,7 @@ class Thermal860Config(Thermal860Properties, IgnoreCaseIdentifier): """ -class Thermal870Config(Thermal870Properties, IgnoreCaseIdentifier): +class Thermal870Config(Thermal870Properties, LowerCaseIdentifier): """ Thermal properties for study in version 8.7 or above. @@ -404,6 +402,7 @@ class Thermal870Config(Thermal870Properties, IgnoreCaseIdentifier): # NOTE: In the following Union, it is important to place the most specific type first, # because the type matching generally occurs sequentially from left to right within the union. ThermalConfigType = t.Union[Thermal870Config, Thermal860Config, ThermalConfig] +ThermalPropertiesType = t.Union[Thermal870Properties, Thermal860Properties, ThermalProperties] def get_thermal_config_cls(study_version: StudyVersion) -> t.Type[ThermalConfigType]: @@ -424,6 +423,28 @@ def get_thermal_config_cls(study_version: StudyVersion) -> t.Type[ThermalConfigT return ThermalConfig +def create_thermal_properties(study_version: StudyVersion, **kwargs: t.Any) -> ThermalPropertiesType: + """ + Factory method to create thermal properties. + + Args: + study_version: The version of the study. + **kwargs: The properties to be used to initialize the model. + + Returns: + The thermal properties. + + Raises: + ValueError: If the study version is not supported. + """ + if study_version >= 870: + return Thermal870Properties.model_validate(kwargs) + elif study_version == 860: + return Thermal860Properties.model_validate(kwargs) + else: + return ThermalProperties.model_validate(kwargs) + + def create_thermal_config(study_version: StudyVersion, **kwargs: t.Any) -> ThermalConfigType: """ Factory method to create a thermal configuration model. diff --git a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/area.py b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/area.py index daba4ac183..a804f5dbae 100644 --- a/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/area.py +++ b/antarest/study/storage/rawstudy/model/filesystem/root/input/thermal/prepro/area/area.py @@ -30,11 +30,8 @@ def __init__( self.area = area def build(self) -> TREE: - # Note that cluster IDs are case-insensitive, but series IDs are in lower case. - # For instance, if your cluster ID is "Base", then the series ID will be "base". - series_ids = map(str.lower, self.config.get_thermal_ids(self.area)) children: TREE = { series_id: InputThermalPreproAreaThermal(self.context, self.config.next_file(series_id)) - for series_id in series_ids + for series_id in self.config.get_thermal_ids(self.area) } return children diff --git a/antarest/study/storage/variantstudy/business/command_extractor.py b/antarest/study/storage/variantstudy/business/command_extractor.py index 2da4ac4271..0f034f8a37 100644 --- a/antarest/study/storage/variantstudy/business/command_extractor.py +++ b/antarest/study/storage/variantstudy/business/command_extractor.py @@ -222,7 +222,7 @@ def _extract_cluster(self, study: FileStudy, area_id: str, cluster_id: str, rene create_cluster_command( area_id=area_id, cluster_name=cluster.id, - parameters=cluster.model_dump(by_alias=True, exclude_defaults=True, exclude={"id"}), + parameters=cluster.model_dump(mode="json", by_alias=True, exclude={"id"}), command_context=self.command_context, study_version=study_tree.config.version, ), diff --git a/antarest/study/storage/variantstudy/business/command_reverter.py b/antarest/study/storage/variantstudy/business/command_reverter.py index 7b585f46b5..c7e88f83af 100644 --- a/antarest/study/storage/variantstudy/business/command_reverter.py +++ b/antarest/study/storage/variantstudy/business/command_reverter.py @@ -15,7 +15,7 @@ from pathlib import Path from antarest.core.exceptions import ChildNotFoundError -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.common import CommandName from antarest.study.storage.variantstudy.model.command.create_area import CreateArea @@ -222,7 +222,7 @@ def _revert_create_st_storage( history: t.List["ICommand"], base: FileStudy, ) -> t.List[ICommand]: - storage_id = base_command.parameters.id + storage_id = base_command.storage_id return [ RemoveSTStorage( area_id=base_command.area_id, diff --git a/antarest/study/storage/variantstudy/model/command/create_area.py b/antarest/study/storage/variantstudy/model/command/create_area.py index 8dfd782f43..1eefb00d1a 100644 --- a/antarest/study/storage/variantstudy/model/command/create_area.py +++ b/antarest/study/storage/variantstudy/model/command/create_area.py @@ -16,12 +16,8 @@ from antarest.core.model import JSON from antarest.study.model import STUDY_VERSION_6_5, STUDY_VERSION_8_1, STUDY_VERSION_8_3, STUDY_VERSION_8_6 -from antarest.study.storage.rawstudy.model.filesystem.config.model import ( - Area, - EnrModelling, - FileStudyTreeConfig, - transform_name_to_id, -) +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, EnrModelling, FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput, FilteringOptions from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand diff --git a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py index 7fe37187b6..93a65ff25a 100644 --- a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py @@ -18,6 +18,7 @@ from antares.study.version import StudyVersion from pydantic import Field, field_validator, model_validator +from antarest.core.model import LowerCaseStr from antarest.core.serialization import AntaresBaseModel from antarest.matrixstore.model import MatrixData from antarest.study.business.all_optional_meta import all_optional_model, camel_case_model @@ -29,8 +30,11 @@ BindingConstraintFrequency, BindingConstraintOperator, ) -from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import validate_filtering -from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig, transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import ( + transform_name_to_id, + validate_filtering, +) +from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants from antarest.study.storage.variantstudy.business.utils import validate_matrix @@ -117,7 +121,7 @@ def _validate_filtering(cls, v: t.Any) -> str: class BindingConstraintProperties870(BindingConstraintProperties830): - group: str = DEFAULT_GROUP + group: LowerCaseStr = DEFAULT_GROUP BindingConstraintProperties = t.Union[ @@ -339,8 +343,8 @@ def apply_binding_constraint( elif "." in link_or_cluster: # Cluster IDs are stored in lower case in the binding constraints file. area, cluster_id = link_or_cluster.split(".") - thermal_ids = {thermal.id.lower() for thermal in study_data.config.areas[area].thermals} - if area not in study_data.config.areas or cluster_id.lower() not in thermal_ids: + thermal_ids = {thermal.id for thermal in study_data.config.areas[area].thermals} + if area not in study_data.config.areas or cluster_id not in thermal_ids: return CommandOutput( status=False, message=f"Cluster '{link_or_cluster}' does not exist in binding constraint '{bd_id}'", diff --git a/antarest/study/storage/variantstudy/model/command/create_cluster.py b/antarest/study/storage/variantstudy/model/command/create_cluster.py index ab76488049..779d85ee3c 100644 --- a/antarest/study/storage/variantstudy/model/command/create_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_cluster.py @@ -12,18 +12,19 @@ import typing as t -from pydantic import Field, ValidationInfo, field_validator +from pydantic import Field, model_validator -from antarest.core.model import JSON +from antarest.core.model import JSON, LowerCaseStr from antarest.core.utils.utils import assert_this from antarest.matrixstore.model import MatrixData from antarest.study.model import STUDY_VERSION_8_7 -from antarest.study.storage.rawstudy.model.filesystem.config.model import ( - Area, - FileStudyTreeConfig, - transform_name_to_id, +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, FileStudyTreeConfig +from antarest.study.storage.rawstudy.model.filesystem.config.thermal import ( + ThermalPropertiesType, + create_thermal_config, + create_thermal_properties, ) -from antarest.study.storage.rawstudy.model.filesystem.config.thermal import create_thermal_config from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.utils import strip_matrix_protocol, validate_matrix from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput @@ -47,44 +48,30 @@ class CreateCluster(ICommand): # ================== area_id: str - cluster_name: str - parameters: t.Dict[str, t.Any] + cluster_name: LowerCaseStr + parameters: ThermalPropertiesType prepro: t.Optional[t.Union[t.List[t.List[MatrixData]], str]] = Field(None, validate_default=True) modulation: t.Optional[t.Union[t.List[t.List[MatrixData]], str]] = Field(None, validate_default=True) - @field_validator("cluster_name", mode="before") - def validate_cluster_name(cls, val: str) -> str: - valid_name = transform_name_to_id(val, lower=False) - if valid_name != val: - raise ValueError("Cluster name must only contains [a-zA-Z0-9],&,-,_,(,) characters") - return val - - @field_validator("prepro", mode="before") - def validate_prepro( - cls, - v: t.Optional[t.Union[t.List[t.List[MatrixData]], str]], - values: t.Union[t.Dict[str, t.Any], ValidationInfo], - ) -> t.Optional[t.Union[t.List[t.List[MatrixData]], str]]: - new_values = values if isinstance(values, dict) else values.data - if v is None: - v = new_values["command_context"].generator_matrix_constants.get_thermal_prepro_data() - return v + @model_validator(mode="before") + def validate_model(cls, values: t.Dict[str, t.Any]) -> t.Dict[str, t.Any]: + # Validate parameters + args = {"name": values["cluster_name"], **values["parameters"]} + values["parameters"] = create_thermal_properties(values["study_version"], **args) + + # Validate prepro + if "prepro" in values: + values["prepro"] = validate_matrix(values["prepro"], values) else: - return validate_matrix(v, new_values) - - @field_validator("modulation", mode="before") - def validate_modulation( - cls, - v: t.Optional[t.Union[t.List[t.List[MatrixData]], str]], - values: t.Union[t.Dict[str, t.Any], ValidationInfo], - ) -> t.Optional[t.Union[t.List[t.List[MatrixData]], str]]: - new_values = values if isinstance(values, dict) else values.data - if v is None: - v = new_values["command_context"].generator_matrix_constants.get_thermal_prepro_modulation() - return v + values["prepro"] = values["command_context"].generator_matrix_constants.get_thermal_prepro_data() + # Validate modulation + if "modulation" in values: + values["modulation"] = validate_matrix(values["modulation"], values) else: - return validate_matrix(v, new_values) + values["modulation"] = values["command_context"].generator_matrix_constants.get_thermal_prepro_modulation() + + return values def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: # Search the Area in the configuration @@ -125,12 +112,11 @@ def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = if not output.status: return output - # default values - self.parameters.setdefault("name", self.cluster_name) + version = study_data.config.version cluster_id = data["cluster_id"] config = study_data.tree.get(["input", "thermal", "clusters", self.area_id, "list"]) - config[cluster_id] = self.parameters + config[cluster_id] = self.parameters.model_dump(mode="json", by_alias=True) # Series identifiers are in lower case. series_id = cluster_id.lower() @@ -151,7 +137,7 @@ def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = } } } - if study_data.config.version >= STUDY_VERSION_8_7: + if version >= STUDY_VERSION_8_7: new_cluster_data["input"]["thermal"]["series"][self.area_id][series_id]["CO2Cost"] = null_matrix new_cluster_data["input"]["thermal"]["series"][self.area_id][series_id]["fuelCost"] = null_matrix study_data.tree.save(new_cluster_data) @@ -164,7 +150,7 @@ def to_dto(self) -> CommandDTO: args={ "area_id": self.area_id, "cluster_name": self.cluster_name, - "parameters": self.parameters, + "parameters": self.parameters.model_dump(mode="json", by_alias=True), "prepro": strip_matrix_protocol(self.prepro), "modulation": strip_matrix_protocol(self.modulation), }, @@ -186,9 +172,11 @@ def match(self, other: ICommand, equal: bool = False) -> bool: simple_match = self.area_id == other.area_id and self.cluster_name == other.cluster_name if not equal: return simple_match + self_params = self.parameters.model_dump(mode="json", by_alias=True) + other_params = other.parameters.model_dump(mode="json", by_alias=True) return ( simple_match - and self.parameters == other.parameters + and self_params == other_params and self.prepro == other.prepro and self.modulation == other.modulation ) @@ -199,7 +187,7 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig # Series identifiers are in lower case. - series_id = transform_name_to_id(self.cluster_name, lower=True) + series_id = transform_name_to_id(self.cluster_name) commands: t.List[ICommand] = [] if self.prepro != other.prepro: commands.append( @@ -219,11 +207,13 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: study_version=self.study_version, ) ) - if self.parameters != other.parameters: + self_params = self.parameters.model_dump(mode="json", by_alias=True) + other_params = other.parameters.model_dump(mode="json", by_alias=True) + if self_params != other_params: commands.append( UpdateConfig( target=f"input/thermal/clusters/{self.area_id}/list/{self.cluster_name}", - data=other.parameters, + data=other_params, command_context=self.command_context, study_version=self.study_version, ) diff --git a/antarest/study/storage/variantstudy/model/command/create_district.py b/antarest/study/storage/variantstudy/model/command/create_district.py index 5ed1fc8469..e8ed7f69d9 100644 --- a/antarest/study/storage/variantstudy/model/command/create_district.py +++ b/antarest/study/storage/variantstudy/model/command/create_district.py @@ -15,11 +15,9 @@ from pydantic import field_validator -from antarest.study.storage.rawstudy.model.filesystem.config.model import ( - DistrictSet, - FileStudyTreeConfig, - transform_name_to_id, -) +from antarest.core.model import LowerCaseStr +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import DistrictSet, FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand @@ -52,13 +50,6 @@ class CreateDistrict(ICommand): output: bool = True comments: str = "" - @field_validator("name") - def validate_district_name(cls, val: str) -> str: - valid_name = transform_name_to_id(val, lower=False) - if valid_name != val: - raise ValueError("Area name must only contains [a-zA-Z0-9],&,-,_,(,) characters") - return val - def _apply_config(self, study_data: FileStudyTreeConfig) -> Tuple[CommandOutput, Dict[str, Any]]: district_id = transform_name_to_id(self.name) if district_id in study_data.sets: diff --git a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py index 9a1413665b..6c0c6381c8 100644 --- a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py @@ -12,16 +12,15 @@ import typing as t -from pydantic import field_validator - -from antarest.core.model import JSON -from antarest.study.storage.rawstudy.model.filesystem.config.model import ( - Area, - EnrModelling, - FileStudyTreeConfig, - transform_name_to_id, +from pydantic import model_validator + +from antarest.core.model import JSON, LowerCaseStr +from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, EnrModelling, FileStudyTreeConfig +from antarest.study.storage.rawstudy.model.filesystem.config.renewable import ( + RenewableProperties, + create_renewable_config, + create_renewable_properties, ) -from antarest.study.storage.rawstudy.model.filesystem.config.renewable import create_renewable_config from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand @@ -44,15 +43,15 @@ class CreateRenewablesCluster(ICommand): # ================== area_id: str - cluster_name: str - parameters: t.Dict[str, t.Any] + cluster_name: LowerCaseStr + parameters: RenewableProperties - @field_validator("cluster_name") - def validate_cluster_name(cls, val: str) -> str: - valid_name = transform_name_to_id(val, lower=False) - if valid_name != val: - raise ValueError("Area name must only contains [a-zA-Z0-9],&,-,_,(,) characters") - return val + @model_validator(mode="before") + def validate_model(cls, values: t.Dict[str, t.Any]) -> t.Dict[str, t.Any]: + # Validate parameters + args = {"name": values["cluster_name"], **values["parameters"]} + values["parameters"] = create_renewable_properties(values["study_version"], **args) + return values def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: if EnrModelling(study_data.enr_modelling) != EnrModelling.CLUSTERS: @@ -106,14 +105,9 @@ def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = if not output.status: return output - # default values - if "ts-interpretation" not in self.parameters: - self.parameters["ts-interpretation"] = "power-generation" - self.parameters.setdefault("name", self.cluster_name) - cluster_id = data["cluster_id"] config = study_data.tree.get(["input", "renewables", "clusters", self.area_id, "list"]) - config[cluster_id] = self.parameters + config[cluster_id] = self.parameters.model_dump(mode="json", by_alias=True) # Series identifiers are in lower case. series_id = cluster_id.lower() @@ -139,7 +133,7 @@ def to_dto(self) -> CommandDTO: args={ "area_id": self.area_id, "cluster_name": self.cluster_name, - "parameters": self.parameters, + "parameters": self.parameters.model_dump(mode="json", by_alias=True), }, study_version=self.study_version, ) @@ -159,18 +153,22 @@ def match(self, other: ICommand, equal: bool = False) -> bool: simple_match = self.area_id == other.area_id and self.cluster_name == other.cluster_name if not equal: return simple_match - return simple_match and self.parameters == other.parameters + self_params = self.parameters.model_dump(mode="json", by_alias=True) + other_params = other.parameters.model_dump(mode="json", by_alias=True) + return simple_match and self_params == other_params def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: other = t.cast(CreateRenewablesCluster, other) from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig commands: t.List[ICommand] = [] - if self.parameters != other.parameters: + self_params = self.parameters.model_dump(mode="json", by_alias=True) + other_params = other.parameters.model_dump(mode="json", by_alias=True) + if self_params != other_params: commands.append( UpdateConfig( target=f"input/renewables/clusters/{self.area_id}/list/{self.cluster_name}", - data=other.parameters, + data=other_params, command_context=self.command_context, study_version=self.study_version, ) diff --git a/antarest/study/storage/variantstudy/model/command/create_st_storage.py b/antarest/study/storage/variantstudy/model/command/create_st_storage.py index ae39cf8c28..8d15d5c625 100644 --- a/antarest/study/storage/variantstudy/model/command/create_st_storage.py +++ b/antarest/study/storage/variantstudy/model/command/create_st_storage.py @@ -15,11 +15,16 @@ import numpy as np from pydantic import Field, ValidationInfo, model_validator -from antarest.core.model import JSON +from antarest.core.model import JSON, LowerCaseStr from antarest.matrixstore.model import MatrixData from antarest.study.model import STUDY_VERSION_8_6 +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, FileStudyTreeConfig -from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import STStorageConfigType +from antarest.study.storage.rawstudy.model.filesystem.config.st_storage import ( + STStoragePropertiesType, + create_st_storage_config, + create_st_storage_properties, +) from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants from antarest.study.storage.variantstudy.business.utils import strip_matrix_protocol, validate_matrix @@ -58,8 +63,8 @@ class CreateSTStorage(ICommand): # Command parameters # ================== - area_id: str = Field(description="Area ID", pattern=r"[a-z0-9_(),& -]+") - parameters: STStorageConfigType + area_id: LowerCaseStr = Field(description="Area ID", pattern=r"[a-z0-9_(),& -]+") + parameters: STStoragePropertiesType pmax_injection: t.Optional[t.Union[MatrixType, str]] = Field( default=None, description="Charge capacity (modulation)", @@ -84,13 +89,18 @@ class CreateSTStorage(ICommand): @property def storage_id(self) -> str: """The normalized version of the storage's name used as the ID.""" - return self.parameters.id + return transform_name_to_id(self.storage_name) @property def storage_name(self) -> str: """The label representing the name of the storage for the user.""" return self.parameters.name + @model_validator(mode="before") + def validate_model(cls, values: t.Dict[str, t.Any]) -> t.Dict[str, t.Any]: + values["parameters"] = create_st_storage_properties(values["study_version"], **values["parameters"]) + return values + @staticmethod def validate_field( v: t.Optional[t.Union[MatrixType, str]], values: t.Dict[str, t.Any], field: str @@ -173,6 +183,7 @@ def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutpu """ # Check if the study version is above the minimum required version. + storage_id = self.storage_id version = study_data.version if version < REQUIRED_VERSION: return ( @@ -195,7 +206,7 @@ def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutpu area: Area = study_data.areas[self.area_id] # Check if the short-term storage already exists in the area - if any(s.id == self.storage_id for s in area.st_storages): + if any(s.id == storage_id for s in area.st_storages): return ( CommandOutput( status=False, @@ -205,14 +216,17 @@ def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutpu ) # Create a new short-term storage and add it to the area - area.st_storages.append(self.parameters) + storage_config = create_st_storage_config( + self.study_version, **self.parameters.model_dump(mode="json", by_alias=True) + ) + area.st_storages.append(storage_config) return ( CommandOutput( status=True, message=f"Short-term st_storage '{self.storage_name}' successfully added to area '{self.area_id}'.", ), - {"storage_id": self.storage_id}, + {"storage_id": storage_id}, ) def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = None) -> CommandOutput: @@ -227,6 +241,7 @@ def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = Returns: The output of the command execution. """ + storage_id = self.storage_id output, _ = self._apply_config(study_data.config) if not output.status: return output @@ -234,13 +249,13 @@ def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = # Fill-in the "list.ini" file with the parameters. # On creation, it's better to write all the parameters in the file. config = study_data.tree.get(["input", "st-storage", "clusters", self.area_id, "list"]) - config[self.storage_id] = self.parameters.model_dump(mode="json", by_alias=True, exclude={"id"}) + config[storage_id] = self.parameters.model_dump(mode="json", by_alias=True) new_data: JSON = { "input": { "st-storage": { "clusters": {self.area_id: {"list": config}}, - "series": {self.area_id: {self.storage_id: {attr: getattr(self, attr) for attr in _MATRIX_NAMES}}}, + "series": {self.area_id: {storage_id: {attr: getattr(self, attr) for attr in _MATRIX_NAMES}}}, } } } @@ -256,12 +271,11 @@ def to_dto(self) -> CommandDTO: Returns: The DTO object representing the current command. """ - parameters = self.parameters.model_dump(mode="json", by_alias=True, exclude={"id"}) return CommandDTO( action=self.command_name.value, args={ "area_id": self.area_id, - "parameters": parameters, + "parameters": self.parameters.model_dump(mode="json", by_alias=True), **{attr: strip_matrix_protocol(getattr(self, attr)) for attr in _MATRIX_NAMES}, }, study_version=self.study_version, @@ -312,9 +326,10 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig other = t.cast(CreateSTStorage, other) + storage_id = self.storage_id commands: t.List[ICommand] = [ ReplaceMatrix( - target=f"input/st-storage/series/{self.area_id}/{self.storage_id}/{attr}", + target=f"input/st-storage/series/{self.area_id}/{storage_id}/{attr}", matrix=strip_matrix_protocol(getattr(other, attr)), command_context=self.command_context, study_version=self.study_version, @@ -322,12 +337,13 @@ def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: for attr in _MATRIX_NAMES if getattr(self, attr) != getattr(other, attr) ] - if self.parameters != other.parameters: - data: t.Dict[str, t.Any] = other.parameters.model_dump(mode="json", by_alias=True, exclude={"id"}) + self_params = self.parameters.model_dump(mode="json", by_alias=True) + other_params = other.parameters.model_dump(mode="json", by_alias=True) + if self_params != other_params: commands.append( UpdateConfig( - target=f"input/st-storage/clusters/{self.area_id}/list/{self.storage_id}", - data=data, + target=f"input/st-storage/clusters/{self.area_id}/list/{storage_id}", + data=other_params, command_context=self.command_context, study_version=self.study_version, ) diff --git a/antarest/study/storage/variantstudy/model/command/remove_cluster.py b/antarest/study/storage/variantstudy/model/command/remove_cluster.py index eba5aec285..b64bbdfc39 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/remove_cluster.py @@ -12,6 +12,9 @@ import typing as t +from pydantic import Field + +from antarest.core.model import LowerCaseStr from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.business.utils_binding_constraint import ( @@ -38,7 +41,7 @@ class RemoveCluster(ICommand): # ================== area_id: str - cluster_id: str + cluster_id: LowerCaseStr = Field(description="Cluster ID", pattern=r"[a-z0-9_(),& -]+") def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: """ diff --git a/antarest/study/storage/variantstudy/model/command/remove_link.py b/antarest/study/storage/variantstudy/model/command/remove_link.py index e1cee3a518..9b372e906f 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_link.py +++ b/antarest/study/storage/variantstudy/model/command/remove_link.py @@ -15,7 +15,8 @@ from pydantic import field_validator, model_validator from antarest.study.model import STUDY_VERSION_8_2 -from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig, transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.model import FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput from antarest.study.storage.variantstudy.model.command.icommand import MATCH_SIGNATURE_SEPARATOR, ICommand, OutputTuple @@ -46,7 +47,7 @@ class RemoveLink(ICommand): def _validate_id(cls, area: str) -> str: if isinstance(area, str): # Area IDs must be in lowercase and not empty. - area_id = transform_name_to_id(area, lower=True) + area_id = transform_name_to_id(area) if area_id: return area_id # Valid characters are `[a-zA-Z0-9_(),& -]` (including space). diff --git a/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py b/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py index bb378fc1d1..592b75bfbb 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py @@ -12,6 +12,10 @@ import typing as t +from pydantic import Field, field_validator + +from antarest.core.model import LowerCaseStr +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import validate_id_against_name from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.common import CommandName, CommandOutput @@ -35,7 +39,7 @@ class RemoveRenewablesCluster(ICommand): # ================== area_id: str - cluster_id: str + cluster_id: LowerCaseStr = Field(description="Cluster ID", pattern=r"[a-z0-9_(),& -]+") def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: """ diff --git a/antarest/study/storage/variantstudy/model/command/remove_st_storage.py b/antarest/study/storage/variantstudy/model/command/remove_st_storage.py index b369612ace..f27ebc5a58 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_st_storage.py +++ b/antarest/study/storage/variantstudy/model/command/remove_st_storage.py @@ -14,6 +14,7 @@ from pydantic import Field +from antarest.core.model import LowerCaseStr from antarest.study.model import STUDY_VERSION_8_6 from antarest.study.storage.rawstudy.model.filesystem.config.model import Area, FileStudyTreeConfig from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy @@ -41,7 +42,7 @@ class RemoveSTStorage(ICommand): # ================== area_id: str = Field(description="Area ID", pattern=r"[a-z0-9_(),& -]+") - storage_id: str = Field(description="Short term storage ID", pattern=r"[a-z0-9_(),& -]+") + storage_id: LowerCaseStr = Field(description="Short term storage ID", pattern=r"[a-z0-9_(),& -]+") def _apply_config(self, study_data: FileStudyTreeConfig) -> t.Tuple[CommandOutput, t.Dict[str, t.Any]]: """ diff --git a/antarest/study/web/study_data_blueprint.py b/antarest/study/web/study_data_blueprint.py index 9f267df774..ba9d2034a4 100644 --- a/antarest/study/web/study_data_blueprint.py +++ b/antarest/study/web/study_data_blueprint.py @@ -21,7 +21,7 @@ from antarest.core.config import Config from antarest.core.jwt import JWTUser -from antarest.core.model import JSON, StudyPermissionType +from antarest.core.model import JSON, LowerCaseStr, StudyPermissionType from antarest.core.requests import RequestParameters from antarest.core.utils.utils import sanitize_uuid from antarest.core.utils.web import APITag @@ -81,7 +81,7 @@ BindingConstraintFrequency, BindingConstraintOperator, ) -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id +from antarest.study.storage.rawstudy.model.filesystem.config.field_validators import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.config.ruleset_matrices import TableForm as SBTableForm logger = logging.getLogger(__name__) @@ -1955,7 +1955,7 @@ def create_renewable_cluster( def update_renewable_cluster( uuid: str, area_id: str, - cluster_id: str, + cluster_id: LowerCaseStr, cluster_data: RenewableClusterInput, current_user: JWTUser = Depends(auth.get_current_user), ) -> RenewableClusterOutput: @@ -2129,7 +2129,7 @@ def create_thermal_cluster( def update_thermal_cluster( uuid: str, area_id: str, - cluster_id: str, + cluster_id: LowerCaseStr, cluster_data: ThermalClusterInput, current_user: JWTUser = Depends(auth.get_current_user), ) -> ThermalClusterOutput: @@ -2556,8 +2556,8 @@ def duplicate_cluster( uuid: str, area_id: str, cluster_type: ClusterType, - source_cluster_id: str, - new_cluster_name: str = Query(..., alias="newName", title="New Cluster Name"), + source_cluster_id: LowerCaseStr, + new_cluster_name: LowerCaseStr = Query(..., alias="newName", title="New Cluster Name"), current_user: JWTUser = Depends(auth.get_current_user), ) -> t.Union[STStorageOutput, ThermalClusterOutput, RenewableClusterOutput]: logger.info( diff --git a/tests/integration/assets/base_study.zip b/tests/integration/assets/base_study.zip index 3b282beb1693044a666fc204fee083eb453c18ba..95665329911994489ba14d3331315d03ca2909b9 100644 GIT binary patch delta 75253 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

    " : ""; // Close previous list attributesUtils.openBalise = `${closePrevBalise}<${ (XmlToHTML as any)[node.name] }>${attributesUtils.openBalise}`; - attributesUtils.closeBalise += ``; + attributesUtils.closeBalise += ``; } else { attributesUtils.openBalise = `<${(XmlToHTML as any)[node.name]}>${ attributesUtils.openBalise }`; - attributesUtils.closeBalise += ``; + attributesUtils.closeBalise += ``; } } @@ -194,10 +184,7 @@ const parseXMLToHTMLNode = ( res.result += completeResult.result; } return { - result: - attributesUtils.openBalise + - res.result + - attributesUtils.closeBalise, + result: attributesUtils.openBalise + res.result + attributesUtils.closeBalise, listSeq: attributesUtils.list, }; } @@ -265,18 +252,12 @@ const parseHTMLToXMLNode = ( ): ParseHTMLToXMLNodeActions => { let action: ParseHTMLToXMLNodeActions = ParseHTMLToXMLNodeActions.NONE; const parseChild = (nodeElement: XMLElement): ParseHTMLToXMLNodeActions => { - let resultAction: ParseHTMLToXMLNodeActions = - ParseHTMLToXMLNodeActions.NONE; + let resultAction: ParseHTMLToXMLNodeActions = ParseHTMLToXMLNodeActions.NONE; if (nodeElement.elements !== undefined) { const actionList: ParseHTMLToXMLActionList[] = []; - let childAction: ParseHTMLToXMLNodeActions = - ParseHTMLToXMLNodeActions.NONE; + let childAction: ParseHTMLToXMLNodeActions = ParseHTMLToXMLNodeActions.NONE; for (let i = 0; i < nodeElement.elements.length; i++) { - childAction = parseHTMLToXMLNode( - nodeElement.elements[i], - nodeElement, - i, - ); + childAction = parseHTMLToXMLNode(nodeElement.elements[i], nodeElement, i); if (childAction !== ParseHTMLToXMLNodeActions.NONE) { actionList.push({ action: childAction, @@ -287,25 +268,14 @@ const parseHTMLToXMLNode = ( actionList.forEach((elm: ParseHTMLToXMLActionList) => { if (nodeElement.elements !== undefined) { if (elm.action === ParseHTMLToXMLNodeActions.DELETE) { - nodeElement.elements = nodeElement.elements.filter( - (item) => item !== elm.node, - ); - } else if ( - elm.node.elements !== undefined && - elm.node.elements.length > 0 - ) { + nodeElement.elements = nodeElement.elements.filter((item) => item !== elm.node); + } else if (elm.node.elements !== undefined && elm.node.elements.length > 0) { let newElements: XMLElement[] = []; - const index = nodeElement.elements.findIndex( - (item) => item === elm.node, - ); + const index = nodeElement.elements.findIndex((item) => item === elm.node); if (index !== undefined && index >= 0) { - newElements = newElements.concat( - nodeElement.elements.slice(0, index), - ); + newElements = newElements.concat(nodeElement.elements.slice(0, index)); newElements = newElements.concat(elm.node.elements); - newElements = newElements.concat( - nodeElement.elements.slice(index + 1), - ); + newElements = newElements.concat(nodeElement.elements.slice(index + 1)); node.elements = newElements; if (elm.action === ParseHTMLToXMLNodeActions.TEXTTOELEMENTS) { @@ -331,8 +301,7 @@ const parseHTMLToXMLNode = ( { type: "text", text: - quoteList[j][0] === " " || - quoteList[j][quoteList[j].length - 1] === " " + quoteList[j][0] === " " || quoteList[j][quoteList[j].length - 1] === " " ? `"${quoteList[j]}"` : quoteList[j], }, @@ -359,10 +328,7 @@ const parseHTMLToXMLNode = ( elements: [ { type: "text", - text: - data[0] === " " || data[data.length - 1] === " " - ? `"${data}"` - : data, + text: data[0] === " " || data[data.length - 1] === " " ? `"${data}"` : data, }, ], }); @@ -438,8 +404,7 @@ const parseHTMLToXMLNode = ( leftsubindent: "60", bulletstyle: parent.name === "ol" ? "4353" : "512", bulletnumber: lastListSeq.toString(), - liststyle: - parent.name === "ol" ? "Numbered List" : "Bullet List", + liststyle: parent.name === "ol" ? "Numbered List" : "Bullet List", }; if (parent.name === "ul") { node.attributes = { diff --git a/webapp/src/components/App/Singlestudy/HomeView/InformationView/index.tsx b/webapp/src/components/App/Singlestudy/HomeView/InformationView/index.tsx index 52b57f4935..7fc12cb8ca 100644 --- a/webapp/src/components/App/Singlestudy/HomeView/InformationView/index.tsx +++ b/webapp/src/components/App/Singlestudy/HomeView/InformationView/index.tsx @@ -16,16 +16,13 @@ import { useState } from "react"; import { Paper, Button, Box, Divider } from "@mui/material"; import { useNavigate } from "react-router-dom"; import { useTranslation } from "react-i18next"; -import { AxiosError } from "axios"; -import { StudyMetadata, VariantTree } from "../../../../../common/types"; +import type { AxiosError } from "axios"; +import type { StudyMetadata, VariantTree } from "../../../../../common/types"; import CreateVariantDialog from "./CreateVariantDialog"; import LauncherHistory from "./LauncherHistory"; import Notes from "./Notes"; import LauncherDialog from "../../../Studies/LauncherDialog"; -import { - copyStudy, - unarchiveStudy as callUnarchiveStudy, -} from "../../../../../services/api/study"; +import { copyStudy, unarchiveStudy as callUnarchiveStudy } from "../../../../../services/api/study"; import useEnqueueErrorSnackbar from "../../../../../hooks/useEnqueueErrorSnackbar"; interface Props { @@ -43,11 +40,7 @@ function InformationView(props: Props) { const importStudy = async (study: StudyMetadata) => { try { - await copyStudy( - study.id, - `${study.name} (${t("studies.copySuffix")})`, - false, - ); + await copyStudy(study.id, `${study.name} (${t("studies.copySuffix")})`, false); } catch (e) { enqueueErrorSnackbar(t("studies.error.copyStudy"), e as AxiosError); } @@ -100,12 +93,7 @@ function InformationView(props: Props) { alignItems="flex-start" py={1.5} > - + )} diff --git a/webapp/src/components/App/Singlestudy/HomeView/StudyTreeView/index.tsx b/webapp/src/components/App/Singlestudy/HomeView/StudyTreeView/index.tsx index 3e483c8e21..400db365d3 100644 --- a/webapp/src/components/App/Singlestudy/HomeView/StudyTreeView/index.tsx +++ b/webapp/src/components/App/Singlestudy/HomeView/StudyTreeView/index.tsx @@ -13,10 +13,9 @@ */ import { useEffect, useMemo, useState } from "react"; -import * as React from "react"; import { Box, styled } from "@mui/material"; -import { StudyMetadata, VariantTree } from "../../../../../common/types"; -import { StudyTree, getTreeNodes } from "./utils"; +import type { StudyMetadata, VariantTree } from "../../../../../common/types"; +import { getTreeNodes, type StudyTree } from "./utils"; import { CIRCLE_RADIUS, colors, @@ -89,11 +88,7 @@ export default function CustomizedTreeView(props: Props) { setHoverId(""); }; - const buildRecursiveTree = ( - tree: StudyTree, - i = 0, - j = 0, - ): React.ReactNode[] => { + const buildRecursiveTree = (tree: StudyTree, i = 0, j = 0): React.ReactNode[] => { const { drawOptions, name, attributes, children } = tree; const { id } = attributes; const { nbAllChildrens } = drawOptions; @@ -105,22 +100,14 @@ export default function CustomizedTreeView(props: Props) { let verticalLineEnd = 0; if (children.length > 0) { - verticalLineEnd = - nbAllChildrens - - children[children.length - 1].drawOptions.nbAllChildrens; + verticalLineEnd = nbAllChildrens - children[children.length - 1].drawOptions.nbAllChildrens; verticalLineEnd = (j + verticalLineEnd) * TILE_SIZE_Y + CIRCLE_RADIUS; } const cx = i * TILE_SIZE_X + DCX; const cy = j * TILE_SIZE_Y + DCY; let res: React.ReactNode[] = [ - , + , { return nodeDatum; }; -const buildTree = async ( - node: StudyTree, - childrenTree: VariantTree, -): Promise => { +const buildTree = async (node: StudyTree, childrenTree: VariantTree): Promise => { if ((childrenTree.children || []).length === 0) { node.drawOptions.depth = 1; node.drawOptions.nbAllChildrens = 0; diff --git a/webapp/src/components/App/Singlestudy/HomeView/index.tsx b/webapp/src/components/App/Singlestudy/HomeView/index.tsx index 83f4d765a5..d48e184f34 100644 --- a/webapp/src/components/App/Singlestudy/HomeView/index.tsx +++ b/webapp/src/components/App/Singlestudy/HomeView/index.tsx @@ -15,7 +15,7 @@ import { useNavigate } from "react-router-dom"; import { Box } from "@mui/material"; import Split from "react-split"; -import { StudyMetadata, VariantTree } from "../../../../common/types"; +import type { StudyMetadata, VariantTree } from "../../../../common/types"; import "./Split.css"; import StudyTreeView from "./StudyTreeView"; import InformationView from "./InformationView"; diff --git a/webapp/src/components/App/Singlestudy/NavHeader/Actions.tsx b/webapp/src/components/App/Singlestudy/NavHeader/Actions.tsx index fb9dca2669..236e80c00b 100644 --- a/webapp/src/components/App/Singlestudy/NavHeader/Actions.tsx +++ b/webapp/src/components/App/Singlestudy/NavHeader/Actions.tsx @@ -19,7 +19,7 @@ import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router"; import MoreVertIcon from "@mui/icons-material/MoreVert"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; -import { StudyMetadata, StudyType } from "../../../../common/types"; +import { StudyType, type StudyMetadata } from "../../../../common/types"; import { toggleFavorite } from "../../../../redux/ducks/studies"; import StarToggle from "../../../common/StarToggle"; import useAppDispatch from "../../../../redux/hooks/useAppDispatch"; @@ -85,21 +85,13 @@ function Actions({ }} > - - - - @@ -181,9 +161,7 @@ function ThematicTrimmingDialog(props: Props) { disableGutters > }> - {t( - `study.configuration.general.thematicTrimming.group.${group}`, - )} + {t(`study.configuration.general.thematicTrimming.group.${group}`)} diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/utils.ts b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/utils.ts index a3a16e5661..80b571b9a6 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/General/dialogs/ThematicTrimmingDialog/utils.ts @@ -13,8 +13,8 @@ */ import * as R from "ramda"; -import { ThematicTrimmingConfig } from "../../../../../../../../services/api/studies/config/thematicTrimming/types"; -import { O } from "ts-toolbelt"; +import type { ThematicTrimmingConfig } from "../../../../../../../../services/api/studies/config/thematicTrimming/types"; +import type { O } from "ts-toolbelt"; export const THEMATIC_TRIMMING_GROUPS = [ "general", diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/General/index.tsx index 9d9ea519d9..d20953b5aa 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/General/index.tsx @@ -15,20 +15,20 @@ import { useOutletContext } from "react-router"; import * as R from "ramda"; import { useState } from "react"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import Form from "../../../../../common/Form"; import Fields from "./Fields"; import ThematicTrimmingDialog from "./dialogs/ThematicTrimmingDialog"; import ScenarioPlaylistDialog from "./dialogs/ScenarioPlaylistDialog"; import { - GeneralFormFields, getGeneralFormFields, hasDayField, pickDayFields, - SetDialogStateType, setGeneralFormFields, + type GeneralFormFields, + type SetDialogStateType, } from "./utils"; -import { SubmitHandlerPlus } from "../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../common/Form/types"; import ScenarioBuilderDialog from "./dialogs/ScenarioBuilderDialog"; function General() { @@ -71,33 +71,15 @@ function General() { {R.cond([ [ R.equals("thematicTrimming"), - () => ( - - ), + () => , ], [ R.equals("scenarioBuilder"), - () => ( - - ), + () => , ], [ R.equals("scenarioPlaylist"), - () => ( - - ), + () => , ], ])(dialog)} diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/General/utils.ts b/webapp/src/components/App/Singlestudy/explore/Configuration/General/utils.ts index 612e43080f..1476874c2e 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/General/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/General/utils.ts @@ -13,7 +13,7 @@ */ import * as R from "ramda"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import client from "../../../../../../services/api/client"; //////////////////////////////////////////////////////////////// @@ -84,11 +84,7 @@ export interface GeneralFormFields { thematicTrimming?: boolean; } -export type SetDialogStateType = - | "thematicTrimming" - | "scenarioPlaylist" - | "scenarioBuilder" - | ""; +export type SetDialogStateType = "thematicTrimming" | "scenarioPlaylist" | "scenarioBuilder" | ""; //////////////////////////////////////////////////////////////// // Constants @@ -147,11 +143,7 @@ export function setGeneralFormFields( return client.put(makeRequestURL(studyId), values); } -export const hasDayField = R.anyPass([ - R.has("firstDay"), - R.has("lastDay"), - R.has("leapYear"), -]); +export const hasDayField = R.anyPass([R.has("firstDay"), R.has("lastDay"), R.has("leapYear")]); export const pickDayFields = ( values: GeneralFormFields, diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/Fields.tsx index 143b3108ed..a4a2caaab3 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/Fields.tsx @@ -14,18 +14,18 @@ import { Box } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import SelectFE from "../../../../../common/fieldEditors/SelectFE"; import SwitchFE from "../../../../../common/fieldEditors/SwitchFE"; import Fieldset from "../../../../../common/Fieldset"; import { useFormContextPlus } from "../../../../../common/Form"; import { LEGACY_TRANSMISSION_CAPACITIES_OPTIONS, - OptimizationFormFields, SIMPLEX_OPTIMIZATION_RANGE_OPTIONS, toBooleanIfNeeded, TRANSMISSION_CAPACITIES_OPTIONS, UNFEASIBLE_PROBLEM_BEHAVIOR_OPTIONS, + type OptimizationFormFields, } from "./utils"; interface Props { @@ -42,9 +42,7 @@ function Fields(props: Props) {
    -
    +
    diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/index.tsx index 775665d746..1269fccafe 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/index.tsx @@ -13,14 +13,14 @@ */ import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import Form from "../../../../../common/Form"; -import { SubmitHandlerPlus } from "../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../common/Form/types"; import Fields from "./Fields"; import { getOptimizationFormFields, - OptimizationFormFields, setOptimizationFormFields, + type OptimizationFormFields, } from "./utils"; function Optimization() { @@ -30,9 +30,7 @@ function Optimization() { // Event Handlers //////////////////////////////////////////////////////////////// - const handleSubmit = async ( - data: SubmitHandlerPlus, - ) => { + const handleSubmit = async (data: SubmitHandlerPlus) => { return setOptimizationFormFields(study.id, data.dirtyValues); }; diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/utils.ts b/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/utils.ts index 319509ac63..d1f9404c7b 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/Optimization/utils.ts @@ -18,7 +18,7 @@ import * as R from "ramda"; // Enums //////////////////////////////////////////////////////////////// -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import client from "../../../../../../services/api/client"; enum UnfeasibleProblemBehavior { @@ -54,10 +54,7 @@ enum TransmissionCapacities { export interface OptimizationFormFields { bindingConstraints: boolean; hurdleCosts: boolean; - transmissionCapacities: - | boolean - | LegacyTransmissionCapacities.Infinite - | TransmissionCapacities; + transmissionCapacities: boolean | LegacyTransmissionCapacities.Infinite | TransmissionCapacities; thermalClustersMinStablePower: boolean; thermalClustersMinUdTime: boolean; dayAheadReserve: boolean; @@ -73,18 +70,10 @@ export interface OptimizationFormFields { // Constants //////////////////////////////////////////////////////////////// -export const UNFEASIBLE_PROBLEM_BEHAVIOR_OPTIONS = Object.values( - UnfeasibleProblemBehavior, -); -export const SIMPLEX_OPTIMIZATION_RANGE_OPTIONS = Object.values( - SimplexOptimizationRange, -); -export const LEGACY_TRANSMISSION_CAPACITIES_OPTIONS = Object.values( - LegacyTransmissionCapacities, -); -export const TRANSMISSION_CAPACITIES_OPTIONS = Object.values( - TransmissionCapacities, -); +export const UNFEASIBLE_PROBLEM_BEHAVIOR_OPTIONS = Object.values(UnfeasibleProblemBehavior); +export const SIMPLEX_OPTIMIZATION_RANGE_OPTIONS = Object.values(SimplexOptimizationRange); +export const LEGACY_TRANSMISSION_CAPACITIES_OPTIONS = Object.values(LegacyTransmissionCapacities); +export const TRANSMISSION_CAPACITIES_OPTIONS = Object.values(TransmissionCapacities); //////////////////////////////////////////////////////////////// // Functions diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/Fields.tsx index 0a361dc214..336cd8af53 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/Fields.tsx @@ -12,18 +12,11 @@ * This file is part of the Antares project. */ -import { - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, -} from "@mui/material"; -import { capitalize } from "lodash"; +import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from "@mui/material"; +import capitalize from "lodash/capitalize"; import NumberFE from "../../../../../common/fieldEditors/NumberFE"; import { useFormContextPlus } from "../../../../../common/Form"; -import { TSFormFields, TSType } from "./utils"; +import { TSType, type TSFormFields } from "./utils"; import BooleanFE from "../../../../../common/fieldEditors/BooleanFE"; import { useTranslation } from "react-i18next"; import { validateNumber } from "@/utils/validation/number"; @@ -67,19 +60,13 @@ function Fields() { }} > - - {capitalize(TSType.Thermal)} - + {capitalize(TSType.Thermal)} diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx index 3c04d03707..d8bd798c24 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx @@ -15,12 +15,9 @@ import { useOutletContext } from "react-router"; import type { StudyMetadata } from "../../../../../../common/types"; import Form from "../../../../../common/Form"; -import type { - SubmitHandlerPlus, - UseFormReturnPlus, -} from "../../../../../common/Form/types"; +import type { SubmitHandlerPlus, UseFormReturnPlus } from "../../../../../common/Form/types"; import Fields from "./Fields"; -import { DEFAULT_VALUES, setTimeSeriesFormFields, TSFormFields } from "./utils"; +import { DEFAULT_VALUES, setTimeSeriesFormFields, type TSFormFields } from "./utils"; import { useTranslation } from "react-i18next"; import usePromiseHandler from "../../../../../../hooks/usePromiseHandler"; import { generateTimeSeries } from "../../../../../../services/api/studies/timeseries"; diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/utils.ts b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/utils.ts index 22eef49008..1ae9e51f20 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/utils.ts @@ -12,8 +12,8 @@ * This file is part of the Antares project. */ -import { DeepPartial } from "react-hook-form"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { DeepPartial } from "react-hook-form"; +import type { StudyMetadata } from "../../../../../../common/types"; import client from "../../../../../../services/api/client"; //////////////////////////////////////////////////////////////// diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/index.tsx index 2cb4312daa..4b154c85a9 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/index.tsx @@ -16,7 +16,7 @@ import * as R from "ramda"; import { useMemo, useState } from "react"; import { useOutletContext } from "react-router"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../common/types"; +import type { StudyMetadata } from "../../../../../common/types"; import PropertiesView from "../../../../common/PropertiesView"; import ListElement from "../common/ListElement"; import AdequacyPatch from "./AdequacyPatch"; diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Folder.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Folder.tsx index dfc763783a..d5d9ddaf01 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Folder.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Folder.tsx @@ -50,15 +50,7 @@ import type { StudyMetadata } from "../../../../../../common/types"; import { useSnackbar } from "notistack"; function Folder(props: DataCompProps) { - const { - filename, - filePath, - treeData, - canEdit, - setSelectedFile, - reloadTreeData, - studyId, - } = props; + const { filename, filePath, treeData, canEdit, setSelectedFile, reloadTreeData, studyId } = props; const { t } = useTranslation(); const { study } = useOutletContext<{ study: StudyMetadata }>(); @@ -207,11 +199,7 @@ function Folder(props: DataCompProps) { )} {/* Items menu */} - + {t("global.delete")} diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Json.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Json.tsx index 5df699950b..336a640ae2 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Json.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Json.tsx @@ -15,7 +15,7 @@ import { useTranslation } from "react-i18next"; import { useSnackbar } from "notistack"; import { editStudy, getStudyData } from "../../../../../../services/api/study"; -import JSONEditor, { JSONEditorProps } from "../../../../../common/JSONEditor"; +import JSONEditor, { type JSONEditorProps } from "../../../../../common/JSONEditor"; import usePromiseWithSnackbarError from "../../../../../../hooks/usePromiseWithSnackbarError"; import UsePromiseCond from "../../../../../common/utils/UsePromiseCond"; import type { DataCompProps } from "../utils"; @@ -29,13 +29,10 @@ function Json({ filePath, filename, studyId, canEdit }: DataCompProps) { const [t] = useTranslation(); const { enqueueSnackbar } = useSnackbar(); - const jsonRes = usePromiseWithSnackbarError( - () => getStudyData(studyId, filePath, -1), - { - errorMessage: t("studies.error.retrieveData"), - deps: [studyId, filePath], - }, - ); + const jsonRes = usePromiseWithSnackbarError(() => getStudyData(studyId, filePath, -1), { + errorMessage: t("studies.error.retrieveData"), + deps: [studyId, filePath], + }); //////////////////////////////////////////////////////////////// // Event Handlers diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx index b77dd93c1f..24a0452d86 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/Text.tsx @@ -17,10 +17,7 @@ import { Box, useTheme } from "@mui/material"; import { getStudyData } from "../../../../../../services/api/study"; import usePromiseWithSnackbarError from "../../../../../../hooks/usePromiseWithSnackbarError"; import UsePromiseCond from "../../../../../common/utils/UsePromiseCond"; -import { - Light as SyntaxHighlighter, - type SyntaxHighlighterProps, -} from "react-syntax-highlighter"; +import { Light as SyntaxHighlighter, type SyntaxHighlighterProps } from "react-syntax-highlighter"; import xml from "react-syntax-highlighter/dist/esm/languages/hljs/xml"; import plaintext from "react-syntax-highlighter/dist/esm/languages/hljs/plaintext"; import ini from "react-syntax-highlighter/dist/esm/languages/hljs/ini"; @@ -66,13 +63,7 @@ function getSyntaxProps(data: string | string[]): SyntaxHighlighterProps { }; } -function Text({ - studyId, - filePath, - filename, - fileType, - canEdit, -}: DataCompProps) { +function Text({ studyId, filePath, filename, fileType, canEdit }: DataCompProps) { const { t } = useTranslation(); const theme = useTheme(); diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx index 9d09c246a5..cd69da5d1c 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Data/index.tsx @@ -12,7 +12,6 @@ * This file is part of the Antares project. */ -import { ComponentType } from "react"; import Text from "./Text"; import Unsupported from "./Unsupported"; import Matrix from "./Matrix"; @@ -22,8 +21,8 @@ import { getEffectiveFileType, type FileInfo, type FileType, + type DataCompProps, } from "../utils"; -import type { DataCompProps } from "../utils"; import ViewWrapper from "../../../../../common/page/ViewWrapper"; import type { StudyMetadata } from "../../../../../../common/types"; import Json from "./Json"; @@ -34,7 +33,7 @@ interface Props extends FileInfo { reloadTreeData: () => void; } -const componentByFileType: Record> = { +const componentByFileType: Record> = { matrix: Matrix, json: Json, text: Text, diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Tree/FileTreeItem.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Tree/FileTreeItem.tsx index dbc52c5a9f..5e2cf303e9 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Tree/FileTreeItem.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Tree/FileTreeItem.tsx @@ -13,7 +13,7 @@ */ import { Box } from "@mui/material"; -import { TreeData, getFileType, getFileIcon, isFolder } from "../utils"; +import { getFileType, getFileIcon, isFolder, type TreeData } from "../utils"; import DebugContext from "../DebugContext"; import { useContext } from "react"; import TreeItemEnhanced from "../../../../../common/TreeItemEnhanced"; diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/Tree/index.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/Tree/index.tsx index 417ef33b4f..7a51a19be4 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/Tree/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/Tree/index.tsx @@ -32,10 +32,7 @@ function Tree(props: Props) { // Event Handlers //////////////////////////////////////////////////////////////// - const handleExpandedItemsChange = ( - event: React.SyntheticEvent, - itemIds: string[], - ) => { + const handleExpandedItemsChange = (event: React.SyntheticEvent, itemIds: string[]) => { setExpandedItems(itemIds); }; @@ -59,12 +56,7 @@ function Tree(props: Props) { onExpandedItemsChange={handleExpandedItemsChange} > {Object.keys(data).map((filename) => ( - + ))} ); diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/index.tsx b/webapp/src/components/App/Singlestudy/explore/Debug/index.tsx index 953219eb98..eb081d8cfe 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Debug/index.tsx @@ -18,17 +18,12 @@ import { useOutletContext, useSearchParams } from "react-router-dom"; import { Box } from "@mui/material"; import Tree from "./Tree"; import Data from "./Data"; -import { StudyMetadata } from "../../../../../common/types"; +import type { StudyMetadata } from "../../../../../common/types"; import UsePromiseCond from "../../../../common/utils/UsePromiseCond"; import usePromiseWithSnackbarError from "../../../../../hooks/usePromiseWithSnackbarError"; import { getStudyData } from "../../../../../services/api/study"; import DebugContext from "./DebugContext"; -import { - getFileType, - type TreeData, - type FileInfo, - type TreeFolder, -} from "./utils"; +import { getFileType, type TreeData, type FileInfo, type TreeFolder } from "./utils"; import * as R from "ramda"; import SplitView from "../../../../common/SplitView"; import { useUpdateEffect } from "react-use"; @@ -66,9 +61,7 @@ function Debug() { const firstChildTreeData = R.path([firstChildName], res.data); const pathInUrlParts = pathInUrl?.split("/"); - const urlPathTreeData = pathInUrlParts - ? R.path(pathInUrlParts, res.data) - : null; + const urlPathTreeData = pathInUrlParts ? R.path(pathInUrlParts, res.data) : null; let fileInfo: FileInfo | null = null; diff --git a/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts b/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts index d546a1e4dc..0266a1331d 100644 --- a/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Debug/utils.ts @@ -17,10 +17,10 @@ import TextSnippetIcon from "@mui/icons-material/TextSnippet"; import BlockIcon from "@mui/icons-material/Block"; import FolderIcon from "@mui/icons-material/Folder"; import DatasetIcon from "@mui/icons-material/Dataset"; -import { SvgIconComponent } from "@mui/icons-material"; +import type { SvgIconComponent } from "@mui/icons-material"; import * as RA from "ramda-adjunct"; import type { StudyMetadata } from "../../../../../common/types"; -import { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; +import type { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; //////////////////////////////////////////////////////////////// // Types @@ -65,14 +65,7 @@ const URL_SCHEMES = { FILE: "file://", } as const; -const SUPPORTED_EXTENSIONS = [ - ".txt", - ".log", - ".csv", - ".tsv", - ".ini", - ".yml", -] as const; +const SUPPORTED_EXTENSIONS = [".txt", ".log", ".csv", ".tsv", ".ini", ".yml"] as const; // Maps file types to their corresponding icon components. const iconByFileType: Record = { @@ -126,9 +119,7 @@ export function getFileType(treeData: TreeData): FileType { // We filter to only allow extensions that can be properly displayed (.txt, .log, .csv, .tsv, .ini) // Other extensions (like .RDS or .xlsx) are marked as unsupported since they can't be shown in the UI return treeData.startsWith(URL_SCHEMES.FILE) && - SUPPORTED_EXTENSIONS.some((ext) => - treeData.toLowerCase().endsWith(ext.toLowerCase()), - ) + SUPPORTED_EXTENSIONS.some((ext) => treeData.toLowerCase().endsWith(ext.toLowerCase())) ? "text" : "unsupported"; } @@ -170,9 +161,7 @@ export function isInOutputFolder(path: string): boolean { */ export function isEmptyContent(text: string | string[]): boolean { if (Array.isArray(text)) { - return ( - !text || text.every((line) => typeof line === "string" && !line.trim()) - ); + return !text || text.every((line) => typeof line === "string" && !line.trim()); } return typeof text === "string" && !text.trim(); @@ -209,10 +198,7 @@ export function isEmptyContent(text: string | string[]): boolean { * @param originalType - Original file type as determined by the system * @returns Modified file type (forces 'text' for matrices in output folders) */ -export function getEffectiveFileType( - filePath: string, - originalType: FileType, -): FileType { +export function getEffectiveFileType(filePath: string, originalType: FileType): FileType { if (isInOutputFolder(filePath) && originalType === "matrix") { return "text"; } @@ -227,9 +213,7 @@ export function getEffectiveFileType( * @returns String representation of the matrix */ function formatMatrixToString(matrix: number[][]): string { - return matrix - .map((row) => row.map((val) => val.toString()).join("\t")) - .join("\n"); + return matrix.map((row) => row.map((val) => val.toString()).join("\t")).join("\n"); } /** @@ -248,13 +232,11 @@ function parseResponse(res: string | MatrixDataDTO): string { try { // Handle case where API returns unparsed JSON string // Replace special numeric values with their string representations - const sanitizedJson = res - .replace(/NaN/g, '"NaN"') - .replace(/Infinity/g, '"Infinity"'); + const sanitizedJson = res.replace(/NaN/g, '"NaN"').replace(/Infinity/g, '"Infinity"'); const parsed = JSON.parse(sanitizedJson); return formatMatrixToString(parsed.data); - } catch (e) { + } catch { // If JSON parsing fails, assume it's plain text return res; } @@ -267,10 +249,7 @@ function parseResponse(res: string | MatrixDataDTO): string { * @param options - Configuration options including file path and type * @returns Processed content ready for display */ -export function parseContent( - content: string, - options: ContentParsingOptions, -): string { +export function parseContent(content: string, options: ContentParsingOptions): string { const { filePath, fileType } = options; if (isInOutputFolder(filePath) && fileType === "matrix") { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/AreaPropsView.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/AreaPropsView.tsx index feb39df236..808036abf9 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/AreaPropsView.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/AreaPropsView.tsx @@ -13,7 +13,7 @@ */ import { useEffect, useState } from "react"; -import { Area } from "../../../../../../common/types"; +import type { Area } from "../../../../../../common/types"; import PropertiesView from "../../../../../common/PropertiesView"; import useAppSelector from "../../../../../../redux/hooks/useAppSelector"; import { getAreas } from "../../../../../../redux/selectors"; @@ -35,9 +35,7 @@ function AreaPropsView(props: PropsType) { const filter = (): Area[] => { if (areas) { return areas.filter( - (s) => - !areaNameFilter || - s.name.search(new RegExp(areaNameFilter, "i")) !== -1, + (s) => !areaNameFilter || s.name.search(new RegExp(areaNameFilter, "i")) !== -1, ); } return []; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/AreasTab.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/AreasTab.tsx index 508e75705a..f2be85e33d 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/AreasTab.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/AreasTab.tsx @@ -15,7 +15,7 @@ import { useEffect, useMemo } from "react"; import { useLocation, useNavigate, useOutletContext } from "react-router-dom"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import TabWrapper from "../../TabWrapper"; import useAppSelector from "../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../redux/selectors"; @@ -55,9 +55,7 @@ function AreasTab({ renewablesClustering }: Props) { }, [areaId, navigate, location.pathname]); const tabList = useMemo(() => { - const basePath = `/studies/${ - study.id - }/explore/modelization/area/${encodeURI(areaId)}`; + const basePath = `/studies/${study.id}/explore/modelization/area/${encodeURI(areaId)}`; const tabs = [ { label: "study.modelization.properties", pathSuffix: "properties" }, diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/AllocationField.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/AllocationField.tsx index b95d995a48..89556d66e2 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/AllocationField.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/AllocationField.tsx @@ -13,10 +13,10 @@ */ import { Typography, Grid } from "@mui/material"; -import { FieldArrayWithId } from "react-hook-form"; +import type { FieldArrayWithId } from "react-hook-form"; import NumberFE from "../../../../../../../common/fieldEditors/NumberFE"; import { useFormContextPlus } from "../../../../../../../common/Form"; -import { AllocationFormFields } from "./utils"; +import type { AllocationFormFields } from "./utils"; import { validateNumber } from "@/utils/validation/number"; interface Props { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/Fields.tsx index ce708a4771..bc3a9e3b5e 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/Fields.tsx @@ -15,12 +15,12 @@ import { useFieldArray } from "react-hook-form"; import { useOutletContext } from "react-router"; import { useFormContextPlus } from "../../../../../../../common/Form"; -import { AllocationFormFields } from "./utils"; +import type { AllocationFormFields } from "./utils"; import AllocationField from "./AllocationField"; import DynamicList from "../../../../../../../common/DynamicList"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; import { getAreasById } from "../../../../../../../../redux/selectors"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import { useAreasOptions } from "../hooks/useAreasOptions"; function Fields() { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/index.tsx index fc50dff4a8..e487c1b679 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/index.tsx @@ -17,15 +17,15 @@ import { useOutletContext } from "react-router"; import { useState } from "react"; import Form from "../../../../../../../common/Form"; import Fields from "./Fields"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../../redux/selectors"; import { - AllocationFormFields, getAllocationFormFields, setAllocationFormFields, + type AllocationFormFields, } from "./utils"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; import HydroMatrixDialog from "../HydroMatrixDialog"; import { HydroMatrix } from "../utils"; import { FormBox, FormPaper } from "../style"; @@ -56,8 +56,7 @@ function Allocation() { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/utils.ts index 5d5d054a11..281646e233 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Allocation/utils.ts @@ -12,10 +12,10 @@ * This file is part of the Antares project. */ -import { StudyMetadata, Area } from "../../../../../../../../common/types"; +import type { StudyMetadata, Area } from "../../../../../../../../common/types"; import client from "../../../../../../../../services/api/client"; -import { MatrixDataDTO } from "../../../../../../../common/Matrix/shared/types"; -import { AreaCoefficientItem } from "../utils"; +import type { MatrixDataDTO } from "../../../../../../../common/Matrix/shared/types"; +import type { AreaCoefficientItem } from "../utils"; //////////////////////////////////////////////////////////////// // Types @@ -29,10 +29,7 @@ export interface AllocationFormFields { // Utils //////////////////////////////////////////////////////////////// -function makeRequestURL( - studyId: StudyMetadata["id"], - areaId: Area["name"], -): string { +function makeRequestURL(studyId: StudyMetadata["id"], areaId: Area["name"]): string { return `v1/studies/${studyId}/areas/${areaId}/hydro/allocation/form`; } @@ -53,11 +50,7 @@ export async function setAllocationFormFields( return res.data; } -export const getAllocationMatrix = async ( - studyId: StudyMetadata["id"], -): Promise => { - const res = await client.get( - `v1/studies/${studyId}/areas/hydro/allocation/matrix`, - ); +export const getAllocationMatrix = async (studyId: StudyMetadata["id"]): Promise => { + const res = await client.get(`v1/studies/${studyId}/areas/hydro/allocation/matrix`); return res.data; }; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/CorrelationField.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/CorrelationField.tsx index 0dd9f41016..cd66057cd4 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/CorrelationField.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/CorrelationField.tsx @@ -13,10 +13,10 @@ */ import { Typography, Grid } from "@mui/material"; -import { FieldArrayWithId } from "react-hook-form"; +import type { FieldArrayWithId } from "react-hook-form"; import { useTranslation } from "react-i18next"; import NumberFE from "../../../../../../../common/fieldEditors/NumberFE"; -import { CorrelationFormFields } from "./utils"; +import type { CorrelationFormFields } from "./utils"; import { useFormContextPlus } from "../../../../../../../common/Form"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; import { getCurrentArea } from "../../../../../../../../redux/selectors"; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/Fields.tsx index 60a99464c7..c4132cf931 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/Fields.tsx @@ -14,17 +14,14 @@ import { useFieldArray } from "react-hook-form"; import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; -import { - getAreasById, - getCurrentArea, -} from "../../../../../../../../redux/selectors"; +import { getAreasById, getCurrentArea } from "../../../../../../../../redux/selectors"; import DynamicList from "../../../../../../../common/DynamicList"; import { useFormContextPlus } from "../../../../../../../common/Form"; import { useAreasOptions } from "../hooks/useAreasOptions"; import CorrelationField from "./CorrelationField"; -import { CorrelationFormFields } from "./utils"; +import type { CorrelationFormFields } from "./utils"; function Fields() { const { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/index.tsx index df566ba68d..85d66fc4e7 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/index.tsx @@ -16,14 +16,14 @@ import { Grid } from "@mui/material"; import { useOutletContext } from "react-router"; import { useState } from "react"; import Form from "../../../../../../../common/Form"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../../redux/selectors"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; import { - CorrelationFormFields, getCorrelationFormFields, setCorrelationFormFields, + type CorrelationFormFields, } from "./utils"; import Fields from "./Fields"; import HydroMatrixDialog from "../HydroMatrixDialog"; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/utils.ts index 253963b1c6..ec86504d3a 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/Correlation/utils.ts @@ -12,10 +12,10 @@ * This file is part of the Antares project. */ -import { StudyMetadata, Area } from "../../../../../../../../common/types"; +import type { StudyMetadata, Area } from "../../../../../../../../common/types"; import client from "../../../../../../../../services/api/client"; -import { MatrixDataDTO } from "../../../../../../../common/Matrix/shared/types"; -import { AreaCoefficientItem } from "../utils"; +import type { MatrixDataDTO } from "../../../../../../../common/Matrix/shared/types"; +import type { AreaCoefficientItem } from "../utils"; //////////////////////////////////////////////////////////////// // Types @@ -29,10 +29,7 @@ export interface CorrelationFormFields { // Utils //////////////////////////////////////////////////////////////// -function makeRequestURL( - studyId: StudyMetadata["id"], - areaId: Area["name"], -): string { +function makeRequestURL(studyId: StudyMetadata["id"], areaId: Area["name"]): string { return `v1/studies/${studyId}/areas/${areaId}/hydro/correlation/form`; } @@ -53,11 +50,7 @@ export async function setCorrelationFormFields( return res.data; } -export async function getCorrelationMatrix( - studyId: StudyMetadata["id"], -): Promise { - const res = await client.get( - `v1/studies/${studyId}/areas/hydro/correlation/matrix`, - ); +export async function getCorrelationMatrix(studyId: StudyMetadata["id"]): Promise { + const res = await client.get(`v1/studies/${studyId}/areas/hydro/correlation/matrix`); return res.data; } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/HydroMatrix.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/HydroMatrix.tsx index 62751dae44..9423a4070a 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/HydroMatrix.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/HydroMatrix.tsx @@ -14,7 +14,7 @@ import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../redux/selectors"; -import { MATRICES, HydroMatrixType } from "./utils"; +import { MATRICES, type HydroMatrixType } from "./utils"; import Matrix from "../../../../../../common/Matrix"; import { Box } from "@mui/material"; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/HydroMatrixDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/HydroMatrixDialog.tsx index 67a1cb5649..296f6e1c10 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/HydroMatrixDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/HydroMatrixDialog.tsx @@ -15,18 +15,16 @@ import { Button, Box, Skeleton } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useState, useEffect } from "react"; -import BasicDialog, { - BasicDialogProps, -} from "../../../../../../common/dialogs/BasicDialog"; +import BasicDialog, { type BasicDialogProps } from "../../../../../../common/dialogs/BasicDialog"; import Matrix from "../../../../../../common/Matrix"; -import { HydroMatrixType } from "./utils"; +import type { HydroMatrixType } from "./utils"; import { getAllocationMatrix } from "./Allocation/utils"; import { getCorrelationMatrix } from "./Correlation/utils"; import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../../common/types"; -import { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; +import type { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; import useEnqueueErrorSnackbar from "@/hooks/useEnqueueErrorSnackbar"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; interface AdaptedMatrixData { data: number[][]; @@ -73,9 +71,7 @@ function HydroMatrixDialog({ open, onClose, type }: Props) { const { study } = useOutletContext<{ study: StudyMetadata }>(); const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); const fetchFn = MATRIX_FETCHERS[type as keyof typeof MATRIX_FETCHERS]; - const [matrix, setMatrix] = useState( - undefined, - ); + const [matrix, setMatrix] = useState(undefined); const matrixModelAdapter = (apiData: MatrixDataDTO): AdaptedMatrixData => ({ data: apiData.data, diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/InflowStructure/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/InflowStructure/index.tsx index d63487a116..767c2ea3e6 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/InflowStructure/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/InflowStructure/index.tsx @@ -13,7 +13,7 @@ */ import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../../redux/selectors"; import Form from "../../../../../../../common/Form"; @@ -23,7 +23,7 @@ import { updateInflowStructureFields, } from "./utils"; import NumberFE from "../../../../../../../common/fieldEditors/NumberFE"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; import { useTranslation } from "react-i18next"; function InflowStructure() { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/ManagementOptions/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/ManagementOptions/Fields.tsx index 91d3cdb6ee..52d06daaec 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/ManagementOptions/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/ManagementOptions/Fields.tsx @@ -17,16 +17,16 @@ import SelectFE from "../../../../../../../common/fieldEditors/SelectFE"; import SwitchFE from "../../../../../../../common/fieldEditors/SwitchFE"; import Fieldset from "../../../../../../../common/Fieldset"; import { useFormContextPlus } from "../../../../../../../common/Form"; -import { INITIALIZE_RESERVOIR_DATE_OPTIONS, HydroFormFields } from "./utils"; +import { INITIALIZE_RESERVOIR_DATE_OPTIONS, type HydroFormFields } from "./utils"; function Fields() { const { control, watch } = useFormContextPlus(); - const [ - reservoirDisabled, - waterValuesDisabled, - heuristicDisabled, - leeWayDisabled, - ] = watch(["reservoir", "useWater", "useHeuristic", "useLeeway"]); + const [reservoirDisabled, waterValuesDisabled, heuristicDisabled, leeWayDisabled] = watch([ + "reservoir", + "useWater", + "useHeuristic", + "useLeeway", + ]); return ( <> @@ -37,23 +37,11 @@ function Fields() { control={control} sx={{ alignSelf: "center" }} /> - - + +
    - + ({ label: options[0], @@ -73,10 +71,7 @@ export interface HydroFormFields { // Utils //////////////////////////////////////////////////////////////// -function makeRequestURL( - studyId: StudyMetadata["id"], - areaId: Area["name"], -): string { +function makeRequestURL(studyId: StudyMetadata["id"], areaId: Area["name"]): string { return `v1/studies/${studyId}/areas/${areaId}/hydro/form`; } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/SplitHydroMatrix.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/SplitHydroMatrix.tsx index 1adbc4e2b9..367db7d6a0 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/SplitHydroMatrix.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/SplitHydroMatrix.tsx @@ -13,9 +13,9 @@ */ import { Box } from "@mui/material"; -import SplitView, { SplitViewProps } from "../../../../../../common/SplitView"; +import SplitView, { type SplitViewProps } from "../../../../../../common/SplitView"; import HydroMatrix from "./HydroMatrix"; -import { HydroMatrixType } from "./utils"; +import type { HydroMatrixType } from "./utils"; interface Props { types: [HydroMatrixType, HydroMatrixType]; @@ -32,11 +32,7 @@ function SplitHydroMatrix({ types, direction, sizes, form: Form }: Props) {
    )} - + diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/ViewMatrixButton.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/ViewMatrixButton.tsx index e049eec4c2..dcc172f6ea 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/ViewMatrixButton.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/ViewMatrixButton.tsx @@ -24,12 +24,7 @@ function ViewMatrixButton({ label, onClick }: Props) { const { t } = useTranslation(); return ( - ); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/hooks/useAreasOptions.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/hooks/useAreasOptions.ts index 611c671625..be85c6eb4c 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/hooks/useAreasOptions.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/hooks/useAreasOptions.ts @@ -14,15 +14,13 @@ import { useMemo } from "react"; import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; import { getAreas } from "../../../../../../../../redux/selectors"; -import { DynamicListProps } from "../../../../../../../common/DynamicList"; -import { AreaCoefficientItem } from "../utils"; +import type { DynamicListProps } from "../../../../../../../common/DynamicList"; +import type { AreaCoefficientItem } from "../utils"; -export function useAreasOptions( - fields: AreaCoefficientItem[], -): DynamicListProps["options"] { +export function useAreasOptions(fields: AreaCoefficientItem[]): DynamicListProps["options"] { const { study: { id: studyId }, } = useOutletContext<{ study: StudyMetadata }>(); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/index.tsx index 215b3b5954..ed05cde5e2 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/index.tsx @@ -14,7 +14,7 @@ import { useMemo } from "react"; import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import TabWrapper from "../../../TabWrapper"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../redux/selectors"; @@ -25,9 +25,7 @@ function Hydro() { const studyVersion = parseInt(study.version, 10); const tabList = useMemo(() => { - const basePath = `/studies/${study?.id}/explore/modelization/area/${encodeURI( - areaId, - )}/hydro`; + const basePath = `/studies/${study?.id}/explore/modelization/area/${encodeURI(areaId)}/hydro`; return [ { label: "Management options", path: `${basePath}/management` }, @@ -50,9 +48,7 @@ function Hydro() { // JSX //////////////////////////////////////////////////////////////// - return ( - - ); + return ; } export default Hydro; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/style.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/style.ts index b329679cc6..3fdc1864f8 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/style.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/style.ts @@ -22,6 +22,5 @@ export const FormBox = styled(Box)(({ theme }) => ({ })); export const FormPaper = styled(Paper)(() => ({ - backgroundImage: - "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", + backgroundImage: "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", })); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/utils.ts index 174fb7cd76..bf8091cdd7 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Hydro/utils.ts @@ -12,11 +12,8 @@ * This file is part of the Antares project. */ -import { - MatrixDataDTO, - AggregateConfig, -} from "../../../../../../common/Matrix/shared/types"; -import { SplitViewProps } from "../../../../../../common/SplitView"; +import type { MatrixDataDTO, AggregateConfig } from "../../../../../../common/Matrix/shared/types"; +import type { SplitViewProps } from "../../../../../../common/SplitView"; import { getAllocationMatrix } from "./Allocation/utils"; import { getCorrelationMatrix } from "./Correlation/utils"; import InflowStructure from "./InflowStructure"; @@ -175,13 +172,7 @@ export const MATRICES: Matrices = { [HydroMatrix.OverallMonthlyHydro]: { title: "Overall Monthly Hydro", url: "input/hydro/prepro/{areaId}/energy", - columns: [ - "Expectation (MWh)", - "Std Deviation (MWh)", - "Min. (MWh)", - "Max. (MWh)", - "ROR Share", - ], + columns: ["Expectation (MWh)", "Std Deviation (MWh)", "Min. (MWh)", "Max. (MWh)", "ROR Share"], rowHeaders: [ "January", "February", diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/MiscGen.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/MiscGen.tsx index 8cdf4946af..4a821d7d39 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/MiscGen.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/MiscGen.tsx @@ -34,9 +34,7 @@ function MiscGen() { // JSX //////////////////////////////////////////////////////////////// - return ( - - ); + return ; } export default MiscGen; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/Fields.tsx index 7055f2e792..dc12de19f7 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/Fields.tsx @@ -20,8 +20,8 @@ import Fieldset from "../../../../../../common/Fieldset"; import SwitchFE from "../../../../../../common/fieldEditors/SwitchFE"; import NumberFE from "../../../../../../common/fieldEditors/NumberFE"; import { useFormContextPlus } from "../../../../../../common/Form"; -import { ADEQUACY_PATCH_OPTIONS, PropertiesFormFields } from "./utils"; -import { StudyMetadata } from "../../../../../../../common/types"; +import { ADEQUACY_PATCH_OPTIONS, type PropertiesFormFields } from "./utils"; +import type { StudyMetadata } from "../../../../../../../common/types"; function Fields() { const { t } = useTranslation(); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/index.tsx index d654ba80c7..d2feafe93b 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/index.tsx @@ -14,17 +14,17 @@ import { Paper } from "@mui/material"; import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../redux/selectors"; import Form from "../../../../../../common/Form"; import { - PropertiesFormFields, getPropertiesFormFields, setPropertiesFormFields, + type PropertiesFormFields, } from "./utils"; import Fields from "./Fields"; -import { SubmitHandlerPlus } from "../../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../../common/Form/types"; function Properties() { const { study } = useOutletContext<{ study: StudyMetadata }>(); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/utils.ts index 5eef82d3f7..635588badf 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Properties/utils.ts @@ -16,8 +16,8 @@ // Enums //////////////////////////////////////////////////////////////// -import { DeepPartial } from "redux"; -import { Area, StudyMetadata } from "../../../../../../../common/types"; +import type { DeepPartial } from "redux"; +import type { Area, StudyMetadata } from "../../../../../../../common/types"; import client from "../../../../../../../services/api/client"; enum AdequacyPatchMode { @@ -55,10 +55,7 @@ export const ADEQUACY_PATCH_OPTIONS = Object.values(AdequacyPatchMode); // Functions //////////////////////////////////////////////////////////////// -function makeRequestURL( - studyId: StudyMetadata["id"], - areaId: Area["name"], -): string { +function makeRequestURL(studyId: StudyMetadata["id"], areaId: Area["name"]): string { return `/v1/studies/${studyId}/areas/${areaId}/properties/form`; } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Fields.tsx index 0ee371d7fa..fae54b8e93 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Fields.tsx @@ -19,11 +19,7 @@ import StringFE from "../../../../../../common/fieldEditors/StringFE"; import SwitchFE from "../../../../../../common/fieldEditors/SwitchFE"; import Fieldset from "../../../../../../common/Fieldset"; import { useFormContextPlus } from "../../../../../../common/Form"; -import { - RENEWABLE_GROUPS, - RenewableCluster, - TS_INTERPRETATION_OPTIONS, -} from "./utils"; +import { RENEWABLE_GROUPS, TS_INTERPRETATION_OPTIONS, type RenewableCluster } from "./utils"; function Fields() { const [t] = useTranslation(); @@ -36,12 +32,7 @@ function Fields() { return ( <>
    - + ) => { + const handleSubmit = ({ dirtyValues }: SubmitHandlerPlus) => { return updateRenewableCluster(study.id, areaId, clusterId, dirtyValues); }; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Matrix.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Matrix.tsx index 47ff9dcf82..7007da07bd 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Matrix.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/Matrix.tsx @@ -12,7 +12,7 @@ * This file is part of the Antares project. */ -import { Cluster } from "../../../../../../../common/types"; +import type { Cluster } from "../../../../../../../common/types"; import Matrix from "../../../../../../common/Matrix"; interface Props { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/index.tsx index 873774c391..87b8ec5032 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/index.tsx @@ -17,15 +17,15 @@ import { createMRTColumnHelper } from "material-react-table"; import { Box } from "@mui/material"; import { useLocation, useNavigate, useOutletContext } from "react-router-dom"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import { RENEWABLE_GROUPS, - RenewableGroup, createRenewableCluster, deleteRenewableClusters, duplicateRenewableCluster, getRenewableClusters, type RenewableClusterWithCapacity, + type RenewableGroup, } from "./utils"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../redux/selectors"; @@ -36,7 +36,7 @@ import { getClustersWithCapacityTotals, toCapacityString, } from "../common/clustersUtils"; -import { TRow } from "../../../../../../common/GroupedDataTable/types"; +import type { TRow } from "../../../../../../common/GroupedDataTable/types"; import BooleanCell from "../../../../../../common/GroupedDataTable/cellRenderers/BooleanCell"; import usePromiseWithSnackbarError from "../../../../../../../hooks/usePromiseWithSnackbarError"; @@ -49,26 +49,24 @@ function Renewables() { const location = useLocation(); const areaId = useAppSelector(getCurrentAreaId); - const { data: clustersWithCapacity = [], isLoading } = - usePromiseWithSnackbarError( - async () => { - const clusters = await getRenewableClusters(study.id, areaId); - return clusters?.map(addClusterCapacity); - }, - { - resetDataOnReload: true, - errorMessage: t("studies.error.retrieveData"), - deps: [study.id, areaId], - }, - ); - - const [totals, setTotals] = useState( - getClustersWithCapacityTotals(clustersWithCapacity), + const { data: clustersWithCapacity = [], isLoading } = usePromiseWithSnackbarError< + RenewableClusterWithCapacity[] + >( + async () => { + const clusters = await getRenewableClusters(study.id, areaId); + return clusters?.map(addClusterCapacity); + }, + { + resetDataOnReload: true, + errorMessage: t("studies.error.retrieveData"), + deps: [study.id, areaId], + }, ); + const [totals, setTotals] = useState(getClustersWithCapacityTotals(clustersWithCapacity)); + const columns = useMemo(() => { - const { totalUnitCount, totalEnabledCapacity, totalInstalledCapacity } = - totals; + const { totalUnitCount, totalEnabledCapacity, totalInstalledCapacity } = totals; return [ columnHelper.accessor("enabled", { @@ -86,9 +84,7 @@ function Renewables() { size: 50, aggregationFn: "sum", AggregatedCell: ({ cell }) => ( - - {cell.getValue()} - + {cell.getValue()} ), Footer: () => {totalUnitCount}, }), @@ -97,24 +93,19 @@ function Renewables() { size: 220, Cell: ({ cell }) => cell.getValue().toFixed(1), }), - columnHelper.accessor( - (row) => toCapacityString(row.enabledCapacity, row.installedCapacity), - { - header: "Enabled / Installed (MW)", - size: 220, - aggregationFn: capacityAggregationFn(), - AggregatedCell: ({ cell }) => ( - - {cell.getValue()} - - ), - Footer: () => ( - - {toCapacityString(totalEnabledCapacity, totalInstalledCapacity)} - - ), - }, - ), + columnHelper.accessor((row) => toCapacityString(row.enabledCapacity, row.installedCapacity), { + header: "Enabled / Installed (MW)", + size: 220, + aggregationFn: capacityAggregationFn(), + AggregatedCell: ({ cell }) => ( + {cell.getValue()} + ), + Footer: () => ( + + {toCapacityString(totalEnabledCapacity, totalInstalledCapacity)} + + ), + }), ]; }, [totals]); @@ -127,16 +118,8 @@ function Renewables() { return addClusterCapacity(cluster); }; - const handleDuplicate = async ( - row: RenewableClusterWithCapacity, - newName: string, - ) => { - const cluster = await duplicateRenewableCluster( - study.id, - areaId, - row.id, - newName, - ); + const handleDuplicate = async (row: RenewableClusterWithCapacity, newName: string) => { + const cluster = await duplicateRenewableCluster(study.id, areaId, row.id, newName); return { ...row, ...cluster }; }; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/utils.ts index f3e2520aa2..68686f3487 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Renewables/utils.ts @@ -12,11 +12,7 @@ * This file is part of the Antares project. */ -import { - Area, - Cluster, - StudyMetadata, -} from "../../../../../../../common/types"; +import type { Area, Cluster, StudyMetadata } from "../../../../../../../common/types"; import client from "../../../../../../../services/api/client"; import type { PartialExceptFor } from "../../../../../../../utils/tsUtils"; import type { ClusterWithCapacity } from "../common/clustersUtils"; @@ -37,10 +33,7 @@ export const RENEWABLE_GROUPS = [ "Other RES 4", ] as const; -export const TS_INTERPRETATION_OPTIONS = [ - "power-generation", - "production-factor", -] as const; +export const TS_INTERPRETATION_OPTIONS = ["power-generation", "production-factor"] as const; //////////////////////////////////////////////////////////////// // Types @@ -69,17 +62,14 @@ export interface RenewableCluster { nominalCapacity: number; } -export type RenewableClusterWithCapacity = - ClusterWithCapacity; +export type RenewableClusterWithCapacity = ClusterWithCapacity; //////////////////////////////////////////////////////////////// // Functions //////////////////////////////////////////////////////////////// -const getClustersUrl = ( - studyId: StudyMetadata["id"], - areaId: Area["name"], -): string => `/v1/studies/${studyId}/areas/${areaId}/clusters/renewable`; +const getClustersUrl = (studyId: StudyMetadata["id"], areaId: Area["name"]): string => + `/v1/studies/${studyId}/areas/${areaId}/clusters/renewable`; const getClusterUrl = ( studyId: StudyMetadata["id"], @@ -91,13 +81,8 @@ const getClusterUrl = ( // API //////////////////////////////////////////////////////////////// -export async function getRenewableClusters( - studyId: StudyMetadata["id"], - areaId: Area["name"], -) { - const res = await client.get( - getClustersUrl(studyId, areaId), - ); +export async function getRenewableClusters(studyId: StudyMetadata["id"], areaId: Area["name"]) { + const res = await client.get(getClustersUrl(studyId, areaId)); return res.data; } @@ -106,9 +91,7 @@ export async function getRenewableCluster( areaId: Area["name"], clusterId: Cluster["id"], ) { - const res = await client.get( - getClusterUrl(studyId, areaId, clusterId), - ); + const res = await client.get(getClusterUrl(studyId, areaId, clusterId)); return res.data; } @@ -118,10 +101,7 @@ export async function updateRenewableCluster( clusterId: Cluster["id"], data: Partial, ) { - const res = await client.patch( - getClusterUrl(studyId, areaId, clusterId), - data, - ); + const res = await client.patch(getClusterUrl(studyId, areaId, clusterId), data); return res.data; } @@ -130,10 +110,7 @@ export async function createRenewableCluster( areaId: Area["name"], data: PartialExceptFor, ) { - const res = await client.post( - getClustersUrl(studyId, areaId), - data, - ); + const res = await client.post(getClustersUrl(studyId, areaId), data); return res.data; } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Reserve.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Reserve.tsx index 926286613e..504651c991 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Reserve.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Reserve.tsx @@ -19,20 +19,13 @@ import Matrix from "../../../../../common/Matrix"; function Reserve() { const currentArea = useAppSelector(getCurrentAreaId); const url = `input/reserves/${currentArea}`; - const columns = [ - "Primary Res. (draft)", - "Strategic Res. (draft)", - "DSM", - "Day Ahead", - ]; + const columns = ["Primary Res. (draft)", "Strategic Res. (draft)", "DSM", "Day Ahead"]; //////////////////////////////////////////////////////////////// // JSX //////////////////////////////////////////////////////////////// - return ( - - ); + return ; } export default Reserve; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Fields.tsx index 62f351772a..ed45c66907 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Fields.tsx @@ -20,9 +20,9 @@ import StringFE from "../../../../../../common/fieldEditors/StringFE"; import SwitchFE from "../../../../../../common/fieldEditors/SwitchFE"; import Fieldset from "../../../../../../common/Fieldset"; import { useFormContextPlus } from "../../../../../../common/Form"; -import { STORAGE_GROUPS, Storage } from "./utils"; +import { STORAGE_GROUPS, type Storage } from "./utils"; import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import { validateNumber } from "@/utils/validation/number"; function Fields() { @@ -38,12 +38,7 @@ function Fields() { return ( <>
    - + diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Form.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Form.tsx index 22899502df..576bf3e439 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Form.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Form.tsx @@ -18,13 +18,13 @@ import { useParams, useOutletContext, useNavigate } from "react-router-dom"; import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import { useTranslation } from "react-i18next"; import * as RA from "ramda-adjunct"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import Form from "../../../../../../common/Form"; import Fields from "./Fields"; -import { SubmitHandlerPlus } from "../../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../../common/Form/types"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../redux/selectors"; -import { Storage, getStorage, updateStorage } from "./utils"; +import { getStorage, updateStorage, type Storage } from "./utils"; import Matrix from "./Matrix"; import useNavigateOnCondition from "../../../../../../../hooks/useNavigateOnCondition"; import { nameToId } from "../../../../../../../services/utils"; @@ -104,11 +104,7 @@ function Storages() { height: "70vh", }} > - + diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Matrix.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Matrix.tsx index 424d482b57..c4dc9d7efe 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Matrix.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/Matrix.tsx @@ -17,11 +17,8 @@ import Tabs from "@mui/material/Tabs"; import Tab from "@mui/material/Tab"; import Box from "@mui/material/Box"; import { useTranslation } from "react-i18next"; -import { - type MatrixItem, - type StudyMetadata, -} from "../../../../../../../common/types"; -import { Storage } from "./utils"; +import { type MatrixItem, type StudyMetadata } from "../../../../../../../common/types"; +import type { Storage } from "./utils"; import SplitView from "../../../../../../common/SplitView"; import Matrix from "../../../../../../common/Matrix"; @@ -114,10 +111,7 @@ function StorageMatrices({ areaId, storageId }: Props) { > {content.matrices.map(({ url, titleKey }) => ( - + ))} @@ -125,9 +119,7 @@ function StorageMatrices({ areaId, storageId }: Props) { )} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/index.tsx index 9ffc3c4b27..2b378d2936 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/index.tsx @@ -17,19 +17,19 @@ import { useTranslation } from "react-i18next"; import { createMRTColumnHelper } from "material-react-table"; import { Box, Tooltip } from "@mui/material"; import { useLocation, useNavigate, useOutletContext } from "react-router-dom"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../redux/selectors"; import GroupedDataTable from "../../../../../../common/GroupedDataTable"; import { - Storage, getStorages, deleteStorages, createStorage, STORAGE_GROUPS, - StorageGroup, duplicateStorage, getStoragesTotals, + type Storage, + type StorageGroup, } from "./utils"; import usePromiseWithSnackbarError from "../../../../../../../hooks/usePromiseWithSnackbarError"; import type { TRow } from "../../../../../../common/GroupedDataTable/types"; @@ -57,8 +57,7 @@ function Storages() { const [totals, setTotals] = useState(getStoragesTotals(storages)); const columns = useMemo(() => { - const { totalInjectionNominalCapacity, totalWithdrawalNominalCapacity } = - totals; + const { totalInjectionNominalCapacity, totalWithdrawalNominalCapacity } = totals; return [ studyVersion >= 880 && @@ -70,9 +69,7 @@ function Storages() { header: t("study.modelization.storages.injectionNominalCapacity"), Header: ({ column }) => ( @@ -82,24 +79,16 @@ function Storages() { size: 100, aggregationFn: "sum", AggregatedCell: ({ cell }) => ( - - {Math.round(cell.getValue())} - + {Math.round(cell.getValue())} ), Cell: ({ cell }) => Math.round(cell.getValue()), - Footer: () => ( - - {Math.round(totalInjectionNominalCapacity)} - - ), + Footer: () => {Math.round(totalInjectionNominalCapacity)}, }), columnHelper.accessor("withdrawalNominalCapacity", { header: t("study.modelization.storages.withdrawalNominalCapacity"), Header: ({ column }) => ( @@ -109,16 +98,10 @@ function Storages() { size: 100, aggregationFn: "sum", AggregatedCell: ({ cell }) => ( - - {Math.round(cell.getValue())} - + {Math.round(cell.getValue())} ), Cell: ({ cell }) => Math.round(cell.getValue()), - Footer: () => ( - - {Math.round(totalWithdrawalNominalCapacity)} - - ), + Footer: () => {Math.round(totalWithdrawalNominalCapacity)}, }), columnHelper.accessor("reservoirCapacity", { header: t("study.modelization.storages.reservoirCapacity"), diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/utils.ts index 83bd3c60f7..4958d70822 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Storages/utils.ts @@ -12,7 +12,7 @@ * This file is part of the Antares project. */ -import { StudyMetadata, Area } from "../../../../../../../common/types"; +import type { StudyMetadata, Area } from "../../../../../../../common/types"; import client from "../../../../../../../services/api/client"; import type { PartialExceptFor } from "../../../../../../../utils/tsUtils"; @@ -70,10 +70,8 @@ export function getStoragesTotals(storages: Storage[]) { ); } -const getStoragesUrl = ( - studyId: StudyMetadata["id"], - areaId: Area["name"], -): string => `/v1/studies/${studyId}/areas/${areaId}/storages`; +const getStoragesUrl = (studyId: StudyMetadata["id"], areaId: Area["name"]): string => + `/v1/studies/${studyId}/areas/${areaId}/storages`; const getStorageUrl = ( studyId: StudyMetadata["id"], @@ -85,10 +83,7 @@ const getStorageUrl = ( // API //////////////////////////////////////////////////////////////// -export async function getStorages( - studyId: StudyMetadata["id"], - areaId: Area["name"], -) { +export async function getStorages(studyId: StudyMetadata["id"], areaId: Area["name"]) { const res = await client.get(getStoragesUrl(studyId, areaId)); return res.data; } @@ -98,9 +93,7 @@ export async function getStorage( areaId: Area["name"], storageId: Storage["id"], ) { - const res = await client.get( - getStorageUrl(studyId, areaId, storageId), - ); + const res = await client.get(getStorageUrl(studyId, areaId, storageId)); return res.data; } @@ -110,10 +103,7 @@ export async function updateStorage( storageId: Storage["id"], data: Partial, ) { - const res = await client.patch( - getStorageUrl(studyId, areaId, storageId), - data, - ); + const res = await client.patch(getStorageUrl(studyId, areaId, storageId), data); return res.data; } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Fields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Fields.tsx index 3aaf182b48..93588fc2f5 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Fields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Fields.tsx @@ -14,7 +14,7 @@ import { useTranslation } from "react-i18next"; import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import Box from "@mui/material/Box"; import NumberFE from "../../../../../../common/fieldEditors/NumberFE"; import SelectFE from "../../../../../../common/fieldEditors/SelectFE"; @@ -26,9 +26,9 @@ import { COST_GENERATION_OPTIONS, THERMAL_GROUPS, THERMAL_POLLUTANTS, - ThermalCluster, TS_GENERATION_OPTIONS, TS_LAW_OPTIONS, + type ThermalCluster, } from "./utils"; import { validateNumber } from "@/utils/validation/number"; @@ -37,8 +37,7 @@ function Fields() { const { control, watch } = useFormContextPlus(); const { study } = useOutletContext<{ study: StudyMetadata }>(); const studyVersion = Number(study.version); - const isCostGenerationEnabled = - watch("costGeneration") === "useCostTimeseries"; + const isCostGenerationEnabled = watch("costGeneration") === "useCostTimeseries"; //////////////////////////////////////////////////////////////// // JSX @@ -47,12 +46,7 @@ function Fields() { return (
    - + - + diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Matrix.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Matrix.tsx index 8d46249fac..78847079d6 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Matrix.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/Matrix.tsx @@ -17,7 +17,7 @@ import Tabs from "@mui/material/Tabs"; import Tab from "@mui/material/Tab"; import Box from "@mui/material/Box"; import { useTranslation } from "react-i18next"; -import { Cluster, StudyMetadata } from "../../../../../../../common/types"; +import type { Cluster, StudyMetadata } from "../../../../../../../common/types"; import { COMMON_MATRIX_COLS, TS_GEN_MATRIX_COLS } from "./utils"; import Matrix from "../../../../../../common/Matrix"; @@ -74,10 +74,7 @@ function ThermalMatrices({ study, areaId, clusterId }: Props) { // Filter matrix data based on the study version. const filteredMatrices = useMemo( - () => - MATRICES.filter(({ minVersion }) => - minVersion ? studyVersion >= minVersion : true, - ), + () => MATRICES.filter(({ minVersion }) => (minVersion ? studyVersion >= minVersion : true)), // eslint-disable-next-line react-hooks/exhaustive-deps [studyVersion], ); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/index.tsx index 1b71f18651..ef02bb52e2 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/index.tsx @@ -17,15 +17,15 @@ import { createMRTColumnHelper } from "material-react-table"; import { Box } from "@mui/material"; import { useLocation, useNavigate, useOutletContext } from "react-router-dom"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import { getThermalClusters, createThermalCluster, deleteThermalClusters, THERMAL_GROUPS, - ThermalGroup, duplicateThermalCluster, type ThermalClusterWithCapacity, + type ThermalGroup, } from "./utils"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaId } from "../../../../../../../redux/selectors"; @@ -36,7 +36,7 @@ import { getClustersWithCapacityTotals, toCapacityString, } from "../common/clustersUtils"; -import { TRow } from "../../../../../../common/GroupedDataTable/types"; +import type { TRow } from "../../../../../../common/GroupedDataTable/types"; import BooleanCell from "../../../../../../common/GroupedDataTable/cellRenderers/BooleanCell"; import usePromiseWithSnackbarError from "../../../../../../../hooks/usePromiseWithSnackbarError"; @@ -49,26 +49,24 @@ function Thermal() { const location = useLocation(); const areaId = useAppSelector(getCurrentAreaId); - const { data: clustersWithCapacity = [], isLoading } = - usePromiseWithSnackbarError( - async () => { - const clusters = await getThermalClusters(study.id, areaId); - return clusters?.map(addClusterCapacity); - }, - { - resetDataOnReload: true, - errorMessage: t("studies.error.retrieveData"), - deps: [study.id, areaId], - }, - ); - - const [totals, setTotals] = useState( - getClustersWithCapacityTotals(clustersWithCapacity), + const { data: clustersWithCapacity = [], isLoading } = usePromiseWithSnackbarError< + ThermalClusterWithCapacity[] + >( + async () => { + const clusters = await getThermalClusters(study.id, areaId); + return clusters?.map(addClusterCapacity); + }, + { + resetDataOnReload: true, + errorMessage: t("studies.error.retrieveData"), + deps: [study.id, areaId], + }, ); + const [totals, setTotals] = useState(getClustersWithCapacityTotals(clustersWithCapacity)); + const columns = useMemo(() => { - const { totalUnitCount, totalEnabledCapacity, totalInstalledCapacity } = - totals; + const { totalUnitCount, totalEnabledCapacity, totalInstalledCapacity } = totals; return [ columnHelper.accessor("enabled", { @@ -88,9 +86,7 @@ function Thermal() { size: 50, aggregationFn: "sum", AggregatedCell: ({ cell }) => ( - - {cell.getValue()} - + {cell.getValue()} ), Footer: () => {totalUnitCount}, }), @@ -99,24 +95,19 @@ function Thermal() { size: 220, Cell: ({ cell }) => cell.getValue().toFixed(1), }), - columnHelper.accessor( - (row) => toCapacityString(row.enabledCapacity, row.installedCapacity), - { - header: "Enabled / Installed (MW)", - size: 220, - aggregationFn: capacityAggregationFn(), - AggregatedCell: ({ cell }) => ( - - {cell.getValue()} - - ), - Footer: () => ( - - {toCapacityString(totalEnabledCapacity, totalInstalledCapacity)} - - ), - }, - ), + columnHelper.accessor((row) => toCapacityString(row.enabledCapacity, row.installedCapacity), { + header: "Enabled / Installed (MW)", + size: 220, + aggregationFn: capacityAggregationFn(), + AggregatedCell: ({ cell }) => ( + {cell.getValue()} + ), + Footer: () => ( + + {toCapacityString(totalEnabledCapacity, totalInstalledCapacity)} + + ), + }), columnHelper.accessor("marketBidCost", { header: "Market Bid (€/MWh)", size: 50, @@ -134,16 +125,8 @@ function Thermal() { return addClusterCapacity(cluster); }; - const handleDuplicate = async ( - row: ThermalClusterWithCapacity, - newName: string, - ) => { - const cluster = await duplicateThermalCluster( - study.id, - areaId, - row.id, - newName, - ); + const handleDuplicate = async (row: ThermalClusterWithCapacity, newName: string) => { + const cluster = await duplicateThermalCluster(study.id, areaId, row.id, newName); return { ...row, ...cluster }; }; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/utils.ts index 3a5895c8f6..45767a59c8 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/Thermal/utils.ts @@ -12,11 +12,7 @@ * This file is part of the Antares project. */ -import { - Area, - Cluster, - StudyMetadata, -} from "../../../../../../../common/types"; +import type { Area, Cluster, StudyMetadata } from "../../../../../../../common/types"; import client from "../../../../../../../services/api/client"; import type { PartialExceptFor } from "../../../../../../../utils/tsUtils"; import type { ClusterWithCapacity } from "../common/clustersUtils"; @@ -79,10 +75,7 @@ export const TS_GENERATION_OPTIONS = [ export const TS_LAW_OPTIONS = ["geometric", "uniform"] as const; -export const COST_GENERATION_OPTIONS = [ - "SetManually", - "useCostTimeseries", -] as const; +export const COST_GENERATION_OPTIONS = ["SetManually", "useCostTimeseries"] as const; //////////////////////////////////////////////////////////////// // Types @@ -93,9 +86,7 @@ export type ThermalGroup = (typeof THERMAL_GROUPS)[number]; type LocalTSGenerationBehavior = (typeof TS_GENERATION_OPTIONS)[number]; type TimeSeriesLawOption = (typeof TS_LAW_OPTIONS)[number]; type CostGeneration = (typeof COST_GENERATION_OPTIONS)[number]; -type ThermalPollutants = { - [K in (typeof THERMAL_POLLUTANTS)[number]]: number; -}; +type ThermalPollutants = Record<(typeof THERMAL_POLLUTANTS)[number], number>; export interface ThermalCluster extends ThermalPollutants { id: string; @@ -131,10 +122,8 @@ export type ThermalClusterWithCapacity = ClusterWithCapacity; // Functions //////////////////////////////////////////////////////////////// -const getClustersUrl = ( - studyId: StudyMetadata["id"], - areaId: Area["name"], -): string => `/v1/studies/${studyId}/areas/${areaId}/clusters/thermal`; +const getClustersUrl = (studyId: StudyMetadata["id"], areaId: Area["name"]): string => + `/v1/studies/${studyId}/areas/${areaId}/clusters/thermal`; const getClusterUrl = ( studyId: StudyMetadata["id"], @@ -146,13 +135,8 @@ const getClusterUrl = ( // API //////////////////////////////////////////////////////////////// -export async function getThermalClusters( - studyId: StudyMetadata["id"], - areaId: Area["name"], -) { - const res = await client.get( - getClustersUrl(studyId, areaId), - ); +export async function getThermalClusters(studyId: StudyMetadata["id"], areaId: Area["name"]) { + const res = await client.get(getClustersUrl(studyId, areaId)); return res.data; } @@ -161,9 +145,7 @@ export async function getThermalCluster( areaId: Area["name"], clusterId: Cluster["id"], ) { - const res = await client.get( - getClusterUrl(studyId, areaId, clusterId), - ); + const res = await client.get(getClusterUrl(studyId, areaId, clusterId)); return res.data; } @@ -173,10 +155,7 @@ export async function updateThermalCluster( clusterId: Cluster["id"], data: Partial, ) { - const res = await client.patch( - getClusterUrl(studyId, areaId, clusterId), - data, - ); + const res = await client.patch(getClusterUrl(studyId, areaId, clusterId), data); return res.data; } @@ -185,10 +164,7 @@ export async function createThermalCluster( areaId: Area["name"], data: PartialExceptFor, ) { - const res = await client.post( - getClustersUrl(studyId, areaId), - data, - ); + const res = await client.post(getClustersUrl(studyId, areaId), data); return res.data; } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/clustersUtils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/clustersUtils.ts index 56d94c7497..c01d12b339 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/clustersUtils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/common/clustersUtils.ts @@ -12,14 +12,11 @@ * This file is part of the Antares project. */ -import { MRT_AggregationFn } from "material-react-table"; -import { ThermalClusterWithCapacity } from "../Thermal/utils"; -import { RenewableClusterWithCapacity } from "../Renewables/utils"; +import type { MRT_AggregationFn } from "material-react-table"; +import type { ThermalClusterWithCapacity } from "../Thermal/utils"; +import type { RenewableClusterWithCapacity } from "../Renewables/utils"; -export function toCapacityString( - enabledCapacity: number, - installedCapacity: number, -) { +export function toCapacityString(enabledCapacity: number, installedCapacity: number) { return `${Math.round(enabledCapacity)} / ${Math.round(installedCapacity)}`; } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/index.tsx index 199a543c27..6182a741b4 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Areas/index.tsx @@ -13,15 +13,12 @@ */ import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import EmptyView from "../../../../../common/page/EmptyView"; import AreaPropsView from "./AreaPropsView"; import AreasTab from "./AreasTab"; import useStudySynthesis from "../../../../../../redux/hooks/useStudySynthesis"; -import { - getStudySynthesis, - getCurrentArea, -} from "../../../../../../redux/selectors"; +import { getStudySynthesis, getCurrentArea } from "../../../../../../redux/selectors"; import useAppDispatch from "../../../../../../redux/hooks/useAppDispatch"; import { setCurrentArea } from "../../../../../../redux/ducks/studySyntheses"; import useAppSelector from "../../../../../../redux/hooks/useAppSelector"; @@ -53,20 +50,14 @@ function Areas() { return ( {/* Left */} - + {/* Right */} currentArea ? ( - + ) : ( ) diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/AddDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/AddDialog.tsx index a9ac5833c6..c7acb34565 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/AddDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/AddDialog.tsx @@ -17,21 +17,14 @@ import { Box } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useSnackbar } from "notistack"; import FormDialog from "../../../../../common/dialogs/FormDialog"; -import { - BindingConstraintOperator, - TimeStep, -} from "../../../Commands/Edition/commandTypes"; -import { SubmitHandlerPlus } from "../../../../../common/Form/types"; -import { - BindingConstraint, - OPERATORS, - TIME_STEPS, -} from "./BindingConstView/utils"; +import { BindingConstraintOperator, TimeStep } from "../../../Commands/Edition/commandTypes"; +import type { SubmitHandlerPlus } from "../../../../../common/Form/types"; +import { OPERATORS, TIME_STEPS, type BindingConstraint } from "./BindingConstView/utils"; import { createBindingConstraint } from "../../../../../../services/api/studydata"; import SelectFE from "../../../../../common/fieldEditors/SelectFE"; import StringFE from "../../../../../common/fieldEditors/StringFE"; import SwitchFE from "../../../../../common/fieldEditors/SwitchFE"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import { setCurrentBindingConst } from "../../../../../../redux/ducks/studySyntheses"; import useAppDispatch from "../../../../../../redux/hooks/useAppDispatch"; import { useOutletContext } from "react-router"; @@ -45,12 +38,7 @@ interface Props { } // TODO rename AddConstraintDialog -function AddDialog({ - open, - onClose, - existingConstraints, - reloadConstraintsList, -}: Props) { +function AddDialog({ open, onClose, existingConstraints, reloadConstraintsList }: Props) { const { study } = useOutletContext<{ study: StudyMetadata }>(); const { enqueueSnackbar } = useSnackbar(); const dispatch = useAppDispatch(); @@ -88,9 +76,7 @@ function AddDialog({ // Event Handlers //////////////////////////////////////////////////////////////// - const handleSubmit = ({ - values, - }: SubmitHandlerPlus) => { + const handleSubmit = ({ values }: SubmitHandlerPlus) => { return createBindingConstraint(study.id, values); }; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstPropsView.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstPropsView.tsx index e750c0a1aa..9179e6bf01 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstPropsView.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstPropsView.tsx @@ -16,7 +16,7 @@ import { useEffect, useMemo, useState } from "react"; import PropertiesView from "../../../../../common/PropertiesView"; import ListElement from "../../common/ListElement"; import AddDialog from "./AddDialog"; -import { BindingConstraint } from "./BindingConstView/utils"; +import type { BindingConstraint } from "./BindingConstView/utils"; interface Props { list: BindingConstraint[]; @@ -26,12 +26,7 @@ interface Props { } // TODO rename ConstraintsList -function BindingConstPropsView({ - list, - onClick, - currentConstraint, - reloadConstraintsList, -}: Props) { +function BindingConstPropsView({ list, onClick, currentConstraint, reloadConstraintsList }: Props) { const [searchedConstraint, setSearchedConstraint] = useState(""); const [addBindingConst, setAddBindingConst] = useState(false); const [filteredConstraints, setFilteredConstraints] = useState(list); @@ -53,10 +48,7 @@ function BindingConstPropsView({ setFilteredConstraints(filtered); }, [list, searchedConstraint]); - const existingConstraints = useMemo( - () => list.map(({ name }) => name), - [list], - ); + const existingConstraints = useMemo(() => list.map(({ name }) => name), [list]); //////////////////////////////////////////////////////////////// // JSX diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/AddConstraintTermForm/OptionsList.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/AddConstraintTermForm/OptionsList.tsx index 63a33457a3..7bdb030b67 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/AddConstraintTermForm/OptionsList.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/AddConstraintTermForm/OptionsList.tsx @@ -16,8 +16,8 @@ import { useEffect } from "react"; import { useTranslation } from "react-i18next"; import { useFormContext } from "react-hook-form"; import SelectFE from "../../../../../../../../common/fieldEditors/SelectFE"; -import { AllClustersAndLinks } from "../../../../../../../../../common/types"; -import { ConstraintTerm, isTermExist, generateTermId } from "../../utils"; +import type { AllClustersAndLinks } from "../../../../../../../../../common/types"; +import { isTermExist, generateTermId, type ConstraintTerm } from "../../utils"; interface Props { list: AllClustersAndLinks; @@ -28,8 +28,7 @@ interface Props { export default function OptionsList({ list, isLink, constraintTerms }: Props) { const [t] = useTranslation(); - const { control, setValue, watch, getValues } = - useFormContext(); + const { control, setValue, watch, getValues } = useFormContext(); // Determines the correct set of options based on whether the term is a link or a cluster. const options = isLink ? list.links : list.clusters; @@ -49,9 +48,7 @@ export default function OptionsList({ list, isLink, constraintTerms }: Props) { const getAreaOrClusterOptions = () => { const selectedArea = getValues(isLink ? "data.area1" : "data.area"); - const foundOption = options.find( - (option) => option.element.id === selectedArea, - ); + const foundOption = options.find((option) => option.element.id === selectedArea); if (!foundOption) { return []; @@ -63,9 +60,7 @@ export default function OptionsList({ list, isLink, constraintTerms }: Props) { !isTermExist( constraintTerms, generateTermId( - isLink - ? { area1: selectedArea, area2: id } - : { area: selectedArea, cluster: id }, + isLink ? { area1: selectedArea, area2: id } : { area: selectedArea, cluster: id }, ), ), ) diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/AddConstraintTermForm/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/AddConstraintTermForm/index.tsx index f70facc13a..40b500261b 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/AddConstraintTermForm/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/AddConstraintTermForm/index.tsx @@ -16,7 +16,7 @@ import { useState } from "react"; import { Box, Button, Typography } from "@mui/material"; import AddCircleOutlineRoundedIcon from "@mui/icons-material/AddCircleOutlineRounded"; import { useTranslation } from "react-i18next"; -import { AllClustersAndLinks } from "../../../../../../../../../common/types"; +import type { AllClustersAndLinks } from "../../../../../../../../../common/types"; import OptionsList from "./OptionsList"; import NumberFE from "../../../../../../../../common/fieldEditors/NumberFE"; import { useFormContextPlus } from "../../../../../../../../common/Form"; @@ -29,10 +29,7 @@ interface Props { constraintTerms: ConstraintTerm[]; } -export default function AddConstraintTermForm({ - options, - constraintTerms, -}: Props) { +export default function AddConstraintTermForm({ options, constraintTerms }: Props) { const { control, setValue } = useFormContextPlus(); const [t] = useTranslation(); @@ -77,11 +74,7 @@ export default function AddConstraintTermForm({ } right={ - + } /> diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/index.tsx index f0f893ec0f..9784b66ad3 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/AddConstraintTermDialog/index.tsx @@ -12,26 +12,19 @@ * This file is part of the Antares project. */ -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useTranslation } from "react-i18next"; import { useSnackbar } from "notistack"; -import { UseFieldArrayAppend } from "react-hook-form"; -import FormDialog, { - FormDialogProps, -} from "../../../../../../../common/dialogs/FormDialog"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import type { UseFieldArrayAppend } from "react-hook-form"; +import FormDialog, { type FormDialogProps } from "../../../../../../../common/dialogs/FormDialog"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; import useEnqueueErrorSnackbar from "../../../../../../../../hooks/useEnqueueErrorSnackbar"; -import { - isLinkTerm, - type BindingConstraint, - type ConstraintTerm, -} from "../utils"; +import { isLinkTerm, type BindingConstraint, type ConstraintTerm } from "../utils"; import AddConstraintTermForm from "./AddConstraintTermForm"; import { createConstraintTerm } from "../../../../../../../../services/api/studydata"; -import { AllClustersAndLinks } from "../../../../../../../../common/types"; +import type { AllClustersAndLinks } from "../../../../../../../../common/types"; import useStudySynthesis from "../../../../../../../../redux/hooks/useStudySynthesis"; import { getLinksAndClusters } from "../../../../../../../../redux/selectors"; -import { BaseSyntheticEvent } from "react"; import UsePromiseCond from "../../../../../../../common/utils/UsePromiseCond"; interface Props extends Omit { @@ -123,7 +116,7 @@ function AddConstraintTermDialog({ */ const handleSubmit = async ( { values }: SubmitHandlerPlus, - _event?: BaseSyntheticEvent, + _event?: React.BaseSyntheticEvent, ) => { try { const newTerm = { @@ -141,10 +134,7 @@ function AddConstraintTermDialog({ variant: "success", }); } catch (e) { - enqueueErrorSnackbar( - t("study.error.createConstraintTerm"), - e as AxiosError, - ); + enqueueErrorSnackbar(t("study.error.createConstraintTerm"), e as AxiosError); } finally { onCancel(); } @@ -165,10 +155,7 @@ function AddConstraintTermDialog({ ( - + )} /> diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/BindingConstForm.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/BindingConstForm.tsx index d821dfe10d..3698f3c1b1 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/BindingConstForm.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/BindingConstForm.tsx @@ -12,7 +12,7 @@ * This file is part of the Antares project. */ -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { Box, Button } from "@mui/material"; @@ -21,15 +21,8 @@ import DeleteIcon from "@mui/icons-material/Delete"; import { useFieldArray } from "react-hook-form"; import { useSnackbar } from "notistack"; import useEnqueueErrorSnackbar from "../../../../../../../hooks/useEnqueueErrorSnackbar"; -import { - type ConstraintTerm, - generateTermId, - BindingConstraint, -} from "./utils"; -import { - AllClustersAndLinks, - StudyMetadata, -} from "../../../../../../../common/types"; +import { generateTermId, type ConstraintTerm, type BindingConstraint } from "./utils"; +import type { AllClustersAndLinks, StudyMetadata } from "../../../../../../../common/types"; import ConstraintTermItem from "./ConstraintTerm"; import { useFormContextPlus } from "../../../../../../common/Form"; import { @@ -54,8 +47,7 @@ function BindingConstForm({ study, options, constraintId }: Props) { const { enqueueSnackbar } = useSnackbar(); const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); const [termToDelete, setTermToDelete] = useState(); - const [openConstraintTermDialog, setOpenConstraintTermDialog] = - useState(false); + const [openConstraintTermDialog, setOpenConstraintTermDialog] = useState(false); const { control } = useFormContextPlus(); @@ -74,11 +66,7 @@ function BindingConstForm({ study, options, constraintId }: Props) { //////////////////////////////////////////////////////////////// const handleUpdateTerm = useDebounce( - async ( - index: number, - prevTerm: ConstraintTerm, - newTerm: ConstraintTerm, - ) => { + async (index: number, prevTerm: ConstraintTerm, newTerm: ConstraintTerm) => { try { const updatedTerm = { ...prevTerm, @@ -95,10 +83,7 @@ function BindingConstForm({ study, options, constraintId }: Props) { variant: "success", }); } catch (error) { - enqueueErrorSnackbar( - t("study.error.updateConstraintTerm"), - error as AxiosError, - ); + enqueueErrorSnackbar(t("study.error.updateConstraintTerm"), error as AxiosError); } }, 500, @@ -110,10 +95,7 @@ function BindingConstForm({ study, options, constraintId }: Props) { await deleteConstraintTerm(study.id, constraintId, termId); remove(termToDelete); } catch (error) { - enqueueErrorSnackbar( - t("study.error.deleteConstraintTerm"), - error as AxiosError, - ); + enqueueErrorSnackbar(t("study.error.deleteConstraintTerm"), error as AxiosError); } finally { setTermToDelete(undefined); } @@ -125,10 +107,7 @@ function BindingConstForm({ study, options, constraintId }: Props) { return ( <> -
    +
    {constraintTerms.map((term: ConstraintTerm, index: number) => ( - {index > 0 && ( - - )} + {index > 0 && } handleUpdateTerm(index, term, newTerm)} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintFields.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintFields.tsx index 285c3fd11e..0b48ac15e5 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintFields.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintFields.tsx @@ -12,23 +12,18 @@ * This file is part of the Antares project. */ -import { - BindingConstraint, - OPERATORS, - OUTPUT_FILTERS, - TIME_STEPS, -} from "./utils"; +import { type BindingConstraint, OPERATORS, OUTPUT_FILTERS, TIME_STEPS } from "./utils"; import Fieldset from "../../../../../../common/Fieldset"; import SelectFE from "../../../../../../common/fieldEditors/SelectFE"; import StringFE from "../../../../../../common/fieldEditors/StringFE"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import SwitchFE from "../../../../../../common/fieldEditors/SwitchFE"; import { useFormContextPlus } from "../../../../../../common/Form"; import { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { Box, Button } from "@mui/material"; -import { Dataset } from "@mui/icons-material"; +import DatasetIcon from "@mui/icons-material/Dataset"; import { validateString } from "@/utils/validation/string"; import ConstraintMatrix from "./Matrix"; @@ -76,11 +71,7 @@ function Fields({ study, constraintId }: Props) { return ( <> -
    +
    } + startIcon={} onClick={() => setMatrixDialogOpen(true)} sx={{ mt: 2 }} > diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintTerm/OptionsList.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintTerm/OptionsList.tsx index f6777e5f66..85569765b6 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintTerm/OptionsList.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintTerm/OptionsList.tsx @@ -14,9 +14,9 @@ import { useMemo } from "react"; import { useTranslation } from "react-i18next"; -import { AllClustersAndLinks } from "../../../../../../../../common/types"; +import type { AllClustersAndLinks } from "../../../../../../../../common/types"; import SelectSingle from "../../../../../../../common/SelectSingle"; -import { ConstraintTerm, generateTermId, isTermExist } from "../utils"; +import { generateTermId, isTermExist, type ConstraintTerm } from "../utils"; import { Box } from "@mui/material"; interface Option { @@ -66,9 +66,7 @@ export default function OptionsList({ const relatedOptions = isLink ? list.links : list.clusters; // Attempt to find the option that matches the selected area - const foundOption = relatedOptions.find( - ({ element }) => element.id === selectedArea, - ); + const foundOption = relatedOptions.find(({ element }) => element.id === selectedArea); if (!foundOption) { return []; @@ -76,29 +74,17 @@ export default function OptionsList({ return foundOption.item_list.reduce((acc, { id, name }) => { const termId = generateTermId( - isLink - ? { area1: selectedArea, area2: id } - : { area: selectedArea, cluster: id }, + isLink ? { area1: selectedArea, area2: id } : { area: selectedArea, cluster: id }, ); // Check if the id is valid - if ( - id === selectedClusterOrArea || - !isTermExist(constraintTerms, termId) - ) { + if (id === selectedClusterOrArea || !isTermExist(constraintTerms, termId)) { acc.push({ name, id: id.toLowerCase() }); } return acc; }, []); - }, [ - selectedArea, - isLink, - list.links, - list.clusters, - selectedClusterOrArea, - constraintTerms, - ]); + }, [selectedArea, isLink, list.links, list.clusters, selectedClusterOrArea, constraintTerms]); //////////////////////////////////////////////////////////////// // Event Handlers @@ -112,9 +98,7 @@ export default function OptionsList({ setSelectedClusterOrArea(value); saveValue({ ...term, - data: isLink - ? { area1: selectedArea, area2: value } - : { area: selectedArea, cluster: value }, + data: isLink ? { area1: selectedArea, area2: value } : { area: selectedArea, cluster: value }, }); }; @@ -144,9 +128,7 @@ export default function OptionsList({ label={t(`study.${isLink ? "area2" : "cluster"}`)} data={selectedClusterOrArea.toLowerCase()} list={clusterOrAreaOptions} - handleChange={(key, value) => - handleClusterOrAreaChange(value as string) - } + handleChange={(key, value) => handleClusterOrAreaChange(value as string)} sx={{ minWidth: 300, }} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintTerm/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintTerm/index.tsx index 04bb4e22b9..184b383db7 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintTerm/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/ConstraintTerm/index.tsx @@ -12,13 +12,13 @@ * This file is part of the Antares project. */ -import { ChangeEvent, useMemo, useState } from "react"; +import { useMemo, useState } from "react"; import { Box, Button, TextField, Typography } from "@mui/material"; import AddCircleOutlineRoundedIcon from "@mui/icons-material/AddCircleOutlineRounded"; import DeleteRoundedIcon from "@mui/icons-material/DeleteRounded"; import { useTranslation } from "react-i18next"; -import { ConstraintTerm, isLinkTerm } from "../utils"; -import { AllClustersAndLinks } from "../../../../../../../../common/types"; +import { isLinkTerm, type ConstraintTerm } from "../utils"; +import type { AllClustersAndLinks } from "../../../../../../../../common/types"; import OptionsList from "./OptionsList"; import ConstraintElement from "../constraintviews/ConstraintElement"; import OffsetInput from "../constraintviews/OffsetInput"; @@ -63,13 +63,7 @@ interface Props { * * @returns Constraint Term component of type link or cluster */ -function ConstraintTermItem({ - options, - term, - constraintTerms, - saveValue, - deleteTerm, -}: Props) { +function ConstraintTermItem({ options, term, constraintTerms, saveValue, deleteTerm }: Props) { const [t] = useTranslation(); const [weight, setWeight] = useState(term.weight); const [offset, setOffset] = useState(term.offset); @@ -108,24 +102,19 @@ function ConstraintTermItem({ */ const [selectedArea, setSelectedArea] = useState(area); - const [selectedClusterOrArea, setSelectedClusterOrArea] = - useState(areaOrCluster); + const [selectedClusterOrArea, setSelectedClusterOrArea] = useState(areaOrCluster); //////////////////////////////////////////////////////////////// // Event Handlers //////////////////////////////////////////////////////////////// - const handleWeightChange = ( - event: ChangeEvent, - ) => { + const handleWeightChange = (event: React.ChangeEvent) => { const newWeight = parseFloat(event.target.value) || 0; setWeight(newWeight); saveValue({ ...term, weight: newWeight }); }; - const handleOffsetChange = ( - event: ChangeEvent, - ) => { + const handleOffsetChange = (event: React.ChangeEvent) => { const value = event.target.value; const newOffset = value === "" ? undefined : parseInt(value, 10); setOffset(newOffset); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/Matrix.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/Matrix.tsx index 03f7bfddf3..964ae25732 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/Matrix.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/Matrix.tsx @@ -13,13 +13,11 @@ */ import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../../../common/types"; -import { Operator } from "./utils"; +import type { StudyMetadata } from "../../../../../../../common/types"; +import type { Operator } from "./utils"; import SplitView from "../../../../../../common/SplitView"; import { Box, Button } from "@mui/material"; -import BasicDialog, { - BasicDialogProps, -} from "../../../../../../common/dialogs/BasicDialog"; +import BasicDialog, { type BasicDialogProps } from "../../../../../../common/dialogs/BasicDialog"; import Matrix from "../../../../../../common/Matrix"; interface Props { @@ -30,13 +28,7 @@ interface Props { onClose: () => void; } -function ConstraintMatrix({ - study, - operator, - constraintId, - open, - onClose, -}: Props) { +function ConstraintMatrix({ study, operator, constraintId, open, onClose }: Props) { const { t } = useTranslation(); const dialogProps: BasicDialogProps = { open, @@ -91,9 +83,7 @@ function ConstraintMatrix({ diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/constraintviews/ConstraintElement.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/constraintviews/ConstraintElement.tsx index 757c2eb019..2137e2b0f5 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/constraintviews/ConstraintElement.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/constraintviews/ConstraintElement.tsx @@ -13,25 +13,18 @@ */ import { FormControlLabel, Switch, Typography } from "@mui/material"; -import { ReactNode } from "react"; import { ConstraintElementData, ConstraintElementRoot } from "./style"; import { useTranslation } from "react-i18next"; interface ElementProps { - left: ReactNode; - right: ReactNode; + left: React.ReactNode; + right: React.ReactNode; operator?: string; isLink?: boolean; onToggleType?: () => void; } -function ConstraintElement({ - isLink, - left, - right, - operator = "x", - onToggleType, -}: ElementProps) { +function ConstraintElement({ isLink, left, right, operator = "x", onToggleType }: ElementProps) { const { t } = useTranslation(); return ( diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/constraintviews/OffsetInput.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/constraintviews/OffsetInput.tsx index f63a7288c1..ea27cbc663 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/constraintviews/OffsetInput.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/constraintviews/OffsetInput.tsx @@ -14,13 +14,12 @@ import HighlightOffIcon from "@mui/icons-material/HighlightOff"; import { Box } from "@mui/material"; -import { PropsWithChildren } from "react"; interface Props { onRemove: () => void; } -export default function OffsetInput(props: PropsWithChildren) { +export default function OffsetInput(props: React.PropsWithChildren) { const { onRemove, children } = props; return ( ({ flexDirection: "column", padding: theme.spacing(1), borderRadius: 5, - backgroundImage: - "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", + backgroundImage: "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", })); export const ConstraintElementData = styled(Box)(({ theme }) => ({ diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/index.tsx index 6360007bef..1816d77e1e 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/index.tsx @@ -12,12 +12,10 @@ * This file is part of the Antares project. */ -import { BindingConstraint } from "./utils"; +import type { BindingConstraint } from "./utils"; import { Box, Button, Skeleton } from "@mui/material"; import Form from "../../../../../../common/Form"; -import UsePromiseCond, { - mergeResponses, -} from "../../../../../../common/utils/UsePromiseCond"; +import UsePromiseCond, { mergeResponses } from "../../../../../../common/utils/UsePromiseCond"; import { getBindingConstraint, getBindingConstraintList, @@ -25,14 +23,14 @@ import { } from "../../../../../../../services/api/studydata"; import { useOutletContext } from "react-router"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import BindingConstForm from "./BindingConstForm"; import { CommandEnum } from "../../../../Commands/Edition/commandTypes"; import ConfirmationDialog from "../../../../../../common/dialogs/ConfirmationDialog"; import ConstraintFields from "./ConstraintFields"; import Delete from "@mui/icons-material/Delete"; -import { StudyMetadata } from "../../../../../../../common/types"; -import { SubmitHandlerPlus } from "../../../../../../common/Form/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; +import type { SubmitHandlerPlus } from "../../../../../../common/Form/types"; import { appendCommands } from "../../../../../../../services/api/variant"; import { getLinksAndClusters } from "../../../../../../../redux/selectors"; import { setCurrentBindingConst } from "../../../../../../../redux/ducks/studySyntheses"; @@ -54,8 +52,7 @@ function BindingConstView({ constraintId }: Props) { const dispatch = useAppDispatch(); const { enqueueSnackbar } = useSnackbar(); const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); - const [deleteConstraintDialogOpen, setDeleteConstraintDialogOpen] = - useState(false); + const [deleteConstraintDialogOpen, setDeleteConstraintDialogOpen] = useState(false); const constraint = usePromise( () => getBindingConstraint(study.id, constraintId), @@ -71,9 +68,7 @@ function BindingConstView({ constraintId }: Props) { // Event handlers //////////////////////////////////////////////////////////////// - const handleSubmitConstraint = ({ - values, - }: SubmitHandlerPlus) => { + const handleSubmitConstraint = ({ values }: SubmitHandlerPlus) => { const { id, name, ...updatedConstraint } = values; return updateBindingConstraint(study.id, constraintId, updatedConstraint); @@ -170,9 +165,7 @@ function BindingConstView({ constraintId }: Props) { alert="warning" open > - {t( - "study.modelization.bindingConst.question.deleteBindingConstraint", - )} + {t("study.modelization.bindingConst.question.deleteBindingConstraint")} )} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/utils.ts index 30b7dbc06e..836f2c6c09 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/BindingConstView/utils.ts @@ -21,13 +21,7 @@ export const ACTIVE_WINDOWS_DOC_PATH = export const OPERATORS = ["less", "equal", "greater", "both"] as const; export const TIME_STEPS = ["hourly", "daily", "weekly"] as const; -export const OUTPUT_FILTERS = [ - "hourly", - "daily", - "weekly", - "monthly", - "annual", -] as const; +export const OUTPUT_FILTERS = ["hourly", "daily", "weekly", "monthly", "annual"] as const; //////////////////////////////////////////////////////////////// // Types @@ -126,10 +120,8 @@ export function generateTermId( * @param termId - The unique identifier of the term, either a LinkTermId or a ClusterTermId. * @returns True if a term with the specified ID exists; otherwise, false. */ -export const isTermExist = ( - terms: ConstraintTerm[], - termId: LinkTermId | ClusterTermId, -): boolean => terms.some(({ id }) => id === termId); +export const isTermExist = (terms: ConstraintTerm[], termId: LinkTermId | ClusterTermId): boolean => + terms.some(({ id }) => id === termId); /** * !WARNING: Temporary Workaround (Model adapter) @@ -202,9 +194,7 @@ function adaptOutputFilterFormat( } } - throw new Error( - "Invalid input: Expected a string or an array of OutputFilter values", - ); + throw new Error("Invalid input: Expected a string or an array of OutputFilter values"); } /** @@ -214,9 +204,7 @@ function adaptOutputFilterFormat( * @param data - The BindingConstraint object to transform. * @returns The transformed BindingConstraint object. */ -export function bindingConstraintModelAdapter( - data: BindingConstraint, -): BindingConstraint { +export function bindingConstraintModelAdapter(data: BindingConstraint): BindingConstraint { const filterSynthesis = adaptOutputFilterFormat(data.filterSynthesis); const filterYearByYear = adaptOutputFilterFormat(data.filterYearByYear); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/index.tsx index fa48b6aa15..6d1449c344 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/BindingConstraints/index.tsx @@ -13,13 +13,10 @@ */ import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import EmptyView from "../../../../../common/page/EmptyView"; import BindingConstPropsView from "./BindingConstPropsView"; -import { - getBindingConst, - getCurrentBindingConstId, -} from "../../../../../../redux/selectors"; +import { getBindingConst, getCurrentBindingConstId } from "../../../../../../redux/selectors"; import useAppSelector from "../../../../../../redux/hooks/useAppSelector"; import useAppDispatch from "../../../../../../redux/hooks/useAppDispatch"; import { setCurrentBindingConst } from "../../../../../../redux/ducks/studySyntheses"; @@ -39,9 +36,7 @@ function BindingConstraints() { const currentConstraintId = useAppSelector(getCurrentBindingConstId); - const bindingConstraints = useAppSelector((state) => - getBindingConst(state, study.id), - ); + const bindingConstraints = useAppSelector((state) => getBindingConst(state, study.id)); const constraintsRes = usePromise( () => getBindingConstraintList(study.id), diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkPropsView.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkPropsView.tsx index 610dff4c74..d3cb6262da 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkPropsView.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkPropsView.tsx @@ -17,7 +17,7 @@ import PropertiesView from "../../../../../common/PropertiesView"; import useAppSelector from "../../../../../../redux/hooks/useAppSelector"; import { getCurrentLinkId, getLinks } from "../../../../../../redux/selectors"; import ListElement from "../../common/ListElement"; -import { LinkElement } from "../../../../../../common/types"; +import type { LinkElement } from "../../../../../../common/types"; interface PropsType { studyId: string; @@ -28,17 +28,13 @@ function LinkPropsView(props: PropsType) { const currentLinkId = useAppSelector(getCurrentLinkId); const links = useAppSelector((state) => getLinks(state, studyId)); const [linkNameFilter, setLinkNameFilter] = useState(); - const [filteredLinks, setFilteredLinks] = useState( - links || [], - ); + const [filteredLinks, setFilteredLinks] = useState(links || []); useEffect(() => { const filter = (): LinkElement[] => { if (links) { return links.filter( - (s) => - !linkNameFilter || - s.name.search(new RegExp(linkNameFilter, "i")) !== -1, + (s) => !linkNameFilter || s.name.search(new RegExp(linkNameFilter, "i")) !== -1, ); } return []; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/LinkForm.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/LinkForm.tsx index dbfccc9e82..099e282bd0 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/LinkForm.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/LinkForm.tsx @@ -13,16 +13,16 @@ */ import { Box } from "@mui/material"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { editStudy } from "../../../../../../../services/api/study"; import useEnqueueErrorSnackbar from "../../../../../../../hooks/useEnqueueErrorSnackbar"; import Fieldset from "../../../../../../common/Fieldset"; -import { AutoSubmitHandler } from "../../../../../../common/Form/types"; -import { getLinkPath, LinkFields } from "./utils"; +import type { AutoSubmitHandler } from "../../../../../../common/Form/types"; +import { getLinkPath, type LinkFields } from "./utils"; import SwitchFE from "../../../../../../common/fieldEditors/SwitchFE"; -import { LinkElement, StudyMetadata } from "../../../../../../../common/types"; +import type { LinkElement, StudyMetadata } from "../../../../../../../common/types"; import SelectFE from "../../../../../../common/fieldEditors/SelectFE"; import LinkMatrixView from "./LinkMatrixView"; import OutputFilters from "../../../common/OutputFilters"; @@ -41,7 +41,7 @@ function LinkForm(props: Props) { let version = 0; try { version = parseInt(study.version, 10); - } catch (e) { + } catch { version = 0; } return version >= 820; @@ -72,12 +72,8 @@ function LinkForm(props: Props) { const columnsNames = [ t("study.modelization.links.matrix.columns.transCapaDirect"), t("study.modelization.links.matrix.columns.transCapaIndirect"), - `${t( - "study.modelization.links.matrix.columns.hurdleCostsDirect", - )} (${area1}->${area2})`, - `${t( - "study.modelization.links.matrix.columns.hurdleCostsIndirect", - )} (${area2}->${area1})`, + `${t("study.modelization.links.matrix.columns.hurdleCostsDirect")} (${area1}->${area2})`, + `${t("study.modelization.links.matrix.columns.hurdleCostsIndirect")} (${area2}->${area1})`, t("study.modelization.links.matrix.columns.impedances"), t("study.modelization.links.matrix.columns.loopFlow"), t("study.modelization.links.matrix.columns.pShiftMin"), @@ -232,9 +228,7 @@ function LinkForm(props: Props) {
    - handleAutoSubmit(path[filterName], value) - } + onAutoSubmit={(filterName, value) => handleAutoSubmit(path[filterName], value)} /> { + const handleTabChange = (event: React.SyntheticEvent, newValue: string) => { setActiveTab(newValue); }; @@ -104,10 +104,10 @@ function LinkMatrixView({ area1, area2 }: Props) { ))} @@ -116,9 +116,7 @@ function LinkMatrixView({ area1, area2 }: Props) { )} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/index.tsx index 43b44852ea..2d03484bd9 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/index.tsx @@ -13,7 +13,7 @@ */ import { useOutletContext } from "react-router"; -import { LinkElement, StudyMetadata } from "../../../../../../../common/types"; +import type { LinkElement, StudyMetadata } from "../../../../../../../common/types"; import usePromise from "../../../../../../../hooks/usePromise"; import Form from "../../../../../../common/Form"; import LinkForm from "./LinkForm"; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/utils.ts index d2cc46d077..7c7c6dd2ef 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/LinkView/utils.ts @@ -12,9 +12,9 @@ * This file is part of the Antares project. */ -import { FieldValues } from "react-hook-form"; +import type { FieldValues } from "react-hook-form"; import { getStudyData } from "../../../../../../../services/api/study"; -import { FilteringType } from "../../../common/types"; +import type { FilteringType } from "../../../common/types"; type TransCapacitiesType = "infinite" | "ignore" | "enabled"; type AssetType = "ac" | "dc" | "gaz" | "virt"; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/index.tsx index 29ab7632ba..c0f0854d6d 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Links/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Links/index.tsx @@ -13,7 +13,7 @@ */ import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../common/types"; import EmptyView from "../../../../../common/page/EmptyView"; import LinkPropsView from "./LinkPropsView"; import { getCurrentLink } from "../../../../../../redux/selectors"; @@ -34,14 +34,9 @@ function Links() { const { study } = useOutletContext<{ study: StudyMetadata }>(); const [t] = useTranslation(); const dispatch = useAppDispatch(); - const currentLink = useAppSelector((state) => - getCurrentLink(state, study.id), - ); + const currentLink = useAppSelector((state) => getCurrentLink(state, study.id)); - const linksRes = usePromise( - () => getLinks({ studyId: study.id }), - [study.id], - ); + const linksRes = usePromise(() => getLinks({ studyId: study.id }), [study.id]); // Handle automatic selection of the first link useEffect(() => { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaConfig.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaConfig.tsx index db30224399..b04ad7935b 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaConfig.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaConfig.tsx @@ -13,17 +13,17 @@ */ import { useEffect, useState } from "react"; -import { ColorResult, MaterialPicker } from "react-color"; +import { MaterialPicker, type ColorResult } from "react-color"; import { Box, TextField, Divider } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { LinkElement, UpdateAreaUi } from "../../../../../../../common/types"; +import type { LinkElement, UpdateAreaUi } from "../../../../../../../common/types"; import AreaLinks from "./AreaLinks"; import AreaLink from "./AreaLink"; import { AreaColorPicker, AreaHuePicker } from "./style"; import DeleteAreaDialog from "./DeleteAreaDialog"; -import { StudyMapNode } from "../../../../../../../redux/ducks/studyMaps"; +import type { StudyMapNode } from "../../../../../../../redux/ducks/studyMaps"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentLayer } from "../../../../../../../redux/selectors"; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaLink.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaLink.tsx index 87f38baf9f..5e46241a4c 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaLink.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaLink.tsx @@ -13,11 +13,8 @@ */ import { useTranslation } from "react-i18next"; -import { LinkElement } from "../../../../../../../common/types"; -import { - setCurrentArea, - setCurrentLink, -} from "../../../../../../../redux/ducks/studySyntheses"; +import type { LinkElement } from "../../../../../../../common/types"; +import { setCurrentArea, setCurrentLink } from "../../../../../../../redux/ducks/studySyntheses"; import useAppDispatch from "../../../../../../../redux/hooks/useAppDispatch"; import { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaLinks.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaLinks.tsx index 8f4f5dba3f..0c06af4289 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaLinks.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/AreaLinks.tsx @@ -14,28 +14,18 @@ import { useTranslation } from "react-i18next"; import { useOutletContext } from "react-router-dom"; -import { StudyMetadata } from "../../../../../../../common/types"; -import { - setCurrentArea, - setCurrentLink, -} from "../../../../../../../redux/ducks/studySyntheses"; +import type { StudyMetadata } from "../../../../../../../common/types"; +import { setCurrentArea, setCurrentLink } from "../../../../../../../redux/ducks/studySyntheses"; import useAppDispatch from "../../../../../../../redux/hooks/useAppDispatch"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; import { getCurrentAreaLinks } from "../../../../../../../redux/selectors"; -import { - AreaLinkContainer, - AreaLinkContent, - AreaLinkRoot, - AreaLinkTitle, -} from "./style"; +import { AreaLinkContainer, AreaLinkContent, AreaLinkRoot, AreaLinkTitle } from "./style"; function AreaLinks() { const [t] = useTranslation(); const dispatch = useAppDispatch(); const { study } = useOutletContext<{ study: StudyMetadata }>(); - const areaLinks = useAppSelector((state) => - getCurrentAreaLinks(state, study.id), - ); + const areaLinks = useAppSelector((state) => getCurrentAreaLinks(state, study.id)); //////////////////////////////////////////////////////////////// // JSX @@ -43,9 +33,7 @@ function AreaLinks() { return ( - {areaLinks.length > 0 && ( - {t("study.links")} - )} + {areaLinks.length > 0 && {t("study.links")}} {areaLinks.length > 0 && areaLinks.map(({ label, id }) => ( diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/DeleteAreaDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/DeleteAreaDialog.tsx index fd7f4350ad..84c0237acd 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/DeleteAreaDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/DeleteAreaDialog.tsx @@ -13,22 +13,19 @@ */ import { Box, Button, Typography } from "@mui/material"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { useOutletContext } from "react-router"; -import { StudyMetadata } from "../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../common/types"; import useEnqueueErrorSnackbar from "../../../../../../../hooks/useEnqueueErrorSnackbar"; import { deleteStudyMapLink, deleteStudyMapNode, - StudyMapLink, - StudyMapNode, + type StudyMapLink, + type StudyMapNode, } from "../../../../../../../redux/ducks/studyMaps"; -import { - setCurrentArea, - setCurrentLink, -} from "../../../../../../../redux/ducks/studySyntheses"; +import { setCurrentArea, setCurrentLink } from "../../../../../../../redux/ducks/studySyntheses"; import useAppDispatch from "../../../../../../../redux/hooks/useAppDispatch"; import ConfirmationDialog from "../../../../../../common/dialogs/ConfirmationDialog"; import { AreaDeleteIcon } from "./style"; @@ -56,29 +53,19 @@ function DeleteAreaDialog(props: Props) { // Delete node if (currentArea && !currentLink) { try { - await dispatch( - deleteStudyMapNode({ studyId: study.id, nodeId: currentArea.id }), - ).unwrap(); + await dispatch(deleteStudyMapNode({ studyId: study.id, nodeId: currentArea.id })).unwrap(); dispatch(setCurrentArea("")); } catch (e) { - enqueueErrorSnackbar( - t("study.error.deleteAreaOrLink"), - e as AxiosError, - ); + enqueueErrorSnackbar(t("study.error.deleteAreaOrLink"), e as AxiosError); } } // Delete link if (currentLink && !currentArea) { try { - await dispatch( - deleteStudyMapLink({ studyId: study.id, linkId: currentLink.id }), - ).unwrap(); + await dispatch(deleteStudyMapLink({ studyId: study.id, linkId: currentLink.id })).unwrap(); dispatch(setCurrentLink("")); } catch (e) { - enqueueErrorSnackbar( - t("study.error.deleteAreaOrLink"), - e as AxiosError, - ); + enqueueErrorSnackbar(t("study.error.deleteAreaOrLink"), e as AxiosError); } } }; diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/index.tsx index b92d5a2c96..62204a5d77 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Areas/index.tsx @@ -14,20 +14,17 @@ import { useEffect, useState } from "react"; import { useOutletContext } from "react-router-dom"; -import { StudyMetadata, UpdateAreaUi } from "../../../../../../../common/types"; +import type { StudyMetadata, UpdateAreaUi } from "../../../../../../../common/types"; import PropertiesView from "../../../../../../common/PropertiesView"; import ListElement from "../../../common/ListElement"; import { AreasContainer } from "./style"; import useAppSelector from "../../../../../../../redux/hooks/useAppSelector"; -import { - getCurrentLink, - getCurrentStudyMapNode, -} from "../../../../../../../redux/selectors"; +import { getCurrentLink, getCurrentStudyMapNode } from "../../../../../../../redux/selectors"; import useAppDispatch from "../../../../../../../redux/hooks/useAppDispatch"; import AreaConfig from "./AreaConfig"; import { isSearchMatching } from "../../../../../../../utils/stringUtils"; import { setCurrentArea } from "../../../../../../../redux/ducks/studySyntheses"; -import { StudyMapNode } from "../../../../../../../redux/ducks/studyMaps"; +import type { StudyMapNode } from "../../../../../../../redux/ducks/studyMaps"; interface Props { onAdd: () => void; @@ -42,14 +39,10 @@ function Areas({ onAdd, updateUI, nodes }: Props) { const [searchValue, setSearchValue] = useState(""); const [showAreaConfig, setShowAreaConfig] = useState(false); const currentArea = useAppSelector(getCurrentStudyMapNode); - const currentLink = useAppSelector((state) => - getCurrentLink(state, study.id), - ); + const currentLink = useAppSelector((state) => getCurrentLink(state, study.id)); useEffect(() => { - setFilteredNodes( - nodes.filter(({ id }) => isSearchMatching(searchValue, id)), - ); + setFilteredNodes(nodes.filter(({ id }) => isSearchMatching(searchValue, id))); }, [nodes, searchValue]); useEffect(() => { @@ -65,11 +58,7 @@ function Areas({ onAdd, updateUI, nodes }: Props) { mainContent={ showAreaConfig && ( - + ) } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/CreateAreaDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/CreateAreaDialog.tsx index 0bc219aedb..b8abc007a0 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/CreateAreaDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/CreateAreaDialog.tsx @@ -16,7 +16,7 @@ import { useTranslation } from "react-i18next"; import AddCircleIcon from "@mui/icons-material/AddCircle"; import FormDialog from "../../../../../common/dialogs/FormDialog"; import StringFE from "../../../../../common/fieldEditors/StringFE"; -import { SubmitHandlerPlus } from "../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../common/Form/types"; import useAppSelector from "../../../../../../redux/hooks/useAppSelector"; import { getAreas } from "../../../../../../redux/selectors"; import Fieldset from "../../../../../common/Fieldset"; @@ -72,8 +72,7 @@ function CreateAreaDialog(props: Props) { control={control} fullWidth rules={{ - validate: (v) => - validateString(v, { existingValues: existingAreas }), + validate: (v) => validateString(v, { existingValues: existingAreas }), }} />
    diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/CreateDistrictDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/CreateDistrictDialog.tsx index 6424457700..4a7381c881 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/CreateDistrictDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/CreateDistrictDialog.tsx @@ -18,8 +18,8 @@ import { useOutletContext } from "react-router"; import { useMemo } from "react"; import FormDialog from "../../../../../../../common/dialogs/FormDialog"; import StringFE from "../../../../../../../common/fieldEditors/StringFE"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import SwitchFE from "../../../../../../../common/fieldEditors/SwitchFE"; import Fieldset from "../../../../../../../common/Fieldset"; import useAppDispatch from "../../../../../../../../redux/hooks/useAppDispatch"; @@ -93,8 +93,7 @@ function CreateDistrictDialog(props: Props) { control={control} fullWidth rules={{ - validate: (v) => - validateString(v, { existingValues: existingDistricts }), + validate: (v) => validateString(v, { existingValues: existingDistricts }), }} sx={{ m: 0 }} /> diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/UpdateDistrictDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/UpdateDistrictDialog.tsx index b930986b51..95f18a8b8e 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/UpdateDistrictDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/UpdateDistrictDialog.tsx @@ -14,13 +14,14 @@ import { useTranslation } from "react-i18next"; import { useOutletContext } from "react-router"; -import { Delete, Edit } from "@mui/icons-material"; +import DeleteIcon from "@mui/icons-material/Delete"; +import EditIcon from "@mui/icons-material/Edit"; import { Button, Typography } from "@mui/material"; import { useState } from "react"; import FormDialog from "../../../../../../../common/dialogs/FormDialog"; import StringFE from "../../../../../../../common/fieldEditors/StringFE"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; import { getStudyMapDistrictsById } from "../../../../../../../../redux/selectors"; import SelectFE from "../../../../../../../common/fieldEditors/SelectFE"; @@ -62,9 +63,7 @@ function UpdateDistrictDialog(props: Props) { // Event Handlers //////////////////////////////////////////////////////////////// - const handleSubmit = async ( - data: SubmitHandlerPlus, - ) => { + const handleSubmit = async (data: SubmitHandlerPlus) => { const { districtId, output, comments } = data.values; dispatch( updateStudyMapDistrict({ @@ -92,7 +91,7 @@ function UpdateDistrictDialog(props: Props) { return ( { setValue("name", districtsById[e.target.value as string].name); - setValue( - "output", - districtsById[e.target.value as string].output, - ); - setValue( - "comments", - districtsById[e.target.value as string].comments, - ); + setValue("output", districtsById[e.target.value as string].output); + setValue("comments", districtsById[e.target.value as string].comments); }} /> } + startIcon={} onClick={() => setOpenConfirmationModal(true)} sx={{ mr: 1 }} > diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/index.tsx index dae45e1dda..9bbef532df 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Districts/index.tsx @@ -15,15 +15,13 @@ import { Box, Button } from "@mui/material"; import { useMemo, useState } from "react"; import { useOutletContext } from "react-router"; -import { Add, Edit } from "@mui/icons-material"; +import AddIcon from "@mui/icons-material/Add"; +import EditIcon from "@mui/icons-material/Edit"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; -import { - getAreas, - getStudyMapDistrictsById, -} from "../../../../../../../../redux/selectors"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import { getAreas, getStudyMapDistrictsById } from "../../../../../../../../redux/selectors"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; import TableForm from "../../../../../../../common/TableForm"; import CreateDistrictDialog from "./CreateDistrictDialog"; import useAppDispatch from "../../../../../../../../redux/hooks/useAppDispatch"; @@ -36,15 +34,10 @@ function Districts() { const [t] = useTranslation(); const areas = useAppSelector((state) => getAreas(state, study.id)); const districtsById = useAppSelector(getStudyMapDistrictsById); - const [createDistrictDialogOpen, setCreateDistrictDialogOpen] = - useState(false); - const [updateDistrictDialogOpen, setUpdateDistrictDialogOpen] = - useState(false); - - const columns = useMemo( - () => Object.keys(districtsById).map((id) => id), - [districtsById], - ); + const [createDistrictDialogOpen, setCreateDistrictDialogOpen] = useState(false); + const [updateDistrictDialogOpen, setUpdateDistrictDialogOpen] = useState(false); + + const columns = useMemo(() => Object.keys(districtsById).map((id) => id), [districtsById]); const defaultValues = useMemo(() => { const districts = Object.values(districtsById); @@ -79,9 +72,7 @@ function Districts() { if (data.dirtyValues[areaId]?.[districtId]) { areasByDistrict[districtId].push(areaId); } else { - areasByDistrict[districtId] = areasByDistrict[districtId].filter( - (id) => id !== areaId, - ); + areasByDistrict[districtId] = areasByDistrict[districtId].filter((id) => id !== areaId); } }); }); @@ -119,7 +110,7 @@ function Districts() { color="primary" variant="outlined" size="small" - startIcon={} + startIcon={} onClick={() => setCreateDistrictDialogOpen(true)} sx={{ mr: 1 }} > @@ -129,7 +120,7 @@ function Districts() { color="primary" variant="outlined" size="small" - startIcon={} + startIcon={} onClick={() => setUpdateDistrictDialogOpen(true)} > {t("study.modelization.map.districts.edit")} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/CreateLayerDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/CreateLayerDialog.tsx index 0fb956b319..38674c4aa5 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/CreateLayerDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/CreateLayerDialog.tsx @@ -15,12 +15,12 @@ import { useTranslation } from "react-i18next"; import AddCircleIcon from "@mui/icons-material/AddCircle"; import { useOutletContext } from "react-router"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useMemo } from "react"; import FormDialog from "../../../../../../../common/dialogs/FormDialog"; import StringFE from "../../../../../../../common/fieldEditors/StringFE"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import { createStudyMapLayer } from "../../../../../../../../redux/ducks/studyMaps"; import useAppDispatch from "../../../../../../../../redux/hooks/useAppDispatch"; import useEnqueueErrorSnackbar from "../../../../../../../../hooks/useEnqueueErrorSnackbar"; @@ -56,9 +56,7 @@ function CreateLayerDialog(props: Props) { const handleSubmit = (data: SubmitHandlerPlus) => { try { - dispatch( - createStudyMapLayer({ studyId: study.id, name: data.values.name }), - ); + dispatch(createStudyMapLayer({ studyId: study.id, name: data.values.name })); } catch (e) { enqueueErrorSnackbar(t("study.error.createLayer"), e as AxiosError); } @@ -88,8 +86,7 @@ function CreateLayerDialog(props: Props) { control={control} fullWidth rules={{ - validate: (v) => - validateString(v, { existingValues: existingLayers }), + validate: (v) => validateString(v, { existingValues: existingLayers }), }} /> )} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/UpdateLayerDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/UpdateLayerDialog.tsx index f2a6db5817..c3c9ff5f4a 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/UpdateLayerDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/UpdateLayerDialog.tsx @@ -14,13 +14,14 @@ import { useTranslation } from "react-i18next"; import { useOutletContext } from "react-router"; -import { Delete, Edit } from "@mui/icons-material"; +import DeleteIcon from "@mui/icons-material/Delete"; +import EditIcon from "@mui/icons-material/Edit"; import { Button, Typography } from "@mui/material"; import { useMemo, useState } from "react"; import FormDialog from "../../../../../../../common/dialogs/FormDialog"; import StringFE from "../../../../../../../common/fieldEditors/StringFE"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; import { getStudyMapLayersById } from "../../../../../../../../redux/selectors"; import SelectFE from "../../../../../../../common/fieldEditors/SelectFE"; @@ -67,9 +68,7 @@ function UpdateLayerDialog(props: Props) { // Event Handlers //////////////////////////////////////////////////////////////// - const handleSubmit = async ( - data: SubmitHandlerPlus, - ) => { + const handleSubmit = async (data: SubmitHandlerPlus) => { const { layerId, name } = data.values; if (layerId && name) { @@ -95,7 +94,7 @@ function UpdateLayerDialog(props: Props) { return ( } + startIcon={} disabled={getValues("layerId") === ""} onClick={() => setOpenConfirmationModal(true)} sx={{ mr: 1 }} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/index.tsx index aff05df5c4..4e7885712d 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/Layers/index.tsx @@ -15,15 +15,13 @@ import { Box, Button } from "@mui/material"; import { useMemo, useState } from "react"; import { useOutletContext } from "react-router"; -import { Add, Edit } from "@mui/icons-material"; +import AddIcon from "@mui/icons-material/Add"; +import EditIcon from "@mui/icons-material/Edit"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../../../../common/types"; +import type { StudyMetadata } from "../../../../../../../../common/types"; import useAppSelector from "../../../../../../../../redux/hooks/useAppSelector"; -import { - getAreas, - getStudyMapLayersById, -} from "../../../../../../../../redux/selectors"; -import { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; +import { getAreas, getStudyMapLayersById } from "../../../../../../../../redux/selectors"; +import type { SubmitHandlerPlus } from "../../../../../../../common/Form/types"; import TableForm from "../../../../../../../common/TableForm"; import CreateLayerDialog from "./CreateLayerDialog"; import { updateStudyMapLayer } from "../../../../../../../../redux/ducks/studyMaps"; @@ -81,9 +79,7 @@ function Layers() { if (data.dirtyValues[areaId]?.[layerId]) { areasByLayer[layerId].push(areaId); } else { - areasByLayer[layerId] = areasByLayer[layerId].filter( - (id) => id !== areaId, - ); + areasByLayer[layerId] = areasByLayer[layerId].filter((id) => id !== areaId); } }); }); @@ -120,7 +116,7 @@ function Layers() { color="primary" variant="outlined" size="small" - startIcon={} + startIcon={} onClick={() => setCreateLayerDialogOpen(true)} sx={{ mr: 1 }} > @@ -130,7 +126,7 @@ function Layers() { color="primary" variant="outlined" size="small" - startIcon={} + startIcon={} onClick={() => setUpdateLayerDialogOpen(true)} > {t("study.modelization.map.layers.edit")} diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/index.tsx index e52842abc5..194b6ebced 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapConfig/index.tsx @@ -74,16 +74,10 @@ function MapConfig({ onClose }: Props) {
    - + - + diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapControlButtons.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapControlButtons.tsx index 973245da0f..7bdd0967f5 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapControlButtons.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapControlButtons.tsx @@ -27,12 +27,7 @@ interface Props { zoomLevel: number; } -function MapControlButtons({ - onZoomIn, - onZoomOut, - onOpenConfig, - zoomLevel, -}: Props) { +function MapControlButtons({ onZoomIn, onZoomOut, onOpenConfig, zoomLevel }: Props) { return ( >; + graph: React.RefObject>; onNodePositionChange: (id: string, x: number, y: number) => void; zoomLevel: number; setZoomLevel: DebouncedFunc<(zoom: number) => void>; @@ -123,8 +117,7 @@ function MapGraph({ const handleOnClickLink = (source: string, target: string) => { const isTempLink = - links.find((link) => link.source === source && link.target === target) - ?.temp || false; + links.find((link) => link.source === source && link.target === target)?.temp || false; if (!isTempLink) { dispatch(setCurrentArea("")); @@ -141,11 +134,7 @@ function MapGraph({ }; const handleNodePositionChange = (id: string, x: number, y: number) => { - return onNodePositionChange( - id, - x - width / INITIAL_ZOOM / 2 - 0, - -y + height / 2 + 0, - ); + return onNodePositionChange(id, x - width / INITIAL_ZOOM / 2 - 0, -y + height / 2 + 0); }; const onZoomChange = (previousZoom: number, newZoom: number) => { @@ -175,9 +164,7 @@ function MapGraph({ }, node: { renderLabel: false, - viewGenerator: (node) => ( - - ), + viewGenerator: (node) => , }, link: { color: "#a3a3a3", diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapHeader.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapHeader.tsx index e0d965f0cd..c25a32bd18 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapHeader.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/MapHeader.tsx @@ -14,17 +14,11 @@ import { Box, Chip, Typography } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { LinkProperties } from "../../../../../../common/types"; -import { - StudyMapNode, - setCurrentLayer, -} from "../../../../../../redux/ducks/studyMaps"; +import type { LinkProperties } from "../../../../../../common/types"; +import { setCurrentLayer, type StudyMapNode } from "../../../../../../redux/ducks/studyMaps"; import useAppDispatch from "../../../../../../redux/hooks/useAppDispatch"; import useAppSelector from "../../../../../../redux/hooks/useAppSelector"; -import { - getCurrentLayer, - getStudyMapLayersById, -} from "../../../../../../redux/selectors"; +import { getCurrentLayer, getStudyMapLayersById } from "../../../../../../redux/selectors"; interface Props { links: LinkProperties[]; @@ -86,12 +80,8 @@ function MapHeader(props: Props) { display: "flex", }} > - {`${nodes.length} ${t( - "study.areas", - )}`} - {`${links.length} ${t( - "study.links", - )}`} + {`${nodes.length} ${t("study.areas")}`} + {`${links.length} ${t("study.links")}`}
    ); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Node.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Node.tsx index 2b55de00c4..6f5cfbce81 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Node.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/Node.tsx @@ -13,7 +13,7 @@ */ import AddLinkIcon from "@mui/icons-material/AddLink"; -import { StudyMapNode } from "../../../../../../redux/ducks/studyMaps"; +import type { StudyMapNode } from "../../../../../../redux/ducks/studyMaps"; import { NodeContainer, NodeDefault, NodeHighlighted } from "./style"; interface PropType { diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/index.tsx index c9c53ab10f..688c3dee84 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/index.tsx @@ -16,15 +16,11 @@ import { useEffect, useMemo, useRef, useState } from "react"; import { useOutletContext } from "react-router-dom"; import AutoSizer from "react-virtualized-auto-sizer"; import { useTranslation } from "react-i18next"; -import { Graph, GraphLink, GraphNode } from "react-d3-graph"; -import { AxiosError } from "axios"; +import type { Graph, GraphLink, GraphNode } from "react-d3-graph"; +import type { AxiosError } from "axios"; import * as R from "ramda"; import * as RA from "ramda-adjunct"; -import { - LinkProperties, - StudyMetadata, - UpdateAreaUi, -} from "../../../../../../common/types"; +import type { LinkProperties, StudyMetadata, UpdateAreaUi } from "../../../../../../common/types"; import MapGraph from "./MapGraph"; import Areas from "./Areas"; import CreateAreaDialog from "./CreateAreaDialog"; @@ -42,9 +38,9 @@ import useAppDispatch from "../../../../../../redux/hooks/useAppDispatch"; import MapConfig from "./MapConfig"; import useStudyMaps from "../../../../../../redux/hooks/useStudyMaps"; import { - StudyMapNode, createStudyMapNode, updateStudyMapNode, + type StudyMapNode, } from "../../../../../../redux/ducks/studyMaps"; import UsePromiseCond from "../../../../../common/utils/UsePromiseCond"; import MapHeader from "./MapHeader"; @@ -62,13 +58,10 @@ function Map() { const [openConfig, setOpenConfig] = useState(false); const [zoomLevel, setZoomLevel] = useDebouncedState(INITIAL_ZOOM, 250); const previousNode = useRef(); - const graphRef = - useRef>(null); + const graphRef = useRef>(null); const currentLayerId = useAppSelector(getCurrentLayer); const currentArea = useAppSelector(getCurrentStudyMapNode); - const studyLinks = useAppSelector((state) => - getStudyMapLinks(state, study.id), - ); + const studyLinks = useAppSelector((state) => getStudyMapLinks(state, study.id)); const mapLinks = useMemo( () => R.map( @@ -182,11 +175,7 @@ function Map() { <> - setOpenDialog(true)} - nodes={mapNodes} - updateUI={updateUI} - /> + setOpenDialog(true)} nodes={mapNodes} updateUI={updateUI} /> {openConfig ? ( diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/style.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/style.ts index e3ebde2a05..731775e41d 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/style.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/style.ts @@ -14,7 +14,7 @@ import { styled, Box, Chip } from "@mui/material"; import mapbackground from "../../../../../../assets/img/mapbackground.png"; -import { getTextColor, RGB } from "./utils"; +import { getTextColor, type RGB } from "./utils"; //////////////////////////////////////////////////////////////// // Map(index.tsx) @@ -57,35 +57,31 @@ export interface NodeProps { rgbcolor: number[]; } -export const NodeDefault = styled(Chip)( - ({ theme, nodecolor, rgbcolor }) => ({ - backgroundColor: nodecolor, - "&:hover": { - color: "white", - "& .MuiChip-deleteIcon": { - color: "white", - display: "block", - }, - }, +export const NodeDefault = styled(Chip)(({ theme, nodecolor, rgbcolor }) => ({ + backgroundColor: nodecolor, + "&:hover": { + color: "white", "& .MuiChip-deleteIcon": { - display: "none", - fontSize: 20, - marginLeft: 5, - "&:hover": { - color: theme.palette.primary.main, - }, + color: "white", + display: "block", }, - "& .MuiChip-label": { - textOverflow: "unset", + }, + "& .MuiChip-deleteIcon": { + display: "none", + fontSize: 20, + marginLeft: 5, + "&:hover": { + color: theme.palette.primary.main, }, - color: getTextColor(rgbcolor as RGB), - }), -); + }, + "& .MuiChip-label": { + textOverflow: "unset", + }, + color: getTextColor(rgbcolor as RGB), +})); -export const NodeHighlighted = styled(Chip)( - ({ nodecolor, rgbcolor }) => ({ - color: getTextColor(rgbcolor as RGB), - backgroundColor: `rgba(${rgbcolor[0]}, ${rgbcolor[1]}, ${rgbcolor[2]}, 0.6) !important`, - outline: `2px dashed ${nodecolor}`, - }), -); +export const NodeHighlighted = styled(Chip)(({ nodecolor, rgbcolor }) => ({ + color: getTextColor(rgbcolor as RGB), + backgroundColor: `rgba(${rgbcolor[0]}, ${rgbcolor[1]}, ${rgbcolor[2]}, 0.6) !important`, + outline: `2px dashed ${nodecolor}`, +})); diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/utils.ts b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/utils.ts index 2025d4a71d..c487955831 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/Map/utils.ts +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/Map/utils.ts @@ -13,8 +13,8 @@ */ import { useMemo } from "react"; -import { StudyLayer } from "../../../../../../common/types"; -import { StudyMapNode } from "../../../../../../redux/ducks/studyMaps"; +import type { StudyLayer } from "../../../../../../common/types"; +import type { StudyMapNode } from "../../../../../../redux/ducks/studyMaps"; //////////////////////////////////////////////////////////////// // Types @@ -61,10 +61,7 @@ export const getNodeWidth = (nodeText: string): number => { return fontSize * TEXT_SIZE * 6.5; }; -export function getUpdatedNode( - id: string, - nodeData: StudyMapNode[], -): StudyMapNode | undefined { +export function getUpdatedNode(id: string, nodeData: StudyMapNode[]): StudyMapNode | undefined { return nodeData.find((node) => node.id === id); } @@ -73,9 +70,7 @@ const getLuminanace = (values: RGB): number => { const val = v / 255; return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4; }); - return Number( - (0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3), - ); + return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3)); }; const getContrastRatio = (colorA: RGB, colorB: RGB): number => { @@ -144,13 +139,6 @@ export function useRenderNodes( rgbColor, }; }), - [ - currentLayerId, - nodes, - centerVector.x, - realCenter.x, - realCenter.y, - centerVector.y, - ], + [currentLayerId, nodes, centerVector.x, realCenter.x, realCenter.y, centerVector.y], ); } diff --git a/webapp/src/components/App/Singlestudy/explore/Modelization/index.tsx b/webapp/src/components/App/Singlestudy/explore/Modelization/index.tsx index 0099e90986..265352b0e8 100644 --- a/webapp/src/components/App/Singlestudy/explore/Modelization/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Modelization/index.tsx @@ -16,14 +16,10 @@ import { useEffect, useMemo } from "react"; import { useNavigate, useOutletContext, useParams } from "react-router-dom"; import { Box } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../common/types"; +import type { StudyMetadata } from "../../../../../common/types"; import TabWrapper from "../TabWrapper"; import useAppSelector from "../../../../../redux/hooks/useAppSelector"; -import { - getAreas, - getCurrentAreaId, - getLinks, -} from "../../../../../redux/selectors"; +import { getAreas, getCurrentAreaId, getLinks } from "../../../../../redux/selectors"; import useAppDispatch from "../../../../../redux/hooks/useAppDispatch"; import { setCurrentArea } from "../../../../../redux/ducks/studySyntheses"; diff --git a/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/ResultFilters.tsx b/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/ResultFilters.tsx index 5e460b5d3e..fbfed8a882 100644 --- a/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/ResultFilters.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/ResultFilters.tsx @@ -21,9 +21,9 @@ import NumberFE from "../../../../../common/fieldEditors/NumberFE"; import DownloadMatrixButton from "../../../../../common/buttons/DownloadMatrixButton"; import CheckBoxFE from "@/components/common/fieldEditors/CheckBoxFE"; import SearchFE from "@/components/common/fieldEditors/SearchFE"; -import { clamp, equals } from "ramda"; -import { useState, useMemo, useEffect, ChangeEvent } from "react"; -import { FilterListOff } from "@mui/icons-material"; +import * as R from "ramda"; +import { useState, useMemo, useEffect } from "react"; +import FilterListOffIcon from "@mui/icons-material/FilterListOff"; import { useDebouncedField } from "@/hooks/useDebouncedField"; interface ColumnHeader { @@ -81,16 +81,15 @@ function ResultFilters({ const { t } = useTranslation(); const [filters, setFilters] = useState(defaultFilters); - const { localValue: localYear, handleChange: debouncedYearChange } = - useDebouncedField({ - value: year, - onChange: setYear, - delay: 500, - transformValue: (value: number) => clamp(1, maxYear, value), - }); + const { localValue: localYear, handleChange: debouncedYearChange } = useDebouncedField({ + value: year, + onChange: setYear, + delay: 500, + transformValue: (value: number) => R.clamp(1, maxYear, value), + }); const filtersApplied = useMemo(() => { - return !equals(filters, defaultFilters); + return !R.equals(filters, defaultFilters); }, [filters]); const parsedHeaders = useMemo(() => { @@ -114,10 +113,7 @@ function ResultFilters({ .filter((header) => { // Apply search filter if (filters.search) { - const matchesVariable = matchesSearchTerm( - header.variable, - filters.search, - ); + const matchesVariable = matchesSearchTerm(header.variable, filters.search); const matchesUnit = matchesSearchTerm(header.unit, filters.search); @@ -164,7 +160,7 @@ function ResultFilters({ // Event handlers //////////////////////////////////////////////////////////////// - const handleYearChange = (event: ChangeEvent) => { + const handleYearChange = (event: React.ChangeEvent) => { const value = Number(event.target.value); debouncedYearChange(value); }; @@ -266,7 +262,7 @@ function ResultFilters({ disabled={!filtersApplied} sx={{ ml: 1 }} > - + ), }, diff --git a/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx b/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx index 8df3507b76..073ed57a9e 100644 --- a/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Results/ResultDetails/index.tsx @@ -17,39 +17,22 @@ import { Skeleton, ToggleButton, ToggleButtonGroup, - ToggleButtonGroupProps, + type ToggleButtonGroupProps, } from "@mui/material"; import { useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { useNavigate, useOutletContext, useParams } from "react-router"; import GridOffIcon from "@mui/icons-material/GridOff"; -import { - Area, - LinkElement, - StudyMetadata, -} from "../../../../../../common/types"; +import type { Area, LinkElement, StudyMetadata } from "../../../../../../common/types"; import usePromise from "../../../../../../hooks/usePromise"; import useAppSelector from "../../../../../../redux/hooks/useAppSelector"; -import { - getAreas, - getLinks, - getStudyOutput, -} from "../../../../../../redux/selectors"; +import { getAreas, getLinks, getStudyOutput } from "../../../../../../redux/selectors"; import { getStudyData } from "../../../../../../services/api/study"; import { isSearchMatching } from "../../../../../../utils/stringUtils"; import PropertiesView from "../../../../../common/PropertiesView"; import ListElement from "../../common/ListElement"; -import { - createPath, - DataType, - MAX_YEAR, - OutputItemType, - SYNTHESIS_ITEMS, - Timestep, -} from "./utils"; -import UsePromiseCond, { - mergeResponses, -} from "../../../../../common/utils/UsePromiseCond"; +import { createPath, DataType, MAX_YEAR, OutputItemType, SYNTHESIS_ITEMS, Timestep } from "./utils"; +import UsePromiseCond, { mergeResponses } from "../../../../../common/utils/UsePromiseCond"; import useStudySynthesis from "../../../../../../redux/hooks/useStudySynthesis"; import ButtonBack from "../../../../../common/ButtonBack"; import MatrixGrid from "../../../../../common/Matrix/components/MatrixGrid/index.tsx"; @@ -66,7 +49,7 @@ import { toError } from "../../../../../../utils/fnUtils.ts"; import EmptyView from "../../../../../common/page/EmptyView.tsx"; import { getStudyMatrixIndex } from "../../../../../../services/api/matrix.ts"; import { MatrixGridSynthesis } from "@/components/common/Matrix/components/MatrixGridSynthesis"; -import { ResultMatrixDTO } from "@/components/common/Matrix/shared/types.ts"; +import type { ResultMatrixDTO } from "@/components/common/Matrix/shared/types.ts"; type SetResultColHeaders = (headers: string[][], indices: number[]) => void; @@ -96,30 +79,26 @@ function ResultDetails() { const navigate = useNavigate(); const items = useAppSelector((state) => - itemType === OutputItemType.Areas - ? getAreas(state, study.id) - : getLinks(state, study.id), + itemType === OutputItemType.Areas ? getAreas(state, study.id) : getLinks(state, study.id), ) as Array<{ id: string; name: string; label?: string }>; const filteredItems = useMemo(() => { return isSynthesis ? SYNTHESIS_ITEMS - : items.filter((item) => - isSearchMatching(searchValue, item.label || item.name), - ); + : items.filter((item) => isSearchMatching(searchValue, item.label || item.name)); }, [isSynthesis, items, searchValue]); - const selectedItem = filteredItems.find( - (item) => item.id === selectedItemId, - ) as (Area & { id: string }) | LinkElement | undefined; + const selectedItem = filteredItems.find((item) => item.id === selectedItemId) as + | (Area & { id: string }) + | LinkElement + | undefined; const maxYear = output?.nbyears ?? MAX_YEAR; useEffect( () => { const isValidSelectedItem = - !!selectedItemId && - filteredItems.find((item) => item.id === selectedItemId); + !!selectedItemId && filteredItems.find((item) => item.id === selectedItemId); if (!isValidSelectedItem) { setSelectedItemId(filteredItems.length > 0 ? filteredItems[0].id : ""); @@ -151,9 +130,7 @@ function ResultDetails() { const res = await getStudyData(study.id, path); if (typeof res === "string") { - const fixed = res - .replace(/NaN/g, '"NaN"') - .replace(/Infinity/g, '"Infinity"'); + const fixed = res.replace(/NaN/g, '"NaN"').replace(/Infinity/g, '"Infinity"'); const parsed = JSON.parse(fixed); @@ -202,12 +179,9 @@ function ResultDetails() { }, ); - const { data: dateTimeMetadata } = usePromise( - () => getStudyMatrixIndex(study.id, path), - { - deps: [study.id, path], - }, - ); + const { data: dateTimeMetadata } = usePromise(() => getStudyMatrixIndex(study.id, path), { + deps: [study.id, path], + }); const dateTime = dateTimeMetadata && generateDateTime(dateTimeMetadata); @@ -270,15 +244,9 @@ function ResultDetails() { fullWidth onChange={handleItemTypeChange} > - - {t("study.areas")} - - - {t("study.links")} - - - {t("study.synthesis")} - + {t("study.areas")} + {t("study.links")} + {t("study.synthesis")} ( - - )} + ifPending={() => } ifFulfilled={([, matrix]) => matrix && ( <> {resultColHeaders.length === 0 ? ( - + ) : ( term.trim().toLowerCase()); + const searchTerms = searchTerm.split("|").map((term) => term.trim().toLowerCase()); return searchTerms.some((term) => text.toLowerCase().includes(term)); } diff --git a/webapp/src/components/App/Singlestudy/explore/Results/index.tsx b/webapp/src/components/App/Singlestudy/explore/Results/index.tsx index ea3c94a351..3d46cac5ea 100644 --- a/webapp/src/components/App/Singlestudy/explore/Results/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Results/index.tsx @@ -39,7 +39,7 @@ import * as R from "ramda"; import { useNavigate, useOutletContext } from "react-router-dom"; import { grey } from "@mui/material/colors"; import moment from "moment"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import usePromiseWithSnackbarError from "../../../../../hooks/usePromiseWithSnackbarError"; import { archiveOutput, @@ -49,11 +49,7 @@ import { getStudyOutputs, unarchiveOutput, } from "../../../../../services/api/study"; -import { - LaunchJob, - StudyMetadata, - StudyOutput, -} from "../../../../../common/types"; +import type { LaunchJob, StudyMetadata, StudyOutput } from "../../../../../common/types"; import { convertUTCToLocalTime } from "../../../../../services/utils"; import LaunchJobLogView from "../../../Tasks/LaunchJobLogView"; import useEnqueueErrorSnackbar from "../../../../../hooks/useEnqueueErrorSnackbar"; @@ -81,10 +77,7 @@ type DialogState = } | EmptyObject; -const combineJobsAndOutputs = ( - jobs: LaunchJob[], - outputs: StudyOutput[], -): OutputDetail[] => { +const combineJobsAndOutputs = (jobs: LaunchJob[], outputs: StudyOutput[]): OutputDetail[] => { const runningJobs: OutputDetail[] = jobs .filter((job) => !job.completionDate) .map((job) => { @@ -106,9 +99,7 @@ const combineJobsAndOutputs = ( outputDetail.creationDate = relatedJob.creationDate; outputDetail.job = relatedJob; } else { - const dateComponents = output.name.match( - "(\\d{4})(\\d{2})(\\d{2})-(\\d{2})(\\d{2}).*", - ); + const dateComponents = output.name.match("(\\d{4})(\\d{2})(\\d{2})-(\\d{2})(\\d{2}).*"); if (dateComponents) { outputDetail.completionDate = `${dateComponents[1]}-${dateComponents[2]}-${dateComponents[3]} ${dateComponents[4]}:${dateComponents[5]}`; } @@ -132,11 +123,13 @@ function Results() { const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); const [dialogState, setDialogState] = useState({}); - const { data: studyJobs, isLoading: studyJobsLoading } = - usePromiseWithSnackbarError(() => getStudyJobs(study.id), { + const { data: studyJobs, isLoading: studyJobsLoading } = usePromiseWithSnackbarError( + () => getStudyJobs(study.id), + { errorMessage: t("results.error.jobs"), deps: [study.id], - }); + }, + ); const { data: studyOutputs, @@ -152,18 +145,14 @@ function Results() { return combineJobsAndOutputs(studyJobs, studyOutputs).sort((a, b) => { if (!a.completionDate || !b.completionDate) { if (!a.completionDate && !b.completionDate) { - return moment(a.creationDate).isAfter(moment(b.creationDate)) - ? -1 - : 1; + return moment(a.creationDate).isAfter(moment(b.creationDate)) ? -1 : 1; } if (!a.completionDate) { return -1; } return 1; } - return moment(a.completionDate).isAfter(moment(b.completionDate)) - ? -1 - : 1; + return moment(a.completionDate).isAfter(moment(b.completionDate)) ? -1 : 1; }); } return []; @@ -188,10 +177,7 @@ function Results() { sx={iconStyle} onClick={async () => { handler().catch((e) => { - enqueueErrorSnackbar( - t(errorMessage, { outputname: output.name }), - e as AxiosError, - ); + enqueueErrorSnackbar(t(errorMessage, { outputname: output.name }), e as AxiosError); }); }} /> @@ -249,11 +235,7 @@ function Results() { > {t("global.name")} - + {t("global.date")} @@ -374,11 +356,7 @@ function Results() { - + {renderArchiveTool(row)} {row.completionDate && row.job && ( @@ -395,13 +373,7 @@ function Results() { )} - {row.job && ( - - )} + {row.job && } {row.job?.status === "success" && ( prop !== "border" && prop !== "tabStyle", -})<{ border?: boolean; tabStyle?: "normal" | "withoutBorder" }>( - ({ theme, border, tabStyle }) => ({ - width: "98%", - height: "50px", - ...(border === true && { - borderBottom: 1, - borderColor: "divider", - }), - ...(tabStyle && - tabStyle === "withoutBorder" && { - "& .MuiTabs-indicator": { - display: "none", - }, - }), +})<{ border?: boolean; tabStyle?: "normal" | "withoutBorder" }>(({ theme, border, tabStyle }) => ({ + width: "98%", + height: "50px", + ...(border === true && { + borderBottom: 1, + borderColor: "divider", }), -); + ...(tabStyle && + tabStyle === "withoutBorder" && { + "& .MuiTabs-indicator": { + display: "none", + }, + }), +})); interface TabItem { label: string; @@ -106,12 +103,7 @@ function TabWrapper({ study, tabList, border, tabStyle, sx }: Props) { variant="scrollable" > {tabList.map((tab) => ( - + ))} diff --git a/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/CreateTemplateTableDialog.tsx b/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/CreateTemplateTableDialog.tsx index 34da75ba1a..069c26de05 100644 --- a/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/CreateTemplateTableDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/CreateTemplateTableDialog.tsx @@ -16,12 +16,11 @@ import { useTranslation } from "react-i18next"; import AddCircleIcon from "@mui/icons-material/AddCircle"; import { createTableTemplate, type TableTemplate } from "../utils"; import TableTemplateFormDialog, { - TableTemplateFormDialogProps, + type TableTemplateFormDialogProps, } from "./TableTemplateFormDialog"; -import { SubmitHandlerPlus } from "../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../common/Form/types"; -interface Props - extends Pick { +interface Props extends Pick { setTemplates: React.Dispatch>; templates: TableTemplate[]; } @@ -37,10 +36,7 @@ function CreateTemplateTableDialog(props: Props) { const handleSubmit = (data: SubmitHandlerPlus) => { const { name, type, columns } = data.values; - setTemplates((templates) => [ - ...templates, - createTableTemplate(name, type, columns), - ]); + setTemplates((templates) => [...templates, createTableTemplate(name, type, columns)]); onCancel(); }; diff --git a/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/TableTemplateFormDialog.tsx b/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/TableTemplateFormDialog.tsx index 89cea8497c..4f07287f20 100644 --- a/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/TableTemplateFormDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/TableTemplateFormDialog.tsx @@ -13,11 +13,9 @@ */ import { Box } from "@mui/material"; -import { startCase } from "lodash"; +import startCase from "lodash/startCase"; import { useTranslation } from "react-i18next"; -import FormDialog, { - FormDialogProps, -} from "../../../../../common/dialogs/FormDialog"; +import FormDialog, { type FormDialogProps } from "../../../../../common/dialogs/FormDialog"; import ListFE from "../../../../../common/fieldEditors/ListFE"; import SelectFE from "../../../../../common/fieldEditors/SelectFE"; import StringFE from "../../../../../common/fieldEditors/StringFE"; @@ -36,14 +34,10 @@ export interface TableTemplateFormDialogProps } function TableTemplateFormDialog(props: TableTemplateFormDialogProps) { - const { open, title, titleIcon, config, onSubmit, onCancel, templates } = - props; + const { open, title, titleIcon, config, onSubmit, onCancel, templates } = props; const { t } = useTranslation(); - const existingTables = useMemo( - () => templates.map(({ name }) => name), - [templates], - ); + const existingTables = useMemo(() => templates.map(({ name }) => name), [templates]); const typeOptions = useMemo( () => diff --git a/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/UpdateTemplateTableDialog.tsx b/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/UpdateTemplateTableDialog.tsx index bf602db8dd..76cab292d1 100644 --- a/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/UpdateTemplateTableDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/TableModeList/dialogs/UpdateTemplateTableDialog.tsx @@ -15,13 +15,12 @@ import { useTranslation } from "react-i18next"; import EditIcon from "@mui/icons-material/Edit"; import TableTemplateFormDialog, { - TableTemplateFormDialogProps, + type TableTemplateFormDialogProps, } from "./TableTemplateFormDialog"; -import { TableTemplate } from "../utils"; -import { SubmitHandlerPlus } from "../../../../../common/Form/types"; +import type { TableTemplate } from "../utils"; +import type { SubmitHandlerPlus } from "../../../../../common/Form/types"; -interface Props - extends Pick { +interface Props extends Pick { defaultValues: TableTemplate; setTemplates: React.Dispatch>; templates: TableTemplate[]; @@ -36,9 +35,7 @@ function UpdateTemplateTableDialog(props: Props) { //////////////////////////////////////////////////////////////// const handleSubmit = (data: SubmitHandlerPlus) => { - setTemplates((templates) => - templates.map((t) => (t.id === data.values.id ? data.values : t)), - ); + setTemplates((templates) => templates.map((t) => (t.id === data.values.id ? data.values : t))); onCancel(); }; diff --git a/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx b/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx index c281d9c774..c5e51e595a 100644 --- a/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/TableModeList/index.tsx @@ -23,10 +23,8 @@ import { v4 as uuidv4 } from "uuid"; import PropertiesView from "../../../../common/PropertiesView"; import ListElement from "../common/ListElement"; import type { TableTemplate } from "./utils"; -import storage, { - StorageKey, -} from "../../../../../services/utils/localStorage"; -import { StudyMetadata } from "../../../../../common/types"; +import storage, { StorageKey } from "../../../../../services/utils/localStorage"; +import type { StudyMetadata } from "../../../../../common/types"; import CreateTemplateTableDialog from "./dialogs/CreateTemplateTableDialog"; import UpdateTemplateTableDialog from "./dialogs/UpdateTemplateTableDialog"; import ConfirmationDialog from "../../../../common/dialogs/ConfirmationDialog"; @@ -39,14 +37,13 @@ function TableModeList() { const { t } = useTranslation(); const [templates, setTemplates] = useState(() => { - const list = - storage.getItem(StorageKey.StudiesModelTableModeTemplates) || []; + const list = storage.getItem(StorageKey.StudiesModelTableModeTemplates) || []; return list.map((tp) => ({ ...tp, id: uuidv4() })); }); - const [selectedTemplateId, setSelectedTemplateId] = useState< - TableTemplate["id"] | undefined - >(templates[0]?.id); + const [selectedTemplateId, setSelectedTemplateId] = useState( + templates[0]?.id, + ); const [dialog, setDialog] = useState<{ type: "add" | "edit" | "delete"; @@ -55,8 +52,7 @@ function TableModeList() { const { study } = useOutletContext<{ study: StudyMetadata }>(); const selectedTemplate = templates.find((tp) => tp.id === selectedTemplateId); - const dialogTemplate = - dialog && templates.find((tp) => tp.id === dialog.templateId); + const dialogTemplate = dialog && templates.find((tp) => tp.id === dialog.templateId); // Handle automatic selection of the first element useEffect(() => { @@ -104,9 +100,7 @@ function TableModeList() { }; const handleDelete = () => { - setTemplates((templates) => - templates.filter((tp) => tp.id !== dialog?.templateId), - ); + setTemplates((templates) => templates.filter((tp) => tp.id !== dialog?.templateId)); closeDialog(); }; @@ -131,9 +125,7 @@ function TableModeList() { /> {/* Right */} - {!templates.length && ( - - )} + {!templates.length && } {selectedTemplate && ( (false); + const [currentCandidate, setCurrentCandidate] = useState( candidate, - links, - capacities, - deleteCandidate, - updateCandidate, - onRead, - } = props; - const [openConfirmationModal, setOpenConfirmationModal] = - useState(false); - const [currentCandidate, setCurrentCandidate] = useState< - XpansionCandidate | undefined - >(candidate); + ); const [saveAllowed, setSaveAllowed] = useState(false); const [toggleView, setToggleView] = useState(true); const [useV8LinkProfile, setUseV8LinkProfile] = useState(true); @@ -101,17 +86,9 @@ function CandidateForm(props: PropType) { return ( - + {t("global.general")} - + setOpenConfirmationModal(true)} /> @@ -169,29 +144,18 @@ function CandidateForm(props: PropType) { label={t("xpansion.annualCost")} variant="filled" value={currentCandidate?.["annual-cost-per-mw"] || ""} - onChange={(e) => - handleChange("annual-cost-per-mw", parseFloat(e.target.value)) - } + onChange={(e) => handleChange("annual-cost-per-mw", parseFloat(e.target.value))} /> - handleChange( - "already-installed-capacity", - parseFloat(e.target.value), - ) - } + onChange={(e) => handleChange("already-installed-capacity", parseFloat(e.target.value))} /> - + {toggleView ? ( @@ -221,18 +185,14 @@ function CandidateForm(props: PropType) { label={t("xpansion.unitSize")} variant="filled" value={currentCandidate?.["unit-size"] || ""} - onChange={(e) => - handleChange("unit-size", parseFloat(e.target.value)) - } + onChange={(e) => handleChange("unit-size", parseFloat(e.target.value))} /> - handleChange("max-units", parseFloat(e.target.value)) - } + onChange={(e) => handleChange("max-units", parseFloat(e.target.value))} /> )} @@ -242,9 +202,7 @@ function CandidateForm(props: PropType) { label={t("xpansion.maxInvestments")} variant="filled" value={currentCandidate?.["max-investment"] || ""} - onChange={(e) => - handleChange("max-investment", parseFloat(e.target.value)) - } + onChange={(e) => handleChange("max-investment", parseFloat(e.target.value))} /> )} @@ -324,11 +282,7 @@ function CandidateForm(props: PropType) { list={capacities.map((item) => { return { id: item, name: item }; })} - data={ - currentCandidate?.[ - "direct-already-installed-link-profile" - ] || "" - } + data={currentCandidate?.["direct-already-installed-link-profile"] || ""} handleChange={handleChange} sx={{ minWidth: "100%", @@ -337,14 +291,8 @@ function CandidateForm(props: PropType) { /> - currentCandidate?.[ - "direct-already-installed-link-profile" - ] && - onRead( - currentCandidate?.[ - "direct-already-installed-link-profile" - ] || "", - ) + currentCandidate?.["direct-already-installed-link-profile"] && + onRead(currentCandidate?.["direct-already-installed-link-profile"] || "") } /> @@ -355,11 +303,7 @@ function CandidateForm(props: PropType) { list={capacities.map((item) => { return { id: item, name: item }; })} - data={ - currentCandidate?.[ - "indirect-already-installed-link-profile" - ] || "" - } + data={currentCandidate?.["indirect-already-installed-link-profile"] || ""} handleChange={handleChange} sx={{ minWidth: "100%", @@ -368,14 +312,8 @@ function CandidateForm(props: PropType) { /> - currentCandidate?.[ - "indirect-already-installed-link-profile" - ] && - onRead( - currentCandidate?.[ - "indirect-already-installed-link-profile" - ] || "", - ) + currentCandidate?.["indirect-already-installed-link-profile"] && + onRead(currentCandidate?.["indirect-already-installed-link-profile"] || "") } /> @@ -411,9 +349,7 @@ function CandidateForm(props: PropType) { list={capacities.map((item) => { return { id: item, name: item }; })} - data={ - currentCandidate?.["already-installed-link-profile"] || "" - } + data={currentCandidate?.["already-installed-link-profile"] || ""} handleChange={handleChange} sx={{ minWidth: "100%", @@ -423,10 +359,7 @@ function CandidateForm(props: PropType) { currentCandidate?.["already-installed-link-profile"] && - onRead( - currentCandidate?.["already-installed-link-profile"] || - "", - ) + onRead(currentCandidate?.["already-installed-link-profile"] || "") } /> diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CreateCandidateDialog.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CreateCandidateDialog.tsx index 8e03d0c70d..7a5d5ec2a4 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CreateCandidateDialog.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/CreateCandidateDialog.tsx @@ -17,13 +17,13 @@ import { Button, ButtonGroup } from "@mui/material"; import { useTranslation } from "react-i18next"; import AddCircleIcon from "@mui/icons-material/AddCircle"; import * as R from "ramda"; -import { XpansionCandidate } from "../types"; +import type { XpansionCandidate } from "../types"; import FormDialog from "../../../../../common/dialogs/FormDialog"; import StringFE from "../../../../../common/fieldEditors/StringFE"; import Fieldset from "../../../../../common/Fieldset"; import SelectFE from "../../../../../common/fieldEditors/SelectFE"; import NumberFE from "../../../../../common/fieldEditors/NumberFE"; -import { SubmitHandlerPlus } from "../../../../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../../../../common/Form/types"; import { validateString } from "@/utils/validation/string"; import type { LinkDTO } from "@/services/api/studies/links/types"; @@ -40,10 +40,7 @@ function CreateCandidateDialog(props: PropType) { const [t] = useTranslation(); const [isToggled, setIsToggled] = useState(true); - const existingCandidates = useMemo( - () => candidates.map(({ name }) => name), - [candidates], - ); + const existingCandidates = useMemo(() => candidates.map(({ name }) => name), [candidates]); //////////////////////////////////////////////////////////////// // Event Handlers @@ -54,10 +51,7 @@ function CreateCandidateDialog(props: PropType) { }; const handleSubmit = (data: SubmitHandlerPlus) => { - const values = R.omit( - isToggled ? ["max-investment"] : ["unit-size", "max-units"], - data.values, - ); + const values = R.omit(isToggled ? ["max-investment"] : ["unit-size", "max-units"], data.values); onSave(values); }; @@ -131,22 +125,11 @@ function CreateCandidateDialog(props: PropType) { : t("xpansion.maxInvestments") } > - - - diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/XpansionPropsView.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/XpansionPropsView.tsx index 6da12c7a73..ace585bcfb 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/XpansionPropsView.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/XpansionPropsView.tsx @@ -17,7 +17,7 @@ import { Box, Button } from "@mui/material"; import { useTranslation } from "react-i18next"; import DeleteIcon from "@mui/icons-material/Delete"; import PropertiesView from "../../../../../common/PropertiesView"; -import { XpansionCandidate } from "../types"; +import type { XpansionCandidate } from "../types"; import ConfirmationDialog from "../../../../../common/dialogs/ConfirmationDialog"; import ListElement from "../../common/ListElement"; @@ -31,26 +31,16 @@ interface PropsType { function XpansionPropsView(props: PropsType) { const [t] = useTranslation(); - const { - candidateList, - selectedItem, - setSelectedItem, - onAdd, - deleteXpansion, - } = props; - const [filteredCandidates, setFilteredCandidates] = - useState(candidateList); + const { candidateList, selectedItem, setSelectedItem, onAdd, deleteXpansion } = props; + const [filteredCandidates, setFilteredCandidates] = useState(candidateList); const [searchFilter, setSearchFilter] = useState(""); - const [openConfirmationModal, setOpenConfirmationModal] = - useState(false); + const [openConfirmationModal, setOpenConfirmationModal] = useState(false); const filter = useCallback( (currentName: string): XpansionCandidate[] => { if (candidateList) { return candidateList.filter( - (item) => - !currentName || - item.name.search(new RegExp(currentName, "i")) !== -1, + (item) => !currentName || item.name.search(new RegExp(currentName, "i")) !== -1, ); } return []; diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx index 298dc08e01..d4ed2af97a 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/Candidates/index.tsx @@ -14,13 +14,13 @@ import { useEffect, useState } from "react"; import { useOutletContext, useNavigate } from "react-router-dom"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useTranslation } from "react-i18next"; import { Backdrop, Box, CircularProgress } from "@mui/material"; import { usePromise as usePromiseWrapper } from "react-use"; import { useSnackbar } from "notistack"; -import { StudyMetadata } from "../../../../../../common/types"; -import { XpansionCandidate } from "../types"; +import type { StudyMetadata } from "../../../../../../common/types"; +import type { XpansionCandidate } from "../types"; import { getAllCandidates, getAllCapacities, @@ -31,10 +31,7 @@ import { getCapacity, xpansionConfigurationExist, } from "../../../../../../services/api/xpansion"; -import { - transformNameToId, - removeEmptyFields, -} from "../../../../../../services/utils/index"; +import { transformNameToId, removeEmptyFields } from "../../../../../../services/utils/index"; import useEnqueueErrorSnackbar from "../../../../../../hooks/useEnqueueErrorSnackbar"; import XpansionPropsView from "./XpansionPropsView"; import CreateCandidateDialog from "./CreateCandidateDialog"; @@ -44,7 +41,7 @@ import DataViewerDialog from "../../../../../common/dialogs/DataViewerDialog"; import EmptyView from "../../../../../common/page/EmptyView"; import SplitView from "../../../../../common/SplitView"; import { getLinks } from "@/services/api/studies/links"; -import { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; +import type { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; import ViewWrapper from "@/components/common/page/ViewWrapper"; import SimpleLoader from "@/components/common/loaders/SimpleLoader"; @@ -53,8 +50,7 @@ function Candidates() { const { study } = useOutletContext<{ study?: StudyMetadata }>(); const navigate = useNavigate(); const mounted = usePromiseWrapper(); - const [candidateCreationDialog, setCandidateCreationDialog] = - useState(false); + const [candidateCreationDialog, setCandidateCreationDialog] = useState(false); const [selectedItem, setSelectedItem] = useState(); const [capacityViewDialog, setCapacityViewDialog] = useState<{ filename: string; @@ -78,13 +74,12 @@ function Candidates() { // Candidates const tempCandidates = await getAllCandidates(study.id); for (let i = 0; i < tempCandidates.length; i += 1) { - tempCandidates[i].link = tempCandidates.map( - (item: { link: string }) => - item.link - .split(" - ") - // eslint-disable-next-line @typescript-eslint/no-explicit-any - .map((index: any) => transformNameToId(index)) - .join(" - "), + tempCandidates[i].link = tempCandidates.map((item: { link: string }) => + item.link + .split(" - ") + // eslint-disable-next-line @typescript-eslint/no-explicit-any + .map((index: any) => transformNameToId(index)) + .join(" - "), )[i]; } return tempCandidates; @@ -98,23 +93,22 @@ function Candidates() { }, ); - const { data: capaLinks, isLoading: isLinksLoading } = - usePromiseWithSnackbarError( - async () => { - if (!study) { - return {}; - } - const exist = await xpansionConfigurationExist(study.id); - if (exist) { - return { - capacities: await getAllCapacities(study.id), - links: await getLinks({ studyId: study.id }), - }; - } + const { data: capaLinks, isLoading: isLinksLoading } = usePromiseWithSnackbarError( + async () => { + if (!study) { return {}; - }, - { errorMessage: t("xpansion.error.loadConfiguration"), deps: [study] }, - ); + } + const exist = await xpansionConfigurationExist(study.id); + if (exist) { + return { + capacities: await getAllCapacities(study.id), + links: await getLinks({ studyId: study.id }), + }; + } + return {}; + }, + { errorMessage: t("xpansion.error.loadConfiguration"), deps: [study] }, + ); // Handle automatic selection of the first element useEffect(() => { @@ -129,10 +123,7 @@ function Candidates() { await mounted(deleteXpansionConfiguration(study.id)); } } catch (e) { - enqueueErrorSnackbar( - t("xpansion.error.deleteConfiguration"), - e as AxiosError, - ); + enqueueErrorSnackbar(t("xpansion.error.deleteConfiguration"), e as AxiosError); } finally { navigate("../../xpansion", { state: { exist: false } }); } @@ -145,10 +136,7 @@ function Candidates() { setCandidateCreationDialog(false); } } catch (e) { - enqueueErrorSnackbar( - t("xpansion.error.createCandidate"), - e as AxiosError, - ); + enqueueErrorSnackbar(t("xpansion.error.createCandidate"), e as AxiosError); } finally { reload(); setSelectedItem(candidate.name); @@ -161,10 +149,7 @@ function Candidates() { await mounted(deleteCandidate(study.id, name)); } } catch (e) { - enqueueErrorSnackbar( - t("xpansion.error.deleteCandidate"), - e as AxiosError, - ); + enqueueErrorSnackbar(t("xpansion.error.deleteCandidate"), e as AxiosError); } finally { reload(); setSelectedItem(undefined); @@ -196,10 +181,7 @@ function Candidates() { }); } } catch (e) { - enqueueErrorSnackbar( - t("xpansion.error.updateCandidate"), - e as AxiosError, - ); + enqueueErrorSnackbar(t("xpansion.error.updateCandidate"), e as AxiosError); } finally { reload(); } diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/FileList.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/FileList.tsx index fcb2463ebf..8ba7b1a457 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/FileList.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/FileList.tsx @@ -14,25 +14,22 @@ import { useState } from "react"; import { useOutletContext } from "react-router-dom"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useTranslation } from "react-i18next"; import { Box, Paper } from "@mui/material"; -import { StudyMetadata } from "../../../../../common/types"; +import type { StudyMetadata } from "../../../../../common/types"; import useEnqueueErrorSnackbar from "../../../../../hooks/useEnqueueErrorSnackbar"; import DataViewerDialog from "../../../../common/dialogs/DataViewerDialog"; import FileTable from "../../../../common/FileTable"; import { Title } from "./share/styles"; import usePromiseWithSnackbarError from "../../../../../hooks/usePromiseWithSnackbarError"; import UsePromiseCond from "../../../../common/utils/UsePromiseCond"; -import { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; +import type { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; interface PropTypes { addResource: (studyId: string, file: File) => Promise; deleteResource: (studyId: string, filename: string) => Promise; - fetchResourceContent: ( - studyId: string, - filename: string, - ) => Promise; + fetchResourceContent: (studyId: string, filename: string) => Promise; listResources: (studyId: string) => Promise; errorMessages?: { add?: string; @@ -69,9 +66,7 @@ function FileList(props: PropTypes) { } }, { - errorMessage: t( - errorMessages?.list || "xpansion.error.loadConfiguration", - ), + errorMessage: t(errorMessages?.list || "xpansion.error.loadConfiguration"), }, ); @@ -88,10 +83,7 @@ function FileList(props: PropTypes) { await addResource(study.id, file); } } catch (e) { - enqueueErrorSnackbar( - t(errorMessages?.add || "xpansion.error.addFile"), - e as AxiosError, - ); + enqueueErrorSnackbar(t(errorMessages?.add || "xpansion.error.addFile"), e as AxiosError); } finally { reload(); } @@ -105,10 +97,7 @@ function FileList(props: PropTypes) { setViewDialog({ filename, content }); } } catch (e) { - enqueueErrorSnackbar( - t(errorMessages?.fetchOne || "xpansion.error.getFile"), - e as AxiosError, - ); + enqueueErrorSnackbar(t(errorMessages?.fetchOne || "xpansion.error.getFile"), e as AxiosError); } }; diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/Settings/SettingsForm.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/Settings/SettingsForm.tsx index 259845da99..9bec07e38b 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/Settings/SettingsForm.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/Settings/SettingsForm.tsx @@ -16,13 +16,8 @@ import { useState, useEffect } from "react"; import { Box, Divider, Typography, Button, TextField } from "@mui/material"; import { useTranslation } from "react-i18next"; import SaveIcon from "@mui/icons-material/Save"; -import { XpansionResourceType, XpansionSettings } from "../types"; -import { - Fields, - SelectFields, - Title, - StyledVisibilityIcon, -} from "../share/styles"; +import { XpansionResourceType, type XpansionSettings } from "../types"; +import { Fields, SelectFields, Title, StyledVisibilityIcon } from "../share/styles"; import SelectSingle from "../../../../../common/SelectSingle"; import NumberFE from "../../../../../common/fieldEditors/NumberFE"; import SelectFE from "../../../../../common/fieldEditors/SelectFE"; @@ -39,10 +34,8 @@ interface PropType { function SettingsForm(props: PropType) { const [t] = useTranslation(); - const { settings, constraints, weights, candidates, updateSettings, onRead } = - props; - const [currentSettings, setCurrentSettings] = - useState(settings); + const { settings, constraints, weights, candidates, updateSettings, onRead } = props; + const [currentSettings, setCurrentSettings] = useState(settings); const [saveAllowed, setSaveAllowed] = useState(false); const ucType = ["expansion_fast", "expansion_accurate"]; @@ -80,11 +73,7 @@ function SettingsForm(props: PropType) { return ( - + {t("xpansion.optimization")} @@ -154,9 +141,7 @@ function SettingsForm(props: PropType) { label={t("xpansion.optimalityGap")} variant="filled" value={currentSettings.optimality_gap} - onChange={(e) => - handleChange("optimality_gap", parseFloat(e.target.value)) - } + onChange={(e) => handleChange("optimality_gap", parseFloat(e.target.value))} sx={{ mb: 1 }} inputProps={{ min: 0 }} /> @@ -165,9 +150,7 @@ function SettingsForm(props: PropType) { label={t("xpansion.relativeGap")} variant="filled" value={currentSettings.relative_gap} - onChange={(e) => - handleChange("relative_gap", parseFloat(e.target.value)) - } + onChange={(e) => handleChange("relative_gap", parseFloat(e.target.value))} sx={{ mb: 1 }} inputProps={{ min: 0 }} /> @@ -176,9 +159,7 @@ function SettingsForm(props: PropType) { label={t("xpansion.relaxedOptimalityGap")} variant="filled" value={currentSettings.relaxed_optimality_gap} - onChange={(e) => - handleChange("relaxed_optimality_gap", e.target.value) - } + onChange={(e) => handleChange("relaxed_optimality_gap", e.target.value)} sx={{ mb: 1 }} inputProps={{ min: 0 }} /> @@ -225,9 +206,7 @@ function SettingsForm(props: PropType) { label={t("xpansion.batchSize")} variant="filled" value={currentSettings.batch_size} - onChange={(e) => - handleChange("batch_size", parseInt(e.target.value, 10)) - } + onChange={(e) => handleChange("batch_size", parseInt(e.target.value, 10))} sx={{ mb: 1 }} inputProps={{ min: 0 }} /> @@ -236,9 +215,7 @@ function SettingsForm(props: PropType) { label={t("xpansion.logLevel")} variant="filled" value={currentSettings.log_level} - onChange={(e) => - handleChange("log_level", parseInt(e.target.value, 10)) - } + onChange={(e) => handleChange("log_level", parseInt(e.target.value, 10))} inputProps={{ min: 0, max: 3, step: 1 }} sx={{ mb: 1 }} /> @@ -277,10 +254,7 @@ function SettingsForm(props: PropType) { currentSettings["yearly-weights"] && - onRead( - XpansionResourceType.weights, - currentSettings["yearly-weights"] || "", - ) + onRead(XpansionResourceType.weights, currentSettings["yearly-weights"] || "") } /> @@ -330,20 +304,14 @@ function SettingsForm(props: PropType) { value={currentSettings.sensitivity_config?.epsilon} label={t("xpansion.epsilon")} onChange={(e) => - handleObjectChange( - "sensitivity_config", - "epsilon", - parseFloat(e.target.value), - ) + handleObjectChange("sensitivity_config", "epsilon", parseFloat(e.target.value)) } inputProps={{ min: 0 }} /> - handleObjectChange("sensitivity_config", "capex", checked) - } + onChange={(e, checked) => handleObjectChange("sensitivity_config", "capex", checked)} /> - handleObjectChange( - "sensitivity_config", - "projection", - e.target.value as string[], - ) + handleObjectChange("sensitivity_config", "projection", e.target.value as string[]) } variant="filled" options={candidates} diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/Settings/index.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/Settings/index.tsx index ea11bd06a0..7ea0fd62e2 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/Settings/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/Settings/index.tsx @@ -14,11 +14,11 @@ import { useState } from "react"; import { useOutletContext } from "react-router-dom"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useTranslation } from "react-i18next"; import { useSnackbar } from "notistack"; -import { StudyMetadata } from "../../../../../../common/types"; -import { XpansionResourceType, XpansionSettings } from "../types"; +import type { StudyMetadata } from "../../../../../../common/types"; +import { XpansionResourceType, type XpansionSettings } from "../types"; import { getXpansionSettings, getAllConstraints, @@ -135,10 +135,7 @@ function Settings() { const getResourceContent = async (resourceType: string, filename: string) => { try { if (study) { - const content = await resourceContentFetcher(resourceType)( - study.id, - filename, - ); + const content = await resourceContentFetcher(resourceType)(study.id, filename); setResourceViewDialog({ filename, content, diff --git a/webapp/src/components/App/Singlestudy/explore/Xpansion/index.tsx b/webapp/src/components/App/Singlestudy/explore/Xpansion/index.tsx index 6662c4b15c..799dab9bb9 100644 --- a/webapp/src/components/App/Singlestudy/explore/Xpansion/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Xpansion/index.tsx @@ -14,11 +14,11 @@ /* eslint-disable react-hooks/exhaustive-deps */ import { useEffect, useMemo, useState } from "react"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useOutletContext } from "react-router-dom"; import { Box, Button } from "@mui/material"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../../../common/types"; +import type { StudyMetadata } from "../../../../../common/types"; import { createXpansionConfiguration, xpansionConfigurationExist, @@ -27,7 +27,7 @@ import useEnqueueErrorSnackbar from "../../../../../hooks/useEnqueueErrorSnackba import TabWrapper from "../TabWrapper"; import usePromiseWithSnackbarError from "../../../../../hooks/usePromiseWithSnackbarError"; import UsePromiseCond from "../../../../common/utils/UsePromiseCond"; -import { Add } from "@mui/icons-material"; +import AddIcon from "@mui/icons-material/Add"; function Xpansion() { const { study } = useOutletContext<{ study: StudyMetadata }>(); @@ -35,13 +35,10 @@ function Xpansion() { const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); const [exist, setExist] = useState(false); - const res = usePromiseWithSnackbarError( - () => xpansionConfigurationExist(study.id), - { - errorMessage: t("xpansion.error.loadConfiguration"), - deps: [exist], - }, - ); + const res = usePromiseWithSnackbarError(() => xpansionConfigurationExist(study.id), { + errorMessage: t("xpansion.error.loadConfiguration"), + deps: [exist], + }); const tabList = useMemo( () => [ @@ -87,10 +84,7 @@ function Xpansion() { await createXpansionConfiguration(study.id); } } catch (e) { - enqueueErrorSnackbar( - t("xpansion.error.createConfiguration"), - e as AxiosError, - ); + enqueueErrorSnackbar(t("xpansion.error.createConfiguration"), e as AxiosError); } finally { setExist(true); } @@ -119,17 +113,13 @@ function Xpansion() { color="primary" variant="contained" size="small" - startIcon={} + startIcon={} onClick={createXpansion} > {t("xpansion.newXpansionConfig")} ) : ( - + ) } /> diff --git a/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx b/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx index 5e799e1928..0fbbbbb77e 100644 --- a/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx +++ b/webapp/src/components/App/Singlestudy/explore/common/ListElement.tsx @@ -17,12 +17,12 @@ import { ListItemButton, ListItemIcon, ListItemText, - SxProps, - Theme, Tooltip, + type SxProps, + type Theme, } from "@mui/material"; import ArrowRightOutlinedIcon from "@mui/icons-material/ArrowRightOutlined"; -import { IdType } from "../../../../../common/types"; +import type { IdType } from "../../../../../common/types"; import { mergeSxProp } from "../../../../../utils/muiUtils"; interface Props { @@ -41,17 +41,10 @@ function ListElement({ sx, }: Props) { return ( - + {list.map((element, index) => ( setSelectedItem(element, index)} key={element.id || element.name} sx={{ diff --git a/webapp/src/components/App/Singlestudy/explore/common/OutputFilters.tsx b/webapp/src/components/App/Singlestudy/explore/common/OutputFilters.tsx index 39cef64ff6..bea223f195 100644 --- a/webapp/src/components/App/Singlestudy/explore/common/OutputFilters.tsx +++ b/webapp/src/components/App/Singlestudy/explore/common/OutputFilters.tsx @@ -13,12 +13,12 @@ */ import { useMemo } from "react"; -import { FieldPath } from "react-hook-form"; +import type { FieldPath } from "react-hook-form"; import { useTranslation } from "react-i18next"; import SelectFE from "../../../../common/fieldEditors/SelectFE"; import Fieldset from "../../../../common/Fieldset"; -import { ControlPlus } from "../../../../common/Form/types"; -import { FilteringType } from "./types"; +import type { ControlPlus } from "../../../../common/Form/types"; +import type { FilteringType } from "./types"; interface FilterFieldValues { filterSynthesis: FilteringType[]; @@ -54,9 +54,7 @@ function OutputFilters(props: Props) { control={control} rules={{ onAutoSubmit: (value) => { - const selection = value - ? (value as string[]).filter((val) => val !== "") - : []; + const selection = value ? (value as string[]).filter((val) => val !== "") : []; onAutoSubmit(filterName, selection.join(", ")); }, }} diff --git a/webapp/src/components/App/Singlestudy/explore/common/types.ts b/webapp/src/components/App/Singlestudy/explore/common/types.ts index c9ae042882..e1236bdf00 100644 --- a/webapp/src/components/App/Singlestudy/explore/common/types.ts +++ b/webapp/src/components/App/Singlestudy/explore/common/types.ts @@ -12,9 +12,4 @@ * This file is part of the Antares project. */ -export type FilteringType = - | "hourly" - | "daily" - | "weekly" - | "monthly" - | "annual"; +export type FilteringType = "hourly" | "daily" | "weekly" | "monthly" | "annual"; diff --git a/webapp/src/components/App/Singlestudy/index.tsx b/webapp/src/components/App/Singlestudy/index.tsx index 6823d6db54..1f9e9d13ff 100644 --- a/webapp/src/components/App/Singlestudy/index.tsx +++ b/webapp/src/components/App/Singlestudy/index.tsx @@ -19,26 +19,20 @@ import { Box, Divider } from "@mui/material"; import debug from "debug"; import { useTranslation } from "react-i18next"; import { usePromise as usePromiseWrapper } from "react-use"; -import { StudyMetadata, VariantTree } from "../../../common/types"; +import type { StudyMetadata, VariantTree } from "../../../common/types"; import { getStudyMetadata } from "../../../services/api/study"; import NavHeader from "./NavHeader"; -import { - getVariantChildren, - getVariantParents, -} from "../../../services/api/variant"; +import { getVariantChildren, getVariantParents } from "../../../services/api/variant"; import TabWrapper from "./explore/TabWrapper"; import HomeView from "./HomeView"; -import { - fetchStudyVersions, - setCurrentStudy, -} from "../../../redux/ducks/studies"; +import { fetchStudyVersions, setCurrentStudy } from "../../../redux/ducks/studies"; import { findNodeInTree } from "../../../services/utils"; import CommandDrawer from "./Commands"; import { addWsEventListener } from "../../../services/webSocket/ws"; import useAppDispatch from "../../../redux/hooks/useAppDispatch"; import SimpleLoader from "../../common/loaders/SimpleLoader"; import FreezeStudy from "./FreezeStudy"; -import { WsEvent } from "@/services/webSocket/types"; +import type { WsEvent } from "@/services/webSocket/types"; import { WsEventType } from "@/services/webSocket/constants"; const logError = debug("antares:singlestudy:error"); @@ -172,9 +166,7 @@ function SingleStudy(props: Props) { isExplorer={isExplorer} openCommands={() => setOpenCommands(true)} childrenTree={ - study !== undefined && tree !== undefined - ? findNodeInTree(study.id, tree) - : undefined + study !== undefined && tree !== undefined ? findNodeInTree(study.id, tree) : undefined } /> {!isExplorer && } diff --git a/webapp/src/components/App/Studies/BatchModeMenu.tsx b/webapp/src/components/App/Studies/BatchModeMenu.tsx index a301b4e27f..6abac195ef 100644 --- a/webapp/src/components/App/Studies/BatchModeMenu.tsx +++ b/webapp/src/components/App/Studies/BatchModeMenu.tsx @@ -53,10 +53,7 @@ function BatchModeMenu(props: Props) { > {selectionMode && ( <> - - {openLaunchModal && ( - - )} + {openLaunchModal && } )} diff --git a/webapp/src/components/App/Studies/CreateStudyDialog.tsx b/webapp/src/components/App/Studies/CreateStudyDialog.tsx index c90a52cf5a..3a3446d02d 100644 --- a/webapp/src/components/App/Studies/CreateStudyDialog.tsx +++ b/webapp/src/components/App/Studies/CreateStudyDialog.tsx @@ -15,10 +15,10 @@ import debug from "debug"; import { useSnackbar } from "notistack"; import { useTranslation } from "react-i18next"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { usePromise } from "react-use"; import * as R from "ramda"; -import { StudyPublicMode } from "../../../common/types"; +import type { StudyPublicMode } from "../../../common/types"; import useEnqueueErrorSnackbar from "../../../hooks/useEnqueueErrorSnackbar"; import { createStudy } from "../../../redux/ducks/studies"; import { getStudyVersionsFormatted, getGroups } from "../../../redux/selectors"; @@ -29,7 +29,7 @@ import StringFE from "../../common/fieldEditors/StringFE"; import SelectFE from "../../common/fieldEditors/SelectFE"; import Fieldset from "../../common/Fieldset"; import CheckboxesTagsFE from "../../common/fieldEditors/CheckboxesTagsFE"; -import { SubmitHandlerPlus } from "../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../common/Form/types"; import { PUBLIC_MODE_LIST } from "../../common/utils/constants"; const logErr = debug("antares:createstudyform:error"); @@ -80,10 +80,7 @@ function CreateStudyDialog(props: Props) { }); } catch (e) { logErr("Failed to create new study", name, e); - enqueueErrorSnackbar( - t("studies.error.createStudy", { studyname: name }), - e as AxiosError, - ); + enqueueErrorSnackbar(t("studies.error.createStudy", { studyname: name }), e as AxiosError); } onClose(); } else { diff --git a/webapp/src/components/App/Studies/ExportModal/ExportFilter/Filter/MultipleLinkElement/index.tsx b/webapp/src/components/App/Studies/ExportModal/ExportFilter/Filter/MultipleLinkElement/index.tsx index 91b0c285b6..e4784f5eff 100644 --- a/webapp/src/components/App/Studies/ExportModal/ExportFilter/Filter/MultipleLinkElement/index.tsx +++ b/webapp/src/components/App/Studies/ExportModal/ExportFilter/Filter/MultipleLinkElement/index.tsx @@ -37,10 +37,7 @@ export default function MultipleLinkElement(props: { const [link, setLink] = useState({ area1: "", area2: "" }); const onAddLink = (): void => { - if ( - values.findIndex((elm) => elm === currentLink) < 0 && - currentLink !== "" - ) { + if (values.findIndex((elm) => elm === currentLink) < 0 && currentLink !== "") { onChange(values.concat(currentLink)); } }; @@ -66,9 +63,7 @@ export default function MultipleLinkElement(props: { name={t("study.area1")} list={areas.map((elm) => ({ id: elm, name: elm }))} data={link.area1} - setValue={(elm: string[] | string) => - onSelectChange(0, elm as string) - } + setValue={(elm: string[] | string) => onSelectChange(0, elm as string)} sx={{ flexGrow: 1, px: 0.5 }} required /> @@ -76,9 +71,7 @@ export default function MultipleLinkElement(props: { name={t("study.area2")} list={areas.map((elm) => ({ id: elm, name: elm }))} data={link.area2} - setValue={(elm: string[] | string) => - onSelectChange(1, elm as string) - } + setValue={(elm: string[] | string) => onSelectChange(1, elm as string)} sx={{ flexGrow: 1, px: 0.1 }} required /> diff --git a/webapp/src/components/App/Studies/ExportModal/ExportFilter/Filter/index.tsx b/webapp/src/components/App/Studies/ExportModal/ExportFilter/Filter/index.tsx index d64fc9665d..683092a526 100644 --- a/webapp/src/components/App/Studies/ExportModal/ExportFilter/Filter/index.tsx +++ b/webapp/src/components/App/Studies/ExportModal/ExportFilter/Filter/index.tsx @@ -15,11 +15,7 @@ import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { TextField } from "@mui/material"; -import { - Area, - Set, - StudyOutputDownloadType, -} from "../../../../../../common/types"; +import { StudyOutputDownloadType, type Area, type Set } from "../../../../../../common/types"; import SelectMulti from "../../../../../common/SelectMulti"; import { Root } from "./style"; import MultipleLinkElement from "./MultipleLinkElement"; @@ -50,9 +46,7 @@ function Filter(props: PropTypes) { setFilterInValue, setFilterOutValue, } = props; - const [areasOrDistrictsList, setAreasOrDistrictsList] = useState( - [], - ); + const [areasOrDistrictsList, setAreasOrDistrictsList] = useState([]); useEffect(() => { const getAreasOrDistrictsList = (): string[] => { @@ -107,14 +101,8 @@ function Filter(props: PropTypes) { values={filterValue} onChange={setFilterValue} /> - - + + ); } diff --git a/webapp/src/components/App/Studies/ExportModal/ExportFilter/index.tsx b/webapp/src/components/App/Studies/ExportModal/ExportFilter/index.tsx index a03d0f22fe..310e5ac17f 100644 --- a/webapp/src/components/App/Studies/ExportModal/ExportFilter/index.tsx +++ b/webapp/src/components/App/Studies/ExportModal/ExportFilter/index.tsx @@ -14,15 +14,15 @@ import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; -import _ from "lodash"; +import range from "lodash/range"; import { Box, Checkbox, FormControlLabel, styled } from "@mui/material"; import { - Area, - Set as District, - FileStudyTreeConfigDTO, - StudyOutputDownloadDTO, StudyOutputDownloadLevelDTO, StudyOutputDownloadType, + type Area, + type Set as District, + type FileStudyTreeConfigDTO, + type StudyOutputDownloadDTO, } from "../../../../../common/types"; import Filter from "./Filter"; import TagSelect from "./TagSelect"; @@ -55,9 +55,7 @@ function ExportFilterModal(props: PropTypes) { nbYear: -1, }); const [areaList, setAreaList] = useState>({}); - const [districtList, setDistrictList] = useState>( - {}, - ); + const [districtList, setDistrictList] = useState>({}); const typeList: string[] = [ StudyOutputDownloadType.AREAS, @@ -113,7 +111,7 @@ function ExportFilterModal(props: PropTypes) { {byYear.isByYear && byYear.nbYear > 0 && ( ({ + list={range(byYear.nbYear).map((elm) => ({ id: elm.toString(), name: elm.toString(), }))} @@ -145,25 +143,17 @@ function ExportFilterModal(props: PropTypes) { areas={areaList} sets={districtList} filterValue={filter.filter ? filter.filter : []} - setFilterValue={(elm: string[]) => - setFilter({ ...filter, filter: elm }) - } + setFilterValue={(elm: string[]) => setFilter({ ...filter, filter: elm })} filterInValue={filter.filterIn ? filter.filterIn : ""} - setFilterInValue={(elm: string) => - setFilter({ ...filter, filterIn: elm }) - } + setFilterInValue={(elm: string) => setFilter({ ...filter, filterIn: elm })} filterOutValue={filter.filterOut ? filter.filterOut : ""} - setFilterOutValue={(elm: string) => - setFilter({ ...filter, filterOut: elm }) - } + setFilterOutValue={(elm: string) => setFilter({ ...filter, filterOut: elm })} /> - setFilter({ ...filter, synthesis: checked }) - } + onChange={(e, checked) => setFilter({ ...filter, synthesis: checked })} name={t("study.synthesis")} /> } @@ -174,9 +164,7 @@ function ExportFilterModal(props: PropTypes) { control={ - setFilter({ ...filter, includeClusters: checked }) - } + onChange={(e, checked) => setFilter({ ...filter, includeClusters: checked })} name={t("study.includeClusters")} /> } diff --git a/webapp/src/components/App/Studies/ExportModal/index.tsx b/webapp/src/components/App/Studies/ExportModal/index.tsx index d9d24714cf..4a877f6b60 100644 --- a/webapp/src/components/App/Studies/ExportModal/index.tsx +++ b/webapp/src/components/App/Studies/ExportModal/index.tsx @@ -12,26 +12,24 @@ * This file is part of the Antares project. */ -import { ReactNode, useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import * as R from "ramda"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { Box, Button } from "@mui/material"; import { useTranslation } from "react-i18next"; import { useSnackbar } from "notistack"; import debug from "debug"; -import _ from "lodash"; +import debounce from "lodash/debounce"; import { - FileStudyTreeConfigDTO, - GenericInfo, - StudyMetadata, - StudyOutput, - StudyOutputDownloadDTO, StudyOutputDownloadLevelDTO, StudyOutputDownloadType, + type FileStudyTreeConfigDTO, + type GenericInfo, + type StudyMetadata, + type StudyOutput, + type StudyOutputDownloadDTO, } from "../../../../common/types"; -import BasicDialog, { - BasicDialogProps, -} from "../../../common/dialogs/BasicDialog"; +import BasicDialog, { type BasicDialogProps } from "../../../common/dialogs/BasicDialog"; import useEnqueueErrorSnackbar from "../../../../hooks/useEnqueueErrorSnackbar"; import SelectSingle from "../../../common/SelectSingle"; import { @@ -76,8 +74,7 @@ export default function ExportModal(props: BasicDialogProps & Props) { const [optionSelection, setOptionSelection] = useState("exportWith"); const [outputList, setOutputList] = useState(); const [currentOutput, setCurrentOutput] = useState(); - const [studySynthesis, setStudySynthesis] = - useState(); + const [studySynthesis, setStudySynthesis] = useState(); const [filter, setFilter] = useState({ type: StudyOutputDownloadType.AREAS, level: StudyOutputDownloadLevelDTO.WEEKLY, @@ -85,7 +82,7 @@ export default function ExportModal(props: BasicDialogProps & Props) { includeClusters: false, }); - const exportOutput = _.debounce( + const exportOutput = debounce( async (output: string) => { if (study) { try { @@ -139,9 +136,7 @@ export default function ExportModal(props: BasicDialogProps & Props) { try { const res = await getStudyOutputs(study.id); const tmpSynth = await getStudySynthesis(study.id); - setOutputList( - res.map((o: StudyOutput) => ({ id: o.name, name: o.name })), - ); + setOutputList(res.map((o: StudyOutput) => ({ id: o.name, name: o.name }))); setCurrentOutput(res.length > 0 ? res[0].name : undefined); setStudySynthesis(tmpSynth); } catch (e) { @@ -169,9 +164,8 @@ export default function ExportModal(props: BasicDialogProps & Props) { color="success" variant="contained" disabled={ - ["exportOutputFilter", "exportOutput"].indexOf( - optionSelection, - ) !== -1 && currentOutput === undefined + ["exportOutputFilter", "exportOutput"].indexOf(optionSelection) !== -1 && + currentOutput === undefined } onClick={onExportClick} > @@ -196,8 +190,7 @@ export default function ExportModal(props: BasicDialogProps & Props) { {R.cond([ [ () => - (optionSelection === "exportOutput" || - optionSelection === "exportOutputFilter") && + (optionSelection === "exportOutput" || optionSelection === "exportOutputFilter") && outputList !== undefined, () => ( @@ -209,14 +202,12 @@ export default function ExportModal(props: BasicDialogProps & Props) { sx={{ width: "300px", my: 3 }} required /> - ) as ReactNode, + ) as React.ReactNode, ], ])()} {R.cond([ [ - () => - optionSelection === "exportOutputFilter" && - currentOutput !== undefined, + () => optionSelection === "exportOutputFilter" && currentOutput !== undefined, () => ( - ) as ReactNode, + ) as React.ReactNode, ], ])()} diff --git a/webapp/src/components/App/Studies/FilterDrawer.tsx b/webapp/src/components/App/Studies/FilterDrawer.tsx index 676fb27f91..6dc6881ce5 100644 --- a/webapp/src/components/App/Studies/FilterDrawer.tsx +++ b/webapp/src/components/App/Studies/FilterDrawer.tsx @@ -20,14 +20,9 @@ import { Button, Drawer, List, ListItem, Typography } from "@mui/material"; import { useEffect, useRef } from "react"; import { STUDIES_FILTER_WIDTH } from "../../../theme"; import useAppSelector from "../../../redux/hooks/useAppSelector"; -import { - getGroups, - getStudyFilters, - getStudyVersions, - getUsers, -} from "../../../redux/selectors"; +import { getGroups, getStudyFilters, getStudyVersions, getUsers } from "../../../redux/selectors"; import useAppDispatch from "../../../redux/hooks/useAppDispatch"; -import { StudyFilters, updateStudyFilters } from "../../../redux/ducks/studies"; +import { updateStudyFilters, type StudyFilters } from "../../../redux/ducks/studies"; import CheckboxesTagsFE from "../../common/fieldEditors/CheckboxesTagsFE"; import { displayVersionName } from "../../../services/utils"; import CheckBoxFE from "../../common/fieldEditors/CheckBoxFE"; @@ -154,13 +149,9 @@ function FilterDrawer(props: Props) { label={t("global.users")} options={users} getOptionLabel={(option) => option.name} - defaultValue={users.filter((user) => - filters.users.includes(user.id), - )} + defaultValue={users.filter((user) => filters.users.includes(user.id))} onChange={(event) => { - filterNewValuesRef.current.users = event.target.value.map( - (val) => val.id, - ); + filterNewValuesRef.current.users = event.target.value.map((val) => val.id); }} fullWidth /> @@ -170,13 +161,9 @@ function FilterDrawer(props: Props) { label={t("global.groups")} options={groups} getOptionLabel={(option) => option.name} - defaultValue={groups.filter((group) => - filters.groups.includes(group.id), - )} + defaultValue={groups.filter((group) => filters.groups.includes(group.id))} onChange={(event) => { - filterNewValuesRef.current.groups = event.target.value.map( - (val) => val.id, - ); + filterNewValuesRef.current.groups = event.target.value.map((val) => val.id); }} fullWidth /> diff --git a/webapp/src/components/App/Studies/HeaderBottom.tsx b/webapp/src/components/App/Studies/HeaderBottom.tsx index bfab7c6511..5732c8b1c8 100644 --- a/webapp/src/components/App/Studies/HeaderBottom.tsx +++ b/webapp/src/components/App/Studies/HeaderBottom.tsx @@ -19,8 +19,8 @@ import { useUnmount } from "react-use"; import useAppSelector from "../../../redux/hooks/useAppSelector"; import { getGroups, getStudyFilters, getUsers } from "../../../redux/selectors"; import useAppDispatch from "../../../redux/hooks/useAppDispatch"; -import { StudyFilters, updateStudyFilters } from "../../../redux/ducks/studies"; -import { GroupDTO, UserDTO } from "../../../common/types"; +import { updateStudyFilters, type StudyFilters } from "../../../redux/ducks/studies"; +import type { GroupDTO, UserDTO } from "../../../common/types"; import { displayVersionName } from "../../../services/utils"; import SearchFE from "../../common/fieldEditors/SearchFE"; @@ -55,10 +55,7 @@ function HeaderBottom(props: PropTypes) { // Utils //////////////////////////////////////////////////////////////// - const setFilterValue = ( - string: T, - newValue: StudyFilters[T], - ) => { + const setFilterValue = (string: T, newValue: StudyFilters[T]) => { dispatch(updateStudyFilters({ [string]: newValue })); }; diff --git a/webapp/src/components/App/Studies/HeaderTopRight.tsx b/webapp/src/components/App/Studies/HeaderTopRight.tsx index 24d30de6ea..54a02452e4 100644 --- a/webapp/src/components/App/Studies/HeaderTopRight.tsx +++ b/webapp/src/components/App/Studies/HeaderTopRight.tsx @@ -32,10 +32,7 @@ function HeaderRight() { // Event Handlers //////////////////////////////////////////////////////////////// - const handleImport = ( - file: File, - onUploadProgress: (progress: number) => void, - ) => { + const handleImport = (file: File, onUploadProgress: (progress: number) => void) => { return dispatch( createStudy({ file, @@ -68,10 +65,7 @@ function HeaderRight() { {t("global.create")} {openCreateDialog && ( - setOpenCreateDialog(false)} - /> + setOpenCreateDialog(false)} /> )} {openUploadDialog && ( { if (studyIds.length > 0) { setIsLaunching(true); - Promise.all( - studyIds.map((sid) => launchStudy(sid, options, solverVersion)), - ) + Promise.all(studyIds.map((sid) => launchStudy(sid, options, solverVersion))) .then(() => { enqueueSnackbar( t("studies.studylaunched", { @@ -151,20 +145,14 @@ function LauncherDialog(props: Props) { } }; - const handleChange = ( - field: T, - value: LaunchOptions[T], - ) => { + const handleChange = (field: T, value: LaunchOptions[T]) => { setOptions((prevOptions) => ({ ...prevOptions, [field]: value, })); }; - const handleObjectChange = ( - field: T, - value: object, - ) => { + const handleObjectChange = (field: T, value: object) => { setOptions((prevOptions: LaunchOptions) => { return { ...prevOptions, @@ -173,9 +161,7 @@ function LauncherDialog(props: Props) { }); }; - const handleOtherOptionsChange = ( - optionChanges: Array<{ option: string; active: boolean }>, - ) => { + const handleOtherOptionsChange = (optionChanges: Array<{ option: string; active: boolean }>) => { setOptions((prevOptions) => { const { other_options: prevOtherOptions = "" } = prevOptions; const { toAdd, toRemove } = optionChanges.reduce( @@ -215,11 +201,7 @@ function LauncherDialog(props: Props) { sx={{ mx: 2 }} color="primary" variant="contained" - disabled={ - isLaunching || - !launcherCores.isFulfilled || - !launcherTimeLimit.isFulfilled - } + disabled={isLaunching || !launcherCores.isFulfilled || !launcherTimeLimit.isFulfilled} onClick={handleLaunchClick} > {t("global.launch")} @@ -270,9 +252,7 @@ function LauncherDialog(props: Props) { type="text" variant="outlined" value={options.output_suffix} - onChange={(e) => - handleChange("output_suffix", e.target.value.trim()) - } + onChange={(e) => handleChange("output_suffix", e.target.value.trim())} InputLabelProps={{ shrink: true, }} @@ -290,17 +270,12 @@ function LauncherDialog(props: Props) { type="number" variant="outlined" required - value={ - options.time_limit - ? options.time_limit / 3600 - : timeLimit.defaultValue - } + value={options.time_limit ? options.time_limit / 3600 : timeLimit.defaultValue} onChange={(e) => { const newValue = parseInt(e.target.value, 10); handleChange( "time_limit", - Math.min(Math.max(newValue, timeLimit.min), timeLimit.max) * - 3600, + Math.min(Math.max(newValue, timeLimit.min), timeLimit.max) * 3600, ); }} InputLabelProps={{ @@ -332,10 +307,7 @@ function LauncherDialog(props: Props) { value={options.nb_cpu ? options.nb_cpu : cores.defaultValue} onChange={(e) => { const newValue = parseInt(e.target.value, 10); - handleChange( - "nb_cpu", - Math.min(Math.max(newValue, cores.min), cores.max), - ); + handleChange("nb_cpu", Math.min(Math.max(newValue, cores.min), cores.max)); }} inputProps={{ min: cores.min, @@ -423,13 +395,8 @@ function LauncherDialog(props: Props) { label="Adequacy patch R" value={!!options.adequacy_patch} onChange={(e, checked) => { - handleChange( - "adequacy_patch", - checked ? { legacy: true } : undefined, - ); - handleOtherOptionsChange([ - { option: "adq_patch_rc", active: checked }, - ]); + handleChange("adequacy_patch", checked ? { legacy: true } : undefined); + handleOtherOptionsChange([{ option: "adq_patch_rc", active: checked }]); }} /> { - handleChange( - "xpansion", - checked ? { enabled: true } : undefined, - ); + handleChange("xpansion", checked ? { enabled: true } : undefined); }} /> diff --git a/webapp/src/components/App/Studies/MoveStudyDialog.tsx b/webapp/src/components/App/Studies/MoveStudyDialog.tsx index ff9687f8af..a8004cd094 100644 --- a/webapp/src/components/App/Studies/MoveStudyDialog.tsx +++ b/webapp/src/components/App/Studies/MoveStudyDialog.tsx @@ -12,21 +12,18 @@ * This file is part of the Antares project. */ -import { DialogProps } from "@mui/material"; +import type { DialogProps } from "@mui/material"; import { useSnackbar } from "notistack"; import { useTranslation } from "react-i18next"; -import { StudyMetadata } from "../../../common/types"; +import type { StudyMetadata } from "../../../common/types"; import { moveStudy } from "../../../services/api/study"; import FormDialog from "../../common/dialogs/FormDialog"; -import { SubmitHandlerPlus } from "../../common/Form/types"; +import type { SubmitHandlerPlus } from "../../common/Form/types"; import StringFE from "@/components/common/fieldEditors/StringFE"; import * as R from "ramda"; import { validatePath } from "@/utils/validation/string"; -function formalizePath( - path: string | undefined, - studyId?: StudyMetadata["id"], -) { +function formalizePath(path: string | undefined, studyId?: StudyMetadata["id"]) { const trimmedPath = path?.trim(); if (!trimmedPath) { @@ -71,9 +68,7 @@ function MoveStudyDialog(props: Props) { return moveStudy(study.id, path); }; - const handleSubmitSuccessful = ( - data: SubmitHandlerPlus, - ) => { + const handleSubmitSuccessful = (data: SubmitHandlerPlus) => { onClose(); enqueueSnackbar( diff --git a/webapp/src/components/App/Studies/SideNav.tsx b/webapp/src/components/App/Studies/SideNav.tsx index b966f27fd6..085f6bc644 100644 --- a/webapp/src/components/App/Studies/SideNav.tsx +++ b/webapp/src/components/App/Studies/SideNav.tsx @@ -37,9 +37,7 @@ function SideNav() { p={2} sx={{ overflowX: "hidden", overflowY: "auto" }} > - - {t("studies.favorites")} - + {t("studies.favorites")} {favorites.map((fav) => ( void; @@ -77,8 +77,7 @@ const StudyCardCell = memo( const { isScrolling: prevIsScrolling, ...prevRest } = prevProps; const { isScrolling: nextIsScrolling, ...nextRest } = nextProps; return ( - !!(nextIsScrolling === prevIsScrolling || nextIsScrolling) && - areEqual(prevRest, nextRest) + !!(nextIsScrolling === prevIsScrolling || nextIsScrolling) && areEqual(prevRest, nextRest) ); }, ); diff --git a/webapp/src/components/App/Studies/StudiesList/index.tsx b/webapp/src/components/App/Studies/StudiesList/index.tsx index 89326dfff9..c58a775e30 100644 --- a/webapp/src/components/App/Studies/StudiesList/index.tsx +++ b/webapp/src/components/App/Studies/StudiesList/index.tsx @@ -20,12 +20,12 @@ import { Select, MenuItem, ListItemText, - SelectChangeEvent, ListItemIcon, Tooltip, FormControl, InputLabel, IconButton, + type SelectChangeEvent, } from "@mui/material"; import { useTranslation } from "react-i18next"; import NavigateNextIcon from "@mui/icons-material/NavigateNext"; @@ -36,16 +36,16 @@ import ArrowDownwardIcon from "@mui/icons-material/ArrowDownward"; import FolderIcon from "@mui/icons-material/Folder"; import AccountTreeIcon from "@mui/icons-material/AccountTree"; import RadarIcon from "@mui/icons-material/Radar"; -import { FixedSizeGrid, GridOnScrollProps } from "react-window"; +import { FixedSizeGrid, type GridOnScrollProps } from "react-window"; import { v4 as uuidv4 } from "uuid"; -import { AxiosError } from "axios"; -import { StudyMetadata } from "../../../../common/types"; +import type { AxiosError } from "axios"; +import type { StudyMetadata } from "../../../../common/types"; import { STUDIES_LIST_HEADER_HEIGHT } from "../../../../theme"; import { setStudyScrollPosition, - StudiesSortConf, updateStudiesSortConf, updateStudyFilters, + type StudiesSortConf, } from "../../../../redux/ducks/studies"; import LauncherDialog from "../LauncherDialog"; import useDebounce from "../../../../hooks/useDebounce"; @@ -75,15 +75,11 @@ function StudiesList(props: StudiesListProps) { const { studyIds } = props; const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); const [t] = useTranslation(); - const [studyToLaunch, setStudyToLaunch] = useState< - StudyMetadata["id"] | null - >(null); + const [studyToLaunch, setStudyToLaunch] = useState(null); const scrollPosition = useAppSelector(getStudiesScrollPosition); const sortConf = useAppSelector(getStudiesSortConf); const folder = useAppSelector((state) => getStudyFilters(state).folder); - const strictFolderFilter = useAppSelector( - (state) => getStudyFilters(state).strictFolder, - ); + const strictFolderFilter = useAppSelector((state) => getStudyFilters(state).strictFolder); const [folderList, setFolderList] = useState(folder.split("/")); const dispatch = useAppDispatch(); const sortLabelId = useRef(uuidv4()).current; @@ -215,10 +211,7 @@ function StudiesList(props: StudiesListProps) { alignItems="center" boxSizing="border-box" > - } - aria-label="breadcrumb" - > + } aria-label="breadcrumb"> {folderList.map((fol, index) => { const path = folderList.slice(0, index + 1).join("/"); if (index === 0) { @@ -363,11 +356,7 @@ function StudiesList(props: StudiesListProps) { }} > - {conf.order === "ascend" ? ( - - ) : ( - - )} + {conf.order === "ascend" ? : } @@ -382,8 +371,7 @@ function StudiesList(props: StudiesListProps) { {({ height, width }) => { const paddedWidth = width - 10; const columnWidth = - paddedWidth / - Math.max(Math.floor(paddedWidth / CARD_TARGET_WIDTH), 1); + paddedWidth / Math.max(Math.floor(paddedWidth / CARD_TARGET_WIDTH), 1); const columnCount = Math.floor(paddedWidth / columnWidth); const rowHeight = CARD_HEIGHT; @@ -417,11 +405,7 @@ function StudiesList(props: StudiesListProps) { {studyToLaunch && ( - setStudyToLaunch(null)} - /> + setStudyToLaunch(null)} /> )} ); diff --git a/webapp/src/components/App/Studies/StudyCard/ActionsMenu.tsx b/webapp/src/components/App/Studies/StudyCard/ActionsMenu.tsx index 8c1b1cee79..465e22dde8 100644 --- a/webapp/src/components/App/Studies/StudyCard/ActionsMenu.tsx +++ b/webapp/src/components/App/Studies/StudyCard/ActionsMenu.tsx @@ -14,13 +14,7 @@ import useEnqueueErrorSnackbar from "@/hooks/useEnqueueErrorSnackbar"; import { archiveStudy, copyStudy, unarchiveStudy } from "@/services/api/study"; -import { - ListItemIcon, - ListItemText, - Menu, - MenuItem, - type MenuProps, -} from "@mui/material"; +import { ListItemIcon, ListItemText, Menu, MenuItem, type MenuProps } from "@mui/material"; import ArchiveOutlinedIcon from "@mui/icons-material/ArchiveOutlined"; import UnarchiveOutlinedIcon from "@mui/icons-material/UnarchiveOutlined"; import DownloadOutlinedIcon from "@mui/icons-material/DownloadOutlined"; @@ -61,10 +55,7 @@ function ActionsMenu(props: Props) { const handleUnarchiveClick = () => { unarchiveStudy(study.id).catch((err) => { - enqueueErrorSnackbar( - t("studies.error.unarchive", { studyname: study.name }), - err, - ); + enqueueErrorSnackbar(t("studies.error.unarchive", { studyname: study.name }), err); logError("Failed to unarchive study", study, err); }); @@ -73,10 +64,7 @@ function ActionsMenu(props: Props) { const handleArchiveClick = () => { archiveStudy(study.id).catch((err) => { - enqueueErrorSnackbar( - t("studies.error.archive", { studyname: study.name }), - err, - ); + enqueueErrorSnackbar(t("studies.error.archive", { studyname: study.name }), err); logError("Failed to archive study", study, err); }); @@ -84,11 +72,7 @@ function ActionsMenu(props: Props) { }; const handleCopyClick = () => { - copyStudy( - study.id, - `${study.name} (${t("studies.copySuffix")})`, - false, - ).catch((err) => { + copyStudy(study.id, `${study.name} (${t("studies.copySuffix")})`, false).catch((err) => { enqueueErrorSnackbar(t("studies.error.copyStudy"), err); logError("Failed to copy study", study, err); }); @@ -139,36 +123,11 @@ function ActionsMenu(props: Props) { return ( {[ - menuItem( - !study.archived, - t("global.launch"), - BoltIcon, - handleLaunchClick, - ), - menuItem( - !study.archived, - t("study.properties"), - EditOutlinedIcon, - handlePropertiesClick, - ), - menuItem( - !study.archived, - t("global.copy"), - FileCopyOutlinedIcon, - handleCopyClick, - ), - menuItem( - study.managed, - t("studies.moveStudy"), - DriveFileMoveIcon, - handleMoveClick, - ), - menuItem( - !study.archived, - t("global.export"), - DownloadOutlinedIcon, - handleExportClick, - ), + menuItem(!study.archived, t("global.launch"), BoltIcon, handleLaunchClick), + menuItem(!study.archived, t("study.properties"), EditOutlinedIcon, handlePropertiesClick), + menuItem(!study.archived, t("global.copy"), FileCopyOutlinedIcon, handleCopyClick), + menuItem(study.managed, t("studies.moveStudy"), DriveFileMoveIcon, handleMoveClick), + menuItem(!study.archived, t("global.export"), DownloadOutlinedIcon, handleExportClick), menuItem( study.archived, t("global.unarchive"), diff --git a/webapp/src/components/App/Studies/StudyCard/index.tsx b/webapp/src/components/App/Studies/StudyCard/index.tsx index 89813e6271..2f30ad6572 100644 --- a/webapp/src/components/App/Studies/StudyCard/index.tsx +++ b/webapp/src/components/App/Studies/StudyCard/index.tsx @@ -14,7 +14,7 @@ import { memo, useState } from "react"; import { NavLink, useNavigate } from "react-router-dom"; -import { AxiosError } from "axios"; +import type { AxiosError } from "axios"; import { useSnackbar } from "notistack"; import { useTranslation } from "react-i18next"; import { @@ -40,7 +40,7 @@ import ContentCopyIcon from "@mui/icons-material/ContentCopy"; import AltRouteOutlinedIcon from "@mui/icons-material/AltRouteOutlined"; import debug from "debug"; import { areEqual } from "react-window"; -import { StudyMetadata, StudyType } from "../../../../common/types"; +import { StudyType, type StudyMetadata } from "../../../../common/types"; import { buildModificationDate, convertUTCToLocalTime, @@ -301,9 +301,7 @@ const StudyCard = memo((props: Props) => { }} > - - {convertUTCToLocalTime(study.creationDate)} - + {convertUTCToLocalTime(study.creationDate)} { }} > - - {buildModificationDate(study.modificationDate, t, i18n.language)} - + {buildModificationDate(study.modificationDate, t, i18n.language)} {`v${displayVersionName(study.version)}`} @@ -348,12 +344,7 @@ const StudyCard = memo((props: Props) => { }} > {study.archived && ( - } - label="archive" - color="warning" - size="small" - /> + } label="archive" color="warning" size="small" /> )} {study.type === StudyType.VARIANT && ( { }} /> {study.tags?.map((tag) => ( - + ))} @@ -406,9 +392,7 @@ const StudyCard = memo((props: Props) => { /> {/* Keep conditional rendering for dialogs and not use only `open` property, because API calls are made on mount */} - {openDialog === "properties" && ( - - )} + {openDialog === "properties" && } {openDialog === "delete" && ( { {t("studies.question.delete")} )} - {openDialog === "export" && ( - - )} - {openDialog === "move" && ( - - )} + {openDialog === "export" && } + {openDialog === "move" && } ); }, areEqual); diff --git a/webapp/src/components/App/Studies/StudyTree/StudyTreeNode.tsx b/webapp/src/components/App/Studies/StudyTree/StudyTreeNode.tsx index 9b2d6cdff6..e3e688a03c 100644 --- a/webapp/src/components/App/Studies/StudyTree/StudyTreeNode.tsx +++ b/webapp/src/components/App/Studies/StudyTree/StudyTreeNode.tsx @@ -13,7 +13,7 @@ */ import { memo } from "react"; -import { StudyTreeNodeProps } from "./types"; +import type { StudyTreeNodeProps } from "./types"; import TreeItemEnhanced from "@/components/common/TreeItemEnhanced"; import { t } from "i18next"; @@ -22,11 +22,8 @@ export default memo(function StudyTreeNode({ parentId, onNodeClick, }: StudyTreeNodeProps) { - const isLoadingFolder = - studyTreeNode.hasChildren && studyTreeNode.children.length === 0; - const id = parentId - ? `${parentId}/${studyTreeNode.name}` - : studyTreeNode.name; + const isLoadingFolder = studyTreeNode.hasChildren && studyTreeNode.children.length === 0; + const id = parentId ? `${parentId}/${studyTreeNode.name}` : studyTreeNode.name; if (isLoadingFolder) { return ( @@ -35,10 +32,7 @@ export default memo(function StudyTreeNode({ label={studyTreeNode.name} onClick={() => onNodeClick(id, studyTreeNode)} > - + ); } diff --git a/webapp/src/components/App/Studies/StudyTree/__test__/fixtures.ts b/webapp/src/components/App/Studies/StudyTree/__test__/fixtures.ts index 1fe3237182..11ac4c986e 100644 --- a/webapp/src/components/App/Studies/StudyTree/__test__/fixtures.ts +++ b/webapp/src/components/App/Studies/StudyTree/__test__/fixtures.ts @@ -12,7 +12,7 @@ * This file is part of the Antares project. */ -import { StudyMetadata, StudyType } from "@/common/types"; +import { StudyType, type StudyMetadata } from "@/common/types"; function createStudyMetadata(folder: string, workspace: string): StudyMetadata { return { @@ -139,9 +139,7 @@ export const FIXTURES = { { name: "suba", path: "/a/suba", - children: [ - { name: "folder1", path: "/a/suba/folder1", children: [] }, - ], + children: [{ name: "folder1", path: "/a/suba/folder1", children: [] }], }, ], }, diff --git a/webapp/src/components/App/Studies/StudyTree/__test__/utils.test.ts b/webapp/src/components/App/Studies/StudyTree/__test__/utils.test.ts index 0578313bb1..5a5fa03fe2 100644 --- a/webapp/src/components/App/Studies/StudyTree/__test__/utils.test.ts +++ b/webapp/src/components/App/Studies/StudyTree/__test__/utils.test.ts @@ -13,22 +13,15 @@ */ import { FIXTURES, FIXTURES_BUILD_STUDY_TREE } from "./fixtures"; -import { - buildStudyTree, - insertFoldersIfNotExist, - insertWorkspacesIfNotExist, -} from "../utils"; -import { NonStudyFolderDTO, StudyTreeNode } from "../types"; +import { buildStudyTree, insertFoldersIfNotExist, insertWorkspacesIfNotExist } from "../utils"; +import type { NonStudyFolderDTO, StudyTreeNode } from "../types"; describe("StudyTree Utils", () => { describe("mergeStudyTreeAndFolders", () => { - test.each(Object.values(FIXTURES))( - "$name", - ({ studyTree, folders, expected }) => { - const result = insertFoldersIfNotExist(studyTree, folders); - expect(result).toEqual(expected); - }, - ); + test.each(Object.values(FIXTURES))("$name", ({ studyTree, folders, expected }) => { + const result = insertFoldersIfNotExist(studyTree, folders); + expect(result).toEqual(expected); + }); test("should handle empty study tree", () => { const emptyTree: StudyTreeNode = { @@ -114,12 +107,9 @@ describe("StudyTree Utils", () => { expect(result).toEqual(expected); }); - test.each(Object.values(FIXTURES_BUILD_STUDY_TREE))( - "$name", - ({ studies, expected }) => { - const result = buildStudyTree(studies); - expect(result).toEqual(expected); - }, - ); + test.each(Object.values(FIXTURES_BUILD_STUDY_TREE))("$name", ({ studies, expected }) => { + const result = buildStudyTree(studies); + expect(result).toEqual(expected); + }); }); }); diff --git a/webapp/src/components/App/Studies/StudyTree/index.tsx b/webapp/src/components/App/Studies/StudyTree/index.tsx index 659b05d906..fef3e10442 100644 --- a/webapp/src/components/App/Studies/StudyTree/index.tsx +++ b/webapp/src/components/App/Studies/StudyTree/index.tsx @@ -12,7 +12,7 @@ * This file is part of the Antares project. */ -import { StudyTreeNode } from "./types"; +import type { StudyTreeNode } from "./types"; import useAppSelector from "../../../../redux/hooks/useAppSelector"; import { getStudiesTree, getStudyFilters } from "../../../../redux/selectors"; import useAppDispatch from "../../../../redux/hooks/useAppDispatch"; @@ -60,11 +60,7 @@ function StudyTree() { * @param rootNode - The root node of the tree * @param selectedNode - The node of the item clicked */ - async function updateTree( - itemId: string, - rootNode: StudyTreeNode, - selectedNode: StudyTreeNode, - ) { + async function updateTree(itemId: string, rootNode: StudyTreeNode, selectedNode: StudyTreeNode) { if (selectedNode.path.startsWith("/default")) { // we don't update the tree if the user clicks on the default workspace // api doesn't allow to fetch the subfolders of the default workspace @@ -86,10 +82,7 @@ function StudyTree() { try { treeAfterWorkspacesUpdate = await fetchAndInsertWorkspaces(rootNode); } catch (error) { - enqueueErrorSnackbar( - t("studies.tree.error.failToFetchWorkspace"), - toError(error), - ); + enqueueErrorSnackbar(t("studies.tree.error.failToFetchWorkspace"), toError(error)); } pathsToFetch = treeAfterWorkspacesUpdate.children .filter((t) => t.name !== "default") // We don't fetch the default workspace subfolders, api don't allow it @@ -99,8 +92,10 @@ function StudyTree() { pathsToFetch = [`root${selectedNode.path}`]; } - const [treeAfterSubfoldersUpdate, failedPath] = - await fetchAndInsertSubfolders(pathsToFetch, treeAfterWorkspacesUpdate); + const [treeAfterSubfoldersUpdate, failedPath] = await fetchAndInsertSubfolders( + pathsToFetch, + treeAfterWorkspacesUpdate, + ); if (failedPath.length > 0) { enqueueErrorSnackbar( t("studies.tree.error.failToFetchFolder", { @@ -117,10 +112,7 @@ function StudyTree() { // Event Handlers //////////////////////////////////////////////////////////////// - const handleTreeItemClick = async ( - itemId: string, - studyTreeNode: StudyTreeNode, - ) => { + const handleTreeItemClick = async (itemId: string, studyTreeNode: StudyTreeNode) => { dispatch(updateStudyFilters({ folder: itemId })); updateTree(itemId, studiesTree, studyTreeNode); }; diff --git a/webapp/src/components/App/Studies/StudyTree/utils.ts b/webapp/src/components/App/Studies/StudyTree/utils.ts index 4d1132d79b..f0ddcbeea8 100644 --- a/webapp/src/components/App/Studies/StudyTree/utils.ts +++ b/webapp/src/components/App/Studies/StudyTree/utils.ts @@ -13,8 +13,8 @@ */ import * as api from "../../../../services/api/study"; -import { StudyMetadata } from "../../../../common/types"; -import { StudyTreeNode, NonStudyFolderDTO } from "./types"; +import type { StudyMetadata } from "../../../../common/types"; +import type { StudyTreeNode, NonStudyFolderDTO } from "./types"; /** * Builds a tree structure from a list of study metadata. @@ -50,9 +50,7 @@ export function buildStudyTree(studies: StudyMetadata[]) { child = { name: folderName, children: [], - path: current.path - ? `${current.path}/${folderName}` - : `/${folderName}`, + path: current.path ? `${current.path}/${folderName}` : `/${folderName}`, }; current.children.push(child); @@ -72,8 +70,8 @@ export function buildStudyTree(studies: StudyMetadata[]) { * * If the folder is already in the tree, the tree returnred will be equal to the tree given to the function. * - * @param studiesTree study tree to insert the folder into - * @param folder folder to inert into the tree + * @param studiesTree - study tree to insert the folder into + * @param folder - folder to inert into the tree * @returns study tree with the folder inserted if it wasn't already there. * New branch is created if it contain the folder otherwise the branch is left unchanged. */ @@ -89,9 +87,7 @@ function insertFolderIfNotExist( // direct child case if (folder.parentPath == currentNodePath) { - const folderExists = studiesTree.children.find( - (child) => child.name === folder.name, - ); + const folderExists = studiesTree.children.find((child) => child.name === folder.name); if (folderExists) { return { ...studiesTree, @@ -122,9 +118,7 @@ function insertFolderIfNotExist( // not a direct child, but does belong to this branch so recursively walk though the tree return { ...studiesTree, - children: studiesTree.children.map((child) => - insertFolderIfNotExist(child, folder), - ), + children: studiesTree.children.map((child) => insertFolderIfNotExist(child, folder)), }; } @@ -135,10 +129,10 @@ function insertFolderIfNotExist( * * The folders are inserted in the order they are given. * - * @param studiesTree study tree to insert the folder into - * @param folders folders to inert into the tree - * @param studiesTree study tree to insert the folder into - * @param folder folder to inert into the tree + * @param studiesTree - study tree to insert the folder into + * @param folders - folders to inert into the tree + * @param studiesTree - study tree to insert the folder into + * @param folder - folder to inert into the tree * @returns study tree with the folder inserted if it wasn't already there. * New branch is created if it contain the folder otherwise the branch is left unchanged. */ @@ -154,7 +148,7 @@ export function insertFoldersIfNotExist( /** * Call the explorer api to fetch the subfolders under the given path. * - * @param path path of the subfolder to fetch, should sart with root, e.g. root/workspace/folder1 + * @param path - path of the subfolder to fetch, should sart with root, e.g. root/workspace/folder1 * @returns list of subfolders under the given path */ async function fetchSubfolders(path: string): Promise { @@ -191,8 +185,8 @@ async function fetchSubfolders(path: string): Promise { * * This function doesn't mutate the tree, it returns a new tree with the subfolders inserted * - * @param paths list of paths to fetch the subfolders for - * @param studiesTree study tree to insert the subfolders into + * @param paths - list of paths to fetch the subfolders for + * @param studiesTree - study tree to insert the subfolders into * @returns a tuple with study tree with the subfolders inserted if they weren't already there and path for which * the fetch failed. */ @@ -200,9 +194,7 @@ export async function fetchAndInsertSubfolders( paths: string[], studiesTree: StudyTreeNode, ): Promise<[StudyTreeNode, string[]]> { - const results = await Promise.allSettled( - paths.map((path) => fetchSubfolders(path)), - ); + const results = await Promise.allSettled(paths.map((path) => fetchSubfolders(path))); return results.reduce<[StudyTreeNode, string[]]>( ([tree, failed], result, index) => { if (result.status === "fulfilled") { @@ -220,14 +212,11 @@ export async function fetchAndInsertSubfolders( * * This function doesn't mutate the tree, it returns a new tree with the workspace inserted. * - * @param workspace key of the workspace - * @param stydyTree study tree to insert the workspace into + * @param workspace - key of the workspace + * @param stydyTree - study tree to insert the workspace into * @returns study tree with the empty workspace inserted if it wasn't already there. */ -function insertWorkspaceIfNotExist( - stydyTree: StudyTreeNode, - workspace: string, -): StudyTreeNode { +function insertWorkspaceIfNotExist(stydyTree: StudyTreeNode, workspace: string): StudyTreeNode { const emptyNode = { name: workspace, path: `/${workspace}`, @@ -249,8 +238,8 @@ function insertWorkspaceIfNotExist( * * The workspaces are inserted in the order they are given. * - * @param workspaces workspaces to insert into the tree - * @param stydyTree study tree to insert the workspaces into + * @param workspaces - workspaces to insert into the tree + * @param stydyTree - study tree to insert the workspaces into * @returns study tree with the empty workspaces inserted if they weren't already there. */ export function insertWorkspacesIfNotExist( @@ -270,12 +259,10 @@ export function insertWorkspacesIfNotExist( * * This function doesn't mutate the tree, it returns a new tree with the workspaces inserted. * - * @param studyTree study tree to insert the workspaces into + * @param studyTree - study tree to insert the workspaces into * @returns study tree with the workspaces inserted if they weren't already there. */ -export async function fetchAndInsertWorkspaces( - studyTree: StudyTreeNode, -): Promise { +export async function fetchAndInsertWorkspaces(studyTree: StudyTreeNode): Promise { const workspaces = await api.getWorkspaces(); return insertWorkspacesIfNotExist(studyTree, workspaces); } diff --git a/webapp/src/components/App/Studies/index.tsx b/webapp/src/components/App/Studies/index.tsx index f422ce3249..b51b479dbd 100644 --- a/webapp/src/components/App/Studies/index.tsx +++ b/webapp/src/components/App/Studies/index.tsx @@ -23,10 +23,7 @@ import RootPage from "../../common/page/RootPage"; import HeaderTopRight from "./HeaderTopRight"; import HeaderBottom from "./HeaderBottom"; import SimpleLoader from "../../common/loaders/SimpleLoader"; -import { - getStudiesState, - getStudyIdsFilteredAndSorted, -} from "../../../redux/selectors"; +import { getStudiesState, getStudyIdsFilteredAndSorted } from "../../../redux/selectors"; import useAsyncAppSelector from "../../../redux/hooks/useAsyncAppSelector"; import FilterDrawer from "./FilterDrawer"; import UseAsyncAppSelectorCond from "../../../redux/components/UseAsyncAppSelectorCond"; @@ -50,9 +47,7 @@ function Studies() { title={t("global.studies")} titleIcon={TravelExploreOutlinedIcon} headerTopRight={} - headerBottom={ - setOpenFilter(true)} /> - } + headerBottom={ setOpenFilter(true)} />} > (); const [filterType, setFilterType] = useState(""); - const [filterRunningStatus, setFilterRunningStatus] = - useState(false); + const [filterRunningStatus, setFilterRunningStatus] = useState(false); const [currentContent, setCurrentContent] = useState(content); const launcherMetrics = usePromiseWithSnackbarError(getLauncherMetrics, { @@ -178,18 +177,11 @@ function JobTableView(props: PropType) { - } + control={} label={t("tasks.runningTasks") as string} /> - - {t("tasks.typeFilter")} - + {t("tasks.typeFilter")} ) => - handleChange(name, e.target.value as string) + ? (e: SelectChangeEvent) => handleChange(name, e.target.value as string) : basicHandleChange } > diff --git a/webapp/src/components/common/SnackErrorMessage.tsx b/webapp/src/components/common/SnackErrorMessage.tsx index ddc0fc87b7..3acb98c8f6 100644 --- a/webapp/src/components/common/SnackErrorMessage.tsx +++ b/webapp/src/components/common/SnackErrorMessage.tsx @@ -13,7 +13,6 @@ */ import { useState, forwardRef, useCallback } from "react"; -import * as React from "react"; import { useSnackbar, SnackbarContent } from "notistack"; import axios from "axios"; import { @@ -59,91 +58,83 @@ interface Props { details: string | Error; } -const SnackErrorMessage = forwardRef( - (props: Props, ref) => { - const { closeSnackbar } = useSnackbar(); - const [expanded, setExpanded] = useState(false); - const { id, message, details } = props; +const SnackErrorMessage = forwardRef((props: Props, ref) => { + const { closeSnackbar } = useSnackbar(); + const [expanded, setExpanded] = useState(false); + const { id, message, details } = props; - const handleExpandClick = useCallback(() => { - setExpanded((oldExpanded) => !oldExpanded); - }, []); + const handleExpandClick = useCallback(() => { + setExpanded((oldExpanded) => !oldExpanded); + }, []); - const handleDismiss = useCallback(() => { - closeSnackbar(id); - }, [id, closeSnackbar]); + const handleDismiss = useCallback(() => { + closeSnackbar(id); + }, [id, closeSnackbar]); - return ( - - + + - + {message} + + + + + + + + + + + - - {message} - - - - - - - - - - - - {axios.isAxiosError(details) ? ( - - - - {details.response?.status} - - - - {details.response?.data.exception} - - - - - {details.response?.data.description} - - + {axios.isAxiosError(details) ? ( + + + + {details.response?.status} - ) : ( - details.toString() - )} - - - - - ); - }, -); + + + {details.response?.data.exception} + + + + {details.response?.data.description} + + + ) : ( + details.toString() + )} + + + + + ); +}); SnackErrorMessage.displayName = "SnackErrorMessage"; diff --git a/webapp/src/components/common/SplitLayoutView.tsx b/webapp/src/components/common/SplitLayoutView.tsx index 4145a9e13d..5161111f67 100644 --- a/webapp/src/components/common/SplitLayoutView.tsx +++ b/webapp/src/components/common/SplitLayoutView.tsx @@ -12,12 +12,11 @@ * This file is part of the Antares project. */ -import { ReactNode } from "react"; -import { Divider, Box, SxProps, Theme } from "@mui/material"; +import { Divider, Box, type SxProps, type Theme } from "@mui/material"; interface Props { - left: ReactNode; - right: ReactNode; + left: React.ReactNode; + right: React.ReactNode; sx?: SxProps; } @@ -54,11 +53,7 @@ function SplitLayoutView(props: Props) { > {left} - + - + ); } diff --git a/webapp/src/components/common/TableForm/Table.tsx b/webapp/src/components/common/TableForm/Table.tsx index 70bfdd5e75..714b689d9c 100644 --- a/webapp/src/components/common/TableForm/Table.tsx +++ b/webapp/src/components/common/TableForm/Table.tsx @@ -12,15 +12,12 @@ * This file is part of the Antares project. */ -import HT from "handsontable"; +import type HT from "handsontable"; import * as RA from "ramda-adjunct"; import { useMemo } from "react"; import type { IdType } from "../../../common/types"; import { useFormContextPlus } from "../Form"; -import Handsontable, { - HandsontableProps, - HotTableClass, -} from "../Handsontable"; +import Handsontable, { type HandsontableProps, type HotTableClass } from "../Handsontable"; type Row = { id: IdType } & HT.RowObject; @@ -32,12 +29,7 @@ export interface TableProps extends Omit { } function Table(props: TableProps) { - const { - data, - rowHeaders = (row: Row) => String(row.id), - tableRef, - ...restProps - } = props; + const { data, rowHeaders = (row: Row) => String(row.id), tableRef, ...restProps } = props; const { setValues } = useFormContextPlus(); @@ -49,9 +41,7 @@ function Table(props: TableProps) { (longestHeaderLength, row) => { const headerLength = rowHeaders(row).length; - return longestHeaderLength > headerLength - ? longestHeaderLength - : headerLength; + return longestHeaderLength > headerLength ? longestHeaderLength : headerLength; }, 10, // To force minimum size ) * 8, @@ -62,22 +52,25 @@ function Table(props: TableProps) { // Event Handlers //////////////////////////////////////////////////////////////// - const handleAfterChange: HandsontableProps["afterChange"] = - function afterChange(this: unknown, changes, ...rest): void { - const newValues = changes?.reduce( - (acc, [row, column, _, nextValue]) => { - acc[`${data[row].id}.${column}`] = nextValue; - return acc; - }, - {} as Record, - ); + const handleAfterChange: HandsontableProps["afterChange"] = function afterChange( + this: unknown, + changes, + ...rest + ): void { + const newValues = changes?.reduce( + (acc, [row, column, _, nextValue]) => { + acc[`${data[row].id}.${column}`] = nextValue; + return acc; + }, + {} as Record, + ); - if (newValues) { - setValues(newValues); - } + if (newValues) { + setValues(newValues); + } - restProps.afterChange?.call(this, changes, ...rest); - }; + restProps.afterChange?.call(this, changes, ...rest); + }; //////////////////////////////////////////////////////////////// // JSX @@ -93,11 +86,7 @@ function Table(props: TableProps) { manualRowResize {...restProps} data={data} - rowHeaders={ - RA.isFunction(rowHeaders) - ? (index) => rowHeaders(data[index]) - : rowHeaders - } + rowHeaders={RA.isFunction(rowHeaders) ? (index) => rowHeaders(data[index]) : rowHeaders} afterChange={handleAfterChange} ref={tableRef} /> diff --git a/webapp/src/components/common/TableForm/index.tsx b/webapp/src/components/common/TableForm/index.tsx index 58bbf4e10f..61f60785e5 100644 --- a/webapp/src/components/common/TableForm/index.tsx +++ b/webapp/src/components/common/TableForm/index.tsx @@ -13,24 +13,20 @@ */ import * as RA from "ramda-adjunct"; -import HT from "handsontable"; -import { startCase } from "lodash"; +import type HT from "handsontable"; +import startCase from "lodash/startCase"; import * as R from "ramda"; -import { Box, type SxProps } from "@mui/material"; -import type { Theme } from "@mui/material"; +import { Box, type SxProps, type Theme } from "@mui/material"; import { useMemo } from "react"; -import { DefaultValues } from "react-hook-form"; +import type { DefaultValues } from "react-hook-form"; import type { IdType } from "../../../common/types"; -import Form, { FormProps } from "../Form"; -import Table, { TableProps } from "./Table"; +import Form, { type FormProps } from "../Form"; +import Table, { type TableProps } from "./Table"; import { getCellType } from "./utils"; import { mergeSxProp } from "../../../utils/muiUtils"; import useMemoLocked from "../../../hooks/useMemoLocked"; -type TableFieldValuesByRow = Record< - IdType, - Record ->; +type TableFieldValuesByRow = Record>; export interface TableFormProps< TFieldValues extends TableFieldValuesByRow = TableFieldValuesByRow, @@ -43,9 +39,7 @@ export interface TableFormProps< formApiRef?: FormProps["apiRef"]; sx?: SxProps; tableProps?: Omit & { - columns?: - | Array - | ((index: number) => HT.ColumnSettings); + columns?: Array | ((index: number) => HT.ColumnSettings); colHeaders?: (index: number, colName: string) => string; }; } @@ -121,11 +115,7 @@ function TableForm( overflow: "auto", }} > - +
    ); diff --git a/webapp/src/components/common/TableMode.tsx b/webapp/src/components/common/TableMode.tsx index 1f5bdf2d8f..0f4254bba8 100644 --- a/webapp/src/components/common/TableMode.tsx +++ b/webapp/src/components/common/TableMode.tsx @@ -13,24 +13,21 @@ */ import { useEffect, useState } from "react"; -import { StudyMetadata } from "../../common/types"; +import type { StudyMetadata } from "../../common/types"; import usePromise from "../../hooks/usePromise"; -import { - getTableMode, - setTableMode, -} from "../../services/api/studies/tableMode"; -import { +import { getTableMode, setTableMode } from "../../services/api/studies/tableMode"; +import type { TableData, TableModeColumnsForType, TableModeType, } from "../../services/api/studies/tableMode/types"; -import { SubmitHandlerPlus } from "./Form/types"; +import type { SubmitHandlerPlus } from "./Form/types"; import UsePromiseCond from "./utils/UsePromiseCond"; import GridOffIcon from "@mui/icons-material/GridOff"; import EmptyView from "./page/EmptyView"; import { useTranslation } from "react-i18next"; import DataGridForm, { type DataGridFormProps } from "./DataGridForm"; -import { startCase } from "lodash"; +import startCase from "lodash/startCase"; import type { GridColumn } from "@glideapps/glide-data-grid"; export interface TableModeProps { @@ -47,9 +44,7 @@ function TableMode({ extraActions, }: TableModeProps) { const { t } = useTranslation(); - const [gridColumns, setGridColumns] = useState< - DataGridFormProps["columns"] - >([]); + const [gridColumns, setGridColumns] = useState["columns"]>([]); const columnsDep = columns.join(","); const res = usePromise( diff --git a/webapp/src/components/common/TabsView.tsx b/webapp/src/components/common/TabsView.tsx index cfee995bbf..f525bbf848 100644 --- a/webapp/src/components/common/TabsView.tsx +++ b/webapp/src/components/common/TabsView.tsx @@ -12,7 +12,7 @@ * This file is part of the Antares project. */ -import { TabContext, TabList, TabListProps, TabPanel } from "@mui/lab"; +import { TabContext, TabList, TabPanel, type TabListProps } from "@mui/lab"; import { Box, Tab } from "@mui/material"; import { useState } from "react"; @@ -60,11 +60,7 @@ function TabsView({ items, onChange, divider }: TabsViewProps) { {items.map(({ content }, index) => ( - + {content} ))} diff --git a/webapp/src/components/common/TextSeparator.tsx b/webapp/src/components/common/TextSeparator.tsx index 1348627465..043d10d4a5 100644 --- a/webapp/src/components/common/TextSeparator.tsx +++ b/webapp/src/components/common/TextSeparator.tsx @@ -12,7 +12,7 @@ * This file is part of the Antares project. */ -import { SxProps, Theme, Divider, Typography, Box } from "@mui/material"; +import { Divider, Typography, Box, type SxProps, type Theme } from "@mui/material"; interface Props { text: string; diff --git a/webapp/src/components/common/TreeItemEnhanced.tsx b/webapp/src/components/common/TreeItemEnhanced.tsx index 6b488de6e7..6b525df658 100644 --- a/webapp/src/components/common/TreeItemEnhanced.tsx +++ b/webapp/src/components/common/TreeItemEnhanced.tsx @@ -29,11 +29,7 @@ function TreeItemEnhanced({ onClick, sx, ...rest }: TreeItemEnhancedProps) { const { target } = event; // The item is not selected if the click is on the expand/collapse icon - if ( - canExpand && - target instanceof Element && - target.closest(".MuiTreeItem-iconContainer") - ) { + if (canExpand && target instanceof Element && target.closest(".MuiTreeItem-iconContainer")) { return; } diff --git a/webapp/src/components/common/buttons/DownloadButton.tsx b/webapp/src/components/common/buttons/DownloadButton.tsx index a67cd914e5..de267cb322 100644 --- a/webapp/src/components/common/buttons/DownloadButton.tsx +++ b/webapp/src/components/common/buttons/DownloadButton.tsx @@ -13,7 +13,7 @@ */ import FileUploadIcon from "@mui/icons-material/FileUpload"; -import SplitButton, { SplitButtonProps } from "./SplitButton"; +import SplitButton, { type SplitButtonProps } from "./SplitButton"; import { useState } from "react"; import useEnqueueErrorSnackbar from "../../../hooks/useEnqueueErrorSnackbar"; import { useTranslation } from "react-i18next"; @@ -35,16 +35,9 @@ export type DownloadButtonProps = { } ); -function DownloadButton( - props: DownloadButtonProps, -) { +function DownloadButton(props: DownloadButtonProps) { const { t } = useTranslation(); - const { - disabled, - formatOptions, - onClick, - children: label = t("global.export"), - } = props; + const { disabled, formatOptions, onClick, children: label = t("global.export") } = props; const [isDownloading, setIsDownloading] = useState(false); const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); @@ -94,11 +87,7 @@ function DownloadButton( {label} ) : ( - handleDownload()} - > + handleDownload()}> {label} ); diff --git a/webapp/src/components/common/buttons/DownloadMatrixButton.tsx b/webapp/src/components/common/buttons/DownloadMatrixButton.tsx index b50e3e81da..6ce12f944c 100644 --- a/webapp/src/components/common/buttons/DownloadMatrixButton.tsx +++ b/webapp/src/components/common/buttons/DownloadMatrixButton.tsx @@ -14,7 +14,7 @@ import { getMatrixFile, getRawFile } from "../../../services/api/studies/raw"; import { downloadFile } from "../../../utils/fileUtils"; -import { StudyMetadata } from "../../../common/types"; +import type { StudyMetadata } from "../../../common/types"; import { useTranslation } from "react-i18next"; import DownloadButton from "./DownloadButton"; import type { TTableExportFormat } from "@/services/api/studies/raw/types"; @@ -69,10 +69,7 @@ function DownloadMatrixButton(props: DownloadMatrixButtonProps) { const extension = format === "csv (semicolon)" ? "csv" : format; - return downloadFile( - matrixFile, - `matrix_${studyId}_${path.replace("/", "_")}.${extension}`, - ); + return downloadFile(matrixFile, `matrix_${studyId}_${path.replace("/", "_")}.${extension}`); }; //////////////////////////////////////////////////////////////// @@ -80,11 +77,7 @@ function DownloadMatrixButton(props: DownloadMatrixButtonProps) { //////////////////////////////////////////////////////////////// return ( - + {label} ); diff --git a/webapp/src/components/common/buttons/SplitButton.tsx b/webapp/src/components/common/buttons/SplitButton.tsx index 52bca20142..faa216d3aa 100644 --- a/webapp/src/components/common/buttons/SplitButton.tsx +++ b/webapp/src/components/common/buttons/SplitButton.tsx @@ -13,7 +13,7 @@ */ import Button from "@mui/material/Button"; -import ButtonGroup, { ButtonGroupProps } from "@mui/material/ButtonGroup"; +import ButtonGroup, { type ButtonGroupProps } from "@mui/material/ButtonGroup"; import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; import ClickAwayListener from "@mui/material/ClickAwayListener"; import Grow from "@mui/material/Grow"; diff --git a/webapp/src/components/common/buttons/UploadFileButton.tsx b/webapp/src/components/common/buttons/UploadFileButton.tsx index 872b05b01a..bd457a2cea 100644 --- a/webapp/src/components/common/buttons/UploadFileButton.tsx +++ b/webapp/src/components/common/buttons/UploadFileButton.tsx @@ -18,8 +18,8 @@ import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import useEnqueueErrorSnackbar from "../../../hooks/useEnqueueErrorSnackbar"; import { toError } from "../../../utils/fnUtils"; -import { Accept, useDropzone } from "react-dropzone"; -import { StudyMetadata } from "../../../common/types"; +import { useDropzone, type Accept } from "react-dropzone"; +import type { StudyMetadata } from "../../../common/types"; import { useSnackbar } from "notistack"; import { uploadFile } from "../../../services/api/studies/raw"; diff --git a/webapp/src/components/common/dialogs/BasicDialog.tsx b/webapp/src/components/common/dialogs/BasicDialog.tsx index 467d970b06..be78561427 100644 --- a/webapp/src/components/common/dialogs/BasicDialog.tsx +++ b/webapp/src/components/common/dialogs/BasicDialog.tsx @@ -17,13 +17,13 @@ import { DialogActions, DialogContent, DialogContentText, - DialogProps, + type DialogProps, DialogTitle, styled, - DialogContentProps, + type DialogContentProps, } from "@mui/material"; import * as RA from "ramda-adjunct"; -import { SvgIconComponent } from "@mui/icons-material"; +import type { SvgIconComponent } from "@mui/icons-material"; import * as R from "ramda"; import { mergeSxProp } from "../../../utils/muiUtils"; @@ -60,15 +60,7 @@ const AlertBorder = styled("span", { })); function BasicDialog(props: BasicDialogProps) { - const { - title, - titleIcon, - children, - actions, - alert, - contentProps, - ...dialogProps - } = props; + const { title, titleIcon, children, actions, alert, contentProps, ...dialogProps } = props; const TitleIcon = titleIcon; return ( @@ -90,16 +82,9 @@ function BasicDialog(props: BasicDialogProps) { )} - {RA.isString(children) ? ( - {children} - ) : ( - children - )} + {RA.isString(children) ? {children} : children} {actions && {actions}} diff --git a/webapp/src/components/common/dialogs/ConfirmationDialog.tsx b/webapp/src/components/common/dialogs/ConfirmationDialog.tsx index df8141906f..57180974ee 100644 --- a/webapp/src/components/common/dialogs/ConfirmationDialog.tsx +++ b/webapp/src/components/common/dialogs/ConfirmationDialog.tsx @@ -14,10 +14,9 @@ import { Button } from "@mui/material"; import { useTranslation } from "react-i18next"; -import BasicDialog, { BasicDialogProps } from "./BasicDialog"; +import BasicDialog, { type BasicDialogProps } from "./BasicDialog"; -export interface ConfirmationDialogProps - extends Omit { +export interface ConfirmationDialogProps extends Omit { cancelButtonText?: string; confirmButtonText?: string; onConfirm: VoidFunction; @@ -25,14 +24,8 @@ export interface ConfirmationDialogProps } function ConfirmationDialog(props: ConfirmationDialogProps) { - const { - cancelButtonText, - confirmButtonText, - onConfirm, - onCancel, - onClose, - ...basicDialogProps - } = props; + const { cancelButtonText, confirmButtonText, onConfirm, onCancel, onClose, ...basicDialogProps } = + props; const { t } = useTranslation(); @@ -40,9 +33,7 @@ function ConfirmationDialog(props: ConfirmationDialogProps) { // Event Handlers //////////////////////////////////////////////////////////////// - const handleClose = ( - ...args: Parameters> - ) => { + const handleClose = (...args: Parameters>) => { onCancel(); onClose?.(...args); }; @@ -58,9 +49,7 @@ function ConfirmationDialog(props: ConfirmationDialogProps) { {...basicDialogProps} actions={ <> - + diff --git a/webapp/src/components/common/dialogs/DataViewerDialog/index.tsx b/webapp/src/components/common/dialogs/DataViewerDialog/index.tsx index 5999492f43..cd4b5948a6 100644 --- a/webapp/src/components/common/dialogs/DataViewerDialog/index.tsx +++ b/webapp/src/components/common/dialogs/DataViewerDialog/index.tsx @@ -19,7 +19,7 @@ import OkDialog from "../OkDialog"; import SimpleLoader from "../../loaders/SimpleLoader"; import MatrixGrid from "@/components/common/Matrix/components/MatrixGrid"; import { generateDataColumns } from "@/components/common/Matrix/shared/utils"; -import { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; +import type { MatrixDataDTO } from "@/components/common/Matrix/shared/types"; interface Props { filename: string; @@ -29,12 +29,8 @@ interface Props { isMatrix?: boolean; } -function isMatrixData( - content: string | MatrixDataDTO, -): content is MatrixDataDTO { - return ( - typeof content === "object" && "data" in content && "columns" in content - ); +function isMatrixData(content: string | MatrixDataDTO): content is MatrixDataDTO { + return typeof content === "object" && "data" in content && "columns" in content; } /** @@ -52,13 +48,7 @@ function isMatrixData( * @param [props.loading] - Flag indicating if the content is being loaded * @returns The rendered DataViewerDialog component */ -function DataViewerDialog({ - filename, - content, - onClose, - isMatrix, - loading, -}: Props) { +function DataViewerDialog({ filename, content, onClose, isMatrix, loading }: Props) { const [t] = useTranslation(); //////////////////////////////////////////////////////////////// diff --git a/webapp/src/components/common/dialogs/DatabaseUploadDialog/components/MatrixContent.tsx b/webapp/src/components/common/dialogs/DatabaseUploadDialog/components/MatrixContent.tsx index c1c17c27b0..e5fb295ba9 100644 --- a/webapp/src/components/common/dialogs/DatabaseUploadDialog/components/MatrixContent.tsx +++ b/webapp/src/components/common/dialogs/DatabaseUploadDialog/components/MatrixContent.tsx @@ -15,14 +15,14 @@ import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { Box, Divider, Typography } from "@mui/material"; -import { MatrixInfoDTO, MatrixDTO } from "@/common/types"; +import type { MatrixInfoDTO, MatrixDTO } from "@/common/types"; import MatrixGrid from "@/components/common/Matrix/components/MatrixGrid"; import ButtonBack from "@/components/common/ButtonBack"; import { getMatrix } from "@/services/api/matrix"; import usePromiseWithSnackbarError from "@/hooks/usePromiseWithSnackbarError"; import { generateDataColumns } from "@/components/common/Matrix/shared/utils"; import EmptyView from "@/components/common/page/EmptyView"; -import { GridOff } from "@mui/icons-material"; +import GridOffIcon from "@mui/icons-material/GridOff"; interface MatrixContentProps { matrix: MatrixInfoDTO; @@ -32,12 +32,9 @@ interface MatrixContentProps { function MatrixContent({ matrix, onBack }: MatrixContentProps) { const { t } = useTranslation(); - const { data: matrixData } = usePromiseWithSnackbarError( - () => getMatrix(matrix.id), - { - errorMessage: t("data.error.matrix"), - }, - ); + const { data: matrixData } = usePromiseWithSnackbarError(() => getMatrix(matrix.id), { + errorMessage: t("data.error.matrix"), + }); const matrixColumns = useMemo( () => @@ -66,7 +63,7 @@ function MatrixContent({ matrix, onBack }: MatrixContentProps) { {!matrixData.data[0]?.length ? ( - + ) : ( void; } -function DatabaseUploadDialog({ - studyId, - path, - open, - onClose, -}: DatabaseUploadDialogProps) { +function DatabaseUploadDialog({ studyId, path, open, onClose }: DatabaseUploadDialogProps) { const { t } = useTranslation(); const { enqueueSnackbar } = useSnackbar(); const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); @@ -141,10 +136,7 @@ function DatabaseUploadDialog({ {selectedItem && (matrix ? ( - setMatrixId(undefined)} - /> + setMatrixId(undefined)} /> ) : ( { +export interface DigestDialogProps extends Pick { studyId: LaunchJob["studyId"]; outputId: LaunchJob["outputId"]; } -function DigestDialog({ - studyId, - outputId, - ...dialogProps -}: DigestDialogProps) { +function DigestDialog({ studyId, outputId, ...dialogProps }: DigestDialogProps) { const { t } = useTranslation(); const synthesisRes = usePromise( - () => - getStudyData(studyId, `output/${outputId}/economy/mc-all/grid/digest`), + () => getStudyData(studyId, `output/${outputId}/economy/mc-all/grid/digest`), { deps: [studyId, outputId], }, @@ -59,12 +53,7 @@ function DigestDialog({ ifPending={() => } ifRejected={(error) => { if (error instanceof AxiosError && error.response?.status === 404) { - return ( - - ); + return ; } return ; }} diff --git a/webapp/src/components/common/dialogs/FormDialog.tsx b/webapp/src/components/common/dialogs/FormDialog.tsx index 4980244f5d..227b29f823 100644 --- a/webapp/src/components/common/dialogs/FormDialog.tsx +++ b/webapp/src/components/common/dialogs/FormDialog.tsx @@ -15,23 +15,19 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { Button } from "@mui/material"; import { useId, useState } from "react"; -import { FieldValues, FormState } from "react-hook-form"; +import type { FieldValues, FormState } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { LoadingButton } from "@mui/lab"; import * as RA from "ramda-adjunct"; import SaveIcon from "@mui/icons-material/Save"; -import BasicDialog, { BasicDialogProps } from "./BasicDialog"; -import Form, { FormProps } from "../Form"; +import BasicDialog, { type BasicDialogProps } from "./BasicDialog"; +import Form, { type FormProps } from "../Form"; -type SuperType< - TFieldValues extends FieldValues, - TContext, - SubmitReturnValue, -> = Omit & - Omit< - FormProps, - "hideSubmitButton" - >; +type SuperType = Omit< + BasicDialogProps, + "onSubmit" | "onInvalid" | "children" +> & + Omit, "hideSubmitButton">; export interface FormDialogProps< TFieldValues extends FieldValues = FieldValues, @@ -45,11 +41,9 @@ export interface FormDialogProps< // TODO: `formState.isSubmitting` doesn't update when auto submit enabled -function FormDialog< - TFieldValues extends FieldValues, - TContext, - SubmitReturnValue, ->(props: FormDialogProps) { +function FormDialog( + props: FormDialogProps, +) { const { config, onSubmit, @@ -126,13 +120,7 @@ function FormDialog< disabled={!isSubmitAllowed} loading={isSubmitting} loadingPosition="start" - startIcon={ - RA.isNotUndefined(submitButtonIcon) ? ( - submitButtonIcon - ) : ( - - ) - } + startIcon={RA.isNotUndefined(submitButtonIcon) ? submitButtonIcon : } > {submitButtonText || t("global.save")} diff --git a/webapp/src/components/common/dialogs/OkDialog.tsx b/webapp/src/components/common/dialogs/OkDialog.tsx index c8245eb533..5285232223 100644 --- a/webapp/src/components/common/dialogs/OkDialog.tsx +++ b/webapp/src/components/common/dialogs/OkDialog.tsx @@ -12,9 +12,9 @@ * This file is part of the Antares project. */ -import { Button, ButtonProps } from "@mui/material"; +import { Button, type ButtonProps } from "@mui/material"; import { useTranslation } from "react-i18next"; -import BasicDialog, { BasicDialogProps } from "./BasicDialog"; +import BasicDialog, { type BasicDialogProps } from "./BasicDialog"; export interface OkDialogProps extends Omit { okButtonText?: string; @@ -23,17 +23,14 @@ export interface OkDialogProps extends Omit { } function OkDialog(props: OkDialogProps) { - const { okButtonText, okButtonProps, onOk, onClose, ...basicDialogProps } = - props; + const { okButtonText, okButtonProps, onOk, onClose, ...basicDialogProps } = props; const { t } = useTranslation(); //////////////////////////////////////////////////////////////// // Event Handlers //////////////////////////////////////////////////////////////// - const handleClose = ( - ...args: Parameters> - ) => { + const handleClose = (...args: Parameters>) => { onOk(); onClose?.(...args); }; diff --git a/webapp/src/components/common/dialogs/UploadDialog.tsx b/webapp/src/components/common/dialogs/UploadDialog.tsx index c0dbf3d59c..5f198918ff 100644 --- a/webapp/src/components/common/dialogs/UploadDialog.tsx +++ b/webapp/src/components/common/dialogs/UploadDialog.tsx @@ -14,36 +14,25 @@ import { useEffect, useState } from "react"; import { Box, Button, LinearProgress, Paper, Typography } from "@mui/material"; -import { FileRejection, useDropzone, type Accept } from "react-dropzone"; +import { useDropzone, type Accept, type FileRejection } from "react-dropzone"; import { useTranslation } from "react-i18next"; -import BasicDialog, { BasicDialogProps } from "./BasicDialog"; +import BasicDialog, { type BasicDialogProps } from "./BasicDialog"; import { blue, grey } from "@mui/material/colors"; import useEnqueueErrorSnackbar from "../../../hooks/useEnqueueErrorSnackbar"; import { toError } from "../../../utils/fnUtils"; import { enqueueSnackbar } from "notistack"; -import { PromiseAny } from "../../../utils/tsUtils"; +import type { PromiseAny } from "../../../utils/tsUtils"; import FileDownloadIcon from "@mui/icons-material/FileDownload"; interface UploadDialogProps extends Omit { dropzoneText?: string; accept?: Accept; onCancel: VoidFunction; - onImport: ( - file: File, - setUploadProgress: (progress: number) => void, - ) => PromiseAny; + onImport: (file: File, setUploadProgress: (progress: number) => void) => PromiseAny; } function UploadDialog(props: UploadDialogProps) { - const { - dropzoneText, - accept, - onImport, - onCancel, - onClose, - title, - ...dialogProps - } = props; + const { dropzoneText, accept, onImport, onCancel, onClose, title, ...dialogProps } = props; const [t] = useTranslation(); const enqueueErrorSnackbar = useEnqueueErrorSnackbar(); const [isUploading, setIsUploading] = useState(false); @@ -129,11 +118,7 @@ function UploadDialog(props: UploadDialogProps) { {isUploading ? ( 2 && uploadProgress < 98 - ? "determinate" - : "indeterminate" - } + variant={uploadProgress > 2 && uploadProgress < 98 ? "determinate" : "indeterminate"} value={Math.max(0, Math.min(100, uploadProgress))} /> ) : ( diff --git a/webapp/src/components/common/fieldEditors/BooleanFE.tsx b/webapp/src/components/common/fieldEditors/BooleanFE.tsx index 56846ead2a..184a27bf65 100644 --- a/webapp/src/components/common/fieldEditors/BooleanFE.tsx +++ b/webapp/src/components/common/fieldEditors/BooleanFE.tsx @@ -12,13 +12,12 @@ * This file is part of the Antares project. */ -import { SelectProps } from "@mui/material"; +import type { SelectProps } from "@mui/material"; import * as RA from "ramda-adjunct"; import reactHookFormSupport from "../../../hoc/reactHookFormSupport"; -import SelectFE, { SelectFEProps } from "./SelectFE"; +import SelectFE, { type SelectFEProps } from "./SelectFE"; -export interface BooleanFEProps - extends Omit { +export interface BooleanFEProps extends Omit { defaultValue?: boolean; value?: boolean; trueText?: string; @@ -44,16 +43,7 @@ function toValidEvent(event: T) { } function BooleanFE(props: BooleanFEProps) { - const { - defaultValue, - value, - trueText, - falseText, - onChange, - onBlur, - inputRef, - ...rest - } = props; + const { defaultValue, value, trueText, falseText, onChange, onBlur, inputRef, ...rest } = props; return ( - ); + const fieldEditor = ; return ( {label ? ( - + ) : ( fieldEditor )} diff --git a/webapp/src/components/common/fieldEditors/CheckboxesTagsFE.tsx b/webapp/src/components/common/fieldEditors/CheckboxesTagsFE.tsx index 1b2b8f9326..bc19460b0b 100644 --- a/webapp/src/components/common/fieldEditors/CheckboxesTagsFE.tsx +++ b/webapp/src/components/common/fieldEditors/CheckboxesTagsFE.tsx @@ -14,16 +14,16 @@ import { Autocomplete, - AutocompleteProps, - AutocompleteValue, Checkbox, TextField, + type AutocompleteProps, + type AutocompleteValue, } from "@mui/material"; import CheckBoxOutlineBlankIcon from "@mui/icons-material/CheckBoxOutlineBlank"; import CheckBoxIcon from "@mui/icons-material/CheckBox"; -import { FieldPath, FieldValues } from "react-hook-form"; +import type { FieldPath, FieldValues } from "react-hook-form"; import reactHookFormSupport, { - ReactHookFormSupportProps, + type ReactHookFormSupportProps, } from "../../../hoc/reactHookFormSupport"; interface CheckboxesTagsFEProps< @@ -32,12 +32,7 @@ interface CheckboxesTagsFEProps< FreeSolo extends boolean | undefined = undefined, > extends Omit< AutocompleteProps, - | "multiple" - | "disableCloseOnSelect" - | "renderOption" - | "renderInput" - | "renderTags" - | "onChange" + "multiple" | "disableCloseOnSelect" | "renderOption" | "renderInput" | "renderTags" | "onChange" > { label?: string; error?: boolean; diff --git a/webapp/src/components/common/fieldEditors/ColorPickerFE/index.tsx b/webapp/src/components/common/fieldEditors/ColorPickerFE/index.tsx index 54bc1bc754..f0c1aad129 100644 --- a/webapp/src/components/common/fieldEditors/ColorPickerFE/index.tsx +++ b/webapp/src/components/common/fieldEditors/ColorPickerFE/index.tsx @@ -12,9 +12,9 @@ * This file is part of the Antares project. */ -import { Box, TextField, TextFieldProps, InputAdornment } from "@mui/material"; -import { ChangeEvent, useRef, useState } from "react"; -import { ColorResult, SketchPicker } from "react-color"; +import { Box, TextField, InputAdornment, type TextFieldProps } from "@mui/material"; +import { useRef, useState } from "react"; +import { SketchPicker, type ColorResult } from "react-color"; import SquareRoundedIcon from "@mui/icons-material/SquareRounded"; import { useClickAway, useKey, useUpdateEffect } from "react-use"; import { rgbToString, stringToRGB } from "./utils"; @@ -22,17 +22,13 @@ import { mergeSxProp } from "../../../../utils/muiUtils"; import { composeRefs } from "../../../../utils/reactUtils"; import reactHookFormSupport from "../../../../hoc/reactHookFormSupport"; -export type ColorPickerFEProps = Omit< - TextFieldProps, - "type" | "defaultChecked" -> & { +export type ColorPickerFEProps = Omit & { value?: string; // Format: R,G,B - ex: "255,255,255" defaultValue?: string; }; function ColorPickerFE(props: ColorPickerFEProps) { - const { value, defaultValue, onChange, sx, inputRef, ...textFieldProps } = - props; + const { value, defaultValue, onChange, sx, inputRef, ...textFieldProps } = props; const [currentColor, setCurrentColor] = useState(defaultValue || value || ""); const [isPickerOpen, setIsPickerOpen] = useState(false); const internalRef = useRef(); @@ -53,16 +49,14 @@ function ColorPickerFE(props: ColorPickerFEProps) { //////////////////////////////////////////////////////////////// const handleChange = ({ hex, rgb }: ColorResult) => { - setCurrentColor( - ["transparent", "#0000"].includes(hex) ? "" : rgbToString(rgb), - ); + setCurrentColor(["transparent", "#0000"].includes(hex) ? "" : rgbToString(rgb)); }; const handleChangeComplete = () => { onChange?.({ target: internalRef.current, type: "change", - } as ChangeEvent); + } as React.ChangeEvent); }; //////////////////////////////////////////////////////////////// diff --git a/webapp/src/components/common/fieldEditors/ColorPickerFE/utils.ts b/webapp/src/components/common/fieldEditors/ColorPickerFE/utils.ts index 8508a629cd..e9da3aa8be 100644 --- a/webapp/src/components/common/fieldEditors/ColorPickerFE/utils.ts +++ b/webapp/src/components/common/fieldEditors/ColorPickerFE/utils.ts @@ -12,15 +12,13 @@ * This file is part of the Antares project. */ -import { ColorResult } from "react-color"; +import type { ColorResult } from "react-color"; export function stringToRGB(color: string): ColorResult["rgb"] | undefined { let sColor; try { - sColor = color - .split(",") - .map((elm) => parseInt(elm.replace(/\s+/g, ""), 10)); - } catch (e) { + sColor = color.split(",").map((elm) => parseInt(elm.replace(/\s+/g, ""), 10)); + } catch { sColor = undefined; } diff --git a/webapp/src/components/common/fieldEditors/ListFE/index.tsx b/webapp/src/components/common/fieldEditors/ListFE/index.tsx index 94082376a5..023c58a283 100644 --- a/webapp/src/components/common/fieldEditors/ListFE/index.tsx +++ b/webapp/src/components/common/fieldEditors/ListFE/index.tsx @@ -31,27 +31,22 @@ import { import { useTranslation } from "react-i18next"; import RemoveCircleIcon from "@mui/icons-material/RemoveCircle"; import { useEffect, useId, useState } from "react"; -import { - DragDropContext, - Droppable, - Draggable, - DropResult, -} from "react-beautiful-dnd"; +import { DragDropContext, Droppable, Draggable, type DropResult } from "react-beautiful-dnd"; import DragHandleIcon from "@mui/icons-material/DragHandle"; import * as RA from "ramda-adjunct"; import { useUpdateEffect } from "react-use"; -import { FieldPath, FieldValues } from "react-hook-form"; +import type { FieldPath, FieldValues } from "react-hook-form"; import StringFE from "../StringFE"; import reactHookFormSupport, { - ReactHookFormSupportProps, + type ReactHookFormSupportProps, } from "../../../../hoc/reactHookFormSupport"; import { createFakeBlurEventHandler, createFakeChangeEventHandler, createFakeInputElement, - FakeBlurEventHandler, - FakeChangeEventHandler, - InputObject, + type FakeBlurEventHandler, + type FakeChangeEventHandler, + type InputObject, } from "../../../../utils/feUtils"; import { makeLabel, makeListItems } from "./utils"; @@ -91,9 +86,7 @@ function ListFE(props: ListFEProps) { } = props; const { t } = useTranslation(); - const [listItems, setListItems] = useState(() => - makeListItems(value || defaultValue || []), - ); + const [listItems, setListItems] = useState(() => makeListItems(value || defaultValue || [])); const [selectedOption, setSelectedOption] = useState(null); const droppableId = useId(); @@ -152,8 +145,7 @@ function ListFE(props: ListFEProps) { sx={[ { p: 2, - backgroundImage: - "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", + backgroundImage: "linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))", }, !!error && { border: "1px solid", @@ -175,12 +167,7 @@ function ListFE(props: ListFEProps) { }} autoHighlight renderInput={(params) => ( - + )} />
    diff --git a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx index 778a3d0a44..3d0c0bf299 100644 --- a/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx +++ b/webapp/src/components/App/Singlestudy/explore/Configuration/TimeSeriesManagement/index.tsx @@ -17,18 +17,18 @@ import type { StudyMetadata } from "../../../../../../common/types"; import Form from "../../../../../common/Form"; import type { SubmitHandlerPlus, UseFormReturnPlus } from "../../../../../common/Form/types"; import Fields from "./Fields"; -import { DEFAULT_VALUES, setTimeSeriesFormFields, type TSFormFields } from "./utils"; import { useTranslation } from "react-i18next"; import usePromiseHandler from "../../../../../../hooks/usePromiseHandler"; -import { generateTimeSeries } from "../../../../../../services/api/studies/timeseries"; import BuildIcon from "@mui/icons-material/Build"; import { useRef, useState } from "react"; +import { setTimeSeriesConfig, generateTimeSeries } from "@/services/api/studies/timeseries"; +import { defaultValues, type TimeSeriesConfigValues } from "./utils"; function TimeSeriesManagement() { const { study } = useOutletContext<{ study: StudyMetadata }>(); const { t } = useTranslation(); - const [launchTaskInProgress, setLaunchTaskInProgress] = useState(false); - const apiRef = useRef>(null); + const [isLaunchTaskInProgress, setIsLaunchTaskInProgress] = useState(false); + const apiRef = useRef>(null); const handleGenerateTs = usePromiseHandler({ fn: generateTimeSeries, @@ -40,19 +40,19 @@ function TimeSeriesManagement() { // Event Handlers //////////////////////////////////////////////////////////////// - const handleSubmit = (data: SubmitHandlerPlus) => { - return setTimeSeriesFormFields(study.id, data.values); + const handleSubmit = ({ values }: SubmitHandlerPlus) => { + return setTimeSeriesConfig({ studyId: study.id, values }); }; const handleSubmitSuccessful = async () => { - setLaunchTaskInProgress(true); + setIsLaunchTaskInProgress(true); // The WebSocket will trigger an event after the fulfillment of the promise (see `FreezeStudy`) await handleGenerateTs({ studyId: study.id }); - setLaunchTaskInProgress(false); + setIsLaunchTaskInProgress(false); - apiRef.current?.reset(DEFAULT_VALUES); + apiRef.current?.reset(defaultValues); }; //////////////////////////////////////////////////////////////// @@ -63,8 +63,8 @@ function TimeSeriesManagement() {
    , - TSFormFieldsForType - > { - [TSType.Thermal]: Omit; - [TSType.Renewables]: Pick< - TSFormFieldsForType, - "stochasticTsStatus" | "intraModal" | "interModal" - >; - [TSType.NTC]: Pick; -} - -//////////////////////////////////////////////////////////////// -// Constants -//////////////////////////////////////////////////////////////// - -export const DEFAULT_VALUES: DeepPartial = { - thermal: { - stochasticTsStatus: false, - number: 1, - }, -}; - -//////////////////////////////////////////////////////////////// -// Functions -//////////////////////////////////////////////////////////////// - -export function setTimeSeriesFormFields( - studyId: StudyMetadata["id"], - values: DeepPartial, -): Promise { - return client.put(`v1/studies/${studyId}/config/timeseries/form`, values); -} +import { TimeSeriesType } from "@/services/api/studies/timeseries/constants"; +import type { + TimeSeriesTypeConfig, + TimeSeriesTypeValue, +} from "@/services/api/studies/timeseries/types"; + +export type TimeSeriesConfigValues = Record< + TimeSeriesTypeValue, + TimeSeriesTypeConfig & { enabled: boolean } +>; + +export const defaultValues = Object.values(TimeSeriesType).reduce((acc, type) => { + acc[type] = { number: 1, enabled: false }; + return acc; +}, {} as TimeSeriesConfigValues); diff --git a/webapp/src/components/common/buttons/DownloadMatrixButton.tsx b/webapp/src/components/common/buttons/DownloadMatrixButton.tsx index 8022ae0b23..944c0fb14a 100644 --- a/webapp/src/components/common/buttons/DownloadMatrixButton.tsx +++ b/webapp/src/components/common/buttons/DownloadMatrixButton.tsx @@ -12,14 +12,14 @@ * This file is part of the Antares project. */ -import { getMatrixFile, getRawFile } from "../../../services/api/studies/raw"; -import { downloadFile } from "../../../utils/fileUtils"; -import type { StudyMetadata } from "../../../common/types"; +import { getMatrixFile, getRawFile } from "@/services/api/studies/raw"; +import { downloadFile } from "@/utils/fileUtils.ts"; +import type { StudyMetadata } from "@/common/types.ts"; import { useTranslation } from "react-i18next"; import DownloadButton from "./DownloadButton"; -import type { TTableExportFormat } from "@/services/api/studies/raw/types"; +import type { TableExportFormatValue } from "@/services/api/studies/raw/types"; -type ExportFormat = TTableExportFormat | "raw"; +type ExportFormat = TableExportFormatValue | "raw"; export interface DownloadMatrixButtonProps { studyId: StudyMetadata["id"]; diff --git a/webapp/src/redux/ducks/studyMaps.ts b/webapp/src/redux/ducks/studyMaps.ts index d50f814142..827ba18d9e 100644 --- a/webapp/src/redux/ducks/studyMaps.ts +++ b/webapp/src/redux/ducks/studyMaps.ts @@ -49,7 +49,7 @@ import { import * as studyDataApi from "../../services/api/studydata"; import * as linksApi from "../../services/api/studies/links"; import { createStudyLink, deleteStudyLink, setCurrentArea } from "./studySyntheses"; -import type { TLinkStyle } from "@/services/api/studies/links/types"; +import type { LinkStyleValue } from "@/services/api/studies/links/types"; import tinycolor from "tinycolor2"; export interface StudyMapNode { @@ -164,9 +164,7 @@ export const setLayers = createAction([ +const makeLinkStyle = R.cond<[LinkStyleValue], [number[], string]>([ [(v) => v === "dot", () => [[1, 5], "round"]], [(v) => v === "dash", () => [[16, 8], "square"]], [(v) => v === "dotdash", () => [[10, 6, 1, 6], "square"]], diff --git a/webapp/src/services/api/studies/links/types.ts b/webapp/src/services/api/studies/links/types.ts index d3d78f8121..5e2610c370 100644 --- a/webapp/src/services/api/studies/links/types.ts +++ b/webapp/src/services/api/studies/links/types.ts @@ -17,24 +17,24 @@ import type { AssetType, LinkStyle, TransmissionCapacity } from "./constants"; import type { StudyMetadata } from "@/common/types"; import type { PartialExceptFor } from "@/utils/tsUtils"; -export type TTransmissionCapacity = O.UnionOf; +export type TransmissionCapacityValue = O.UnionOf; -export type TAssetType = O.UnionOf; +export type AssetTypeValue = O.UnionOf; -export type TLinkStyle = O.UnionOf; +export type LinkStyleValue = O.UnionOf; export interface LinkDTO { hurdlesCost: boolean; loopFlow: boolean; usePhaseShifter: boolean; - transmissionCapacities: TTransmissionCapacity; - assetType: TAssetType; + transmissionCapacities: TransmissionCapacityValue; + assetType: AssetTypeValue; displayComments: boolean; colorr: number; colorb: number; colorg: number; linkWidth: number; - linkStyle: TLinkStyle; + linkStyle: LinkStyleValue; area1: string; area2: string; // Since v8.2 diff --git a/webapp/src/services/api/studies/raw/types.ts b/webapp/src/services/api/studies/raw/types.ts index b9a4afb1b7..a66775e25c 100644 --- a/webapp/src/services/api/studies/raw/types.ts +++ b/webapp/src/services/api/studies/raw/types.ts @@ -13,17 +13,17 @@ */ import type { AxiosRequestConfig } from "axios"; -import type { StudyMetadata } from "../../../../common/types"; +import type { StudyMetadata } from "@/common/types.ts"; import type { O } from "ts-toolbelt"; import type { TableExportFormat } from "./constants"; // Available export formats for matrix tables -export type TTableExportFormat = O.UnionOf; +export type TableExportFormatValue = O.UnionOf; export interface GetMatrixFileParams { studyId: StudyMetadata["id"]; path: string; - format?: TTableExportFormat; + format?: TableExportFormatValue; header?: boolean; index?: boolean; } diff --git a/webapp/src/services/api/studies/timeseries/constants.ts b/webapp/src/services/api/studies/timeseries/constants.ts new file mode 100644 index 0000000000..273c5ab3af --- /dev/null +++ b/webapp/src/services/api/studies/timeseries/constants.ts @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2025, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +export const TimeSeriesType = { + Thermal: "thermal", +} as const; diff --git a/webapp/src/services/api/studies/timeseries.ts b/webapp/src/services/api/studies/timeseries/index.ts similarity index 57% rename from webapp/src/services/api/studies/timeseries.ts rename to webapp/src/services/api/studies/timeseries/index.ts index 9b9b106353..245931b30a 100644 --- a/webapp/src/services/api/studies/timeseries.ts +++ b/webapp/src/services/api/studies/timeseries/index.ts @@ -12,8 +12,13 @@ * This file is part of the Antares project. */ -import type { StudyMetadata } from "../../../common/types"; -import client from "../client"; +import type { StudyMetadata } from "@/common/types.ts"; +import client from "../../client.ts"; +import type { + SetTimeSeriesConfigParams, + TimeSeriesTypeConfig, +} from "@/services/api/studies/timeseries/types.ts"; +import * as R from "ramda"; /** * Launches time series generation task for the specified study. @@ -26,3 +31,13 @@ export async function generateTimeSeries(params: { studyId: StudyMetadata["id"] const { data } = await client.put(`/v1/studies/${params.studyId}/timeseries/generate`); return data; } + +export async function setTimeSeriesConfig({ studyId, values }: SetTimeSeriesConfigParams) { + // Extra fields not allowed by the API + const validDTO = R.map( + (config = {}) => R.pick(["number"] as Array, config), + values, + ); + + await client.put(`/v1/studies/${studyId}/timeseries/config`, validDTO); +} diff --git a/webapp/src/services/api/studies/timeseries/types.ts b/webapp/src/services/api/studies/timeseries/types.ts new file mode 100644 index 0000000000..936161a93f --- /dev/null +++ b/webapp/src/services/api/studies/timeseries/types.ts @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2025, RTE (https://www.rte-france.com) + * + * See AUTHORS.txt + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * SPDX-License-Identifier: MPL-2.0 + * + * This file is part of the Antares project. + */ + +import type { StudyMetadata } from "@/common/types.ts"; +import type { DeepPartial } from "react-hook-form"; +import type { O } from "ts-toolbelt"; +import { type TimeSeriesType } from "./constants"; + +export type TimeSeriesTypeValue = O.UnionOf; + +export interface TimeSeriesTypeConfig { + number: number; +} + +export type TimeSeriesConfigDTO = Record; + +export interface SetTimeSeriesConfigParams { + studyId: StudyMetadata["id"]; + values: DeepPartial; +} diff --git a/webapp/src/services/api/tasks/index.ts b/webapp/src/services/api/tasks/index.ts index 77d11bedce..bb1583eaba 100644 --- a/webapp/src/services/api/tasks/index.ts +++ b/webapp/src/services/api/tasks/index.ts @@ -13,11 +13,18 @@ */ import client from "../client"; -import type { GetTaskParams, GetTasksParams, TaskDTO, TTaskStatus, TTaskType } from "./types"; +import type { + GetTaskParams, + GetTasksParams, + TaskDTO, + TaskStatusValue, + TaskTypeValue, +} from "./types"; -export async function getTasks( - params: GetTasksParams, -) { +export async function getTasks< + TStatus extends TaskStatusValue, + TType extends TaskTypeValue | undefined, +>(params: GetTasksParams) { const { data } = await client.post>>("/v1/tasks", { status: params.status, type: params.type, diff --git a/webapp/src/services/api/tasks/types.ts b/webapp/src/services/api/tasks/types.ts index c2b44c9bcb..d41a6b1349 100644 --- a/webapp/src/services/api/tasks/types.ts +++ b/webapp/src/services/api/tasks/types.ts @@ -13,17 +13,17 @@ */ import type { O } from "ts-toolbelt"; -import type { IdentityDTO, StudyMetadata } from "../../../common/types"; +import type { IdentityDTO, StudyMetadata } from "@/common/types.ts"; import type { TaskStatus, TaskType } from "./constants"; -export type TTaskStatus = O.UnionOf; +export type TaskStatusValue = O.UnionOf; -export type TTaskType = O.UnionOf; +export type TaskTypeValue = O.UnionOf; interface BaseTaskDTO< - TStatus extends TTaskStatus = TTaskStatus, - TType extends TTaskType = TTaskType, -> extends IdentityDTO { + TStatus extends TaskStatusValue = TaskStatusValue, + TType extends TaskTypeValue = TaskTypeValue, +> extends IdentityDTO { status: TStatus; type?: TType; owner?: number; @@ -43,13 +43,16 @@ interface BaseTaskDTO< } export type TaskDTO< - TStatus extends TTaskStatus = TTaskStatus, - TType extends TTaskType | undefined = undefined, -> = TType extends TTaskType + TStatus extends TaskStatusValue = TaskStatusValue, + TType extends TaskTypeValue | undefined = undefined, +> = TType extends TaskTypeValue ? O.Required, "type"> : BaseTaskDTO; -export interface GetTasksParams { +export interface GetTasksParams< + TStatus extends TaskStatusValue, + TType extends TaskTypeValue | undefined, +> { status?: TStatus[]; type?: TType[]; name?: string; diff --git a/webapp/src/services/webSocket/types.ts b/webapp/src/services/webSocket/types.ts index 9803344dea..6b760d5cbb 100644 --- a/webapp/src/services/webSocket/types.ts +++ b/webapp/src/services/webSocket/types.ts @@ -22,7 +22,7 @@ import type { import type { WsEventType } from "./constants"; import type { O } from "ts-toolbelt"; import type { FileDownloadDTO } from "../api/downloads"; -import type { TaskDTO, TTaskType } from "../api/tasks/types"; +import type { TaskDTO, TaskTypeValue } from "../api/tasks/types"; /** * Copyright (c) 2024, RTE (https://www.rte-france.com) @@ -38,7 +38,7 @@ import type { TaskDTO, TTaskType } from "../api/tasks/types"; * This file is part of the Antares project. */ -export type TWsEventType = O.UnionOf; +export type WsEventTypeValue = O.UnionOf; //////////////////////////////////////////////////////////////// // Payloads @@ -59,7 +59,7 @@ export interface StudyJobLogUpdateEventPayload { export interface TaskEventPayload { id: string; message: string; - type: TTaskType; + type: TaskTypeValue; study_id?: StudyMetadata["id"]; } From b939a7ea3784e60d95f4a36bdbabd69ddaa7d9fe Mon Sep 17 00:00:00 2001 From: Sylvain Leclerc Date: Wed, 5 Feb 2025 09:27:11 +0100 Subject: [PATCH 81/86] chore(commands): remove obsolete variant-related features (#2326) Removal of unused command-related features: - the possibility to build a diff between variants - the possibility to build a list of commands to build a study from scratch - the possibility to revert commands Reasons: - Those features are not used, and probably full of bugs. - their future usage in this shape is very unlikely. For example, for the diff feature: if we want a diff between studies, we should make it a separate feature from commands with its own diff model. Having a diff as commands does not seem very useful: we already have the target study, what will we use the output commands for ? If we want to apply commands on another study, we don't need a diff for this, the user just needs to structure its studies for this and copy/paste the commands he wants to copy. - it hurts our capacity to maintain, refactor, and make evolutions in commands implementation Signed-off-by: Sylvain Leclerc --- AntaresWebLinux.spec | 35 -- AntaresWebWin.spec | 36 -- .../business/command_extractor.py | 499 ------------------ .../variantstudy/business/command_reverter.py | 407 -------------- .../variantstudy/model/command/create_area.py | 14 - .../command/create_binding_constraint.py | 48 -- .../model/command/create_cluster.py | 62 --- .../model/command/create_district.py | 43 -- .../variantstudy/model/command/create_link.py | 62 --- .../command/create_renewables_cluster.py | 36 -- .../model/command/create_st_storage.py | 70 --- .../model/command/create_user_resource.py | 20 - .../generate_thermal_cluster_timeseries.py | 16 - .../variantstudy/model/command/icommand.py | 69 --- .../variantstudy/model/command/remove_area.py | 12 - .../command/remove_binding_constraint.py | 14 - .../model/command/remove_cluster.py | 20 - .../model/command/remove_district.py | 14 - .../variantstudy/model/command/remove_link.py | 15 - .../remove_multiple_binding_constraints.py | 14 - .../command/remove_renewables_cluster.py | 20 - .../model/command/remove_st_storage.py | 21 - .../model/command/remove_user_resource.py | 14 - .../model/command/replace_matrix.py | 16 - .../command/update_binding_constraint.py | 16 - .../model/command/update_comments.py | 14 - .../model/command/update_config.py | 17 - .../model/command/update_district.py | 23 - .../variantstudy/model/command/update_link.py | 8 - .../model/command/update_playlist.py | 21 - .../model/command/update_raw_file.py | 17 - .../model/command/update_scenario_builder.py | 16 - .../variantstudy/variant_command_extractor.py | 211 -------- antarest/tools/cli.py | 195 ------- antarest/tools/lib.py | 378 ------------- .../architecture/0-introduction.md | 1 - docs/user-guide/3-variant_manager.md | 13 - pyproject.toml | 2 +- resources/antares-desktop-fs/README.md | 17 - scripts/package_antares_web.sh | 4 +- tests/integration/assets/base_study.zip | Bin 305876 -> 0 bytes tests/integration/assets/commands1.json | 146 ----- tests/integration/assets/test_study.zip | Bin 170517 -> 0 bytes tests/integration/assets/variant_study.zip | Bin 311282 -> 0 bytes .../test_integration_variantmanager_tool.py | 244 --------- .../model/command/test_create_area.py | 28 - .../model/command/test_create_cluster.py | 114 ---- .../model/command/test_create_link.py | 72 --- .../command/test_create_renewables_cluster.py | 82 --- .../model/command/test_create_st_storage.py | 97 ---- .../test_manage_binding_constraints.py | 281 ---------- .../model/command/test_manage_district.py | 87 --- .../model/command/test_remove_area.py | 19 - .../model/command/test_remove_cluster.py | 30 -- .../model/command/test_remove_link.py | 23 - .../command/test_remove_renewables_cluster.py | 30 -- .../model/command/test_remove_st_storage.py | 37 -- .../model/command/test_replace_matrix.py | 54 -- .../model/command/test_update_comments.py | 62 --- .../model/command/test_update_config.py | 41 -- .../model/command/test_update_rawfile.py | 16 - 61 files changed, 2 insertions(+), 3991 deletions(-) delete mode 100644 antarest/study/storage/variantstudy/business/command_extractor.py delete mode 100644 antarest/study/storage/variantstudy/business/command_reverter.py delete mode 100644 antarest/study/storage/variantstudy/variant_command_extractor.py delete mode 100644 antarest/tools/cli.py delete mode 100644 antarest/tools/lib.py delete mode 100644 tests/integration/assets/base_study.zip delete mode 100644 tests/integration/assets/commands1.json delete mode 100644 tests/integration/assets/test_study.zip delete mode 100644 tests/integration/assets/variant_study.zip delete mode 100644 tests/integration/test_integration_variantmanager_tool.py diff --git a/AntaresWebLinux.spec b/AntaresWebLinux.spec index 8671f11bfa..92a531504c 100644 --- a/AntaresWebLinux.spec +++ b/AntaresWebLinux.spec @@ -54,45 +54,10 @@ antares_web_server_exe = EXE(antares_web_server_pyz, entitlements_file=None , icon='resources/webapp/favicon.ico') -antares_tool_a = Analysis(['antarest/tools/cli.py'], - pathex=[], - binaries=[], - datas=[('./resources', './resources')], - hiddenimports=['cmath', 'sqlalchemy.sql.default_comparator', 'sqlalchemy.ext.baked'], - hookspath=['extra-hooks'], - hooksconfig={}, - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -antares_tool_pyz = PYZ(antares_tool_a.pure, antares_tool_a.zipped_data, - cipher=block_cipher) -antares_tool_exe = EXE(antares_tool_pyz, - antares_tool_a.scripts, - [], - exclude_binaries=True, - name='AntaresTool', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - console=True, - disable_windowed_traceback=False, - target_arch=None, - codesign_identity=None, - entitlements_file=None ) - - coll = COLLECT(antares_web_server_exe, antares_web_server_a.binaries, antares_web_server_a.zipfiles, antares_web_server_a.datas, - antares_tool_exe, - antares_tool_a.binaries, - antares_tool_a.zipfiles, - antares_tool_a.datas, strip=False, upx=True, upx_exclude=[], diff --git a/AntaresWebWin.spec b/AntaresWebWin.spec index 8afcb62dae..c26c0257ed 100644 --- a/AntaresWebWin.spec +++ b/AntaresWebWin.spec @@ -53,46 +53,10 @@ antares_web_server_exe = EXE(antares_web_server_pyz, codesign_identity=None, entitlements_file=None , icon='resources/webapp/favicon.ico') - -antares_tool_a = Analysis(['antarest/tools/cli.py'], - pathex=[], - binaries=[], - datas=[('./resources', './resources')], - hiddenimports=['cmath', 'sqlalchemy.sql.default_comparator', 'sqlalchemy.ext.baked'], - hookspath=['extra-hooks'], - hooksconfig={}, - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) -antares_tool_pyz = PYZ(antares_tool_a.pure, antares_tool_a.zipped_data, - cipher=block_cipher) -antares_tool_exe = EXE(antares_tool_pyz, - antares_tool_a.scripts, - [], - exclude_binaries=True, - name='AntaresTool', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - console=True, - disable_windowed_traceback=False, - target_arch=None, - codesign_identity=None, - entitlements_file=None ) - - coll = COLLECT(antares_web_server_exe, antares_web_server_a.binaries, antares_web_server_a.zipfiles, antares_web_server_a.datas, - antares_tool_exe, - antares_tool_a.binaries, - antares_tool_a.zipfiles, - antares_tool_a.datas, strip=False, upx=True, upx_exclude=[], diff --git a/antarest/study/storage/variantstudy/business/command_extractor.py b/antarest/study/storage/variantstudy/business/command_extractor.py deleted file mode 100644 index 95b51fe9ea..0000000000 --- a/antarest/study/storage/variantstudy/business/command_extractor.py +++ /dev/null @@ -1,499 +0,0 @@ -# Copyright (c) 2025, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -import base64 -import logging -import typing as t - -import numpy as np -from typing_extensions import override - -from antarest.core.model import JSON -from antarest.core.utils.utils import StopWatch -from antarest.matrixstore.model import MatrixData -from antarest.matrixstore.service import ISimpleMatrixService -from antarest.study.model import STUDY_VERSION_6_5, STUDY_VERSION_8_2, STUDY_VERSION_8_7 -from antarest.study.storage.patch_service import PatchService -from antarest.study.storage.rawstudy.model.filesystem.config.files import get_playlist -from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.rawstudy.model.filesystem.root.filestudytree import FileStudyTree -from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants -from antarest.study.storage.variantstudy.business.utils import strip_matrix_protocol -from antarest.study.storage.variantstudy.model.command.create_area import CreateArea -from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint -from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster -from antarest.study.storage.variantstudy.model.command.create_district import CreateDistrict, DistrictBaseFilter -from antarest.study.storage.variantstudy.model.command.create_link import CreateLink -from antarest.study.storage.variantstudy.model.command.create_renewables_cluster import CreateRenewablesCluster -from antarest.study.storage.variantstudy.model.command.icommand import ICommand -from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix -from antarest.study.storage.variantstudy.model.command.update_comments import UpdateComments -from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig -from antarest.study.storage.variantstudy.model.command.update_district import UpdateDistrict -from antarest.study.storage.variantstudy.model.command.update_playlist import UpdatePlaylist -from antarest.study.storage.variantstudy.model.command.update_raw_file import UpdateRawFile -from antarest.study.storage.variantstudy.model.command_context import CommandContext -from antarest.study.storage.variantstudy.model.interfaces import ICommandExtractor - -logger = logging.getLogger(__name__) - - -def _find_binding_config(binding_id: str, study_tree: FileStudyTree) -> JSON: - # noinspection SpellCheckingInspection - url = ["input", "bindingconstraints", "bindingconstraints"] - for binding_config in study_tree.get(url).values(): - if binding_config["id"] == binding_id: - return t.cast(JSON, binding_config) - raise ValueError(f"Binding constraint '{binding_id}' not found in '{''.join(url)}'") - - -class CommandExtractor(ICommandExtractor): - def __init__(self, matrix_service: ISimpleMatrixService, patch_service: PatchService): - self.matrix_service = matrix_service - self.generator_matrix_constants = GeneratorMatrixConstants(self.matrix_service) - self.generator_matrix_constants.init_constant_matrices() - self.patch_service = patch_service - self.command_context = CommandContext( - generator_matrix_constants=self.generator_matrix_constants, - matrix_service=self.matrix_service, - patch_service=self.patch_service, - ) - - @override - def extract_area(self, study: FileStudy, area_id: str) -> t.Tuple[t.List[ICommand], t.List[ICommand]]: - stopwatch = StopWatch() - study_tree = study.tree - study_config = study.config - area = study_config.areas[area_id] - optimization_data = study_tree.get(["input", "areas", area_id, "optimization"]) - ui_data = study_tree.get(["input", "areas", area_id, "ui"]) - - study_commands: t.List[ICommand] = [ - CreateArea(area_name=area.name, command_context=self.command_context, study_version=study_config.version), - UpdateConfig( - target=f"input/areas/{area_id}/optimization", - data=optimization_data, - command_context=self.command_context, - study_version=study_config.version, - ), - UpdateConfig( - target=f"input/areas/{area_id}/ui", - data=ui_data, - command_context=self.command_context, - study_version=study_config.version, - ), - ] - stopwatch.log_elapsed(lambda x: logger.info(f"Area command extraction done in {x}s")) - - links_data = study_tree.get(["input", "links", area_id, "properties"]) - links_commands: t.List[ICommand] = [] - for link in area.links: - links_commands += self.extract_link(study, area_id, link, links_data) - - stopwatch.log_elapsed(lambda x: logger.info(f"Link command extraction done in {x}s")) - - for thermal in area.thermals: - study_commands += self.extract_cluster(study, area_id, thermal.id) - stopwatch.log_elapsed(lambda x: logger.info(f"Thermal command extraction done in {x}s")) - - for renewable in area.renewables: - study_commands += self.extract_renewables_cluster(study, area_id, renewable.id) - stopwatch.log_elapsed(lambda x: logger.info(f"Renewables command extraction done in {x}s")) - - # load, wind, solar - null_matrix_id = strip_matrix_protocol(self.generator_matrix_constants.get_null_matrix()) - for gen_type in ["load", "wind", "solar"]: - for matrix in ["conversion", "data", "k", "translation"]: - study_commands.append( - self.generate_replace_matrix( - study_tree, - ["input", gen_type, "prepro", area_id, matrix], - ) - ) - study_commands.append( - self.generate_update_config( - study_tree, - ["input", gen_type, "prepro", area_id, "settings"], - ) - ) - study_commands.append( - self.generate_replace_matrix( - study_tree, - ["input", gen_type, "series", f"{gen_type}_{area_id}"], - null_matrix_id, - ) - ) - stopwatch.log_elapsed(lambda x: logger.info(f"Prepro command extraction done in {x}s")) - - # misc gen / reserves - study_commands.append(self.generate_replace_matrix(study_tree, ["input", "reserves", area_id])) - study_commands.append( - self.generate_replace_matrix( - study_tree, - ["input", "misc-gen", f"miscgen-{area_id}"], - ) - ) - - stopwatch.log_elapsed(lambda x: logger.info(f"Misc command extraction done in {x}s")) - # hydro - study_commands += self.extract_hydro(study, area_id) - stopwatch.log_elapsed(lambda x: logger.info(f"Hydro command extraction done in {x}s")) - return study_commands, links_commands - - @override - def extract_link( - self, - study: FileStudy, - area1: str, - area2: str, - links_data: t.Optional[JSON] = None, - ) -> t.List[ICommand]: - study_tree = study.tree - study_version = study.config.version - link_command = CreateLink( - area1=area1, area2=area2, parameters={}, command_context=self.command_context, study_version=study_version - ) - link_data = ( - links_data.get(area2) - if links_data is not None - else study_tree.get(["input", "links", area1, "properties", area2]) - ) - link_config_command = UpdateConfig( - target=f"input/links/{area1}/properties/{area2}", - data=link_data, - command_context=self.command_context, - study_version=study_version, - ) - null_matrix_id = strip_matrix_protocol(self.generator_matrix_constants.get_null_matrix()) - commands: t.List[ICommand] = [link_command, link_config_command] - if study_version < STUDY_VERSION_8_2: - commands.append( - self.generate_replace_matrix( - study_tree, - ["input", "links", area1, area2], - null_matrix_id, - ) - ) - else: - commands.extend( - [ - self.generate_replace_matrix( - study_tree, - ["input", "links", area1, f"{area2}_parameters"], - null_matrix_id, - ), - self.generate_replace_matrix( - study_tree, - ["input", "links", area1, "capacities", f"{area2}_direct"], - null_matrix_id, - ), - self.generate_replace_matrix( - study_tree, - ["input", "links", area1, "capacities", f"{area2}_indirect"], - null_matrix_id, - ), - ] - ) - return commands - - def _extract_cluster(self, study: FileStudy, area_id: str, cluster_id: str, renewables: bool) -> t.List[ICommand]: - study_tree = study.tree - if renewables: - cluster_type = "renewables" # with a final "s" - cluster_list = study.config.areas[area_id].renewables - create_cluster_command = CreateRenewablesCluster - else: - cluster_type = "thermal" # w/o a final "s" - cluster_list = study.config.areas[area_id].thermals # type: ignore - create_cluster_command = CreateCluster # type: ignore - - cluster = next(iter(c for c in cluster_list if c.id == cluster_id)) - - null_matrix_id = strip_matrix_protocol(self.generator_matrix_constants.get_null_matrix()) - # Note that cluster IDs are case-insensitive, but series IDs are in lower case. - series_id = cluster_id.lower() - study_commands: t.List[ICommand] = [ - create_cluster_command( - area_id=area_id, - cluster_name=cluster.id, - parameters=cluster.model_dump(by_alias=True, exclude_defaults=True, exclude={"id"}), - command_context=self.command_context, - study_version=study_tree.config.version, - ), - self.generate_replace_matrix( - study_tree, - ["input", cluster_type, "series", area_id, series_id, "series"], - null_matrix_id, - ), - ] - if not renewables: - study_commands.extend( - [ - self.generate_replace_matrix( - study_tree, - ["input", cluster_type, "prepro", area_id, series_id, "data"], - null_matrix_id, - ), - self.generate_replace_matrix( - study_tree, - ["input", cluster_type, "prepro", area_id, series_id, "modulation"], - null_matrix_id, - ), - ] - ) - return study_commands - - @override - def extract_cluster(self, study: FileStudy, area_id: str, thermal_id: str) -> t.List[ICommand]: - return self._extract_cluster(study, area_id, thermal_id, False) - - @override - def extract_renewables_cluster(self, study: FileStudy, area_id: str, renewables_id: str) -> t.List[ICommand]: - return self._extract_cluster(study, area_id, renewables_id, True) - - @override - def extract_hydro(self, study: FileStudy, area_id: str) -> t.List[ICommand]: - study_tree = study.tree - commands = [ - self.generate_replace_matrix( - study_tree, - ["input", "hydro", "common", "capacity", f"maxpower_{area_id}"], - ), - self.generate_replace_matrix( - study_tree, - ["input", "hydro", "common", "capacity", f"reservoir_{area_id}"], - ), - self.generate_replace_matrix( - study_tree, - ["input", "hydro", "prepro", area_id, "energy"], - ), - self.generate_replace_matrix( - study_tree, - ["input", "hydro", "series", area_id, "mod"], - ), - self.generate_replace_matrix( - study_tree, - ["input", "hydro", "series", area_id, "ror"], - ), - self.generate_update_config( - study_tree, - ["input", "hydro", "prepro", area_id, "prepro"], - ), - self.generate_update_config( - study_tree, - ["input", "hydro", "allocation", area_id], - ), - ] - - if study_tree.config.version > STUDY_VERSION_6_5: - commands += [ - self.generate_replace_matrix( - study_tree, - ["input", "hydro", "common", "capacity", f"creditmodulations_{area_id}"], - ), - self.generate_replace_matrix( - study_tree, - ["input", "hydro", "common", "capacity", f"inflowPattern_{area_id}"], - ), - self.generate_replace_matrix( - study_tree, - ["input", "hydro", "common", "capacity", f"waterValues_{area_id}"], - ), - ] - - hydro_config = study_tree.get(["input", "hydro", "hydro"]) - for key in hydro_config: - if area_id in hydro_config[key]: - commands.append( - self.generate_update_config( - study_tree, - ["input", "hydro", "hydro", key, area_id], - ) - ) - - return commands - - @override - def extract_district(self, study: FileStudy, district_id: str) -> t.List[ICommand]: - study_commands: t.List[ICommand] = [] - study_config = study.config - study_tree = study.tree - district_config = study_config.sets[district_id] - base_filter = DistrictBaseFilter.add_all if district_config.inverted_set else DistrictBaseFilter.remove_all - district_fetched_config = study_tree.get(["input", "areas", "sets", district_id]) - assert district_config.name is not None - study_commands.append( - CreateDistrict( - name=district_config.name, - base_filter=base_filter, - filter_items=district_config.areas or [], - output=district_config.output, - comments=district_fetched_config.get("comments", None), - command_context=self.command_context, - study_version=study_config.version, - ) - ) - return study_commands - - @override - def extract_comments(self, study: FileStudy) -> t.List[ICommand]: - study_tree = study.tree - content = t.cast(bytes, study_tree.get(["settings", "comments"])) - comments = content.decode("utf-8") - return [ - UpdateComments( - comments=comments, command_context=self.command_context, study_version=study_tree.config.version - ) - ] - - @override - def extract_binding_constraint( - self, - study: FileStudy, - binding_id: str, - bindings_data: t.Optional[JSON] = None, - ) -> t.List[ICommand]: - study_tree = study.tree - study_version = study.config.version - - # Retrieve binding constraint properties from the study tree, - # so, field names follow the same convention as the INI file. - binding: JSON = _find_binding_config(binding_id, study_tree) if bindings_data is None else bindings_data - - # Extract the binding constraint ID, which is recalculated from the name in the command - bc_id = binding.pop("id") - - # Extract binding constraint terms, which keys contain "%" or "." - terms = {} - for term_id, value in sorted(binding.items()): - if "%" in term_id or "." in term_id: - weight, _, offset = str(value).partition("%") - term_value = [float(weight), int(offset)] if offset else [float(weight)] - terms[term_id] = term_value - del binding[term_id] - - # Extract the matrices associated with the binding constraint - if study_version < STUDY_VERSION_8_7: - urls = {"values": ["input", "bindingconstraints", bc_id]} - else: - urls = { - "less_term_matrix": ["input", "bindingconstraints", f"{bc_id}_lt"], - "greater_term_matrix": ["input", "bindingconstraints", f"{bc_id}_gt"], - "equal_term_matrix": ["input", "bindingconstraints", f"{bc_id}_eq"], - } - - matrices: t.Dict[str, t.List[t.List[float]]] = {} - for name, url in urls.items(): - matrix = study_tree.get(url) - if matrix is not None: - matrices[name] = matrix["data"] - - # Create the command to create the binding constraint - kwargs = { - **binding, - **matrices, - "coeffs": terms, - "command_context": self.command_context, - "study_version": study_version, - } - create_cmd = CreateBindingConstraint.model_validate(kwargs) - - return [create_cmd] - - @override - def generate_update_config(self, study_tree: FileStudyTree, url: t.List[str]) -> ICommand: - data = study_tree.get(url) - return UpdateConfig( - target="/".join(url), - data=data, - command_context=self.command_context, - study_version=study_tree.config.version, - ) - - @override - def generate_update_raw_file(self, study_tree: FileStudyTree, url: t.List[str]) -> ICommand: - data = study_tree.get(url) - return UpdateRawFile( - target="/".join(url), - b64Data=base64.b64encode(t.cast(bytes, data)).decode("utf-8"), - command_context=self.command_context, - study_version=study_tree.config.version, - ) - - @override - def generate_update_comments( - self, - study_tree: FileStudyTree, - ) -> ICommand: - content = t.cast(bytes, study_tree.get(["settings", "comments"])) - comments = content.decode("utf-8") - return UpdateComments( - comments=comments, command_context=self.command_context, study_version=study_tree.config.version - ) - - def generate_update_playlist( - self, - study_tree: FileStudyTree, - ) -> ICommand: - config = study_tree.get(["settings", "generaldata"]) - playlist = get_playlist(config) - return UpdatePlaylist( - items=list(playlist.keys()) if playlist else None, - weights=({year: weight for year, weight in playlist.items() if weight != 1} if playlist else None), - active=bool(playlist and len(playlist) > 0), - reverse=False, - command_context=self.command_context, - study_version=study_tree.config.version, - ) - - @override - def generate_replace_matrix( - self, - study_tree: FileStudyTree, - url: t.List[str], - default_value: t.Optional[str] = None, - ) -> ICommand: - data = study_tree.get(url) - if isinstance(data, str): - matrix = data - elif isinstance(data, dict): - matrix = data["data"] if "data" in data else [[]] - else: - matrix = [[]] if default_value is None else default_value - if isinstance(matrix, np.ndarray): - matrix = t.cast(t.List[t.List[MatrixData]], matrix.tolist()) - return ReplaceMatrix( - target="/".join(url), - matrix=matrix, - command_context=self.command_context, - study_version=study_tree.config.version, - ) - - def generate_update_district( - self, - study: FileStudy, - district_id: str, - ) -> ICommand: - study_config = study.config - study_tree = study.tree - district_config = study_config.sets[district_id] - district_fetched_config = study_tree.get(["input", "areas", "sets", district_id]) - assert district_config.name is not None - return UpdateDistrict( - id=district_config.name, - base_filter=DistrictBaseFilter.add_all if district_config.inverted_set else DistrictBaseFilter.remove_all, - filter_items=district_config.areas or [], - output=district_config.output, - comments=district_fetched_config.get("comments", None), - command_context=self.command_context, - study_version=study_tree.config.version, - ) diff --git a/antarest/study/storage/variantstudy/business/command_reverter.py b/antarest/study/storage/variantstudy/business/command_reverter.py deleted file mode 100644 index 4b74d2a0ba..0000000000 --- a/antarest/study/storage/variantstudy/business/command_reverter.py +++ /dev/null @@ -1,407 +0,0 @@ -# Copyright (c) 2025, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -import logging -import typing as t -from pathlib import Path - -from antarest.core.exceptions import ChildNotFoundError -from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id -from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.model.command.common import CommandName -from antarest.study.storage.variantstudy.model.command.create_area import CreateArea -from antarest.study.storage.variantstudy.model.command.create_binding_constraint import ( - CreateBindingConstraint, - TermMatrices, -) -from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster -from antarest.study.storage.variantstudy.model.command.create_district import CreateDistrict -from antarest.study.storage.variantstudy.model.command.create_link import CreateLink -from antarest.study.storage.variantstudy.model.command.create_renewables_cluster import CreateRenewablesCluster -from antarest.study.storage.variantstudy.model.command.create_st_storage import CreateSTStorage -from antarest.study.storage.variantstudy.model.command.create_user_resource import CreateUserResource -from antarest.study.storage.variantstudy.model.command.generate_thermal_cluster_timeseries import ( - GenerateThermalClusterTimeSeries, -) -from antarest.study.storage.variantstudy.model.command.icommand import ICommand -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea -from antarest.study.storage.variantstudy.model.command.remove_binding_constraint import RemoveBindingConstraint -from antarest.study.storage.variantstudy.model.command.remove_cluster import RemoveCluster -from antarest.study.storage.variantstudy.model.command.remove_district import RemoveDistrict -from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink -from antarest.study.storage.variantstudy.model.command.remove_multiple_binding_constraints import ( - RemoveMultipleBindingConstraints, -) -from antarest.study.storage.variantstudy.model.command.remove_renewables_cluster import RemoveRenewablesCluster -from antarest.study.storage.variantstudy.model.command.remove_st_storage import RemoveSTStorage -from antarest.study.storage.variantstudy.model.command.remove_user_resource import RemoveUserResource -from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix -from antarest.study.storage.variantstudy.model.command.update_binding_constraint import UpdateBindingConstraint -from antarest.study.storage.variantstudy.model.command.update_comments import UpdateComments -from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig -from antarest.study.storage.variantstudy.model.command.update_district import UpdateDistrict -from antarest.study.storage.variantstudy.model.command.update_playlist import UpdatePlaylist -from antarest.study.storage.variantstudy.model.command.update_raw_file import UpdateRawFile -from antarest.study.storage.variantstudy.model.command.update_scenario_builder import UpdateScenarioBuilder - -logger = logging.getLogger(__name__) - - -class CommandReverter: - def __init__(self) -> None: - self.method_dict: t.Dict[ - CommandName, - t.Callable[[ICommand, t.List[ICommand], FileStudy], t.List[ICommand]], - ] = {command_name: getattr(self, f"_revert_{command_name.value}") for command_name in CommandName} - - @staticmethod - def _revert_create_area(base_command: CreateArea, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: - area_id = transform_name_to_id(base_command.area_name) - return [RemoveArea(id=area_id, command_context=base_command.command_context, study_version=base.config.version)] - - @staticmethod - def _revert_remove_area(base_command: RemoveArea, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: - raise NotImplementedError("The revert function for RemoveArea is not available") - - @staticmethod - def _revert_create_district( - base_command: CreateDistrict, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - district_id = transform_name_to_id(base_command.name) - return [ - RemoveDistrict( - id=district_id, command_context=base_command.command_context, study_version=base.config.version - ) - ] - - @staticmethod - def _revert_remove_district( - base_command: RemoveDistrict, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - raise NotImplementedError("The revert function for RemoveDistrict is not available") - - @staticmethod - def _revert_create_link(base_command: CreateLink, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: - return [ - RemoveLink( - area1=base_command.area1, - area2=base_command.area2, - command_context=base_command.command_context, - study_version=base.config.version, - ) - ] - - @staticmethod - def _revert_update_link(base_command: CreateLink, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: - raise NotImplementedError("The revert function for UpdateLink is not available") - - @staticmethod - def _revert_remove_link(base_command: RemoveLink, history: t.List["ICommand"], base: FileStudy) -> t.List[ICommand]: - raise NotImplementedError("The revert function for RemoveLink is not available") - - @staticmethod - def _revert_create_binding_constraint( - base_command: CreateBindingConstraint, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - bind_id = transform_name_to_id(base_command.name) - return [ - RemoveBindingConstraint( - id=bind_id, command_context=base_command.command_context, study_version=base.config.version - ) - ] - - @staticmethod - def _revert_update_binding_constraint( - base_command: UpdateBindingConstraint, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - for command in reversed(history): - if isinstance(command, UpdateBindingConstraint) and command.id == base_command.id: - return [command] - elif isinstance(command, CreateBindingConstraint) and transform_name_to_id(command.name) == base_command.id: - args = { - "id": base_command.id, - "enabled": command.enabled, - "time_step": command.time_step, - "operator": command.operator, - "coeffs": command.coeffs, - "filter_year_by_year": command.filter_year_by_year, - "filter_synthesis": command.filter_synthesis, - "comments": command.comments, - "command_context": command.command_context, - "study_version": base.config.version, - } - - matrix_service = command.command_context.matrix_service - for matrix_name in ["values"] + [m.value for m in TermMatrices]: - matrix = getattr(command, matrix_name) - if matrix is not None: - args[matrix_name] = matrix_service.get_matrix_id(matrix) - - return [UpdateBindingConstraint.model_validate(args)] - - return base_command.get_command_extractor().extract_binding_constraint(base, base_command.id) - - @staticmethod - def _revert_remove_binding_constraint( - base_command: RemoveBindingConstraint, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - raise NotImplementedError("The revert function for RemoveBindingConstraint is not available") - - @staticmethod - def _revert_remove_multiple_binding_constraints( - base_command: RemoveMultipleBindingConstraints, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - raise NotImplementedError("The revert function for RemoveMultipleBindingConstraints is not available") - - @staticmethod - def _revert_update_scenario_builder( - base_command: UpdateScenarioBuilder, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - # todo make the diff between base study scenariobuilder data and base_command - raise NotImplementedError("The revert function for UpdateScenarioBuilder is not available") - - @staticmethod - def _revert_create_cluster( - base_command: CreateCluster, history: t.List["ICommand"], base: FileStudy - ) -> t.List[ICommand]: - cluster_id = transform_name_to_id(base_command.cluster_name) - return [ - RemoveCluster( - area_id=base_command.area_id, - cluster_id=cluster_id, - command_context=base_command.command_context, - study_version=base.config.version, - ) - ] - - @staticmethod - def _revert_remove_cluster( - base_command: RemoveCluster, history: t.List["ICommand"], base: FileStudy - ) -> t.List[ICommand]: - raise NotImplementedError("The revert function for RemoveCluster is not available") - - @staticmethod - def _revert_create_renewables_cluster( - base_command: CreateRenewablesCluster, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - cluster_id = transform_name_to_id(base_command.cluster_name) - return [ - RemoveRenewablesCluster( - area_id=base_command.area_id, - cluster_id=cluster_id, - command_context=base_command.command_context, - study_version=base.config.version, - ) - ] - - @staticmethod - def _revert_remove_renewables_cluster( - base_command: RemoveRenewablesCluster, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - raise NotImplementedError("The revert function for RemoveRenewablesCluster is not available") - - @staticmethod - def _revert_create_st_storage( - base_command: CreateSTStorage, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - storage_id = base_command.parameters.id - return [ - RemoveSTStorage( - area_id=base_command.area_id, - storage_id=storage_id, - command_context=base_command.command_context, - study_version=base.config.version, - ) - ] - - @staticmethod - def _revert_remove_st_storage( - base_command: RemoveSTStorage, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - raise NotImplementedError("The revert function for RemoveSTStorage is not available") - - @staticmethod - def _revert_replace_matrix( - base_command: ReplaceMatrix, history: t.List["ICommand"], base: FileStudy - ) -> t.List[ICommand]: - for command in reversed(history): - if isinstance(command, ReplaceMatrix) and command.target == base_command.target: - return [command] - - try: - return [ - base_command.get_command_extractor().generate_replace_matrix(base.tree, base_command.target.split("/")) - ] - except ChildNotFoundError: - return [] # if the matrix does not exist, there is nothing to revert - - @staticmethod - def _revert_update_config( - base_command: UpdateConfig, history: t.List["ICommand"], base: FileStudy - ) -> t.List[ICommand]: - update_config_list: t.List[UpdateConfig] = [] - self_target_path = Path(base_command.target) - parent_path: Path = Path("../model/command") - for command in reversed(history): - if isinstance(command, UpdateConfig): - # adding all the UpdateConfig commands until we find one containing self (or the end) - update_config_list.append(command) - if command.target == base_command.target: - return [command] - elif Path(command.target) in self_target_path.parents: - # found the last parent command. - parent_path = Path(command.target) - break - - output_list: t.List[ICommand] = [ - command - for command in update_config_list[::-1] - if parent_path in Path(command.target).parents or str(parent_path) == command.target - ] - - if output_list: - return output_list - - try: - return [ - base_command.get_command_extractor().generate_update_config(base.tree, base_command.target.split("/")) - ] - except ChildNotFoundError as e: - logger.warning( - f"Failed to extract revert command for update_config {base_command.target}", - exc_info=e, - ) - return [] - - @staticmethod - def _revert_update_comments( - base_command: UpdateComments, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - for command in reversed(history): - if isinstance(command, UpdateComments): - return [command] - - try: - return [base_command.get_command_extractor().generate_update_comments(base.tree)] - except ChildNotFoundError: - return [] # if the file does not exist, there is nothing to revert - - @staticmethod - def _revert_update_playlist( - base_command: UpdatePlaylist, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - for command in reversed(history): - if isinstance(command, UpdatePlaylist): - return [command] - - try: - return [base_command.get_command_extractor().generate_update_playlist(base.tree)] - except ChildNotFoundError: - return [] # if the file does not exist, there is nothing to revert - - @staticmethod - def _revert_update_file( - base_command: UpdateRawFile, history: t.List["ICommand"], base: FileStudy - ) -> t.List[ICommand]: - for command in reversed(history): - if isinstance(command, UpdateRawFile) and command.target == base_command.target: - return [command] - - extractor = base_command.get_command_extractor() - return [extractor.generate_update_raw_file(base.tree, base_command.target.split("/"))] - - @staticmethod - def _revert_update_district( - base_command: UpdateDistrict, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - for command in reversed(history): - # fmt: off - if ( - (isinstance(command, UpdateDistrict) and command.id == base_command.id) or - (isinstance(command, CreateDistrict) and transform_name_to_id(command.name) == base_command.id) - ): - return [command] - - extractor = base_command.get_command_extractor() - return [extractor.generate_update_district(base, base_command.id)] - - @staticmethod - def _revert_generate_thermal_cluster_timeseries( - base_command: GenerateThermalClusterTimeSeries, history: t.List["ICommand"], base: FileStudy - ) -> t.List[ICommand]: - raise NotImplementedError("The revert function for GenerateThermalClusterTimeSeries is not available") - - @staticmethod - def _revert_create_user_resource( - base_command: CreateUserResource, history: t.List["ICommand"], base: FileStudy - ) -> t.List[ICommand]: - return [ - RemoveUserResource( - data=base_command.data, - command_context=base_command.command_context, - study_version=base_command.study_version, - ) - ] - - @staticmethod - def _revert_remove_user_resource( - base_command: RemoveUserResource, history: t.List["ICommand"], base: FileStudy - ) -> t.List[ICommand]: - raise NotImplementedError("The revert function for RemoveUserResource is not available") - - def revert( - self, - base_command: ICommand, - history: t.List["ICommand"], - base: FileStudy, - ) -> t.List[ICommand]: - """ - Generate a list of commands to revert the given command. - - Args: - base_command: The command to revert. - history: The history of commands. - base: The base study. - - Returns: - A list of commands to revert the given command. - """ - - return self.method_dict[base_command.command_name](base_command, history, base) diff --git a/antarest/study/storage/variantstudy/model/command/create_area.py b/antarest/study/storage/variantstudy/model/command/create_area.py index 65c78399b9..eba7ac8567 100644 --- a/antarest/study/storage/variantstudy/model/command/create_area.py +++ b/antarest/study/storage/variantstudy/model/command/create_area.py @@ -300,20 +300,6 @@ def to_dto(self) -> CommandDTO: action=CommandName.CREATE_AREA.value, args={"area_name": self.area_name}, study_version=self.study_version ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.area_name) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, CreateArea): - return False - return self.area_name == other.area_name - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py index 766934c8ee..1a94a256be 100644 --- a/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/create_binding_constraint.py @@ -456,51 +456,3 @@ def to_dto(self) -> CommandDTO: dto = super().to_dto() dto.args["name"] = self.name # type: ignore return dto - - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.name) - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - from antarest.study.storage.variantstudy.model.command.update_binding_constraint import UpdateBindingConstraint - - other = t.cast(CreateBindingConstraint, other) - bd_id = transform_name_to_id(self.name) - args = {"id": bd_id, "command_context": other.command_context, "study_version": other.study_version} - - excluded_fields = set(ICommand.model_fields) - self_command = self.model_dump(mode="json", exclude=excluded_fields) - other_command = other.model_dump(mode="json", exclude=excluded_fields) - properties = [ - "enabled", - "coeffs", - "comments", - "filter_year_by_year", - "filter_synthesis", - "group", - "time_step", - "operator", - ] - for prop in properties: - if self_command[prop] != other_command[prop]: - args[prop] = other_command[prop] - - matrix_service = self.command_context.matrix_service - for matrix_name in ["values"] + [m.value for m in TermMatrices]: - self_matrix = getattr(self, matrix_name) # matrix, ID or `None` - other_matrix = getattr(other, matrix_name) # matrix, ID or `None` - self_matrix_id = None if self_matrix is None else matrix_service.get_matrix_id(self_matrix) - other_matrix_id = None if other_matrix is None else matrix_service.get_matrix_id(other_matrix) - if self_matrix_id != other_matrix_id: - args[matrix_name] = other_matrix_id - - return [UpdateBindingConstraint.model_validate(args)] - - @override - def match(self, other: "ICommand", equal: bool = False) -> bool: - if not isinstance(other, self.__class__): - return False - if not equal: - return self.name == other.name - return super().match(other, equal) diff --git a/antarest/study/storage/variantstudy/model/command/create_cluster.py b/antarest/study/storage/variantstudy/model/command/create_cluster.py index c8f42fb60a..e02cb944fc 100644 --- a/antarest/study/storage/variantstudy/model/command/create_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_cluster.py @@ -175,68 +175,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str( - self.command_name.value - + MATCH_SIGNATURE_SEPARATOR - + self.area_id - + MATCH_SIGNATURE_SEPARATOR - + self.cluster_name - ) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, CreateCluster): - return False - simple_match = self.area_id == other.area_id and self.cluster_name == other.cluster_name - if not equal: - return simple_match - return ( - simple_match - and self.parameters == other.parameters - and self.prepro == other.prepro - and self.modulation == other.modulation - ) - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - other = t.cast(CreateCluster, other) - from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix - from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig - - # Series identifiers are in lower case. - series_id = transform_name_to_id(self.cluster_name, lower=True) - commands: t.List[ICommand] = [] - if self.prepro != other.prepro: - commands.append( - ReplaceMatrix( - target=f"input/thermal/prepro/{self.area_id}/{series_id}/data", - matrix=strip_matrix_protocol(other.prepro), - command_context=self.command_context, - study_version=self.study_version, - ) - ) - if self.modulation != other.modulation: - commands.append( - ReplaceMatrix( - target=f"input/thermal/prepro/{self.area_id}/{series_id}/modulation", - matrix=strip_matrix_protocol(other.modulation), - command_context=self.command_context, - study_version=self.study_version, - ) - ) - if self.parameters != other.parameters: - commands.append( - UpdateConfig( - target=f"input/thermal/clusters/{self.area_id}/list/{self.cluster_name}", - data=other.parameters, - command_context=self.command_context, - study_version=self.study_version, - ) - ) - return commands - @override def get_inner_matrices(self) -> t.List[str]: matrices: t.List[str] = [] diff --git a/antarest/study/storage/variantstudy/model/command/create_district.py b/antarest/study/storage/variantstudy/model/command/create_district.py index 8edb484700..ac28b32d92 100644 --- a/antarest/study/storage/variantstudy/model/command/create_district.py +++ b/antarest/study/storage/variantstudy/model/command/create_district.py @@ -120,49 +120,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.name) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, CreateDistrict): - return False - simple_match = self.name == other.name - if not equal: - return simple_match - return ( - simple_match - and self.base_filter == other.base_filter - and self.filter_items == other.filter_items - and self.output == other.output - and self.comments == other.comments - ) - - @override - def _create_diff(self, other: "ICommand") -> List["ICommand"]: - other = cast(CreateDistrict, other) - district_id = transform_name_to_id(self.name) - from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig - - base_filter = other.base_filter or DistrictBaseFilter.remove_all - inverted_set = base_filter == DistrictBaseFilter.add_all - item_key = "-" if inverted_set else "+" - return [ - UpdateConfig( - target=f"input/areas/sets/{district_id}", - data={ - "caption": other.name, - "apply-filter": (other.base_filter or DistrictBaseFilter.remove_all).value, - item_key: other.filter_items or [], - "output": other.output, - "comments": other.comments, - }, - command_context=self.command_context, - study_version=self.study_version, - ) - ] - @override def get_inner_matrices(self) -> List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/create_link.py b/antarest/study/storage/variantstudy/model/command/create_link.py index 1158c32a63..c553ab7be7 100644 --- a/antarest/study/storage/variantstudy/model/command/create_link.py +++ b/antarest/study/storage/variantstudy/model/command/create_link.py @@ -78,56 +78,6 @@ def to_dto(self) -> CommandDTO: args[attr] = strip_matrix_protocol(value) return CommandDTO(action=self.command_name.value, args=args, study_version=self.study_version) - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, self.__class__): - return False - simple_match = self.area1 == other.area1 and self.area2 == other.area2 - if not equal: - return simple_match - return ( - simple_match - and self.parameters == other.parameters - and self.series == other.series - and self.direct == other.direct - and self.indirect == other.indirect - ) - - @override - def match_signature(self) -> str: - return str( - self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.area1 + MATCH_SIGNATURE_SEPARATOR + self.area2 - ) - - @override - def _create_diff(self, other: "ICommand") -> List["ICommand"]: - other = cast(AbstractLinkCommand, other) - - commands: List[ICommand] = [] - area_from, area_to = sorted([self.area1, self.area2]) - if self.parameters != other.parameters: - properties = LinkInternal.model_validate(other.parameters or {}).model_dump( - mode="json", by_alias=True, exclude_none=True, exclude={"area1", "area2"} - ) - commands.append( - UpdateConfig( - target=f"input/links/{area_from}/properties/{area_to}", - data=properties, - command_context=self.command_context, - study_version=self.study_version, - ) - ) - if self.series != other.series: - commands.append( - ReplaceMatrix( - target=f"@links_series/{area_from}/{area_to}", - matrix=strip_matrix_protocol(other.series), - command_context=self.command_context, - study_version=self.study_version, - ) - ) - return commands - @override def get_inner_matrices(self) -> List[str]: list_matrices = [] @@ -295,18 +245,6 @@ def _apply(self, study_data: FileStudy, listener: Optional[ICommandListener] = N def to_dto(self) -> CommandDTO: return super().to_dto() - @override - def match_signature(self) -> str: - return super().match_signature() - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - return super().match(other, equal) - - @override - def _create_diff(self, other: "ICommand") -> List["ICommand"]: - return super()._create_diff(other) - @override def get_inner_matrices(self) -> List[str]: return super().get_inner_matrices() diff --git a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py index 2b4d93a085..951060e74c 100644 --- a/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/create_renewables_cluster.py @@ -148,42 +148,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str( - self.command_name.value - + MATCH_SIGNATURE_SEPARATOR - + self.area_id - + MATCH_SIGNATURE_SEPARATOR - + self.cluster_name - ) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, CreateRenewablesCluster): - return False - simple_match = self.area_id == other.area_id and self.cluster_name == other.cluster_name - if not equal: - return simple_match - return simple_match and self.parameters == other.parameters - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - other = t.cast(CreateRenewablesCluster, other) - from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig - - commands: t.List[ICommand] = [] - if self.parameters != other.parameters: - commands.append( - UpdateConfig( - target=f"input/renewables/clusters/{self.area_id}/list/{self.cluster_name}", - data=other.parameters, - command_context=self.command_context, - study_version=self.study_version, - ) - ) - return commands - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/create_st_storage.py b/antarest/study/storage/variantstudy/model/command/create_st_storage.py index a3c16195ad..6bd07f5c50 100644 --- a/antarest/study/storage/variantstudy/model/command/create_st_storage.py +++ b/antarest/study/storage/variantstudy/model/command/create_st_storage.py @@ -271,76 +271,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - """Returns the command signature.""" - return str( - self.command_name.value - + MATCH_SIGNATURE_SEPARATOR - + self.area_id - + MATCH_SIGNATURE_SEPARATOR - + self.storage_id - ) - - @override - def match(self, other: "ICommand", equal: bool = False) -> bool: - """ - Checks if the current instance matches another `ICommand` object. - - Args: - other: Another `ICommand` object to compare against. - equal: Flag indicating whether to perform a deep comparison. - - Returns: - bool: `True` if the current instance matches the other object, `False` otherwise. - """ - if not isinstance(other, CreateSTStorage): - return False - if equal: - # Deep comparison - return self.__eq__(other) - else: - return self.area_id == other.area_id and self.storage_id == other.storage_id - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - """ - Creates a list of commands representing the differences between - the current instance and another `ICommand` object. - - Args: - other: Another ICommand object to compare against. - - Returns: - A list of commands representing the differences between - the two `ICommand` objects. - """ - from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix - from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig - - other = t.cast(CreateSTStorage, other) - commands: t.List[ICommand] = [ - ReplaceMatrix( - target=f"input/st-storage/series/{self.area_id}/{self.storage_id}/{attr}", - matrix=strip_matrix_protocol(getattr(other, attr)), - command_context=self.command_context, - study_version=self.study_version, - ) - for attr in _MATRIX_NAMES - if getattr(self, attr) != getattr(other, attr) - ] - if self.parameters != other.parameters: - data: t.Dict[str, t.Any] = other.parameters.model_dump(mode="json", by_alias=True, exclude={"id"}) - commands.append( - UpdateConfig( - target=f"input/st-storage/clusters/{self.area_id}/list/{self.storage_id}", - data=data, - command_context=self.command_context, - study_version=self.study_version, - ) - ) - return commands - @override def get_inner_matrices(self) -> t.List[str]: """ diff --git a/antarest/study/storage/variantstudy/model/command/create_user_resource.py b/antarest/study/storage/variantstudy/model/command/create_user_resource.py index 869b896f2b..7274df3e13 100644 --- a/antarest/study/storage/variantstudy/model/command/create_user_resource.py +++ b/antarest/study/storage/variantstudy/model/command/create_user_resource.py @@ -86,26 +86,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str( - self.command_name.value - + MATCH_SIGNATURE_SEPARATOR - + self.data.path - + MATCH_SIGNATURE_SEPARATOR - + self.data.resource_type.value - ) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, CreateUserResource): - return False - return self.data.path == other.data.path and self.data.resource_type == other.data.resource_type - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [other] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py index b799940916..977e5d21b2 100644 --- a/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py +++ b/antarest/study/storage/variantstudy/model/command/generate_thermal_cluster_timeseries.py @@ -148,22 +148,6 @@ def _build_timeseries( def to_dto(self) -> CommandDTO: return CommandDTO(action=self.command_name.value, args={}, study_version=self.study_version) - @override - def match_signature(self) -> str: - return str(self.command_name.value) - - @override - def match(self, other: "ICommand", equal: bool = False) -> bool: - # Only used inside the cli app that no one uses I believe. - if not isinstance(other, GenerateThermalClusterTimeSeries): - return False - return True - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - # Only used inside the cli app that no one uses I believe. - raise NotImplementedError() - @override def get_inner_matrices(self) -> t.List[str]: # This is used to get used matrices and not remove them inside the garbage collector loop. diff --git a/antarest/study/storage/variantstudy/model/command/icommand.py b/antarest/study/storage/variantstudy/model/command/icommand.py index a12fd6cf2b..018729799b 100644 --- a/antarest/study/storage/variantstudy/model/command/icommand.py +++ b/antarest/study/storage/variantstudy/model/command/icommand.py @@ -27,9 +27,6 @@ from antarest.study.storage.variantstudy.model.command_listener.command_listener import ICommandListener from antarest.study.storage.variantstudy.model.model import CommandDTO -if t.TYPE_CHECKING: # False at runtime, for mypy - from antarest.study.storage.variantstudy.business.command_extractor import CommandExtractor - MATCH_SIGNATURE_SEPARATOR = "%" logger = logging.getLogger(__name__) @@ -125,75 +122,9 @@ def to_dto(self) -> CommandDTO: """ raise NotImplementedError() - @abstractmethod - def match_signature(self) -> str: - """Returns the command signature.""" - raise NotImplementedError() - - def match(self, other: "ICommand", equal: bool = False) -> bool: - """ - Indicate if the other command is the same type and targets the same element. - - Args: - other: other command to match against - equal: indicate if the match must check for param equality - - Returns: True if the command match with the other else False - """ - if not isinstance(other, self.__class__): - return False - excluded_fields = set(ICommand.model_fields) - this_values = self.model_dump(mode="json", exclude=excluded_fields) - that_values = other.model_dump(mode="json", exclude=excluded_fields) - return this_values == that_values - - @abstractmethod - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - """ - Creates a list of commands representing the differences between - the current instance and another `ICommand` object. - - Args: - other: Another ICommand object to compare against. - - Returns: - A list of commands representing the differences between - the two `ICommand` objects. - """ - raise NotImplementedError() - - def create_diff(self, other: "ICommand") -> t.List["ICommand"]: - """ - Creates a list of commands representing the differences between - the current instance and another `ICommand` object. - - Args: - other: Another ICommand object to compare against. - - Returns: - A list of commands representing the differences between - the two `ICommand` objects. - """ - assert_this(self.match(other)) - return self._create_diff(other) - @abstractmethod def get_inner_matrices(self) -> t.List[str]: """ Retrieves the list of matrix IDs. """ raise NotImplementedError() - - def get_command_extractor(self) -> "CommandExtractor": - """ - Create a new `CommandExtractor` used to revert the command changes. - - Returns: - An instance of `CommandExtractor`. - """ - from antarest.study.storage.variantstudy.business.command_extractor import CommandExtractor - - return CommandExtractor( - self.command_context.matrix_service, - self.command_context.patch_service, - ) diff --git a/antarest/study/storage/variantstudy/model/command/remove_area.py b/antarest/study/storage/variantstudy/model/command/remove_area.py index ec4e491ead..2d52e98cae 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_area.py +++ b/antarest/study/storage/variantstudy/model/command/remove_area.py @@ -295,18 +295,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.id) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - return isinstance(other, RemoveArea) and self.id == other.id - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py index 482ffc5a1b..6d63fb5828 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/remove_binding_constraint.py @@ -90,20 +90,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.id) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, RemoveBindingConstraint): - return False - return self.id == other.id - - @override - def _create_diff(self, other: "ICommand") -> List["ICommand"]: - return [] - @override def get_inner_matrices(self) -> List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/remove_cluster.py b/antarest/study/storage/variantstudy/model/command/remove_cluster.py index 3fe682ead9..0aa6d915a6 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/remove_cluster.py @@ -151,26 +151,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str( - self.command_name.value - + MATCH_SIGNATURE_SEPARATOR - + self.cluster_id - + MATCH_SIGNATURE_SEPARATOR - + self.area_id - ) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, RemoveCluster): - return False - return self.cluster_id == other.cluster_id and self.area_id == other.area_id - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/remove_district.py b/antarest/study/storage/variantstudy/model/command/remove_district.py index 421d1deca3..ddf5730712 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_district.py +++ b/antarest/study/storage/variantstudy/model/command/remove_district.py @@ -59,20 +59,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.id) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, RemoveDistrict): - return False - return self.id == other.id - - @override - def _create_diff(self, other: "ICommand") -> List["ICommand"]: - return [] - @override def get_inner_matrices(self) -> List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/remove_link.py b/antarest/study/storage/variantstudy/model/command/remove_link.py index 2f9b2fa7ef..1357cc9974 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_link.py +++ b/antarest/study/storage/variantstudy/model/command/remove_link.py @@ -162,21 +162,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - sep = MATCH_SIGNATURE_SEPARATOR - return f"{self.command_name.value}{sep}{self.area1}{sep}{self.area2}" - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, RemoveLink): - return False - return self.area1 == other.area1 and self.area2 == other.area2 - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py b/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py index 0415276eb9..f8dfacadc5 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py +++ b/antarest/study/storage/variantstudy/model/command/remove_multiple_binding_constraints.py @@ -95,20 +95,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + ",".join(self.ids)) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, RemoveMultipleBindingConstraints): - return False - return self.ids == other.ids - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py b/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py index 5947889bbe..0741bb47e4 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py +++ b/antarest/study/storage/variantstudy/model/command/remove_renewables_cluster.py @@ -143,26 +143,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str( - self.command_name.value - + MATCH_SIGNATURE_SEPARATOR - + self.cluster_id - + MATCH_SIGNATURE_SEPARATOR - + self.area_id - ) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, RemoveRenewablesCluster): - return False - return self.cluster_id == other.cluster_id and self.area_id == other.area_id - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/remove_st_storage.py b/antarest/study/storage/variantstudy/model/command/remove_st_storage.py index a5a420a362..c387e3adde 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_st_storage.py +++ b/antarest/study/storage/variantstudy/model/command/remove_st_storage.py @@ -147,27 +147,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - """Returns the command signature.""" - return str( - self.command_name.value - + MATCH_SIGNATURE_SEPARATOR - + self.area_id - + MATCH_SIGNATURE_SEPARATOR - + self.storage_id - ) - - @override - def match(self, other: "ICommand", equal: bool = False) -> bool: - # always perform a deep comparison, as there are no parameters - # or matrices, so that shallow and deep comparisons are identical. - return self.__eq__(other) - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/remove_user_resource.py b/antarest/study/storage/variantstudy/model/command/remove_user_resource.py index 7081163625..d626c031fe 100644 --- a/antarest/study/storage/variantstudy/model/command/remove_user_resource.py +++ b/antarest/study/storage/variantstudy/model/command/remove_user_resource.py @@ -74,20 +74,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.data.path) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, RemoveUserResource): - return False - return self.data.path == other.data.path - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [other] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/replace_matrix.py b/antarest/study/storage/variantstudy/model/command/replace_matrix.py index aaceb7c3f7..1f2a28dd4e 100644 --- a/antarest/study/storage/variantstudy/model/command/replace_matrix.py +++ b/antarest/study/storage/variantstudy/model/command/replace_matrix.py @@ -103,22 +103,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.target) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, ReplaceMatrix): - return False - if equal: - return self.target == other.target and self.matrix == other.matrix - return self.target == other.target - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [other] - @override def get_inner_matrices(self) -> t.List[str]: assert_this(isinstance(self.matrix, str)) diff --git a/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py b/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py index 35715ed293..d55d4721d3 100644 --- a/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py +++ b/antarest/study/storage/variantstudy/model/command/update_binding_constraint.py @@ -218,19 +218,3 @@ def to_dto(self) -> CommandDTO: return CommandDTO( action=self.command_name.value, args=json_command, version=self.version, study_version=self.study_version ) - - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.id) - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [other] - - @override - def match(self, other: "ICommand", equal: bool = False) -> bool: - if not isinstance(other, self.__class__): - return False - if not equal: - return self.id == other.id - return super().match(other, equal) diff --git a/antarest/study/storage/variantstudy/model/command/update_comments.py b/antarest/study/storage/variantstudy/model/command/update_comments.py index 2288414463..a73e3c36a6 100644 --- a/antarest/study/storage/variantstudy/model/command/update_comments.py +++ b/antarest/study/storage/variantstudy/model/command/update_comments.py @@ -68,20 +68,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, UpdateComments): - return False - return not equal or (self.comments == other.comments and equal) - - @override - def _create_diff(self, other: "ICommand") -> List["ICommand"]: - return [other] - @override def get_inner_matrices(self) -> List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/update_config.py b/antarest/study/storage/variantstudy/model/command/update_config.py index e53ed7edfe..605c215871 100644 --- a/antarest/study/storage/variantstudy/model/command/update_config.py +++ b/antarest/study/storage/variantstudy/model/command/update_config.py @@ -92,23 +92,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.target) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, UpdateConfig): - return False - simple_match = self.target == other.target - if not equal: - return simple_match - return simple_match and self.data == other.data - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [other] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/update_district.py b/antarest/study/storage/variantstudy/model/command/update_district.py index d6a65bd16b..d41bbc6f31 100644 --- a/antarest/study/storage/variantstudy/model/command/update_district.py +++ b/antarest/study/storage/variantstudy/model/command/update_district.py @@ -108,29 +108,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.id) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, UpdateDistrict): - return False - simple_match = self.id == other.id - if not equal: - return simple_match - return ( - simple_match - and self.base_filter == other.base_filter - and self.filter_items == other.filter_items - and self.output == other.output - and self.comments == other.comments - ) - - @override - def _create_diff(self, other: "ICommand") -> List["ICommand"]: - return [other] - @override def get_inner_matrices(self) -> List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/update_link.py b/antarest/study/storage/variantstudy/model/command/update_link.py index 1aaa2d5327..17d52f91ef 100644 --- a/antarest/study/storage/variantstudy/model/command/update_link.py +++ b/antarest/study/storage/variantstudy/model/command/update_link.py @@ -73,14 +73,6 @@ def _apply(self, study_data: FileStudy, listener: t.Optional[ICommandListener] = def to_dto(self) -> CommandDTO: return super().to_dto() - @override - def match_signature(self) -> str: - return super().match_signature() - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return super()._create_diff(other) - @override def get_inner_matrices(self) -> t.List[str]: return super().get_inner_matrices() diff --git a/antarest/study/storage/variantstudy/model/command/update_playlist.py b/antarest/study/storage/variantstudy/model/command/update_playlist.py index 39fcf3d1dd..89fcd985c7 100644 --- a/antarest/study/storage/variantstudy/model/command/update_playlist.py +++ b/antarest/study/storage/variantstudy/model/command/update_playlist.py @@ -70,27 +70,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return CommandName.UPDATE_PLAYLIST.name - - @override - def match(self, other: "ICommand", equal: bool = False) -> bool: - if not isinstance(other, UpdatePlaylist): - return False - if equal: - return ( - self.active == other.active - and self.reverse == other.reverse - and self.items == other.items - and self.weights == other.weights - ) - return True - - @override - def _create_diff(self, other: "ICommand") -> List["ICommand"]: - return [other] - @override def get_inner_matrices(self) -> List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/update_raw_file.py b/antarest/study/storage/variantstudy/model/command/update_raw_file.py index 0e8efb2392..c085e6753b 100644 --- a/antarest/study/storage/variantstudy/model/command/update_raw_file.py +++ b/antarest/study/storage/variantstudy/model/command/update_raw_file.py @@ -76,23 +76,6 @@ def to_dto(self) -> CommandDTO: study_version=self.study_version, ) - @override - def match_signature(self) -> str: - return str(self.command_name.value + MATCH_SIGNATURE_SEPARATOR + self.target) - - @override - def match(self, other: ICommand, equal: bool = False) -> bool: - if not isinstance(other, UpdateRawFile): - return False - simple_match = self.target == other.target - if not equal: - return simple_match - return simple_match and self.b64Data == other.b64Data - - @override - def _create_diff(self, other: "ICommand") -> List["ICommand"]: - return [other] - @override def get_inner_matrices(self) -> List[str]: return [] diff --git a/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py b/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py index 6ae373e238..871a2f3995 100644 --- a/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py +++ b/antarest/study/storage/variantstudy/model/command/update_scenario_builder.py @@ -107,22 +107,6 @@ def to_dto(self) -> CommandDTO: action=CommandName.UPDATE_SCENARIO_BUILDER.value, args={"data": self.data}, study_version=self.study_version ) - @override - def match_signature(self) -> str: - return CommandName.UPDATE_SCENARIO_BUILDER.value - - @override - def match(self, other: "ICommand", equal: bool = False) -> bool: - if not isinstance(other, UpdateScenarioBuilder): - return False - if equal: - return self.data == other.data - return True - - @override - def _create_diff(self, other: "ICommand") -> t.List["ICommand"]: - return [other] - @override def get_inner_matrices(self) -> t.List[str]: return [] diff --git a/antarest/study/storage/variantstudy/variant_command_extractor.py b/antarest/study/storage/variantstudy/variant_command_extractor.py deleted file mode 100644 index 7515e0147e..0000000000 --- a/antarest/study/storage/variantstudy/variant_command_extractor.py +++ /dev/null @@ -1,211 +0,0 @@ -# Copyright (c) 2025, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -import logging -from typing import List, Tuple - -from antarest.core.utils.utils import StopWatch -from antarest.matrixstore.service import ISimpleMatrixService -from antarest.study.storage.patch_service import PatchService -from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_extractor import CommandExtractor -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter -from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants -from antarest.study.storage.variantstudy.command_factory import CommandFactory -from antarest.study.storage.variantstudy.model.command.common import CommandName -from antarest.study.storage.variantstudy.model.command.icommand import ICommand -from antarest.study.storage.variantstudy.model.model import CommandDTO - -logger = logging.getLogger(__name__) - - -class VariantCommandsExtractor: - def __init__(self, matrix_service: ISimpleMatrixService, patch_service: PatchService): - self.matrix_service = matrix_service - self.generator_matrix_constants = GeneratorMatrixConstants(self.matrix_service) - self.generator_matrix_constants.init_constant_matrices() - self.command_extractor = CommandExtractor(self.matrix_service, patch_service=patch_service) - - def extract(self, study: FileStudy) -> List[CommandDTO]: - stopwatch = StopWatch() - study_tree = study.tree - study_config = study.config - # noinspection SpellCheckingInspection - study_commands: List[ICommand] = [ - self.command_extractor.generate_update_config(study_tree, ["settings", "generaldata"]), - self.command_extractor.generate_update_config( - study_tree, - ["settings", "scenariobuilder"], - ), - self.command_extractor.generate_update_config(study_tree, ["layers", "layers"]), - ] - - stopwatch.log_elapsed(lambda x: logger.info(f"General command extraction done in {x}s")) - - all_links_commands: List[ICommand] = [] - for area_id in study_config.areas: - ( - area_commands, - links_commands, - ) = self.command_extractor.extract_area(study, area_id) - study_commands += area_commands - all_links_commands += links_commands - study_commands += all_links_commands - - # correlations - for cat in ["load", "wind", "solar", "hydro"]: - study_commands.append( - self.command_extractor.generate_update_config( - study_tree, - ["input", cat, "prepro", "correlation"], - ) - ) - - # sets and all area config (weird it is found in thermal..) - study_commands.append( - self.command_extractor.generate_update_config( - study_tree, - ["input", "thermal", "areas"], - ) - ) - for set_id in study_config.sets: - study_commands += self.command_extractor.extract_district(study, set_id) - - # binding constraints - # noinspection SpellCheckingInspection - binding_config = study_tree.get(["input", "bindingconstraints", "bindingconstraints"]) - for binding_id, binding_data in binding_config.items(): - study_commands += self.command_extractor.extract_binding_constraint(study, binding_id, binding_data) - - stopwatch.log_elapsed(lambda x: logger.info(f"Binding command extraction done in {x}s")) - - stopwatch.log_elapsed(lambda x: logger.info(f"Command extraction done in {x}s"), True) - - study_commands += self.command_extractor.extract_comments(study=study) - return [command.to_dto() for command in study_commands] - - def diff( - self, - base: List[CommandDTO], - variant: List[CommandDTO], - empty_study: FileStudy, - ) -> List[ICommand]: - stopwatch = StopWatch() - command_factory = CommandFactory( - generator_matrix_constants=self.generator_matrix_constants, - matrix_service=self.matrix_service, - patch_service=self.command_extractor.patch_service, - ) - - logger.info("Parsing commands") - base_commands = command_factory.to_commands(base) - stopwatch.log_elapsed(lambda x: logger.info(f"Base commands parsed in {x}s")) - variant_commands = command_factory.to_commands(variant) - stopwatch.log_elapsed(lambda x: logger.info(f"Variant commands parsed in {x}s")) - - logger.info("Computing commands diff") - added_commands: List[Tuple[int, ICommand]] = [] - missing_commands: List[Tuple[ICommand, int]] = [] - modified_commands: List[Tuple[int, ICommand, ICommand]] = [] - for order, variant_command in enumerate(variant_commands, start=11): - for base_command in base_commands: - if variant_command.match(base_command): - if not variant_command.match(base_command, True): - modified_commands.append((order, variant_command, base_command)) - break - else: - # not found - added_commands.append((order, variant_command)) - stopwatch.log_elapsed(lambda x: logger.info(f"First diff pass done in {x}s")) - logger.info(f"Found {len(added_commands)} added commands") - logger.info(f"Found {len(modified_commands)} modified commands") - for index, base_command in enumerate(base_commands): - found = any(base_command.match(variant_command) for variant_command in variant_commands) - if not found: - missing_commands.append((base_command, index)) - stopwatch.log_elapsed(lambda x: logger.info(f"Second diff pass done in {x}s")) - logger.info(f"Found {len(missing_commands)} missing commands") - - first_commands: List[Tuple[int, ICommand]] = [] - last_commands: List[Tuple[int, ICommand]] = [] - logger.info("Computing new diff commands") - for command_obj, index in missing_commands: - logger.info(f"Reverting {command_obj.match_signature()}") - if command_obj.command_name == CommandName.REMOVE_AREA: - command_list = first_commands - priority = 0 - elif command_obj.command_name in [ - CommandName.REMOVE_LINK, - CommandName.REMOVE_THERMAL_CLUSTER, - CommandName.REMOVE_RENEWABLES_CLUSTER, - CommandName.REMOVE_ST_STORAGE, - ]: - command_list = first_commands - priority = 1 - elif command_obj.command_name in [ - CommandName.UPDATE_CONFIG, - CommandName.REPLACE_MATRIX, - CommandName.UPDATE_COMMENTS, - ]: - command_list = first_commands - priority = 2 - elif command_obj.command_name == CommandName.CREATE_AREA: - command_list = last_commands - priority = 3 - elif command_obj.command_name in [ - CommandName.CREATE_ST_STORAGE, - CommandName.CREATE_RENEWABLES_CLUSTER, - CommandName.CREATE_THERMAL_CLUSTER, - CommandName.CREATE_LINK, - ]: - command_list = last_commands - priority = 2 - elif command_obj.command_name in [ - CommandName.CREATE_BINDING_CONSTRAINT, - CommandName.CREATE_DISTRICT, - ]: - command_list = last_commands - priority = 1 - else: - command_list = first_commands - priority = 3 - - # noinspection SpellCheckingInspection - command_reverter = CommandReverter() - command_list.extend( - [ - (priority, command) - for command in command_reverter.revert( - command_obj, - history=base_commands[:index], - base=empty_study, - ) - ] - ) - for order, variant_command, base_command in modified_commands: - logger.info(f"Generating diff command for {variant_command.match_signature()}") - first_commands += [(order, command) for command in base_command.create_diff(variant_command)] - for ordered_command in added_commands: - first_commands.append(ordered_command) - - first_commands.sort(key=lambda x: x[0]) - last_commands.sort(key=lambda x: x[0]) - - diff_commands = [ordered_command[1] for ordered_command in first_commands] + [ - ordered_command[1] for ordered_command in last_commands - ] - stopwatch.log_elapsed( - lambda x: logger.info(f"Diff commands generation done in {x}s"), - since_start=True, - ) - logger.info(f"Diff commands total : {len(diff_commands)}") - return diff_commands diff --git a/antarest/tools/cli.py b/antarest/tools/cli.py deleted file mode 100644 index aa6b733bde..0000000000 --- a/antarest/tools/cli.py +++ /dev/null @@ -1,195 +0,0 @@ -# Copyright (c) 2025, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -import logging -from pathlib import Path -from typing import Optional - -import click -from antares.study.version import StudyVersion - -from antarest.study.model import NEW_DEFAULT_STUDY_VERSION -from antarest.study.storage.study_upgrader import StudyUpgrader -from antarest.tools.lib import create_http_client, extract_commands, generate_diff, generate_study - - -@click.group(context_settings={"max_content_width": 120}) -def commands() -> None: - logging.basicConfig(level=logging.INFO) - - -@commands.command("apply-script") -@click.option( - "--host", - "-h", - nargs=1, - required=False, - type=str, - help="Host URL of the antares web instance", -) -@click.option( - "--auth_token", - nargs=1, - required=False, - default=None, - type=str, - help="Authentication token if server needs one", -) -@click.option( - "--no-verify", - is_flag=True, - default=False, - help="Disables SSL certificate verification", -) -@click.option( - "--output", - "-o", - nargs=1, - required=False, - type=str, - help="Output study path", -) -@click.option( - "--input", - "-i", - nargs=1, - required=True, - type=click.Path(exists=True), - help="Variant script source path", -) -@click.option( - "--study_id", - "-s", - nargs=1, - required=False, - type=str, - help="ID of the variant to apply the script onto", -) -@click.option( - "--version", - "-v", - nargs=1, - required=False, - type=str, - help=f"Study version. Default:{NEW_DEFAULT_STUDY_VERSION}", - default=f"{NEW_DEFAULT_STUDY_VERSION:ddd}", -) -def cli_apply_script( - input: str, - study_id: Optional[str], - output: Optional[str], - host: Optional[str], - auth_token: Optional[str], - no_verify: bool, - version: str, -) -> None: - """Apply a variant script onto an AntaresWeb study variant""" - if output is None and host is None: - print("--output or --host must be set") - exit(1) - if output is not None and host is not None: - print("only --output or --host must be set") - exit(1) - if host is not None and study_id is None: - print("--study_id must be set") - exit(1) - study_version = StudyVersion.parse(version) - client = None - if host: - client = create_http_client(verify=not no_verify, auth_token=auth_token) - res = generate_study(Path(input), study_id, output, host, client, study_version) - print(res) - - -@commands.command("generate-script") -@click.option( - "--input", - "-i", - nargs=1, - required=True, - type=click.Path(exists=True), - help="Study path", -) -@click.option( - "--output", - "-o", - nargs=1, - required=True, - type=click.Path(exists=False), - help="Script output path", -) -def cli_generate_script(input: str, output: str) -> None: - """Generate variant script commands from a study""" - extract_commands(Path(input), Path(output)) - - -@commands.command("generate-script-diff") -@click.option( - "--base", - nargs=1, - required=True, - type=click.Path(exists=True), - help="Base study path", -) -@click.option( - "--variant", - nargs=1, - required=True, - type=click.Path(exists=True), - help="Variant study path", -) -@click.option( - "--output", - "-o", - nargs=1, - required=True, - type=click.Path(exists=False), - help="Script output path", -) -@click.option( - "--version", - "-v", - nargs=1, - required=False, - type=str, - help=f"Study version. Default:{NEW_DEFAULT_STUDY_VERSION}", - default=f"{NEW_DEFAULT_STUDY_VERSION:ddd}", -) -def cli_generate_script_diff(base: str, variant: str, output: str, version: str) -> None: - """Generate variant script commands from two variant script directories""" - generate_diff(Path(base), Path(variant), Path(output), StudyVersion.parse(version)) - - -@commands.command("upgrade-study") -@click.argument( - "study-path", - nargs=1, - type=click.Path(exists=True, dir_okay=True, readable=True, writable=True), -) -@click.argument( - "target-version", - nargs=1, - type=click.STRING, -) -def cli_upgrade_study(study_path: Path, target_version: str) -> None: - """Upgrades study version - - STUDY_PATH is the path of the study you want to update - - TARGET_VERSION is the version you want your study to be at (example 8.4.0 or 840) - """ - study_upgrader = StudyUpgrader(study_path, target_version.replace(".", "")) - study_upgrader.upgrade() - - -if __name__ == "__main__": - commands() diff --git a/antarest/tools/lib.py b/antarest/tools/lib.py deleted file mode 100644 index 85b1c6c19c..0000000000 --- a/antarest/tools/lib.py +++ /dev/null @@ -1,378 +0,0 @@ -# Copyright (c) 2025, RTE (https://www.rte-france.com) -# -# See AUTHORS.txt -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# SPDX-License-Identifier: MPL-2.0 -# -# This file is part of the Antares project. - -import json -import logging -import os -import shutil -from abc import ABC, abstractmethod -from pathlib import Path -from typing import List, Optional, Set, Union -from zipfile import ZipFile - -import numpy as np -from antares.study.version import StudyVersion -from httpx import Client -from typing_extensions import override - -from antarest.core.cache.business.local_chache import LocalCache -from antarest.core.config import CacheConfig -from antarest.core.serialization import from_json, to_json_string -from antarest.core.tasks.model import TaskDTO -from antarest.core.utils.utils import StopWatch, get_local_path -from antarest.matrixstore.repository import MatrixContentRepository -from antarest.matrixstore.service import SimpleMatrixService -from antarest.matrixstore.uri_resolver_service import UriResolverService -from antarest.study.model import NEW_DEFAULT_STUDY_VERSION, STUDY_REFERENCE_TEMPLATES -from antarest.study.storage.patch_service import PatchService -from antarest.study.storage.rawstudy.model.filesystem.factory import StudyFactory -from antarest.study.storage.utils import create_new_empty_study -from antarest.study.storage.variantstudy.business.matrix_constants_generator import GeneratorMatrixConstants -from antarest.study.storage.variantstudy.command_factory import CommandFactory -from antarest.study.storage.variantstudy.model.command.icommand import ICommand -from antarest.study.storage.variantstudy.model.model import CommandDTO, CommandDTOAPI, GenerationResultInfoDTO -from antarest.study.storage.variantstudy.variant_command_extractor import VariantCommandsExtractor -from antarest.study.storage.variantstudy.variant_command_generator import VariantCommandGenerator - -logger = logging.getLogger(__name__) -COMMAND_FILE = "commands.json" -MATRIX_STORE_DIR = "matrices" - - -class IVariantGenerator(ABC): - @abstractmethod - def apply_commands(self, commands: List[CommandDTO], matrices_dir: Path) -> GenerationResultInfoDTO: - raise NotImplementedError() - - -def set_auth_token(client: Client, auth_token: Optional[str] = None) -> Client: - if auth_token is not None: - client.headers.update({"Authorization": f"Bearer {auth_token}"}) - return client - - -def create_http_client(verify: bool, auth_token: Optional[str] = None) -> Client: - client = Client(verify=verify) - set_auth_token(client, auth_token) - return client - - -class RemoteVariantGenerator(IVariantGenerator): - def __init__( - self, - study_id: str, - host: str, - session: Client, - ): - self.study_id = study_id - self.session = session - self.host = host - - @override - def apply_commands( - self, - commands: List[CommandDTO], - matrices_dir: Path, - ) -> GenerationResultInfoDTO: - stopwatch = StopWatch() - - logger.info("Uploading matrices") - matrix_dataset: List[str] = [] - for matrix_file in matrices_dir.iterdir(): - matrix = np.loadtxt(matrix_file, delimiter="\t", dtype=np.float64, ndmin=2) - matrix = matrix.reshape((1, 0)) if matrix.size == 0 else matrix - matrix_data = matrix.tolist() - res = self.session.post(self.build_url("/v1/matrix"), json=matrix_data) - res.raise_for_status() - matrix_id = res.json() - matrix_dataset.append(matrix_id) - - # TODO could create a dataset from theses matrices using "variant_" as name - # also the matrix could be named after the command name where they are used - stopwatch.log_elapsed(lambda x: logger.info(f"Matrix upload done in {x}s")) - - res = self.session.post( - self.build_url(f"/v1/studies/{self.study_id}/commands"), - json=[command.model_dump() for command in commands], - ) - res.raise_for_status() - stopwatch.log_elapsed(lambda x: logger.info(f"Command upload done in {x}s")) - - res = self.session.put(self.build_url(f"/v1/studies/{self.study_id}/generate?denormalize=true")) - res.raise_for_status() - - task_id = res.json() - res = self.session.get(self.build_url(f"/v1/tasks/{task_id}?wait_for_completion=true")) - res.raise_for_status() - - stopwatch.log_elapsed(lambda x: logger.info(f"Generation done in {x}s")) - task_result = TaskDTO(**res.json()) - - if task_result.result is None or task_result.result.return_value is None: # pragma: no cover - # This should not happen, but if it does, we return a failed result - return GenerationResultInfoDTO(success=False, details=[]) - - info = from_json(task_result.result.return_value) - return GenerationResultInfoDTO(**info) - - def build_url(self, url: str) -> str: - return url if self.host is None else f"{self.host.strip('/')}/{url.strip('/')}" - - -class LocalVariantGenerator(IVariantGenerator): - def __init__(self, output_path: Path): - self.output_path = output_path - - def render_template(self, study_version: StudyVersion = NEW_DEFAULT_STUDY_VERSION) -> None: - version_template = STUDY_REFERENCE_TEMPLATES[study_version] - empty_study_zip = get_local_path() / "resources" / version_template - with ZipFile(empty_study_zip) as zip_output: - zip_output.extractall(path=self.output_path) - # remove preexisting sets - sets_ini = self.output_path.joinpath("input/areas/sets.ini") - sets_ini.write_bytes(b"") - - @override - def apply_commands(self, commands: List[CommandDTO], matrices_dir: Path) -> GenerationResultInfoDTO: - stopwatch = StopWatch() - matrix_content_repository = MatrixContentRepository( - bucket_dir=matrices_dir, - ) - matrix_service = SimpleMatrixService( - matrix_content_repository=matrix_content_repository, - ) - matrix_resolver = UriResolverService(matrix_service) - local_cache = LocalCache(CacheConfig()) - study_factory = StudyFactory( - matrix=matrix_service, - resolver=matrix_resolver, - cache=local_cache, - ) - generator = VariantCommandGenerator(study_factory) - generator_matrix_constants = GeneratorMatrixConstants(matrix_service) - generator_matrix_constants.init_constant_matrices() - command_factory = CommandFactory( - generator_matrix_constants=generator_matrix_constants, - matrix_service=matrix_service, - patch_service=PatchService(), - ) - - command_objs: List[List[ICommand]] = [] - logger.info("Parsing command objects...") - command_objs.extend(command_factory.to_command(command_block) for command_block in commands) - stopwatch.log_elapsed(lambda x: logger.info(f"Command objects parsed in {x}s")) - result = generator.generate(command_objs, self.output_path, delete_on_failure=False) - if result.success: - # sourcery skip: extract-method - logger.info("Building new study tree...") - study = study_factory.create_from_fs(self.output_path, study_id="", use_cache=False) - logger.info("Denormalize study...") - stopwatch.reset_current() - study.tree.denormalize() - stopwatch.log_elapsed(lambda x: logger.info(f"Denormalized done in {x}s")) - return result - - -def extract_commands(study_path: Path, commands_output_dir: Path) -> None: - if not commands_output_dir.exists(): - commands_output_dir.mkdir(parents=True) - matrices_dir = commands_output_dir / MATRIX_STORE_DIR - matrices_dir.mkdir() - matrix_content_repository = MatrixContentRepository( - bucket_dir=matrices_dir, - ) - matrix_service = SimpleMatrixService( - matrix_content_repository=matrix_content_repository, - ) - matrix_resolver = UriResolverService(matrix_service) - cache = LocalCache(CacheConfig()) - study_factory = StudyFactory( - matrix=matrix_service, - resolver=matrix_resolver, - cache=cache, - ) - - study = study_factory.create_from_fs(study_path, str(study_path), use_cache=False) - matrix_content_repository = MatrixContentRepository( - bucket_dir=matrices_dir, - ) - local_matrix_service = SimpleMatrixService( - matrix_content_repository=matrix_content_repository, - ) - extractor = VariantCommandsExtractor(local_matrix_service, patch_service=PatchService()) - command_list = extractor.extract(study) - - (commands_output_dir / COMMAND_FILE).write_text( - to_json_string([command.model_dump(exclude={"id"}) for command in command_list], indent=2) - ) - - -def generate_diff( - base: Path, - variant: Path, - output_dir: Path, - study_version: StudyVersion = NEW_DEFAULT_STUDY_VERSION, -) -> None: - """ - Generate variant script commands from two variant script directories. - - This function generates a set of commands that can be used to transform - the base study into the variant study, based on the differences between the two. - It does this by comparing the command files in each study directory - and extracting the differences between them. - - Args: - base: The directory of the base study. - variant: The directory of the variant study. - output_dir: The output directory where the generated commands will be saved. - study_version: The version of the generated study. - - Raises: - FileNotFoundError: If the base or variant study's command file is missing. - - Returns: - None. The generated commands are written to a JSON file in the specified output directory. - """ - if not output_dir.exists(): - output_dir.mkdir(parents=True) - matrices_dir = output_dir / MATRIX_STORE_DIR - matrices_dir.mkdir(exist_ok=True) - - study_id = "empty_base" - path_study = output_dir / study_id - - matrix_content_repository = MatrixContentRepository( - bucket_dir=matrices_dir, - ) - local_matrix_service = SimpleMatrixService( - matrix_content_repository=matrix_content_repository, - ) - resolver = UriResolverService(matrix_service=local_matrix_service) - - cache = LocalCache() - study_factory = StudyFactory(matrix=local_matrix_service, resolver=resolver, cache=cache) - - create_new_empty_study( - version=study_version, - path_study=path_study, - path_resources=get_local_path() / "resources", - ) - - empty_study = study_factory.create_from_fs(path_study, study_id) - - base_command_file = base / COMMAND_FILE - if not base_command_file.exists(): - raise FileNotFoundError(f"Missing {COMMAND_FILE}") - variant_command_file = variant / COMMAND_FILE - if not variant_command_file.exists(): - raise FileNotFoundError(f"Missing {COMMAND_FILE}") - - stopwatch = StopWatch() - logger.info("Copying input matrices") - if (base / MATRIX_STORE_DIR).exists(): - for matrix_file in os.listdir(base / MATRIX_STORE_DIR): - shutil.copyfile( - base / MATRIX_STORE_DIR / matrix_file, - matrices_dir / matrix_file, - ) - stopwatch.log_elapsed(lambda x: logger.info(f"Base input matrix copied in {x}s")) - if (variant / MATRIX_STORE_DIR).exists(): - for matrix_file in os.listdir(variant / MATRIX_STORE_DIR): - shutil.copyfile( - variant / MATRIX_STORE_DIR / matrix_file, - matrices_dir / matrix_file, - ) - stopwatch.log_elapsed(lambda x: logger.info(f"Variant input matrix copied in {x}s")) - - study_version = empty_study.config.version - extractor = VariantCommandsExtractor(local_matrix_service, patch_service=PatchService()) - diff_commands = extractor.diff( - base=parse_commands(base_command_file, study_version), - variant=parse_commands(variant_command_file, study_version), - empty_study=empty_study, - ) - - (output_dir / COMMAND_FILE).write_text( - to_json_string([command.to_dto().model_dump(exclude={"id"}) for command in diff_commands], indent=2) - ) - - needed_matrices: Set[str] = set() - for command in diff_commands: - for matrix in command.get_inner_matrices(): - needed_matrices.add(f"{matrix}.tsv") - for matrix_file in os.listdir(matrices_dir): - if matrix_file not in needed_matrices: - os.unlink(matrices_dir / matrix_file) - - -def parse_commands(file: Path, study_version: StudyVersion) -> List[CommandDTO]: - stopwatch = StopWatch() - logger.info("Parsing commands script") - with open(file, "r") as fh: - json_commands = json.load(fh) - stopwatch.log_elapsed(lambda x: logger.info(f"Script file read in {x}s")) - - commands: List[CommandDTO] = [ - CommandDTO.model_validate({"study_version": study_version, **command}) for command in json_commands - ] - stopwatch.log_elapsed(lambda x: logger.info(f"Script commands parsed in {x}s")) - - return commands - - -def generate_study( - commands_dir: Path, - study_id: Optional[str], - output: Optional[str] = None, - host: Optional[str] = None, - session: Optional[Client] = None, - study_version: StudyVersion = NEW_DEFAULT_STUDY_VERSION, -) -> GenerationResultInfoDTO: - """ - Generate a new study or update an existing study by applying commands. - - Args: - commands_dir: The directory containing the command file and input matrices. - study_id: The ID of the base study to use for generating the new study. - If `host` is provided, this is ignored. - output: The output directory where the new study will be generated. - If `study_id` and `host` are not provided, this must be specified. - host: The URL of the Antares server to use for generating the new study. - If `study_id` is not provided, this is ignored. - session: The session to use when connecting to the Antares server. - If `host` is not provided, this is ignored. - study_version: The target version of the generated study. - - Returns: - GenerationResultInfoDTO: A data transfer object containing information about the generation result. - """ - generator: Union[RemoteVariantGenerator, LocalVariantGenerator] - - if study_id is not None and host is not None and session is not None: - generator = RemoteVariantGenerator(study_id, host, session) - elif output is None: - raise TypeError("'output' must be set") - else: - output_dir = Path(output) - generator = LocalVariantGenerator(output_dir) - if not output_dir.exists(): - output_dir.mkdir(parents=True) - generator.render_template(study_version) - # Apply commands from the commands dir - matrix_dir: Path = commands_dir / MATRIX_STORE_DIR - command_file = commands_dir / COMMAND_FILE - if matrix_dir and not matrix_dir.exists(): - matrix_dir.mkdir() - if not command_file.exists(): - raise FileNotFoundError(f"Missing {COMMAND_FILE}") - commands = parse_commands(command_file, study_version) - return generator.apply_commands(commands, matrix_dir) diff --git a/docs/developer-guide/architecture/0-introduction.md b/docs/developer-guide/architecture/0-introduction.md index a8a280741c..00805f01a5 100644 --- a/docs/developer-guide/architecture/0-introduction.md +++ b/docs/developer-guide/architecture/0-introduction.md @@ -15,7 +15,6 @@ method of launching the main application : - gui.py : define the application run as a desktop application - archive_worker_service.py : define a worker that unzip study results on remote windows nodes (see the deployment diagram) - admin.py : define a cli app to run administrative tasks (used on production deployments) -- cli.py : define a cli app with various utilities ## Main packages and services diff --git a/docs/user-guide/3-variant_manager.md b/docs/user-guide/3-variant_manager.md index 8b8ceb4ed7..43f55ab448 100644 --- a/docs/user-guide/3-variant_manager.md +++ b/docs/user-guide/3-variant_manager.md @@ -403,16 +403,3 @@ Coming soon ### Composite commands Coming soon - -## CLI Tool - -The CLI tool (`AntaresTool`) is bundled -within [AntaresWeb releases](https://github.com/AntaresSimulatorTeam/AntaREST/releases). - -It provides 3 commands : - -- `apply-script` will modify a study using commands found in a directory that contain a file `commands.json` and an - optional folder named `matrices` which contains matrices used in the commands. -- `generate-script` will transform a study into a commands file and matrices directory -- `generate-script-diff` will take two commands file (and associated matrices directory) and will output a new one - consisting of the differences between the two variants \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 3b3b9a3849..1490a75793 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,7 +75,7 @@ line-length = 120 exclude = "(antares-?launcher/*|alembic/*)" [tool.coverage.run] -omit = ["antarest/tools/cli.py", "antarest/tools/admin.py", "antarest/fastapi_jwt_auth/*.py"] +omit = ["antarest/tools/admin.py", "antarest/fastapi_jwt_auth/*.py"] relative_files = true # avoids absolute path issues in CI [tool.isort] diff --git a/resources/antares-desktop-fs/README.md b/resources/antares-desktop-fs/README.md index 1562196e02..9800c85ef7 100644 --- a/resources/antares-desktop-fs/README.md +++ b/resources/antares-desktop-fs/README.md @@ -41,20 +41,3 @@ http://127.0.0.1:8080 ``` This will connect you to the Antares Web server. - -## Using the Variant Manager Tool - -To use the variant manager tool, run the command: - -``` -./AntaresWeb/AntaresTool -``` - -The tool has the following subcommands: - -- `apply-script`: Apply a variant script onto an AntaresWeb study variant -- `generate-script`: Generate variant script commands from a study -- `generate-script-diff`: Generate variant script commands from two variant script directories -- `upgrade-study`: Upgrades study version - -Further instructions can be found in the online help. Use the `--help` option. diff --git a/scripts/package_antares_web.sh b/scripts/package_antares_web.sh index c51f217f95..9c1f8c3035 100755 --- a/scripts/package_antares_web.sh +++ b/scripts/package_antares_web.sh @@ -86,9 +86,7 @@ if [[ "$OSTYPE" == "msys"* ]]; then cp "${RESOURCES_DIR}/AntaresWebServerShortcut.lnk" "${DIST_DIR}" else echo "INFO: Updating executable permissions..." - for excutable in "${DIST_DIR}/AntaresWeb/AntaresWebServer" "${DIST_DIR}/AntaresWeb/AntaresTool"; do - chmod +x "${excutable}" - done + chmod +x "${DIST_DIR}/AntaresWeb/AntaresWebServer" fi echo "INFO: Unzipping example study..." diff --git a/tests/integration/assets/base_study.zip b/tests/integration/assets/base_study.zip deleted file mode 100644 index 3b282beb1693044a666fc204fee083eb453c18ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 305876 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≶yk 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 diff --git a/tests/integration/assets/commands1.json b/tests/integration/assets/commands1.json deleted file mode 100644 index 8ce312b453..0000000000 --- a/tests/integration/assets/commands1.json +++ /dev/null @@ -1,146 +0,0 @@ -[ - { - "action": "create_area", - "args": [ - { - "area_name": "Area 1" - }, - { - "area_name": "Area2" - } - ] - }, - { - "action": "create_area", - "args": { - "area_name": "WEIRD" - } - }, - { - "action": "create_cluster", - "args": { - "area_id": "area 1", - "cluster_name": "gas cluster", - "parameters": { - "group": "Gas" - } - } - }, - { - "action": "create_cluster", - "args": { - "area_id": "area 1", - "cluster_name": "gas cluster 2", - "parameters": { - "group": "Gas", - "unitcount": 1, - "nominalcapacity": 500 - } - } - }, - { - "action": "create_cluster", - "args": { - "area_id": "area 1", - "cluster_name": "other", - "parameters": { - "group": "Other" - } - } - }, - { - "action": "create_cluster", - "args": { - "area_id": "area2", - "cluster_name": "TEST", - "parameters": { - "group": "Nuclear", - "unitcount": 1, - "nominalcapacity": 500 - } - } - }, - { - "action": "create_link", - "args": { - "area1": "area 1", - "area2": "area2", - "parameters": {} - } - }, - { - "action": "create_link", - "args": { - "area1": "area2", - "area2": "weird", - "parameters": {} - } - }, - { - "action": "create_binding_constraint", - "args": { - "name": "BD less hourly disabled", - "enabled": false, - "time_step": "hourly", - "operator": "less", - "coeffs": {} - } - }, - { - "action": "create_binding_constraint", - "args": { - "name": "BD less hourly no values", - "time_step": "hourly", - "operator": "less", - "coeffs": { - "area 1%area2": [500, 30] - } - } - }, - { - "action": "create_binding_constraint", - "args": { - "name": "BD less hourly", - "time_step": "hourly", - "operator": "less", - "coeffs": { - "area2%weird": [400] - } - } - }, - { - "action": "create_binding_constraint", - "args": { - "name": "BD less weekly", - "time_step": "weekly", - "operator": "less", - "coeffs": { - "area 1.gas cluster 2": [80] - } - } - }, - { - "action": "create_binding_constraint", - "args": { - "name": "BD both daily", - "time_step": "daily", - "operator": "both", - "coeffs": { - "area 1.other": [70], - "area2.test": [90] - } - } - }, - { - "action": "create_binding_constraint", - "args": { - "name": "BD equal hourly", - "time_step": "hourly", - "operator": "equal", - "coeffs": { - "area 1.other": [60], - "area2.test": [100] - } - } - } -] \ No newline at end of file diff --git a/tests/integration/assets/test_study.zip b/tests/integration/assets/test_study.zip deleted file mode 100644 index 8539204e2dfb2e7bb7488110f426d1cac8f51683..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170517 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%0DiW~H^NMFIZHzkZu@8rOCtet9T4{3Cw475hUU)c_ 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

    JT`>b1Vq1X$0{l5j8P8cr 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 y3hZfJ`f+TeIEd1B!EL- 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 LB+vuz#e)0~TkdBx diff --git a/tests/integration/assets/variant_study.zip b/tests/integration/assets/variant_study.zip deleted file mode 100644 index 4526fc900f0abdfa80347895cd8880f9fe986eb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 311282 zcmeEv1zeU%_cq-rodQaChk$fRhjcg6T?*2TfS`0EAV`S_A|)Y>w5X&sN{NE`-S>mR zt}Bba`|j)i`|<4FqV7I3XU<%6otQIoE1!df!-WDr&s2ESAiw$i3kDPgl)JIBwXwac zp^K}VnHQ^uIyw|0%z~V8lMs#hec*BPM1_KeI~USw4f#d+b6ZG|wqyt+!pwlSoPmev zyS60ET`ssfII>vVTYqgfq42`QTmPJi021wS`oK7ZWO4G8GM5sWFzQ&g1l^JptHq)7qqt;yubim>RjVqI=WX zkK%f~uYatn-if~a;fiJPMGbt`FQR|12HfvNx3+h5bN!}_=EIc%1vU34#S;IZMPp}k zW0(DQQ2{0YZM%P-u#<5_Fv}}?Cb~g8XYZ)(!z!%`G#K-(>&DQbUn%`z=0+h>AHE`W zyT}p~$BOz3I{GqYAA8m_SE+(GqS*@WsXZ)gRdWy?Dd<}D$hpm75E0^SLpp$uI&0dk zecp_*NsnU9LQ?t6u*XN%RDv&%*w=-toX(yupo?hWq5gYaxLF@X1CcDfQS-&hI)`%-omqQ&LjXh!DD+6Eha^6Ahlh@qhUW5u4-D3 zi@r0=pT$fb_J�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℞6=&5 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 str: - buffer = io.StringIO() - np.savetxt(buffer, array, delimiter="\t", fmt="%.6f") - return buffer.getvalue() - - -def generate_study_with_server( - client: TestClient, - name: str, - study_version: str, - commands: List[CommandDTO], - matrices_dir: Path, -) -> Tuple[GenerationResultInfoDTO, str]: - res = client.post("/v1/login", json={"username": "admin", "password": "admin"}) - admin_credentials = res.json() - base_study_res = client.post( - f"/v1/studies?name=foo&version={study_version}", - headers={"Authorization": f'Bearer {admin_credentials["access_token"]}'}, - ) - base_study_id = base_study_res.json() - res = client.post( - f"/v1/studies/{base_study_id}/variants?name={urllib.parse.quote_plus(name)}", - headers={"Authorization": f'Bearer {admin_credentials["access_token"]}'}, - ) - assert res.status_code == 200, res.json() - variant_id = res.json() - - set_auth_token(client, admin_credentials["access_token"]) - generator = RemoteVariantGenerator(variant_id, host="", session=client) - return generator.apply_commands(commands, matrices_dir), variant_id - - -def test_variant_manager(app: FastAPI, tmp_path: str) -> None: - client = TestClient(app, raise_server_exceptions=False) - study_version = STUDY_VERSION_7_2 - commands = parse_commands(ASSETS_DIR / "commands1.json", study_version) - matrix_dir = tmp_path / "empty_matrix_store" - matrix_dir.mkdir(parents=True, exist_ok=True) - res, study_id = generate_study_with_server(client, "test", f"{study_version:ddd}", commands, matrix_dir) - assert res is not None and res.success - - -def test_parse_commands(tmp_path: str, app: FastAPI) -> None: - export_path = tmp_path / "commands" - study = "base_study" - study_path = tmp_path / study - with ZipFile(ASSETS_DIR / "base_study.zip") as zip_output: - zip_output.extractall(path=tmp_path) - output_dir = Path(export_path) / study - study_info = IniReader().read(study_path / "study.antares") - version = study_info["antares"]["version"] - name = study_info["antares"]["caption"] - client = TestClient(app, raise_server_exceptions=False) - - extract_commands(study_path, output_dir) - study_version = StudyVersion.parse(version) - commands = [ - CommandDTO(action=CommandName.REMOVE_DISTRICT.value, args={"id": "all areas"}, study_version=study_version) - ] + parse_commands(output_dir / COMMAND_FILE, study_version) - res, study_id = generate_study_with_server(client, name, version, commands, output_dir / MATRIX_STORE_DIR) - assert res is not None and res.success - generated_study_path = tmp_path / "internal_workspace" / study_id / "snapshot" - assert generated_study_path.exists() and generated_study_path.is_dir() - - single_column_empty_items = [ - "input/load/series/load_hub w.txt", - "input/load/series/load_south.txt", - "input/load/series/load_hub n.txt", - "input/load/series/load_west.txt", - "input/load/series/load_north.txt", - "input/load/series/load_hub s.txt", - "input/load/series/load_hub e.txt", - "input/load/series/load_east.txt", - "input/wind/series/wind_east.txt", - "input/wind/series/wind_north.txt", - "input/wind/series/wind_hub n.txt", - "input/wind/series/wind_south.txt", - "input/wind/series/wind_hub w.txt", - "input/wind/series/wind_west.txt", - "input/wind/series/wind_hub e.txt", - "input/wind/series/wind_hub s.txt", - "input/solar/series/solar_east.txt", - "input/solar/series/solar_hub n.txt", - "input/solar/series/solar_south.txt", - "input/solar/series/solar_hub s.txt", - "input/solar/series/solar_north.txt", - "input/solar/series/solar_hub w.txt", - "input/solar/series/solar_hub e.txt", - "input/solar/series/solar_west.txt", - "input/thermal/series/west/semi base/series.txt", - "input/thermal/series/west/peak/series.txt", - "input/thermal/series/west/base/series.txt", - "input/thermal/series/north/semi base/series.txt", - "input/thermal/series/north/peak/series.txt", - "input/thermal/series/north/base/series.txt", - "input/thermal/series/east/semi base/series.txt", - "input/thermal/series/east/peak/series.txt", - "input/thermal/series/east/base/series.txt", - "input/thermal/series/south/semi base/series.txt", - "input/thermal/series/south/peak/series.txt", - "input/thermal/series/south/base/series.txt", - "input/hydro/series/hub e/ror.txt", - "input/hydro/series/south/ror.txt", - "input/hydro/series/hub w/ror.txt", - "input/hydro/series/hub s/ror.txt", - "input/hydro/series/west/ror.txt", - "input/hydro/series/hub n/ror.txt", - "input/hydro/series/north/ror.txt", - "input/hydro/series/east/ror.txt", - ] - single_column_daily_empty_items = [ - "input/hydro/series/hub e/mod.txt", - "input/hydro/series/south/mod.txt", - "input/hydro/series/hub w/mod.txt", - "input/hydro/series/hub s/mod.txt", - "input/hydro/series/west/mod.txt", - "input/hydro/series/hub n/mod.txt", - "input/hydro/series/north/mod.txt", - "input/hydro/series/east/mod.txt", - ] - fixed_3_cols_hourly_empty_items = [ - "input/bindingconstraints/northern mesh.txt", - "input/bindingconstraints/southern mesh.txt", - ] - fixed_4_cols_empty_items = [ - "input/reserves/hub s.txt", - "input/reserves/hub n.txt", - "input/reserves/hub w.txt", - "input/reserves/hub e.txt", - ] - fixed_8_cols_empty_items = [ - "input/misc-gen/miscgen-hub w.txt", - "input/misc-gen/miscgen-hub e.txt", - "input/misc-gen/miscgen-hub s.txt", - "input/misc-gen/miscgen-hub n.txt", - ] - single_column_empty_data = generate_csv_string(np.zeros((8760, 1), dtype=np.float64)) - single_column_daily_empty_data = generate_csv_string(np.zeros((365, 1), dtype=np.float64)) - fixed_3_cols_hourly_empty_data = generate_csv_string(np.zeros(shape=(8760, 3), dtype=np.float64)) - fixed_4_columns_empty_data = generate_csv_string(np.zeros((8760, 4), dtype=np.float64)) - fixed_8_columns_empty_data = generate_csv_string(np.zeros((8760, 8), dtype=np.float64)) - for file_path in study_path.rglob("*"): - if file_path.is_dir() or file_path.name in ["comments.txt", "study.antares", "Desktop.ini", "study.ico"]: - continue - item_relpath = file_path.relative_to(study_path).as_posix() - if item_relpath in single_column_empty_items: - assert (generated_study_path / item_relpath).read_text() == single_column_empty_data - elif item_relpath in single_column_daily_empty_items: - assert (generated_study_path / item_relpath).read_text() == single_column_daily_empty_data - elif item_relpath in fixed_3_cols_hourly_empty_items: - assert (generated_study_path / item_relpath).read_text() == fixed_3_cols_hourly_empty_data - elif item_relpath in fixed_4_cols_empty_items: - assert (generated_study_path / item_relpath).read_text() == fixed_4_columns_empty_data - elif item_relpath in fixed_8_cols_empty_items: - assert (generated_study_path / item_relpath).read_text() == fixed_8_columns_empty_data - elif file_path.suffix == ".ini": - actual = IniReader().read(study_path / item_relpath) - expected = IniReader().read(generated_study_path / item_relpath) - assert actual == expected, f"Invalid configuration: '{item_relpath}'" - else: - actual = (study_path / item_relpath).read_text() - expected = (generated_study_path / item_relpath).read_text() - assert actual.strip() == expected.strip() - - -def test_diff_local(tmp_path: Path) -> None: - export_path = tmp_path / "generation_result" - base_study = "base_study" - variant_study = "variant_study" - output_study_commands = export_path / "output_study_commands" - output_study_path = tmp_path / base_study - base_study_commands = export_path / base_study - variant_study_commands = export_path / variant_study - variant_study_path = tmp_path / variant_study - - for study in [base_study, variant_study]: - with ZipFile(ASSETS_DIR / f"{study}.zip") as zip_output: - zip_output.extractall(path=tmp_path) - extract_commands(tmp_path / study, export_path / study) - - generate_study(base_study_commands, None, str(export_path / "base_generated")) - generate_study( - variant_study_commands, - None, - str(export_path / "variant_generated"), - ) - generate_diff(base_study_commands, variant_study_commands, output_study_commands) - res = generate_study(output_study_commands, None, output=str(output_study_path)) - assert res.success - - assert output_study_path.exists() and output_study_path.is_dir() - for file_path in variant_study_path.rglob("*"): - if file_path.is_dir() or file_path.name in ["comments.txt", "study.antares", "Desktop.ini", "study.ico"]: - continue - item_relpath = file_path.relative_to(variant_study_path).as_posix() - if file_path.suffix == ".ini": - actual = IniReader().read(variant_study_path / item_relpath) - expected = IniReader().read(output_study_path / item_relpath) - assert actual == expected, f"Invalid configuration: '{item_relpath}'" - else: - actual = (variant_study_path / item_relpath).read_text() - expected = (output_study_path / item_relpath).read_text() - assert actual.strip() == expected.strip() diff --git a/tests/variantstudy/model/command/test_create_area.py b/tests/variantstudy/model/command/test_create_area.py index 8e6de24779..0e18ae209d 100644 --- a/tests/variantstudy/model/command/test_create_area.py +++ b/tests/variantstudy/model/command/test_create_area.py @@ -20,7 +20,6 @@ from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.icommand import ICommand from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea @@ -170,30 +169,3 @@ def test_apply( ) output = create_area_command.apply(study_data=empty_study) assert not output.status - - -def test_match(command_context: CommandContext) -> None: - base = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_not_match = CreateArea(area_name="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "create_area%foo" - assert base.get_inner_matrices() == [] - - -def test_revert(command_context: CommandContext) -> None: - base = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - file_study = Mock(spec=FileStudy) - file_study.config.version = STUDY_VERSION_8_8 - actual = CommandReverter().revert(base, [], file_study) - assert actual == [RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8)] - - -def test_create_diff(command_context: CommandContext) -> None: - base = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = CreateArea(area_name="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_create_cluster.py b/tests/variantstudy/model/command/test_create_cluster.py index bdd4e9feea..9a05a29d89 100644 --- a/tests/variantstudy/model/command/test_create_cluster.py +++ b/tests/variantstudy/model/command/test_create_cluster.py @@ -21,13 +21,10 @@ from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.common import CommandName from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster from antarest.study.storage.variantstudy.model.command.remove_cluster import RemoveCluster -from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix -from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command_context import CommandContext GEN = np.random.default_rng(1000) @@ -205,114 +202,3 @@ def test_to_dto(self, command_context: CommandContext): "user_id": None, "updated_at": None, } - - -def test_match(command_context: CommandContext): - prepro = GEN.random((365, 6)).tolist() - modulation = GEN.random((8760, 4)).tolist() - base = CreateCluster( - area_id="foo", - cluster_name="foo", - parameters={}, - prepro=prepro, - modulation=modulation, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_match = CreateCluster( - area_id="foo", - cluster_name="foo", - parameters={}, - prepro=prepro, - modulation=modulation, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_not_match = CreateCluster( - area_id="foo", - cluster_name="bar", - parameters={}, - prepro=prepro, - modulation=modulation, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_other = RemoveCluster( - area_id="id", cluster_id="id", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - - assert base.match(other_match, equal=True) - assert not base.match(other_not_match, equal=True) - assert not base.match(other_other, equal=True) - - assert base.match_signature() == "create_cluster%foo%foo" - - # check the matrices links - prepro_id = command_context.matrix_service.create(prepro) - modulation_id = command_context.matrix_service.create(modulation) - assert base.get_inner_matrices() == [prepro_id, modulation_id] - - -def test_revert(command_context: CommandContext): - base = CreateCluster( - area_id="foo", - cluster_name="foo", - parameters={}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - file_study = Mock(spec=FileStudy) - file_study.config.version = STUDY_VERSION_8_8 - assert CommandReverter().revert(base, [], file_study) == [ - RemoveCluster(area_id="foo", cluster_id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - ] - - -def test_create_diff(command_context: CommandContext): - prepro_a = GEN.random((365, 6)).tolist() - modulation_a = GEN.random((8760, 4)).tolist() - base = CreateCluster( - area_id="foo", - cluster_name="foo", - parameters={}, - prepro=prepro_a, - modulation=modulation_a, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - - prepro_b = GEN.random((365, 6)).tolist() - modulation_b = GEN.random((8760, 4)).tolist() - other_match = CreateCluster( - area_id="foo", - cluster_name="foo", - parameters={"nominalcapacity": "2400"}, - prepro=prepro_b, - modulation=modulation_b, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - - assert base.create_diff(other_match) == [ - ReplaceMatrix( - target="input/thermal/prepro/foo/foo/data", - matrix=prepro_b, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - ReplaceMatrix( - target="input/thermal/prepro/foo/foo/modulation", - matrix=modulation_b, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - UpdateConfig( - target="input/thermal/clusters/foo/list/foo", - data={"nominalcapacity": "2400"}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - ] diff --git a/tests/variantstudy/model/command/test_create_link.py b/tests/variantstudy/model/command/test_create_link.py index aa147e2df9..c21ee76197 100644 --- a/tests/variantstudy/model/command/test_create_link.py +++ b/tests/variantstudy/model/command/test_create_link.py @@ -10,27 +10,20 @@ # # This file is part of the Antares project. -import configparser from unittest.mock import Mock -import numpy as np import pytest from pydantic import ValidationError from antarest.core.exceptions import LinkValidationError -from antarest.study.business.link_management import LinkInternal from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_link import CreateLink from antarest.study.storage.variantstudy.model.command.icommand import ICommand -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink -from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix -from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -218,68 +211,3 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): study_version=study_version, ).apply(empty_study) assert not output.status - - -def test_match(command_context: CommandContext): - base = CreateLink( - area1="foo", area2="bar", series=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_match = CreateLink( - area1="foo", area2="bar", series=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_not_match = CreateLink( - area1="foo", area2="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "create_link%foo%bar" - # check the matrices links - matrix_id = command_context.matrix_service.create([[0]]) - assert base.get_inner_matrices() == [matrix_id] - - -def test_revert(command_context: CommandContext): - base = CreateLink( - area1="foo", area2="bar", series=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - file_study = Mock(spec=FileStudy) - file_study.config.version = STUDY_VERSION_8_8 - assert CommandReverter().revert(base, [], file_study) == [ - RemoveLink(area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) - ] - - -def test_create_diff(command_context: CommandContext): - series_a = np.random.rand(8760, 8).tolist() - base = CreateLink( - area1="foo", area2="bar", series=series_a, command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - - series_b = np.random.rand(8760, 8).tolist() - other_match = CreateLink( - area1="foo", - area2="bar", - parameters={"hurdles_cost": "true"}, - series=series_b, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - - assert base.create_diff(other_match) == [ - UpdateConfig( - target="input/links/bar/properties/foo", - data=LinkInternal.model_validate({"area1": "bar", "area2": "foo", "hurdles_cost": "true"}).model_dump( - by_alias=True, exclude_none=True, exclude={"area1", "area2"} - ), - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - ReplaceMatrix( - target="@links_series/bar/foo", - matrix=series_b, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - ] diff --git a/tests/variantstudy/model/command/test_create_renewables_cluster.py b/tests/variantstudy/model/command/test_create_renewables_cluster.py index 9919212a42..f551721d72 100644 --- a/tests/variantstudy/model/command/test_create_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_create_renewables_cluster.py @@ -20,12 +20,10 @@ from antarest.study.model import STUDY_VERSION_8_1, STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.common import CommandName from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_renewables_cluster import CreateRenewablesCluster from antarest.study.storage.variantstudy.model.command.remove_renewables_cluster import RemoveRenewablesCluster -from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -158,83 +156,3 @@ def test_to_dto(self, command_context: CommandContext) -> None: "updated_at": None, "user_id": None, } - - -def test_match(command_context: CommandContext) -> None: - base = CreateRenewablesCluster( - area_id="foo", - cluster_name="foo", - parameters={}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_match = CreateRenewablesCluster( - area_id="foo", - cluster_name="foo", - parameters={}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_not_match = CreateRenewablesCluster( - area_id="foo", - cluster_name="bar", - parameters={}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_other = RemoveRenewablesCluster( - area_id="id", cluster_id="id", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - - assert base.match(other_match, equal=True) - assert not base.match(other_not_match, equal=True) - assert not base.match(other_other, equal=True) - - assert base.match_signature() == "create_renewables_cluster%foo%foo" - assert base.get_inner_matrices() == [] - - -def test_revert(command_context: CommandContext) -> None: - base = CreateRenewablesCluster( - area_id="area_foo", - cluster_name="cl1", - parameters={}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - file_study = mock.MagicMock(spec=FileStudy) - file_study.config.version = STUDY_VERSION_8_8 - revert_cmd = CommandReverter().revert(base, [], file_study) - assert revert_cmd == [ - RemoveRenewablesCluster( - area_id="area_foo", cluster_id="cl1", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - ] - - -def test_create_diff(command_context: CommandContext) -> None: - base = CreateRenewablesCluster( - area_id="foo", - cluster_name="foo", - parameters={}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_match = CreateRenewablesCluster( - area_id="foo", - cluster_name="foo", - parameters={"a": "b"}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - assert base.create_diff(other_match) == [ - UpdateConfig( - target="input/renewables/clusters/foo/list/foo", - data={"a": "b"}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - ] diff --git a/tests/variantstudy/model/command/test_create_st_storage.py b/tests/variantstudy/model/command/test_create_st_storage.py index ba47d59da5..32ab04ec5a 100644 --- a/tests/variantstudy/model/command/test_create_st_storage.py +++ b/tests/variantstudy/model/command/test_create_st_storage.py @@ -25,8 +25,6 @@ from antarest.study.storage.variantstudy.model.command.common import CommandName from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_st_storage import REQUIRED_VERSION, CreateSTStorage -from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix -from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command_context import CommandContext from antarest.study.storage.variantstudy.model.model import CommandDTO @@ -397,101 +395,6 @@ def test_to_dto(self, command_context: CommandContext): study_version=STUDY_VERSION_8_8, ) - def test_match_signature(self, command_context: CommandContext): - cmd = CreateSTStorage( - command_context=command_context, - area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), - study_version=STUDY_VERSION_8_8, - ) - assert cmd.match_signature() == "create_st_storage%area_fr%storage1" - - @pytest.mark.parametrize("area_id", ["area_fr", "area_en"]) - @pytest.mark.parametrize("parameters", [PARAMETERS, OTHER_PARAMETERS]) - def test_match( - self, - command_context: CommandContext, - area_id, - parameters, - ): - cmd1 = CreateSTStorage( - command_context=command_context, - area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), - study_version=STUDY_VERSION_8_8, - ) - cmd2 = CreateSTStorage( - command_context=command_context, - area_id=area_id, - parameters=STStorageConfig(**parameters), - study_version=STUDY_VERSION_8_8, - ) - light_equal = area_id == cmd1.area_id and parameters["name"] == cmd1.storage_name - assert cmd1.match(cmd2, equal=False) == light_equal - deep_equal = area_id == cmd1.area_id and parameters == PARAMETERS - assert cmd1.match(cmd2, equal=True) == deep_equal - - def test_match__unknown_type(self, command_context: CommandContext): - cmd1 = CreateSTStorage( - command_context=command_context, - area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), - study_version=STUDY_VERSION_8_8, - ) - # Always `False` when compared to another object type - assert cmd1.match(..., equal=False) is False - assert cmd1.match(..., equal=True) is False - - def test_create_diff__not_equals(self, command_context: CommandContext): - cmd = CreateSTStorage( - command_context=command_context, - area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), - study_version=STUDY_VERSION_8_8, - ) - upper_rule_curve = GEN.random((8760, 1)) - inflows = GEN.uniform(0, 1000, size=(8760, 1)) - other = CreateSTStorage( - command_context=command_context, - area_id=cmd.area_id, - parameters=STStorageConfig(**OTHER_PARAMETERS), - upper_rule_curve=upper_rule_curve.tolist(), # type: ignore - inflows=inflows.tolist(), # type: ignore - study_version=STUDY_VERSION_8_8, - ) - actual = cmd.create_diff(other) - expected = [ - ReplaceMatrix( - command_context=command_context, - target="input/st-storage/series/area_fr/storage1/upper_rule_curve", - matrix=strip_matrix_protocol(other.upper_rule_curve), - study_version=STUDY_VERSION_8_8, - ), - ReplaceMatrix( - command_context=command_context, - target="input/st-storage/series/area_fr/storage1/inflows", - matrix=strip_matrix_protocol(other.inflows), - study_version=STUDY_VERSION_8_8, - ), - UpdateConfig( - command_context=command_context, - target="input/st-storage/clusters/area_fr/list/storage1", - data=OTHER_PARAMETERS, - study_version=STUDY_VERSION_8_8, - ), - ] - assert actual == expected - - def test_create_diff__equals(self, command_context: CommandContext): - cmd = CreateSTStorage( - command_context=command_context, - area_id="area_fr", - parameters=STStorageConfig(**PARAMETERS), - study_version=STUDY_VERSION_8_8, - ) - actual = cmd.create_diff(cmd) - assert not actual - def test_get_inner_matrices(self, command_context: CommandContext): cmd = CreateSTStorage( command_context=command_context, diff --git a/tests/variantstudy/model/command/test_manage_binding_constraints.py b/tests/variantstudy/model/command/test_manage_binding_constraints.py index 3751c9f865..aabfba93c4 100644 --- a/tests/variantstudy/model/command/test_manage_binding_constraints.py +++ b/tests/variantstudy/model/command/test_manage_binding_constraints.py @@ -12,7 +12,6 @@ from unittest.mock import Mock -import numpy as np import pytest from antarest.study.model import STUDY_VERSION_8_8 @@ -23,8 +22,6 @@ ) from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_extractor import CommandExtractor -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.business.matrix_constants.binding_constraint.series_after_v87 import ( default_bc_weekly_daily as default_bc_weekly_daily_870, ) @@ -36,9 +33,7 @@ from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster from antarest.study.storage.variantstudy.model.command.create_link import CreateLink -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.remove_binding_constraint import RemoveBindingConstraint -from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink from antarest.study.storage.variantstudy.model.command.update_binding_constraint import ( UpdateBindingConstraint, update_matrices_names, @@ -288,282 +283,6 @@ def test_scenario_builder(empty_study: FileStudy, command_context: CommandContex assert rulesets == {"Default Ruleset": {}} -def test_match(command_context: CommandContext): - values = default_bc_weekly_daily.tolist() - base = CreateBindingConstraint( - name="foo", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_match = CreateBindingConstraint( - name="foo", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_not_match = CreateBindingConstraint( - name="bar", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "create_binding_constraint%foo" - # check the matrices links - matrix_id = command_context.matrix_service.create(values) - assert base.get_inner_matrices() == [matrix_id] - - base = UpdateBindingConstraint( - id="foo", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_match = UpdateBindingConstraint( - id="foo", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_not_match = UpdateBindingConstraint( - id="bar", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "update_binding_constraint%foo" - # check the matrices links - matrix_id = command_context.matrix_service.create(values) - assert base.get_inner_matrices() == [matrix_id] - - base = RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_not_match = RemoveBindingConstraint( - id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_other = RemoveLink(area1="id", area2="id2", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "remove_binding_constraint%foo" - assert base.get_inner_matrices() == [] - - -def test_revert(command_context: CommandContext): - hourly_values = default_bc_hourly.tolist() - daily_values = default_bc_weekly_daily.tolist() - weekly_values = default_bc_weekly_daily.tolist() - file_study = Mock(spec=FileStudy) - file_study.config.version = STUDY_VERSION_8_8 - base = CreateBindingConstraint( - name="foo", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=daily_values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - assert CommandReverter().revert(base, [], file_study) == [ - RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - ] - - base = UpdateBindingConstraint( - id="foo", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=daily_values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - mock_command_extractor = Mock(spec=CommandExtractor) - object.__setattr__( - base, - "get_command_extractor", - Mock(return_value=mock_command_extractor), - ) - assert CommandReverter().revert( - base, - [ - UpdateBindingConstraint( - id="foo", - enabled=True, - time_step=BindingConstraintFrequency.WEEKLY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=weekly_values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - UpdateBindingConstraint( - id="foo", - enabled=True, - time_step=BindingConstraintFrequency.HOURLY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=hourly_values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - ], - file_study, - ) == [ - UpdateBindingConstraint( - id="foo", - enabled=True, - time_step=BindingConstraintFrequency.HOURLY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=hourly_values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - ] - # check the matrices links - hourly_matrix_id = command_context.matrix_service.create(hourly_values) - assert CommandReverter().revert( - base, - [ - UpdateBindingConstraint( - id="foo", - enabled=True, - time_step=BindingConstraintFrequency.WEEKLY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=weekly_values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - CreateBindingConstraint( - name="foo", - enabled=True, - time_step=BindingConstraintFrequency.HOURLY, - operator=BindingConstraintOperator.EQUAL, - coeffs={"a": [0.3]}, - values=hourly_values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ), - ], - file_study, - ) == [ - UpdateBindingConstraint( - id="foo", - enabled=True, - time_step=BindingConstraintFrequency.HOURLY, - operator=BindingConstraintOperator.EQUAL, - filter_year_by_year="", - filter_synthesis="", - coeffs={"a": [0.3]}, - values=hourly_matrix_id, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - ] - study = FileStudy(config=Mock(), tree=Mock()) - CommandReverter().revert(base, [], study) - mock_command_extractor.extract_binding_constraint.assert_called_with(study, "foo") - - -def test_create_diff(command_context: CommandContext): - values_a = np.random.rand(366, 3).tolist() - base = CreateBindingConstraint( - name="foo", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=values_a, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - - values_b = np.random.rand(8784, 3).tolist() - matrix_b_id = command_context.matrix_service.create(values_b) - other_match = CreateBindingConstraint( - name="foo", - enabled=True, - time_step=BindingConstraintFrequency.HOURLY, - operator=BindingConstraintOperator.EQUAL, - coeffs={"b": [0.3]}, - values=matrix_b_id, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - assert base.create_diff(other_match) == [ - UpdateBindingConstraint( - id="foo", - enabled=True, - time_step=BindingConstraintFrequency.HOURLY, - operator=BindingConstraintOperator.EQUAL, - coeffs={"b": [0.3]}, - values=matrix_b_id, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - ] - - values = default_bc_weekly_daily.tolist() - base = UpdateBindingConstraint( - id="foo", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_match = UpdateBindingConstraint( - id="foo", - enabled=False, - time_step=BindingConstraintFrequency.DAILY, - operator=BindingConstraintOperator.BOTH, - coeffs={"a": [0.3]}, - values=values, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - assert base.create_diff(other_match) == [other_match] - - base = RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = RemoveBindingConstraint(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.create_diff(other_match) == [] - - @pytest.mark.parametrize( "existing_operator, new_operator", [ diff --git a/tests/variantstudy/model/command/test_manage_district.py b/tests/variantstudy/model/command/test_manage_district.py index b99d2ac380..5aa642977a 100644 --- a/tests/variantstudy/model/command/test_manage_district.py +++ b/tests/variantstudy/model/command/test_manage_district.py @@ -16,13 +16,10 @@ from antarest.study.storage.rawstudy.model.filesystem.config.files import build from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_district import CreateDistrict, DistrictBaseFilter from antarest.study.storage.variantstudy.model.command.icommand import ICommand -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.remove_district import RemoveDistrict -from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command.update_district import UpdateDistrict from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -129,87 +126,3 @@ def test_manage_district(empty_study: FileStudy, command_context: CommandContext assert remove_output_d3.status sets_config = IniReader(["+", "-"]).read(empty_study.config.study_path / "input/areas/sets.ini") assert len(sets_config.keys()) == 3 - - -def test_match(command_context: CommandContext): - base = CreateDistrict( - name="foo", - base_filter=DistrictBaseFilter.add_all, - filter_items=["a", "b"], - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_match = CreateDistrict( - name="foo", - base_filter=DistrictBaseFilter.add_all, - filter_items=["a", "b"], - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_not_match = CreateDistrict(name="foo2", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match, True) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "create_district%foo" - assert base.get_inner_matrices() == [] - - base = RemoveDistrict(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = RemoveDistrict(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_not_match = RemoveDistrict(id="id2", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match, True) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "remove_district%id" - assert base.get_inner_matrices() == [] - - -def test_revert(command_context: CommandContext): - base = CreateDistrict( - name="foo", - base_filter=DistrictBaseFilter.add_all, - filter_items=["a", "b"], - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - file_study = Mock(spec=FileStudy) - file_study.config.version = STUDY_VERSION_8_8 - assert CommandReverter().revert(base, [], file_study) == [ - RemoveDistrict(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - ] - - -def test_create_diff(command_context: CommandContext): - base = CreateDistrict( - name="foo", - base_filter=DistrictBaseFilter.add_all, - filter_items=["a", "b"], - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - other_match = CreateDistrict( - name="foo", - base_filter=DistrictBaseFilter.remove_all, - filter_items=["c"], - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - assert base.create_diff(other_match) == [ - UpdateConfig( - target="input/areas/sets/foo", - data={ - "caption": "foo", - "apply-filter": DistrictBaseFilter.remove_all.value, - "+": ["c"], - "output": True, - "comments": "", - }, - command_context=command_context, - study_version=STUDY_VERSION_8_8, - ) - ] - - base = RemoveDistrict(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = RemoveDistrict(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_area.py b/tests/variantstudy/model/command/test_remove_area.py index 468b468e69..a29cd693ec 100644 --- a/tests/variantstudy/model/command/test_remove_area.py +++ b/tests/variantstudy/model/command/test_remove_area.py @@ -29,7 +29,6 @@ from antarest.study.storage.variantstudy.model.command.icommand import ICommand from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.remove_district import RemoveDistrict -from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command.update_scenario_builder import UpdateScenarioBuilder from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -242,21 +241,3 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): actual_cfg = empty_study.tree.get(depth=999) assert actual_cfg == empty_study_cfg - - -def test_match(command_context: CommandContext): - base = RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_not_match = RemoveArea(id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_other = RemoveLink(area1="id", area2="id2", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "remove_area%foo" - assert base.get_inner_matrices() == [] - - -def test_create_diff(command_context: CommandContext): - base = RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = RemoveArea(id="foo", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_cluster.py b/tests/variantstudy/model/command/test_remove_cluster.py index 2b30616a0a..266cf63a86 100644 --- a/tests/variantstudy/model/command/test_remove_cluster.py +++ b/tests/variantstudy/model/command/test_remove_cluster.py @@ -14,7 +14,6 @@ import pytest from checksumdir import dirhash -from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.binding_constraint import ( BindingConstraintFrequency, BindingConstraintOperator, @@ -24,7 +23,6 @@ from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_binding_constraint import CreateBindingConstraint from antarest.study.storage.variantstudy.model.command.create_cluster import CreateCluster -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.remove_cluster import RemoveCluster from antarest.study.storage.variantstudy.model.command.update_scenario_builder import UpdateScenarioBuilder from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -123,31 +121,3 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> study_version=study_version, ).apply(empty_study) assert not output.status - - -def test_match(command_context: CommandContext) -> None: - base = RemoveCluster( - area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_match = RemoveCluster( - area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_not_match = RemoveCluster( - area_id="foo", cluster_id="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "remove_cluster%bar%foo" - assert base.get_inner_matrices() == [] - - -def test_create_diff(command_context: CommandContext) -> None: - base = RemoveCluster( - area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_match = RemoveCluster( - area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_link.py b/tests/variantstudy/model/command/test_remove_link.py index 832d8db20b..e65934738f 100644 --- a/tests/variantstudy/model/command/test_remove_link.py +++ b/tests/variantstudy/model/command/test_remove_link.py @@ -28,7 +28,6 @@ from antarest.study.storage.rawstudy.model.filesystem.root.filestudytree import FileStudyTree from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_link import CreateLink -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.remove_link import RemoveLink from antarest.study.storage.variantstudy.model.command.update_scenario_builder import UpdateScenarioBuilder from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -145,25 +144,3 @@ def test_apply(self, tmpdir: Path, command_context: CommandContext, version: int assert output.status, output.message assert dirhash(empty_study.config.study_path, "md5") == hash_before_removal - - def test_match(self, command_context: CommandContext) -> None: - base = RemoveLink(area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = RemoveLink( - area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_not_match = RemoveLink( - area1="foo", area2="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "remove_link%bar%foo" # alphabetical order - assert base.get_inner_matrices() == [] - - def test_create_diff(self, command_context: CommandContext) -> None: - base = RemoveLink(area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = RemoveLink( - area1="foo", area2="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_renewables_cluster.py b/tests/variantstudy/model/command/test_remove_renewables_cluster.py index c2152a08b3..c5bba2a4d7 100644 --- a/tests/variantstudy/model/command/test_remove_renewables_cluster.py +++ b/tests/variantstudy/model/command/test_remove_renewables_cluster.py @@ -12,12 +12,10 @@ from antares.study.version import StudyVersion from checksumdir import dirhash -from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import EnrModelling, transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy from antarest.study.storage.variantstudy.model.command.create_area import CreateArea from antarest.study.storage.variantstudy.model.command.create_renewables_cluster import CreateRenewablesCluster -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.remove_renewables_cluster import RemoveRenewablesCluster from antarest.study.storage.variantstudy.model.command.update_scenario_builder import UpdateScenarioBuilder from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -86,31 +84,3 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext) -> study_version=study_version, ).apply(empty_study) assert not output.status - - -def test_match(command_context: CommandContext) -> None: - base = RemoveRenewablesCluster( - area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_match = RemoveRenewablesCluster( - area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_not_match = RemoveRenewablesCluster( - area_id="foo", cluster_id="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "remove_renewables_cluster%bar%foo" - assert base.get_inner_matrices() == [] - - -def test_create_diff(command_context: CommandContext) -> None: - base = RemoveRenewablesCluster( - area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_match = RemoveRenewablesCluster( - area_id="foo", cluster_id="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - assert base.create_diff(other_match) == [] diff --git a/tests/variantstudy/model/command/test_remove_st_storage.py b/tests/variantstudy/model/command/test_remove_st_storage.py index 01c74235dd..d416391464 100644 --- a/tests/variantstudy/model/command/test_remove_st_storage.py +++ b/tests/variantstudy/model/command/test_remove_st_storage.py @@ -197,43 +197,6 @@ def test_to_dto(self, command_context: CommandContext): study_version=STUDY_VERSION_8_8, ) - def test_match_signature(self, command_context: CommandContext): - cmd = RemoveSTStorage( - command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 - ) - assert cmd.match_signature() == "remove_st_storage%area_fr%storage_1" - - @pytest.mark.parametrize("area_id", ["area_fr", "area_en"]) - @pytest.mark.parametrize("storage_id", ["storage_1", "storage_2"]) - def test_match( - self, - command_context: CommandContext, - area_id, - storage_id, - ): - cmd1 = RemoveSTStorage( - command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 - ) - cmd2 = RemoveSTStorage( - command_context=command_context, area_id=area_id, storage_id=storage_id, study_version=STUDY_VERSION_8_8 - ) - is_equal = area_id == cmd1.area_id and storage_id == cmd1.storage_id - assert cmd1.match(cmd2, equal=False) == is_equal - assert cmd1.match(cmd2, equal=True) == is_equal - - def test_create_diff(self, command_context: CommandContext): - cmd = RemoveSTStorage( - command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 - ) - other = RemoveSTStorage( - command_context=command_context, - area_id=cmd.area_id, - storage_id=cmd.storage_id, - study_version=STUDY_VERSION_8_8, - ) - actual = cmd.create_diff(other) - assert not actual - def test_get_inner_matrices(self, command_context: CommandContext): cmd = RemoveSTStorage( command_context=command_context, area_id="area_fr", storage_id="storage_1", study_version=STUDY_VERSION_8_8 diff --git a/tests/variantstudy/model/command/test_replace_matrix.py b/tests/variantstudy/model/command/test_replace_matrix.py index 5f676ded29..d54ba755e2 100644 --- a/tests/variantstudy/model/command/test_replace_matrix.py +++ b/tests/variantstudy/model/command/test_replace_matrix.py @@ -17,9 +17,7 @@ from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.replace_matrix import ReplaceMatrix from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -66,55 +64,3 @@ def test_apply(self, empty_study: FileStudy, command_context: CommandContext): ) output = replace_matrix.apply(empty_study) assert not output.status - - -def test_match(command_context: CommandContext): - base = ReplaceMatrix(target="foo", matrix=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = ReplaceMatrix( - target="foo", matrix=[[1]], command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_not_match = ReplaceMatrix( - target="bar", matrix=[[0]], command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "replace_matrix%foo" - # check the matrices links - matrix_id = command_context.matrix_service.create([[0]]) - assert base.get_inner_matrices() == [matrix_id] - - -@patch("antarest.study.storage.variantstudy.business.command_extractor.CommandExtractor.generate_replace_matrix") -def test_revert(mock_generate_replace_matrix, command_context: CommandContext): - matrix_a = np.random.rand(5, 2).tolist() - base = ReplaceMatrix( - target="foo", matrix=matrix_a, command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - study = FileStudy(config=Mock(), tree=Mock()) - CommandReverter().revert(base, [], study) - mock_generate_replace_matrix.assert_called_with(study.tree, ["foo"]) - assert CommandReverter().revert( - base, - [ - ReplaceMatrix( - target="foo", matrix=matrix_a, command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - ], - study, - ) == [ - ReplaceMatrix(target="foo", matrix=matrix_a, command_context=command_context, study_version=STUDY_VERSION_8_8) - ] - - -def test_create_diff(command_context: CommandContext): - matrix_a = np.random.rand(5, 2).tolist() - base = ReplaceMatrix( - target="foo", matrix=matrix_a, command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - matrix_b = np.random.rand(5, 2).tolist() - other_match = ReplaceMatrix( - target="foo", matrix=matrix_b, command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - assert base.create_diff(other_match) == [other_match] diff --git a/tests/variantstudy/model/command/test_update_comments.py b/tests/variantstudy/model/command/test_update_comments.py index 0bdb91e307..c5581284f3 100644 --- a/tests/variantstudy/model/command/test_update_comments.py +++ b/tests/variantstudy/model/command/test_update_comments.py @@ -14,11 +14,7 @@ import pytest -from antarest.study.model import STUDY_VERSION_8_8 from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_extractor import CommandExtractor -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.update_comments import UpdateComments from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -39,61 +35,3 @@ def test_update_comments(empty_study: FileStudy, command_context: CommandContext file_comments = file.read() assert comments == file_comments - - -def test_match(command_context: CommandContext): - base = UpdateComments(comments="comments", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = UpdateComments(comments="comments", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_not_match = UpdateComments( - comments="other_comments", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match, equal=True) - assert not base.match(other_other) - assert base.match_signature() == "update_comments" - - -def test_revert( - command_context: CommandContext, - empty_study: FileStudy, -): - mock_command_extractor = Mock(spec=CommandExtractor) - mock_command_extractor.command_context = command_context - mock_command_extractor.generate_update_comments.side_effect = lambda x: CommandExtractor.generate_update_comments( - mock_command_extractor, x - ) - study_version = empty_study.config.version - base_command = UpdateComments(comments="comments", command_context=command_context, study_version=study_version) - - object.__setattr__( - base_command, - "get_command_extractor", - Mock(return_value=mock_command_extractor), - ) - - CommandReverter().revert(base_command, [], empty_study) - mock_command_extractor.generate_update_comments.assert_called_with(empty_study.tree) - assert CommandReverter().revert( - base_command, - [UpdateComments(comments="comments", command_context=command_context, study_version=study_version)], - empty_study, - ) == [UpdateComments(comments="comments", command_context=command_context, study_version=study_version)] - assert CommandReverter().revert(base_command, [], base=empty_study) == [ - UpdateComments( - comments='\n\n \n \n ' - "\n \n \n\n", - command_context=command_context, - study_version=study_version, - ) - ] - - -def test_create_diff(command_context: CommandContext): - base = UpdateComments(comments="comments", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = UpdateComments(comments="comments", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.create_diff(other_match) == [other_match] diff --git a/tests/variantstudy/model/command/test_update_config.py b/tests/variantstudy/model/command/test_update_config.py index 1857602cb2..6e90bcf4c1 100644 --- a/tests/variantstudy/model/command/test_update_config.py +++ b/tests/variantstudy/model/command/test_update_config.py @@ -20,9 +20,7 @@ from antarest.study.storage.rawstudy.ini_reader import IniReader from antarest.study.storage.rawstudy.model.filesystem.config.model import transform_name_to_id from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.create_area import CreateArea -from antarest.study.storage.variantstudy.model.command.remove_area import RemoveArea from antarest.study.storage.variantstudy.model.command.update_config import UpdateConfig from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -76,42 +74,3 @@ def test_update_config(empty_study: FileStudy, command_context: CommandContext): command.apply(empty_study) layers = IniReader().read(study_path / "layers/layers.ini") assert layers == {"first_layer": {"1": False}} - - -def test_match(command_context: CommandContext): - base = UpdateConfig(target="foo", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = UpdateConfig( - target="foo", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_not_match = UpdateConfig( - target="hello", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - other_other = RemoveArea(id="id", command_context=command_context, study_version=STUDY_VERSION_8_8) - assert base.match(other_match) - assert not base.match(other_not_match) - assert not base.match(other_other) - assert base.match_signature() == "update_config%foo" - - -@patch("antarest.study.storage.variantstudy.business.command_extractor.CommandExtractor.generate_update_config") -def test_revert(mock_generate_update_config, command_context: CommandContext): - base = UpdateConfig(target="foo", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) - study = FileStudy(config=Mock(), tree=Mock()) - mock_generate_update_config.side_effect = ChildNotFoundError("") - res = CommandReverter().revert(base, [], study) - mock_generate_update_config.assert_called_with(study.tree, ["foo"]) - assert res == [] - - assert CommandReverter().revert( - base, - [UpdateConfig(target="foo", data="baz", command_context=command_context, study_version=STUDY_VERSION_8_8)], - study, - ) == [UpdateConfig(target="foo", data="baz", command_context=command_context, study_version=STUDY_VERSION_8_8)] - - -def test_create_diff(command_context: CommandContext): - base = UpdateConfig(target="foo", data="bar", command_context=command_context, study_version=STUDY_VERSION_8_8) - other_match = UpdateConfig( - target="foo", data="baz", command_context=command_context, study_version=STUDY_VERSION_8_8 - ) - assert base.create_diff(other_match) == [other_match] diff --git a/tests/variantstudy/model/command/test_update_rawfile.py b/tests/variantstudy/model/command/test_update_rawfile.py index 0aa3a4477a..3d0b699952 100644 --- a/tests/variantstudy/model/command/test_update_rawfile.py +++ b/tests/variantstudy/model/command/test_update_rawfile.py @@ -16,7 +16,6 @@ from typing import cast from antarest.study.storage.rawstudy.model.filesystem.factory import FileStudy -from antarest.study.storage.variantstudy.business.command_reverter import CommandReverter from antarest.study.storage.variantstudy.model.command.update_raw_file import UpdateRawFile from antarest.study.storage.variantstudy.model.command_context import CommandContext @@ -34,22 +33,7 @@ def test_update_rawfile(empty_study: FileStudy, command_context: CommandContext) study_version=empty_study.config.version, ) - reverted_commands = CommandReverter().revert(command, [], empty_study) - assert cast(UpdateRawFile, reverted_commands[0]).b64Data == base64.b64encode(original_data).decode("utf-8") - - alt_command = UpdateRawFile( - target="settings/resources/study", - b64Data="", - command_context=command_context, - study_version=empty_study.config.version, - ) - reverted_commands = CommandReverter().revert(command, [alt_command], empty_study) - assert cast(UpdateRawFile, reverted_commands[0]).b64Data == "" - - assert command.match(alt_command) - assert not command.match(alt_command, True) assert len(command.get_inner_matrices()) == 0 - assert [alt_command] == command.create_diff(alt_command) res = command.apply(empty_study) assert res.status From 09a786b23cb07780731210a69cfd4f03c5767ee1 Mon Sep 17 00:00:00 2001 From: Samir Kamal <1954121+skamril@users.noreply.github.com> Date: Wed, 5 Feb 2025 14:30:24 +0100 Subject: [PATCH 82/86] feat(ui-commons): allow multiple cells to be pasted in DataGridForm (#2328) --- webapp/src/components/common/DataGridForm.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/webapp/src/components/common/DataGridForm.tsx b/webapp/src/components/common/DataGridForm.tsx index 6c4b9b9919..dd77ebaa88 100644 --- a/webapp/src/components/common/DataGridForm.tsx +++ b/webapp/src/components/common/DataGridForm.tsx @@ -296,6 +296,7 @@ function DataGridForm({ allowedFillDirections={allowedFillDirections} enableColumnResize={enableColumnResize} getCellsForSelection + onPaste /> Date: Wed, 5 Feb 2025 17:06:35 +0100 Subject: [PATCH 83/86] fix(ui-common): bump MUI to v6.4.3 to resolve Select list bug causing crashes (#2330) --- webapp/package-lock.json | 68 ++++++++++--------- webapp/package.json | 2 +- webapp/src/components/common/DynamicList.tsx | 1 + webapp/src/components/common/SelectMulti.tsx | 4 +- .../components/common/page/ViewWrapper.tsx | 2 +- 5 files changed, 41 insertions(+), 36 deletions(-) diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 22d9671e83..31cbd08f6c 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -14,7 +14,7 @@ "@handsontable/react": "14.5.0", "@mui/icons-material": "6.1.1", "@mui/lab": "6.0.0-beta.10", - "@mui/material": "6.1.1", + "@mui/material": "6.4.3", "@mui/x-tree-view": "7.18.0", "@reduxjs/toolkit": "1.9.6", "axios": "1.7.7", @@ -1851,9 +1851,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.3.1.tgz", - "integrity": "sha512-2OmnEyoHpj5//dJJpMuxOeLItCCHdf99pjMFfUFdBteCunAK9jW+PwEo4mtdGcLs7P+IgZ+85ypd52eY4AigoQ==", + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.3.tgz", + "integrity": "sha512-hlyOzo2ObarllAOeT1ZSAusADE5NZNencUeIvXrdQ1Na+FL1lcznhbxfV5He1KqGiuR8Az3xtCUcYKwMVGFdzg==", "license": "MIT", "funding": { "type": "opencollective", @@ -1932,22 +1932,22 @@ } }, "node_modules/@mui/material": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.1.tgz", - "integrity": "sha512-b+eULldTqtqTCbN++2BtBWCir/1LwEYw+2mIlOt2GiEUh1EBBw4/wIukGKKNt3xrCZqRA80yLLkV6tF61Lq3cA==", + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.3.tgz", + "integrity": "sha512-ubtQjplbWneIEU8Y+4b2VA0CDBlyH5I3AmVFGmsLyDe/bf0ubxav5t11c8Afem6rkSFWPlZA2DilxmGka1xiKQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.25.6", - "@mui/core-downloads-tracker": "^6.1.1", - "@mui/system": "^6.1.1", - "@mui/types": "^7.2.17", - "@mui/utils": "^6.1.1", + "@babel/runtime": "^7.26.0", + "@mui/core-downloads-tracker": "^6.4.3", + "@mui/system": "^6.4.3", + "@mui/types": "^7.2.21", + "@mui/utils": "^6.4.3", "@popperjs/core": "^2.11.8", - "@types/react-transition-group": "^4.4.11", + "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^18.3.1", + "react-is": "^19.0.0", "react-transition-group": "^4.4.5" }, "engines": { @@ -1960,7 +1960,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.1.1", + "@mui/material-pigment-css": "^6.4.3", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -1980,14 +1980,20 @@ } } }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, "node_modules/@mui/private-theming": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.3.1.tgz", - "integrity": "sha512-g0u7hIUkmXmmrmmf5gdDYv9zdAig0KoxhIQn1JN8IVqApzf/AyRhH3uDGx5mSvs8+a1zb4+0W6LC260SyTTtdQ==", + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.3.tgz", + "integrity": "sha512-7x9HaNwDCeoERc4BoEWLieuzKzXu5ZrhRnEM6AUcRXUScQLvF1NFkTlP59+IJfTbEMgcGg1wWHApyoqcksrBpQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.3.1", + "@mui/utils": "^6.4.3", "prop-types": "^15.8.1" }, "engines": { @@ -2008,9 +2014,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.3.1.tgz", - "integrity": "sha512-/7CC0d2fIeiUxN5kCCwYu4AWUDd9cCTxWCyo0v/Rnv6s8uk6hWgJC3VLZBoDENBHf/KjqDZuYJ2CR+7hD6QYww==", + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.3.tgz", + "integrity": "sha512-OC402VfK+ra2+f12Gef8maY7Y9n7B6CZcoQ9u7mIkh/7PKwW/xH81xwX+yW+Ak1zBT3HYcVjh2X82k5cKMFGoQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -2042,16 +2048,16 @@ } }, "node_modules/@mui/system": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.3.1.tgz", - "integrity": "sha512-AwqQ3EAIT2np85ki+N15fF0lFXX1iFPqenCzVOSl3QXKy2eifZeGd9dGtt7pGMoFw5dzW4dRGGzRpLAq9rkl7A==", + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.3.tgz", + "integrity": "sha512-Q0iDwnH3+xoxQ0pqVbt8hFdzhq1g2XzzR4Y5pVcICTNtoCLJmpJS3vI4y/OIM1FHFmpfmiEC2IRIq7YcZ8nsmg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/private-theming": "^6.3.1", - "@mui/styled-engine": "^6.3.1", + "@mui/private-theming": "^6.4.3", + "@mui/styled-engine": "^6.4.3", "@mui/types": "^7.2.21", - "@mui/utils": "^6.3.1", + "@mui/utils": "^6.4.3", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -2096,9 +2102,9 @@ } }, "node_modules/@mui/utils": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.3.1.tgz", - "integrity": "sha512-sjGjXAngoio6lniQZKJ5zGfjm+LD2wvLwco7FbKe1fu8A7VIFmz2SwkLb+MDPLNX1lE7IscvNNyh1pobtZg2tw==", + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.3.tgz", + "integrity": "sha512-jxHRHh3BqVXE9ABxDm+Tc3wlBooYz/4XPa0+4AI+iF38rV1/+btJmSUgG4shDtSWVs/I97aDn5jBCt6SF2Uq2A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", diff --git a/webapp/package.json b/webapp/package.json index e0c90e5d68..ee60932138 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -20,7 +20,7 @@ "@handsontable/react": "14.5.0", "@mui/icons-material": "6.1.1", "@mui/lab": "6.0.0-beta.10", - "@mui/material": "6.1.1", + "@mui/material": "6.4.3", "@mui/x-tree-view": "7.18.0", "@reduxjs/toolkit": "1.9.6", "axios": "1.7.7", diff --git a/webapp/src/components/common/DynamicList.tsx b/webapp/src/components/common/DynamicList.tsx index 8b5ebf6559..86850a698c 100644 --- a/webapp/src/components/common/DynamicList.tsx +++ b/webapp/src/components/common/DynamicList.tsx @@ -69,6 +69,7 @@ function DynamicList({ onAdd(e.target.value as string)} size="small" variant="outlined" diff --git a/webapp/src/components/common/SelectMulti.tsx b/webapp/src/components/common/SelectMulti.tsx index 6532bddf59..54e8f375eb 100644 --- a/webapp/src/components/common/SelectMulti.tsx +++ b/webapp/src/components/common/SelectMulti.tsx @@ -34,13 +34,12 @@ interface Props { data: string[]; setValue: (data: string[]) => void; sx?: SxProps | undefined; - placeholder?: string; tagsMode?: boolean; required?: boolean; } function SelectMulti(props: Props) { - const { name, list, data, setValue, placeholder, tagsMode, sx, required } = props; + const { name, list, data, setValue, tagsMode, sx, required } = props; const handleChange = (event: SelectChangeEvent) => { const { @@ -82,7 +81,6 @@ function SelectMulti(props: Props) { multiple value={data} variant="filled" - placeholder={placeholder} onChange={handleChange} renderValue={tagsMode === true ? chipRender : checkboxRender} > diff --git a/webapp/src/components/common/page/ViewWrapper.tsx b/webapp/src/components/common/page/ViewWrapper.tsx index f82446412c..6eb2bff6a3 100644 --- a/webapp/src/components/common/page/ViewWrapper.tsx +++ b/webapp/src/components/common/page/ViewWrapper.tsx @@ -26,7 +26,7 @@ function ViewWrapper({ children }: ViewWrapperProps) { width: 1, height: 1, p: 2, - ":has(.TabsView:first-child), :has(.TabWrapper:first-child)": { + ":has(.TabsView:first-of-type), :has(.TabWrapper:first-of-type)": { pt: 0, }, overflow: "auto", From 3efcfff6ab037f8d48c42e067a6d7e57beb171af Mon Sep 17 00:00:00 2001 From: Theo Pascoli <48944759+TheoPascoli@users.noreply.github.com> Date: Thu, 6 Feb 2025 10:37:31 +0100 Subject: [PATCH 84/86] build(all): bump pydantic and linting packages (#2331) --- .github/workflows/main.yml | 2 +- antarest/core/filetransfer/service.py | 32 ++++++++++++------- antarest/service_creator.py | 12 +++++-- antarest/study/business/general_management.py | 8 +++-- requirements-dev.txt | 6 ++-- requirements.txt | 5 ++- .../studies_blueprint/test_get_studies.py | 8 +++-- .../model/command/test_remove_st_storage.py | 2 +- 8 files changed, 46 insertions(+), 29 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a5207a3d20..30db6c0d4f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,7 +26,7 @@ jobs: uses: psf/black@stable with: # Version of Black should match the versions set in `requirements-dev.txt` - version: "~=23.7.0" + version: "~=25.1.0" options: --check --diff - name: Check Typing (mypy) #continue-on-error: true diff --git a/antarest/core/filetransfer/service.py b/antarest/core/filetransfer/service.py index a82f7af814..92b43e16d9 100644 --- a/antarest/core/filetransfer/service.py +++ b/antarest/core/filetransfer/service.py @@ -79,9 +79,11 @@ def request_download( Event( type=EventType.DOWNLOAD_CREATED, payload=download.to_dto(), - permissions=PermissionInfo(owner=owner.impersonator) - if owner - else PermissionInfo(public_mode=PublicMode.READ), + permissions=( + PermissionInfo(owner=owner.impersonator) + if owner + else PermissionInfo(public_mode=PublicMode.READ) + ), ) ) return download @@ -98,9 +100,11 @@ def set_ready(self, download_id: str, use_notification: bool = True) -> None: Event( type=EventType.DOWNLOAD_READY, payload=download.to_dto(), - permissions=PermissionInfo(owner=download.owner) - if download.owner - else PermissionInfo(public_mode=PublicMode.READ), + permissions=( + PermissionInfo(owner=download.owner) + if download.owner + else PermissionInfo(public_mode=PublicMode.READ) + ), ) ) @@ -116,9 +120,11 @@ def fail(self, download_id: str, reason: str = "") -> None: Event( type=EventType.DOWNLOAD_FAILED, payload=download.to_dto(), - permissions=PermissionInfo(owner=download.owner) - if download.owner - else PermissionInfo(public_mode=PublicMode.READ), + permissions=( + PermissionInfo(owner=download.owner) + if download.owner + else PermissionInfo(public_mode=PublicMode.READ) + ), ) ) @@ -185,9 +191,11 @@ def _clean_up_expired_downloads(self, file_downloads: List[FileDownload]) -> Non Event( type=EventType.DOWNLOAD_EXPIRED, payload=download_id, - permissions=PermissionInfo(owner=download_owner) - if download_owner - else PermissionInfo(public_mode=PublicMode.READ), + permissions=( + PermissionInfo(owner=download_owner) + if download_owner + else PermissionInfo(public_mode=PublicMode.READ) + ), ) ) diff --git a/antarest/service_creator.py b/antarest/service_creator.py index a9b0351671..5a538beb69 100644 --- a/antarest/service_creator.py +++ b/antarest/service_creator.py @@ -127,9 +127,15 @@ def create_event_bus(app_ctxt: t.Optional[AppBuildContext], config: Config) -> t ) -def create_core_services( - app_ctxt: t.Optional[AppBuildContext], config: Config -) -> t.Tuple[ICache, IEventBus, ITaskService, FileTransferManager, LoginService, MatrixService, StudyService,]: +def create_core_services(app_ctxt: t.Optional[AppBuildContext], config: Config) -> t.Tuple[ + ICache, + IEventBus, + ITaskService, + FileTransferManager, + LoginService, + MatrixService, + StudyService, +]: event_bus, redis_client = create_event_bus(app_ctxt, config) cache = build_cache(config=config, redis_client=redis_client) filetransfer_service = build_filetransfer_service(app_ctxt, event_bus, config) diff --git a/antarest/study/business/general_management.py b/antarest/study/business/general_management.py index 7270c63dc2..e8e74822c1 100644 --- a/antarest/study/business/general_management.py +++ b/antarest/study/business/general_management.py @@ -307,9 +307,11 @@ def __get_building_mode_update_cmds( return [ UpdateConfig( - target=f"{GENERAL_PATH}/custom-scenario" - if study_version >= STUDY_VERSION_8 - else f"{GENERAL_PATH}/custom-ts-numbers", + target=( + f"{GENERAL_PATH}/custom-scenario" + if study_version >= STUDY_VERSION_8 + else f"{GENERAL_PATH}/custom-ts-numbers" + ), data=new_value == BuildingMode.CUSTOM, command_context=cmd_context, study_version=study_version, diff --git a/requirements-dev.txt b/requirements-dev.txt index 14c06c1ed6..f3ec4b5a88 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,9 +1,9 @@ -r requirements-test.txt -r requirements-desktop.txt # Version of Black should match the versions set in `.github/workflows/main.yml` -black~=23.7.0 -isort~=5.12.0 -mypy~=1.11.1 +black~=25.1.0 +isort~=6.0.0 +mypy~=1.15.0 pyinstaller==6.10.0 pyinstaller-hooks-contrib==2024.8 diff --git a/requirements.txt b/requirements.txt index 60c782d945..cf483d9d7e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ antares-timeseries-generation==0.1.7 # and **manage their versions** for better control and to avoid unnecessary dependencies. fastapi~=0.110.3 uvicorn[standard]~=0.30.6 -pydantic~=2.8.2 +pydantic~=2.10.0 httpx~=0.27.0 python-multipart~=0.0.9 @@ -28,8 +28,7 @@ click~=8.0.3 contextvars~=2.4 filelock~=3.4.2 gunicorn~=20.1.0 -humanize~=4.10.0; python_version <= '3.8' -humanize~=4.11.0; python_version > '3.8' +humanize~=4.11.0 jsonref~=0.2 PyJWT~=2.9.0 MarkupSafe~=2.0.1 diff --git a/tests/integration/studies_blueprint/test_get_studies.py b/tests/integration/studies_blueprint/test_get_studies.py index 7049f82369..e2432464d0 100644 --- a/tests/integration/studies_blueprint/test_get_studies.py +++ b/tests/integration/studies_blueprint/test_get_studies.py @@ -1404,9 +1404,11 @@ def test_get_studies__access_permissions(self, client: TestClient, admin_access_ res = client.get( STUDIES_URL, headers={"Authorization": f"Bearer {users_tokens['user_1']}"}, - params={"groups": ",".join(request_groups_ids), "pageNb": 1, "pageSize": 2} - if request_groups_ids - else {"pageNb": 1, "pageSize": 2}, + params=( + {"groups": ",".join(request_groups_ids), "pageNb": 1, "pageSize": 2} + if request_groups_ids + else {"pageNb": 1, "pageSize": 2} + ), ) assert res.status_code == LIST_STATUS_CODE, res.json() assert len(res.json()) == max(0, min(2, len(expected_studies) - 2)) diff --git a/tests/variantstudy/model/command/test_remove_st_storage.py b/tests/variantstudy/model/command/test_remove_st_storage.py index d416391464..62d911f2bb 100644 --- a/tests/variantstudy/model/command/test_remove_st_storage.py +++ b/tests/variantstudy/model/command/test_remove_st_storage.py @@ -88,7 +88,7 @@ def test_init__invalid_storage_id(self, recent_study: FileStudy, command_context "loc": ("storage_id",), "msg": "String should match pattern '[a-z0-9_(),& -]+'", "type": "string_pattern_mismatch", - "url": "https://errors.pydantic.dev/2.8/v/string_pattern_mismatch", + "url": "https://errors.pydantic.dev/2.10/v/string_pattern_mismatch", } ] From e0c0bec6a9734134c1328c035c91c385e13b211f Mon Sep 17 00:00:00 2001 From: Sylvain Leclerc Date: Mon, 10 Feb 2025 13:01:38 +0100 Subject: [PATCH 85/86] chore: release v2.19.0 (2025-02-10) Signed-off-by: Sylvain Leclerc --- antarest/__init__.py | 4 +- docs/CHANGELOG.md | 112 +++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- sonar-project.properties | 2 +- webapp/package-lock.json | 4 +- webapp/package.json | 2 +- 6 files changed, 119 insertions(+), 7 deletions(-) diff --git a/antarest/__init__.py b/antarest/__init__.py index 76b50ff27b..9159daa2bc 100644 --- a/antarest/__init__.py +++ b/antarest/__init__.py @@ -19,9 +19,9 @@ # Standard project metadata -__version__ = "2.18.3" +__version__ = "2.19.0" __author__ = "RTE, Antares Web Team" -__date__ = "2024-12-17" +__date__ = "2025-02-10" # noinspection SpellCheckingInspection __credits__ = "(c) Réseau de Transport de l’Électricité (RTE)" diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index dd0f10a9f5..026ba55f6a 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,6 +1,118 @@ Antares Web Changelog ===================== +v2.19.0 (2025-02-10) +-------------------- + +## What's Changed + + +### Features + +* **ui-commons**: allow multiple cells to be pasted in DataGridForm [`#2328`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2328) +* **ts-gen**!: replace legacy endpoints for timeseries generation [`#2303`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2303) +* **study**: normalize study path as posix path, independent from the OS [`#2316`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2316) +* **ui-matrix**: add matrix selection stats [`#2313`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2313) +* **ui-studies**: sort study tree folders alphabetically [`#2300`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2300) +* **commands**: add an endpoint to allow multiple deletion of binding constrain… [`#2298`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2298) +* **ui-tablemode,ui-playlist**: replace Handsontable by Glide Data Grid [`#2289`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2289) +* **ui-api, studies**: optimize studies listing [`#2288`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2288) +* **bc**: add constraint duplication endpoint [`#2295`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2295) +* **installer**: update installer for v2.19 [`#2297`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2297) +* **launcher**: allow local launcher to work with xpress [`#2251`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2251) +* **variant**: add reason when variant generation fails [`#2290`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2290) +* **ui-debug**: add download in original file format [`#2277`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2277) +* **ui-links**: set first link as default when component mounts [`#2268`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2268) +* **raw-api**: add an endpoint to retrieve files in their original format [`#2244`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2244) +* **api,ui-studies**: update study move [`#2239`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2239) +* **aggregation-apis**: rename aggregation cols [`#2250`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2250) +* **ui-debug**: add unsupported files handling [`#2260`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2260) +* **ui-cmd**: add command details on variants commands panel [`#2265`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2265) +* **commands**: add creation timestamp and user name inside commands [`#2252`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2252) +* **raw**: allow folder creation inside `user` folder [`#2216`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2216) +* **link**: add update endpoint for link [`#2175`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2175) +* **ui-commons,ui-api**: allow to export matrices to CSV [`#2236`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2236) +* **matrix**: allow import for comma-separated csv [`#2237`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2237) +* **ts-gen**: add failing area and cluster info inside error msg [`#2227`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2227) +* **ui-common**: create DataGrid component and use it [`b164dd6`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/b164dd6af3491b837e879bf09bd602ae2db77d03) +* **ui-playlist**: replace Handsontable [`3f95777`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/3f957770b1f29bf5ddcebd0818aa469ed965c02f) +* **ui-common**: create DataGridForm component [`26398ac`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/26398acf321cc6edcb0227aa6117968f3eb883e4) +* **ui-debug**: display output matrices as raw text [`2c7eeac`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/2c7eeac5d9fda9aefad0d502ba068979257efba1) +* **ui-tablemode**: replace Handsontable and remove context menu [`63bfe44`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/63bfe448d0593e7bc3e3d587fae1555d279199f9) +* **ui-studies**: update validation in MoveStudyDialog [`373f894`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/373f8942f0f16df93daee3e9335a6abe01de8556) +* **ui-utils**: add `validatePath` function in validation [`bbd48d0`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/bbd48d002bafb6496800b1214839a57a6cc01a92) +* **ui-hooks**: create useFormCloseProtection [`684b964`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/684b964f229c176dbd6f10dd679f7965c49575b8) +* **move**: adapt back-end code and add tests [`6d454f4`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/6d454f4aac26d3c4b09230333307d0d81e94802a) +* **ui-common**: rename EmptyView and add extraActions prop [`ba87cff`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/ba87cffd2b44eb59715800036145474588a2853b) + + +### Bug Fixes + +* **ui-common**: bump MUI to v6.4.3 to resolve Select list bug causing crashes [`#2330`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2330) +* **ui-commons**: keep auto size for DataGrid [`#2324`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2324) +* **ui-tablemode**: prevent small values from being cut off and remove empty space at the bottom [`#2321`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2321) +* **ui-tablemode**: adjust the size of the column with the initial data [`#2320`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2320) +- **binding constraints**: fix a bug that would occurs after deleting multiple bc [`#2317`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2317) +* **ui-studies**: 615 minor fixes [`#2314`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2314) +* **ui-studies**: display 'default' workspace even if empty [`#2301`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2301) +* **ui**: resolve sonar complexity warning [`#2311`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2311) +* **matrix**: allow odd matrix format when importing [`#2305`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2305) +* **study-tree**: fix tooltip message key [`#2306`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2306) +* **disk-usage**: suppress exceptions [`#2293`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2293) +* **desktop**: fixes calendar issue when reading matrices with non-english locale [`#2291`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2291) +* **raw**: change bytes serialization when formatting is False [`#2292`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2292) +* **list_dir**: check permissions and consider workspace filters config [`#2279`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2279) +* **matrix**: return default empty matrix even when called with formatted=False [`#2286`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2286) +* **matrix**: remove columns full of `NaN` inside matrices at the import [`#2287`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2287) +* **link**: add comment attribute in link that was missing and causing an 422 error [`#2281`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2281) +* **ui**: fix untranslated message [`#2275`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2275) +* **xpansion**: fix several issues related to weights and constraints [`#2273`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2273) +* **ui-bc**: use `matrixindex` timesteps for row display [`#2262`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2262) +* **tasks**: fix frozen task with load balanced pgpool [`#2263`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2263) +* **links**: fix a bug that occurred when updating links via table-mode [`#2256`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2256) +* **link**: fix empty string handling in filter conversion [`#2232`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2232) +* **ui-debug**: prevent empty text files display [`aa373d5`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/aa373d5f0fb326d8621613853191fca897f33a41) +* **ui-studies**: small bottom part not visible with scroll [`e749683`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/e7496836c5088ae7b3c35dce14e928d6655ad4a6) +* **ui-common**: disable undo/redo buttons when submitting in Form [`1c590c1`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/1c590c12f41ebb84107b327cacb91ed10ac0bb21) + +### Chore + +* **commands**: remove obsolete variant-related features [`#2326`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2326) +- **ui**: disable TS null assertion and update the code that use it [`#2312`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2312) +* **ui**: update license year [`#2307`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2307) +* **commands**: fix user name display in commands [`#2284`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2284) +* **upgrader**: remove duplicated tests [`#2235`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2235) +- **link,ui-api**: update DTO format for link [`#2221`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2221) +- **ui-studies**: function to build tree [`68c49fa`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/68c49fac25305f082062671e4860bad3b54892c5) +* **vite**: update server URL [`c68cd50`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/c68cd50394fb1af435e98188b09bc01b9c1aee6d) +- add .nvmrc file containing node version number for the app [`c094362`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/c094362e0b1eb907cbbc5e06046d165988e8fb51) +- Update year in copyright headers [`#2299`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2299) +* **ui-hooks**: update useSafeMemo and useUpdatedRef [`#2309`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2309) +* **commands**: add study_version information inside commands [`#2202`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2202) + + +### Style + +* **ui-commons**: correct a comment [`e48d550`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/e48d5502f39eb2e98b484a85b672c0c81f0ce88e) + + +### Build + +* add PR title lint job [`#2304`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2304) +* dependencies: bump pydantic and linting packages [`#2331`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2331) +* use fixed versions for gh actions for build stability [`#2255`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2255) +* **mypy**: enforce explicit overrides [`#2270`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2270) +* **ui**: bump vite from 5.4.8 to 5.4.14 [`#2308`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2308) +* **ui**: update Node version, ESLint and Prettier [`#2294`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2294) +* **commitlint**: add new rules for scope [`#2319`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2319) + + +### BREAKING CHANGES + +* **ts-gen**!: replace legacy endpoints with new ones [`#2303`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2303) + + + v2.18.3 (2024-12-17) -------------------- diff --git a/pyproject.toml b/pyproject.toml index 1490a75793..a11ffde3d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["setuptools"] [project] name = "AntaREST" -version = "2.18.3" +version = "2.19.0" authors = [{name="RTE, Antares Web Team", email="andrea.sgattoni@rte-france.com" }] description="Antares Server" readme = {file = "README.md", content-type = "text/markdown"} diff --git a/sonar-project.properties b/sonar-project.properties index 8c55e49a3b..e70d06a716 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -6,5 +6,5 @@ sonar.exclusions=antarest/gui.py,antarest/main.py sonar.python.coverage.reportPaths=coverage.xml sonar.python.version=3.11 sonar.javascript.lcov.reportPaths=webapp/coverage/lcov.info -sonar.projectVersion=2.18.3 +sonar.projectVersion=2.19.0 sonar.coverage.exclusions=antarest/gui.py,antarest/main.py,antarest/singleton_services.py,antarest/worker/archive_worker_service.py,webapp/**/*,,antarest/fastapi_jwt_auth/** \ No newline at end of file diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 31cbd08f6c..3d22242cb5 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -1,12 +1,12 @@ { "name": "antares-web", - "version": "2.18.3", + "version": "2.19.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "antares-web", - "version": "2.18.3", + "version": "2.19.0", "dependencies": { "@emotion/react": "11.13.3", "@emotion/styled": "11.13.0", diff --git a/webapp/package.json b/webapp/package.json index ee60932138..fa580082b2 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -1,6 +1,6 @@ { "name": "antares-web", - "version": "2.18.3", + "version": "2.19.0", "private": true, "type": "module", "scripts": { From ffda60cf53a340fcc9bb7c05f83abe0788e99e38 Mon Sep 17 00:00:00 2001 From: Sylvain Leclerc Date: Mon, 10 Feb 2025 14:11:53 +0100 Subject: [PATCH 86/86] chore(docs): improve changelog content Signed-off-by: Sylvain Leclerc --- docs/CHANGELOG.md | 164 ++++++++++++++++++++-------------------------- 1 file changed, 71 insertions(+), 93 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 026ba55f6a..d24aa9168e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,112 +6,90 @@ v2.19.0 (2025-02-10) ## What's Changed - ### Features -* **ui-commons**: allow multiple cells to be pasted in DataGridForm [`#2328`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2328) -* **ts-gen**!: replace legacy endpoints for timeseries generation [`#2303`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2303) -* **study**: normalize study path as posix path, independent from the OS [`#2316`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2316) -* **ui-matrix**: add matrix selection stats [`#2313`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2313) -* **ui-studies**: sort study tree folders alphabetically [`#2300`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2300) -* **commands**: add an endpoint to allow multiple deletion of binding constrain… [`#2298`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2298) -* **ui-tablemode,ui-playlist**: replace Handsontable by Glide Data Grid [`#2289`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2289) -* **ui-api, studies**: optimize studies listing [`#2288`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2288) -* **bc**: add constraint duplication endpoint [`#2295`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2295) -* **installer**: update installer for v2.19 [`#2297`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2297) -* **launcher**: allow local launcher to work with xpress [`#2251`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2251) -* **variant**: add reason when variant generation fails [`#2290`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2290) -* **ui-debug**: add download in original file format [`#2277`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2277) -* **ui-links**: set first link as default when component mounts [`#2268`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2268) -* **raw-api**: add an endpoint to retrieve files in their original format [`#2244`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2244) -* **api,ui-studies**: update study move [`#2239`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2239) -* **aggregation-apis**: rename aggregation cols [`#2250`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2250) -* **ui-debug**: add unsupported files handling [`#2260`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2260) -* **ui-cmd**: add command details on variants commands panel [`#2265`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2265) -* **commands**: add creation timestamp and user name inside commands [`#2252`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2252) -* **raw**: allow folder creation inside `user` folder [`#2216`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2216) -* **link**: add update endpoint for link [`#2175`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2175) -* **ui-commons,ui-api**: allow to export matrices to CSV [`#2236`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2236) -* **matrix**: allow import for comma-separated csv [`#2237`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2237) -* **ts-gen**: add failing area and cluster info inside error msg [`#2227`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2227) -* **ui-common**: create DataGrid component and use it [`b164dd6`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/b164dd6af3491b837e879bf09bd602ae2db77d03) -* **ui-playlist**: replace Handsontable [`3f95777`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/3f957770b1f29bf5ddcebd0818aa469ed965c02f) -* **ui-common**: create DataGridForm component [`26398ac`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/26398acf321cc6edcb0227aa6117968f3eb883e4) -* **ui-debug**: display output matrices as raw text [`2c7eeac`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/2c7eeac5d9fda9aefad0d502ba068979257efba1) -* **ui-tablemode**: replace Handsontable and remove context menu [`63bfe44`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/63bfe448d0593e7bc3e3d587fae1555d279199f9) -* **ui-studies**: update validation in MoveStudyDialog [`373f894`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/373f8942f0f16df93daee3e9335a6abe01de8556) -* **ui-utils**: add `validatePath` function in validation [`bbd48d0`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/bbd48d002bafb6496800b1214839a57a6cc01a92) -* **ui-hooks**: create useFormCloseProtection [`684b964`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/684b964f229c176dbd6f10dd679f7965c49575b8) -* **move**: adapt back-end code and add tests [`6d454f4`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/6d454f4aac26d3c4b09230333307d0d81e94802a) -* **ui-common**: rename EmptyView and add extraActions prop [`ba87cff`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/ba87cffd2b44eb59715800036145474588a2853b) - - -### Bug Fixes +* **ts-gen**: add failing area and cluster info inside error msg [`2227`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2227) +* **commands**: add study_version information inside commands [`2202`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2202) +* **matrix**: allow import for comma-separated csv [`2237`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2237) +* **ui-commons,ui-api**: allow to export matrices to CSV [`2236`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2236) +* **link**: add update endpoint for link [`2175`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2175) +* **raw**: allow folder creation inside `user` folder [`2216`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2216) +* **clusters**: convert groups and names to lower case [`2182`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2182) +* **commands**: add creation timestamp and user name inside commands [`2252`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2252) +* **ui-cmd**: add command details on variants commands panel [`2265`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2265) +* **ui-debug**: add unsupported files handling [`2260`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2260) +* **aggregation-apis**: rename aggregation cols [`2250`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2250) +* **api,ui-studies**: update study move [`2239`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2239) +* **raw-api**: add an endpoint to retrieve files in their original format [`2244`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2244) +* **ui-links**: set first link as default when component mounts [`2268`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2268) +* **ui-studies**: add on click fetch and display list of non studies folder [`2224`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2224) +* **ui-debug**: add download in original file format [`2277`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2277) +* **variant**: add reason when variant generation fails [`2290`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2290) +* **launcher**: allow local launcher to work with xpress [`2251`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2251) +* **installer**: update installer for v2.19 [`2297`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2297) +* **bc**: add constraint duplication endpoint [`2295`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2295) +* **ui-api, studies**: optimize studies listing [`2288`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2288) +* **ui-tablemode,ui-playlist**: replace Handsontable by Glide Data Grid [`2289`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2289) +* feat: add an endpoint to allow multiple deletion of binding constrain… [`2298`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2298) +* **ui-hooks**: update useSafeMemo and useUpdatedRef [`2309`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2309) +* **ui-studies**: sort study tree folders [`2300`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2300) +* **study**: normalize study path [`2316`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2316) +* **feat(ts-gen)**: replace legacy endpoints with new ones [`2303`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2303) +* **ui-commons**: allow multiple cells to be pasted in DataGridForm [`2328`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2328) + + +### Bug fixes + +* **link**: fix empty string handling in filter conversion [`2232`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2232) +* **ci**: use fixed versions for gh actions for build stability [`2255`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2255) +* **links**: fix a bug that occurred when updating links via table-mode [`2256`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2256) +* **tasks**: fix frozen task with load balanced pgpool [`2263`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2263) +* **ui-bc**: use `matrixindex` timesteps for row display [`2262`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2262) +* **xpansion**: fix several issues related to weights and constraints [`2273`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2273) +* **ui**: fix untranslated message [`2275`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2275) +* **link**: add comment attribute in link that was missing and causing an 422 error [`2281`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2281) +* **matrix**: remove columns full of `NaN` inside matrices at the import [`2287`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2287) +* **matrix**: return default empty matrix even when called with formatted=False [`2286`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2286) +* **list_dir**: check permissions and consider workspace filters config [`2279`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2279) +* **raw**: change bytes serialization when formatting is False [`2292`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2292) +* **desktop**: fixes calendar issue when reading matrices on Linux [`2291`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2291) +* **disk-usage**: suppress exceptions [`2293`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2293) +* **study-tree**: fix tooltip message key [`2306`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2306) +* **matrix**: allow odd matrix format when importing [`2305`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2305) +* **ui**: resolve sonar complexity warning [`2311`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2311) +* **ui-studies**: display 'default' workspace even if empty [`2301`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2301) +* **ui-studies**: 615 minor fixes [`2314`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2314) +* **bc**: fix a bug that would occurs after deleting multiple bc [`2317`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2317) +* **ui-tablemode**: adjust the size of the column with the initial data [`2320`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2320) +* **ui-tablemode**: prevent small values from being cut off and remove empty space at the bottom [`2321`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2321) +* **ui-commons**: keep auto size for DataGrid [`2324`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2324) -* **ui-common**: bump MUI to v6.4.3 to resolve Select list bug causing crashes [`#2330`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2330) -* **ui-commons**: keep auto size for DataGrid [`#2324`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2324) -* **ui-tablemode**: prevent small values from being cut off and remove empty space at the bottom [`#2321`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2321) -* **ui-tablemode**: adjust the size of the column with the initial data [`#2320`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2320) -- **binding constraints**: fix a bug that would occurs after deleting multiple bc [`#2317`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2317) -* **ui-studies**: 615 minor fixes [`#2314`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2314) -* **ui-studies**: display 'default' workspace even if empty [`#2301`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2301) -* **ui**: resolve sonar complexity warning [`#2311`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2311) -* **matrix**: allow odd matrix format when importing [`#2305`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2305) -* **study-tree**: fix tooltip message key [`#2306`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2306) -* **disk-usage**: suppress exceptions [`#2293`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2293) -* **desktop**: fixes calendar issue when reading matrices with non-english locale [`#2291`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2291) -* **raw**: change bytes serialization when formatting is False [`#2292`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2292) -* **list_dir**: check permissions and consider workspace filters config [`#2279`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2279) -* **matrix**: return default empty matrix even when called with formatted=False [`#2286`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2286) -* **matrix**: remove columns full of `NaN` inside matrices at the import [`#2287`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2287) -* **link**: add comment attribute in link that was missing and causing an 422 error [`#2281`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2281) -* **ui**: fix untranslated message [`#2275`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2275) -* **xpansion**: fix several issues related to weights and constraints [`#2273`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2273) -* **ui-bc**: use `matrixindex` timesteps for row display [`#2262`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2262) -* **tasks**: fix frozen task with load balanced pgpool [`#2263`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2263) -* **links**: fix a bug that occurred when updating links via table-mode [`#2256`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2256) -* **link**: fix empty string handling in filter conversion [`#2232`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2232) -* **ui-debug**: prevent empty text files display [`aa373d5`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/aa373d5f0fb326d8621613853191fca897f33a41) -* **ui-studies**: small bottom part not visible with scroll [`e749683`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/e7496836c5088ae7b3c35dce14e928d6655ad4a6) -* **ui-common**: disable undo/redo buttons when submitting in Form [`1c590c1`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/1c590c12f41ebb84107b327cacb91ed10ac0bb21) ### Chore -* **commands**: remove obsolete variant-related features [`#2326`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2326) -- **ui**: disable TS null assertion and update the code that use it [`#2312`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2312) -* **ui**: update license year [`#2307`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2307) -* **commands**: fix user name display in commands [`#2284`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2284) -* **upgrader**: remove duplicated tests [`#2235`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2235) -- **link,ui-api**: update DTO format for link [`#2221`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2221) -- **ui-studies**: function to build tree [`68c49fa`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/68c49fac25305f082062671e4860bad3b54892c5) -* **vite**: update server URL [`c68cd50`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/c68cd50394fb1af435e98188b09bc01b9c1aee6d) -- add .nvmrc file containing node version number for the app [`c094362`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/c094362e0b1eb907cbbc5e06046d165988e8fb51) -- Update year in copyright headers [`#2299`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2299) -* **ui-hooks**: update useSafeMemo and useUpdatedRef [`#2309`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2309) -* **commands**: add study_version information inside commands [`#2202`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2202) - - -### Style - -* **ui-commons**: correct a comment [`e48d550`](https://github.com/AntaresSimulatorTeam/AntaREST/commit/e48d5502f39eb2e98b484a85b672c0c81f0ce88e) - +* **upgrader**: remove duplicated tests [`2235`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2235) +* **commands**: fix user name display in commands [`2284`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2284) +* **ui**: update license year [`2307`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2307) +* **ui**: bump vite from 5.4.8 to 5.4.14 [`2308`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2308) +* **ui**: disable TS null assertion and update the code that use it [`2312`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2312) +* **commands**: remove obsolete variant-related features [`2326`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2326) +* **ui-common**: bump MUI to v6.4.3 to resolve Select list bug causing crashes [`2330`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2330) +* **all**: bump pydantic and linting packages [`2331`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2331) +* **copyright**: Update year in copyright headers [`2299`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2299) -### Build +### Continuous integration -* add PR title lint job [`#2304`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2304) -* dependencies: bump pydantic and linting packages [`#2331`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2331) -* use fixed versions for gh actions for build stability [`#2255`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2255) -* **mypy**: enforce explicit overrides [`#2270`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2270) -* **ui**: bump vite from 5.4.8 to 5.4.14 [`#2308`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2308) -* **ui**: update Node version, ESLint and Prettier [`#2294`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2294) -* **commitlint**: add new rules for scope [`#2319`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2319) +* **commitlint**: add new rules for scope [`2319`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2319) +* **mypy**: enforce explicit overrides [`2270`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2270) +* **github**: add PR title lint job [`2304`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2304) -### BREAKING CHANGES +### Breaking changes -* **ts-gen**!: replace legacy endpoints with new ones [`#2303`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2303) +* **ts-gen**: replace legacy endpoints with new ones [`2303`](https://github.com/AntaresSimulatorTeam/AntaREST/pull/2303) +**Full Changelog**: https://github.com/AntaresSimulatorTeam/AntaREST/compare/v2.18.3...v2.19.0-test v2.18.3 (2024-12-17) --------------------