From 7464da5033d8e0621770d3b849b7a59eb9905f98 Mon Sep 17 00:00:00 2001 From: pyansys-ci-bot <92810346+pyansys-ci-bot@users.noreply.github.com> Date: Sun, 26 Jul 2026 12:18:41 +0000 Subject: [PATCH 1/3] update generated code --- doc/source/_static/dpf_operators.html | 320 +++++++------ .../operators/math/modal_damping_ratio.py | 13 +- .../dpf/core/operators/result/__init__.py | 1 - .../result/mapdl_split_on_facet_indices.py | 443 ------------------ .../dpf/core/operators/utility/__init__.py | 1 + .../utility/transpose_fields_container.py | 293 ++++++++++++ src/ansys/dpf/gatebin/Ans.Dpf.GrpcClient.dll | Bin 14994432 -> 14994432 bytes src/ansys/dpf/gatebin/DPFClientAPI.dll | Bin 886784 -> 886784 bytes 8 files changed, 466 insertions(+), 605 deletions(-) delete mode 100644 src/ansys/dpf/core/operators/result/mapdl_split_on_facet_indices.py create mode 100644 src/ansys/dpf/core/operators/utility/transpose_fields_container.py diff --git a/doc/source/_static/dpf_operators.html b/doc/source/_static/dpf_operators.html index 22b9c75c299..4dcdc4d4cda 100644 --- a/doc/source/_static/dpf_operators.html +++ b/doc/source/_static/dpf_operators.html @@ -7744,7 +7744,166 @@

Configurating operators

If true, this pin forces the results to be split by element shape, indicated by the presence of the 'elshape' label in the output. If false, the results for all elements shapes are combined. Default value is false if averaging is not required and true if averaging is required.

If connected, this pin allows you to extract the result only on the selected shell layer(s). The available values are: 0: Top, 1: Bottom, 2: TopBottom, 3: Mid, 4: TopBottomMid.

Compute mid nodes (when available) by averaging the neighbour corner nodes. Default: True

-

Outputs

Configurations

Scripting

Changelog

geo: cartesian to spherical coordinates (fields container)

Description

Converts 3D field from cartesian coordinates to spherical coordinates.

+

Outputs

Configurations

Scripting

Changelog

utility: transpose fields container

Description

Transposes a fields container so that the fields' scoping becomes the container's scoping and a chosen label (default: time) becomes the fields' scoping.

+

Input layout (example with time label, 2 body labels, 3 nodes): +FC labels: [time, body] +Field 0: {time:1, body:1} -> scoping {n1, n2, n3}, data [...] +Field 1: {time:1, body:2} -> scoping {n4, n5}, data [...] +Field 2: {time:2, body:1} -> scoping {n1, n2, n3}, data [...] +Field 3: {time:2, body:2} -> scoping {n4, n5}, data [...]

+

Output layout (transposed on time): +FC labels: [Nodal, body] +Field 0: {Nodal:n1, body:1} -> scoping {t1, t2}, data [gathered from fields 0,2] +Field 1: {Nodal:n2, body:1} -> scoping {t1, t2}, data [gathered from fields 0,2] +Field 1: {Nodal:n3, body:1} -> scoping {t1, t2}, data [gathered from fields 0,2] +Field 2: {Nodal:n4, body:2} -> scoping {t1, t2}, data [gathered from fields 1,3] +Field 3: {Nodal:n5, body:2} -> scoping {t1, t2}, data [gathered from fields 1,3] +...

+

Each output field gathers one entity's data across all values of the transposed label from the input fields that share the same non-transposed labels. All input fields sharing a labelspace where only the transposed label changes must have the same scoping and location.

+
Version 1.0.0

Inputs

It is assumed that the fields container consists of fields having the same scoping.

+

fields container label to use as fields label (default is time)

+

Outputs

Configurations

Scripting

Changelog

result: accu eqv creep strain

Description

Read/compute element nodal accumulated equivalent creep strain by calling the readers defined by the datasources.

+
    +
  • The 'requested_location' and 'mesh_scoping' inputs are processed to see if they need scoping transposition or result averaging. The resulting output fields have a 'Nodal', 'ElementalNodal' or 'Elemental' location.
  • +
  • Once the need for averaging has been detected, the behavior of the combined connection of the 'split_shells' and 'shell_layer' pins is:
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Averaging is needed'split_shells''shell_layer'Expected output
NoNot connected/falseNot connectedLocation as in the result file. Fields with all element shapes combined. All shell layers present.
NotrueNot connectedLocation as in the result file. Fields split according to element shapes. All shell layers present.
NotrueConnectedLocation as in the result file. Fields split according to element shapes. Only the requested shell layer present.
NoNot connected/falseConnectedLocation as in the result file. Fields with all element shapes combined. Only the requested shell layer present.
YesNot connected/trueNot connectedLocation as requested. Fields split according to element shapes. All shell layers present.
YesfalseNot connectedLocation as requested. Fields with all element shapes combined. All shell layers present.
YesfalseConnectedLocation as requested. Fields with all element shapes combined. Only the requested shell layer present.
YesNot connected/trueConnectedLocation as requested. Fields split according to element shapes. Only the requested shell layer present.
+
    +
  • The available 'elshape' values are:
  • +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
elshapeRelated elements
1Shell (generic)
2Solid
3Beam
4Skin
5Contact
6Load
7Point
8Shell with 1 result across thickness (membrane)
9Shell with 2 results across thickness (top/bottom)
10Shell with 3 results across thickness (top/bottom/mid)
11Gasket
12Multi-Point Constraint
13Pretension
+
Version 1.0.0

Supported file types

Inputs

time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.

+

nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains

+

Fields container already allocated modified inplace

+

result file container allowed to be kept open to cache data

+

result file path container, used if no streams are set

+

prevents from reading the mesh in the result files

+

requested location Nodal, Elemental or ElementalNodal

+

elemental nodal beam results are read if this pin is set to true (default is false)

+

If true, this pin forces the results to be split by element shape, indicated by the presence of the 'elshape' label in the output. If false, the results for all elements shapes are combined. Default value is false if averaging is not required and true if averaging is required.

+

If connected, this pin allows you to extract the result only on the selected shell layer(s). The available values are: 0: Top, 1: Bottom, 2: TopBottom, 3: Mid, 4: TopBottomMid.

+

Compute mid nodes (when available) by averaging the neighbour corner nodes. Default: True

+

Outputs

Configurations

Scripting

Changelog

geo: cartesian to spherical coordinates (fields container)

Description

Converts 3D field from cartesian coordinates to spherical coordinates.

Version 0.0.1

Inputs

Outputs

Configurations

Scripting

Changelog

result: reaction force X

Description

Read/compute nodal reaction forces X component of the vector (1st component) by calling the readers defined by the datasources.

Version 0.0.0

Supported file types

Inputs

time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.

nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains

@@ -10040,13 +10199,13 @@

LaTeX

$r_i$ is the mode-specific damping ratio (pin 2, default $0$), $\alpha$ is the mass-proportional Rayleigh coefficient (pin 3), and $\beta$ is the stiffness-proportional Rayleigh coefficient (pin 4).

-
Version 0.0.1

Inputs

input vector expects natural frequencies.

+
Version 0.1.0

Inputs

input vector expects natural frequencies.

constant modal damping ratio

modal damping ratio for each mode shape

global mass matrix multiplier

global stiffness matrix multiplier

Outputs

Field of modal damping ratios $\xi_i$, one value per mode, in the same order as the input natural frequencies.

-

Configurations

Scripting

Changelog

filter: band pass (field)

Description

The band pass filter returns all the values above (but not equal to) the minimum threshold value and below (but not equal to) the maximum threshold value in input.

+

Configurations

Scripting

Changelog

filter: band pass (field)

Description

The band pass filter returns all the values above (but not equal to) the minimum threshold value and below (but not equal to) the maximum threshold value in input.

Version 0.0.1

Inputs

field or fields container with only one field is expected

A minimum threshold scalar or a field containing one value is expected.

A maximum threshold scalar or a field containing one value is expected.

@@ -12833,148 +12992,7 @@

LaTeX

If true, this pin forces the results to be split by element shape, indicated by the presence of the 'elshape' label in the output. If false, the results for all elements shapes are combined. Default value is false if averaging is not required and true if averaging is required.

If connected, this pin allows you to extract the result only on the selected shell layer(s). The available values are: 0: Top, 1: Bottom, 2: TopBottom, 3: Mid, 4: TopBottomMid.

Compute mid nodes (when available) by averaging the neighbour corner nodes. Default: True

-

Outputs

Configurations

Scripting

Changelog

result: accu eqv creep strain

Description

Read/compute element nodal accumulated equivalent creep strain by calling the readers defined by the datasources.

-
    -
  • The 'requested_location' and 'mesh_scoping' inputs are processed to see if they need scoping transposition or result averaging. The resulting output fields have a 'Nodal', 'ElementalNodal' or 'Elemental' location.
  • -
  • Once the need for averaging has been detected, the behavior of the combined connection of the 'split_shells' and 'shell_layer' pins is:
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Averaging is needed'split_shells''shell_layer'Expected output
NoNot connected/falseNot connectedLocation as in the result file. Fields with all element shapes combined. All shell layers present.
NotrueNot connectedLocation as in the result file. Fields split according to element shapes. All shell layers present.
NotrueConnectedLocation as in the result file. Fields split according to element shapes. Only the requested shell layer present.
NoNot connected/falseConnectedLocation as in the result file. Fields with all element shapes combined. Only the requested shell layer present.
YesNot connected/trueNot connectedLocation as requested. Fields split according to element shapes. All shell layers present.
YesfalseNot connectedLocation as requested. Fields with all element shapes combined. All shell layers present.
YesfalseConnectedLocation as requested. Fields with all element shapes combined. Only the requested shell layer present.
YesNot connected/trueConnectedLocation as requested. Fields split according to element shapes. Only the requested shell layer present.
-
    -
  • The available 'elshape' values are:
  • -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
elshapeRelated elements
1Shell (generic)
2Solid
3Beam
4Skin
5Contact
6Load
7Point
8Shell with 1 result across thickness (membrane)
9Shell with 2 results across thickness (top/bottom)
10Shell with 3 results across thickness (top/bottom/mid)
11Gasket
12Multi-Point Constraint
13Pretension
-
Version 1.0.0

Supported file types

Inputs

time/freq values (use doubles or field), time/freq set ids (use ints or scoping) or time/freq step ids (use scoping with TimeFreq_steps location) required in output. To specify time/freq values at specific load steps, put a Field (and not a list) in input with a scoping located on "TimeFreq_steps". Linear time freq intrapolation is performed if the values are not in the result files and the data at the max time or freq is taken when time/freqs are higher than available time/freqs in result files. To get all data for all time/freq sets, connect an int with value -1.

-

nodes or elements scoping required in output. The output fields will be scoped on these node or element IDs. To figure out the ordering of the fields data, look at their scoping IDs as they might not be ordered as the input scoping was. The scoping's location indicates whether nodes or elements are asked for. Using scopings container allows you to split the result fields container into domains

-

Fields container already allocated modified inplace

-

result file container allowed to be kept open to cache data

-

result file path container, used if no streams are set

-

prevents from reading the mesh in the result files

-

requested location Nodal, Elemental or ElementalNodal

-

elemental nodal beam results are read if this pin is set to true (default is false)

-

If true, this pin forces the results to be split by element shape, indicated by the presence of the 'elshape' label in the output. If false, the results for all elements shapes are combined. Default value is false if averaging is not required and true if averaging is required.

-

If connected, this pin allows you to extract the result only on the selected shell layer(s). The available values are: 0: Top, 1: Bottom, 2: TopBottom, 3: Mid, 4: TopBottomMid.

-

Compute mid nodes (when available) by averaging the neighbour corner nodes. Default: True

-

Outputs

Configurations

Scripting

Changelog

result: plastic strain energy density

Description

Read/compute element nodal plastic strain energy density by calling the readers defined by the datasources.

+

Outputs

Configurations

Scripting

Changelog

result: plastic strain energy density

Description

Read/compute element nodal plastic strain energy density by calling the readers defined by the datasources.

  • The 'requested_location' and 'mesh_scoping' inputs are processed to see if they need scoping transposition or result averaging. The resulting output fields have a 'Nodal', 'ElementalNodal' or 'Elemental' location.
  • Once the need for averaging has been detected, the behavior of the combined connection of the 'split_shells' and 'shell_layer' pins is:
  • @@ -15492,7 +15510,7 @@

    LaTeX

Result file container allowed to be kept open to cache data.

Result file path container, used if no streams are set.

Outputs

Configurations

Scripting

Changelog

metadata: coordinate system data provider

Description

Reads coordinate systems data from the result files contained in the streams or data sources.

-
Version 0.0.0

Supported file types

Inputs

Coorfinate System ids to recover used by the solver. If not set, all available materials to be recovered.

+
Version 0.0.0

Supported file types

Inputs

Coorfinate System ids to recover used by the solver. If not set, all available materials to be recovered.

Result file container allowed to be kept open to cache data.

Result file path container, used if no streams are set.

Outputs

Configurations

Scripting

Changelog

logic: splitter::streams

Description

Splits a Streams into multiple coherent streams, actual number of outputs is always less or equal to the given desired number of ouputs.

@@ -16622,15 +16640,7 @@

Performance considerations

defines the threshold scale for wireframe (default: 2.0)

defines the angular limit in radian for edge decimation (default: 1.0)

Outputs

Data Source containing the dfmf file generated.

-

Configurations

Scripting

Changelog

result: split on facet indices

Description

Splits each Field in a FieldsContainer defined on the skin elements of a mesh according to the local facets indices of its corresponding solid element. The output FieldsContainer retains the original labels and adds a 'facet' label, which indicates at which facet of the solid mesh was the original skin element located. The facet ids are according to MAPDL convention. The scoping of the output Fields reflects the element indices in the solid mesh.

-
Version 0.0.3

Inputs

Fields container to split, with generic number of labels (e.g. time, zone, complex...). Fields may have Elemental or ElementalNodal location; scoping ids are skin element ids.

-

This property field provides, for each new face element ID (in the scoping), the corresponding 3D volume element index (in the data) it has been extracted from. The 3D volume element ID can be found with the element scoping of the input mesh.

-

This property field gives, for each new face element ID (in the scoping), the corresponding face index on the source 3D volume element. The 3D volume element can be extracted from the previous output.

-

The solid support.

-

Elemental scoping of tet elements. If connected, the tets in the scoping are treated as degenerated tets (SOLID185), and the rest as non-degenerated tets (SOLID285). Pins 185 and 285 are mutually exclusionary (they cannot be connected at the same time), and if none of them is connected, all tets are treated as non-degenerated (SOLID285).

-

Elemental scoping of tet elements. If connected, the tets in the scoping are treated as non-degenerated tets (SOLID285), and the rest as degenerated tets (SOLID185). Pins 185 and 285 are mutually exclusionary (they cannot be connected at the same time), and if none of them is connected, all tets are treated as non-degenerated (SOLID285).

-

Outputs

Output splitted fields containter

-

Configurations

Scripting

Changelog

result: split to acmo facet indices

Description

This will retain the already existing labels from the input FC and will change the facet label to now mean ACMO facet indices.Each Field in the input will be split/merged into several Fields, redistributing the data to the appropriate entity.

+

Configurations

Scripting

Changelog

result: split to acmo facet indices

Description

This will retain the already existing labels from the input FC and will change the facet label to now mean ACMO facet indices.Each Field in the input will be split/merged into several Fields, redistributing the data to the appropriate entity.

Version 0.0.2

Inputs

Fields container to split, with generic number of labels (e.g. time, zone, complex...), 'facet' label is compulsory.The Scopings of the Fields will be the Element Ids on the skin mesh.

