From 82da633c9b205b0328977c7830df7b8519fa1085 Mon Sep 17 00:00:00 2001 From: Tim Sutton Date: Mon, 6 Jan 2025 14:55:26 +0000 Subject: [PATCH 1/2] Geenrate aggregate for polygon work opportunities layer Fixes #704 --- .pre-commit-config.yaml | 2 +- .../opportunities_mask_processor.py | 6 +- .../subnational_aggregation_processor.py | 170 +++++++++-- geest/gui/panels/tree_panel.py | 57 ++-- geest/resources/qml/wee_score_vector.qml | 269 ++++++++++++++++++ test/test_data/wee_score/wee_score.qgz | Bin 47259 -> 28883 bytes 6 files changed, 453 insertions(+), 51 deletions(-) create mode 100644 geest/resources/qml/wee_score_vector.qml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e721a1b9..549b478f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,4 +15,4 @@ repos: entry: bash -c '[[ -f core && ! -d core ]] && rm core || exit 0' language: system stages: - - commit + - pre-commit diff --git a/geest/core/algorithms/opportunities_mask_processor.py b/geest/core/algorithms/opportunities_mask_processor.py index 3b112234..f870c30d 100644 --- a/geest/core/algorithms/opportunities_mask_processor.py +++ b/geest/core/algorithms/opportunities_mask_processor.py @@ -155,14 +155,14 @@ def __init__( log_message("Loading source raster mask layer") # First try the one defined in the line edit self.raster_layer = QgsRasterLayer( - self.attributes.get("raster_mask_raster"), "Raster Mask", "ogr" + self.item.attribute("raster_mask_raster"), "Raster Mask", "ogr" ) if not self.raster_layer.isValid(): # Then fall back to the QgsMapLayerComboBox source self.raster_layer = QgsRasterLayer( - self.attributes.get("raster_mask_layer_source"), + self.item.attribute("raster_mask_layer_source"), "Raster Mask", - self.attributes.get("raster_mask_layer_provider_type"), + self.item.attribute("raster_mask_layer_provider_type"), ) if not self.raster_layer.isValid(): log_message( diff --git a/geest/core/algorithms/subnational_aggregation_processor.py b/geest/core/algorithms/subnational_aggregation_processor.py index 22533244..4ea8e414 100644 --- a/geest/core/algorithms/subnational_aggregation_processor.py +++ b/geest/core/algorithms/subnational_aggregation_processor.py @@ -6,11 +6,12 @@ from qgis.PyQt.QtCore import QVariant from qgis.core import ( QgsVectorLayer, - QgsCoordinateReferenceSystem, QgsTask, + QgsCoordinateReferenceSystem, ) import processing from geest.utilities import log_message, resources_path +from geest.core import JsonTreeItem class SubnationalAggregationProcessingTask(QgsTask): @@ -77,25 +78,28 @@ class SubnationalAggregationProcessingTask(QgsTask): Args: study_area_gpkg_path (str): Path to the study area geopackage. Used to determine the CRS. - aggregation_areas_path (str): Path to vector layer containing the aggregation areas. working_directory (str): Parent directory to save the output agregated data. Outputs will be saved in a subdirectory called "subnational_aggregates". target_crs (Optional[QgsCoordinateReferenceSystem]): CRS for the output rasters. force_clear (bool): Flag to force clearing of all outputs before processing. + + Note: item.attribute("aggregation_layer_source") must be set for the analysis item. """ def __init__( self, + item: JsonTreeItem, study_area_gpkg_path: str, - aggregation_areas_path: str, working_directory: str, target_crs: Optional[QgsCoordinateReferenceSystem] = None, force_clear: bool = False, ): super().__init__("Subnational Aggregation Processor", QgsTask.CanCancel) + self.item = item # should be an item with role=analysis + self.study_area_gpkg_path = study_area_gpkg_path - self.aggregation_areas_path = aggregation_areas_path + self.aggregation_areas_path = item.attribute("aggregation_layer_source") self.aggregation_layer: QgsVectorLayer = QgsVectorLayer( self.aggregation_areas_path, @@ -110,20 +114,44 @@ def __init__( self.output_dir = os.path.join(working_directory, "subnational_aggregation") os.makedirs(self.output_dir, exist_ok=True) - # These folders should already exist from the aggregation analysis and population raster processing - self.population_folder = os.path.join(working_directory, "population") + # This folder should already exist from the aggregation analysis and population raster processing + self.wee_score_folder = os.path.join(working_directory, "wee_score") + + if not os.path.exists(self.wee_score_folder): + raise Exception( + f"WEE folder not found.\n{self.wee_score_folder}\nPlease run WEE raster processing first." + ) + # This folder is optional - user needs to have configured population layer in analysis properties dialog self.wee_by_population_folder = os.path.join( working_directory, "wee_by_population_score" ) - if not os.path.exists(self.population_folder): - raise Exception( - f"Population folder not found:\n{self.population_folder}\nPlease run population raster processing first." - ) if not os.path.exists(self.wee_by_population_folder): - raise Exception( + log_message( f"WEE folder not found.\n{self.wee_by_population_folder}\nPlease run WEE raster processing first." ) + self.wee_by_population_folder = None + # These two folders are optional - will only be set if user configured mask for + # job opportunities in analysis properties dialog + self.opportunities_by_wee_score_folder = os.path.join( + working_directory, "opportunities_by_wee_score" + ) + + if not os.path.exists(self.opportunities_by_wee_score_folder): + log_message( + f"WEE folder not found.\n{self.wee_score_folder}\nPlease run WEE raster processing first." + ) + self.opportunities_by_wee_score_folder = None + + self.opportunities_by_wee_by_population_folder = os.path.join( + working_directory, "opportunities_by_wee_score_by_population" + ) + + if not os.path.exists(self.wee_by_population_folder): + log_message( + f"WEE folder not found.\n{self.opportunities_by_wee_score_by_population}\nPlease run WEE raster processing first." + ) + self.opportunities_by_wee_by_population_folder = None self.force_clear = force_clear if self.force_clear and os.path.exists(self.output_dir): @@ -151,21 +179,102 @@ def run(self) -> bool: Executes the WEE Subnational Area Aggregation Processing Task calculation task. """ try: - self.aggregate() - self.apply_qml_style( - source_qml=resources_path( - "resources", "qml", "wee_by_population_vector_score.qml" - ), - qml_path=os.path.join(self.output_dir, "subnational_aggregation.qml"), - ) + cleaned_aggregation_layer = self.fix_geometries() + if self.wee_score_folder: + log_message("Calculating WEE Score Aggregation") + layer_name = "wee_score_subnational_aggregation" + raster_layer_path = os.path.join( + self.wee_score_folder, "WEE_Score_combined.vrt" + ) + output = self.aggregate( + cleaned_aggregation_layer, + raster_layer_path, + layer_name, + ) + self.apply_qml_style( + source_qml=resources_path( + "resources", "qml", "wee_score_vector.qml" + ), + qml_path=os.path.join(self.output_dir, f"{layer_name}.qml"), + ) + self.item.setAttribute( + f"{layer_name}", f"{output}|layername={layer_name}" + ) + if self.wee_by_population_folder: + log_message("Calculating WEE x Population Score Aggregation") + layer_name = "wee_by_population_subnational_aggregation" + raster_layer_path = os.path.join( + self.wee_by_population_folder, "wee_by_population_score.vrt" + ) + output = self.aggregate( + cleaned_aggregation_layer, + raster_layer_path, + layer_name, + ) + self.apply_qml_style( + source_qml=resources_path( + "resources", "qml", "wee_by_population_vector_score.qml" + ), + qml_path=os.path.join(self.output_dir, f"{layer_name}.qml"), + ) + self.item.setAttribute( + f"{layer_name}", f"{output}|layername={layer_name}" + ) + if self.opportunities_by_wee_score_folder: + log_message("Calculating Opportunities by WEE Score Aggregation") + layer_name = "opportunities_by_wee_score_subnational_aggregation" + raster_layer_path = os.path.join( + self.opportunities_by_wee_score_folder, + "wee_by_opportunities_mask.vrt", + ) + output = self.aggregate( + cleaned_aggregation_layer, + raster_layer_path, + layer_name, + ) + self.apply_qml_style( + source_qml=resources_path( + "resources", "qml", "wee_score_vector.qml" + ), + qml_path=os.path.join(self.output_dir, f"{layer_name}.qml"), + ) + self.item.setAttribute( + f"{layer_name}", f"{output}|layername={layer_name}" + ) + if self.opportunities_by_wee_by_population_folder: + log_message( + "Calculating Opportunities by WEE x Population Score Aggregation" + ) + layer_name = ( + "opportunities_by_wee_score_by_population_subnational_aggregation" + ) + raster_layer_path = os.path.join( + self.opportunities_by_wee_by_population_folder, + "wee_by_opportunities_mask.vrt", + ) + output = self.aggregate( + cleaned_aggregation_layer, + raster_layer_path, + layer_name, + ) + self.apply_qml_style( + source_qml=resources_path( + "resources", "qml", "wee_by_population_vector_score.qml" + ), + qml_path=os.path.join(self.output_dir, f"{layer_name}.qml"), + ) + self.item.setAttribute( + f"{layer_name}", f"{output}|layername={layer_name}" + ) + log_message(self.item.attributesAsMarkdown()) return True except Exception as e: log_message(f"Task failed: {e}") log_message(traceback.format_exc()) return False - def aggregate(self) -> None: - """Fix geometries then use aggregation vector to calculate the majority WEE SCORE and WEE x Population Score for each valid polygon.""" + def fix_geometries(self) -> QgsVectorLayer: + """Fix geometries""" params = { "INPUT": self.aggregation_layer, @@ -173,18 +282,25 @@ def aggregate(self) -> None: "OUTPUT": "TEMPORARY_OUTPUT", } output = processing.run("native:fixgeometries", params)["OUTPUT"] + # Also drop all columns + params = {"INPUT": output, "FIELDS": ["fid"], "OUTPUT": "TEMPORARY_OUTPUT"} + output = processing.run("native:retainfields", params)["OUTPUT"] + + return output + def aggregate(self, aggregation_layer, raster_layer_path: str, name: str) -> None: + """Use aggregation vector to calculate the majority WEE SCORE and WEE x Population Score for each valid polygon.""" + output = os.path.join(self.output_dir, f"{name}.gpkg") params = { - "INPUT": output, - "INPUT_RASTER": os.path.join( - self.wee_by_population_folder, "wee_by_population_score.vrt" - ), + "INPUT": aggregation_layer, + "INPUT_RASTER": raster_layer_path, "RASTER_BAND": 1, "COLUMN_PREFIX": "_", "STATISTICS": [9], # Majority - "OUTPUT": os.path.join(self.output_dir, "subnational_aggregation.gpkg"), + "OUTPUT": output, } processing.run("native:zonalstatisticsfb", params) + return output def apply_qml_style(self, source_qml: str, qml_path: str) -> None: @@ -200,6 +316,6 @@ def finished(self, result: bool) -> None: Called when the task completes. """ if result: - log_message("WEE SCORE calculation completed successfully.") + log_message("Subnational aggregate calculation completed successfully.") else: - log_message("WEE SCORE calculation failed.") + log_message("Subnational aggregate calculation failed.") diff --git a/geest/gui/panels/tree_panel.py b/geest/gui/panels/tree_panel.py index e13dabbc..c60ef3e5 100644 --- a/geest/gui/panels/tree_panel.py +++ b/geest/gui/panels/tree_panel.py @@ -496,13 +496,9 @@ def update_action_text(): ) menu.addAction(add_wee_by_population) - add_wee_by_population_aggregate = QAction("Add WEE Aggregate to Map") + add_wee_by_population_aggregate = QAction("Add WEE Aggregates to Map") add_wee_by_population_aggregate.triggered.connect( - lambda: self.add_to_map( - item, - key="subnational_aggregation", - layer_name="Wee by Population Aggregate", - ) + lambda: self.add_aggregates_to_map(item) ) menu.addAction(add_wee_by_population_aggregate) @@ -512,6 +508,7 @@ def update_action_text(): item, key="opportunities_mask_result_file", layer_name="Opportunities Mask", + group="WEE", ) ) menu.addAction(add_job_opportunities_mask) @@ -608,6 +605,33 @@ def update_action_text(): # Show the menu at the cursor's position menu.exec_(self.treeView.viewport().mapToGlobal(position)) + def add_aggregates_to_map(self, item): + """Add all the aggregate produts to the map""" + self.add_to_map( + item, + key="wee_score_subnational_aggregation", + layer_name="WEE Score Aggregate", + group="WEE", + ) + self.add_to_map( + item, + key="wee_by_population_subnational_aggregation", + layer_name="WEE by Population Aggregate", + group="WEE", + ) + self.add_to_map( + item, + key="opportunities_by_wee_score_subnational_aggregation", + layer_name="WEE Score by Opportunities Aggregate", + group="WEE", + ) + self.add_to_map( + item, + key="opportunities_by_wee_score_by_population_subnational_aggregation", + layer_name="WEE Score by Population by Opportunities Aggregate", + group="WEE", + ) + def open_working_directory(self): """Open the working directory in the file explorer.""" if self.working_directory: @@ -910,7 +934,9 @@ def add_study_area_to_map(self): f"Added layer: {layer.name()} to group: {geest_group.name()}" ) - def add_to_map(self, item, key="result_file", layer_name=None, qml_key=None): + def add_to_map( + self, item, key="result_file", layer_name=None, qml_key=None, group="Geest" + ): """Add the item to the map.""" log_message(item.attributesAsMarkdown()) layer_uri = item.attribute(f"{key}") @@ -942,10 +968,10 @@ def add_to_map(self, item, key="result_file", layer_name=None, qml_key=None): # Check if 'Geest' group exists, otherwise create it root = project.layerTreeRoot() - geest_group = root.findGroup("Geest") + geest_group = root.findGroup(group) if geest_group is None: geest_group = root.insertGroup( - 0, "Geest" + 0, group ) # Insert at the top of the layers panel geest_group.setIsMutuallyExclusive( True @@ -1398,23 +1424,14 @@ def calculate_analysis_insights(self, item: JsonTreeItem): # Subnational Aggregation fpr WEE Score x Population Unmasked # Subnational Aggregation for WEE Score x Population masked by Job Opportunities - aggregation_layer = item.attribute("aggregation_layer_source") subnational_processor = SubnationalAggregationProcessingTask( + item, study_area_gpkg_path=gpkg_path, - aggregation_areas_path=aggregation_layer, working_directory=self.working_directory, force_clear=False, ) subnational_processor.run() - # Shamelessly hard coded for now, needs to move to the aggregation processor class - output = os.path.join( - self.working_directory, - "subnational_aggregation", - "subnational_aggregation.gpkg", - ) - item.setAttribute( - "subnational_aggregation", f"{output}|layername=subnational_aggregation" - ) + log_message("############################################") log_message("END") log_message("############################################") diff --git a/geest/resources/qml/wee_score_vector.qml b/geest/resources/qml/wee_score_vector.qml new file mode 100644 index 00000000..0664ebef --- /dev/null +++ b/geest/resources/qml/wee_score_vector.qml @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 2 + diff --git a/test/test_data/wee_score/wee_score.qgz b/test/test_data/wee_score/wee_score.qgz index 6fc058ec49fee8b907767652178ea6e7a058ed3c..4a07eb49dd21531717ee37a6f40b6c8ffcef1fa0 100644 GIT binary patch literal 28883 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 literal 47259 zcmb5UWmH|g+P00myF>BfZe3U@rMSDhySuwXafbrM-4^cd?(XgmFZkQ#K9pjK)^s?K$vnV)PUb!;)Lp`q>g=l83pmxCu_?EWEs>o|!fm-nNc)!3`^ z23Nl4V;im%kx8weQb7-PjAPs0%5Sen#LDyih3{S$(|qrw@O(A*xM}UG5&ewr^Ml`- z)OK8XPA@qt{L=;T+!v=6SMh!?3DlK4-d3buD|a7!u5o?RrW+~*-8=Z4wFnTOIvmcd zGH!J5+c-^^oVFQpQ~b>6?#hBoHQk%E)+rrU?VTpIARMz!!}ZdEys2?@-(GYoLPVKxX7RX`a!>`|iX|^`tmU^zjB`&sX;}@uCEYvixefAtfXRL;B z$XSbN4t%g1X~WpVd~N3D70`mqwzxw`=NW#)$QlZB_b6vxqv`teeC4kJE3ZdYep z$G0;_Ub*_s#?;Ll$MMx^dXag=VU8!Neq-wjZ!hn=vnPG)t}E_{*t_G3*-9cJ!q#>G z;Hh84Q#x=beArngGMYE}#KJA}2%#>(qwMF=^vOMQfAO^>ue155Qu-bt z=5RsNq2LhEz8g@V3knWN=5>2XoxD#c?q{m~Ug!OA?_8Pma`-Ub%BNJ~?e&NU=Oe8w zF--c7yR+YmO?*Jh@8a$FaQCo1JNXECB4gaSzeBn4Y{nFs02?0P`wcc1#*GuG95yQF zyBgPNL?pO;r}OzEFk-KhR=r2U5!c@O_j7Oli*ZX#uUlcx%14DJ!+7$vPU(UGVWYco z;f{Wk>gK)o*K<{E(ZWSbI8~<4gpm*3nRZ;Qs^r_YKJ8aKMyMC}6@IRbA)hWW)1-T% zT`$yG`n=--gH{RJaoi&?yP6z9FN>LW7!v+mGEhUf&HfVMrcmKG)9}0GF#Ce(W7^cl zhx-CeVR9y)0dxhO`@(Nuo06%fLq7LkYBEK`+cExZr&k%s<=u7U5iJmf*u8d)W_*;U zgZHBIOOBlGjo3VQ|J|8s2j`EF^nLJ94PRFQk$!_L;Tz?~e5m}b!eS_JhPRZ^ zBRHb1Rj6wNzWdfyaMA$Tz2@aTd-fIQLb+n>{Y^Ho*Wz9i{Y^H%6~3N5mfiZ71o`}V%)paFts&cetIT)Q(}!c3|X87w-V#h zH>YUtP3EP1eFL5jZ=FpG0$wHH5_ImgqW77!Xau!}E|rQk{SG>V>iMlQC4Z5;FC~T~ zwQ%}*5R^?qK}CvzUuWBvWmxXuYzwj?J`YbOKi_#*gp;l{1-fRL91oP!o~bLt(0f4) zvt>j^&xos?^(StoC)ekV9|(QX20p;PTKABdu}f8E4s#KM|#niJ=~Hd=jB&To={4!b%rFNIV^~&gR#yObRMQo0N-)?VUXi z;*La4Rg!)SlNfZa7ZfaKfRE-IN2F_;k!(9+Pv>KGA#8PIb)8nTQhYC$^p=5^!%1>{ zyt%r99vx125^v3KE2!X+8>r*_PG&WmjqQ!hQRs^xM610@DlAQ0`f5N%2h3RIyNVKG zKR5Bc?&9|9W8!a`N&0X;W|NootM<3sAAlQ-gM48oqIKkjB$JkbY*2rgCHTdW%r1U_ z;8z!SU2UVv)lZNI=(hQ;!zzi+sGR`CK;^n$tBJE^iwl|e(AhbqCsHN5XZx&lz%OeSxdvZjR>6jY%yHKY4)vm*d)F$7<~NJ^Oj>^U+$C)W z&wBv}jKfzLIb&MKuhZ9$_^B#&U#XhC7n?(Ei!l^^%yj$1+ukmYAfm)p75IKSBsl-T zR{gxeoM^pd?CO!(zwi3OG$A2${dGNxZk}^>;kKK}&SU&SrL@Qvqgb$l9pPA{ z$UU7SYNnD`VbpZB)z@>>l-HOuoVj}R{>=pGGgsUqv8j}^Q-=-K%5x1!6am-mRAcgN zl659q3GyZvvQ_dGHxA=NAXed{unnUTyKyRGF=-N&$7Rzv|NV4qG%W}pBPGD&Y(7ie zymMOQyG6fmMNs)!TB_lb7FYGl!gMZmJ=r{7Z!MPA-S^6jPGL5jZkOxvca>&$k?UZl zj6Dk|<;Gq>v!qe)SC{KE3(n`~DhaPqhV`M(qt>fP1gkn^>!AdDX^GrdLaVbc0+Hae zj=Z!ok;H~x&JoV~Uf!?Q8eW$Jo8?lM^Yn9}$hL}!FLTk`1NJLiH;B^kp7Bjl#K6qs zn&iW?fyoFRHn*|BMklWJ*%(J+<&2_e{LuX!D_))wkPAgj@MKTaWA!@@ zbJg0gxiTyI3b2w#aG4W43%hUFou{H|`w=J7;!sW!XFmsa%eP*XV7K8Oktx^dX(NNF z2m!I5bIh3e@fLx5kX6{h>n4b0YbegPE9UA1_ktKzbmCnG5nC_Br(?yIj>Z|4MOlxJ zfQOO3j)^_)H0gHnJFosP1#I=*n6FGP0Vg9bLGVCU@AU6mH_tYno9~4;N1sQ=Lw?ofuXu`)zmiR!zO(Z)D0e`sDsbdoI~9U4i5RxMY6GBz%C4TAI^P9NZG1%cwM zW#_lEScXFYZ&bgB-qUaItgQIqO@|NP^TsP*&duCdlGI$Zp(iZ5m9O1)qv_f6b>2~z zoN$^`viq)8CAc}1D9E=sN=N4O{1N1>c;r;}7JUw4?SzP3N(51m4N21fh}x*q7O%X5 z8R`VZMx+h@uo&5+*pjRGFv8)SJL-i!?*cKpw|j3|-t9$Z?^k23SZ-Nb(4JfDcC!@9 zgOQGE8-Db6FO)@~l}J@y^+EH|ea4xhb42JGp%)h)g8^3bk?|*Lg!6=Ohak?XsroJc zDU^!2M*uALZ7&cdVEx(Aih&|v#f!C}qWg3dh5!d0JOz%?k9WwIcjy8zY{(>_q~kq0 zsanT+YA{lJ+Gl}gKn*3;f6qA~^ib=}`s{H1?$YGJmU^y6mb^C73@!5p1znV~)n9-c z@jYihIJKbj4#Tt!dL@&e1^fpxfy&n>h6I0FXdTY9DJRWV=+<w8W|V@zx2^coWa zka12im6Q2H7LftrzQTR=ar|a6|{853W z^>~x{n5gSB5gjwQCoSKzp9^~FlAAhw7VyFqoOe3T%so$~G>pCK#2$*ou#|=r+d|G0 zy1C&q$BU1eTqhBhH@Yuz*u3hacb*VSgKviGMf#?UxoFiwnK%Jyxb=ZahQpj>7_z1= zicA|UW$K&Mi3$Mzq1)3GV7ty?jR=C^tEoB85O!ORYocXv<-94`I43SXs6WKKDPX{o zHfp;A)`WVHIOUU|g$micoaZRJf(lOTX>;emou&H@7uE%+;P%-|@VVE@oa)_x zke^{jKg6)dxKkZ!IKX=c2TEK%m4zQ%-IyI*lKj`q_`wQVki^!J*Ne^YJs=Xei0fc#F z+Y07xrYoTqx#n2T>h6JQjnm_m`)_xGJi&LLErvXks`hF8M8_zhm!;EQKfMb)Juwq( zLh&H$nQ~0HJ&3mWZp?`cVP(|qwk-%B>dx0Nz)3f;T7U6bE)8H%i;fp}lywWBE(jkX z3y7s11bk0l5kBdJ^J5_WVv~44`rJZ!XpVoS;J(4I)y&ed`0bh5i8v$U5@UFg!7rNg z;w1M@#l7dOfN!lOH+&7;5{!rH-Jg9$Q^BeDmnD`=HL4#Y%G)o^kqa*lL?c#*i4m13 z8ORh;z*pbT!wW8K)a&p@2%TtJ+g;&{Y(V~9pU(#dYBhwAVPR|XSI;Rn;DMoovRDtt z0K)F_&J0=h0f=WlQmJoUWp%1^_EnrvbPIx0xE@M|ZyQ_9gx-MAf$i49{;2LO57mC>4zE)ps z*jDXtd6%nv%b+NG*a(MNFS`b`lU&a)K~>xr3|o0e{j}?I@H$SGqmDqO9oI)*AbCzY zeBFN^o_1y$t3{bF)t41znv-a{s80t%kNPbZal6Yj?(!5{9Yz&$XO@$#vRuDas=mIu zPJRv{lzV+E`UX1)f5)9Rf6`MQLJ4v7J=^O4;tocpA)^ym2JWN|ep-*%xSY4SN(6dw z_ameMS~touH%eCzo3)lPyU(Y8B%XPj;O9>nyYL!rvEC`uPrCk&Ec$-Dgi0@_=zQ41 zKeqjRF?qNRnf*bHEA~4HPl)%a+rSDO+o&ZY!Yqy>y2&Hxe|IR5Rz`gjx@|@zta4k5<43*h-%9mG)%|rVJalb;)%;Jal7d-sL7!z($P8 z<}@JVQ3Dj}dc)qh*{}igY|z>9;sn9R(0G4L9(!MnEAG7hoH#K2>U8X>Y@t$d;nVu0 z;5!6Jyzv@6aVs=?jzInCVetJmxZ7in3OOxLeV%&rm)p?Sd9b?&2H*wi0O|N#_%hw= zsolJTlCZoe8q&78vtIk)iQ6i7utBVas%}5sE)+?UT?9tCkybFDm3ule42fEij zNFE42eVoUw2?H4GE?9i97~5&LM&LnP`1kAJs7#ql`s!x%X^ohx!&jma6KF@>O8yrc zx-Js}fU$+Q&o8@3?p03MuWfEuzI|uwqSo~~*liUIo)OF!&Qld&yqnKQW6&xC-c+qB zUr9W?-S_6a1hh|;+6Xyivhh9ir8YjjK{xNGW!`tVwrRPyP>pT>!ZrMQczFRobKr>Q zS?oa)cbM(uP0jRq&jKPTV)^<|HI*vwc{|AXN9Dk@_~nxV()*eR1?jBN9ag@4qG2Z@ zvMi&9#8Iv;`SmmN7dSho_%Zav))T_0eq}p61i=_v{at0jKE1QjPRKMID=im6B`X@d z=kTM%4ovLd@$HiROb6$b!iYcu%5DGdCG4Jih0)4fuA7u&C>yoj;&Wi)zIy@WG+zYU z^0)itMu#w%D}fGcot>E{!Isyav-2rek2r%mcNor9-;u3#J%}WhGi4LP(Iw2cBEVze zR7^a8c>vx2Ke3Ix7dq+CjxsX;c^KTF*9-@BW5XWfeGECqv4p7j;BLi0ZK&?2!WWtD zB}l6)5Z9_L<42@N^&k813Z|lbd!aAuEbK5f1ROa8S_=FnXmO^U#YqH|=71=i;SJh1 z=@h6mF?;7N5% zD~YCR2EZIs`&@2&QfH9)F~d1i_WJWsBb;}?&DwTa@+e#eRC_d%c%R~55V#O?yc1cq ziyuI;d-=kSbkN#747)!X`buYG5zpB`APRuxJyiNCGFfa=t*jc9FKU+fmVsKI z0)e}@9ooyq`@pp@F+6u0VZV|ul{dvjxaDUqtL#DO-s3fnBycGT^Rp5I&AFg^nPx7D zmOQCe_~n}^`6RVk@eWwdO;qJ@hL(hV*Y+(|#}TGyJlw->EntSucUaTMRl1DvwQh{$(^`a+29#j*v2#u9u%7WvW+g=n;mEYA14!S#c$O?C^J&!jb(=(k=g#D1I z6csDD!P*v*oM*3)roNo`F&s&shP&GAQ_1T{sG1JG+n9ZN9_gd#eHZgx*`~~gn%7l7 zRhQCkD1CdOd?^9$FO-*c*QwuX%w9MUmX88;4>OBQqbzxfcY%PigoE3X0q92Q=Sso+ zYZ1Bzhx8t_91#x5)fx&GXVLU^K0}5Xg-jkur)DrGzC&l$apqZQK9EQSB5BAts*tTT z{RtG}#%|5qCA3XKrwx`*OkQ6G z4Q5Z?J4*CX=6d5T?O*CwsUW1`C$fq)50dp$~u$zszjrJ-fUfd z%T$YK-}b7Osn1bzIotYU!X6?qxmUh!PL6xA6=E$D+@_d5B)IbQiSOu2$Bh20-N*rV zIooQQ_<+CE)AA|vdJwh;IesH8lyj)`lc$|#&@A?QMX(er!72+cW{{$z#x&E@a)F|L z62nzt<<)epl=a0XomR^fr2_m-qpYHzQn_OR8FZ#!bUEfB5;)g|NyXm65g0 z0$!p)*lt=fn`Oq-I zVd!cZ!_9LDY#=GC>f^*Q;BhvDUvuQ!<>@2o`rfwa1!NWdPy|l1+k#qtS=bpo6*ej; zY$L~HEUpK@=y!ICp#^H;mW!O22M4H)XR3tx_i`!3ww4oB#8W96kAQCrV;JstFhz6DpTB?UrcMV1|j^tGOq|KJwy8wGnKi#JQ^kYPvWp= z@2rdJOdoZ1gKTZmcek!O>&zX2FQT={HV44*6O-7iU(OS&N14UjY8q};d&BoNxbIW; z>e^x0r)GT>i~F1_4EqB8N9>vTW$udon7o;*P?vVCHXR#w?C93ZWLn=vMdTv}^{&M0 zo;NW|5Pa5Lz-#>FTOh*bJ=$8moE;rpJv<{!=sw|VkEs6C3Gh$iwNII@Fq4;f?tyeW+;N=iYZ5Jxa4$zraf;VRA%^-~TiZ9pN5t+`wGcyP!_bpyiH0tJAG1 zVE>d_!eRC+9IP0QgxE~%b3tUCg<;K&Qsj*YGu5OfMY!}{FVYJPPu(|Sviiz&-k=}u zZX@BU_c&@34Va8P`jdG}wS}zqWo(-Za@vx=>{brN4B%>x8 za+NFv-N0jtJY`v>Tlo(!;T;2 ztdbbr-|@Z#6@Tevc&xs+-hSy77d}-VQca~@K~I#f`#J!Lc-lzE9%?SRl{XMcUqKpW z038P9{ob{A50|c-3&F7&ZhFk(P=wH@AYC>z;eyNa@@jJRJsu!0(l<~xaGc%(>b;E{ z=+}Aqst+8rNZd5tq(&-XLC^|<_2&1p@h>&y#>xf5HjtE>J1Q9(?^w0ewoI3%TB&&` z4rwV@P-j|~nbdTp0hB-Hv<~0|+5IR8cZdyT9L~OSF~|xzy7_6rj7OmjcW-bwYBAQ6 z7B$GPDX{QQ7#3yK|tBLFpg6hxkByUNSN@nWYl0{ zh)gA0a&Q3^W(M@w4Xt@~#JIe9S#*iz^@|Z0G@tOL?IG>9fk8egLYy7m7xbH+d5;{O zE_0W{>#{VjH#6RK3LAB8Xt`ymh^wE->%AHRIB=F|6eKwp^`)UKoGyC|RU`OU>T%>t zp_SUjjuBh=4U(G(sjV?=fQ8K6wd}jR#;xOUx(Ag4mrJI`!rfIbAH*zflk+G^b{l)1 zDbJ|jn8fcj#?(@XyEZy@le8CE4#_sm7j7uqg*C$oB7U7fc_9WKcLk}Nddjv9P4*Uf zd38H3uWTp|ebSsODXhCd??&VI+aQOL+M?|e1(=g8%ub*?mhS5szpQN{95I!M_u<%T z2PIj*IK+-)JNP_i0!5af5JP%Hyi@0~BCg*!wpUOd+(eG!gUnO2TEXy_u)3}Fg zO207>Q*ry7A5ufm9XBC930isW?1}sX6toZR542ERCibYKS&ROw@R#_H{igKa+Mn)@ zu^0-PL;fciSicyOKf$vE`_+$x9Oi$)8#M}=b(|?vBpO%Dnk3mmlkV=L(eG%D*)UID zn6K+ItqaJC;g6F8P89>VgE#SUPdJ)jJe5pWQO~sbSZN}#1*55go;I~%{gU{vHHtOIykZ2D}`MO z1BOFfnAp9|CAoa-I7PX?i{%`UKPkjue{w~Q`x|IqAwMag{DJ?7?=SIhJLU`ae`)`2 z_Z70K>Z6;F_;UPEX#PT!)7Rf50dW5d!ua97_EI!=hP(5$->+voT`^>M4|&Yv1s0(8 zwqbGyS(_E_y8CWFnpv3n4yL2ZFPd4vtsJ$N()nABm>PjaWf&E_) z$`7~Kqxf?yg?Q~5`!HgCW4b6>ecAh04ss1_In<^f)zNnhd|&;?@|>o&L*aU4K-nIC zrg4+Ryd`a=a<|M1^PaKF%tiNQ6(ihhDh_(fH;NYJBO|+ZD3gLI3(8KZ7;};)sJOp@ zb^_5Uh4KgfBlN$-zwMZ4tpC#f-R=b9vEZYdkIB`<6l6F5&~*%#It=_$gjVGqmv)?DLj4 zL0e9C`E8xl@1VV;Gx*WKK2m|8<$w|!wRuvc3zGTatr~^$woNbL3FtD|M-aqlGX&J-RM5a6*#25y@C{T*y$QOaN4G!RU0R zTJsmkZ`vd$kX>5;7lFix?wj2u=-SGT)BHiZqed1(Se4e~tnY*;sM>HpA^v|8tiMx? zA&aZ~45)Y#4c0FBFURc8xF~|=%y(Y|O)57T zvbjA+74g}pgh3S{xxV`U)LT*+R^kw+3JKZ|GMUgiae-s6M2W!WLCPt*U8S^@rVL1i zQwm4Q<-nm&hm_B?1huTG&@VO>dqBR$R`EDYRMKW;Vz`IGs|1^7Z~ z6ktC&8GJ0`zH;KA*lqWqem%*^JQ>7#u>8i7f$I`EFvPv#mdmd?avm6J??aC2(hl z6GjncY6|DiS(ZNIrmj;(aSH31Y6J!mHZz(z=<7lI;H=@$BvO-@B;mRf;YiK=wl&nROmZi1rw}703$zt z6xq1#_5`O-)`jFAkJo`)`M6#|Gnojh-=qoq8^jrw%mOJ6@_8|uUQs{-V;jrMH(6L= zEB;OCm}rtmn7F@z_6D&jjq(TnbNT)${%yz9VEt9`Z|&dh-XOS(KDzl>zTSQpRDa=P z`DT&4!2U1z_#(Z1gS^`iG6a)14zkAcJxjx?d6@`hTc1<;1tg=2VmD{s=uw7@Y}6kK zjx-yCq3{Dd4#Y?Q0~yi}?GOBOr1|lh!u~1#V`~)uRq-F~&(c7`PZ`n!F(GQy05rir z;ZTb%29fg(qnIh$Gk#(R!i{GS*{M;OIc^=h+CcMOvYv3N zHpwS7&1^}Z$HJhLOcJT(YZvOv7EM)ORx^zo3oAnH`ew3+GZdx&iV^=UqC^U?01Hp9 zA>qr4I;VgLA?Jh9J3!HH(4_w({Y`r}x-jFxDI?ORA5?6GQ;>&$X=VT>CA8X{;t728 z##HMN&wN_pf)xG~AS>Wyup{#QAK*ZKXn){8{x$s}@>72Im9x`j+`MpOwQ+}*2}K$K z`{cWKHz=ek_mDa&GYIlU(*J#%bmWZl1fHibPZ##0a=YP@`VxJ<$dJ@pmYA%K-Bg>w`*;K)-UAn+(8hZMd+Tgn4X~{_;v=ii(61w z0?b=XHOs+IEGlL)2(scSFKJFaIz?y^)Z5F7S{JxLbZ9vzYRlnUOOxBwB)mYEijR6Y ze+l8I4+$Ct+l;FG_N|lBb+o$zSNk8`uwn38LdgDhyA8}NC0>! zRo?TXEAgaEBl+g178>4DakJ?;ssqQVuB+2!A9Z;#q{acerFchR_c@_)?p&K`SEW2B zn9LC+jm%o-yAjg`*dC(8XcV1zB;qiumqO>yPaWQDlIE32i4iG!co`=A9bam*zaz#; zpq3t#Kk|LWqFCFyZ0Vg^Y~`1Rbda7tgvXU?iwiagYYhBMif5t>P>C$>2&;zEU!ET} z8dtoHts42&2y zynpnynSJbtM*!=rbU@Ngo86v1U)1P)A50p3v^IY~%M9N;YM0b3S#f~@t(3HKHU5Ux zy)`)!wLdmPklC_;JA`Xz=i`E>q40ia+jjQ_NQ5%1U#)1}p-(8Rh)Jrqyox#Jo_vX@ zqqoh<&)kKs8!wr!bJ-NE!TU6qEqD)r=h-r$4scGylgS?%#UTd7NQ~jITwT*-W=7u> zunu}^FuVr{d$!22588z--Ni}LewaW)^JqXBne7LeD=7w8gd?$QP5PNly_=j;6MYde zCBDleiFd-u%#8@RF2d8R9iQN_w`=w)De1PWw2ks$io(UWd`;cP88O;^zCL_b z)p)Q&Xn1X5E-wkqzE0GjO7Gt1Iz57FTE%`}vfeHyA0#Hnw^u#(^K*X0tN8KU`XOkjQURtJ7;dTI{Hx zAK9%O(~XMBV2Ab1wPde1gcy$RH&@qNa}Nf-!;9kEV^-!>Xr~+(oX_W>U#q&pwvN1Z zKg~l{Wd^6}jekB!ScDOXAxh>?FCO0@HGUoOiUJFqyF^Ui)?-OX(Tr6Rt;&{ngKHOp zZBpOXX_nkdmQ)uvQ-_PpSq_t$q({rY5^}vlRxdNVvCM-{o5qkrzxhRQji2ce-iU76 zeRsJawl`gxHp0i`X^%CJUUp~&lST5iJ+4rn0~yXXn`@oP^RqtK{DQ8rS-?sPh`PKv zSQ)1#ajuLL)=mTTm9pYhaTn6v`|kGSarbd|bo-lIrABT~>sGi0^ER)HU4@)lO^gE) zfOcgK*@t2qrnbrj%TU2OEo-BagO}eo?@N|eVGSi~!@z=Q%r1d$%PHJYg}}<~dG6NO zF~C{)M^KQr*)fmpMDp14a6{xNI8AAgwg-WfF80Hg*~!kyM++qF!dfbPGe)Xj< zKm*af4yjH|6I`_ptK1AerZ{+0mKQAINTe&9r!myu7J6@n&6BXJ$lRq z4EszkySb(|A2i{!hq_PEI)01-Bm}#jtAqNc(50=4#8->}vvq=*BGpaGj`-g%6hfD% z4mM62Ua}o@jsjl-4Sjl`2GDW2QP$8@efU7EKg+2yg^^ii_o@My2#wh;l5>#RcpV5< zWgY2dV68(h5@G%erE4Ds1N(ZJdfHHg3?lA|FWE9dvP2zJrkOkVG`!v_3?QKwZ<8K% z4b8PqH^1O>Q|;vDn`R!pBlqxmpQD*$&lU0?$+2m~=&7+*T{XY?(?boqF59@(+@tL< zbFH=U{^JnG@8QPrF}=*;{1}NTs57+MBKf>aD{!^Hl&GoCgUQN^;v+*FoVJ!smP0jE z|CI_uJN*Bq!d%;Nvs#Kg%;!pxtjb>!3(&FJ)3lUC3kj$pmq!0j8mt8RS90jq^0jc= zXg@w_HF6Rykg>m>k;e{-ieBS&OHLkqUy;V+>f-l>!`ZZNMvo>X?bwrI(Om2ozoZVt zj>aHfU{bJ6oP>1F+6sB`sJLF^&y$Uh^O1$%9wBj6+6W>3l>&XIL3p#YjyYh}OC=Ku z57(HTZS)4Pnx}R5fr7L++j^apU-UeCeTG-DU%2i@Z#3!LnDs4xzrGEFacMR}yJpKtI(#lkNyUjbM<9>E=2r^vu$1uvYi>$D zj1~X1W>q$?F@DwQ*Q|*$0h7AA>csT(gw;>>FpGIj)j9d*@gi|O8u?aPMKqe;OFRBH zY{;&=yB$7dAr!ERK$* z>dvJ18piu#%|k$07yJ~rmyCEzuHy>Nyi%{jbLw(KOF?7yFU_BZ`c09f%($Qt4nkNsDrLX} zqm~Um;lGP?-c6Tyhr?@`x+d%cF#zZ6sLkh&?s)Nqc4YD#=2#ZftfE8B{O{lJJy`?_jE$w zM^5VrMfhd>KZ@8RMXWcd>|xT)w^F6NZ0X%J$s#iz5pfS0ik|(7FXBAMvtk6xss}s7IRmoL(2t(9Z~Cs zAlVpe$->B;M=kISnElLeEwjTO`nJ2@j9G1$6?Esi5vF%lts8*8@n%KL9QQ5$=2!#j zo|>7rPRf$`t$mdrlKxTSX!p^a`m~%@24&p*%$&xm#M&-?RLPyA2_s7#Uu+d3rF~}`Ttl8U^1aD7G7+#fy zZS~Bk3G?6&3a#cG^VT8nr+;g8lyXf60_^Lvk^G^i*H{~?3q`f~3fZg!fyVT%k@heG zM8LIJm02Y!a}R?rYBQb19E06KA2q?3$|c&^Ydw}45~9-vuiNGo>#U1eTpJvVNgwAr z%Pq+(aCt25fN&N7yDP*i@e`l9BZk8Gnxv2~cow%nvpd~Dw$SF{m;Rld-C}FX3ZeaE zfweR6W9s;%FTwL|>`Q${R|}_B#CK5za8s6^{+gwAL0=_O=iVq|oqR!EL2u8y;X~cR zUv~+~q65q_g*p^LR1<@2&NM-2Ly!qAtNC{AH$Mg(?OSLq#(xHZyUN3BofR}3sSJe5Q? zs0jlNQYv}ZOHH9I`D7v$-9RX%-h=^hZvrVzBBZkGAX3?VUgT2fN>#K=BuWYE$e`v} zU}Op6K=*I8*FE}HN706h5VI^9wSCARq|xZm1IwN!ymY0Mo=xYjw_k8F*;ha-;|C^> zfy)i8ShrYNJZV!Kr;48gwLo4)8kIZdtTD#Y_ z{IB}z1M_5sfpN6zxs1;2Q)ciCwPWJB-`0iti0~r7<$*+Z~OZ*S}Icxm2^K1JJv?*Dj8Yx&QvQ{%ubyIAu?8H?7&9>O2JRJZsKt=()YF*Nw%K?^W0I zYJhp_$n3U`p0xLe_sv+dNj#s$P~$atJk$uw8ZSO%t;I= zj|+C4leibN8K)pa$F2t-RyeJS8pKt=&PvH=Yp!&BwYD1$cqYfOV|~y{2n0uY&@xPO zCoT7UFpIHM^-AGx0`^~qB%JBPkE4c@?Q=%h6i*YcTt`feLA4NSExhM%a~8Ec6|HEt z{;V%8AQjfh_;3et5$57(#zi2(*DutQ0rDy=sW*wc;YuZir&ei$P@ZYS7m%J_v0BpY zv$#(CqiVT~$>CmjjiPX)swO2It38yoog^1J>0bdFf~b(26JvnhK|i@ zkAtt&APg;2FBX>eT|k#djo1zbcI|4g*plO?JOSShVC@FHix=ub+U;nVr_f zA3qjU{qfu;W*Kq`Mxg0gSn74)WIE;R#iw(seTNn3xOhBC*YHnk-=Czy&zU)=8Sg$t z29sBpA{rYif6Fy&lBoe%6A}hx0=xSdsu>Nf4l|=MrpD4Ndz$h{yMo*FuxTE;TdBc# z1s^H~h?pZ_85oaC83SR*6PTIRjQsLVQqv>@eFxN2R3mCfPheHm3gU}H5|My574`Pf z_SW|e)l;xUYY5F$A4Eu%t?wXd#B}XSpu^6o44NH5U;!({)`m96@$d(Y3EZd0!<0|; zC@*CApwC$n?b~xlwNjY+_Ml%Mq9bCKh_<858^|2fjxEnViG;kzCde=AuY5`}af|^r zg*VE;3>2S&S}|{_csiSkFaOXy071aOt%YtBqT3nzg4AAH&e(xz2GRoGk*}!LOK3;m zAS|)m7^ay6+i{F`A!-LYoXBK#EN5Z)>l{`QMC+EVM7UkZVsS3maxDmugV3?eRQltP z;HiT!KQs^g4$`O0sSZguKWlmH!WoB+2a55~iS_yNv!>>15v5B1@8nb& zxNLy1^D-ozbb^#*=Mos)AVFA!Zj@N5-n_y23}&f5rljTpq>LVNi3CHokn%zior<=P z3_^AvL_KVi50avBe|=SE+b0Zg>RW$FiLJS2j5^IFzq%EmPJoOV>~pO|+cwwXQp0>a zXP_Af(vP1wqL2=RA(~e&h>$R=K4IV+b#MnvBnLcPoERMm;J@`nK-)9~f`?kgbKBcM z#BuQ4sJZ9VARQ_#HCuXvz#82^aAh&7)YA}TfCgvB@RdzoAgZPY`=ydlY?>#lL0}_O zPtdq>=JBu6*#5vA5G$L5EtG{Tnll#dqpiw$M*U!On8r)YRCOHukqY1$3_jcj9+(xt zsJ{M);kv3^{o`i-(k>oYi_LbO1WopF(5j>4vJA+2SmPy;23>x4^{_|9acRlp4KLt@!t8QEx&{V>b=K4tjoF6pA3A_|VL!5|v?T z^%Wyb(d8qkl39kS;|OdztC$fL%iB*@-X$boIW0Z15eZ-%M> zFpa?j57n7fRRQr)`thu;g>?)?=eea3^9&;*w7RZFZG`-3f=R=TIH|lSN_N{mEH%`A zwd1gC$5fjiGXb}4vb8gs$DBEiY8F3s0_xg6jj<~qHBty;QO)aJ8`uRpdgT~6=4YD2 z(rOA?4U!6xQX%z!Jw917k2T_Inv12o*VOeKpM5b}za^iiaiy!poSraASf&wJShxRz zRCCUr639?yZ47ET8mi$_*)iWEcAFYMXknXvR}7|hESOp9K_Na{vb_T{F@vv`ICmgd8oaN$~T1_ zbqn8RPqma|3u=1Z(C8PIsicuvV1zO7fD!ix+abKXhcXjfssU3SpibH3K;1YL;2Xf) zMyv8!vYP9tI_ijx(WFY_iU4izp_~D3B29k4q$&Tf1Wx5D&jPC>u)DF!&K5XnHH4X9i#O&r^ZkFY(e}O%tH6)IgD4!%2GI(+H!hbvCnR6yDA9w z1Q~0H8q^?3ZudjY@%Ji=9+Js@A)j;%EIM2|hs8dp)zHL9oK#4dVUHbl*+G(`=UXJ@ zj&kwU>a47fZ_NZ*e~=iIsCqf$mwks-vE?-=7Ej$w>rnGL%ERjBk*?;mStaoyy+KG7 z#u#;>_wR>e&87TjbEb4(o<(PxJct}$OhU*t8-XXU%{xfLP*9^_0V#Z`g2^-uR3;de z2743q+^QT*F>o7KuIbzZprQ?74BAl)i{n?Pd8$4!C}i^?fY_cJ#^oW0W68t{X*p00 zf#|vKjZY_g8CAowh2n4Z9=Gvu8)$B|{eDX(Q8c=v^zIK%hmuQx_K)da=zm3g1c;;- z5L&5df(`91HzGp)fYTi$cPD z=7qD7)neQOtr-W*_6O&Z_oa$Daq!;u8qIk@^dQR}5EF}NaP z%su}g4*CwXb(l`-msbH9SPljBba|zice0JIeDhMR+o|O+dn92PxtA>OnFbi6zap(p zRX=Id2n-xZmIv8fe->IjO!d0KA+svmqX3XM#5(c zp|+Gt#=@aMy;KIs%2Q~X@Fdv;ADOA*&(LL8ZuEmGT&_QX@hB({n||~Yu#Q@n1W*BL zBs4oH53f>UcFg_dBW^?2@j`7Q3Zre8dkf zNxI#uc6KKmV;mRr8qNP7UvC*!*RpJZ;_kscxVyUq2=4Cg1oz2uN|WD+gi79c};>qnS&t9H#_Ib2fW7v%{lczF4%L!+yW?G_&@Q zKIeHW{#e2gdML{O3S4f8%m&u66Nb#Zj(jb|lz~D#w~shiiKJ(CLvvs#7;cBkxt#l6 z6PbR#5J`X4tpqCPK!9S!o;zd?V7pw#K_?B%MkXE?_R^ zFwthvw{CBEEE25IWg-P>56dsb#}yRJHbfvWmu*#7tnJtUV%QfeLMdTElF7Mb%4yl| za-5MJ0P%4XjfW-OxT)Ti-DqpJxg!k1UlRqeCh{$ED;QOd#Jf+aZ5fI9#uKQ*`BG1` z-7y+k?d_@t@|tMYv2luN-$JIZRN{zFLYvyIvYKhuuZrnUT!5gwpc zUYr*+c}+gIvTJQjk3vr)XX(GipKSfTQdcw!7>iy23ZK7Hx~hZf`m-+OtbF7c_Lm6J zPBC=z!*+hKsW#=-F$|tQs-Vv)PxJ|$Khnw>rAMdFm_Zv=daDLYX%xY06;Myx;SJ7_ zR#SGys4ZIl(bEF#L&(K4XiPhw0t2!&TBq54T&vR)P3n$q-WE^ssa$%Fik}7;pnu;Q z&&=ZF%UM#3_0W z?rrpMomFRgw_rp8biWoYTjh7>^3+sA|BshOA98TPy4*YmK8yIrx}NtH^TXB?d+TyO zQWx&CR+~TGP$<0hiQ_?tXt3nCM6^}za^|9!GZoHY%qP&X-592iO-VFXCh%%OS5*J zdM%SNo?hhJQ6VIr#sIOW7&P!oT@Kn=zB8;!JVD(rt_yX8r+;mR?qPngg&#+`3)I24po^{qABxp=jHU?JX>Lq2V@zy9Yk zwO8O<*NtbB$qLnMX!NAellxB6>Keln0hU5VllC}oEK^75*xq-YrA@bmrahl7HLnZU zM4?Qtk4LAD$g*m)wCAiL_e#;U>61OG1Uydvy1~Xw@mz~mqRhDu+l>8HeJmLDs$X$o zMLUFwHKGQep;IgsNSJ%EZJereJ~Bh*jpVJvNgdZzpbgj}q|`FGzm7H7K5V2{8qbO? zphYiXo;+K(xhZi3+y$Imv8*K(T~0TEs%lc*mL>ltsEyyIu4iWKP%V_m42$GQ3tm)y zy~E%DT=2v$Vb0}9Fh#hQ>{=%&R^3X1!+eofp|$;1)EZIeN(*^Sz>eE&ik@+n`RW)=PI2MTKsvy|C!(5ZEugzVAqPM8b6%sS-NmTaS|Fly|5~jpt z9n`YMNR*71BBvqH{UJ>9)#EECs@yhfKbH*u{<*UIinh*09OHiX=eL%2OJ}rWGe=!dzXZ(7HR$LzM>$zAp`xYxtjU9GIZpZ z)XjBp;Sm2W4aH<(oGdD9OkE{z$V)@dzpY? z?`2jJ!3Y)Jm?kE(a|>UXt=EMxVrrvg{L?c;bFLq&3KYP<#ULIUcb^?k+FC zA6{%p_^-~K1lcA#|M=+)}lN$yr|XZzbq|96z3ug`bORvO5$F`N2?gs*#r zU8N$|gZsQ?L&JoEF6RlqnwQm|L(RX*$3O8Iu`ij`4jy)o zZEL>a0uf;)4$Zsq_4PV=1)ohBh{*friNZZ zx=z8$+<2q1k`wGCh4$N37V+6{{@=n~2wm^gq=c{vu-E$`AdEl%R_!8-YW0dGrJQdv z0e)keD(c&I9unfV2kjHwU==DccAHHvxp_(X^dkZa0X^zrak$VRr-2T(*CJZUaY#rAy%zuHe_xhUatV; zd@DjT2KwjE$wvJH^KrSBGtK-OQlY8Cp+sIa8a~iYdUa>-&s)eZPTIlx-)9kPQE6Lj z5=>YhMw4nsCf?d$9G@{ z%+G?@;R~C8gx{xo#ivq7&AI{o53Mfy5ZeEjRu^1{IGXUI_r{*|+o$mWqDW%1J!fX) zhi5{o+S05(;(p3^9ibo8_RTo8fx=y-I&^-iGRfm)Quj#}I*-$2)2y3ItiQQO-EkXn zd7LLG?q9A#n7Kw(YHL+0t)n|5)oTR@`*^su(h_QRU#T02f?$`#yCUB4!;fOdSdxep*!v9w5O4-_# zu7v8c?Sx>sz)YyE_NBi@mz>mL9xw19sb7%>uNlP|qb1h=TP2+CT2 z35y;crIR+Kib(D7iLolfW&_?;KYq49v?ovBpqPch?g1yHcKZ)3~|gB`(BLymsv#$Mt`y{0E$Y%`SV)#?&ft9jDw9*i6UJ;c%M z68tG2ohm6XbTQEF;)!BrFCXRTuKH?&o+cw`I@yj9XRg#2R)^5F|GrROyH;FlVz(`O z*WiOU$?5?n;Mee94BwA-IHFPQ^Q89m0e!n|rj~u?+yPU8glTWE(nkY5C-RojCh!EZ znD74O$;j5O&KU3!(QgP@KXs_vYE$jqJ8@b&!OI}N@%ifRV<{cKOC?%P{)CO+vE~qE zhd5<28LS*qQdek=M zI!aONgyC@<%F~Yle=uvCUU;Qq?yq~!dikTwlgd{uItkE(jK4@XNSew{{*&8==T9@% z!oQob46|esI_BnN#)us9w>*&XddCS*tN2ZmybZ5TN;aXxR85nKRAAlBWSPjgtRq(H z+~TLm*NuO|Y_Z9Sn&`%77_Hg2t$q4gqkqvrV%PgZ7pNABwkKu$ma7{~_P z)7ukLY2KYbP;kG0UpY}q4)qne-RHG*M}EN-l;5J@Gw!mf?_mn8ccDOW{f`< zVRT|zS>I+RZ9$+nZ^}o}yxXg_InwMs$?i=Q-`m1B|Ifhq;@Yi5HxXoS9=f-N*~0xo{)3Eath2v zEqJP>U>&1rK$fI$j?Z>cZWSfOUFq*Z0(gPP>rKAk4Ko4Ln^Rb4ESyu#mzf(k53Wc= zW93*^R;xAEnl)xQc~b+Tp}zBoaNT)cZI=4}kXZxr-tvK+aUA>|vYpZ!N># ztge^wS=-es>*Q)j_oMEHLPF<-^xVK7)mGX$2cGs=_XweTEE&y5+`v*zpdo2T-1tTV zs^X5y=*gsQ#QMn|w_RHGg{5A0qNaF-Nrp9>LYtBs0 z2<$~#F*WpvTsxEm$Tmu1Q8!dgJ{H&2KxE6a+GVab35JjaC{J^W*&)PejggCx;8UYd zvs~p&9v0XDc){IX^Uiua6U{SoYTRsc_Z4`n&H&3D_2RPrP?qPQyQ~EuK zD;h7tB~|jxJBe*wT~=4wSja#wmUaIlE6mGkTs*EEJg+MY^w8srOt(dus*7?ABvaJf z3dk?LbtqbvuAB_}7bz~$2_9@_18sK75*3VZ-Gn?|?Tr@+w&W!)lrj}^GPKN9TUhhJ z0rd0f`7Bm|Y>P-1y0;nP=!y%xvAQ#8S=uvhcOZr-#=&|`D&k269ex~iuSb9bnzVv2 zlZj~wjU+auGwwzNkh4oK*^Ryn>7H)?_i{}}Tgn_6QSgl>3i%`dj|J&z!9^q-{0s>d z=88N|h66e&8s1B8+|!2T$W?6Dq^ysIy|YMJl>Er!Kaz~5gF=xG;$_L3$B(USTNw>r zD@8wUQwD=bZwp(gWlr$2*Q}H_i13k1shTenv6HaBSh)HG))&zvX7AVVT$8lh!W2+u8>a^_5mmC)*Rj=(AS&M0;&Y$7sLB*TSaoT(p!uvRt-F2 z34LU4*#|w44XY1t-cLT5SaKZwwt`sTZBJg#Wr?&wPB?~OC{utoN!9YPfM+GJL;c>i z(Wc-CHa)m9U_t>(L&>8vGodv4M^U4=IitCYsi}gg{E?u_Hc8)0q3YKMCw`Va-b?R$ zdehRZI{Iopb*Mh=OO@qD%U=~fp|EgWSn{4cn%w)PgN!YBpW8b{U6gCS_uYNIgAN5H~_HLbWX0ouy zpl-^+Ujh|n-$OJKC0MOH003nF8MK9Dgcev}ElxyGk4p?zWxs}PzHBp?eUPIe zO{o2^WdAuqw?vraaDy&p+K`Z2wt>M9LoOJR4eXT^K>9=j-J*#g&A?Bmx}Tm4)I!M4FRBhV(dly9sxEUYx-XN##b&gX;sOd+tIaD?zza=)UmK@j zrR4w*ZyT})8G<&(JXWy=xxu-Kg0S`SJ~kP>7U-TnWtJJ=GU5-s0JhJhgstrMI*fB4 z;?PL(UpQ>gY(%{{w)i=VN_Cc|^7&w;!t;^{;ftM}@9Ln&u$RB`aGEL)kt5CJ$^~=; zrxd;dUAS!l7!R|#a&zSfKMKFetAg!6w#^mxZWyshmxk>p#Gvo7g8Uimo#c}7-%u~I zN&ld319Uk3^)Zdad5=n!J&HyOFU*F}4cojkoy(VPeTX-)ZT+n=T%Cs7t`co~NoHKN zsT3QMnu3jv)%th|TJuuZGq#yUWy=3d{Ld6mx&gkLq~k7)Ux~1Dun=U-xWK1t_k{5+ zLk^GiiXe}X;ok0SPKo_}zhmeiE}pdO>9c0E;+EKPmq9!7Yd07g&<)Jgs!TG`O>)Ra z$1(&o_4If(=clgH|IaPd2+{-uuq%-UGQ0SF9)>R2TLE8QTJ$f*5yr-rBd}1Q zk`4lW{44*JFi088m4ISrBQ;^J0n>7FlRL7)nq^pJIwh zB!KB6zNXB+yhuM?i?E@_zkH|GKh;`N!IOiy=)%6?xWQh_nqmmdDaUIz)Xo9?s4z5_ zSyp2o`NbU*TAxjCXzur2j2j2|)PF~poiBF?n`L#BWX+(9--BS%xO$;on z9}_rXB+kt5m#e;0E1~kEyp}_D+VGD%{lpyFb1m=>CQT2=i(0-01 zuHNuXpX(D4q>$$iToOvil~|8DZ-Gb*qX)_K@Vam9@_qY9vz@B|oU#!E5t|AL&jEeH zDTTbZ5i0s&zAow~NN#mnir8BNW?oR&H8||i4&6i6I*k0j0WR$)gI3H>=OX;b+e#WX zX~|&7Kh#78JN^$P_8#%d^?J#K$!$vIJ`&dFLy~P{m{r}I_qY4X8jxjgcpWx*5n*0| zQ|i$9OfeQh=m*-+XSbfMZn%RTl8^y)8v#_ogWhkW*zb@?{Ozhfk_SwrNp7py*XCYu zIywRW|3d73ZgAU%%!mSv*H~kNeCgsc+%Xpc9y)Pe`7gG;BA92?HOeL-q*S>zUf!d= zMw*w#r~@`x3}y(vTcU`+la#T425rghxWU~^IB!keCq+Wm7L_}ue>uu=Os0KL|LHNb z<_RTZJ~W@VIFoP8(RLV18A%2EP%{rwI@QSNV+_joh*im>!x{glw1eR){?=S?NCo~7x$h~?=*+SSWGF5_ zkaDKhi$=Uu63eN&EY>Q072Ph$tJ8x9I0IvUrbSSlVBOq})%33ERG3NX<$XLC#G zQcC5AW_O2fPMub`W!pdUV*y@!d$nmnWn1%I+~V2|eX<=Ke?-N!h<L1 zglVMg_z?NL0s0xG+IA>W>qN_(ciis6*D|mDo+Wb1j?%@2ukAxJCw=WJzusDnh<~;i zMsQ(^`P#ckuVN6%)#yRamS%bY)8IHeQf6Gdc(5YvvrJmb?pk-HQtxlBc#L31>jxg{ zB}aDC28rOHBVdk`YYOKGZOV zUk_pG_Pp~$XI1p}>KbWzbVu{%mdH#Z*&EMc;B;*(c<$RNcJ^iXyC42#Hza`qW2y%% zmTC}bmth)1{x!lJe?-SwID2i(UbN+x9$}Xx3x6<=(@8uBR=99%ePDz0m;o{xGQDZl z<NToD}IN9<~ej(zy-pwz?U=SN(q$(bJZ(-$ns5&BWwTk@ zW0b6-9$@wop~f4m-W91r^%mwjjP2^pQQj*@Y@O# z#zEQ;;{FZ1G#|D<@Q*;xKhLH=#^czd7(kNFiZoZpCc^qAs7gUUzp4dzEAikcyae-$-5EDIcW}{qL_N-5EW06h^n9?H_T_HZ1 zcD$hIb{V*k@x{dT`q>wA2<gsvJ|`3m>ow6 zYvntH=?1!CXWjnh?q#O>pViXPFXtOBC*WPQ?yt(R53r?@p)YPeBe|IUWW-S5thjBY zPTS(M76!m(PJ0P8u9@8)rp^&qb_p-N)qg5et#j{FUp^{R;(sbrVsw8hQsW&>= zlE)Tf#$B?sqIvf<$S-_wS5)%23gP;zJFVw_$bH2<*H2}8$=8(Y4)3UEH6vu*b-FG@ zb3Y7g92{eH;FCj{2n}Y3UZb!-N>l!)MriFQ`cl4Uf2vZrA62Pwnm<*k1$ZlRG^p;S z(0lesYQEgyY}je;p}h(MBfXBX98r#9w5_LC>-EmC)ev)Q@W9pco&|b0lrM68Fa*Q! z1P5XvfW)C}w(}x~ceR$_L(qk1hTAhwaM@V&^CEl7U|#BV$sM`n^2O!y;*+sAzR5=n zz|nbxn~gx2XnoIS9~hplGQiqAnzsLgLdqGqJdQ;4K_MLtzSQZN9JZ~krNK%UeusNx?YQJ7wa05uPNDV{tsh2t}I4)nrAve5k&I2;!HU znE#YkdLGz%Wi&jp*ADu~umT55h#^NjATddJMKBCAO&AWUuAq!ofdgE8Zt&g z1~+b%*6cY&miwyLokqU?@lGn4HPXu?pFa(zUH64K|9*AO)`{La_S9L z_5s!+ivlLsMJ;Z@#hil<_>^PI?vJ{6(+j#u<$anov+uHJ$ZQs|skl2Eb$_mTsC@JWJvc)>cdY7x+j`Jo=@?Vwv)*~$rEXDobC_}drRSl{KN$8pS z`~gtEdlvA&Zv*q0FU3o+GR?4A+etZ2?S_8(Th(q*_qmq9J;ROFW&`?Nt5BXZXzC6X zBhIwwo7=t4?#po3@*Phrw8$?#oo8ARpVI2CJviketaopV6}zOikEC3tKSl0YS5&XzTdBq9iMeEe>H~s|UW@1R)@t7# z;*gKwH~{mSFFraxFK0B(^>ELFj&@7sUzO5=P*(AW4LI<&a^<(Ccfl4MTF(xn9duEQ7w|bbuAegh^iTUmHeAw zg=%z{t+Sz1MxSLs*_bgyQNr2r`IjHH-({K;9@#z`>5#FexFb)(mx2gGOwdMjXj3Ff$zTOx%rjPJprFmxn~W;n;+sE!U#L?G{kpyo~6 zlg8W!QmU);^^0a_fzn0Z_r>u|dGE%1AD%1`R6cKtI5BaKXWDOD7CCZBzMEvLn}e@g z*PY!MHj*V|Fvpp+zMrNAUm?6gSlaIEKbu>xtdJ) z-6nPG?U_Br!3uQQcDIVBsp*3S?|rUhJ|9CX^s%2&RWEfQ^* zVj29>3Fzysu|9KsJ<~PJm=m%v|4>IzC*p;UrrE{lc=bH_b%l%n8|yd#aNJOW5kVaz7{-EGX(R31D|fZ%TY*!E>5IRX@vo9P0X;J$_6X= zte{pG9j!SoTk)#~9IW(b!~a(1{s{hKUz-U~_{UF8Mi(4JzLIx=k*DTFu!x`jQ8kw3 zU^){b2m%};vSo5#Q6V9udO#>hgET=XJb!#!b{0Lc&X{$({g571m$*ln6?i(%u^dwr zutAt5HVufSBBT4ffF?r!54`n&3VxV$t<;S3L*&Y|NQdzTs?88SjxdAD=Zt{Lz=Td2 zkXwfI}aM;5;Fvn5>0T{#wOukfI`rD z3D>+>d`b?Lx#q;??8Y;6q~AEsADEJKR%AnI%1ga=#3Qz2K#fnAF7#q2OMJQlk3ic9 z?NGD^KJP-(Y8kUDjLn1zw8Q@4@MXtfG{L{`Lo`9dC?_Y_qu{Uk|N8vbB~atrl!F;V zDObf4Ah5B{K$jdt1qu;pf)Bgs7(n@x7X4573IXjf6+T^XVDZ0ARh|+5WLmqT4h~fP z-~N4oBA3Qr(_s8F*}umB9!7+&sD_8O_TIOzt=7frt8Vz8Au}7dvGaFHh)BT6`=z#X0;6HXe0P4T| zgJH$kbwT8}odruV>pi9=6^PDj93T7t)`7%GRsIAkYAAyx{a~32*04<}3fA2izmm+X zzRRCkr_9<$NEMXBKq+1BzsA`gaPKSNJ5u*Z`JVCc8>Jqi0$9KE0K$g?uO@ zm|xcV0E;VfEXx4k^BT)^QR8OE)ux%%Cq^J&ChK)0(4=Po=;W@P5`1Feub_nko-xPK zQTBPbz=-_qe*eRuD{t;8BWgK1<~Vf9l-&We zEnx8wf2~AM=8r;ujF?^jqhnP2suJ#*f-tcXJRD(*xc^y{L+ZLc+l%#e(?YEzpUZ~? zBh;!H>S1B8@J%|Y_Rq)PH@OTqcCiMxcbWe)hBBJha{Wj^%-@Jwfo@g!#qNxljoq1q z6}MK=0%3w{2}Yv@9PX>8uKQ8gS^+6Y~vB^5|44V1r73eg11aWCXp7 z0kC>F21g=rmTCd2q?!lZ&149Ch>aB_X6BA9_TSNN0Q^Fsy8lYha!mb^_)j96;Zk%e zwfz6(PpuIDXBJf|1vh9O%2)B@DBg&b$n)qm&2UhT4t#UB<~ zUi!MF>#ad|O&b!7F{sF<5wRkM+D>JJC3ad6ri)$|SgwkaaWgM8#_j!9x7_^LRMqX_F2=EB5yaVDWwh0q6%_IkF2l#-Llt z-XOTwvu(_&~moX~ubfv;Bq zy+8E0aF1d*m`I1kW{Y`X_~Z#R>UO>~mp}ptUb_N&eatIC!~)5Y_G1U~6{s}eAf-=9 zg9C~cY6qI^%I(}lbe;OY68sXj0NcYA19vM54n(!Du(OcBWi?W2Nd#suoNXNgwzNBI;pq@6ty+v38Db1a`cum_Sez^YgxGl0ReMbK)y9xM}SCfC32tN#% zDiL-a29k_!1GL@G-VTJj6?lR*773c*0CH)lkITt72>0;BJO~%*Rr>4l@(rlb>Hf-5 zj5MKSDZ>MfOTfbqZmZB~CdKc)=+UlYGB3KeE3nDmoA90tuZqK|t}znQWJMqqRN-H9BmHI)8eiI$(Z&Ke?e8B;+4mWo zsdtG-*Gm!cQ-ooH0~P<=Lj{2y3{rSmA50e0H?HKa3CAe?UkYd+!GG+lA#%Zg{Z!pC zrEaDhOetQe4-&ey?X{EDZDCKN09s{$E1U21D2qC6N9ioOxJam{iyE{*xJnzeY|%AW zTHg|MUa;|dX48;_!F(?|Y^pEuCx& z-`b4JxUgxp^^TCC4af4W^C$4eRSt2m1$K<8IQscUHuW2uM3QkdTw1Y|jY&}XcvIhw zk@|QZIIwXzsF*59@J~q1!q~%~Uoeiu@uLx9HM=iH>bEdxg&a)7MIVhFsL(Z2K88Pk zjW?yPr*o*%hAW|4b1lH;Qk};s2UkX3A&%N+Bz2x-iik#eXdzNzD#pW3$Z;xSKiOW) zDl_0@Ci{+)*U*F0%&V!AAfuQ?9P#N(B_yQg3qKx-fO*`YgqS_9PwY-i4rFFCwgvN4 zSa2OwkgH{vV+bo8>J5RgrbSGa%0`fCbsw*&GjJad3&|kzv zZ|K&L*!361bH1@~T@8IDD}^^&rEDD2a4YsiF+C~1{&4Gij>mdd7iM&Hi4o3QMI%co=Pjv7Cya{R z*W?){o}u4xw3~t$Uk3QT zOH3%=3$F*?PUWNI(f|ZJ#HH0M4!5)hIgZ~K;DzK9iP(=QFBtUY+`cudJzNPVEQWfvO5_Vj2XSEwM671 z+V1Mzu)~bxus17;jtlh1RN!dZ(A!mrtDo2Rx4+7jX>T= zhHYHBVn32`pAjfFY(JBY6(M~OY0h=qw5^lwg_VY)3x5<$q*`l=sE^l=m zzCC+W)_n5#G-$l&&teUz5pFscBB}Fp&i^fkJZJ50ppgPdC(!@9$L$O16G$wq42HH=piSU$ zhHH>8#3wFY8DsKxM6)c&O*4+035|)Z;3Xs?eFug+@SMpxnX2oz!YQw*^wNDBMBEcE zc?HYL+FXV}F3IKx05hvi z!))oe?g%wU2&B`fYUk5FeN=-GVRhF-=*u8S=d||Ay(`vB;bQAP?pRa&ebjF{3l!;_ z<1`&3epj<X zu%;P0R`Nmi+A)kywc@T&_)jP#hn88q*E<(X?xEte%N96sgasNt|D1~Y?Dh?%?d`=I zyQc2dqXph)ZwG&v!6OE-^EXJBv8K!-J>W-`qlF6h3CjIrpkr#_+^q$EQ~tGBu!{41?d$p!wfg*O44;VY{@rPpFO_tAl6yRc77Ia*w4Z% zc2|vtcc}XcAk7*5iKI9MdK5zL>m3#)g~L$kK9BCC2C*44&qRevd19hs&xQs$+vM_X zyv~>a1AyD*>#Qx)Fld?~dV4ivKtWz2&zEET zrT}RVWCdPsExGp=hqnOM!reySd`9?-wdiO&A<}O zq?**HEsQB9S0F@wKPH)UPn#sUKD;x1e=2%Eu75u+@?8}?(%0{ut{4}odd}FG2y8Xr zp0|RgN|NnRe^jlXncSrSKVhXI*57j20=cTvStXg-ih}fLc!S(fJGkQ=6~q$u*6Uf# zSebz+WbAV_P(@Bocn;u=B#53z5QAmbf6|B->0kuLU9i=7F!@!k4oSHvm@zh!sVZ14 z5GCi^ytUKUIKz1>v-BKZTJmn&6tQ~95FI0#aCS{NnZsc45r$Eq(Dm8Enr{;n1keqNM_*-sy*StwSdB29HTFgsivMbGs2kl2l22{bIb~T{89@RI4I3o`mkYNsNmHU|dICeF@=h z3GXyZkbzG!&u<@e`ULN%tGa+_SZCxu?96Gkae~Cs#4<*G>@7Nf-ZCclaek)Tf)tUdt4=De~NZ zGUD-QM7~5AJ-;^`drb>#Xu1HyZWGPa2i02tiYBsLR^ND1nzB`VU~h~5+j0qE2^A^b z*PAjV+1#F!TYJ8ts-50X4Y=VVzwTx(+Jx}ak0Uk;}f3q!KPEe08NdD$-xXYQ-EJjmP|3E)RHy13^OsrVcRMapx4qkZ&prz@u z=Fs#8`_z7QcKuwSAJHdv7#6w@+>^huUMX4{QB*G_-BK%Fn)ht;CYveJp0auK(rp=W zRB!8shppu6(ZQspge|XhFY6qQOqG<}?nW%(7O(UGpG3&=KeFg0cE&gFIn{7+9(HUJ zdd+Pjy?#JdPHneY9e=3MJN}fR*5NPh1pKl5_ z0F5QzP<%x?yf{2ApVT{TKdo2QJ8M5}H)XsZRyyPf-AAK2>o-37VWt1lz4ORGXK6K_ z@z!kl!x7Tj|D~`699^k~_@$_%!fObwUZ=Wiylp9A>B2sO|02Tsx7Y*UN%f9nwZx;c0rwdj010NvI2P{V0 zeKzp&EQ4yQfb+(g#O}G>(lYbd4tKo-nCa?-dQhD?8Ga62%(74~Y$uNm_EvOVK%Yu( z3N<^5)hrI9uVZD|)H3{uxhui}tBK$6Ad0qC%ZDd^R6wt3rM%OMoXl;;bm+i3i^1$Q z;MQ&My$E@Y06M$5;PE-R^3$I660+*Ld_JoC;zUytMX&_@DFRbg>7NrScP*m+P-5pE z|7<*_Lnn@d$&30YI^+aJW@Xz`$}#lDiV^0wJm4T%BH-~_@+@PjNEJw_J>p?_DhR0S zH&BOs!OWnFeid_pKYFVm)>h&(IQ=n7~`=K+7p>nkvU> zM2{%fjg{gzE}xwH*G^;U3$)tZOe$Ljk=a}u0qc+xv zHoS2&-%Ne!k^sQRO0u&)Zr!kd?uzS^ot*`|f|#PuDzEfS60hn#dz0YI(|T{qY-7>y z;K^2HTOW8`cc=DB9zaQ(y~t2Pf!gpjC_u0BI(Hp8ub~riYmG>cc^CoH(JYLEzR29hDI9KDR4pbhP(=|@< zkzJTO?4{pecRXUS9qA6{U84{^&dyI2fQUCwM7={om2vYkd^+WL=51KnLQFWatCQ&_ z%s6t|PCv(;y|p&V5I_bT-RxwXqpjX@*U2tFxyECyS9fmnyix!=D1L|PVimj^N{cAK zi!Vix0&K*1hTGd{;yZ9T@&l;8ozP&ldqF6yO`rZs5zEb(f_+9U z!7rXybZkh2)|Q6HJMi~yAC;2cZ26@Ca=R3>MDxhdGGxv?Got66O&?TmEl3?F+l%$p(m?)AlJU;(_?jhFO8HPySM?4&w z*8KSHIeCmobS2 zQy{!~Nd7}<1?Z19`Lm~bea}P2?iF#0ID5GQ#>NLw^XDK}EiP|UyTlxh$Yfe=KMG+~ zfBOGXoIHyi{gEes(FHwgoA`60TDaANzX-y2kNGk+QTE$o-+gktG%pHkl-xF@E4@Ax zXa{#&#n(o)XPo~{oV;N%`nNcl*RJ2{r@Z*?;CmexOEq88Vw*eF7kdiZeN zZg}?$Z3N0eg19}~q}!PP*&9ln-`uIe2ppKS6fQcz43&S#;e7}$|IYr{Fcmmvifdmf zqT^V#zS9NkOlrBnPpLlak?I(~7>q#WCOaQr`3gV5e7&J~=`gw{m_v-Zk5|ZOD7oRq zeIgkd!zqPz6>_Yu+;;f*-haPa`04iZYl*m)(n9xZrw6Z_r;F$Pg?3^$h|`CF3BPL^0REDdH3h5WAbylB4r*;2m2`pXq%l z%qJ6U&5sGGaT6|B6MQO3ZqK?mIe&5B3M7S4Oa)UlFsSXkyp7yD6nfZ~iaXU@0nx8N zsdpzCh_j@0=PJBXW_mxu-69&=o$F_KSd3?Fk^3Co27+r1ss2DpK(__w|PB&qmqxu-Iw_>Y`1N-n5_I_ z5|Ql*^XagM_-2tX7@R$1vHe@B33Bb0UVa~~LxFVKY+QxNNjjQNp}X(+p?(L8~Rv=Xw2(^ne zU0T0<)94&%DxN6&Srj-pE|?eQ0&U&NAdn7K`<9}qDAi+t9!iShZT8Llc4Y8KO$$6b zq&K^5V$~BKFLSu3_%$vv8=?^?hDs8DJ`h+%*?s)oybY0; zLADOAH`RBWr-@ss09jXW&ywdP>6F}3F$wIqX38{~n!_@KC9 zLkplu6E&fqGoQTBnCn&}&?4-?THvMvCvEIYKTIWMM2o;!(6Np?{GT)n+cacRDA{0n zEweFvP(nw4mD%GS{9R_BZKI@X!;|-}&H6$i*Bxfa;e>%lL5I_tJEz>F>vMOAwkI$A z9`{I`&Jxi3l<4(^;Do}P=heP4dhRGoyCVo0n9>3qB@6I4bHQHxQc-hNCV0Pk)+l9bsdy>gV7YV+QZxvFDny;;ttrn zHj0fH1b+p@rwRXe#rT1x+D@g(EzC#CKmFmi+?hmK3z|3iSR@ zrUfdE_fVaimoe4cHmB}@eu$|!8pB6@Y*IqKiJA;5_B zAoPG>Wz6WP^nifB5QfcI1mpki#wsbDhd_f}7GP6a!uGWCvI^}}5B zze^Uf53*n091Fj;Ij?k_(uBx#9*~>dLXP!Pi={q3QO?Z7@B!0NHKL)?eoGco-XsfR zh-fsvcoWZHs@+F9B)UO(@A5gW=qX-inPLMRk+-aXkcZNYXD^!8 z-$%MP8TdEIp~u&BAgBOuP6g>hZcc-cWdEdw4jL({@QBDv6~Q)4FUF28Xx1O=_K6mG z^1>7CSfzD$h^QIMqc#-y6kbBfpl8G~X*k0{hV)a>nVi2`YcF@&Cy>MpDj z#HDt8f77JBSR7ThJ={}aME%f5gi?v;j~Og8Kdg1C%knK11kpwR;ZX2nex@(KSdblP z{b|7(Kz^{wCaohy=VuEpl*GP6#OU7B^U_%MVL@nHhm`oDA{Msi6)wJ5#Y`0X3t<>@ z4GtZ>E|2^My;+aPMjfi@{%>tUuse7wc2QtvS&9DFrmx^}jqhUUoCIch(iO)`TH*Dd zRrb-}mKeR*oau6GUkw}ZN+4MsB76^3#=9I9Et#e*R-+U(QAGFb1DL(C$p95AvQ9ez zmnRI=pBz3fmOl*x?fG5b3Q|{jGCeX}fT=~dj&p~tQXAPKO$>xZBgdug74u<}fwpZ+ zUR29187HHM2Js`qNrY6Nt~p(68i%8aG(6M=;x*k;Jm`tySKWV{%y;e_yC(AnTMyg2 zCY_8|?mV=KQy)AvqC9r&ZOLnytto=nI5`%Z2Ce5xj5)g%7yFyNH12Z876cD;A@Eu1 z92Iifq!gi$hC>(Txsr`2W^K#Y#>c3y2jO{;lQn&$bS_=c5a3@gz;V)MUG3Oq>$Uw| zIL#zM(Ca`j(>GO%KQXt-V)dtR+IO?bVO5c@_ljI zF>FWTJB$HIqdXX`+=7g9(4Z@DkR<0KV2$2ra+my= zuNh9#7^xI%a z@g9v-9s3z>0w3QR_nG$vlah0^T*sLSwJp&RemCw9C{c{RHSTLT&eVT(&qs2YxrH&p zHiuM35`|=MAPa`}H4QpCPqm+OY(;7Nq79TBH(W8wLY17DwKzn1L}61^G*FGrfNp3Q z-h0hd1yZMo>WicwbNU;5kgh-aFx|Dn+se=#^O!MIm-W?neM)kKUGXR2q2o~DniR=o z{*AAB)fHe{@OVVP8m&LwdI47;nZQ$#)$2+*^^2R!sZFcO)9i3B(WK2w8$+Cl*ES6& zptK|)3SL;q zrDmQ`si3n|zh1^J_K3pp!G7%4L1OKBtJ`L*0*<`8C}9$YiPHF}Qf#nAguGc2y5qAo z6WdUm`BSWX%{8DFTF%A?+t)gF0$GW%hzHJ(x;XEp;TIIH=%}sI|FE1NEN?7lx7)!@ z9K)$3Mojt&WN<~}y#0klpK06I(W}&R%?5i50{c8}m2RM0!{d%5V^G;pDBCaT-DbXR z_byla6L(fbf%BM+(Z~~3ky;;Kjd-Z(a|t3kn{T(+FDO*s_<*7{=(IebhYe)99ASX6 zE04P-c4yD2EIqSpAFuo3CqyA;D#TNjf}=d5b=644xqlHH8d5G2tlYGy`%3hf9ImqR zhEww)tAuu?I@!-`7))}N{Hvqel#2u2LkA|F<&>9NVNHF*mnvdR+edJ-A*gd^wTk>+ zt3TYu<{e4{0)z)DFm;2fDDZ8n2$0|jNNjm1%~C&`Sv~D9#YN$G z;-~x#?Q+T_F}yvKSP9ri_aql9Algjof!aM{X;zjP#0riKxFp7>?|-42+3N9x6OJFY zBiWWltP>Ia&+VUWg9nv0jC&!g#8~SAPtiP;A^Q#K<%0U2=Ww)<_0#ulCSYrv01z(V zwg92O!PJl>85&a7(KSz4U9lzA(NE<))i90t0(bvF)vVxNNrLuT4;R8t z{ZY90khaClQ(M2cwR5+CTBLeKjs~9Vgvo>-Of_4jbT>t&wJ}eJ*w@;Js(Wkn=PevR zZC=f6pnJ#KI$h0j@q!gzf7alxQ_|wXua)^`6DPpoET89agk|l?nd^>oYr^KKcvK^q z>RRo{l@s;Mla-@iYlHD}f!i;0xCbZ3gXQ)r>u@CV_^$JmK(9||&!<}Vjjv#y*tOL! zzKsY$+naQQ3@LwT%s`$*`vQThc``#x9)Qz-VS*^(r7VLYEB0X}^wSRJr)wUXuK4C& z%}ZPF&#%WgfeZ2{ymNMYGHSv_B%I~NoI)lI>GpZpl_j<$jF@7ML$E0;B=9_w z;lptP{6ZoH5y`S`rU34b5Y~gH*a^e|j+f?yc#83%73J>gF$D3Ep4GVXKig^xzx*ud zE5}G1c^pTD-Bj9(_`26Ay_f4pk()pHo5;N9+6f3&a{m{R!H$(DaSjP_SgEJ^7m>NQ zakfXq#vQc6U{tJ*X`zMeQy)Nllr=@Wi_Fzs_a`*ywO_4%J zS%0ap%hRiu)$)y%(4h34k(1|QC;wq*%Sk8Cq4urJBT)I*)lrS?a)%M;6)}U#c-;~> zyd~PXl2;;~LuJ!&*JA`c`lK_ynUu#z<%SRk7Jb3BGH=1gMAsMT%L(E4Sy=Cij97nF zD)A|bpCFvUIj~8yqEjg9`bxCIPX&4uxsE{+7>sdzZ}Dewucp8N55l_GL`-C_AEWpi{5x;|EM%$IN{YKHCQlxIx+0JUL&7Xn~x zDDxx2mKEUf+nf*$HO;uogkBd%*6;|MO988dLRtj{eu0HmniKYld?;0gdU~NprtLgE z_Ba!&nyE9#pUx%nN=3z9t=vd(RSD4O&2FZB~aJoBwPE>|N$0g2G7GAx!Nqy3+VujErm9nc_#i7t$ znY3m>#KTqW7e6{xhfHf9#(%s^2UH(89nYWnx&o1j4~)FSSN9N|QDcO84&zA9wam4c0vERH4WN8-Z; zA7F+Z9?DY@{>?Jcbt~6iEAj)o=(Cq@M;&0?6l)by9ph>yHcQf<`inanb3;9CM3&G; zL|k><`m0?8Ekl(0!($Pjizd{&Q|FOIOQJP=;I5+^7vc8&uZ>XENT_4v$PQPpt|n4K zk}%qfoyxASwwgp%0(?sWu@c8I)vwC}Sf;OEFhFei<>l9EXSDKlmq?6~&jYm$-*%NS zJB3q(TVjSV$;0ZBEWW$B`qXPV3idmXQHIOt=y7&vdTC!v$Tc0{UsP#0Kht<2rOo1U zA00XDESJo>sWB!;L!~;5q>Oo29%HH=(cU?ecqhXCkkH#DCyB>EVP|u`V4;C~cHUr_ zP=YjmkFCbVr1_P|1*R5OPUq0-1iKo|6jbXZL@1zlWS30;)k(lfC&0AZ4vr$=PXADi z@ftZ7WQVvxZ&I;quCjiQ*_FT1 z9IsC*^9oitaaG=_W$f8kbw&caB9PbYf$^@;T8Faf7y&O|RX&#VtZWlx%k> z%_LXIDRMcuX&RJuNT9uSA=fSxv|PnZ8dbJB{dYE6?R*ew3>2a z>7KPLrXN(OkA*t1x2RvL3}I2gF7`Oq+;-Bn)0d)GQ#b{QqXn|1b1LtyRzmq>r&f9W z{6YzT@la}1QNTu1V~`U!_$_4GKBZU@BZSr{@n}PDJU8F2HckJB@U0s&9+g~7Eh}|l zq!^YE_R#h3nerMvlfI$!t{kBHDRLWmu>}tnN}6ICvl8>>yFBeRba2#vNQhRbYSY(x zPMwJL?80<>JyO$uX~fZabwb>P2Yyl`3!-?m7RQMF!qhVY*kC@Rkz>`*vE`At2woAS zlfFa|^XL`FaaM1ke^;)8En)A$efL_$@CEtq-S6N)ZDg4>B9MvY@9aPm0cqseAKW=3ux0|irq$=U@ z??B2m7e2WtPd(W_Y&I6p0=DkLcbCd!V)L13Ce7?m{y7C6{_E$Pe~59wjvYM0n-2JH zpH(D5x=^0}_^plRYYXJL0HY)qTXTzS{D4FvV|`q%&#=_hp&oA%HDV*3gk__pr>U8; zsr=KY)a9R_PYc^~SyPb)Wv6+~&fXeneCfSqXTAEV#>^ZQb){AenwZAo|1uEOGl)FO zW^Ij2#P?n3(WaopV&l+^6m^sPG3BARz3gJ7F~hXI;SiSLn3OBoTl5VK*F z3>Kqq;PMM9Q2gZ|8VA!G8N4otfU|M_?H@|PAnd|xF2MNhA9|&0=N0N}75zkep`mRvN^{}!9PJM-|)z1VEQ8*yS@$O-svf!$jncg@G=#96iS!us8;7Se!ckL>ev;#XYtHVO zjp&-i@i2$td9Ra1#1p%>j2o`#ywg{08bcyneb(%EfZl^bXBvjGYkoZ@LQ^Hm!c% zYmFjgdHw*q`qxZx?@+4m;X+BDA+iGFg9glo~w)nf``2!77uJo zY_Gv-c0Rjn>XVZ3zdgUGY!i);Qp!>UEz9iq>xz6ZS5qO+)bf@GN53_{7>SF#DQ}I` z0^wFO4u}MOWn49Uz(zhum}vr4FDCe}-uWyevt$znX22B&o&`~C6akJg9X5DAfmyZ# zJT#Ft13^2>S@ol1k% zNl#x0{yHl!rnwn@UnMB_VY)JJR8RnDcBS_ry2pz(syxDk^VhEN=T zZ2IEDmLRl>W#bam$xMG6{bDjm)mAiW?dLkKqX(?j&1c4P!)xHgYit|}TFh>4AY!I+ zpzoa`oml+b!bc-XKhF#4EV(DdvXwT;2o%EvA2Xm03(^1S zj~CprXRX`yanMWi9TY+_g~K`e#wxEf@F(G&IKp4@f7Ib#|K`*Q#naWHvOi zt|r8=D!<&6K&Vol)4S!%+Lt^Br-{g|X7ZvfR`_FJq1d7zzjoD&?nNQs0fwiNB6;h> zB@Ce&T8ae@zyk8eLT~qMLoeeo7^b@4>e4#{%CE)4F_tJj6zVYG?uZd8c!yF0PRCsl z>JWOh$-jDen8zD>$;=%TvCh=c?$7APW+3h>zz63~FQ61qs8rDM%TjGVaH(=O0Y9WF zBiNNezs_0gxzW{H+Dta!3^O>e6~}&PQ-K^mo-)zbJkT3+awdth^yQdm%3(ZS55h3d z@wS9xx?y6ff>}`9!~uefeQ$Rq4N*prEmh;fcrlzUmzFI>{#6PqSVd2gT|d>iw4gc$lApJ6Wb=9*;~*!aWKX&q+|5! z=MBr_-n84tNasWvcM02B-Nm)}K4;ZBMg^<&fUj-VrC2aH=M+oC0PYOnTSe(xcBGUem% zVUb&Ln@5e~y+{`D4&p0r<;dWAH*zCbFQWk`3vV;nE_DuwHBUlDaPA5{rWBH;JiN9)1!rPt6 zr~Kt%8DojCR|gJG2ghD#zY4}&4qJT9ak$m$X4G@EZk5+Ki%oZTk+!g8g*bEm`gWaY zYqz82&>rp$fqHwU8Fal+gRd;t@ETOho8ZR?%C8X;X=|R-2xzXeYzn2>mc|y_jqFLn zZFCC5Wa-S~*Q_uvyqAOb11zK~1VqdD%SaAm#)P>tF>f2Ue~7R%K(g{bM0%WtnQ^Be z&@GIhX+qTHHvrWLBv9ZLb>rKCR&3aXDCA?805_SyFIK+}O;hmJ8~E=F#OA44U*&g8 zcx%%h%3gF6wPKsi*Gl01=$VGd>ianxsvJf=KcVZBC68#jLYbbluLOw@c ziVshaA zA<<~OC9q)dg~s1VSQWTXfAx(>yGNs2-*YZ_*ZnZ>4w|>CBpPrxvb@fGws3-V;Iep( zXUWjY%5LP%6m2EL-Ec7dSgJkuu-WG8%a0!o?e$sNaM^W<2-x1acg&;kWUt{0w{!Z_ zC#KkWukbf9a&?em)tIWt44sJsg$EZYwAfd^(H|kEKqa*Uy zCL}t$`8kZ;)-aKmU9V6Jg_PlWbSzi+$Zxq(6~$|FtTG#57p8Gy%Y>sXd#xoOR-wD2A2RP39WrZJBO{Nl){(#@3I;AyyL ziCEmMKAPuhz315WO&oFFN40 zwq7Ls?Y zdd&8ifKw^FRLb@eaDg30r)-g05E$y(>~)b=%HlH9M)TDxtC|$0lY%4S@=o~6BAoD# zV(mA{X_#>$BU(UuHQ%z`7@vB*BYmcNTwF({^aQXdT#hawC*GJAV3|a5oV=8_wDsvXo@!*N^^p8sOVaT9#Q{$0`Hp7*T#@mRirJJLWWc%KE9H!_i2Swe6JkI5YBp4-??3 zFyiuDwZC&1nR4u{iG2O{IDxO{$k=43KeI|qp?-WjG1{W8Rw>-G-Q0}gWh|G_55Ws&_B zCV;Aza{cC#Q+E89OU~zApiOh&r&shBXTR#W9s=$ZEA1H(@QPBiatL`HF6BffA7oES zoE8n3b=?G1(H?o99CfoH!m#v5Wzk?mF>1Kx!PxjiHI`M*A#WNR^=_m}U}F=#<3D_I zg@?SIy8#Wk;E>Q{UN;x-r1EOWf85?^KLvYx!@3V=MS)h1_3Iz^lPhz;?j8E;=q|Ga zy|g?od^;}v@05eBqXo1GGPJvp9Wgzmt?mgc!SE_1RnqAw#or761-g^P4-=s*m;DPI zTwFcwtM9^gyA-4_mR~zTFI@tSO80YEt6h84<*DS05hG>)A)V`ba15{cDEY+_`nPn> zW|nH()~E9lD$4V}NfcmYD*c@(;Fn9bs|hpuCH<7frrn230f*Z71et}t5QlDBh7rAq zZuH+Ucfq8*i;ATGMEG-{9r&nHU&8i1!;eAeW-P!uCY`}l<|U6X+3`ET{xPBUWtIx& zvkDY5UQsws@A{prKi@7oBh88ugcsypLiGdh&~NA5FU@~<&e<#uG-NXC^!_L1wkd7t zxQ~SXwWD2iWOGJ}k?;~4M#8n0X@_*`cl>=+TdPRd26Fecr|{(eg>rMG+xe(7p}hKm z+BA01b{U&e+Gmw^8M}JuC>eFJf{-2=5v*LnD~o6VAl5f^`t-A~6CH#ym|SrWEpbg64$BqF_nf zs*nm=#2wAPV>X?%RB-d}ND}YbK?X?ZdQU3Y>6i`{9qtF%j*ON~Mhk_*aS}X_RxBDM z^-MwBbkbahK(pth(j){u4eH-=zXxt#9_6=f>UB6PM0~SjmnLug@q&-#;kPKToi;rS zE`G``glU&qCcBxSlZ!O?)`ghF67F^M^LuTYR<9Q?@>yvnkNAvh#C%1dC6b0-^qy*E ztk*roFgywox7W$*N6ZcAy7$%D^n%p#-!=RVP5L+-NE$UN-`@rB_Do=Fz;lPQYP=YB z;Gebh@vfcK0=8Kgd?P%4HJ`gCnjt=*YArDZEJGmWMh%L_?9dB{$VFe%uP|WYEOl5- z+2WP>W?CLNoPh@R4ws@5M65KC46yEBa@c&uDa7k5=M<`#dygy`OSA;^TIvm{0-sC$ zM6HB!mi1^oP!yaw?X5>4q=l*u(}KJt^knibeRiv!Z5yy7;~2do=IY#b6)BGmFHr{r zxKfRy6T@Rh{S64C6J5Ik8~2;O|aJL(rIQC1@|*zJc-u8 z$6LjM<*SKA*uW13T^!P`VE(asZQoh=32zKjP?Q}Lab0XurZwtOKs^EkaoLW^G#2m< z^2dbrhmQtok737XNlmx6ftoI_t%!lJa5 zfTOJCWMBELv@TLG$$OZ^3HSU2f|QkjghB^{0DA{!_>DqM@Z3gZ8xjl*%my6n{o7zG zEG27eu5It&YGG*4V4!!pIAOhHgxzJ^n!_OgX_~5n8op%$8y1wr%rKT?rfMuaHSHi3 z+VDL!22vUT^TQ|foAXwKx6$<3O#bR!=SiJZywd@-HKJF%yps;r@l&k-`kmu7e`Wlg z?em`J>q+(|_g?X`+ze?949DUi6sb+iXn>7A;I?j?&p$pAzd zM;Xho0?*SWYV|xdnWItevIx`z5n30W2k0MG9miba6cR;R&k)`A$ENVU&7HZQHEAWf zRbm#D$hDT@EiWJ02qQKbI=9zWET2nCm|x0Loz@O4HmK{V1PYeY3^;d`;61eQte^`r zs8dhNSIDwcJ3hx-_(lu$zV2c+col5 zl@YstJcQbOn|iJIU{Ij)o80q!iX5-;MyT_wPKfn%OYGQVd=BMf6OUm&SUvX(aHVkh zbg5jr>ZvlxQD6Tn!9X8D$VIfk%;f=Sr1I0k#XilLil)-Ui zU-c*}{yaU!-uOuBx7vp)pl@JyBH4||}vKAMIv(Q%fLSMyDfHPWKozJJm$c}S4 zS}J3?l7Ws+dcp!jW+W;c4tmqe{Pa3TofQfx*4qZ-$WJk6{ido!bfLjJUt`a`#--s= zx%Xf8pb;Cfrx4A}=WU8)qPOy0mX-Qv^f_ZPx31phw_vpp^o zc|JkJ$X9%Se7i2dz=-R%%0S@1*WU5n{$oYp|JRDn3(D^^fvJFgUz=cH^PoS2&yB#J z@qhUHa~Wvv`W$fZXB)7b7&$WW`6io|_Ml~k#4~UCuxKF2n>O#SBL;|h(BQQ`QgwC8 zN`ONMK>l@0V9KRXYZ3WqH(3h?hMNHghV<8={w(u-e-F-vhT8V})^>&rw#N4VzUzN? iH~D+-eBYw4R% Date: Mon, 6 Jan 2025 16:35:31 +0000 Subject: [PATCH 2/2] Fixes for population classification and wee masking etc --- geest/core/algorithms/population_processor.py | 11 +++++------ geest/gui/panels/tree_panel.py | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/geest/core/algorithms/population_processor.py b/geest/core/algorithms/population_processor.py index 245efa12..ef67f69d 100644 --- a/geest/core/algorithms/population_processor.py +++ b/geest/core/algorithms/population_processor.py @@ -365,12 +365,11 @@ def reclassify_resampled_rasters(self) -> None: log_message(f"Reusing existing reclassified raster: {output_path}") self.reclassified_rasters.append(output_path) continue - params = { "INPUT_RASTER": input_path, "RASTER_BAND": 1, "TABLE": [ # ['0','52','1','52','95','2','95','140','3'], - self.global_min, + 0, self.global_min + range_third, 1, self.global_min + range_third, @@ -381,10 +380,10 @@ def reclassify_resampled_rasters(self) -> None: 3, ], "RANGE_BOUNDARIES": 0, - "NODATA_FOR_MISSING": True, - "NO_DATA": 0, - # "DATA_TYPE": 5, # Float32 - "DATA_TYPE": 1, # Byte + "NODATA_FOR_MISSING": False, + "NO_DATA": 255, + "DATA_TYPE": 5, # Float32 + # "DATA_TYPE": 1, # Byte "OUTPUT": output_path, } diff --git a/geest/gui/panels/tree_panel.py b/geest/gui/panels/tree_panel.py index c60ef3e5..63066fa8 100644 --- a/geest/gui/panels/tree_panel.py +++ b/geest/gui/panels/tree_panel.py @@ -488,10 +488,21 @@ def update_action_text(): menu.addAction(clear_results_action) menu.addAction(run_item_action) menu.addAction(add_to_map_action) + add_wee_score = QAction("Add WEE Score to Map") + add_wee_score.triggered.connect( + lambda: self.add_to_map( + item, key="result_file", layer_name="WEE Score", group="WEE" + ) + ) + menu.addAction(add_wee_score) + add_wee_by_population = QAction("Add WEE by Pop to Map") add_wee_by_population.triggered.connect( lambda: self.add_to_map( - item, key="wee_by_population", layer_name="WEE by Population" + item, + key="wee_by_population", + layer_name="WEE by Population", + group="WEE", ) ) menu.addAction(add_wee_by_population) @@ -502,6 +513,12 @@ def update_action_text(): ) menu.addAction(add_wee_by_population_aggregate) + add_masked_scores = QAction("Add Masked Scores to Map") + add_masked_scores.triggered.connect( + lambda: self.add_masked_scoores_to_map(item) + ) + menu.addAction(add_masked_scores) + add_job_opportunities_mask = QAction("Add Job Opportunities Mask to Map") add_job_opportunities_mask.triggered.connect( lambda: self.add_to_map(