From 04464d204eac0420f47b3db78dfefb4b171df1fd Mon Sep 17 00:00:00 2001
From: "sarah.rautenbach"
Note: Instead of loading a yaml file it is possible to create a python dictionary directly, built upon the structure seen below.
" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"cases\": {\n", + " \"new_root\": \"C:/Users/rautenba/hydromt_fiat/examples/data/road_network/\",\n", + " \"roads_from_OSM\": {\n", + " \"data_catalogue\": \"C:/Users/rautenba/hydromt_fiat/examples/data/road_network/hydromt_fiat_catalog_USA.yml\",\n", + " \"dir\": \"test_roads_from_OSM\"\n", + " },\n", + " \"road_network\": {\n", + " \"new_root\": \"./data/road_network/output/road_network_example\",\n", + " \"configuration\": {\n", + " \"setup_road_vulnerability\": {\n", + " \"vertical_unit\": \"feet\",\n", + " \"threshold_value\": 0.6,\n", + " \"min_hazard_value\": 0,\n", + " \"max_hazard_value\": 10,\n", + " \"step_hazard_value\": 1\n", + " },\n", + " \"setup_exposure_roads\": {\n", + " \"roads_fn\": \"OSM\",\n", + " \"road_types\": [\n", + " \"motorway\",\n", + " \"primary\",\n", + " \"secondary\",\n", + " \"tertiary\"\n", + " ],\n", + " \"road_damage\": \"default_road_max_potential_damages\",\n", + " \"unit\": \"meter\"\n", + " }\n", + " }\n", + " },\n", + " \"region\": {\n", + " \"type\": \"FeatureCollection\",\n", + " \"features\": [\n", + " {\n", + " \"type\": \"Feature\",\n", + " \"properties\": {},\n", + " \"geometry\": {\n", + " \"type\": \"Polygon\",\n", + " \"coordinates\": [\n", + " [\n", + " [\n", + " -79.92169686568795,\n", + " 32.768208904171374\n", + " ],\n", + " [\n", + " -79.92169686568795,\n", + " 32.77745096033627\n", + " ],\n", + " [\n", + " -79.94881762529997,\n", + " 32.77745096033627\n", + " ],\n", + " [\n", + " -79.94881762529997,\n", + " 32.768208904171374\n", + " ],\n", + " [\n", + " -79.92169686568795,\n", + " 32.768208904171374\n", + " ]\n", + " ]\n", + " ]\n", + " }\n", + " }\n", + " ]\n", + " }\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "#Let's read the yaml file with the required information \n", + "#and set up the FIAT model for the two test cases.\n", + "\n", + "with open(Path(os.path.abspath(\"\")) / \"data\" / \"road_network\" / \"configuration.yml\", 'r') as file:\n", + " _cases = yaml.safe_load(file)\n", + "\n", + "print(json.dumps(_cases, indent=4, sort_keys=False))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# **Step 4**: Define variables for the FIAT model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Set up the root path to the FIAT model and the logger settings to re-build your model:\n", + "- `root`: Directory path from where the neccessary data for the FIAT model is stored. \n", + "- `logger`: The logger variable defines the frequencies of log-entries during the initialisation of the model.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:53:39,419 - hydromt_fiat - log - INFO - HydroMT version: 0.8.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:HydroMT version: 0.8.0\n" + ] + } + ], + "source": [ + "# Set up Fiat Model\n", + "root = Path(os.path.abspath(\"\")) / \"data\" / \"road_network\"\n", + "\n", + "# Set up the logger\n", + "logger = setuplog(\"hydromt_fiat\", log_level=10)\n", + "\n", + "# Set up region\n", + "region = _cases[\"cases\"][\"region\"]\n", + "# Set up datacatalog\n", + "data_catalog_yml = str(_cases[\"cases\"][\"roads_from_OSM\"][\"data_catalogue\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 115, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,107 - hydromt_fiat - data_catalog - INFO - Parsing data catalog from C:/Users/rautenba/hydromt_fiat/examples/data/road_network/hydromt_fiat_catalog_USA.yml\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Parsing data catalog from C:/Users/rautenba/hydromt_fiat/examples/data/road_network/hydromt_fiat_catalog_USA.yml\n", + "WARNING:py.warnings:c:\\Users\\rautenba\\AppData\\Local\\mambaforge\\envs\\hydromt-fiat-dev\\lib\\site-packages\\hydromt\\data_adapter\\geodataframe.py:99: DeprecationWarning: Passing additional keyword arguments to be used by the GeoDataFrameAdapter driver is deprecated and will be removed in a future version. Please use 'driver_kwargs' instead.\n", + " warnings.warn(\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,117 - hydromt_fiat - model_api - WARNING - Model dir already exists and files might be overwritten: c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\exposure.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:hydromt_fiat:Model dir already exists and files might be overwritten: c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\exposure.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,118 - hydromt_fiat - model_api - WARNING - Model dir already exists and files might be overwritten: c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\vulnerability.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:hydromt_fiat:Model dir already exists and files might be overwritten: c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\vulnerability.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,118 - hydromt_fiat - model_api - INFO - Initializing fiat model from hydromt_fiat (v0.2.1.dev0).\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Initializing fiat model from hydromt_fiat (v0.2.1.dev0).\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,118 - hydromt_fiat - model_api - INFO - setup_region.region: {'geom': geometry\n", + "0 POLYGON ((-79.92170 32.76821, -79.92170 32.777...}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_region.region: {'geom': geometry\n", + "0 POLYGON ((-79.92170 32.76821, -79.92170 32.777...}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,118 - hydromt_fiat - basin_mask - DEBUG - Parsed region (kind=geom): {'geom': 'GeoDataFrame [-79.94881763 32.7682089 -79.92169687 32.77745096] (crs = EPSG:4326)'}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:hydromt_fiat:Parsed region (kind=geom): {'geom': 'GeoDataFrame [-79.94881763 32.7682089 -79.92169687 32.77745096] (crs = EPSG:4326)'}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.vertical_unit: feet\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_road_vulnerability.vertical_unit: feet\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.threshold_value: 0.6\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_road_vulnerability.threshold_value: 0.6\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.min_hazard_value: 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_road_vulnerability.min_hazard_value: 0\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.max_hazard_value: 10\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_road_vulnerability.max_hazard_value: 10\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.step_hazard_value: 1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_road_vulnerability.step_hazard_value: 1\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,142 - hydromt_fiat - model_api - INFO - setup_exposure_roads.roads_fn: OSM\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_exposure_roads.roads_fn: OSM\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,143 - hydromt_fiat - model_api - INFO - setup_exposure_roads.road_damage: default_road_max_potential_damages\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_exposure_roads.road_damage: default_road_max_potential_damages\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,144 - hydromt_fiat - model_api - INFO - setup_exposure_roads.road_types: ['motorway', 'primary', 'secondary', 'tertiary']\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_exposure_roads.road_types: ['motorway', 'primary', 'secondary', 'tertiary']\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,145 - hydromt_fiat - model_api - INFO - setup_exposure_roads.unit: meter\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:setup_exposure_roads.unit: meter\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,146 - hydromt_fiat - exposure_vector - INFO - Setting up roads...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Setting up roads...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,227 - hydromt_fiat - exposure_vector - INFO - The damage function 'roads' is selected for all of the structure damage to the roads.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:The damage function 'roads' is selected for all of the structure damage to the roads.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,227 - hydromt_fiat - data_catalog - INFO - DataCatalog: Getting default_road_max_potential_damages DataFrame csv data from C:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\us_road_damage.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:DataCatalog: Getting default_road_max_potential_damages DataFrame csv data from C:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\us_road_damage.csv\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,227 - hydromt_fiat - dataframe - INFO - DataFrame: Read csv data.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:DataFrame: Read csv data.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,243 - hydromt_fiat - exposure_vector - INFO - Setting exposure geometries...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Setting exposure geometries...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,243 - hydromt_fiat - exposure_vector - INFO - Setting geometry name to roads...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Setting geometry name to roads...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,243 - hydromt_fiat - fiat - INFO - Updating all data objects...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Updating all data objects...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,243 - hydromt_fiat - model_api - ERROR - Default config file not found at c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\fiat\\settings.toml\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ERROR:hydromt_fiat:Default config file not found at c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\fiat\\settings.toml\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,243 - hydromt_fiat - model_api - WARNING - Replacing geom: region\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:hydromt_fiat:Replacing geom: region\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,243 - hydromt_fiat - fiat - INFO - Writing model data to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Writing model data to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,243 - hydromt_fiat - model_api - INFO - Writing model config to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\settings.toml\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Writing model config to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\settings.toml\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,243 - hydromt_fiat - model_api - DEBUG - Writing file exposure/region.gpkg\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:hydromt_fiat:Writing file exposure/region.gpkg\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,353 - hydromt_fiat - model_api - DEBUG - Writing file exposure/roads.gpkg\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:hydromt_fiat:Writing file exposure/roads.gpkg\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,453 - hydromt_fiat - fiat - INFO - Writing model exposure table file to exposure/exposure.csv.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Writing model exposure table file to exposure/exposure.csv.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,457 - hydromt_fiat - fiat - INFO - Writing model vulnerability_curves table file to vulnerability/vulnerability_curves.csv.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Writing model vulnerability_curves table file to vulnerability/vulnerability_curves.csv.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,460 - hydromt_fiat - fiat - INFO - Updating all data objects...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Updating all data objects...\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,461 - hydromt_fiat - model_api - WARNING - Replacing geom: roads\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:hydromt_fiat:Replacing geom: roads\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,462 - hydromt_fiat - model_api - WARNING - Replacing geom: region\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:hydromt_fiat:Replacing geom: region\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,463 - hydromt_fiat - fiat - INFO - Writing model data to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Writing model data to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,464 - hydromt_fiat - model_api - INFO - Writing model config to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\settings.toml\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Writing model config to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\settings.toml\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,465 - hydromt_fiat - model_api - DEBUG - Writing file exposure/region.gpkg\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:hydromt_fiat:Writing file exposure/region.gpkg\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,547 - hydromt_fiat - model_api - DEBUG - Writing file exposure/roads.gpkg\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:hydromt_fiat:Writing file exposure/roads.gpkg\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,655 - hydromt_fiat - fiat - INFO - Writing model exposure table file to exposure/exposure.csv.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Writing model exposure table file to exposure/exposure.csv.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2023-10-23 15:55:04,660 - hydromt_fiat - fiat - INFO - Writing model vulnerability_curves table file to vulnerability/vulnerability_curves.csv.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:hydromt_fiat:Writing model vulnerability_curves table file to vulnerability/vulnerability_curves.csv.\n" + ] + } + ], + "source": [ + "fm = FiatModel(root=root, mode=\"w+\", data_libs=[data_catalog_yml], logger=logger)\n", + "region = gpd.GeoDataFrame.from_features(_cases[\"cases\"][\"region\"], crs=4326)\n", + "fm.build(region={\"geom\": region}, opt=_cases[\"cases\"][\"road_network\"][\"configuration\"])\n", + "fm.write()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "hydromt-fiat-dev", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/data/road_network/configuration.yml b/examples/data/road_network/configuration.yml new file mode 100644 index 00000000..262402f6 --- /dev/null +++ b/examples/data/road_network/configuration.yml @@ -0,0 +1,35 @@ +cases: + new_root: C:/Users/rautenba/hydromt_fiat/examples/data/road_network/ + roads_from_OSM: + data_catalogue: C:/Users/rautenba/hydromt_fiat/examples/data/road_network/hydromt_fiat_catalog_USA.yml + dir: test_roads_from_OSM + road_network: + new_root: "./data/road_network/output/road_network_example" + configuration: + setup_road_vulnerability: + vertical_unit: feet + threshold_value: 0.6 + min_hazard_value: 0 + max_hazard_value: 10 + step_hazard_value: 1 + setup_exposure_roads: + roads_fn: OSM + road_types: ["motorway", "primary", "secondary", "tertiary"] + road_damage: default_road_max_potential_damages + unit: meter + region: + type: FeatureCollection + features: + - type: Feature + properties: {} + geometry: + type: Polygon + coordinates: + - [ + [-79.92169686568795, 32.768208904171374], + [-79.92169686568795, 32.77745096033627], + [-79.94881762529997, 32.77745096033627], + [-79.94881762529997, 32.768208904171374], + [-79.92169686568795, 32.768208904171374] + ] + diff --git a/examples/data/road_network/hydromt_fiat_catalog_USA.yml b/examples/data/road_network/hydromt_fiat_catalog_USA.yml new file mode 100644 index 00000000..40481d85 --- /dev/null +++ b/examples/data/road_network/hydromt_fiat_catalog_USA.yml @@ -0,0 +1,57 @@ + +NSI: + path: "https://nsi.sec.usace.army.mil/nsiapi/structures?fmt=fc" + data_type: GeoDataFrame + driver: vector + crs: 4326 + translation_fn: "attribute_linking/NSI_attributes_to_FIAT.json" + meta: + category: exposure + +default_vulnerability_curves: + path: damage_functions/flooding/Hazus_IWR_curves.csv + data_type: DataFrame + driver: csv + meta: + unit: ft + category: vulnerability + source: HAZUS SQL database, USACE-IWR and FEMA expert elicitation curves. The source of these curves is the Draft Report Nonresidential Flood Depth-Damage Functions Derived from Expert Elicitation, April 2009, Revised 2013. FEMA Contract Number HSFEHQ-06-D-0162. Task Order HSFEHQ-08-J-0014. Not for distribution, but data shared by USACE. + +jrc_vulnerability_curves: + path: damage_functions/flooding/JRC_damage_functions.xlsx + data_type: DataFrame + driver: xlsx + meta: + unit: m + category: vulnerability + +hazus_max_potential_damages: + path: max_potential_damages/damage_values_fema_hazus-inventory-technical-manual-4.2.3.xlsx + data_type: DataFrame + driver: xlsx + meta: + unit: ft + category: vulnerability + +social_vulnerability: + path: social_vulnerability/census_vulnerability_data_codebook.xlsx + data_type: DataFrame + driver: xlsx + meta: + category: social_vulnerability + +default_hazus_iwr_linking: + path: vulnerability_linking/default_hazus_iwr_curve_linking.csv + data_type: DataFrame + driver: csv + meta: + category: vulnerability + +default_road_max_potential_damages: + path: us_road_damage.csv + data_type: DataFrame + driver: csv + meta: + unit: ft + category: exposure + source: Bouwer, Laurens & Haasnoot, Marjolijn & Wagenaar, Dennis & Roscoe, Kathryn. (2018). Assessment of alternative flood mitigation strategies for the C-7 Basin in Miami, Florida. \ No newline at end of file diff --git a/examples/data/road_network/us_road_damage.csv b/examples/data/road_network/us_road_damage.csv new file mode 100644 index 00000000..54ceaf71 --- /dev/null +++ b/examples/data/road_network/us_road_damage.csv @@ -0,0 +1,7 @@ +lanes,cost [USD/ft] +1,240 +2,240 +3,360 +4,480 +5,600 +6,720 From e2e31ef9a623307a5429089ab09cbee568a4ff9a Mon Sep 17 00:00:00 2001 From: "sarah.rautenbach"Note: Instead of loading a yaml file it is possible to create a python dictionary directly, built upon the structure seen below.
" ] }, { "cell_type": "code", - "execution_count": 111, + "execution_count": 124, "metadata": {}, "outputs": [ { @@ -130,7 +133,6 @@ "text": [ "{\n", " \"cases\": {\n", - " \"new_root\": \"C:/Users/rautenba/hydromt_fiat/examples/data/road_network/\",\n", " \"roads_from_OSM\": {\n", " \"data_catalogue\": \"C:/Users/rautenba/hydromt_fiat/examples/data/road_network/hydromt_fiat_catalog_USA.yml\",\n", " \"dir\": \"test_roads_from_OSM\"\n", @@ -201,7 +203,7 @@ ], "source": [ "#Let's read the yaml file with the required information \n", - "#and set up the FIAT model for the two test cases.\n", + "#and set up the FIAT model for the road network.\n", "\n", "with open(Path(os.path.abspath(\"\")) / \"data\" / \"road_network\" / \"configuration.yml\", 'r') as file:\n", " _cases = yaml.safe_load(file)\n", @@ -222,20 +224,22 @@ "source": [ "Set up the root path to the FIAT model and the logger settings to re-build your model:\n", "- `root`: Directory path from where the neccessary data for the FIAT model is stored. \n", - "- `logger`: The logger variable defines the frequencies of log-entries during the initialisation of the model.\n", + "- `logger`: The logger variable defines the frequencies of log-entries during the initialisation of the model.\n", + "- `region`: Define the region as a variable from the case dictionary.\n", + "- `data_catalog_yml`: Define the data catalogue as a variable from the case dictionary.\n", "\n" ] }, { "cell_type": "code", - "execution_count": 112, + "execution_count": 118, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2023-10-23 15:53:39,419 - hydromt_fiat - log - INFO - HydroMT version: 0.8.0\n" + "2023-10-23 16:03:50,225 - hydromt_fiat - log - INFO - HydroMT version: 0.8.0\n" ] }, { @@ -255,564 +259,61 @@ "\n", "# Set up region\n", "region = _cases[\"cases\"][\"region\"]\n", + "\n", "# Set up datacatalog\n", "data_catalog_yml = str(_cases[\"cases\"][\"roads_from_OSM\"][\"data_catalogue\"])" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# **Step 4:** Run the FIAT model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It's time to run the model with the new configuration of the riad network. The output will be \n", + "stored in the root-directory. The output will be an **exposure folder** incl. *exposure.csv* together with vector data files, a **hazard folder** (empty) and a **vulnerability folder** incl. *damage_curve.csv*. " + ] + }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 119, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "2023-10-23 15:55:04,107 - hydromt_fiat - data_catalog - INFO - Parsing data catalog from C:/Users/rautenba/hydromt_fiat/examples/data/road_network/hydromt_fiat_catalog_USA.yml\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Parsing data catalog from C:/Users/rautenba/hydromt_fiat/examples/data/road_network/hydromt_fiat_catalog_USA.yml\n", - "WARNING:py.warnings:c:\\Users\\rautenba\\AppData\\Local\\mambaforge\\envs\\hydromt-fiat-dev\\lib\\site-packages\\hydromt\\data_adapter\\geodataframe.py:99: DeprecationWarning: Passing additional keyword arguments to be used by the GeoDataFrameAdapter driver is deprecated and will be removed in a future version. Please use 'driver_kwargs' instead.\n", - " warnings.warn(\n", - "\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,117 - hydromt_fiat - model_api - WARNING - Model dir already exists and files might be overwritten: c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\exposure.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:hydromt_fiat:Model dir already exists and files might be overwritten: c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\exposure.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,118 - hydromt_fiat - model_api - WARNING - Model dir already exists and files might be overwritten: c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\vulnerability.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:hydromt_fiat:Model dir already exists and files might be overwritten: c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\vulnerability.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,118 - hydromt_fiat - model_api - INFO - Initializing fiat model from hydromt_fiat (v0.2.1.dev0).\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Initializing fiat model from hydromt_fiat (v0.2.1.dev0).\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,118 - hydromt_fiat - model_api - INFO - setup_region.region: {'geom': geometry\n", - "0 POLYGON ((-79.92170 32.76821, -79.92170 32.777...}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_region.region: {'geom': geometry\n", - "0 POLYGON ((-79.92170 32.76821, -79.92170 32.777...}\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,118 - hydromt_fiat - basin_mask - DEBUG - Parsed region (kind=geom): {'geom': 'GeoDataFrame [-79.94881763 32.7682089 -79.92169687 32.77745096] (crs = EPSG:4326)'}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:hydromt_fiat:Parsed region (kind=geom): {'geom': 'GeoDataFrame [-79.94881763 32.7682089 -79.92169687 32.77745096] (crs = EPSG:4326)'}\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.vertical_unit: feet\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_road_vulnerability.vertical_unit: feet\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.threshold_value: 0.6\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_road_vulnerability.threshold_value: 0.6\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.min_hazard_value: 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_road_vulnerability.min_hazard_value: 0\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.max_hazard_value: 10\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_road_vulnerability.max_hazard_value: 10\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,134 - hydromt_fiat - model_api - INFO - setup_road_vulnerability.step_hazard_value: 1\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_road_vulnerability.step_hazard_value: 1\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,142 - hydromt_fiat - model_api - INFO - setup_exposure_roads.roads_fn: OSM\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_exposure_roads.roads_fn: OSM\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,143 - hydromt_fiat - model_api - INFO - setup_exposure_roads.road_damage: default_road_max_potential_damages\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_exposure_roads.road_damage: default_road_max_potential_damages\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,144 - hydromt_fiat - model_api - INFO - setup_exposure_roads.road_types: ['motorway', 'primary', 'secondary', 'tertiary']\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_exposure_roads.road_types: ['motorway', 'primary', 'secondary', 'tertiary']\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,145 - hydromt_fiat - model_api - INFO - setup_exposure_roads.unit: meter\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:setup_exposure_roads.unit: meter\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,146 - hydromt_fiat - exposure_vector - INFO - Setting up roads...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Setting up roads...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,227 - hydromt_fiat - exposure_vector - INFO - The damage function 'roads' is selected for all of the structure damage to the roads.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:The damage function 'roads' is selected for all of the structure damage to the roads.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,227 - hydromt_fiat - data_catalog - INFO - DataCatalog: Getting default_road_max_potential_damages DataFrame csv data from C:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\us_road_damage.csv\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:DataCatalog: Getting default_road_max_potential_damages DataFrame csv data from C:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\us_road_damage.csv\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,227 - hydromt_fiat - dataframe - INFO - DataFrame: Read csv data.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:DataFrame: Read csv data.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,243 - hydromt_fiat - exposure_vector - INFO - Setting exposure geometries...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Setting exposure geometries...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,243 - hydromt_fiat - exposure_vector - INFO - Setting geometry name to roads...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Setting geometry name to roads...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,243 - hydromt_fiat - fiat - INFO - Updating all data objects...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Updating all data objects...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,243 - hydromt_fiat - model_api - ERROR - Default config file not found at c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\fiat\\settings.toml\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "ERROR:hydromt_fiat:Default config file not found at c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\fiat\\settings.toml\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,243 - hydromt_fiat - model_api - WARNING - Replacing geom: region\n" + "2023-10-23 16:03:52,501 - hydromt_fiat - data_catalog - INFO - Parsing data catalog from ./hydromt_fiat_catalog_USA.yml\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "WARNING:hydromt_fiat:Replacing geom: region\n" + "INFO:hydromt_fiat:Parsing data catalog from ./hydromt_fiat_catalog_USA.yml\n" ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,243 - hydromt_fiat - fiat - INFO - Writing model data to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Writing model data to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,243 - hydromt_fiat - model_api - INFO - Writing model config to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\settings.toml\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Writing model config to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\settings.toml\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,243 - hydromt_fiat - model_api - DEBUG - Writing file exposure/region.gpkg\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:hydromt_fiat:Writing file exposure/region.gpkg\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,353 - hydromt_fiat - model_api - DEBUG - Writing file exposure/roads.gpkg\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:hydromt_fiat:Writing file exposure/roads.gpkg\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,453 - hydromt_fiat - fiat - INFO - Writing model exposure table file to exposure/exposure.csv.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Writing model exposure table file to exposure/exposure.csv.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,457 - hydromt_fiat - fiat - INFO - Writing model vulnerability_curves table file to vulnerability/vulnerability_curves.csv.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Writing model vulnerability_curves table file to vulnerability/vulnerability_curves.csv.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,460 - hydromt_fiat - fiat - INFO - Updating all data objects...\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Updating all data objects...\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,461 - hydromt_fiat - model_api - WARNING - Replacing geom: roads\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:hydromt_fiat:Replacing geom: roads\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,462 - hydromt_fiat - model_api - WARNING - Replacing geom: region\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:hydromt_fiat:Replacing geom: region\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,463 - hydromt_fiat - fiat - INFO - Writing model data to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Writing model data to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,464 - hydromt_fiat - model_api - INFO - Writing model config to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\settings.toml\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Writing model config to c:\\Users\\rautenba\\hydromt_fiat\\examples\\data\\road_network\\settings.toml\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,465 - hydromt_fiat - model_api - DEBUG - Writing file exposure/region.gpkg\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:hydromt_fiat:Writing file exposure/region.gpkg\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,547 - hydromt_fiat - model_api - DEBUG - Writing file exposure/roads.gpkg\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:hydromt_fiat:Writing file exposure/roads.gpkg\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,655 - hydromt_fiat - fiat - INFO - Writing model exposure table file to exposure/exposure.csv.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Writing model exposure table file to exposure/exposure.csv.\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2023-10-23 15:55:04,660 - hydromt_fiat - fiat - INFO - Writing model vulnerability_curves table file to vulnerability/vulnerability_curves.csv.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:hydromt_fiat:Writing model vulnerability_curves table file to vulnerability/vulnerability_curves.csv.\n" + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: './hydromt_fiat_catalog_USA.yml'", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mc:\\Users\\rautenba\\hydromt_fiat\\examples\\add_roadnetwork.ipynb Cell 16\u001b[0m line \u001b[0;36m1\n\u001b[1;32m----> 1\u001b[0m fm \u001b[39m=\u001b[39m FiatModel(root\u001b[39m=\u001b[39;49mroot, mode\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mw+\u001b[39;49m\u001b[39m\"\u001b[39;49m, data_libs\u001b[39m=\u001b[39;49m[data_catalog_yml], logger\u001b[39m=\u001b[39;49mlogger)\n\u001b[0;32m 2\u001b[0m region \u001b[39m=\u001b[39m gpd\u001b[39m.\u001b[39mGeoDataFrame\u001b[39m.\u001b[39mfrom_features(_cases[\u001b[39m\"\u001b[39m\u001b[39mcases\u001b[39m\u001b[39m\"\u001b[39m][\u001b[39m\"\u001b[39m\u001b[39mregion\u001b[39m\u001b[39m\"\u001b[39m], crs\u001b[39m=\u001b[39m\u001b[39m4326\u001b[39m)\n\u001b[0;32m 3\u001b[0m fm\u001b[39m.\u001b[39mbuild(region\u001b[39m=\u001b[39m{\u001b[39m\"\u001b[39m\u001b[39mgeom\u001b[39m\u001b[39m\"\u001b[39m: region}, opt\u001b[39m=\u001b[39m_cases[\u001b[39m\"\u001b[39m\u001b[39mcases\u001b[39m\u001b[39m\"\u001b[39m][\u001b[39m\"\u001b[39m\u001b[39mroad_network\u001b[39m\u001b[39m\"\u001b[39m][\u001b[39m\"\u001b[39m\u001b[39mconfiguration\u001b[39m\u001b[39m\"\u001b[39m])\n", + "File \u001b[1;32m~\\hydromt_fiat\\hydromt_fiat\\fiat.py:57\u001b[0m, in \u001b[0;36mFiatModel.__init__\u001b[1;34m(self, root, mode, config_fn, data_libs, logger)\u001b[0m\n\u001b[0;32m 49\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__init__\u001b[39m(\n\u001b[0;32m 50\u001b[0m \u001b[39mself\u001b[39m,\n\u001b[0;32m 51\u001b[0m root\u001b[39m=\u001b[39m\u001b[39mNone\u001b[39;00m,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 55\u001b[0m logger\u001b[39m=\u001b[39m_logger,\n\u001b[0;32m 56\u001b[0m ):\n\u001b[1;32m---> 57\u001b[0m \u001b[39msuper\u001b[39;49m()\u001b[39m.\u001b[39;49m\u001b[39m__init__\u001b[39;49m(\n\u001b[0;32m 58\u001b[0m root\u001b[39m=\u001b[39;49mroot,\n\u001b[0;32m 59\u001b[0m mode\u001b[39m=\u001b[39;49mmode,\n\u001b[0;32m 60\u001b[0m config_fn\u001b[39m=\u001b[39;49mconfig_fn,\n\u001b[0;32m 61\u001b[0m data_libs\u001b[39m=\u001b[39;49mdata_libs,\n\u001b[0;32m 62\u001b[0m logger\u001b[39m=\u001b[39;49mlogger,\n\u001b[0;32m 63\u001b[0m )\n\u001b[0;32m 64\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_tables \u001b[39m=\u001b[39m \u001b[39mdict\u001b[39m() \u001b[39m# Dictionary of tables to write\u001b[39;00m\n\u001b[0;32m 65\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mexposure \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n", + "File \u001b[1;32mc:\\Users\\rautenba\\AppData\\Local\\mambaforge\\envs\\hydromt-fiat-dev\\lib\\site-packages\\hydromt\\models\\model_grid.py:439\u001b[0m, in \u001b[0;36mGridModel.__init__\u001b[1;34m(self, root, mode, config_fn, data_libs, logger)\u001b[0m\n\u001b[0;32m 430\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__init__\u001b[39m(\n\u001b[0;32m 431\u001b[0m \u001b[39mself\u001b[39m,\n\u001b[0;32m 432\u001b[0m root: \u001b[39mstr\u001b[39m \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 436\u001b[0m logger\u001b[39m=\u001b[39mlogger,\n\u001b[0;32m 437\u001b[0m ):\n\u001b[0;32m 438\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Initialize a GridModel for distributed models with a regular grid.\"\"\"\u001b[39;00m\n\u001b[1;32m--> 439\u001b[0m \u001b[39msuper\u001b[39;49m()\u001b[39m.\u001b[39;49m\u001b[39m__init__\u001b[39;49m(\n\u001b[0;32m 440\u001b[0m root\u001b[39m=\u001b[39;49mroot,\n\u001b[0;32m 441\u001b[0m mode\u001b[39m=\u001b[39;49mmode,\n\u001b[0;32m 442\u001b[0m config_fn\u001b[39m=\u001b[39;49mconfig_fn,\n\u001b[0;32m 443\u001b[0m data_libs\u001b[39m=\u001b[39;49mdata_libs,\n\u001b[0;32m 444\u001b[0m logger\u001b[39m=\u001b[39;49mlogger,\n\u001b[0;32m 445\u001b[0m )\n", + "File \u001b[1;32mc:\\Users\\rautenba\\AppData\\Local\\mambaforge\\envs\\hydromt-fiat-dev\\lib\\site-packages\\hydromt\\models\\model_grid.py:30\u001b[0m, in \u001b[0;36mGridMixin.__init__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 29\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__init__\u001b[39m(\u001b[39mself\u001b[39m, \u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m---> 30\u001b[0m \u001b[39msuper\u001b[39m()\u001b[39m.\u001b[39m\u001b[39m__init__\u001b[39m(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n\u001b[0;32m 31\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_grid \u001b[39m=\u001b[39m xr\u001b[39m.\u001b[39mDataset()\n", + "File \u001b[1;32mc:\\Users\\rautenba\\AppData\\Local\\mambaforge\\envs\\hydromt-fiat-dev\\lib\\site-packages\\hydromt\\models\\model_api.py:95\u001b[0m, in \u001b[0;36mModel.__init__\u001b[1;34m(self, root, mode, config_fn, data_libs, logger, **artifact_keys)\u001b[0m\n\u001b[0;32m 92\u001b[0m dist, version \u001b[39m=\u001b[39m ep\u001b[39m.\u001b[39mdistro\u001b[39m.\u001b[39mname, ep\u001b[39m.\u001b[39mdistro\u001b[39m.\u001b[39mversion\n\u001b[0;32m 94\u001b[0m \u001b[39m# link to data\u001b[39;00m\n\u001b[1;32m---> 95\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdata_catalog \u001b[39m=\u001b[39m DataCatalog(\n\u001b[0;32m 96\u001b[0m data_libs\u001b[39m=\u001b[39mdata_libs, logger\u001b[39m=\u001b[39m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mlogger, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39martifact_keys\n\u001b[0;32m 97\u001b[0m )\n\u001b[0;32m 99\u001b[0m \u001b[39m# placeholders\u001b[39;00m\n\u001b[0;32m 100\u001b[0m \u001b[39m# metadata maps that can be at different resolutions\u001b[39;00m\n\u001b[0;32m 101\u001b[0m \u001b[39m# TODO do we want read/write maps?\u001b[39;00m\n\u001b[0;32m 102\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_config \u001b[39m=\u001b[39m \u001b[39mdict\u001b[39m() \u001b[39m# nested dictionary\u001b[39;00m\n", + "File \u001b[1;32mc:\\Users\\rautenba\\AppData\\Local\\mambaforge\\envs\\hydromt-fiat-dev\\lib\\site-packages\\hydromt\\data_catalog.py:118\u001b[0m, in \u001b[0;36mDataCatalog.__init__\u001b[1;34m(self, data_libs, fallback_lib, logger, cache, cache_dir, **artifact_keys)\u001b[0m\n\u001b[0;32m 116\u001b[0m \u001b[39mfor\u001b[39;00m name_or_path \u001b[39min\u001b[39;00m data_libs:\n\u001b[0;32m 117\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mstr\u001b[39m(name_or_path)\u001b[39m.\u001b[39msplit(\u001b[39m\"\u001b[39m\u001b[39m.\u001b[39m\u001b[39m\"\u001b[39m)[\u001b[39m-\u001b[39m\u001b[39m1\u001b[39m] \u001b[39min\u001b[39;00m [\u001b[39m\"\u001b[39m\u001b[39myml\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39myaml\u001b[39m\u001b[39m\"\u001b[39m]: \u001b[39m# user defined\u001b[39;00m\n\u001b[1;32m--> 118\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mfrom_yml(name_or_path)\n\u001b[0;32m 119\u001b[0m \u001b[39melse\u001b[39;00m: \u001b[39m# predefined\u001b[39;00m\n\u001b[0;32m 120\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mfrom_predefined_catalogs(name_or_path)\n", + "File \u001b[1;32mc:\\Users\\rautenba\\AppData\\Local\\mambaforge\\envs\\hydromt-fiat-dev\\lib\\site-packages\\hydromt\\data_catalog.py:322\u001b[0m, in \u001b[0;36mDataCatalog.from_yml\u001b[1;34m(self, urlpath, root, mark_used)\u001b[0m\n\u001b[0;32m 266\u001b[0m \u001b[39m\u001b[39m\u001b[39m\"\"\"Add data sources based on yaml file.\u001b[39;00m\n\u001b[0;32m 267\u001b[0m \n\u001b[0;32m 268\u001b[0m \u001b[39mParameters\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 319\u001b[0m \u001b[39my9J-}e zn#G&b43nGv82}s@oVcN)3cA8VPeY}rFOM5L3B>=J29owh1IP(o4Bn(N6$}!mm~HpK zdK_^}TO0W2qtHeFEh-4q>lwY5YIN&%{`@8$>ED~&e#HzRG(EmBOFp|jYrz;w`1jTv zkP^Y@TsL>Mux*_`M*ZsnsM~*5v@>SiazVC*_U~;rBMyUtQXU>tzEk{5Zcv^7Yn8Ae z{y8ugo59@xy8{3=`#-xu|3?V04gPc67q9-aT0>aZe{_Sk{`ikT{@r&I_FXIp|xg zq^{gx4+;}cRERD9KCoR^o%3J2O~lU>Z$2)HJu-~^Kwwb=undvVDtX{VGsxM7gd?9@P&9Z$U;-}Q3l zP*v%-jVyS|bQHH)^}nC+DjSc>D@moU+!Ch&$%8StUOM?mx|IE )Q9aug2Q0X? mmkC;n14vH^Rl6*|@sL*uXEz4-X4tKB0+T&-$z%lGYAh+`0lUi5jIo zS1iHp=z4zp{Df-yW9ats@L;Zoc>QxZeVLr03&<^mtOK7hjv6aH4 {ias~0DNh{ z1}Qj2(-BVWXdVeyp4}QeuN23zuFdE3=>> u?nDNegeGBED 2 zw8y=8)(O#ksD?Qv|DTE6%aKylM1f2;?JO38n Oq^*9y ~oq|+5P zdSE1t`=afR@OFFIxe9UvN+Tq5TEljVZRDt`tsY~}s+;Hf8jIlM@^)i*7;07a YVmNT4) znH$ov_?C&D2#zy*x3zIpRWf3_-G`BS*mB80@A$E`t#A`5@UZ1o2IGiAQX^={4m)vk zpgnYJLw$Xi+oWs=5JX;Q=`vWOx>_x#rk>}Keai79-y_%HiD L6SHyC@PaZLvp+Cq4bUYkk7+8)5w~-9qJ#S$NOH*1C^h12s;6F zi7^^mRA_ws_>5mk(Hg4r-#*WLX*aA8RP$WaK!~>r9d5sF0}#o>iLar`N@ )1 zOGEdq>2vdO|ICu4RT4!l*UQ$5&v)i=E=iLWbPTLXf#xSm_La@t6yY5*CGKrvXLUf$ zlvM>D2Wqq|cwB{g$ch9>mk!*0#v5#?8t%##%-!pTuPwd0R`#^TN!w-#Y1g9G(fO0h z2C%Rxun5?;=3d}idk!*m%g^_kuDTpQI*`t$qTX*L0kzuTe{N0D&9vlg*!VRTA*w0r z118KH(;Cv`*vf5+_wO4%T+<64ao;dX@<>E)y?(;sTc(JD>{~_fv_D7GR}^0*TnUl9 zd)TddOoy9NfLv-32F=KWD9nFJr%ffg18}ZFOgM*tL<`dbb!G0ib9)>X=XQpMmE*0| zA(zhL7B+uelSpw~Fj@_VT839KN}mC|6Te&ZUaAsx>gilo?kJ}k2;XTnq-y{x0$M^5 zDWz4#8t~h$$oV4F@uXYuKF{^!>jD)?n$I0{Xej_@)0KaVR4!g4WEMLe`_U{2^h?uC zy06W8G@2#+TCLXoO+@6e9GaVC75f@hDbo-2QapQ0b6Ho4eyApMj75MsF~#r1*)_Lr zrbbC5{=J4YHAJBL@S=B>olLaRnrB+~9^dkNZ3H*n{HG=;rH$o*YBsH_&&%fK#)I3v zZxo%`!| >wTL=b>F@g<{3qSl)rU9t*%r{B^ z^*YAs;ZILymPLol&h4%WSojyn>CH@JVnR~V2-alcgDUH798Qdse!EA|>1%yw^|@NY zipV$em8jHeOvl(x^*pSSX(;fA*ji=SGu}0AHkk~3w!%;QR7MyR3ezppoH7PLFK4)M zO !4Cf!$Zy3yiXVvrF(O}JfE3nu&F#HGi0x97LuG7Y#o+>a5Sl%!sui3}B z`Q2%F_RP$L@|d77a=kSIBVDk*ok$RC-ysF3{{t;ku%S(6wK&dn%?w#x-Hf2zu=?<& zyV)r7VE?c|+)^FCGod~uxEnsR8j7kEV`V>w64qr@#zm!ua3a!-_-^UtyR~#)CBeHv zD>fG8fi8MJIjrsi;SbTNA5((PO%lD7r~!LP@D_R5)=#>&Q{^sQIZ0@%qBP!nAS)*# z{k(<{K1H#$27l${R3 Dm` z&ztDLUgj! 1KUa*aGmQu&hB{^3-U8PIE_VSj49>)8MtJaUKWZcjYkPzi?3SJ-cCcR9V zjRmvz&oaC5E$;ig^pBZY2@*pa`2k4_I%2e(Xu-S-G H)&uHm0Jmb(;?F?PsS0+Q2eU>V7c0Chg zR9{~jA|_He< &qSS#bZJgrS`-ZbeEI^{d|4)8u3!!Bo?Ql zO{(kS#mwg! +Z2b(Qo!^kM+@ZBMz>e7E0dmJPFs!7Q#>IHrDh~+r!~`C)6D>4 z?S-1@k#`pgz}UR+)iRV+oW3d=)|lDFvEW3LX=Y#odhHM>TyhvU*}2%<=>FUeKT4ZA z*9j=Kb5^~@zZnNkWzkHVwv>FRCh#aJs8ysjVLB-x`({`<#8V!+vPHce3YtF$6*y zGWw~duL M^zJ`*)ZH!R&*JW$}6G`ehC8mmd{?4+JL zE=Smg5^2ci(3^MH`(0GOp+V-`9&?S+$9M&LRyvZ;PB~ZiNv6x4YlxpUg7`%7yC)cp zVsx76+spcOZ3HWJjtEm~nE+ i}{v^Y$dGJ BjgdW7982@E69@Or+ck@lSZ>XLax;3V`9TtD~hiOu9XM^KqGZ%9N#~eV(MIPLu zHV9JR-e9-nWYZ5Hs2Kv47U6Fugz=bC0xlB9M$PMDD$`7wb;GPU^T>nneLrjRW|MFa zz!bn6lP6>Ya)%R{ZC?zO_o&(TF-62&*zv5B1m5wf=x+&=4f7}Nbh(dWnvEcRBRuAn zm&WRX d#1FqDj!Y8O|$9u z8`RYEe 3XV;eXM^#+7(M3p~@@I{pR`LFpodCagHm$F;WEWVr9w zI-lg}&wOjJUkndF2&cvklHMU^C)jP}er?`F9|G~WGMgBc1R18kf~B8Qz0GIy9stH+ z`F7hu7yCq(7PHW5C+Ekt-Y@n;lyM2* *Q1Anp9p@!+2(VA}1O0LG1vCVgl1sSPu!6lu!U0cfg| z7{QYW#-EG>OPt#Kp8+}1#>lv@+49r#g-xFt(8bd{;)2|#Z0N$8839KSxXJr6E3;tD zI578~oyoCs)^&(lWk9Lr!nU!3B7u>9h#Bxg#U5$#%8sK>i#6l0Q~zB=jT!aD+2Igq z^dE2)@#V)6V8plU=#onv77)}Vi9>3`TfQN8vEhOo|N50HCL71l{@5Bx;6DFDi0Ap4 ztPU{hk}F8J9&1KU6$ta8<*G(F*G7+Yt|gzwu3OQt=q WrdA6?iN%i3h+Y)F&>09p;^&tpK zKn&qg4k~}bXnXz7cOh$6D67>wdI1*io_>0-dk~5|-d$}wXFhB G zsuxD)i$Vsz-o4xuil8KXsIRkhbxr1^>Zo2_+4~?Z WWuV#?an&<^GD@ImaHGUd~f`j+15CJ8N&DJ$26Eb5|>TxbL{Nq45&wH(A6sX?Unj z17I1Z*PbZ);`LGWfa&1Ok%Ta=QhswWp0Ysru;fahdO%gEGLEpqnGu@f`AFBa-=?~% zlAl~KiM?0u+s$hUi6hz!V>SBvRZ27dN78TOL1b=3F=yz08o0w9jVymK(d5p@Po7Kz zGtjEJIJ*46gz%}-z2 =lESIRrS3vZME9fM3(BIx6) zSKDE2dXuT5=T6nC<2S~`GREaoPpCCXzm^CQk9W{07{Draq$_KgqNnOS>{I&_yB4y_ z)v?B%7gRpB&pOFPG3m{BeU@wcn)TPCv&Q)-tE+zEARXXk%~@lLfe7y?Kw)e}X3UhW z>6+Dbe`Dm7ljf5SvJH3WRW^}pW`?gG@|#Q%R7}r4!E8_behqztYe?<`47c;Cc=!R# zG%2OexU#eh%OX%i!Za#jwArZydH^x7ezN&xv%lt^YJlC#j=LpTF7R>_uJ8XdNZLrj znuJ-vwDpr2P^%WRJmzD*{k#F}@_s8ugN8irVKf?B1?$wUu4J!RDOD4OvjqMcsi7A& z$&ySME+>qieb?++0A;!}AINYuz#obNcOEbW8TOv3p#EG3$#K_v>U^?BExbjX`&LU1 zsHHXnFHg^aH5N+b8QVM?l!skGhJnm%T*p1nnA+RCP>M`Xe5Z~6*oXqE|2tAL_6>Vt z;TReV^Q=3<%l#It;!Sxsn-~7eLLbNLYevB1xm`|s4H;I(4e3G9+MHGHYC{@It(73N z7v*pTu`g$3^~Zo;I%prO7bz1;crhV%^0Zc0+jHqRcGsI!UNI4YJEyt#Nu?!aqzeuB z>%(;wGM=x2upnMI6!(an#Nr~HP5+m%YKV}Gf9^TC<-BUHkBVvF6Pp)pH2BlG)YES* zA2c-C?bl%f4x6b!_&Urdbuh~(dV^lO_#4LQxjw 00vr&ff=BWx;<$^Lw+53pBf WwDnvCbNFAlAL7jOy`n~k6-q$&HC^%C*>o5<-idtY<-q0J>=(q^yRrkI$2g5` zYhA?j;2kba(~D7lq50BH#iQG_0OF3;ZSWm2JKa3<7qz&;57$ z`86=xQd!;pA+>R0F`-@bN5IO JrWDosX@ZLa`OzPh%glcZd)B>%_g03W_qgi2Fy9SZRPS=%U>HQqK9p` zI+PtA4)kXqqN_SYDfr3(y^RN%>w?T-5DxIJ2+cy@WDq1}+;c}d>`pow+jm`+=%uNo zSipW`CcK09`j~;! {z%hVD1M-rD&1@OLB#Xh?9*Q5kP!@7gSYu{!%< z!z{RQ(W~Q(+Me0gT$!ZLaZm81>!Pwvb}kYnEG*l`pp%}%&Ri>Y8>n{VQ1Rn}bx3)n z>$b4(k;vHz(YY={{5Nf;GD#vSNy7ktf+tDA9m>*1XlabftZ%nD&t~rG+SA+vBw|G2 z1Z)Cj*vh4ySEi0qxsS#fM^s_8(9n3hF#y_}_rozq3u%v?^IbPvj650~{hi8kcdN@k zlZ)ywpe{)RK*BQG&gq3$(Qo5N4~{I8$oEW>)KBT(Ao8UVWZpplci7 ^*!A)});cd5I^1!gYCzUMFM0G# zeL;b5KZ*lK%l?&$4EHnSfGc>8Jrh*39vvgkB<-))vDjM67H4$)wv2c# QhYkQww|XfeShpS{>BmN;zR8mJr*joE_ot!1QB|4j z8bC#|v;$m_8HB>vjKK~*nDfY4AQB~>3yiVg!g#|qV{n%|k{RZ?xL}rc86v!3MWAQH zKHY_Q!I;7ESKmbN zo_PPOCTvt~*-edHboje%s1&>Oy2(XzxLGn{@3 zc+gVUK7%_x7{{rYs%|CSp^}$5+|SUkHrHZ{-n&wH0XGUn3s1K mo^W(9^So)9j- V{ ~za({FnG}|OlbKc%z!=v+pBMNg!?*l$ z3s{4(K{< !+(>J zhRJSSmc#uW&yP16qMT6X|I-to*O*;lxaWf5v2rOec6al?^3SUu2SGuGrda w)|6r<25d=(Fiz;)i3^yEQ^=-15AaOn%?QJHGYPuE;d?EOQ!k9((N3JJM zMaCr7Q5Or0KJLNtHh6p-=gd2KSvzI{2~SL>fD@ao3HNKNb=C}N*E_y(7lJUIhqWRj zHWH`fz_=$6IrC5uVpmh o_7vT#GShM+_;>Y`COY- zInFU*%Ob7yC%q&u>)+PD$)4Fj1W%*r#+aJFo)YuvmNj|zXaJvZXY+E@(Y5mOw4zFS zdolL%IQH$%=N9V)p7m)o|FoA)4=(fmPoa6b)058~+Y3@+TMIsJN>LFToD J_gtCTPpiP=<`Zw!aG<7o6=u8JS+A+rd+#HQ( mo2nol^smTv%S4~jMHRG?AqwOaz(e8Df3%f z!;vxl^!xoD$4TU#-%UPREBLg12qjTvikB=~GNeM^2g25={fu X_A_rHU91;@SDJg@x$s15K3GTpo_)A@7ma%-fBFj#MO(GC3 fQ{sO8v$=ex)EUkyH6PXTdsn zw}gqj;T|m{sa3*@K)xrNMnlQO%-{bhkhU#G?^LkV+-EJ9ZPIP=WVYB?e{8hOU9F!7 z$Kp+?!CvZz?T6T9i0z^iYSiUn{*9{*O01s4Q%V7YvcigfjH67mcT3L%j=;Mz{rcyR z6J+1>4u)}#lq*D3i;fK?)u+Rl-zx+pP}ku%3F^PPDP|L;{v(|!JbgdL6QwNp)B}tv z5a&NA6jvF8r#}!*l&apysyTEmx_4?Qx=7mjja?L=c&54V{v>-vWoZA`+Vuj{+T9Lu z?};=6Wy uio$YieyqMYLdW{WP^hqL0kyhJS%j|?%E z0&G5(DZQS^YW_}9eKdp3n`g4V`zAU9banrUh? Qo3q;CPrV$=)a@y z8f8pS@i0Hrj=Y?O;*Kjp{nBtGD7l3b??;bGtfNO?Y#rbNd_>J~f0imb+4VI*?u;V{ zXaj-cj3F&mo~3kXR(|c&KU5KRBQau`CC@_a&mkWUvI q#x#cs4eVK}!U`e*1&+M)9*QaeCo83^KP>JyqqesknoD0kJ@W5Pqn~ zcY)axLP5qojm>$`f!dWqkSnLyOhw~ O3}T(T|y^T8~4RO?>CBfrfo=~taeMDUF~uTHjPdJS)@n2fX&!%MscKM`C@&L Q5iKn(XyvRX4$ok7|1Hq KaO34wl+ z_v@g@0KXz{4h*m#vBiX?UJatCn*}-|<4zqEkDU3H?hz= so_)<4I7O3-XhxA!|iMBe=H89Wd8XY=8xcYW8M)c z8v}DR& 3ENZ0LmT7TyFUC+qS%WK{v7weIi(Zl%UfoD%T0KP0DvBm5QDC@x3KD0`~;Oogr* zrrTQJ&bPZ& H-snqfY|9|WCj8hly{5%j zJEEu{G2%a+7BOJgGLtEKM)z#qX@uvz_ZeQ#nzd~r*gMpJ)RFwH9t^9Tu#71YY@e=X zCI#Y$BUv!wP4=UjYmQ5cvs%p545X{ofnPs!uzs21CnQ gj3YPHfOM45_M*7^yyY(m^&=?- zquQ)Mvsi4U{&<*=NU!wUmor`;y5bUZ0+tWhKXJ4Hh@Yl37cv!S9oVR*AAq=6457Vv z*k?1HoyBARzaB`>bfX96k9F42os>l$))9uT; MK4678@iqhNm-(RsCn>ude=nt zZx()}gx;QV#zeiry%ZJUN-nU#;CfqaEu;u_g*hV4cTGTi% vCcSU%JeXL??W5$pqzi| >LWO!Ac0zA{-b|^f zEO9vxE%qvJE}|47hsg-#aK|2~InBr1{Cw*vllFU^nn;3FX?HHNu%psU2=frdWiF{x z_sl88_0m!pzc;x$V4a-cVkgUUKp1{$jVGkAcgJsc#@3x6%Iy!Q9b?gTZVt<==))ED zJxrxv$x)j1$WE|rSO?s0Ykxc=C|#Br_Rm>S?ws42_!!e|XS3rxJJUw0c==9DM_$~u zf2r=p^$Y)PZWr@h$O7qsFdR*VM8JMBt$cGXI+=UXyD*}m5tDo`5RA9DsnqxUtl7w~ zZO}lIVFcAuE6-%Mw(~I()?NF&b)RA&l6lujk$VQ_R=WD0>BEC8be0bHfb}lm*^v z1MqG_ke9j|%B;qayw T;{@`cbaW}9wF-W{YNKn+E+*}W=(|mUoml`EgHEYR*mYN*QA*Dii&1EF0PD< zxSw8F2S@#SvKx<9#H@r_ey^;I!K!Yz+5ZaINJw@VHGuZEwzjk4G$91rAFFaaxIyeu z!MZ>)=VL#kClvaPvjCF;bx(r;hjhcNA9ZrC5fQe)Ud_}wfrvOV$nLV8y=W)2F*EP1 zIrBr*qXv$u6bWz1)ma BA5@mXE^oI`XjoPtRDZT{Pe{*TfmQT1$VaFx@U zGypq25HwlxTd4g+>LHybL$HL`?pm<99;jnGsLfjV0z3FiuRBgWm>!KI7Y7E~x{=uN z4~di^?CAEG@V%#&lPCFH&jc$rxfeRGW-giumMC2pfO_^YgP^u`eon(zG;i-)E%=~} z$HYl%wx!8e1WLW;8Bji8r(_pjn(xDL2e?6s|G<%7Rx6K_NZ5A7n3EgIaJ|yI@@V$^ zRetoP6|&W;5rN!8R^283pgc+6)j5C-{}I*uaRbo31H92J!SiwVP!gs6g!VI$y;jw3 zU`lidC4KGlDUByPH#hp#mD8WkIxqX-N|3C|$Q~ocINH63wIM9%GcyBAO0{SF> #7%{S)aqIq!9>$2^ z?ufbT9 `m#OE9{7_5&Zq>V|B*N87i&UC5X60U>kS(f#h|+pB!a1 zDq?zScE{z#YH@qoF#wdsW#%zxeEoqKT{6wF-9ut&=*le2mXf?34^n6I+8bq^^U>># z3H2yj &qc;$Xu(4yf0GaY&~E) zL2 fO^M+i~`CyIw4KYlKE_uZtbp9Q@Ddjv5D& z_S&(SulbJbNTOn0N3Z`L69!TwhvMUe8bh0Y`jQc8_6CrIy{*MBA1+^oR3Vzco07L* ze-EjAKx#V%U;q5n!w4!{z>K}*rq#sf;NwoFxid}86O~ZWxM!uF))71Bm|CHqPyMBj zAH|7)>oY&24VJ(&ncPFq%k?JM7kV|?Vsx6K G6iRYttBkiH^d{Qfajzbtx=T8{uW zbhHO59B sx) zE*e`KKRkYrwH7dN*~{oqNu2s4t?+JcNM!|<8nRDeK_FDzywukIR^8tHP?^D*2=soA zJB?S>qLIxcCN!A6B`QJrv*1dEeWhdKIPh@dIIt>m*%g4{^sB(&iZBL@`|xDc&q%4h zP+Fze`1y>FmVEMFCm{LAb^pyO!vkZ0a6UB|)tPOgF%(q)i<^yfSvrUJj|A3lSpM4k zfgP1j*uSdP3VS()0#HX254#Da9U1fN*bWRcU{LV^D!$+~WbJtAH*Qg|IV>zUfD`v1 z^ZN}F2|Vo=37j2Il1UCWQZYZD65s2LA@o1D)!)J7``tGA7_l z n)AOwbj2G- N%|fJ{Eu1>sQkn{-x-5&QV~9Y=FGJU_BG4 zCxo0WIe<^~S *1#nfrFC%~+~F63wlxq=(9sB-<68 zdr55FZuQR{_Vv^rA-Gy5(clu)>UI_=Z0o*ijCquSY>U)lzH5SS|Jv>(!JYF|PaApJ zI-S2%&~NA|Dp=$=yWx)qWBdUPAN4ntG4K0ty53C|ynIiJA(9)|$0a{H=PhJ~f (oY>(6TYsbr^d*$^&P7)~|T*y$0In_?< zUmsQc;|Zp&F2%4qw^7l;yOfZbWRY!^MAdQP!_TZBogBR~Jdp);uUM>v=$?aiZBL&p zPs!)oj~K59jQWLsFB1KbVYW6ETL+*8asx(k!&j2LVyu6@N#Udh1!otO`)wM@yX1ay zXGeE9{%_h|JMwM@I{;TK-&`#_7K}m~NKGc8^&20XPYJ89=$0-?v&&G5<1{ 4a@5(id^YciCGd=bxo} z&xU#CW(FJNeZvUhlBI&X(ZrgQu{4pnD5z4%F-C~wLGkC~NxNe);7@2#bbtjTxDSS; z%;8zlFtQlO)2FWN=e}h2%_;;e$`1A{Lx=wp?#0(*axoePHYX)R8NCaci%vESwd&-j zsur2>|3) E%sr?=e1ME?;nJeieLQzt~c&b$|52DWA zTOa@8gAfXG>6OBMQx_fGll@t}8;2$r&1L{Y9f7XK_EwM_A1mY{5Q1Nr4UG%Jnx8mz z9zOiNT|syFKngasVW~%{4N^NO$9Fp6;{T&5BO?D06>4-P!H4T_Fer%qxLYV`u%L@g zwwt|m^!yn$d`t&=C_L`tI)At~kM?V!vGZ8*%z*^c>4cNPjwDc-8m%k6BiA|5!bOao z n-(Z}AV=g6@48_jiz8>T6)i9_3>|KEDx)Nk60g?R@$-Akmyb zL5J
cWvcL<({AZwXgl+) zjdkVxi*a>>5u+;=!k@9OWTj?rT1U6kF2L2#oe4ZL!RfiL Lb4{i)2qMWDV+DXfPQ^hEds}he zIa8I|8;yoQ@g5^6GKaljA$iVEG_u(0!nkQnsI{AAVm=&fgk-c`Ac&X3XGNk5&b~J% zzI ?#QT({; znEb8)0(NL 84sp?c>hhW&_nCaq zAQkol@f|38EhFslisD{gkYrDtYqXxp7zb8BxyA{@gTPcFAjlGHoRX&HM5G6d#I+al0$VHGNzYrYbtkGmz3oTmGIQthMA6u()G s@qIV6g_Ccb?%2ym_^43o zvF9ev5NuRBSP{h%w{7qxTXw3G0fwcLcH}l7DcJ;y@|6j-b9L<>nVfbaBvg6J*WQ*X zh! #5J{w!5ro$!QS z>{%9FUcSXf55&@ZxNJ)!`LpXH^O&2nZ2KOg!@XpW;PrsDS>gY|?5p&!*AAjA-A9++ z1!-f@zB1~0`U~+0PQModqj)%vE5(C@dn`!4V@grTq2hB9B!4h{`^{N-* >YUj-0q-K_RvXcz6LQ=vcXVD`BZj|SI?MJBKo80?ivwB>Gv#}@)NGCgjPe$ z#-FpdOj?QEN0$AmM09wZ`p9|sbyT@jr`>PZqNBwP10Ap@lr!2A*flx`kp(fke*b3g z;o=A}6|cID>Q%$s(G~jSiHhsbArs bZ#7$BA_#nMrOIdtxK1U`pK{UlO zz>Pm7>s=X3mIZwpVPH~XTOt+U1|5#%2Hl@G#urMC1~EKsUVuhOGJ`ckm7doqny#j$ z3YaDPHaD;_PQt$8B<22*8V{X|=3AjP%^3p5o#TwXfz`A`@&kOXRSEWmkwT+PxOb>9 zU$k_6+!crW&y<%`Lv)3{YlZdXHg1DjT+8msFlvdyEwG~^LqQ3)@j2tv>;|7sD*SwH z*+y!^(ypo3avP{yr?`LBq5r{6@S;)88CO*}+Q+!2pIMljX+Vf_Jf_gmdmkW 3oNQ`?plQGk)0K2gw9Sb4&OJ=|6Z)i+thtT|yxSlfZ#atS@~NSk&f z Zos AbVy2bNj^l$mHj(2tSGruit zpy^+Liqz!wYO(vG%^}%uI`H%SS!D!E$tS&D1-UaBxMsbRZXIFA-Te_$g&>`Sz+Qr6 zK>ao_ri*$tEwOkgAxouiBY_$)xzsQF>g#r1D90Ez(4gljr>^b>i87G>x#y;d6uAMb zQEEJp6Ag&~jf2QtjYML9Ks8$6lpybcm;%O@C=0+Xpf##!rdgb22m4?R8e+g` _Ik3aKw6LtaGkxx-iKaDMS5LHC+I+# )brWV)rz7#b(Q*nI7t<)h$Su; zjoK($Wya7$GNzJf)KxMgrRyX6(AQ!oSVkO3g(fM43}u$O3$e!&yMqO7?OiplA6>~# zcU;;pNMU}Zs+7u~;rC*>?HMl{rJMVK0&jG* 5 z7!huvE?*!kbg$?G?#V55rwHvg7ZSr-kQf(@a#RbI?m0T4YlY{%L`u*4wyyQ=kLw4G zsh>Z1iAQ5&mQcbx!K z--k|z)u&baQ*T%PCKsUOu%|EFpPMfbjvZf;pKVul9mrsJ;hIv5T3N#d+S$1p9Os6x z%s6A82h7=}n%=U?KTh%UTf(QW>LxQU zNg6`PVs=)7t)z~M-Q(DGSlmBnRGn5BP$i%6^Z>PyS6a!a%?j!#vUX#Avc{SR0@?$> zRCK+LTXZo`vU~JCi`qt0j!XPZlr{|T{!R1>+t6)xqX#j|NyP&xiw#looEyyR2pujs zc`WR@+oC+w3@N;WE~86&ZeMMmIx`NZzdq&rem_Kx`)2Yv-Iw*^mild5f5L2Fp2&8- z$R%3n$_GINmi1o+q-oiTwo>jNU%Rb4(hc^%wfIS%7%J+s_&PntRHb1g9{fpkJ`e@M z?(m;dnE#y^iIqa & z3?J}IPwg6sl8f|=?Y_M7f6?`pVNJi`->^zbcf;sz=@`u@kuC{gq=J-44G@ry(It&a zcS$#+1f;u>7~LbE`TIZjn>+SmuXcQQ9NT%F*Li*F!dOB%*-CuVeK~9KCfzewA($DU zEy7Ce8QAcc8aL-H+BS 7?TD zwGSkTX%XQHRR&?thk~CKD%>Kuk{l*A%`*I2z@n74J;_}$5&W%H0YQwC{lMf~=eA^2 zK+p@aT23T$PqjiSSKM^G>-x)J>imQW`ek?;JDC01Lm0!jOY+KbAzz@&Fypus{2lw@ zk9EUiqgKpz_q`6Rb~I@CVPq6kdvypninD(%u~GH$hHBAmC(AR#sq6E)AQH)I?DBY- zgA#gILXRXJ*Z_V66;In^mfJ(5%z)qw=&eKo)|b-Nm-y261WOE~f7(%e9e|pp5XJTI z9fv>pZ*!}E1a1{b{vAsAvV%1(EzC*>&W*U^A}d3CgGjZHg$34B$_5G2O>g|+rTyWk zhz{{vJH?k}C;A??c 735jko*TI<&W>3K=#YX7CfzvwweQ>1MY*b z;N`HSZRC-~XU|3Sk2nDHV&aa@S+WiGp|QM!(ByW%SNQmc&F>>08#6mBxc4_q_-DKT z^7_VZ{e=2^NBTPtK`+QgZO_iny8*5va=Y!zaWe?rg|Kv~MWH_+dC$#r{BE>l(cZ6e zGwvqZmFrr@SnqHU)P5-4^?ZLPHt=Vr(^=qb(h@IOlzin)n~MIChNVpG%9r4UAelor z^JjsG+;GQ>DV-~8ivc+W{aIhmJR}mWK-7q!&V4m!g*D)NRQ`2U+KXx_!aQGc0{wRv z6;dzLvmUzqFS#VPr|aL#wIXPn35g(v@#xirTiQl>#1bZ;uPYL00sm6_=;tRuVR!f$ zNN5x=TFj0DHy9L_6kOy>pQ*79RUA?rf^hp8lKU0TPTr-Fq1b)LK;L+X8yBj6Vzw_P z=}izwpf9<#H{vUU??yHAFS+nAi>#tXlsC#*-C3y|+?S7vocatq auvqXTLV6^`Z&C|(CPna(i#Azr5gcRqYT@9 4$HZ-bhB~C}4K&dh5x^ZeNnBUQh zP}+;MqDHfg0OT@BV8!EHHI8a6V5ILlgtwRnX>Ia#8hYogaS`l$p(aEChe-OG00NSv z!)ywL^y_?~8f7M{D-&bPbgrWl(LWurZQHH97d!>!CtL?yi9(y9T~+5KICqj49{D(U zVNn}|cM@qAk=KOhQp|!I5^vCutmHdI!e}cmM?V~SRRAtuVM3rC^_{d$B*@j-vL7t9 z^!zB&nPTHKDhaXsq5WIv+nD|hg6NytT3V+G!Vsp3<3l6_pom`=-~NSorcr6_@^-GQ zw)xNVn2Jf(LYlr;`HPEqyvWhvrx7>$y1iJThBgf7;$^yaiPmY>PPYUwf1Zuciy?}o zVn@y6>>;Y)I@bQu;c9Bq|2+n0P0I1XoOMls1ImH@ikQt+!^biCnZr}>uD9(G3sP0r z4ktb+T1QgZ?wPf}yJqC)-Zqk_aEqg{=>HxPv_pYk2CWH4?>u8EFr7JcD6r{rdG^8* z(58G^RC26g)yCT2(@xt!x@fv;kz9L(oGw>SU3>-3wIQL+Z}aYYJ@ZO;rFNbClaClG zXSrsszuDaN!OacDlO6avLWk-u-aJXvG$6gMi%f;S>PUmM9Mnyc>vhHZ-E;9GDZ#bl z5Zhs4&ju}85VSFPVG7{FG0Vis5D}0YIDb%&k_?`Y6QY5u7SXYX7zCjFVq9jXUp33a zZ! Hls-8(L4Cdx&a#T}HRl(&To zK0CZ*FwrSEi+C*x@8+Mgn+bFm%($dH*4<#kB89{V2ntFVDAxf3SgEi);*IYG>&bVL z>Hu~+Q-PPv#1H&}QW`qiYHA0;I3Jlh%SLuPMWl6W_N_{|5(hi!8Havg=n8>Yhs0lB zG`?CYo?Uj;kjehtC@VpR%2Oa`(TZ_PB+X3LGx+SQu0JMgAA;nV(8B5&x|LX?j_5D2 zCi`XK+Ajbm%}3I{%@p%59-4l;`c0Z{vSpz3U-fUsVx=~wL+B%ww!V7#>2WK}|9YKd zy!p)NPr=g?@5(Xxu&a#GtiWllpqM-nRTw $(%(d+Yw`KJQJu;jyqN*(Y#ennWhBl0|%>>){Q+#^z+kmc|l>vPvx!EleK=XITg zCMk3yX?I;Ub98>+zR#m)HWChRm?osp_{H)1rXmrH!cB*~OR<3DmDz`JK(gN<;~v*o zu!Vb~*8w#0oOJK!tXo#>x9>L2-_>&lHAu*87l|6^xS$Mvhd1;Ksx5oW@t>dDR{JOi{vW=HM z^vI+&<2Th!Wh>rP=u&hiUXby|O$G|DW0>MocA )&lq zusJ#DvC-NS`@!ulQe`3P6&su g?@TW*4p3rug T%jYxN&gh<-g;F`LR>Luar5i4lvKHmk1hTpqQCX`) zVSdg>?W;BZNXeuug}8{@3&C&B`8Z-D--jtEJrp+BM(f2Cjhz&jF 1GeEe9P_iLsG-X*R1CWP gi#Fky-1(K)%KB1HyJii%uW>HBnydqkWir@F4 zNi%48>+Us>#_XUfKachOhtD_O3_6y z+I0@eWqjI^gq(5hLO-0o>G>;gC598sN~L*UsV#U7>Ye0wh*@uwh2iJ7IOlUJVb?aN zTp?pPch`;e`!o$RuyKFU=d<&}B{SXTDf3t9!rZ4Vv~ka~^R+`CjP7`fo8ZSxM`Yfi zpE)@pCK^3e43Tg}4Y%dZ``2CuVt+nU?E7%KiOqXh8#wHihq{R2c(f&7w6|4eS;J)Q za4-BJv=;@fZ(Ug~a#j?EB{7=qH3y0(q_jYH#cs*nR}HwmGyNVxm#N|ekBgSR>mNpi^3$vlC1%KHnRE$$ zTzz)w2@3cy)8ORydhN8uAxo5gVR<&8-oHV+-kG!RVpjL<^5gR&m&{xn@%)-XOcV6| zy;nermubfF?DRjrCcUT` hdMfiFQd6~2Ukj3;AX8rzsSQY!5$t4u zz^o-rKlJ!;f*W8Wq3NbI>dGGcbtU8UFSu1cr_%LMIBw2`wpVodJAP_2++T&P?OAbR zWt2$`yqBVEReo{PrMQ+bxE@{%Je flmd^=c3Rvis92@^ln0uOQ3qME$EyXizEVI-W1%8nTtrLA!fy#p zo*kICic%o2pV=HtfzB%m`#p{st)bp<@;-C!OC3Q71=B+1rHo#~RV5-f8)r&`6o0Z) zA9 @QYwML&d3t4QI9HM0IE zRL?P3vwu BpBZFeAzco7j_5y=81gTBf5iBlBh1|9zX-tpU2*86HO5~X zNEXA+LN-L3?4`)yJ=Mg=1=rRQbQvHa(V;_jx%Nh^T8Pm#^j!m`t=3T9+f84v(3{WXCl@R!3-CVJ1q!M#pyZgx|g;0OVnPyKn#4Q8$-Eqp6GMp!Quj zDD*|2#>l5kW~&7Wi-Nf@gGYwxLj4Vb94rL;5Lm ?g4hVIzjbS;Lj5z~+QO>^iji12G=KGG?2>H|aW?09*z_ngc(n@y zf>MZBBN5DuBBuBW`gjd3GU~^vu(=Uh5#3Y} yNk)GXO) zkv_z_q06MOK4*t`2226{Y8ws<%}MmS&@*GL*r8x1Qq`4W%(H*i9gm6IxbF}^jKq+M zGx5z~{wD|pp%KA<>jwh^9ZRJJQg*&JUiurUB$mUtzZJDPnFCzp84}X?)EAvT8-~^P zZ&ux0tCI{<+Cu)XO)d#y48>HVGXuuH1aWbm8XZW ;lA)cR7611=)rOZ6 z)SeO7w{Z %CKa~pbN9`|rP6SYj{rPDlURbD!nef~@- z+_!1H#e`+cL-)*ide-A~?jgbdKA-P&$)qvorIFo88~MGk3_r{F# AZ=C10+(Z%JMnnbv$F}wmX`U{>BaJJ(dm|UsNM~v#jx}JoTK3}rws7^) zeRq2Eb(k?Q8<*@b!~k3s)Hz7HFNl+f@xOO8|94~jub6TmIQ=NfKMU~XBc9P5ON!+| zdTo%B*E(rDvq+@cOk}E9zk55lW^kfO=e4TNld8K^MMsJ`_;10|s+avQzX6m8kB+IG z__9^aVLcldQ{zLvG{~HuFxgRB-YE$_(nJ>)X1Usqa$@lW&*`b&WXo%9eSzFvZZW9d zlOp;>+g0b|`C4xT@2@-VsRyhR_@$DDGEj&uzCFZ+g|jY96x#tquVplcMZ{` @V@Q0%|j52H(a@EQ^jc`87bI@_G)nd|W%g9IqNu^~;NGTR=A6-Iqk z1(E78^{-kLQ)e{o8$$l-_^~go<}iMssax*V80Y7bKzfvyk=)26wyTAK^P{XElmSgL zZ_p`eJ8klR$)ifbE^%HFe{Kp@i7fv5!irQHl;vC7iyWjU?j99f-sfU!UIFr)!a$+B z&97~QYJs}lKPH*Sl$Dj=^$z@{rlShV>yiuqm7?%##|G2m@p+JwI{jP?#funG`P}vQ zC$qdH5CEjGL&^OPQPP3(SP~_>ctve?n+aJYP->chMFO2I&^O+GoMc-`SJK>nY)s zp*u?pPXg-MZH((S$L#}^j(=}948WWg8xrlK*%GS2Fg#r;HGWCA^OW)nsxbS$$HDNN zIgpNgM!J_b1=&MsawUmV6VXOkc3y+yrx?!4kfu)S?E)G%eVI|d{T;j=(z>i~^NLs^ z8J@4CF(VE|V Hem{(dg?Opi`VRkWBcg^g&!nn*c z;NtyiR1_k}P!Lh{jvM}m^PfK0^W8J_`-e5$o30)Fpwhqou1@E1rT <$!b{vVIWZ6_gBwE%S*mGx4NK?`kp-ttPE($L)UES-Y_(dEk?hBAEAqy zUaoN5OiYFqy%~Gjl)E`9g{{TY;!af>g)&Lv3HcUPR*l8h-^KjcFM>yPie}5aa3=Sp zQhyXuxT37F_aOZqsvIqh=%Jiio3Me|Q@6583rM4UXb<~uz(h@wV(-(_kqfF}OT#4i zd}{A!u?|GP48(fTNKH9?tpCA`oth1+MYeXMwhg~w39CKhSmD<_-8fdogwnXBS ^Nt(mD&OPhMa9Lz zWBym}KfPKHd}VSGfE=$gjvIK#Lr$C~+g=+Ix(KjB-6s#~I9g3c?URV!dJJ=5*E;MZ zo=Tx@b2kK%T}GW-g@ZUc50LIGW?>1kW>!wVsXJ2!ge^5s@^~M3?=5)4b=EH~8ckKr zN-`nh7ch)H`zg?%+R@)uW?`}HMHqHJ7|-MJ&o9vq)YEskJW-Szgr^|CwU;ej#8l5b zs{rUP9)5ZqTwluNG?KRhwfiL>kCpx_mVjpM1zp7#6G>1M((xnRVc3ejC~|}A)+~BM z#fHh~vSFj2UaW(&Y-E=I(tOys5tVMy0DIXVS8xWSIbAN?TVkzu^s>q;-j6y9o !M&_HKB!7;MvW)xA9=m~g2TPk@%}WT)q{1^skNjFl%KDWzTJ z12n)L;~0vC)v?eIgJKaBJ+Dt@uHBD=PmSm+PG9CI8v+YcbCA-42dNofY{yIoTb5x^ zq;WiS#fZxPQXB1MIN$v#z3G`7;gY#aM(6A=9K>>pgo^bA4lYvM +$MZucTFSrP!hel*hk zE7X{di=fc3URzz2kaH4G&GRuD g7 z51EdOi(;5Z0^lCA`||e3#~y^t6pK%3UK%vM=|e0H+!Mnrg*n1((BQbssE0(z*{5;e z50oTvUS*nv*pJ&5yn&UF%bdK9Ropv#nou-svd+qnzX&rj-saVoQUlMSIl+BV$N7%1 zE;(s+()csN;Dwy9cnvifO}S )9HeS;{^hO2fBmdC_1EXdO?0P51{!#MT$FZh|*zJGP*|Zjh?Sg++ zC@~DLj+Y~=M|Q7&Z6`w2*Xku=K8M7sz9(=&^d6gUJmKpovP!;Fnh_b$F`A?hzzU}z z+b#g^e%@Woh$nm+^ZpRw^wwGf_yR}%K|-JM L1@b2t)43- zq77r@+<-CT5hJARTLHP;%h!Z# S-;rz6bP z6Nl>d5@U>Jo _CB1HPk&aZDl>)uU9S$3h`x zd$>KbeND&&eMmx;t+aAol_n#qB}!7P;3lCQ!f0LmBUb;Z?8{&zFpHC(S9jx2`_=N) zgg5bp!jRBQUIlN49XFxcLG~Uj3%HC&gc# azpTYe5)fF~d9(~|9c zAgIe$Yokp=P(;ZqxTtvZjF7I7BV$DKlb|M hbwjdOS43I=Vu2$jfm7 zJEGnYK07wLx<8v}RJbbRvuJH#Yib%Wb**1|dG*7}_|gP=s=<%cy)C{XwZ}A(`Z$Yq zlCoz!pnd&uKkC=7St}D}b)f&0IOgzT*jiSDoL7r5igV-l_42 W<9q&2+0j@5L4>qne_3&-+RQgJ47b-_3v8?94SQ z!SlMkXh@38W#k%iv!u>kYf;!82wB$8U_9ILELAs`Syj$Ex0%~Nt40)at#+_}@qTDq zJ0h)89U9b-Iq;fj0ICBcJ3nv#PC!61_dTK|P9`?n`TuJ#KUdZ=(2Y>Zx;-v|=tuvR$*}c2%}^&O``WRD#rtz>a2PD( zy-NJm(J5~NIBjrt+!>)RrCtS@Qn;EYZpl~+b57};KF*=K&Q5u_f-V1cS&lqIwo@*3 z-y&RYK>8aZq+}kmA4QR!P^cOUq$|aGkBV1svM!@s^t}L;MWda9MrRn9WLvV0=(H5k z-ba0VG` `B WQ!>&O6ZTv$$&)U@Z$$F41AQZCXE!x}X zpJ2(SnsFd_o0*EV=p;RFvYaGC78VdK;BhAaFW_M|05<@U8u0Sz`su;K;buA?%%X=U z_uPRL`m4OnJW((5yWRcN-KW++1$;U!pRZ!rk>l3a$yLiC0dJo92<^Wg&|CG%gB!ck z&b4Wf!1xF%2T{G^i@FWNenC3*)JZpz^^&VU;@6VJ5XkaaOwIgkoBoUJm#hoWdLG^9 zcc`!Ez(?iE{hQ?U3ytRF& @-tTt@<`Zv>)B~c=vR8Y%30W2y~*XV!hd@x4Ld;K z4mp)Aw#KYsdDsoY9@7$$8B$f@pvYFnLo~7Xh)P$u$Z+#^O0)`Lb#pPMN UqU=kg!Gt3L&Dw8S6A5cY_6IJw4-zB zy*KSKro%3+9)1Cq$l#p_(sP@Etl#5;J ETIk!-as^X! zO`Ulz=d{kruTU-guJ~;ljqd=p`~e;1U73r-VPE>LuMS4sDRsWD*Vi|XsLrC 1P<#;1CWi-sWsWH1x9XnM8pN|aig ztY7{Q- 4XgdWsklKXzOeuvf}Nr=W2NaS4`*y@N7h>VeE$2FDV@0NUyz3V zjsEK%n>5m5J9XA8nSAU4kJ+G^S)9S#Z;AxG>N8H$jc;C8@~Ew|sWARJcJka!;3ON2 zhpN6Va6=+TI)rycKk8}ypT@x_56668La_P5eyCeu1n_IX2@WLZ1A45eKlpK8;AlI- zDlaz=%fr5iV6xEpy`2_jFg~UTZLbKRFm=9D%e3%fD53*eKlXsN=;+H2V=Z=N0VFV`)LvGn;>) zSC1P(c{mx%Gg%q@0R7_&Z%r~F6k9Zc@~pNW*suntL`HoORZw71Kc)EGt_}-TSVz)L z+nb?u9CXuXr@xh*G=MWo#{an~UAAyJ0Nbrl1BB7)^z+6QpGaiMS4V*;z8(dupC{GZ zqF(jHmN|C*sOpKAZX4M``)&d};t%ya0NV3N(y6~oylEpsxi04gTmE6N{{a%D(ra}# zvvU}$F~MB>kh$uXULXB+dsA |}J_!wR@^IwfFwEYLu*@GKz} J3=88<@z*k%CAg{Q4 zOuh6O?ZB)sJ$s%s`cr6oEzJ=pHTHL&Ps7%x-cg{`S^WOf;QL*I%7WL_>k-ssovC|b zy$_JzZ6|Vr)-sZRK_kd00%bZZ?v~6U^7t+K`vYX=^=?SPxETM{%diOymVRGYiz@s5 zR#u{r6#U^E+ uYB%!HyBhbI3Je|X4kKNDuadkaoZ%2z*2c7f6{Q0qiiSmJ=M1n z-jKU$YV|HR|BT#+<=oJvZr(N#AVdE0@A{!!drSFg^&n)DZ89AD2NSRFsVrApBl=8~ zliWcN;SRjlThjGOH-5y9vCJ=Y_T><$6 O zV~_it$*#29_vsJ*?Q2p=X?^e8JhyjHuVlv@ZlqqN$9*o1Y1UHYB~!;quW=RsK+k?$mR63nyyh zR%7*T+q6vf-3;_#YgoaHn3h4I;U%l>bsMrzlTMj v^9Sukj zBw@>Le3h=YKO4Kt^gu=U9YeK9J15?SWVm%X?ton&>_ll}@%S0;4k_tkzI|=uU@S+M z=-!6lys`YT&D%0YmxgM(+V=q^m&Ab^LLmyY7+gv@7P1d?d*11>s_KO`y-YQI@qwO_ z${MF>OaRvb{r?G(p-IFkh4dbPk|B`02MJ`>n-U8hlzWT|hfl_yQg}qSm?Fc2!*PGe zKl_#V^WqffUxG@rFjfwMYbrs39QF|#r6~XV>iy}I?fFCR@&z$g*OBWq8)js%8W!j= z&G1a1j+hL*%#H_0b(aS|Z;T6*Ry5?*r@t8<0u^<_1Z7^ ztZ*Ve>n@tI!0YkAxO|7Rj1hOUj!WYqoYJR4>xyp&fn4Vmd ISN|E^N2$uP=j>%xXcPx;${(C_62Xxk6GYs1^ 6L{=(MY=;^+bTjjo? zFMzXJfYc>TkA#kJN0M3gUKsn+b9o*6vP_bsh#Gu)ZI>Us@eL25DGW0;oO(LWjP|jr zOKfVTK{ )E+78m!3XbH&4tZHrQ{DiT>oI8)JCsw$Oj<26pBxcIEUrf8X8arCoo6Pw z JEMSOT63YOVKc%R2IQz0@{sj(uiEA1*nen z>2FcE6M@Hoh)Kwrqtzh>*Je32In$;9;l~%weTGG2!L$MVv7lqmQZLh0V#ZT3W8@uQ z6*d1+f@>6fnxAPck#JO6zL(-m`0Bj%768jb;)M MFE 0ao#m*AE*;vDf%8?Yrt zEkG0U^Edw91hnGRISTF(6y@B1=1O(l`Rh#ErF||;VB-s=iSR>p=l58L>|W&LMS}L( z;g$JXT;Y|IwRDHMuLOwm-GC!oX>Pn5>drYFkD?>lNZ$6Nr9pa YL^9s}aWD zb0>frnJ*qo!$`(&Hb9|!+rU^5^75J1PMm@HW>0 sAp<~1$0!~cXbdsd0aJ~~r4{3NadjvYG1HZy^Ax8 C3@K)>ELN=@9(61-Z%JAU$N^a=ZU5zBbUHpZxUvu<}m83?;&aDeFTM-CgD_ zkPhu|swHmDmE0bb1870#UR%n%Fv;X=);uY!)>wS}03IC|vfqFx5;X<6O1ZEbIf5X^ z$CtNiE4kMZNx-q9OA5QFYG4M1{ rWW}}K;SxcjkS`;W zc8m!iAlA|R9>q6xH!p%0hsjk|^P9#t8e0&kE@2>--r`on&Y1_TEXVV7|GCp}?l5F9 zCMOL7>^}&*&r4$Y34vfn*2vIBhj)**xID-kIeC{=CP8DTU49sSUfEO{ax9D0$9DL} z7AZqn^A-FN9Z&MUD}gJ9K@Dbfa?f0Yy4~iz-R6_BF1F;$GV`G&=chY9^4bXUiYgnf z;i3TS_L#-(`B_L5vOz=UoRditUviL_Ef%F1D@4-5UCMPRR1si&4n=-yHQSHHDf3_v zw0=jWFh0BvW2Agk-%1AgH_GUygOOaqk9WGbZISb3Gi53qnf-}TXHr(m2Tgb_Dm`)O zUhMABe<1FAgjg0_{fZKgm=h(;IQa!W9CYf}3U*v|w`m9A_~xkYIj2r~m9Ggir4F~t zo(T7Usw8iU-ex*i&9%x!<-Ao-%GVB21Jcp4-D#^u>nT6+cIL3N@guLc(l8dF{ceOU z@|3}>lDmy(_Lq5Dp(ufVPr@PmdmotSY{0#acU3Fvv$m)=4&v7-`Zx|EoHBjChB#Qj z3a2YFP@!(aZ78iSskVVOB#z8w57zof?&F)_`X{y;*zI(6h5K#xYdvp-zC^`wgq@j! zT}DJmMiSI;+=JjehhNd?g-*X|%)%e?3-|JT*^8J{lT>Khp8eow(*RoQ%-g5;7-69d z6@4|Rw2YOWaA9YR#gg^RoCq=82Wn(4V?y5Z_kfC8z>Z_w@*9M9{j8=C$EeJe%@S_= zBsukUX128Bm=IE5v^fX@w erCb*qf4i-=AHKAqv>Hsd zZ4ze!z|yhD8ehvizHNv})*1vgaaWoO^^STEvyO6ZuBG{W?-OqSf)od} bseE|iO}`UD6S|r#kb?sJ0nD4p&x>AtxDS1#+7VseyZS; zBKL|JvJBTA$;(Z2GdzMd({2CsuwQhiyaFaF^e@zkpPE$L;+G;nTS*Ry8ScO1-o<8H zpJqDzDVCbvg+!5UE2>5XUVyUhk`e>}1_*o7I2IHPSTeMSNrB%gK87N#&yJK#Hzc%; z ^r3s-54HZ+=p!b*62#v= zqT?zhdP!^l-Soo2-&>7JkACb$XR(g_%RVw{ophL@FtI_9|0%i CV{J=o>k#I+Q%xzkVc7q0f&b=>x%Bgbji?~kV zP0;5p<8eG0w1qA =YYIzRm2hHE*M1M?RVX4ez^#YS%=3IfQHfunXW#Uu2A zCY8RDN#fy$oEF77iQT@@?s*(g_n+3+y1XSKC7lRej!oUDpvv2~Q)7?Hevewy(x5W| z0a^rw==Nr*u;sq{e}pZbFO4J5*9RU+OV4wIBDbtB%APz(f0zoe!pIDCR( `0WAyn~2Xvcyio^VG|zaKS><2MzWX7H^CU(qnp<}fI+ zCAC}fP9k^pzU5kOSEk)Z19g=7Twno}FJt(;Zilcs(_b1u0;}yc8a;C@aoNHzg=9L7 zhC^^XWVO3=yf#F!E!W?Wbu0a?N{l=_4~LfVe;sUGrKFB|jck0}#;y4zYU(78zVd)> zk5)fd7Y$Ks*4(Z8sI` $W6l;xA==!2pwgbAxN^otZ!D682qf`{Irr@&LI3 zalYvcX!r}Ec_TK!t!}IwnGkWqJP4v>4>1>?Qr0>BM>tUWQLwW)o9nB>VkQXDm?IfU zq|vrD6OymMsq!Nk>uf9wn;|iOUD9<}=kE+d^jWh?<7UI!c*M&1Y`4~%8zUw5Zu%3U z#FlOCTdhzr!1okNR^)_WcvYU%%>MhtbPz!YYoQynExN_21ek{QJXxtQIAmeFNg?bH zOOZOCuu9kT*0J)yo&C1W Z|h-3}(K1as%&+y*Tk{D>F`XYVfPSPI@#>-OsJPOwp)PTrAV zCF6EXD8&^{7cu$1E&ck9O8M{R%wmk64~K$=*=H-4U45LSSY)aZt>Ii4e!>Nh2Qb?aC?ot!3HvPW6fzJDAJ z6wfi=Y>hS9b36Bnc!0_a+K#k^Gb=UKna?zjKw`o#U;erFq8*ObElo-^>MOWhXbe8= z1Hzh#-#Sl@DJ>iLAY*a1X?8RQjtWfm4u=^i31O9chqzgE!(NW}EIhTN#turU(0?O? z`0A!{5;R@~H5MR)M=j#`1s{0x3=11Ouf3fv6sLL&>8j`wkg*Cl$4h{+GpPGU=1ng? z8+}J!*V3{!+rbgCDy{XhJ&pR_6?*ejfzA0%Gr x(Uq__A|kn%*-_)#}m;Fqs@ zh1ZhQpSX&|Bq%GiCyLGQmcK|0^*|7e7_KMiRH~KUDG2ek_BI8%Yt{VEcmW&)%{KJi zx+Joj(^+7ZV#9i27($T!i|vB?5w9~>c~*wcVq!n3X6`<@%7I4je 45+OSaD;9^vLAtq)*nz{qY5_tJz{Uj>0CN26tyH7&4u{0)eK%_j zx0&bh$8-AgPGV2F!nL>xL(INpOQtap3=L}lv4_m3F?ldr1w`DT?= z1SJ#4uxy1AWQ~1sdkvp(>b#;A>22Lv-iz!JAqlukK@-LgZ<8@Ixd)Na$dX4BaDaW@ zLow3umJ~}dHyVEaTEd@s?h})Z?8GTEINu^>Q~EZacSX&-;M!zU }_L%GI=rvQ@7kL!_vNwY_#ev;SszR2JxtH(pf(lx{Mm4?=)#o9~ ze#?rc&BItRTs4PR*(Ts(%nN4x=wcL*6f#@uA&&IjgtuinzPj?RY0O@ruz135rUMU} z4oVQ$+_6*pw&)G`zmCjV&nEx HWpY6M5xzvw}+zn@hQUUhzanFpMqnigDxFpszUmVfef=4xt_w+ci>p82iQ zv44<4Hcd4R9a&yMYZ@h)1Nyz6?@Trb(@P+VDV-Ug{dyy1=iR{RnW+z?IeXY+~nsqTewpq EI)HpOGC5+zg{B(EFv88sUgZh@K@ZhhLv})Wt ?YOAXU!^^=J**N?aCx&+R}@E zB*tujTf!wTw#7p)O_cQ}w5@p9x*qJ68*Gt^nkh{hbh6dWV4b__lB!1EnxX|TTWAoV zQsz%~k#Ebd*>*c~aQrCj@^jSXy5jg!e>-3ZLQ-}}DY0`_U04{ll}{3bFMUD4ZPA|T zwViBO!@Lzq%Jt4g>&bB=%@{R^(5Th{-*Lq|yn^jtgyuXB2LS3x6GUa$bkpI8ypPfM zm@8QFND9sG(f?M{17x~}+~6I8dFhadL5S(|bce=K2QL&;-W{FZ6TNP$;bs96g>p^g zIe0Q23O0_amPqbPj=@p7@IKr1er?^`{g3yMj=f;sa@sOw)y(xs-*P62nSXS*a`>?_J1UUr`V4sM>b zt^3%Lv^+@Wj5L1*gyedT0~{zFs=hA16uW~Y?S@{^yeA4v7$N_KH=K*SP)%$|;><>C zD4I>&lm#8><$gjcAL@KA!VHM}*i?b}B=Q2R+p#p=lbm1582T#r=d@$ i4f+E%+zcygB;FI{zva%!mm0bJ>I?f0BY8I*!CcC!5;&x8myg4xE3$mseH=6A3D7 zeMM$Qi!~-7eyo+WG@<0LQV(I@6QC56P5)EYR?5!p9$pWdT2)Buu&LAGdXU3Tnh^=G z5zc0FpHfVG5+D=}HGPf$(@n8&+@<2n2peO4QhW%@$*k$mC|GmO-f+TZ6i88>g@JN+ zGGx&Nj5%Q)bQQ*^#dRl}svq`PR7reS`_Y;7i^0XEK#7H|^+t{L6#ifwb%H-RGxl+a z*o@!4-#Cqa+<^p|$(?{o1Ko>qOLAs-1Ez?s-{6Ww!gnM5c0;r)@?_yF^24{-D}qd1 zP0v65LAKx+dCr`4UkY0I~!SFo~SfUhI*{e%x%6Y9q1GuM#V7ahGC|gJyiK;Ol!6_ zNt)`7!-es?N?0==2Ow%`(47;|(%ifj526#;-e_=Iq$eAG^eb*^qBQr}W2wc#8}t!j z%vR}+2X8a)0!?ePjG8{Pm926Db>A2S&Wc_?g@0^C(#c38Co9VKX5P%Q)`A}n)!m0& zhg`abW2f9QnEr=voz%1h7rHZG&)nqg&ARHBD&JHR)#$6~?>Wz( NXNUjyaAb> e$8tmqs0pV-UdQ5p z_xe&Ld@q4*O=@X2@yChk_`|Cds19d7NvHVSEmITzg-bg3`S=w&mEaVWj#%!Rk>UCf z5owKo5=C0MEpB>SsC%0?X*W+iWqz~_<+&=*>Q2jAb^d+K`XB9mw#;iyx+t16;=7aF z*Q09$$zpmeSJnG-HlL~01W2r|MnovZ8kubsH~d8nF8^Y(Kvu~$InmDMV Ts6BS}Oq9rxcQ*$iU)OOmB$r(REi+(_Py zNezUP6vwG5AXOGHQ!w>sBh4dRhyShrI!(NrIWXYT6RFE}5pK(g_EKc;am_U**QKsN z;VB*lnTDmi*R6WUgxzG6vTqVp&sv7n%vP2C5&6B0XL8CFXY{1*CliYKjq_KQfmh`` z9}%SvB;m{V2Yj7Ss!`8ft_Q~6hWn*5?8V~7F$rd#q1R@ntZJ!nD-yZW5{Hdn6JL57 zhRzK3JaYMpT7QlT&4|zk{(95Fif-~xXL;^L=rsF~%hKywpf@UURLoRq96=**lu4*! zBV_V3A(rUw%HTwz5dKpWfMvLN!{y^FV?bKc5F7UXiKx{OOojF7Ap`TeRqdK00v5?P zG4>7ywvt|X)$E1S`yhU4bj`L6<|h-gJ0m^}eY*XofiPNhGvSa yg)5B8gJD&r1$eMn`U5YG__Qe?SH>4^+RN>11SjY)~zfv^UT-2~TPfX`A1ZKFw% z>6m(sZ?lv8RJl#?K2XIx725S)y;+!fqa4aBC`f06gaU<-P+&Xq0-b}c#?<-VK^GFW z9E*1cuW}&wLfl^MLU!3wsbZ`|G$QFp{Y-xEqp#MNY>dXTeJ$+xIBZA`s&2P{C=+eS zu0};=`Veey35m9VmS7l84H C!uQ+2ejc&m3K58bSmhFGG}t8< zmwgM8%uKxKY%o$9f+Rp|%Do)tFy=bE9B K3yJ_$38Ll`d3zcB9ILp|l=vlitP18cE8POa_Z`%H4kf2)^oMo!9 zF%nKX3~a8AS7ePePs;TIx`bPrvdJ)=Kw5piXKgdNj}~9+X{t*xaw5Funj}F|YAyr% z%sJm>U8J$_R`=B9Cbd$2{6;Vk`VEXn8$CI3B2@usZJ@HtXbdc2WRNSl-Z$r;jv( ;zva}#Ux=J0d2*fJYFG)> zKUu2K-ZFiUv Oc}>yW>b`;$UBB@>2(I*Xjxv0S|+q>CD_ z*ZlrooyHi-|9@n?WmJ`I7d5JMch{ynq`NzmP`U)9yBnlCr8}fcx;r+~-HnvAG@CfL zKJRzV8RPrIVC)Tlu2^ecbFDRJL6z3#0!H%fZoK4#6)9Lu*SoQHllb~Xu~v`nz3~Y4 zamiTA*A_Upn>hNKil^v4*>ys#P3#bf)I}T%Vp2?LZEj)`2Iuxt3uUCZ)>DK5 ;;E|dj*{AD8LujLOBb`m+Q`}8wk*f`K zq?4PU&k7F&;Sa^kpiR5*zU^v^Pkh&{eI>-Gs5|ZylC;J{yHW`_cf*BoA_{w(K3DHe zj!t9+z6G3m$0mLr7y~!lGuOdY+gqIms(AdN(it24Uy|GXtVoe{!W<}|iTe|r9cI0q zqWhtz9W)m}$3cD=wt- EI1a&ND%@)SGBCs7PzAXN zKIX3$2HYcYO9U-sGfua RxNdjS`oSl?* B zZ>!NW4z$wF|8aEe{g6m_pznh$B)-ZLLTA?=KCoNT{fcqYJT6$05=Y539U9^Vx9^E> zh +CQ_J_EEaLUkBS8X_n%l^l_nF@vO)Zpa8UMMU0KEbfBd z_z+g>8L!P2 PYj&{jsWV4cnT5zau@BgQC& z(X4qQnV@F!*AzI7A}Vm62q4O%%M94EyZB5qcN$~$n(Ig;GT1v5sS({HCb2zPFY4jK zTnBx(gtF5*NB<=7r+z|98Y}lAe)4 z8!xnSIGtP?2fvxfYwzyjqlx;X?6j#<3{4k85EG8-_Am^+V+{P(xiOZn^oc^b=Wa+& zM>7}zs^z(5kln~zNPp<%`gusTILC)L5xQ!q3vS#*)@R4NP*?~C9$se4*YSPTAz5%^ zEWwGxV^W`u&;ozK$no3=M89wgp)r$EK(&Keu-;`=zo7euLQ*n T3Nb(^dIoHJWioexA?4kvK4=U@TBpb1$a34={1tmHLOAzI!%g?^ zs1mk!$1}A%Opm@=o)p1Z=d+J;lyI(HvkpD#X@J`>1n1n@d%Z=O0fd<)>ca8I(X$>- z)|+zc7PfcyreDl(BmI;P_js{}ch7|WJ4rtS9gqEn(w_e-WK+`Y1aZGIlno=0o7la- zjRjCbP2UW3{69E%*J9PL^iTwG9GC?L<@yvy|1x?1E$A1OneZ)KdoTW_1XuOZPOS@X zLv@EXkkrerw3e4%%{f_s%W4*@aLW>a@6Ic3onpg9St#yrLR0DC*kPn@|Mg#gJKCjp zq$|Wo|I0$|8X{mQYR?PQvu*WeO^20I;=YBNWR?1SNOh>6@Z2?1GXqoqqLOJq ILYl#_4I&4E}Jw1J}P>TkoYl;}7 z$mW+_@N0EU#itHG;P>_spM?} K=85~@poapL9--}?mPe{1$veM+R>o9#*16X zu^;N5W8Rfa&*i^%rB??dzX8A*F+EuQU*A^N@effI^R%B|oo{hlZy5%6z5tdpFnfi- zdzZmvSRKHd;^N mUr`yc7qT (SGL`Oj?;%Qb2cFyW2Dl0)VjiIR2z@~$@L=q_r z_ wlHtoCuK>a zwu(;V&FOYA^JOuX`L5~|wx&V-Fy3OgXEt@ynz7}qdfvPZH9HZmZ+EA=lXkk>+Xu(V z(g&hd<8vyeh2y2vlM hsyxT(vVI2{ h89u5C5{wG;HQ`vdPgZ%pYO=Sg96=5#& +p&er5gOQ)Lr1c+a4qHY+t)2??af%jUSmKRQHc6j@lDlMa;~M zW#1=@Mlxs a-S5OeiFv*wTwLUC>MtgRH!5ORVs3&Bi?g)^N(O+{_t=h*s)orz znB-`IPgS*bzT02Z1SM_-fmpGa`oLei8;P?HqbxKRBXw36!H{0ir34>sSI`a-X4U3f zmh%@Z9m7|O2E _`&y{QboB|}d3R)7`SbrfF&-e$uOt;yVzZ(h=jO1{d
k{y7ECw^Vv zphx^zJG?{^KD<(KW7D7QE@=$(nsJPw4N!bKZa%tEqczc)3%jB&53?Ev=$sK#dWNE4 zrCVM}<2z`R)1TXna%7%5Y)qJ^h>fiIC$b-xbbb{oh#AvnjlC#&t%z6X$R?_GDo=+Y zL=H 2CvlK@QkoZ*RBC} z8xC3F?_-Vj{&2@8RNl&+0G)WXHvT>iN@Et1jut4Nrkx H_D*CJJ`N(EYt z_Dr{KO2KP}pZcx!Qe#y&jS#r>iU7cceB)jHLWJOjHq*&RKC#VkcS&+YpWxiN6F<6O zk_a^2qoHRhi&P&giId}me5R*7dw!nkKGV4Hao}&+e7%g`+qJIgl)=J0@XfLTth& BLo$R3bq 2tt z*Zr{_>4BU^HnBsTfKTWc4Igc+g?XbF!Mvr)I)7CMGe9Cb_Gz-6)jTT8$dHeMoiYBI z^6aaXl4Wp?c?dl@2n#`+xJg9zsU1tPB0mD{d+|~_pbt|5zseP&)6$@v0Q4&gW%z*K zWBug|Y=+%D4eC#p!6xjllEpK(V8hv>`2=%d@USF9e`46rW(753CzYahmvzeGOvcwh zT)qP+0x*ge*M;jFe+bFPeBSnF{Kf<$FF~~ImxS2*%3f>ViMmppNxrPBxN5wQ5h?nS zwLmLIKx#8v`57NQt3Uv#`R#jBy-kO!I)T3OX#9hlr|v_4`x?&AyG VT>HnZ_lH;7R#ouwFr&U!xS;7jX`kz@%bis| IjD=uHo~gcwt_KF=~7Yw}Qyq;m*7yZf6t^9(Awb%kY1eD*w{qVCYUu zEXM#b1fgTQx0{i+S9}3?K*u=rgG& z_UI-P(fF`q`@Ha+l+C9KsQG@>YH}5bDf0S!o0s(U) &<+Rm zfl93BwIk?}YfoFcEttLiY@bY!T4O5N43}eB@lTJxi99g_M=l+a#Hq2U`>ld?=GJ~@ zT>tFkr^v}fgb1+Qya0lI8)_fu6^9aJ_;x${PF(jv TVob>&9I8V5$lxzADbKbhmLn|JapR*WUjI_jmdhyoQ((cR>D+ml!Kj5vDg!yR 6=yN#R~EE?%BI!EZULU^0C)QFs9@Dj=oi}472HxXEO^c5Aqmgn;Mjxmu^4_ zoBw3XN%;Mf5{aKes_CHO&0Pw!G)bU(zwd6Bnxz~Uo`mseRp`khA)ujw5aAmqQE*}B zti3a!`xO|_wl8q?|7aux_*0olSiOe~-EL~yiySsbN~ebqoOy;kP8mW>R(NP09fTeT za78Vbv~r<$fW8HtL4}V nczJI )sBE7xc&?k zQQzJ*^F~DQ9){G~|GTVqH!h^LK4`H$XWQaS9Z|4AE(ajyF!zEnK)K$~#X0v@*6WTT zr0`3(2_1>kc|m?k)v$@^g7;Uyg@@66!6oAnu)2Of|DS1)yx7t_N o?{SRf8}eWcebjv6IB}ai?45}3_dX|I z9~X4!ZJ9L`(9NnHh7(m0F|GtZZ|d$&ZVvl6{Tp6N69h& kZ>c@Wa zQ%^N_6`fwp$5DE3tMzdpDXu-`5bJnA_c~`mcRy?3L?Q# |^N=j;5SsUgUyms~Fn=uNDW(;3dFVjh%YXYMl~%QV^FSg9rR8`fElA zh{zh&sUF#fnqNa>S&qsJDMHj;S88(wlMW-2ijl2w1}!_|cJp-*?wFzdg(r&2&3h@k zek+pC-I5RZ%9dvF?uT%=N2u|X^UY}jo!p~qgAQ}8fRr{XDWAe0RV2ADshmkPAmR>r zz%pWMy@ddZ$sg(^@s1n=Wp*uuRhg~fnnz4uIb_;<7P)!Vb_8sm;|XV6ds%;s1`@GJ zVPj_IO37&zYt^2eQjjcEK#WjBKaf$1a;AqCRdgri6RFlq;<)s%Y^?qAM4&9PlNAq5 z)?LdbDA0amGg#FgE9Mnwqo$qf+a+gxvf`ihw_g$50H|R>&D*|rn0*f(I0s&jmwe=E zt!R{ChF`Z{=*V}hzG?}*-L}Aalw_s1rKi0d{_B{<`mf8(nNCY2C+Hua!k#K|qmpIx zr*=M_od0ubcuBdJ(Sx@wHHD_n8d}LQ#A#$n)l^u=RF0!?ax#%j$&_VMwhtpN!h!gn zv0EmPdZ|2$&F~ccsIz;Y!z&I7^*}>vIj~Q8(jZCnYQ82aXCP%&F51!*Gz0m>K{F*C zqw!S0+7cZtnzhS5|55%Jfl-k5reW5)jAYz*DNYSFEI7N3;C=B;7ZK0_@G}3!%;J*C zix@WD<7< g#2C;OR6X-k1DxD plrA_6m+VkD^Lc>B z9ZF%*Rm#5yi@so%S5!E2z+d{RswQZoT|(ynoGQVbZJwg`Z1mHOd15$f&3!$@MoAjs zvta _SD&Efo9nrv{Un z2pSq;dKyxt@B2Tqvvy6IfQ{a&$ `Z z=J&_U9{f9T>rxR#K1#JmJOrKo!bL^z+CY+MR+ktSPjow^+y36tzrY&NMum z5`^D$`t8IiEVzj+tH)a$bK+arNf>hA?JGedzsWQVHV?2WNE(8CgAUlJCTgM+rZL04 z;>57(r7!uEw|$~48B5ChG40^p8#LGa#TjLvDW %x@e*VBP8fh%ZfXc5 zR@E~Z=zPNizD~_5{~vc-Xy1bxg`e6Z+${{3U#E`2s*9SRVM|T+ydzk=KKlkRwEAnd z6!$OH{r}9C%EPu$3XP*U-zG!T6x$HQRU4q&tWTrHi5j4@b rsUcagD zZ~CL9D(wNe+{d=TM=qC8-8z^;{YdS_ -q3$tJ% z;GmG {? JKIrSzJG{eMbTn0o@LuzKy?FrIV5U^AL2=TaMapVJGbq&bqhj(VxEp z&B?H6v-ZBf bM-W3>r>NK zsf`gM^hPF=Ud(-rQPDpxHU;>z`P*Cala1qG-i^61mt^e(Ty-ygesmLNl@A=4dx%I< zdS>|kY6UQ>WN$W)>@)YA>H7u9it6~Ni)`pd>`J@2v52?@5v9a`v6lx+0ZzF8yd?splkC-u6KXP-el{aR~ zzfbkgUuZ9l11Q)xsI`&Ky4AA)LiYV_OECWwKY?NvAzL9=Pc<4XYhC)*$FakWOJBnH zm5-6!@j^ZvUoV}TnW^#Uq8>PK1Fcs>a89=sZ4(Djt6sbOw#idM@jGkMa6FPWyUK?i zs>SfSepIpZ@yi}|sN&J*y9KY56MI_~i=&S=i#~a0PT|+gK^{LwmJAZHZY&BWZ%#}` zDz8rpZ6#QJm$u{azIzMDUnuK~Fai;xKeiSS*}{nn7iB!lesM$afBJ~v=Y#u`+kOh3 z1-j8(NyK>TDUwb(C)hmKSA&6wow%;0MaxG+IIGd;Xr?G$?$Dpyp$RHXXz)Z9Fqpk~ z2f^gT1!rDOlcnA8 9F~ dkh6l@3oXSBPe!8GU*Y!u%kuNqjx4p=0JpF>B ztG)BQDX9EhLUM~GuEXlhY%ok3E zd8!*C z)YRKcK`>5DUi+e>pL5!V-Vk7>n#!8s@|KGhOMRIC@Y8X;-h;(hg7#x|*W`M4kP#I` zbzWn{2Yb&K*DyqES~~Bv%W!jI*iDJ_5gNstsEm}}^4(1OceT7_)t^I`7O3-qyk~E- znm^`1R~_S6te#V2%AZOsJd^AUvPsTVpw~zF5@IdZGOd}O>AH4K@<1NLjHK^Moz^|H zAP9~jf`h{OhW!z?QAY&3y4CQ8dy6;6O*^9)C->0Q67MmN^kH9$GY9Hwkm^jSP>WVx z-VAg=D8&1J5c$e2>Zn~;c$J!DQQ?k0Soy!{YRjEEF2yT^K$M2Ti5rqCJSs{%jzLsP zJD0)c7&{TvQf?bSbGeHZO)!<}A;#iHdP>~F;qh_M$cO@;#|1fwuosSifPjUEM)btQ z1j*Zo{yLe$M-XCGOwWnTnA6&i(>LQW5vtm=Qgte5g954~Y*od7%C}W#cdkAkSNG2X zt-4X{RM?!1q}6Xt$^`z`J ^sGy@-LpS|6lQ>C)4O8?;c^m zmtVq>5hVttxAb09^Snq&HYt91pJkmt5n75LCw{?{4@8}E?sN~ZL&QXPxIr~LiqxO_ z^dCF?uu)wz6n02Lw1(0urf8|L>6@arb)i|@r#S$7!Y#poD O% zV^sK%V8`z)^&7}l&WEha4ZrO#IOR`|qb`zKE 8J;i$IU z!e8C)QeS+sx$Jraxo9z$1I$o0+|WM~tETO+TSdSOG_NUuao9REMaibm18(7aKE4bx z|FlrM#J%9%cr)F_je*{r?)!DC@x61F)$e24OafbMrw;iW86W96+Kz5j5lY5 Wr#(SAO#!AO2+2^J(m;=IE2BAI_23mo`JE)EOh%n;?q(oo=n zWFpdGM+R?M=}^#)a!D6@UJ|a@bp|QWXu@agO?%PkE3Aew rc )ZWtQR>q6-Am zta1^)EyIfXRBu0p`n5iM+r)#n>4s-S_ zC!E}m58>M`0^7A e?y47SyUch$bMc06hc*=Qok(F;GX(QcH4H`1#79d{^tp zl1Sw5AzBSNEi}P!-Fm5giCIPeGXL{`K<3y!2d<=qSTB%OnW+Jd>xa*mG*7g@^dUUB z73se*u_hJaLo)& +x9&MZnx=8rs2i}0?a=sX~0cqfj0&P+^8E>rdYtRyY6 z<8;DXNmqNR2?*cbPV3Tbphw;w5$5X{3R^%xMbD!Y?;A~O!f$`(D}kwNNj1M?&-Ayw zlS89D>{RE|QI#M333!W{k1+oH*+n&lWr4A17``HR9q!x+j3;S@n#R~ab6dFTj&bx3 zkbk-l+X_0XJ$`+jP}N#a4sDEmhjZ(hWGi+84g%K*9DweWZ13l>&cj=1rA6T%$=kMN zI@i6)@@@+}PSBdBUf?KM!-*EF@!T`PIEu9N)~%vD?^e07u^9BH;8)Iyys60gMaid> z9uDy#Y7v7G@qkeYC?W8S{3kfH2l#QAQ6VoP ZgwT@D)A4d`YD(!`IOg`m&1x%6mEF~ny#83kB71w$if^*M~Sl1 zwi8Y$u*dVw8e1%&7g7s6sT+3z67MB-zboR@U82B^lbYL?OoUK}QIJZ_7(Wh+KZ#a> zuiX9k^byi>7*=;ze-|-R(XM337K=L>WMznzq#vt79373;zqPf55f{{7APRrudH4=0 z1HR)@#3GK1anL{{R^ZM|UKSS@nr17KPue^Bfr1@U^T$NaMw`n`&$=dHDM0iq&s0Gw z=KZcXmW~$unQWuKpqh}v&k})y#Lnmb5$_2F*)QQMiHEFVO9H+kQ&StV7TQWAajyPY z_BLXbU y^)=gG)%(IPS02!|c+fgoD?x8%L;%lXoYMy!mNStz zJh)|y{+M0lsrET>ZjY`wSsU!>c_VZ=fL-kKv=xLN&HWD@9B`22uqMW3??Ad6yK{g< z-~;u4y=>t(P^iSUG3B3Lmm!mPP1Vek_%;4{o7e4|6@IR{o__9L#b(9kXF|^2XZGdZ z`yaxN&dL~9)vNWYosvh@t3PWtRDRJ;`C_`9Qbj@^iIq&FU>u(|kmXD({zhto@9pQr z1^XJ;AH6|As2Jo7qeg7PxnVv0kP{!Yyyrn3!9*IyYPiVQ@UG9nPn==8 s56iwS?5&OH82_*zG4`XaoFMw>G(|tR2HM!TW_!MiG7^RBwea`lc)-CFk zYlmNBCoQM8R#pj5o{_g_Ce~HxR#cuQ#cAX4XtR5OPCK#7H;l5~jVRoj{uv8cAp^fG zh0$sX$0-a-=>jVFNxJ=y+v@C