It should only have the 'facet' label. For each facet, it stores a PropertyField with the element types of the corresponding elements.The scoping should be the same as the scoping of the corresponding Field in input 0.

Outputs

Output splitted fields containter

diff --git a/src/ansys/dpf/core/operators/math/modal_damping_ratio.py b/src/ansys/dpf/core/operators/math/modal_damping_ratio.py index be69df2b19c..95f262dd8f9 100644 --- a/src/ansys/dpf/core/operators/math/modal_damping_ratio.py +++ b/src/ansys/dpf/core/operators/math/modal_damping_ratio.py @@ -17,6 +17,7 @@ if TYPE_CHECKING: from ansys.dpf.core.field import Field + from ansys.dpf.core.time_freq_support import TimeFreqSupport class modal_damping_ratio(Operator): @@ -36,7 +37,7 @@ class modal_damping_ratio(Operator): Inputs ------ - natural_freq: + natural_freq: Field or TimeFreqSupport input vector expects natural frequencies. const_ratio: float, optional constant modal damping ratio @@ -60,7 +61,7 @@ class modal_damping_ratio(Operator): >>> op = dpf.operators.math.modal_damping_ratio() >>> # Make input connections - >>> my_natural_freq = dpf.() + >>> my_natural_freq = dpf.Field() >>> op.inputs.natural_freq.connect(my_natural_freq) >>> my_const_ratio = float() >>> op.inputs.const_ratio.connect(my_const_ratio) @@ -132,7 +133,7 @@ def _spec() -> Specification: map_input_pin_spec={ 0: PinSpecification( name="natural_freq", - type_names=["vector"], + type_names=["vector", "field", "time_freq_support"], optional=False, document=r"""input vector expects natural frequencies.""", ), @@ -224,7 +225,7 @@ class InputsModalDampingRatio(_Inputs): -------- >>> from ansys.dpf import core as dpf >>> op = dpf.operators.math.modal_damping_ratio() - >>> my_natural_freq = dpf.() + >>> my_natural_freq = dpf.Field() >>> op.inputs.natural_freq.connect(my_natural_freq) >>> my_const_ratio = float() >>> op.inputs.const_ratio.connect(my_const_ratio) @@ -238,7 +239,7 @@ class InputsModalDampingRatio(_Inputs): def __init__(self, op: Operator): super().__init__(modal_damping_ratio._spec().inputs, op) - self._natural_freq: Input = Input( + self._natural_freq: Input[Field | TimeFreqSupport] = Input( modal_damping_ratio._spec().input_pin(0), 0, op, -1 ) self._inputs.append(self._natural_freq) @@ -260,7 +261,7 @@ def __init__(self, op: Operator): self._inputs.append(self._k_coefficient) @property - def natural_freq(self) -> Input: + def natural_freq(self) -> Input[Field | TimeFreqSupport]: r"""Allows to connect natural_freq input to the operator. input vector expects natural frequencies. diff --git a/src/ansys/dpf/core/operators/result/__init__.py b/src/ansys/dpf/core/operators/result/__init__.py index a98e6a24fc8..64a0fade3c4 100644 --- a/src/ansys/dpf/core/operators/result/__init__.py +++ b/src/ansys/dpf/core/operators/result/__init__.py @@ -217,7 +217,6 @@ from .magnetic_vector_potential import magnetic_vector_potential from .mapdl_material_properties import mapdl_material_properties from .mapdl_section import mapdl_section -from .mapdl_split_on_facet_indices import mapdl_split_on_facet_indices from .mapdl_split_to_acmo_facet_indices import mapdl_split_to_acmo_facet_indices from .mass_flow_rate import mass_flow_rate from .mass_fraction import mass_fraction diff --git a/src/ansys/dpf/core/operators/result/mapdl_split_on_facet_indices.py b/src/ansys/dpf/core/operators/result/mapdl_split_on_facet_indices.py deleted file mode 100644 index 0fd5b92f6c2..00000000000 --- a/src/ansys/dpf/core/operators/result/mapdl_split_on_facet_indices.py +++ /dev/null @@ -1,443 +0,0 @@ -""" -mapdl_split_on_facet_indices - -Autogenerated DPF operator classes. -""" - -from __future__ import annotations -from typing import TYPE_CHECKING - -from warnings import warn -from ansys.dpf.core.dpf_operator import Operator -from ansys.dpf.core.inputs import Input, _Inputs -from ansys.dpf.core.outputs import Output, _Outputs -from ansys.dpf.core.operators.specification import PinSpecification, Specification -from ansys.dpf.core.config import Config -from ansys.dpf.core.server_types import AnyServerType - -if TYPE_CHECKING: - from ansys.dpf.core.fields_container import FieldsContainer - from ansys.dpf.core.meshed_region import MeshedRegion - from ansys.dpf.core.property_field import PropertyField - from ansys.dpf.core.scoping import Scoping - - -class mapdl_split_on_facet_indices(Operator): - r"""Splits each Field in a FieldsContainer defined on the skin elements of a - mesh according to the local facets indices of its corresponding solid - element. The output FieldsContainer retains the original labels and adds - a ‘facet’ label, which indicates at which facet of the solid mesh was - the original skin element located. The facet ids are according to MAPDL - convention. The scoping of the output Fields reflects the element - indices in the solid mesh. - - - Inputs - ------ - fields_container: FieldsContainer - Fields container to split, with generic number of labels (e.g. time, zone, complex...). Fields may have Elemental or ElementalNodal location; scoping ids are skin element ids. - property_field_new_elements_to_old: PropertyField - This property field provides, for each new face element ID (in the scoping), the corresponding 3D volume element index (in the data) it has been extracted from. The 3D volume element ID can be found with the element scoping of the input mesh. - facet_indices: PropertyField - This property field gives, for each new face element ID (in the scoping), the corresponding face index on the source 3D volume element. The 3D volume element can be extracted from the previous output. - volume_mesh: MeshedRegion - The solid support. - degenerated_tets: Scoping, optional - Elemental scoping of tet elements. If connected, the tets in the scoping are treated as degenerated tets (SOLID185), and the rest as non-degenerated tets (SOLID285). Pins 185 and 285 are mutually exclusionary (they cannot be connected at the same time), and if none of them is connected, all tets are treated as non-degenerated (SOLID285). - non_degenerated_tets: Scoping, optional - Elemental scoping of tet elements. If connected, the tets in the scoping are treated as non-degenerated tets (SOLID285), and the rest as degenerated tets (SOLID185). Pins 185 and 285 are mutually exclusionary (they cannot be connected at the same time), and if none of them is connected, all tets are treated as non-degenerated (SOLID285). - - Outputs - ------- - fields_container: FieldsContainer - Output splitted fields containter - - Examples - -------- - >>> from ansys.dpf import core as dpf - - >>> # Instantiate operator - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - - >>> # Make input connections - >>> my_fields_container = dpf.FieldsContainer() - >>> op.inputs.fields_container.connect(my_fields_container) - >>> my_property_field_new_elements_to_old = dpf.PropertyField() - >>> op.inputs.property_field_new_elements_to_old.connect(my_property_field_new_elements_to_old) - >>> my_facet_indices = dpf.PropertyField() - >>> op.inputs.facet_indices.connect(my_facet_indices) - >>> my_volume_mesh = dpf.MeshedRegion() - >>> op.inputs.volume_mesh.connect(my_volume_mesh) - >>> my_degenerated_tets = dpf.Scoping() - >>> op.inputs.degenerated_tets.connect(my_degenerated_tets) - >>> my_non_degenerated_tets = dpf.Scoping() - >>> op.inputs.non_degenerated_tets.connect(my_non_degenerated_tets) - - >>> # Instantiate operator and connect inputs in one line - >>> op = dpf.operators.result.mapdl_split_on_facet_indices( - ... fields_container=my_fields_container, - ... property_field_new_elements_to_old=my_property_field_new_elements_to_old, - ... facet_indices=my_facet_indices, - ... volume_mesh=my_volume_mesh, - ... degenerated_tets=my_degenerated_tets, - ... non_degenerated_tets=my_non_degenerated_tets, - ... ) - - >>> # Get output data - >>> result_fields_container = op.outputs.fields_container() - """ - - def __init__( - self, - fields_container=None, - property_field_new_elements_to_old=None, - facet_indices=None, - volume_mesh=None, - degenerated_tets=None, - non_degenerated_tets=None, - config=None, - server=None, - ): - super().__init__( - name="mapdl::split_on_facet_indices", - config=config, - server=server, - inputs_type=InputsMapdlSplitOnFacetIndices, - outputs_type=OutputsMapdlSplitOnFacetIndices, - ) - if fields_container is not None: - self.inputs.fields_container.connect(fields_container) - if property_field_new_elements_to_old is not None: - self.inputs.property_field_new_elements_to_old.connect( - property_field_new_elements_to_old - ) - if facet_indices is not None: - self.inputs.facet_indices.connect(facet_indices) - if volume_mesh is not None: - self.inputs.volume_mesh.connect(volume_mesh) - if degenerated_tets is not None: - self.inputs.degenerated_tets.connect(degenerated_tets) - if non_degenerated_tets is not None: - self.inputs.non_degenerated_tets.connect(non_degenerated_tets) - - @staticmethod - def _spec() -> Specification: - description = r"""Splits each Field in a FieldsContainer defined on the skin elements of a -mesh according to the local facets indices of its corresponding solid -element. The output FieldsContainer retains the original labels and adds -a ‘facet’ label, which indicates at which facet of the solid mesh was -the original skin element located. The facet ids are according to MAPDL -convention. The scoping of the output Fields reflects the element -indices in the solid mesh. -""" - spec = Specification( - description=description, - map_input_pin_spec={ - 0: PinSpecification( - name="fields_container", - type_names=["fields_container"], - optional=False, - document=r"""Fields container to split, with generic number of labels (e.g. time, zone, complex...). Fields may have Elemental or ElementalNodal location; scoping ids are skin element ids.""", - ), - 1: PinSpecification( - name="property_field_new_elements_to_old", - type_names=["property_field"], - optional=False, - document=r"""This property field provides, for each new face element ID (in the scoping), the corresponding 3D volume element index (in the data) it has been extracted from. The 3D volume element ID can be found with the element scoping of the input mesh.""", - ), - 2: PinSpecification( - name="facet_indices", - type_names=["property_field"], - optional=False, - document=r"""This property field gives, for each new face element ID (in the scoping), the corresponding face index on the source 3D volume element. The 3D volume element can be extracted from the previous output.""", - ), - 3: PinSpecification( - name="volume_mesh", - type_names=["abstract_meshed_region"], - optional=False, - document=r"""The solid support.""", - ), - 185: PinSpecification( - name="degenerated_tets", - type_names=["scoping"], - optional=True, - document=r"""Elemental scoping of tet elements. If connected, the tets in the scoping are treated as degenerated tets (SOLID185), and the rest as non-degenerated tets (SOLID285). Pins 185 and 285 are mutually exclusionary (they cannot be connected at the same time), and if none of them is connected, all tets are treated as non-degenerated (SOLID285).""", - ), - 285: PinSpecification( - name="non_degenerated_tets", - type_names=["scoping"], - optional=True, - document=r"""Elemental scoping of tet elements. If connected, the tets in the scoping are treated as non-degenerated tets (SOLID285), and the rest as degenerated tets (SOLID185). Pins 185 and 285 are mutually exclusionary (they cannot be connected at the same time), and if none of them is connected, all tets are treated as non-degenerated (SOLID285).""", - ), - }, - map_output_pin_spec={ - 0: PinSpecification( - name="fields_container", - type_names=["fields_container"], - optional=False, - document=r"""Output splitted fields containter""", - ), - }, - ) - return spec - - @staticmethod - def default_config(server: AnyServerType = None) -> Config: - """Returns the default config of the operator. - - This config can then be changed to the user needs and be used to - instantiate the operator. The Configuration allows to customize - how the operation will be processed by the operator. - - Parameters - ---------- - server: - Server with channel connected to the remote or local instance. When - ``None``, attempts to use the global server. - - Returns - ------- - config: - A new Config instance equivalent to the default config for this operator. - """ - return Operator.default_config( - name="mapdl::split_on_facet_indices", server=server - ) - - @property - def inputs(self) -> InputsMapdlSplitOnFacetIndices: - """Enables to connect inputs to the operator - - Returns - -------- - inputs: - An instance of InputsMapdlSplitOnFacetIndices. - """ - return self._inputs - - @property - def outputs(self) -> OutputsMapdlSplitOnFacetIndices: - """Enables to get outputs of the operator by evaluating it - - Returns - -------- - outputs: - An instance of OutputsMapdlSplitOnFacetIndices. - """ - return self._outputs - - -class InputsMapdlSplitOnFacetIndices(_Inputs): - """Intermediate class used to connect user inputs to - mapdl_split_on_facet_indices operator. - - Examples - -------- - >>> from ansys.dpf import core as dpf - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - >>> my_fields_container = dpf.FieldsContainer() - >>> op.inputs.fields_container.connect(my_fields_container) - >>> my_property_field_new_elements_to_old = dpf.PropertyField() - >>> op.inputs.property_field_new_elements_to_old.connect(my_property_field_new_elements_to_old) - >>> my_facet_indices = dpf.PropertyField() - >>> op.inputs.facet_indices.connect(my_facet_indices) - >>> my_volume_mesh = dpf.MeshedRegion() - >>> op.inputs.volume_mesh.connect(my_volume_mesh) - >>> my_degenerated_tets = dpf.Scoping() - >>> op.inputs.degenerated_tets.connect(my_degenerated_tets) - >>> my_non_degenerated_tets = dpf.Scoping() - >>> op.inputs.non_degenerated_tets.connect(my_non_degenerated_tets) - """ - - def __init__(self, op: Operator): - super().__init__(mapdl_split_on_facet_indices._spec().inputs, op) - self._fields_container: Input[FieldsContainer] = Input( - mapdl_split_on_facet_indices._spec().input_pin(0), 0, op, -1 - ) - self._inputs.append(self._fields_container) - self._property_field_new_elements_to_old: Input[PropertyField] = Input( - mapdl_split_on_facet_indices._spec().input_pin(1), 1, op, -1 - ) - self._inputs.append(self._property_field_new_elements_to_old) - self._facet_indices: Input[PropertyField] = Input( - mapdl_split_on_facet_indices._spec().input_pin(2), 2, op, -1 - ) - self._inputs.append(self._facet_indices) - self._volume_mesh: Input[MeshedRegion] = Input( - mapdl_split_on_facet_indices._spec().input_pin(3), 3, op, -1 - ) - self._inputs.append(self._volume_mesh) - self._degenerated_tets: Input[Scoping] = Input( - mapdl_split_on_facet_indices._spec().input_pin(185), 185, op, -1 - ) - self._inputs.append(self._degenerated_tets) - self._non_degenerated_tets: Input[Scoping] = Input( - mapdl_split_on_facet_indices._spec().input_pin(285), 285, op, -1 - ) - self._inputs.append(self._non_degenerated_tets) - - @property - def fields_container(self) -> Input[FieldsContainer]: - r"""Allows to connect fields_container input to the operator. - - Fields container to split, with generic number of labels (e.g. time, zone, complex...). Fields may have Elemental or ElementalNodal location; scoping ids are skin element ids. - - Returns - ------- - input: - An Input instance for this pin. - - Examples - -------- - >>> from ansys.dpf import core as dpf - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - >>> op.inputs.fields_container.connect(my_fields_container) - >>> # or - >>> op.inputs.fields_container(my_fields_container) - """ - return self._fields_container - - @property - def property_field_new_elements_to_old(self) -> Input[PropertyField]: - r"""Allows to connect property_field_new_elements_to_old input to the operator. - - This property field provides, for each new face element ID (in the scoping), the corresponding 3D volume element index (in the data) it has been extracted from. The 3D volume element ID can be found with the element scoping of the input mesh. - - Returns - ------- - input: - An Input instance for this pin. - - Examples - -------- - >>> from ansys.dpf import core as dpf - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - >>> op.inputs.property_field_new_elements_to_old.connect(my_property_field_new_elements_to_old) - >>> # or - >>> op.inputs.property_field_new_elements_to_old(my_property_field_new_elements_to_old) - """ - return self._property_field_new_elements_to_old - - @property - def facet_indices(self) -> Input[PropertyField]: - r"""Allows to connect facet_indices input to the operator. - - This property field gives, for each new face element ID (in the scoping), the corresponding face index on the source 3D volume element. The 3D volume element can be extracted from the previous output. - - Returns - ------- - input: - An Input instance for this pin. - - Examples - -------- - >>> from ansys.dpf import core as dpf - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - >>> op.inputs.facet_indices.connect(my_facet_indices) - >>> # or - >>> op.inputs.facet_indices(my_facet_indices) - """ - return self._facet_indices - - @property - def volume_mesh(self) -> Input[MeshedRegion]: - r"""Allows to connect volume_mesh input to the operator. - - The solid support. - - Returns - ------- - input: - An Input instance for this pin. - - Examples - -------- - >>> from ansys.dpf import core as dpf - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - >>> op.inputs.volume_mesh.connect(my_volume_mesh) - >>> # or - >>> op.inputs.volume_mesh(my_volume_mesh) - """ - return self._volume_mesh - - @property - def degenerated_tets(self) -> Input[Scoping]: - r"""Allows to connect degenerated_tets input to the operator. - - Elemental scoping of tet elements. If connected, the tets in the scoping are treated as degenerated tets (SOLID185), and the rest as non-degenerated tets (SOLID285). Pins 185 and 285 are mutually exclusionary (they cannot be connected at the same time), and if none of them is connected, all tets are treated as non-degenerated (SOLID285). - - Returns - ------- - input: - An Input instance for this pin. - - Examples - -------- - >>> from ansys.dpf import core as dpf - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - >>> op.inputs.degenerated_tets.connect(my_degenerated_tets) - >>> # or - >>> op.inputs.degenerated_tets(my_degenerated_tets) - """ - return self._degenerated_tets - - @property - def non_degenerated_tets(self) -> Input[Scoping]: - r"""Allows to connect non_degenerated_tets input to the operator. - - Elemental scoping of tet elements. If connected, the tets in the scoping are treated as non-degenerated tets (SOLID285), and the rest as degenerated tets (SOLID185). Pins 185 and 285 are mutually exclusionary (they cannot be connected at the same time), and if none of them is connected, all tets are treated as non-degenerated (SOLID285). - - Returns - ------- - input: - An Input instance for this pin. - - Examples - -------- - >>> from ansys.dpf import core as dpf - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - >>> op.inputs.non_degenerated_tets.connect(my_non_degenerated_tets) - >>> # or - >>> op.inputs.non_degenerated_tets(my_non_degenerated_tets) - """ - return self._non_degenerated_tets - - -class OutputsMapdlSplitOnFacetIndices(_Outputs): - """Intermediate class used to get outputs from - mapdl_split_on_facet_indices operator. - - Examples - -------- - >>> from ansys.dpf import core as dpf - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - >>> # Connect inputs : op.inputs. ... - >>> result_fields_container = op.outputs.fields_container() - """ - - def __init__(self, op: Operator): - super().__init__(mapdl_split_on_facet_indices._spec().outputs, op) - self._fields_container: Output[FieldsContainer] = Output( - mapdl_split_on_facet_indices._spec().output_pin(0), 0, op - ) - self._outputs.append(self._fields_container) - - @property - def fields_container(self) -> Output[FieldsContainer]: - r"""Allows to get fields_container output of the operator - - Output splitted fields containter - - Returns - ------- - output: - An Output instance for this pin. - - Examples - -------- - >>> from ansys.dpf import core as dpf - >>> op = dpf.operators.result.mapdl_split_on_facet_indices() - >>> # Get the output from op.outputs. ... - >>> result_fields_container = op.outputs.fields_container() - """ - return self._fields_container diff --git a/src/ansys/dpf/core/operators/utility/__init__.py b/src/ansys/dpf/core/operators/utility/__init__.py index 73eb3c36ef8..0d71a4509c5 100644 --- a/src/ansys/dpf/core/operators/utility/__init__.py +++ b/src/ansys/dpf/core/operators/utility/__init__.py @@ -83,6 +83,7 @@ from .split_in_for_each_range import split_in_for_each_range from .strain_from_voigt import strain_from_voigt from .strain_from_voigt_fc import strain_from_voigt_fc +from .transpose_fields_container import transpose_fields_container from .txt_file_to_dpf import txt_file_to_dpf from .unitary_field import unitary_field from .weighted_merge_fields_by_label import weighted_merge_fields_by_label diff --git a/src/ansys/dpf/core/operators/utility/transpose_fields_container.py b/src/ansys/dpf/core/operators/utility/transpose_fields_container.py new file mode 100644 index 00000000000..22ed1da9f81 --- /dev/null +++ b/src/ansys/dpf/core/operators/utility/transpose_fields_container.py @@ -0,0 +1,293 @@ +""" +transpose_fields_container + +Autogenerated DPF operator classes. +""" + +from __future__ import annotations +from typing import TYPE_CHECKING + +from warnings import warn +from ansys.dpf.core.dpf_operator import Operator +from ansys.dpf.core.inputs import Input, _Inputs +from ansys.dpf.core.outputs import Output, _Outputs +from ansys.dpf.core.operators.specification import PinSpecification, Specification +from ansys.dpf.core.config import Config +from ansys.dpf.core.server_types import AnyServerType + +if TYPE_CHECKING: + from ansys.dpf.core.fields_container import FieldsContainer + + +class transpose_fields_container(Operator): + r"""Transposes a fields container so that the fields’ scoping becomes the + container’s scoping and a chosen label (default: time) becomes the + fields’ scoping. + + Input layout (example with time label, 2 body labels, 3 nodes): FC + labels: [time, body] Field 0: {time:1, body:1} -> scoping {n1, n2, n3}, + data […] Field 1: {time:1, body:2} -> scoping {n4, n5}, data […] Field + 2: {time:2, body:1} -> scoping {n1, n2, n3}, data […] Field 3: {time:2, + body:2} -> scoping {n4, n5}, data […] + + Output layout (transposed on time): FC labels: [Nodal, body] Field 0: + {Nodal:n1, body:1} -> scoping {t1, t2}, data [gathered from fields 0,2] + Field 1: {Nodal:n2, body:1} -> scoping {t1, t2}, data [gathered from + fields 0,2] Field 1: {Nodal:n3, body:1} -> scoping {t1, t2}, data + [gathered from fields 0,2] Field 2: {Nodal:n4, body:2} -> scoping {t1, + t2}, data [gathered from fields 1,3] Field 3: {Nodal:n5, body:2} -> + scoping {t1, t2}, data [gathered from fields 1,3] … + + Each output field gathers one entity’s data across all values of the + transposed label from the input fields that share the same + non-transposed labels. All input fields sharing a labelspace where only + the transposed label changes must have the same scoping and location. + + + Inputs + ------ + fields_container: FieldsContainer + It is assumed that the fields container consists of fields having the same scoping. + label: str, optional + fields container label to use as fields label (default is time) + + Outputs + ------- + fields_container: FieldsContainer + + Examples + -------- + >>> from ansys.dpf import core as dpf + + >>> # Instantiate operator + >>> op = dpf.operators.utility.transpose_fields_container() + + >>> # Make input connections + >>> my_fields_container = dpf.FieldsContainer() + >>> op.inputs.fields_container.connect(my_fields_container) + >>> my_label = str() + >>> op.inputs.label.connect(my_label) + + >>> # Instantiate operator and connect inputs in one line + >>> op = dpf.operators.utility.transpose_fields_container( + ... fields_container=my_fields_container, + ... label=my_label, + ... ) + + >>> # Get output data + >>> result_fields_container = op.outputs.fields_container() + """ + + def __init__(self, fields_container=None, label=None, config=None, server=None): + super().__init__( + name="transpose_fields_container", + config=config, + server=server, + inputs_type=InputsTransposeFieldsContainer, + outputs_type=OutputsTransposeFieldsContainer, + ) + if fields_container is not None: + self.inputs.fields_container.connect(fields_container) + if label is not None: + self.inputs.label.connect(label) + + @staticmethod + def _spec() -> Specification: + description = r"""Transposes a fields container so that the fields’ scoping becomes the +container’s scoping and a chosen label (default: time) becomes the +fields’ scoping. + +Input layout (example with time label, 2 body labels, 3 nodes): FC +labels: [time, body] Field 0: {time:1, body:1} -> scoping {n1, n2, n3}, +data […] Field 1: {time:1, body:2} -> scoping {n4, n5}, data […] Field +2: {time:2, body:1} -> scoping {n1, n2, n3}, data […] Field 3: {time:2, +body:2} -> scoping {n4, n5}, data […] + +Output layout (transposed on time): FC labels: [Nodal, body] Field 0: +{Nodal:n1, body:1} -> scoping {t1, t2}, data [gathered from fields 0,2] +Field 1: {Nodal:n2, body:1} -> scoping {t1, t2}, data [gathered from +fields 0,2] Field 1: {Nodal:n3, body:1} -> scoping {t1, t2}, data +[gathered from fields 0,2] Field 2: {Nodal:n4, body:2} -> scoping {t1, +t2}, data [gathered from fields 1,3] Field 3: {Nodal:n5, body:2} -> +scoping {t1, t2}, data [gathered from fields 1,3] … + +Each output field gathers one entity’s data across all values of the +transposed label from the input fields that share the same +non-transposed labels. All input fields sharing a labelspace where only +the transposed label changes must have the same scoping and location. +""" + spec = Specification( + description=description, + map_input_pin_spec={ + 0: PinSpecification( + name="fields_container", + type_names=["fields_container"], + optional=False, + document=r"""It is assumed that the fields container consists of fields having the same scoping.""", + ), + 1: PinSpecification( + name="label", + type_names=["string"], + optional=True, + document=r"""fields container label to use as fields label (default is time)""", + ), + }, + map_output_pin_spec={ + 0: PinSpecification( + name="fields_container", + type_names=["fields_container"], + optional=False, + document=r"""""", + ), + }, + ) + return spec + + @staticmethod + def default_config(server: AnyServerType = None) -> Config: + """Returns the default config of the operator. + + This config can then be changed to the user needs and be used to + instantiate the operator. The Configuration allows to customize + how the operation will be processed by the operator. + + Parameters + ---------- + server: + Server with channel connected to the remote or local instance. When + ``None``, attempts to use the global server. + + Returns + ------- + config: + A new Config instance equivalent to the default config for this operator. + """ + return Operator.default_config(name="transpose_fields_container", server=server) + + @property + def inputs(self) -> InputsTransposeFieldsContainer: + """Enables to connect inputs to the operator + + Returns + -------- + inputs: + An instance of InputsTransposeFieldsContainer. + """ + return self._inputs + + @property + def outputs(self) -> OutputsTransposeFieldsContainer: + """Enables to get outputs of the operator by evaluating it + + Returns + -------- + outputs: + An instance of OutputsTransposeFieldsContainer. + """ + return self._outputs + + +class InputsTransposeFieldsContainer(_Inputs): + """Intermediate class used to connect user inputs to + transpose_fields_container operator. + + Examples + -------- + >>> from ansys.dpf import core as dpf + >>> op = dpf.operators.utility.transpose_fields_container() + >>> my_fields_container = dpf.FieldsContainer() + >>> op.inputs.fields_container.connect(my_fields_container) + >>> my_label = str() + >>> op.inputs.label.connect(my_label) + """ + + def __init__(self, op: Operator): + super().__init__(transpose_fields_container._spec().inputs, op) + self._fields_container: Input[FieldsContainer] = Input( + transpose_fields_container._spec().input_pin(0), 0, op, -1 + ) + self._inputs.append(self._fields_container) + self._label: Input[str] = Input( + transpose_fields_container._spec().input_pin(1), 1, op, -1 + ) + self._inputs.append(self._label) + + @property + def fields_container(self) -> Input[FieldsContainer]: + r"""Allows to connect fields_container input to the operator. + + It is assumed that the fields container consists of fields having the same scoping. + + Returns + ------- + input: + An Input instance for this pin. + + Examples + -------- + >>> from ansys.dpf import core as dpf + >>> op = dpf.operators.utility.transpose_fields_container() + >>> op.inputs.fields_container.connect(my_fields_container) + >>> # or + >>> op.inputs.fields_container(my_fields_container) + """ + return self._fields_container + + @property + def label(self) -> Input[str]: + r"""Allows to connect label input to the operator. + + fields container label to use as fields label (default is time) + + Returns + ------- + input: + An Input instance for this pin. + + Examples + -------- + >>> from ansys.dpf import core as dpf + >>> op = dpf.operators.utility.transpose_fields_container() + >>> op.inputs.label.connect(my_label) + >>> # or + >>> op.inputs.label(my_label) + """ + return self._label + + +class OutputsTransposeFieldsContainer(_Outputs): + """Intermediate class used to get outputs from + transpose_fields_container operator. + + Examples + -------- + >>> from ansys.dpf import core as dpf + >>> op = dpf.operators.utility.transpose_fields_container() + >>> # Connect inputs : op.inputs. ... + >>> result_fields_container = op.outputs.fields_container() + """ + + def __init__(self, op: Operator): + super().__init__(transpose_fields_container._spec().outputs, op) + self._fields_container: Output[FieldsContainer] = Output( + transpose_fields_container._spec().output_pin(0), 0, op + ) + self._outputs.append(self._fields_container) + + @property + def fields_container(self) -> Output[FieldsContainer]: + r"""Allows to get fields_container output of the operator + + Returns + ------- + output: + An Output instance for this pin. + + Examples + -------- + >>> from ansys.dpf import core as dpf + >>> op = dpf.operators.utility.transpose_fields_container() + >>> # Get the output from op.outputs. ... + >>> result_fields_container = op.outputs.fields_container() + """ + return self._fields_container diff --git a/src/ansys/dpf/gatebin/Ans.Dpf.GrpcClient.dll b/src/ansys/dpf/gatebin/Ans.Dpf.GrpcClient.dll index 4f2723e6eabf080f8ecfba132b6e43f8ecd6767b..a7e1626a40dce31bcfc406c48cdf1e057c0d3533 100644 GIT binary patch delta 74118 zcmaI934Bvk`uKg5P)JxL9cY_cmQ=tNwbHs#R3vp7ilC+{QbeV7Ew1gj6%|ZXq`0=D z@Dw+SYjGJL{w6>Y$FMj-igFj-&2J9Zz*q z)2V-;PM}VtW>7P!SyUG_o4P+WhdPNmIk3z!<(?O;6K<4m{yOD8>xP>Gz89ywKGyP6 zpfo(CZnX9A3j%MxIpwpFmU{xvzc=Njk+#C}hh$!F{>k#(j|Y!lyRBymbt=_O&7~ed zokpEbok2a2nn%s2&ZHhhJvgwf=Md)==|%tWYZs5dDsAS=joQD*-<(zy_~#!BUbk4% z1CN&$>=-k9;oE*K_Qvwdv|H!ScFS9VRp%DGJL0Hcw?pi!GDU2Fj}V*wOM=)n@AU75(icI$ zR{DC{*MP~)!N;%Umh%fvveX4S&o4N9tYtyq*DE1ysR=BqE_iLkv4=ee&D?p4=7D^K z=0|(>?j64*G(J7;o@f2q_$51$YutT&ENPpeNZy_C!MJ+?O&Pfxt}#ldP7a!27EU{xQP6_~9hkv-y}LyLj(C zitJH=cW*7YJk8P{ICfpZKgYPo-kn5G=VM9RB$JD`zBACj3ly&}IM!lmkZU&-d})~( zI7bS;9_>Ev=H#do_?R5^NUt$!s$BeN!CRIC_zStiMG0ENIF8k?9E%u)E zGOdBe(}Cyx1*cmx7GCMsR-a7A@qCEQw5UmrlFYvr9A+62Sn$_^PFv;$mx59W%GrE~ zW&d_5D5qX3d4YnX+*9c)y?fF0;@C@bMjM3F6jJ%GmujVVj)#!U1TeGFz{)6!6UYew<@8s z94a~=Vo(2DQ3=TUP{Djlb>O2=!3K+^TdsMv;2X;qfeO9g|Ew9A%i^++<3sGN@6-s3 zT>VwvC?H7;q5%#lX(j3Uq5`Y)M@5Pxugf+_0{Cm&ruF-6T<~kluVFDPeW7?AMQkh}2(jYKi5Kf$;|)n(nl; z2Xc=&bbFd*QlQUsXvc+?;{uzWICQ}?mS?5kJ8PR|An-)ltd3EZ8v++Bo%Ld_<&=Qy z###4TAk%WwtnPy>7p%SEsae!QY7zA?>fzKQs7F$dqRyrkQ|C~RrXE8*mO7Vu9CaSm zLoJ~mPd$NpBK0KdAF1=HrPKw~lc@`-i>RkiPoUq@V)Cy`P^?a(5=|bv7)QhQ?P^+jbsFzYNqh3zEf_f$ODrz;ghWaP! z)zoXK*HW*eUQey1uB6^Ty^(qobrp3r^=7J%T1UNwdMoud>Kf|p)V0)l>N@Hj)H|tn zQSYYSL%o;UKy9S{nR*}fe(HMa2C4*Zc&h1y$@Y8SFThFW*2|7a(-HOy%+@&p%Z{ew zUu5||aplIT7RwiM;SC$_wUo(^H*8#PwLBGAeB;JLEtXw!+f5s9CN4&-+IX+E?=e}w zYU4eut z2fFqd*uuc?Yt_Ig{|*gYYu)k?^SpSr)W@ig2drD3IBq{n`P!1e6VxZE zPf=T_Tc}S{pP@cWeUADU>hn}TwUzn;^{>mbRA~+qSn^qZ*b&Wx2?8l zvgN>Sd6p{a2JCO&6!uwIo;~Me8PNT3rUAP|{yQCdK1t8pw#3?dzq~SUTi)8OdD{Y8 z^V&Z=-4d0?8``JBW9tp=KU-X~<;M2q0LM-3^8gEOYM*ZjN#jlJYb|Yo>{aanizQ#W zSGQ+biUa+t+h<#0F}JQ=ak{ateTk(vu)D7P66?%{?Yc34^JRw`F!sLLcE;PscQ+aR zeyO{S2^*yEw)Q32&W}y3h85LHSOOc02Hz$bbGr~ zsq6Ok*TLJkw*5m(uhi7H&qmK%>X9NUyX#?pAh2Z}+*@iTd`J5xYwQ)d^v?F9(omh& zEDzt={)-}i7m`%V?z`Hzqvq}#Am4d+yHlL^wC79o?)Kt9@jdOu7L;0ZFZ{H~#(UeZ zvUtSNz;rGtX=uO1k{{U8(7t@Mt@jIEj*)E#I=?bS8<<;Y2=0-R2jQb7u=K(9Q5Ghx ze5iePc0(L1VMgzDCU&W`K7`2rK=(uKPmN&I%FXS2E!pK?n?w`n39Eag@v-)&EKM@! z@%DEu72<<=lKUjBLD~Ie`%_lW_j1Qe?RoC+<4kTVGMFsD%m=qTuO8ZHc6$9jLou9b#_V^kgZuGrbXkSr#*Ru(XJ9p1d}#d z_I+Ial=-+q$|8`&rz7pBaq0+1+P}}X3`pz8Sgu8ue$u{))}Bw=XXh3>OcE9Ak1{Cd zk1^YYn~yZwol@2dc7^O#pk5mLVA3Ny0qOoYuJ=U~H!A6$wts>L?f$e~EZBeD=S0k) zlzqXNQdy^fOTr2?%N_-qr07dPNLDD&E1MN)lb$b`t5jBgMJp<;3N%Z<0)EMj0S08L z0$5dnYT2oPT@lL?SAV-Z+mmUEQT?{bTE$2+clo5OAJkHX>I!V`Z-4#*OMRg1l#baW z3EOpNbO^DZdnO=XwkpshWs3nJ>0jKTbk}$mtty$hq+>fM{Yz-Yq^=y`lkBCS#3a0w zmS2{h4N9qGFQZj0t;={;D@)HYTDuhp$+~j^9?3lq&?Z|I@JrcpK(X{I;FP)wK$T=y z0xG0c0k14L9}ts11$t%W1%P5nzpz8BcDFozVaEoGTS_jX*CRautCl5yx|rTtaa=-g zwQN=(U*=Q+Dx_Nhx2#wJz_Tt@BMRh!OBqouMVA>kI{{YhP&xl{dWrMPJD$fhTdv?? zR7$P{_@w8`jsT$XDq1d?Sq&(ZumVl8v<5IBy8%{hw%qY2$TUdq)%4cNRt3=XHGrt} zD^MYI*8;qfeI39rtqKs+*Q@dK6bZm5U7^!Iy&9bcnhsknRzRqO~SX*sTL71yJY5? zj;9=2vFTO~QnaSyD)Af|%$LHt4m-@RydCU9nX{I$EMsfoL_0xlsE1GDVjaEBvPFR= zDY*ksDm@A~rRGimmbptwwoo3uixH(V=Wcr2q+0=>thmQOwcHEvvLpa%rKkarAK2N@ zag~)UGUq;;Ez+%kM^@YqXcNnNMfG%fU_Dfcwhi>w%1#CHrBV#AM*%d_1n8BS8&xY1 z-q^9$0?P{?G#>T=toFrn!$Z(1l=O!YwpO|yMm323NXJuSw6jdrX#Y4`{&921dI@dn za9iAgzD*tTEex5t8A478E6^ZI9|hnJ3J`aX0iu%oIG{@ivsz9l4m+LS#hVn=ZxN!e*uuZpI3Uh zRGxm`&~}NR-dgEVU_feG0mb5Y0pOF(3PfejUja_(R-l|k1>hCSONz`@^1w@wsh6Uc z>GjD@1)@?J0QAZp1=tF;0m^0ORsd0)4gePbaMg$==y95A7}mSnW5+13Np8Lagqc9kY4p zc%x$~OwN3xV-}rD-{{DLS{wSlxx59kQ#LB#mhQJYvRF_0--1xJINpY@0a@@ig#1$THXP*3=C?a$ zXV*8I^gKb6PJ*smcB?VPQuGd3q0J`Nz%6r)+1$69uu1CPffky3rz0!7?MV~MJH>pO zpyijocRJ=d>>J{br4pgD+cuib!aGcC|Def1Oe)`H=BR9b*HBx}yNKYGJ*q_{cNv{4 zx{#z<8oQ9PRJN$jYU%4@T!rLz(;Aee-JrmrYPn@=H_r-X4n}AkJPS*&4+IDVMsQ=k3y@(?EP__DZKXwlNGP*ejgG<=B|!QkY(jArXhxR!981H z)nY~c08lHH3SjULP^Ld_#^DAcEq-7qCH+GHE9QqN%pX|sVaKSEmWDvhM;+{Xn`Pz4 zcrmN_Cn^>D<&94|f;h;!UV00qsL#k?yZdnQ3R(AQ$1JOTo4oRA$ALI?-=~N=Adb%f zgR=ptQ>_Zw_!$g#?l1*zFFelhpoF!3(yfNF$uY+iea@J2S@1dR7PBjY zP?v;1M<;F4_c@rv(HC^KNXZwpT(Uy7N@cTZHOtN~z$}%1)#;SnF9DqFzQknJvhGVz zdZqPCLm|6qIii0{7^nLS=B<`FUonES{#T$j1vY-g(w&|Ex{1^@jCCx~k13-cnvcDj zDOtknJ<{3_O{eSx3y~~eGjFeyd=2SZS)ssyG=9yqsO(f=KrG+DeY50#(~;!}MNP7r zgg-SrqEbB^l)7&qlP_Tf{9^f*DS9RQTUy1k^jpXjOXIiDj>^_=84!~m)nc#mT}PhP zzEckRj+{ic_>PC2QuiIIDU{al7#Nd&1v(}7Up#A;l7G=EmzDowe4%WnwP{j{>z)V+Vx9;Q%zqW(8t0XSC7T ztw67=7y}p#SjGmgx2c)NGX>ieClk7)Pk|O$mky3!a{pj-?o^;lY9;{MBzqzQDx^n& z2HBVaCQEFlL3?K=D1}m!MJp-}7l7@&EBLboPB-o!REN;83HtXBUIot597YU^WfIT) zGE;#8DVxMVw($z!HPKsI~C}Z$^(L8)3hD( z%K^dlkZqhsw>vO%dhli&vTn&^&SELcr?*S`^AW@?TV~SPDP;!%s%4J?PT71g&%9E3 z2rZvD3TXAp&H`HXQgdkVd8;;34wx0(z#Lm=L9JKH3IR^(SAflO5rD(SVSrj`RUj%0 z4hJ};?{KKOWb+YF>y!mY0vcqu0-dt)C;(|^HYkK@F|7*OQfv$_nL~>Wm;x?oJQ_eQ zIR;GJRROkY$I@9Pm2-`0_bAXQjmH5zGIJg%o3nVWU;G+N9qExeGBPGA*Q&RZ#&} z#f8CH*$vZn7%AC#VTl0;@=O>K%c7uKUb7cLuUFaJJQ+A%9*JJQTkQ)5KZ! zEP^~4_mto)KpDVc&oSw8E?5%G6Zdx=4%cC3SM@>W6p38Pe&v+lhcLV4RLH~v-KPd` zR+mF%UYZ=+yv)I3>xG?8*=cs}rqj_o*(8WTPJufXxUyhgc5R;7n;(}bkzO!O86@&$ zOBu+d-7>gkQ&0x^W+^(|XjPt0iy%53l$dN)pip{FhmlgToI$HWa?b!IUzRG+D~$@k zmI5)coC&CqISQ0Y&6y0Smc}!KS&p^>ldD3L*Lvwz536MNnL)KVD_Ts82v`gkwNke@ zI4@h9YmPW#m>j**v)Gt3{VYI(EKs0c>dt~mzic@RLL@@f*(8=F!P)y)%`ypf4b!_; zB&RP49*8U}moO~}3`@ap_Yznl8JD9ix6CYul3OYP*-ncgHs*$WhOFyaei>>9RC8d+1#?P^|ceseqYG!_kM4#2JYR7RiV+Kc9x08M(-Tv z@JioOK(9E?29R#fX8vYbaW>MkSyljDs7`kBpjfps8NDp1cG(M-A*^3kF5_X8`vzLg z(nrfyf7%Xt@V$=XxP36Ds5=LgLfLu_)VLu~EiT&5rG>woON%ozEvx2{JI)QN&3>5P z?7{gatC4q1i4qRjDe31ih_m8(2KgEVYGtF@*{xb_vPXfCN`sT^ z^OOk2_mKI{haw9fzNzsjvCbQp&C)=-;8*U^e;A5(n`%8rrlRY=$ zHX$jwiB6bNAQou636}zO%PN|F=~kdc_N+plVyRh8t5i0wW>-+o*Azi67d*1A4k_KT z;1(XTe^G#Bdkb8Lr27^I4$6XCY2mN8@{A?+Rx(M`?WQOs_*<|j*C9O2Zo0+nbzi-& zfF3EjEtqF3y%iPra)R4P3%cRk7|IpMZ3u)hmG(-VYWetj1TY}o07vQFCR;vft!E0iz z0l@VP5(T2NLIGc(@lLf*YYFt-g&$h&_sf6pCE7gF*g%+ZtS*m5hBanzn-6Ig}k}aym zm5XY5#jy!cDn*;MnF9U$Aj#U$(g)|4m_;P}pC zxNY-h^YNr%vsOsSW6kDzyHAjV7Y3(Dk3uRJ%k#>C-j&0i z$9!a)=Mjn{=<^WbUR1TJWRGgOB-?K&ugs5rUDD{MvrSt4D9OGvuERf@-jPUuP15Jb z3hb;~8Om-zfhws}pj@`L2G^pMk{1-WffX+VM_Ey1&5Mw4mev>P?UbGunWahgs8+G$ zzQjN_-wHHH<4ZWEx6_>3S#3_8FdzB(C8lO){W8d??`2wpvf^dvaY3OvIhU$dRQgn_ zO0ok0&e95W$vOo>5)OdE88i^g%Jscw&gB_4m-dF)&vxlAMsO9i0SJONwSSMuEp6OZpy|N_?F3B<+ zyu?=eX?&SP_E+)8s1)hoR>@KYs-;dx6P(x-DCL_#$nj;Tj@v7}?l9JxnXfUhO1c%` ztFqS(x6bW^{bt#!Kue%(XK=g)>sP)3RZ`U(WM+(|S}xh6fM0UoRHh4*y{QClkU4MD z%enUL;8Tv$f5mMeC2zw>1-GU=jVw5J!52PC@>;E_3f4CUaXK&Na`odbLa%E(UHtvdO->r+l{_Ww(`=k6~! zEV{&bcB8}$8)UhgIm_|ejav8i2}8O75%}$A1psg?ytcUPT>XnOVxW5R_cY+ zADds(e!Sx~)ukn#jpg%1YWe2ZwDLRmeKwB%C^s{g^X&4qt-l5Xt-o%6?D#ZSc0>zF z(Xx;$P%|&|^Emd#-A$1!@tqR7-26O2LYKZUR>qzhYGc2!&PqNqX0hlkqeY9H3RmL-Q8td*aW+IDe_O_Hk1 zht!I5lWhZk;M^pB<$3#%-mrY=$rMJeTfXl|XGP+9psphHizUu*$?S-0?Z)#%fsN;f zPs@?FR)y{28xu+!yD^Ltn8hdktHNq~lfF8fmE(W%gTw=EFGV#x)aWB&X$-b!%QdUR zlf-{~Xspe*J}hfjhi8ia!tG;i+)ztb`!gA1DxUg4Yg-@IdhZX*rq$so_AMW1_D8~+ zT`aeTv&8$=lMZ{!2b%Apu*Stmyvy$Jf!6#$SYt16Yj^^|Qg(AV&ogvM0F3pq!a9bq?s`|Bs)2E$rm#${4P`eLjxdyL#c0nLyqYQ3-V)9t z1>Sv2c$!q*7IsSLmhjjkeM<2dt_5ukFUszgcxNh~ZOTYFY%V6>8lJ`)RdQ=MZ@d=* zo*^B}{M%qIcHh2Kt2P?UVg8%LE|Ov2x^Rx8;)xHm3jCx?I&KXgJk$5|2Sy@P6Q|A^ z10}T-O8RZ#ESqPO;SrdB#5kw2QM~j@-C7nu5v$)oIl=?jx57elKYXDNSpUtSesAwy7US{t5}rh=nNwyq7U%{bF$N%J|x zYDPV_9yG#Jxt7wmoLP?*y>dl;_~5i!=HhO9HEcGY{_41q&wQX^eVMm9Y`CI(!;Ul* z8T=rem59=*g(L{fr}4^Vs`AXw_Zt!!Q_olzo@Rq}BV9R^e<)w@$rbCu2TxG*rWOw| zjQ?k(Il(bgApFkp42vygKvqnnq}oKqXln7TEx991eKk;WhrWDdT1&5vqn2&Zr>eYX zm$w@9Lq>Unx)ys+aWQvB_;!EjB{; z>sdDYr^Xon<*%k$Kh|Z|bGXpt_4?twaas0=K1r@vujkm@QQc4rFIz{(jd(MP$y?X! zS!q=t>6%AM+Vu(2yIw!S=I_(xv`LXnDcHcYhNQF7%RkgpbwZYJ+@POetNuWjt6KGp zG=I0Ew|j$rr&aq*R*QbIP5YZJHy;Zpzlok>)jpE_oAi@yo&V5{B}Hy(LP<^RMwrAc zKPk{8*&FrQWT>)@2<3ZUm+$WlO_qx5alX4Z>c6n2U;k5rjeI7(+KBUiwWX(hR&n!7B9@f>3VB^EETZ=JH+qxsu+7)MF#3TA5Hg70t z6MEkLh<+L)N;WZj^esbMhUYqOkEF?}P5RYP-MtC5R?CcLjNq2V%{qShs%c`mzga(V z<{+A~-xbHP&^#R4qqk7(`{Lgi*stv0e%i0K} zdiYU&8LHXysD1%@IQKC`Eti^S8Ry&-N|To!(+^Mc{zI9v?1spM4Ug+ivTOR|`t?@l z`*O$Q`k}<$*2nc(hWST-8`YXV!DV03<-^DI6*l{aaT(5eLbqFMx5?`H`qU9!Q7vCu zpU~G@t9QuJPwHodnNZN{Q{c@ z%|G9+XYzKk>NQH~(+RF6^psv@YzJgfi*Cnk;gTH_jJ=2)(W1K?y{{2O@Lgp-XlT(# z7=H3@b7+RNx9HySzP}9-E+!U?{ml_u^drQ#MR$q+8Qm$51lz|>@P8cD%KxHkyj`7O zM3!&Sb4R)0+`V%s2nonZXz5Pe$dzSmS8Pp07~7>xJE5Nc z8QPWZ*Oh&q(WjF)k9-CTb@u66i)?Pxvy9bw;xi-Uu4nYI(!3MqN}t7OU9x$no<*Fu zg3m?57tiR&m?oxUf{_<&KEm#_XZ2hQU*SKi=Zq_SIVl7Cqt<8j)1>@4J-_i#yO~GE zKF1Wr&pkcX8v980drm)0e9!5HMpn0OSNY=U3~TIZdFMI(V&*^cFGN#|)cr;OFf9~@ zvNXP)sp~ozS+`nCi@E#(HQA{Q7^Z_iAv+{ zcl0!?$~xbMGUbYw^l37%Vuw?jU&7K=ypOHVGwo8fRla;lKS10s>#hldWaQM+OwKg) zT=BAAJgT`%*XqemYDt&&mr3ugfSxb@kUrMowe)B$TN%x}j{1ZR0i4Ri!?Y^aEbc`l zX-3>GpdUfD2?t0d+()$OHxq7kZF-JnKpt+>r&;aY@@kuYmaXdjcr0vBvp%cK+O2vK zj%9UjljFDQr*5dz$H{kF5xZ@x?i!_;Sx&y+s+Tkt+S98)#md`4n*FDc*7-t68S@qW z607!wJpGD(R9ZQYd*zE)^b0mbLw2d&rhBDy8_v}BkuHDTrr*s)04viZD~>Y$OxBWf z+nLGNuAfK_-qEg48|5dFblw{>6D1t7Xc#9J=l4;~LlP~-Y=)*5b?Ekt@|5h5)UY&m z5W!U)D6yqOFGeYS9mKgE9q-+5N9L4x&dDF?(O>h7A`zhfOl@!FXRqMWp-{(aQ%hqVoBwB zwQfsCNFN0%9mxzbK8AG@C7!uLt6of#-$MErH3h5xc+Yj$cw_A1O(86#&DeiGG6{km37x*uNrFX~$H3%X{kooo|d)r+Tw zh>70c!PV4~_Kp!N>NIA>Fv?PnUSh2G1L(++x_*YOp(7s8UQ%w1B;oHdE$Hxl8P!}E zFepUT`ix`Qr2};{1nyv=+!HyMD*FVHdFtZ@?1n8mDTe1|K;5Ct}fdm`Y9?$ zdT-pGCUbY_3&p-ecUeQ9@v^9Xy4Btz@9fYIP#c3C>`q*g@fwT1A?gHdLf)Sy_rIne z!sjqgY{lD*KvBCeS@oLE+g~u%`B$Z#xv%TTY0%KaUTURiC!0u?a;^FkL(k2u zFXQm(Bqr|@;W%nj#~#648@hIq$-Cn89RtCr=6hbTY+w|=!G^GlSX7pho8DkeW`m-} zHt}RaIVMe%YRtjDC$VF(H9=A>hNFLBZlaa^s*>){> z2M_S6jbe`6{|?J~RPD-h90LdJ()>@Uk;ufzcNp1#Z>rsgBg6(@rF6dR?joowxHKlZ z+Kg6wpTCTadyMV!=dWg2SZ0=N&m8;3kQUhOysJ-5Yo@E$q~YdGT0E|lF=~p*6|;6} z+E=<(`sL85gbv}U3$D4jcvqifAJLxB;K09iVUc>?x@Dev=JCi$ z-8^T1LC+}W(fB!)5o%-dnX8w%+P*Rk$}!N^#V@mrU@lDS(b^b4D8Dh@##G8wY6m|y zg*CkEJ$-7r8?vc|mtWpv@2lo-Q3K7iI^LIp*43}eyLYO)jj>WO^6?S2VmjuHj%4na zg5*gvQXc<3(8-mjLxbN>ccd^9bSZ`q}}>2Hze=+9CgQ;YXoGL|W&iX`%4 z--pV&ckD!EXzNmg*&r9>s#RTu`2d6u~9(t+>I@Q1|gJH{{y!5_4EnQ)!mM&TK zAty@3?ik;w9!=x9>l=jK5}7iZb{ix;-xx|!yx3y@GBtj1*T^0%pNGD0_9du@7k`JP zsV;~`ztg2=;K^K3$yeUqg}r%eX_uat-hh~?#mBqJI9HdNjeDAJpB!PUXRzA*ur0j% z14eQx_(0FI!IY^;ci}Fr7BYjTpvK{~;G>rfnfM&%H>}jO+ zpXL&;GNv{Dcy#sH9?cJ3eiOLgKlFn#LjT@(j?hmk36=a4H?8;wNvP`w!-$4Kj{SsF zfVyif@j7}mq|p4k_Z_XcEr&vCDIF$-kLOkL-9N|`RHSIa!vo#U8GgWCfWT@T&p^+WJkjoYzOsXQz|2# z-RV7AGyIcEkutxE79);Zq~jxfT1IgS&uVxJ?Q&&~329C~)+@Hm zZ$}(0C=8BRF_2+GS~Ua>DGhOya$(z0y8BGF62>_5Jn%6RwMh75J!fhxMIUgJ%CJ^H z5D%n6XOE_A%2yh3Wf|9IKgn^QuoG#J%1_V@{-Gk%FzV$WV^seqm>PwsVBFvS2eQR~ z)D}~TLO@x1@wzrC>Q!q954=*>i(s4yTr2>5&cXLp*M|EsBnXL8D`7RXnBPJ&)c>na zBC~vM*l;`4;woD&g;z6P_erH?7S67GXs1Kqs|a>#<- zjB$nrCx43GxJ&$$Nc4hOF_^U8xYA#SrnU2P0z9zgQ{9!W_)9H(ZTG3M*XjS1gu?yi zXGUI`qd>7#D!_FP(mT42WO*1gmVwW3YrpjH&_<8avO2+y;322riO)>Hm^Df|!@8$@ z4wq5Yku%PdGJ8y^+|^h(O1wLW-9e6jIjra@80CuZyzD5V*;B+xusO8|GJ%mh8nApl4?E@UFUV8=UreW(?8zV>GL5wk4$IfX@L~XS*tETgL`m@R zeI6}hZmt@#dic65qE+qPmm9@dHGiH$pOx<9acc2MxSySj>W=L-ETtUA3dO6&gfgx0 zpsxGJrVwnA1z#f?^DC!QDi~`SqRG1vU#m+=OGM`ViM5J1%v8I}8Zp+c4c`#|P3BN_ zUv3={k$V?~GpAdJNN8yht>uH9{Xn&VM~ zQi;XMw7>uinfLqZssjnlePHn}tsatWh`zOz7W5OA+BM|+_dz9>IIc${a^aQ6V#~G(tr}#7#OmtEuR(TZ{IJRDPR1H+X1*T zsEnzF>kvcp(+uTRY~7KzUy3*Q;wFNLn(xuG7c(@Os0PuvD3iNfkl|UBI=l?Z?(gwn zkK_(;k}n@QgyBMW${|Euz}n%&!^3KYH^J7)vjqQyN}4=3fI)dRV?ZTy@W?XY;Y&5U z$udsCe52xu9h}so6^@Rm%j6$1Mfq;D=u&t&Hvi~2PQzr@L~wYm37k<~_K4PCH*{bu zh%NHPZWh@#y7wsxO(y?Za-m=TLP6?t<8yu^^{m?|SQXOv6ANeY*oelTEHLyk zxne47131wXyaZXN>{iskk8dl|tYahc$sIc~_k%>D_~FHyb$~a5Vf6>6MQL0Y@~KwIEYj<&>ZGgEKnE4Na-0E}j@S*o0Bd z=@HGIVN9d;`<8Th?PvV}TVaMtXscCI;933IqJW# zP$-rE)u&F4(&hUdR5vpuraYzz6_p}x=ywnc4YB@ru4+>ai8aLLM|bmX+@5Kj7%@(d z<7#0tQOL%72*N@`mT{daYT--4pLybvEx(W#nx*>}5>_Dy0}9tz1q{oKkLTlpUkSu& zDf<oeVU?Yl~ltLMRtNx0irl8ezFAd)D)R3{r`=4J$LPNJ(<5DrSw=YVPB#ONd}2Pa_&M>&3nhqLw0_&@#N zgG0mIufmLp3YHLkiDPzkh;=@!D3sCF0^py4e!ROOG;B zYRQ)#x(P#zH8ORS>)?pyc17gff9q512Xk`+H{>#FMnFW{pgPnOqywHBCop*%9OGspfSn zj6ef!X;h$CwkkjRcj zV9->BdK=S@70s6NHjCYq3fEEIUU=a4w282nD20$6LUwqPUX;5uGJQIh9Yg^YDFYG% z%agP0Ua({OBve(1N?Lvgli#SIRt{o~VqknxlQVSw3=bq~8yl zxJO4g(o8qTDqY$J8GPEv$1`jpG(Nt0N2aV99hsJ`qA#^nBr}5&*^Y8F6pz{Vix?@} zcLFDJ6+ZupWLgi5^V13Eu>*-KCH@45e`Z48yj-f@ST>Xr!g=TIU}?!?A9NtA+BAIk zh)Cx26weExn$*&i^gtu26plrxUg#J*r-4IQ)seXB0Oc_ozCuByk$b;=(wO4=wC!0E z92-&Dw{L7D&qkmtMfP5UbEL$36ACb$gPbyLOfRa9^0-2A$KB_QPL=#i>Er!Zr(f@5fLX}lxe1w$*07*A_5JEn|2lm!GOg$^|A z_jx2uZ88(35W5UTs=|BFYA+Ib3Nokw+bCJF}#>7feI-VDC1Nn zR}tBkmzY&PN+%KF=E^;cSgFl2wL7B_8T`0d@vsn9bNG|mF&xJYV@_59U%sMiT{dZsdXqEt!ISW*uu#yn!Uh;KJ4sF%AZMh>>&Z;6yN z7Ud)gt3At}jTEMy^1Vme*iDNXGudNkg*~_Y9ceh%$D_ zLJognYEwG1Fj&6yWwC;W*c52e=Q3td>1(2zHeURPCdMi6aySozE4nHa{zO^HAhp=I z5U5kODxjHiX+?3ioUo#K5W~&6+d7M1}@>s(uHvJ}E9Q`NQ)5xJr3qk5a)v z8d~&s21b(uTc@(QsmzRIWmgpq@vc~L(;gDdRvK5)m>8@pTwjq9vc?5Ttvr!KHi({( zba5$}fyoEH=Th}I9&v-6J4x*$=a8QcGY0lP%lg`OQbO^?WT?ZTDr+X;%~jG0dfH$~ zgswLtg}rrW4cacy*ZLS@ll2@LfHfq8cmcYv_3>u zn%x8ygX9hW{#fCW(Q@}#!*L? z@Qov8YF4ski*GUe3rvzIe*9#}Vg>GFxy6B+Ry>4~K#d+nf`f@p)MyStjOjgd6VumB!?12yuK-7wX{7vjP{zl3MAo zh)^W{M-e$vKOLJ@%jW4g9`BgoEaq-5Mat5ouJ{QP=dc+@&dZ*GmHDyZ3=)5NF`3-; zYUV_&n<(`t+zg4L&)5Sx35Qy=>_5ij)8U>=D8YDCKAOR?G{z*UC4XK*CB`q9<{ZeR zRZ?~!lh#VfA)EmRJmdr>p+ekMgNmg-g(u{slmxB{g zNuuoIk1l&s#Yj8L!gmt+sI?lKss++|qUn#LLnq*m_zHh~bL7m(LD>x{`c{OU$ZZN| zEO6eV2si{{4=|Ig8I#R33CUuRLL@ZxcEIR4th2LWp0;`wPW33 z8k>$Q4(70>Qgvz>%J{~~eDgFMXHYrzq_HVp!HX5jjd{EO5Il<4X%9g&F%T+_k81+W zLvYD&hOu`GC1Rv;ayl{lXWH@skw^iqup z3sqttR-DN!$_VU7X9MOe|2*_m{Z(opTDFq3rh zPDw9f!q|fNgbfQ>Mi@~leMdsdK0h&7X~Wk1$2eLqXbn7TG0|eB2{h(#*^~3D-I*N` zn&Fpw(!=nXd?`7M9b)MzL#iv}sTr{P2uyWpAN%2n`QT5Yy=9K(uRFtbuiK9smaQC;k1l!E!3lO1Akq6{)>=tOFyIOUgyWK!M7 zh0=^8kR9U5+**sgiBg=D-AJa5N09j{N)24)@Dou+qIh6th~*iDND8K=rJy8GLrJRa zh55pok);a_?|0q>M^_xl+Q|8gXDnP>6=+Zl=dfU!@{`BMqO3&WPba`wwo+_rslp5< zM`h|VvXo2+My(Q+$QAAb<{K8z9E}yL;j_(nr1nSh(NWw%DTAaIKR83mR1xQBPD;%$ zWYyn>!AWy$wWpbTrI=Ure&|OCP9K?Nk{(2lwxkqB#+MM2Z@`seHuA*rAweuv57nqpRt6 zP&ID?)nL6UIk);*uS)$= zCQbOBt+vdxh#eF^D10*j3g%Bg2DSF0R&|9Y-N)hb%8w_WKBSfWq<)QXZaX!;wn9>^ zu@h5*GMW^i=vRUg1{>5`!{hi{7soM8ND)>q zMn9)Ixg(`zb1pGc;uzRlphT5SzP*j$qcSyN zbBYcUlbe*)NiDq;s{f<(sSY1{8FGF{;Ysgn&F3h2a!*G8r6pXM+LtB$GGp-EA<0}7 ziJ{8-?d6G1rYjCW`C4#Iz+jk?B%d0@p@LTOOzCJ{yODH_l=wK-Dj~rTAxb zF|kN5p{IJ=#IhigGh+}Ad`mb&EghO5F;NSWn~EY=Pq#0@PKtfkq@L8;VLv}X$Jp*y9#6tn$f>27`OUe^2tE%V9!a=QJ_(l$DZNY`g;lf)RHts8 zM#GJVS?ZOgvc-D}8?JLr`Dgf*OwjKHe|V`%DzE5M@|VGj(sgPHot@x?YuUUs7ebdy z(L$2JU~;sPxcN0Tz2Y6sa>$rODQ4ajS^U^#c^_Lt!&1h=J9$1^JY}NP;!UbRWm>78 zPa^Qiy7@$CskF`~ox9O_SBg6(M*EVsFfM}}r7Q?;W%a3P12_(=Nhua*HK8ZBbU8N% z$T7T>;{_(yMxyUUfo9WK{`(cpX5}+eM-{@jd%2-^<;`-^0=5y(rRE|qW1yV;fGG9M zGrZ&{i7H0zV3<>=McR&kw!!Uy{Ir0j0ar~d4cLF~$tcV|O!THCHN$6mE8_O=A`<=B zplz646*o?1NZN+=i%{jF)3FdG4=8J@jfP>=hGUUTSxlvIS+$V)mHPK7$@vX~buA=w z;CIGaIN1Xeiecsa!;4Q!PGH?6TbS#ne>t0w%kZ-E4W+89GwbE}IdA<;Oc@?sk>K61 zP=2ymQp#7TeTxu(F7Vnj(FoNU{s?Bq;!OQ;Bmyvs} zAd6kF?@%RzzbY|Y={sWpjuXXsN#YS(UEXSBVm7R0Dl@6yL$r~RqM);5ReepT;@Uh1 z)z)^Eva|7J)Kzi&`Of9~5^N{z4ljQAGVNy^Mhnp#6twc+LG@jkK!siQl&2wWvursH z{qV-eX#_{?Qp4R&BRF_F#LM=*IE7AObz(g3nU@x&N$&J=pAouzU&h){n8}p-9>;zj zM-B85lkY$#gqbVHQCq>L9ifV)>~u0oX;PQQY2M8kkD(y-RM>yGSe;Q;PDTZ!62+S| zx#0nxq%zbuPli>^K3s|~CQc{FP=I;S(S^!=2*`!a z>5*w8n_-3jE@9*u=E?UAwZQWn;lc^%v{fOURiu5+TtgnXEK}WNiF3`4J+3hr!je=xTQ$>vD?s=t(mw{ z-_BSeZ+u^bsZV-kA&_wdhU9q)jNZaF{zN z&T8p12bP@`nU$?{o?2>?wlY$ey(aGZ9<P-eTm#L$0wx$42u*bsT~#nN(oG0NZZC0MbtO3Ka4 zSZ&XbuWB9T5Q<74!*boqE`;Oo(vox*zS_+jHAu4*!>C)S>6`zix$v#(-y4?9D(dET zB0MF^0QxkAF}^t^y^z4P0hLR#jcdYj#du7jgiIG{R?_B-sXhl^R|%>*iLFkTB&H1` z*_+`&>M~?ZZ6!&WDD@}N(yUkTjXb~onwS!j%}KQyNzs#%a_vcj;XE#T(nhAqaYSRD zUNUYI3TVOyjBC0J*h*c;{Z37Sy)_d@de_3Gs?`X>krt&8`G44k&><2d!_bAq{Ay%AAVVeDYdd#tPD zkL{4Chp|%ic!Hyok0t}=YLskNe$E->n)o{l*Ro?jffqYII+q1>AccQroBC@LB#dxk z`U+U|Tr(tP!h#h^OylYY40CEO!)B4xThAkBD5a&At|XSRR19LzdZjc-4KMyAc_oW@ zmmAtyv7DvCFO2|OCt5IGqVQoJKT3)snM!D*n^21(*mW|pf_&Ml)RU7jm?A|jQknc3 zp|_@jh~ckhSHQH=cWUWOn$=hr^0)p?V`?_tb(NUSc;Os1#qhFX)nyz98+g@4&aH%K zh3d=6s85-DkkRJc=r}K}SFvsob2KL{W?cQJpU;-0bc+$-yspKsimqlxa(9~bVK(FU zv4OqzeC8;X?i(Xnxy8-6Z2X7zr44Kd|4dGQ9Jjrd37%CPcb^|QhU5FV3m8-@MHfW! zG6w4QmDY8$^2oYNxLfx~-398{cLzNyiGB{IX}S7S{(cb`FCMX6964cD zsBs9TZOxFTTzB&M3AED$VLtb61n-H6)a0}j)8UJ8 z_fpw?G5geB8FxwKgtR6U#+9iLTUA|x+wudEO9=eJmbgMf4P-m)(PrWp*Q!@=`TDd< z`3%c3evNK@G>-1Qn%(;AHRC_tXN;7`KEjn-hyqfJ z^R9i{TvI?b4TsfuYjy>^*7KjA@s|eGuXJqw4RLw8F6GpV)9@a^8rWmqby=#U@lxKh z>_l^^g+E$NcZMs)bn3Aa22CFo*JX_E;(u&og;b;2vs{Lc*GeNjlS^;FM8h0h5omi@ zg&d~imy5gxDeCu2=`mE6DEas+KRmq*8CqoK<*1CG{aucU3+0N-ji_#<(^h_Ge6!|7 zCht9psG;(K%i(HJ99J-~N{X(CoIr9(uSHtpk235g4(Na4ipbSmC}m#>RvZ7JTx3&v z;r&BAC|Fg7<&5}A$z6>Ae4wk>+*Aqbo( zF(N3DdqNDTMeBZyTny(i@=ulI)MuXx zGJF@O(un$lDKq}WN!CSfFjBpH4d4Djqe^+M`BTpHmK2^_aO1dV`2Q3s9#xME$LiT4 zd=||sfjpqRqUmf!rK{1 zs!=v%>XC4tf(;VRqW&UG zH8VDlQA^3GD@IRoo|v|CXesn`u8k{Lt<*x7ZT;V$ZLJXju+<5uBNRZ_W%)Lk`9|1tFGl!sSE=1+*GBxWCL-@pcg zh>??wl|iNE@l7fg;>AzqP=A6z1uYi_i&sYupB%$bgHMGLC`nj+Z&Gc>7L8<6i)#@8 zw~AIzq(v&gQF(#R?mx3>n>5Bvv%~W2C*Gxr=uS$lX zfxk$GAQ40}WjjS~ncTuXEg4l5FRoUc z4=+o2eaw{Pun>Jdu4mY`)g1$9o|DF*i-(r4dUbUFmLXt3>|(--E>+l{$(0}f8ep+} zzea}&>KT4MF^Glaqk&Efwcj9Aawz5~WDK`32vIY-N>m9nqC=%p7JEN(*Iy3e~LYSGs;eSG#L zAiME)8@VW+Whzb2WQ7r1z$uU)A$k)R0cBk6ylCtQFE&V97?obUevkGd9CT6vA8f0o z9JFmY0~z=QT0oS(_bO|Dzb#xjb?tA*<}VPF?oMIE1?%O`(*IWwD*{A`6ZD3QUqA%1 zh$t?W3HQrwsZaiqsRA^cokbUqePWvD7Huu{LY)8qA=Q|5rU|J6T>`%wJGCo!HlSUz zYk&RXih6xvj3Yw-J1Q_s{kyT_X2)r=pBSz&CCL*3=)W0RXT9Y2Ok-6rSnf2^VJ=dR zsHTm@-nQMv8+)jU-$P}Bj^8tO>BkZ}sR-<@C{ssua)z5hBT*mm{OVPXZ_QrGz?YGk z%+Umrza#ju5<}!M?G^J*)~}l}e44h2VZ=}zml?CfrTh3LV*_5aMmzpM z@H{5e@!5GP(XAxN3A)5B2}Cw|E0@59f(op}m5kG-$@ayNa--5_1Xd|9b+FooJBose z5h~tfOm|-#ZIfaCBz$O05eC0DX+x{V`dge=P-m~g(4|B)$CS3!oP z3MfodTokaoJLPITjh&q$`pkUDs!9KiPkB7IYICeub&!AEX#_1YGdp_bvCN~BhAC=Z z$$XY?ydVyL$rgwwPME>Mra##WTlyc_^>X$w5XaQ&VVOU=t=`lK|C{=(smontO_yR> zD+LJ*%pSO7FCClRS8M<-LA5Y{bw~iRSLH8dr}R)m*=h}1ne%Eb{|Sajk%EqNdIQ*Q zL4Zd+AV^=1HKge{8FB`)h4N|2r%d_%{g)z$JYyaIq+KsKc6a&L)N$GcFms@+FHTEw zYDQdT9g-IAcR1gk{R^_V(TsB{mIO=7E)#S9m~%^rulaskxGQTA-J)prE0+OFLA76w zDx@dq<935iPxwJ>>Rou`+v@;2oep!U@YpP0>29ZQmAjnbM~cqfi6PA8GO_(xO9|#5_!5? zE4|z+5`3gyr2oMhZ2l|JK9B0lvD}rulGdJ9RyJ00n`1|oqe;mUQm6+O(qnvwql zB2zj`+kwQrfC@026p&*2>Wy2e`6x_LJ%2{7M)(>OyDq&y%J~WAYn4k#AWv z)A<({te@HPFl!LcG8aR2Io8lJPAmk;s`u6jRJ^t5Yuc>#zm9=tSXk2SO{2`(nWgVz zl^1cq^j~EdE+fol=XK>#Tnn!mhvek_2`M9>P|sk*&NAT&#B1q$EUs@($Xdq?s@~V-$s`iAzA|)!0N_} z9i1nv$lW)!ZVtK_FDikt+@INu?T{g|HxIc^z5bz@%A#VAz~@eJ_^+pUv6VTs>=v24 zm)*TrfC})jFXb*nE0I5M^+~(Y*j)tc>zJ#5z$R{V9Wz1L3);BL(SsWq^&;_@V96@q zFc$QMd9LVZUkTYZ69^!IXF<5j)Y$#87Es~Feu&!K;fDG5Ia0&e3TfXGc_p&n6XciP2maBNA>2_KEpjT*$USkQ?3^tzeM zx&J0C36s}1VZw4Ma5Fy{?o>s~29RoZ%G6A(7M#`ulHv!PEQ*WY+~1EV53U#4yZ>gw zeH?{&aJk+ngoSd_02GkZQ8juC z&apgZ=-!jW=2c-!$ff2^=Pc#lsu2YLS^Cow&39_17u+r>TwyTfGdcMGmy>U3wNDPS$I3sDdXzLw=*jn!3yySc4sQwTX-C( zS=-5QdV%QoarEE~fvF zQg;{Gl#lkUyJM`kS4cFmn_43XS>c%)$g>Ji%Sj{jB$6JnP5YgYD6CGp69Fu$<@|Uj zp0RC3;%0^@IN)*IBIEC#fMdt8n|C6PRleq@s~s;tEREcS<*2BO?;4xkD^Y|y;r2?-F~#!Nns?cN+A*T@z z5IbVu3@XQDteO7niItIUPFCIx;LJ*{9h*B(Jf1s2GWX+DotnK*25EPaA0hMKu7151 z{$?Bbiz*uHt4GW&_(l4L#ypobWQG17CI`#NyOSo1(ym-`DW+X6;8WY~ z!LgOx8&e!l2QrP>o+0?*PATN5 z>LP&i&Lyb8ISAk-PZiF-v$Gk)XbjO~1bug-+D~h?NvIN}BPXRm$Bqh;>dXhgzp7S0fapmm z%zX3%WAhIcE9p)H4Z+X=#x{h!i3J%p-AGK+ayQ{8G9E+UWV5`OXtA3~7YCeXvp~qH z$7>L#+21;%%U^7ExHT&z?^8h2E6hNfKOtO%sYJt$u{$DPHqcU zcsosQ-L=~x^32rD;xXo15^C8P^hj*Co6XUzpCb9K2CF?ezn7XcF9Vg0NZU*3s@gFI zEhkl%g>Vn6#qv|)!=`e#$yW6Ti&0lvt>dvP{kN$g#9ni{m${fZ;ioZ0uK?-uQ;P|) zs%59B-ZVA1fq1tJ#_lviy$K+y%~N%&JmqkXqZ=4|CTY6-yv9UM-_F=pubp|$sU-&< z)xw9zW)b!s|FGBB|r$h zFttHxJoYkC?OYvsaVM5H_gA}4d@F(vmZ{y;Nm8di?bcS{aqv|qi}|l^bL#UcoC?{K zFKCGLN3>qFIhf{M3HJ7@g^!x?Oq-vq%8LMFvh+F)FvOugyQ(M^C_pyTt?(=mN4j!U zVAtcLW?W^TKY8U5RFe<7K8iH33LxClKVSnimLY)$Ly7W268GzuV0yy?l z*_=@JnSW(wbQRnDn_sr6QGyzA8u7oR8_`$N`(FjlE{>!eyHS(zl#Q&}3Igs_QcE@> zsByK9w_TnF8OeyOb!pDXfl%;^i4{L_SVEasAAYOaG_#g;?*W`br?p$Bj!MEz0Ij(VBGXY3e~2H|xr=hMMz)ToW!{ zIjsaiY!^e)8%WexDYw>nN6;azubJ8WJbYraY_n|@=S4RoSFn5-^cvFu@>W0Asn5tl zd0+G2Oj|P$KPT16tIb_MJMQsTP>VyqE<2v6aX~Yuz~fXqKqnl01jvszFm`&)QT!({ zQvg^MdvC8Wp>bJSMn0Zm`d@_ForYkEEleCbIPiHU1m8qovEPj;U#XSk$fIbs|7|G! znwD*Sa;#!Qkt}06XoYFTr^n{^C3a42tU^OW{FSAMmSaJN<%E?_qY{2K`Yf~1rN3ez zU#I=o>$)@XhUs8V`~?QbZ&CY=sVxi0`M*1@a-!hC7D|@LNl;arhcxXb=r}`$d@8FS zj6F0{*iBQr06AM5g617i{oM64_X7tfh3R7$Jfnc@!YQi0xmnw(<(n~+lRIq!Ww${* zYB1rt88($RBLu_hwaq9lG}Wrq5*8xvAo|>)XY3Aq5xD7KkgUcO6jEqH$_96J#j|u- z5;Ec%>7~3wlTaoom2ZNXwJhb`X&1m}>(6I&#;EM1I$~OGhbI6zA>ivTAkb>NaLb*T zV0xOBR}aK?r#jd5HCv!#{3F(Lws+`t7GrMaw!FxjhE%N?@Rla>Z<$ayupM(wPo=jE zS)OCM4Kb`Xpd>v;YXYlJvMk(+bqT5Cw=(M`9CxPzEoxiNp_#3$ElHE^GzldPg>@LQ zou<49pyt$^AR;6r4K>KQG~fq6)3{id&WwwqMT(m?mpw;_#sw?SVfTdP?v$!2iP$}F z6cLi!wdRkwG_>>%^x>~DO@Kx89bvv6J-%m4U+xuF#(0%hOI|QWTE?u+@3KLe%h%QY z&m%rVYWwpzCMo7lG1awg>`=aPL8CG%q#E)nu0If=)x2)?{B3A+Uai?CgJoLPD;&j_ z=@b~N?-)f4#L3{T*rgXJ&&GxqkR=aaftQgC>x*pzuFmsn#S0?NR4C9Ss=WW_X`o1v z3Gx~fSWnI3dGgBQ)I6Ss-*b4-_gA(77kOmyQXokD6#);aGs$N5maJ~?K$YP)m&eVZ zl#`OR1~hv@6w!fD^;IHX-u1t)buY`_`Wf%ntHuA}^efi@wfv14FWzQMVYxy{-BN}N z?6xd}b&z)z^G;u*=<0u*S4N1mj4$4F>3o{@T;R7ZK2mTKXa!4S!&BH2oSz?4L*;IE!fwgeS3BWH2lABF>3-A|%4f z&e(_bj`0PXV;HzT?dEtkE zo&5x1sZE@|#9Mezm=Ja`#px|gPsR|o_j@c)nIa<;H3UM$d)s!&vaeB%gN#swg@M1J z&qM09zafMv0a3OxESLniidr&>Ncw3tDfBcrH~-T%AwjqX`(>NYB+@zDK!q}Z82IGG zf9nt;P@zcpBi)h+jJF7l4?Tum(cgRxG762{$zQ_+fe!hpYw*%HJl2>eByJ7Uct#74 zrKY_;Hm^@gyHkp`%M_@$Nw|DyAKKwbL%7CNC!*XJaUisk2FG_(vRdQy5;@NN23D0e zx$FK71e2AiHb2}K(hTUVwy8kCB9>Z?d#KI7lfb9R@?>*CHPU8jZ;!D2c!vgH#SRe-FrmgbQ*mP!T|xjelEqm;VPk?rC`@ z_Rs*yfU0X4ia2Q?Xn7`^U5#}IGQeoM*4jGoHi|(D?BRS1#mK1@Z;f@gXUK6C`7W*p9wv5ECs(VpyaF%%Jm&Y*h-rJ9 zauG5@6EyoZR%?~nGG6N%Xf;4m}Z&bVCDnXvG=mX z-RuN)J_F5bhNw`scU};xMO~D1@G63DhR*BwF+2zdX=W;|_3*Ut4+sR!=;3XA&d^?_ z=hhNL2MkXrU}U8=_)q2vX*KF(q$yE=Q$uzJ-{QooLJ$@Q-x2qm57h(aF^drZegUFJTD%7zf zQvZ8|A~DtX9;G3gl-8r_5MXiba%azg3yglKnxpP8c{TR+2EuL5qjq}rw{qlLeefQE zx~QEyjeuYc3XTfAk8?&73}-_SD+aMRwDgv7L3%3ZiuXY*rbgdq8XR8Wp6%CiCRX|W zK?I9vnusugX5~=B7*;^yhdJSoU;q-B1lGnhQqxxn!2P0dT4~n&LqZ68VlU}G;2QQp zQxnl_238%J#@}apR#>l1kKT2l=Q}ZCGS=uCcG-npNXP9uRR#oF30*+>Yw+l(!S?}} zAw2ZGiu+ocK}jDIcR(1zbooJxlm8z8C32@}FemyUHylFuaY)&i3XsBOM#j;ls>qz` z{HKiLT|i6Cx($-sQT$NE)YYT4>_6e%cu z8T-^BjLmS~Xv>qOHMv=QMti-;B>&d|2vj?qN2ww1=U@D=MgLzooFp&ZsX|w#F20g^ zT3!#jdUuK@Rnxx_+fYO8@mg(tx!*d<;B+?8l9!f5I83B4!!ps>z&?f+t;wdX9%(El zr8uW0r_(!ZIu&`B0HsVrX97#G)}c1{VTuYyM8O|o^Gd4eKPW?q%8YdWLk@=!$eGqp zP7)xr=%+nfJt;DVp=@JH*V>ok%`MY`WC0wbsy?vMwUwLkEj~P9nhJ#HZuJc9Yq1|@ z(ML?alnA;)+fwT{v*nAnoHWk=riGO`E98wHWSN}{_e1j|ZM99eZuRsZ zf(=rm`&k{z-(<<2uf8U0uD7~SGg6Nd3oeic)Uqavy>kC8R(wf2wenIcrA8&&9}U%O%w#&6Z4-?`*c1EI-&%Z>?ZM(tq2CW)Fd5v&23f>$T>03OC(pq(@?h^LfSG z=o&BRN9Womw7kz&PnP14NfzDeVN>z>eph_MoIrNtGGxzDQ1J&P4?~5#R{V%8{fvA5!O=rCyE@Y&p zElA@|V&-#CYp!n)usCnCr#0UjKHR2OcK%k+=U8w^usV#`TZc5J=BtO z^!$->mQ+)Gorb||)il4ouOOE;a=hr**LwrqeEyc1KiO*eFv)juH>tzHu zChP-rJp}#43(l)FZ}kMba6u5YF%6=Q1>{C#e@HFf%V>yRi4IeX8soh}Bbi20JLruq zF6}K=Z(k6WMqC&;4QI(SjV)=RbVZ%P4_|JX+Vv3NFdpz(9n5}>(w;9%3HDyJKsq)# zw_2ZO3g*OCS{PDiw!)HrwVEIA;C!2DYMV}fahU5)lSs2I ztAo?6!`sV?>hJw9&3;#yj!A-4(xToSatN-1FJU$h*b1BM-s&l!Od%l^TlCtnF$r~i zn{}LT2r425lAR}epE3r~o%~_-WSjLd5NX=Wn%h-w(Df-yI20-`qZFFbw6E1YFCEZq&h?QAexx8DeVGw>| z##=0IrJIe?p+A!cX{D1XM7LN}XS<|Z&T`H`=bcoA=7Jz-wA(tK5}V3*P1`jKF!SAk z@_u+o5m|X<&PoQ-2!8@vS9Ech71+mOhw;biZA%~H1Mbd|^+Pc3P8yj7D)vnkLx}0F z3;8Sdv5xVTsZtV|*6JzdvaRG&kgRIzK+eN>61K?(f$zUNV2;QE5q=O<5*=2kv+A;f z0zei?wfFYqcn@R6C&Cwf+*ORd`TXdP4j98IOzhUMS}?=vo;HGd#16KJ&BoXiru?Jx z$7Z^5D}s-M+aMCVD{dShKh#%3Ukwy(VPtTMlCvnyjrJ{jZS_>J#*z8D!=UVRKd}?3 zD16K@!uxLZ8(-QLuS!wJ!u)7xz*!A=$N*eiIfIa)BZ3;z5`ZQ z_daakTw&PaaGkB#avfpF4x{G%ZOc%=`(=<=>^?<}1<$_42y$P?*U#JPi4neyNCEqF zY66tSZj?=4bru33Byy)RfsnEKrqSq)Q1;l6HM@6W->D_X!PzHp?*t!dmG=&g||+MtHlJ-=-36Euc5#Z8*H$#$ zD-Icf6`|`3V#^r-ct%{_Tk1+0!1}t06Fva##x+(KX=2D8H`NnH0%M|U-EBkoI44Eb zDPe1Fx3~#+a)rQxYB3BfxEDQMQPJNrn8u*WO&rYz^_l*Iwt8e7g^S0Oi0{-v+6jGh zi$m^14F=W4JT?0lsN4IjgV2gCeMm!8H66fDM9n+E>RlxMIfmFbrV&sdfJ}`kUzZC# z{|o)a^m9t*0Be4G6{&J3E_$XfFGC`u$weOwg?Rl~kH*A#(wWF?PMtIx@Q8}#huanS z=@wJ%PE&?MoyI5h;(Gx&c$DUWn4;$K!$c}(HO*09IM6x(y&+ENohCqLkFr%UOf_+X z80G^Jn7A>_LQ1zjdDQY=YnB&*7v{(o&FP(Wi1KR59PCUAmL~P+)fi9CiTZ*rvze^N zetPF@xCIVkq{rMj=^WF6;as9=_UF!&Sy(-I`8lhA$QzqOw9dC(JWx?Ga!5ZI3%rc}>dYyLbDYIlmx28;&HmiLot z*<2_a`V^EsTGL-{!%=t5B|MItIJFJW@uKECXx^JS*3gs5PqnBY|2=WMWawz)44z^C z;!ok=^!D1jBx68r=_jO095c1e)YoeY**_1@l2ME2S>3+kmnddVgiXe5_4!}h;v^2o zxF3g+R_({wK2%?x!N&%V!a-@z{~6oLWIuS0LW^ z^L3blpENOnCyr!&RTD(V1-Z{`^^_z}YS{)Ycp+1=pRU(U4N3sH<6!L=y5^$x z@|FIqjL=V>&x?p!Aup{;cn)?pS9N}yW#0)5EGeqy+mujt4FS(0|-T8idR8Q%6)j=%sc zL9CCR+JrQdLR2&A=tB|JVOo>ZV=DMMaTb);ZYyytY83?^buEREi%o}GbLUh}n%Yzz zEZix$SZc_`*51YcMb{7`2_Q3?PVEyY(XOmgg-;cytN7op^Y=tSNV*vQ%+zM3i;P+m zk*S-n+Hr9ClSnxNRsD=6utds1msk`}a3HadVI9Um7m(t|8N1OM{5T;G#7vPPadQg@ zCulEsoNiCg)1+NCWTJ+e(gN=gsA|f~4v@Vds*?s5+m4}d0`o4&OUxyFPN9@q`f-f! z_~+@;=nV1m%8y&K=Y$(dS1<$a_|bICVRFdgFm(fC=f=c2LYXsgC=lXeTO5t0$Nn`(lze&MlmRF z1-Qs>NS%GSbt#cKcSW`0zf~)oBo{b(h^Zd z2LQx@kwpNMQd=l_M5VzDhfu@PZX~GsIhukDdWf&pvUSQMca6H`l~6@a{|6T_MTlUb z2>)fxpCtryrz8rN{iH2Ii_u3A_n%M`A#V}Fd~_u{3_owiTHZAO$UL2>x!iBnd=kh# z%B5%59)We}SC1TFaVK5_`509VK>A@w&m{POHNQu6)14w9SAeLZZo`^8DG197_o3r{#2BMI#IuY0aaWK861aeZmTLYoF&L!W4^697Gu}+G8eS z%Kx*~gWZ9yx&cxDK*6@}MV;pjft@y@;nCtA-tuQn*R7>55I$q|f?qO9*>W_(1SkVM z3o%;5*k~bg;!8D=>BzWrKZkk8$l{3msu(LreLO(3tNO^LOGggi1D%v=U|$+gCWR6W zsf6&@+#fs|n#ReF!SZ7PZH8h zU{&3z;*vGljxoR(k|HeaeG+-Vp@}inNAaMNc1GFHB4eM{Gn*7a?{V?W%*GAP+b7XM zC-w8cjmpq5I$m0S45&zikvq|Bx@h?r5-G0vMBS4f+7}+h_o10|H#7WS=n0bN$6Yk0 ze$>vEzJVysvlbOa`YP(os2#^JX&wbe_Wy~6)Q8z#iCV{a2k7_E{K$~{CRyzweC||H zD?SA|sxYxIC}O1v9dv;d18bXr)lXSbF9y$+?5}geG-StX6y)Zs!~1 zYuw?s4p1a`-XCn76cOb>u*GcIA*D>X%uzwbNb{9>)~rDI(**RWb=-unL;pix3AOxx zpm$2!Wfb3@r7WT81bmD;B+~UkDF+oX0jd^Z&^HlM_`BS*p#y%zdyvtUY4yWlhME~=J%hPEQ=On$mT z->4Hs;7RgaU;kAIO2}LOrZGr!B5|z7w?X8aQ!7cua;>6#?drfUvL;K(_-;y;$TwZ+ zt&hJs&YIN~Arz8L^SAzMoTQ1}+X7a97D2;D>|8YZtXC2HNsCMJLFNpBPD zUxH~(;4QwTg;B38r<`7rycB@OzhzeETIdBDcq*oFmOXpTywZCDt5CPMSB`}o4{c-W zl;ee{4cH9Vu+dA~OO6L)LBpMf>A+BhugT2y3132L&1X$~E%3p=qd%*y+tSY>gG1jV zs*nQgeEuw=IVu0kWs}Q3M;6A#*YsWW>Sr0GGjuzFK&=Q?neP&)E!8NC`61>x;d3;} z?8fJ)TU8hH)E-|t6|%e<{TvZ+|M%?3viKG37_{?$XKFdYrlK}|&YCr=3UKZep=ju> zqH)Y$LRo+#`JEaZ-bvcl3{LY>`Y(LPkbb`tQ9>$D?53~0+WC2)j;pp4fLfY#r+&d2 zivuKy@9LiPN{HQ2Uy+8hbd+nTCQS^HpVy@ADf4gtZi+-{c2F0YHq5_yLsLCXHRlVM zM4A@;OE3;^b5~!gPWu9@NF}xU3-GW66^oi-gcHI(?;v<t_aR+IoJd_WX)@;fDwXwd5;SZ+ihyia;vv zZh~x9n!aKku|R;Ik{ZaoYfCcNm(_38b|T^ewNBJF=LC65sbwePh=+x5uGIg3ZsC+^ z?euX{FAwQ(O&MbJiQ@PG`eSgeJXfQ6K|5~#sY3rqI0VAtMHShp08p-f&iQNF`Qs) z5tujIvhEF^Vgw^l_~ur=nWM$vtJas1r1n8X2=UcXd~1-7O0+Tf6WxZsZU`W5Tkzn_ z5V$*O7xr|k@j+`~S`o?coT{r<{xs?fx|AwQt1PLC(8-04Ef8c_L<-f{pG`wngc)g` z^-Uz-z;46wysKBIch)6OLi|gbfH1i)LP00$FN55!QGegptYfB$o+m_1i4VC-M#NNK z$Upf*Q4&U*rx877$7W7<2}Qr!@-_Nmn*Hni46AwaGp?3=oe8lj3{5W6GpenQ!VNDo z?aLe!gcD^9M81ok0DT5?Ux!sWVO96++*0h3sCI+o2$lmNAP5 zpbND!9drKs*Q44#X!DVG!7)yIBkI}&Q%%tZvJI;32@uYluG`hq&yYl*n;nJHgA|Xt zIub}ErD;7$K|M}RoPw1Ag7nYrj361(QQmM~Q@Y|H9Ru!3sMcWE(dK#;|o=Ch1Ac@u!5 zS)2wGsTbyr%w+CIcl7Ov0efT8=yi7_U9Zy8P>@LFC?C|4%W@XNz0VS^8@3Gbok8iAz?^<8%jq zRqrtU3*$ZqeuMO;jeg4|v8U1)HCf`7_VrwBgbw=u9~Ah7ZDD`T9MlECN)wH#s+N8q z<_w);knUJoZlt<}aKAPq^OeK(^} zVCaxl^?lOyN-6Lz{K}9EHyH#lCr$Fd9jy__$y(BiAuLTot>dRt2pv}SeW zXs&_DX0wIdtq_J0>VqG` zbXT7Tio|Yh2cDY7Go0l{qBSI1=o{m0Km>tUh2X#Q_ zN8+l0HhiuzPk{tlkO3s_2mFx^Va}w8PY_~$NOG9y{Sgzrq66+UpqhS6TN8*{7!>q` zY2r+Vz0{8w3eL^sI$~8Rm)n$tHB#@*Ee~l@Ey|U2>ClUCdIx@-h znwSrFnmiYk`K3+mI5>}>;loK%&GjJZl z%T0}H<7rSdqjpL|0y}~9Pqh>-{;4&0fyk0Om9Q9%gq8P6$YPs$oT<#TkN%V`MzM>S zh=l-+Y2ZR)7}d0nA!Uw#$NA6+!1tfder`Wi+=*G!(^-6l$)|&HOx++qOj(=`hT|6z zzHz~6^MzX5X11iU<miP-<0|zS zn`|Ft%Uy~%D8E8m8qweBz~dxL;h7-YPidm#GYJNTyzW#|ODQoe_d9I=?~U! z0DaEnTv!Z&E2bYAeohCST2iAa_Va+~S+WHedB{_EP$Z8#V%Zt$he}zpIAkhWdgLvo zpnhJQKP9hT>_a7Amit=Q2G@8|#&fu9>VFSpJ;cN>9A{6jnqFdG`iW^X*E!y)i}lbCEtW*zgq8`q3V59Yap95fKwl1wMTtK3-fype3D6O zwJi;D!3N|eYmn+I4A8$Ex)N2Iisp#bB@SqiT&kzl`ODE|y|RwJ zv|qYWR^e8!5~2JRb|85*;Iegu)tctZHMBGR!vqa9o=_`>4IQ;}%A41nf%G2CCjIL=R=8{ns+|p!VKQ|R&Vd{)j03VrdAbj z6SpEcmuueXV6k|e0j{-j1?sW}951u2-D;GrfF0OPBXJe@HC>_gzeX}cH`-0aSHOOn z7&7gP=?Gp|2VwB$8j9m;&9BAT@D^wDYh)#&nl7M8c18Wxn$FPYEv$~_$0w{CRGW~1_TaU3AcO{KwLF6;d9JdzI^=IQ2n51^ zVz~$cP3U@oaR8Qq)VKyp1%HDeRY6vKa%=Kxyuod_!mBhf^+b&=o8I)5HbtU2f;5Pj zGlgVaJi|rL5=@c~f?96$7&LGRH3Z(A+VetYS@4G!63k2>HgP1dF;$_UjvVbxF7jy@ zZ|Kja`}uJiL-IZO-PFt=vpGns5xmtt^(7k6m2#C1Q(_7kdi4&dK;cT5qw=F>tE2(oraKknUSst;bq!b zcOpl0)CrQ2Rm*-W?i*zo~ov!rn#BFvQ82&9fipd(*RaD`3bevO<{0Z5ckVKUEE zo{3-gZ$S&B&+v6MlhR&vfnRaVnvqZa2?v*Wd7!GB1L^A@@=bRc*_c|B6?Xs@*oiE5 zf}I2_nD@=VrSSD;-nViwE(w*1U2i;pUl7ZkLNSt<%ElCd%!d6cw?g!}AVlb^0<$wx z3d59L4UTMD@s2}7Gnb`c9-17>YrOSsp_i(k{J}b)Q+jr%B;?XKcKGs8IIiyh1KcQL zB6Mt@!{+$u(J!*bDD;o;G-d38aEAX+{3FH+vt-H_E+;?|XmxpC1qy11VH*J1Afle3 z#v+j|cgmtI#fhRjOaC7RjVVsnsCY}_cTf=(AG}eMIZ(Qc16?R4&ixV?QBi9yA#g*@ z%(e@$Jj77%T_XG4|D^U^$$s|vLYbs$}V*Bo132G36t4mqJWt=q{xaN~*zbb=Wj~ zo0d$m!I;JSrRa#-eyNOU#Jz~vcj;|E&403GItU>uxV&h==use!MUNrP9FqAHlz~VN zT;9wzcBRTSTRk}pTS+%4d#a?ptM+H3VB2N%nNtfd6T3tacbdGWriL;z+Uuxn7JfCR z%&od#eN@YaHITc3UA1>gjQ7fA$j1n`3`2z6ow}s)J9iog1Mxgj_#I+g&$yhTVYT{l zHqd0qDc-(oXQ@FG#P`G53A)@qNW2^u!=0t?&Rk=B_MEpu-qnc zhYdjlU;#}ehPu<@{9E{_w(v50($&nc>wjrF!ZUf&q{u^C6|kKYQ}eE5%*i3U5sGiDjF+wEesi^kb^&Dk$X{(Uj8H?%YicuB+-yQOZdJYq3;w<%p?V zXV+79y$Z|!cY^{&O!&??qBl@~)Sn06d6n!cx?A@WKb>9UYi)rE-^fDt2vSD3+N0cp zJ)^lHDT_pMfz=EiofNF~qQ^2-XlIWZxL(PBGqd0n<^tm!xMfw>YMEto0jry71h(6( z-cmV6QRXC9Bi+!*C{PvvrHP5P8lYTgy-$6(T6T=wR|iYlWrX`@C>|YgRN+>ZdMGnQ zhMt?fjrCJ7%?hmz|JswTHbT79ZRlW0k96-fO|=vXIE8!ZZk^imYNEiXT6ncJ_ZXe! zP=??BbyFeAQzhPzC&gp;pegqlNp1}TW|EANb@mB>H3St>fM-2U25dpqe~$)RPtq>9 z232O^{2Hsfz2AjGj(Yv->}#N3M2g#Ux)#N~BSyru8A~ePwPZmJP2-*j_))hf>g`1}_k~9qp$XCM^DpvNJ|v1PT3Qf=2HR8G5kZ$K(dv7uX(HFVsYz zFr~f8&9)JUk0Ps2$e84t*F&!AeY&rG_qzk}-$YmU*IRU;Ppi@E8PH_aw(B8(RyF0J z%j6?sgy!UF!}GL(_sFt^<$eeg_rR`=gdRuA#&*r0TwilxX8-tuxWOl7K6InBohsS1 zNZ*Mlj-qv{=LYi2c79*vE@<>L(oQ>#X%g~i_gEu45`66qAQ4xO+<>uS`sfBcQTQ36 z(_&3KFlCEwq))id|Z=pW(&{^LV>cbrLQSib0;j4uTZI;o2Xn; zi*I5tQW2Ua0J|~8AJ>g)shm_RsnHp2AbqarP=+99`%Ts?Uk2K0d^%dQe=$Ro=z85w z7bDM|(ll7*PlhlNq=P#Y*1);)!=mr7v;&D=eKR=_nH4(gW>!lQ4Q)gn5;9Bu znByx0Bb1T>8+#${wPx+z|0tBOOh>74O~=$N1QP6?y#>LEs#|V>A{^`E$?Jd6HZJ9R zvA}T7Kc@D&730G9gm2a1*i!jnY*EAkmhNXDgZAXdbhG*fP|KF-(*1Tz2@0hkG#3u; zc^liV`Wq-Y00Ru&^!jJOX_SECHe?A=Hu{zx!%`xnY>XnGDDt)2G(hbIv@-aZDb-p) zE3;rcxWSI|EhVwN7Cm zJ3eF~nhr%OITLd`^hl`Xw<9eA0;fA}XX2x(cHC}t?+?? z8rG89beo>dzVvRoDX3BT8CS2}Z5`2?0%4Jd>;&{6ApzEX}R(A@3UA{8n z&1Qp}`IcDlFWk_up3Ol>jK^3}F?dQ`Q@0->aMEsMzE2;<5hK7yYwiJzhl~&e;t06F z&BE|HgmO?lvJMk2E^QKLr&oZ3$n7|^35vyGP3;~KFRI1&V14o^tsEl?xI9o=6VlVOw?2tAd4ybSm)g^2UsUeMLiq&j6*4~l&Ap@{(v=mns}=yk%Nx) ziuC^!PMl}CB)x?oMYJp{#>5V%@Dxsp(28LgCIG9~q27GJnm$dKRy8%Wv(DQ*>WMs# zP2}Z(i|I~VMYUwTb=)GUJG`6MF+!Q5h;KuxkZ(Xx<@JPRh=5TU{gGZAie_x(KG=i0 zFnf9*i*R939NbL|L}*xqJwjqk8YNX}+WP6<;VpJEZ#fh=iXgC$l=9w5Cq5jauOt{b63&(H-9BmjQqKT-DW02f_N~$)CCuW%}jA!bv zCQfJxKaCRo75n&{`oaclUo~u5LCAdrg_?3|ll%-zbH;0Uqtv_YR!%;?XmdUL9Pv?E zbeKZyuik)|P5xCo6s9-S$_>`+1)=As!W{?h-02UxQPKZbBwrsiR#n<*54|w89%~j4 zgF;>%D?cH1%EJs`OD;A_E8!QBPx2(5OlrtQ?Z+QRLYUHd7%3VN9PVSgMdvu)FS1>G zEdRE;$0`8tt{!XIxOH4-qyd!)s@XH7<#A9izGUdyQ`}0#4_!jgwlOhMdIWDUOj~gw z6${j|W#)`Wkb@Wvy3ZH`m3?|{9UNL!2kn~N^gDz>-zFVGTi34ae^rZI<(~*E$;8`5x-0-smQi#Nat68V{ zDNVCf`4?zUWgQ{6B(|{HMBlL&^<-?H!;7SgHcmqc=xtl+sOlRhzR77~iqObz+2*Z= z4y|dR83CyZlCQnNQ_P4^IYh7e8AU?yJ<*pmhja*`)ZZ9q zfoE;Ht2+=Ut8NI}qm$U1#!|hi`UGIJd{_eP*eka9WnW;}LRqHbHsMw34a*mgyc15b z4z@$t^8Jd=BDZ?*f zIbTQKp+;khzd`G2@p`sh`Ck*{+n++eiIwCi8vl1UrPYF`z@wy=JOwLh#|#dG+mS*V z9X2)0WJMVbCa)-Y;{No+vyh_|LrzV-NRy>hguX(ri?Zqu6nF>TFfSLBXf{d{gZwq7 z6tKDzcgj3%aU(iy)sXN?Yy}qwthOn~m+t`=HwSG%7l&PI`tR zj)3b0wE1zM9lK<~hUlr7*XRJdzV{c8(9(Yrxx)(kRar-wz+=^Pf+3KAywG+H* zOw|Td6K}D+u(jAF#zM!;Z`#Bxy~2tY4UCf^#$msgiN9&IvYSSeD)20#=vOPY$nq(h zE)LjH@4DahzkoBsGhmn@M4WB}B`)WFmMDos2+xXNp`-E+%|(6S+Gb)P`x28@R1X`3 z^~cVTK|c+|Ojcq7GfEM0F%q0I+p%&2DI;ij7TEO15NS93)avMTT_GJI6>E8 zjfjv$`=*RKb_-1u)G1rU=2WC{`5u_Mg>0|qUH$wr&zrWu1s#}G>gZuqZd!}J>(uA?>47c4oO%aBy{&nq zcLj}nz?ecli}4T0%U6`9|Dz7mu-dd0>k?P%4N7FnVK4RWq+Jx-**{V%RXY_R|rP z;t9WJ*9B&QF=n2*ap86J3sxrIbCL9In=?sj7vV~w0V{zu3&#v*?AMw*O;D)T+Tb%j zHl_vI5B^ie&qtS0w4yqt%nGaIxKpMka0~frSPOL!cTeekSj)ve2ZHbfNK_lhBrQaR ziu$_@Yo4&W)W^45GrLj^{2rg83Y{?^chUeFV5+Z>j}%5kz^Kjq-FBd5{&+hQpHW>e z@{>@D`SDh?;^|wzJ5w%^9jUQee+{HY9{KvCzXs*fZ*l0m)~Wvbla^5tGj|Hs$_PdL zufZiKz>MZg$ct!;J7odcV4+7(!!;FTOm<*1tp5Gi@mEk&+nthUgOS3-+qC+jgt$vS z#DWaI%t&eQ-&31T`8U{6o*L#o%Dd)eh>)AM!7+7hlmDt$VaMw$5*AP^tVZ9%^vO*| zf%3HHJjJ~?U@ggGtn&&jCDfU(K-H>REj1Et8=$(p^~Gjv@T64Vhs4v7-&($4`-U2> z)mACB;(gi(zlz0;v}rKpT8YT?da?d#8$9Lz)S+_fm-pP@=?4r6ty$}@icU{A_Igs? z@+y<`g+1!6NUaFua0XU%*xBD8xOtv&9)c9dJKJP}Nh^4+`8iL9-V)MFhazT^Ei^0s zhTZc|v&$6UN7y1GG00O?i*!JO!x2boV6F;1Qq6pA-3jc*RG%AMHw^snk)?*EFL} zdd>P`vwt6T<7o5n*Ce0dX5pLEDXNp?C!vT2 zu(U|axXIG-V*(DOki&|}lljv9_I%D$hN+MAb#ay!lqmu$fIh^|80~9S#U0OHS~T8@E5S=Q>p75{n6pw*W`esyk4E zIOE6&kpz~;*NOFG^f;oEqs_(? zR_iL(p22sgqL#l+M}GL5Qwu+U5OE0S*Ct~A zu*-@{7b6W_#T}rv4MA?>`4rAjIh3%N;;hPK$ed4W*!!F(BvySd>05tTd^#4=NpW># z6?#@QJ-z9m-AryLh8GqLBd@Ye=HPeOJ`mjCDK-#6n#m$8E-5r0aL@;k+CD%+21KO0 z_lQDV^BH$Am3RXlp8Wy)(<^(}!dQ5Z;XDMK5G}I zDp7ge(UU}1#$6)eAen-0_M9Tyz1sY~=lB{B$mv@8G6Mg<@O@+zb=I65s+hW|=+v+M zjvz5pbg5f~{)MCj)xv)vW4IdaVp}8Vkf?L2-Qfbl5hJ9^*%^K53X8fBbKDihINih? z59Z8W?ZaHA@83wQCWTXs-$7ca+dsX`h$YsMMujLrf;R38`!`-5kusp=-eQdf7dB2f zp>M}TK60oIw--{5U_=6}&M0=?NmC?lc6ZL@q56S-ib?KL`46E7p%1Ni`dwNFWQi3ZXau!=K0uZ-&=b6(gRPEj^9)qT2&sX;FIIqq+>#Xm6=LfuIw*KM`9Sh>uqG>#S?6lLrd*Jb3``i*mo8luD0L*RPP11{pTtEo?d&~ zf1b&&Si3g6Ip9;k=zh~Dzv2tSN5o*7aC#I|5 zz{EUt)bwZeQORqc39H8*pEyw6wsGQ8ReI~`PIdCeiTP^ir%!fY@Y3TG{B7ZHD}T@N z_dI{w_PN^W|XEs#{+?YVFYcmp^}TXZpIr ob)M@J*B7qmYQKCTAGslYLvigRBQJkC;4NL9S-baxFYgTef8nMri~s-t delta 73722 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

6DBq$~U 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 J9X11jNih%mT!$K+Fcj>_E%`#GF9PwVj)hTXLQ? zP*WBI5HJC891trU;AT)*!3`2(fXVRy*&;yP0F-M$$Ze0G&wZ3bez1?R8&zAcDU0p7R delta 179 zcmZpeVAe3fYy$@)bMB|aW^TrIZblGh0%B$$W&vVWAZ7z%b|B^eVoo6D+Rn|$EjiB` zs40s92$+C44u};Fa5E^Z;06gXz~p# Date: Mon, 27 Jul 2026 08:40:57 +0200 Subject: [PATCH 2/3] Revert #3342 --- .ci/run_examples.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/run_examples.py b/.ci/run_examples.py index a2229ab0b1e..3199696fd99 100644 --- a/.ci/run_examples.py +++ b/.ci/run_examples.py @@ -35,7 +35,7 @@ for subdirectory in subdirectories: subdir = Path(root) / subdirectory for file in subdir.glob("*.py"): - if ("08-python-operators" in str(file) or "12-fluids" in str(file)) and ( + if "08-python-operators" in str(file) and ( sys.platform == "linux" or server_version == "2027.1.0pre0" ): continue From 72436524e7999cd89c53e17e1fa69de6ae388200 Mon Sep 17 00:00:00 2001 From: Rafael Canton Date: Mon, 27 Jul 2026 09:22:38 +0200 Subject: [PATCH 3/3] BNot fixed yet --- .ci/run_examples.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/run_examples.py b/.ci/run_examples.py index 3199696fd99..a2229ab0b1e 100644 --- a/.ci/run_examples.py +++ b/.ci/run_examples.py @@ -35,7 +35,7 @@ for subdirectory in subdirectories: subdir = Path(root) / subdirectory for file in subdir.glob("*.py"): - if "08-python-operators" in str(file) and ( + if ("08-python-operators" in str(file) or "12-fluids" in str(file)) and ( sys.platform == "linux" or server_version == "2027.1.0pre0" ): continue