From b8cdc7a4a847562c815892b65cec756fb4da77c8 Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Fri, 31 May 2024 21:02:54 +0100 Subject: [PATCH 01/11] refactor unet model to build model and decode on instantiation. --- continunet/network/unet.py | 98 +++++++++++++++++++-------- continunet/tests/test_network_unet.py | 89 +++++++++++++----------- 2 files changed, 120 insertions(+), 67 deletions(-) diff --git a/continunet/network/unet.py b/continunet/network/unet.py index bfc338d..b6be882 100644 --- a/continunet/network/unet.py +++ b/continunet/network/unet.py @@ -21,15 +21,49 @@ class Unet: def __init__( self, - input_shape, - filters=16, - dropout=0.05, - batch_normalisation=True, - trained_model=None, - image=None, - layers=4, - output_activation="sigmoid", + input_shape: tuple, + filters: int = 16, + dropout: float = 0.05, + batch_normalisation: bool = True, + trained_model: str = None, + image: np.ndarray = None, + layers: int = 4, + output_activation: str = "sigmoid", + model: Model = None, + reconstructed: np.ndarray = None, + decode: bool = False, ): + """ + Initialise the UNet model. + + Parameters + ---------- + input_shape : tuple + The shape of the input image. + filters : int + The number of filters to use in the convolutional layers, default is 16. + dropout : float + The dropout rate, default is 0.05. + batch_normalisation : bool + Whether to use batch normalisation, default is True. + trained_model : str + The path to a trained model. + image : np.ndarray + The image to decode. Image must be 2D given as 4D numpy array, e.g. (1, 256, 256, 1). + Image must be grayscale, e.g. not (1, 256, 256, 3). Image array row columns must + be divisible by 2^layers, e.g. 256 % 2^4 == 0. + layers : int + The number of encoding and decoding layers, default is 4. + output_activation : str + The activation function for the output layer, either sigmoid or softmax. + Default is sigmoid. + model : keras.models.Model + A pre-built model, populated by the build_model method. + reconstructed : np.ndarray + The reconstructed image, created by the decode_image method. + decode : bool + Whether to decode an image on class instantiation, default is False. + """ self.input_shape = input_shape self.filters = filters self.dropout = dropout @@ -38,6 +72,29 @@ def __init__( self.image = image self.layers = layers self.output_activation = output_activation + self.model = model + self.reconstructed = reconstructed + self.decode = decode + + self.model = self.build_model() + + if self.decode: + if self.trained_model is None or self.image is None: + raise ValueError("Trained model and image arguments are required to decode image.") + if isinstance(self.image, np.ndarray) is False: + raise TypeError("Image must be a numpy array.") + if len(self.image.shape) != 4: + raise ValueError("Image must be 4D numpy array for example (1, 256, 256, 1).") + if self.image.shape[3] != 1: + raise ValueError("Input image must be grayscale.") + if ( + self.image.shape[0] % 2 ** self.layers != 0 + and self.image.shape[1] % 2 ** self.layers != 0 + ): + raise ValueError("Image shape should be divisible by 2^layers.") + + self.model = self.compile_model() + self.reconstructed = self.decode_image() def convolutional_block(self, input_tensor, filters, kernel_size=3): """Convolutional block for UNet.""" @@ -78,7 +135,7 @@ def build_model(self): input_image = Input(self.input_shape, name="img") current = input_image - # Encoder Path + # Encoding Path convolutional_tensors = [] for layer in range(self.layers): convolutional_tensor, current = self.encoding_block( @@ -91,7 +148,7 @@ def build_model(self): current, filters=self.filters * 2 ** self.layers ) - # Decoder Path + # Decoding Path current = latent_convolutional_tensor for layer in reversed(range(self.layers)): current = self.decoding_block( @@ -104,25 +161,12 @@ def build_model(self): def compile_model(self): """Compile the UNet model.""" - model = self.build_model() - model.compile( + self.model.compile( optimizer=Adam(), loss="binary_crossentropy", metrics=["accuracy", "iou_score"] ) - return model + return self.model def decode_image(self): """Returns images decoded by a trained model.""" - model = self.compile_model() - if self.trained_model is None or self.image is None: - raise ValueError("Trained model and image arguments are required to decode image.") - if isinstance(self.image, np.ndarray) is False: - raise TypeError("Image must be a numpy array.") - if len(self.image.shape) != 4: - raise ValueError("Image must be 4D numpy array for example (1, 256, 256, 1).") - if self.image.shape[3] != 1: - raise ValueError("Input image must be grayscale.") - if self.image.shape[0] % 256 != 0 and self.image.shape[1] % 256 != 0: - raise ValueError("Image shape should be divisible by 256.") - - model.load_weights(self.trained_model) - return model.predict(self.image) + self.model.load_weights(self.trained_model) + return self.model.predict(self.image) diff --git a/continunet/tests/test_network_unet.py b/continunet/tests/test_network_unet.py index 83b22f0..012aa61 100644 --- a/continunet/tests/test_network_unet.py +++ b/continunet/tests/test_network_unet.py @@ -12,33 +12,51 @@ class TestUnet: def test_build_model(self, input_shape): """Test the compile_model method""" + test_model = self.model(input_shape) - test_model = self.model(input_shape).build_model() - - assert test_model is not None - assert test_model.input_shape == (None, input_shape[0], input_shape[1], input_shape[2]) - assert test_model.output_shape == (None, input_shape[0], input_shape[1], input_shape[2]) - assert len(test_model.layers) == 49 + assert test_model.model.input_shape == ( + None, + input_shape[0], + input_shape[1], + input_shape[2], + ) + assert test_model.model.output_shape == ( + None, + input_shape[0], + input_shape[1], + input_shape[2], + ) + assert len(test_model.model.layers) == 49 def test_load_weights(self, trained_model, input_shape): """Test the load_weights method""" - test_model = self.model(input_shape).build_model() - test_model.load_weights(trained_model) + test_model = self.model(input_shape) + test_model.model.load_weights(trained_model) - assert test_model is not None - assert test_model.input_shape == (None, input_shape[0], input_shape[1], input_shape[2]) - assert test_model.output_shape == (None, input_shape[0], input_shape[1], input_shape[2]) - assert len(test_model.layers) == 49 - assert test_model.get_weights() is not None + assert test_model.model.input_shape == ( + None, + input_shape[0], + input_shape[1], + input_shape[2], + ) + assert test_model.model.output_shape == ( + None, + input_shape[0], + input_shape[1], + input_shape[2], + ) + assert len(test_model.model.layers) == 49 + assert test_model.model.get_weights() is not None def test_decode_image(self, grayscale_image, trained_model, input_shape): """Test the decode_image method""" - test_model = self.model(input_shape, image=grayscale_image, trained_model=trained_model) + test_model = self.model( + input_shape, image=grayscale_image, trained_model=trained_model, decode=True + ) - decoded_image = test_model.decode_image() - assert decoded_image is not None + decoded_image = test_model.reconstructed assert decoded_image.shape == (1, input_shape[0], input_shape[1], input_shape[2]) assert decoded_image.min() >= 0 @@ -46,46 +64,37 @@ def test_decode_image(self, grayscale_image, trained_model, input_shape): def test_decode_image_invalid_image_type(self, trained_model, input_shape): """Test the decode_image method with invalid image type""" - - test_model = self.model(input_shape, image="invalid", trained_model=trained_model) - with pytest.raises(TypeError): - test_model.decode_image() + self.model(input_shape, image="invalid", trained_model=trained_model, decode=True) def test_decode_image_invalid_input_shape( self, invalid_image, trained_model, invalid_image_input_shape ): """Test the decode_image method with invalid input shape""" - - test_model = self.model( - invalid_image_input_shape, image=invalid_image, trained_model=trained_model - ) - with pytest.raises(ValueError): - test_model.decode_image() + self.model( + invalid_image_input_shape, + image=invalid_image, + trained_model=trained_model, + decode=True, + ) def test_decode_image_no_trained_model(self, grayscale_image, grayscale_image_input_shape): """Test the decode_image method with no trained model""" - - test_model = self.model(grayscale_image_input_shape, image=grayscale_image) - with pytest.raises(ValueError): - test_model.decode_image() + self.model(grayscale_image_input_shape, image=grayscale_image, decode=True) def test_decode_image_no_image(self, trained_model, input_shape): """Test the decode_image method with no image""" - - test_model = self.model(input_shape, trained_model=trained_model) - with pytest.raises(ValueError): - test_model.decode_image() + self.model(input_shape, trained_model=trained_model, decode=True) def test_decode_image_colour_image(self, trained_model, colour_image, colour_image_input_shape): """Test the decode_image method with a colour image""" - - test_model = self.model( - colour_image_input_shape, image=colour_image, trained_model=trained_model - ) - with pytest.raises(ValueError): - test_model.decode_image() + self.model( + colour_image_input_shape, + image=colour_image, + trained_model=trained_model, + decode=True, + ) From 87ebe982169aa3201529b134dad863b0db4b326d Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Tue, 4 Jun 2024 10:35:52 +0100 Subject: [PATCH 02/11] add extract_sources method with gubbins to compile modules for source finding. --- continunet/__init__.py | 8 + continunet/example_image.fits | 903 +++++++++++++++++++++++ continunet/finder.py | 28 + continunet/{images => image}/__init__.py | 0 continunet/{images => image}/fits.py | 0 continunet/image/pre_processing.py | 31 + continunet/tests/test_images_fits.py | 2 +- 7 files changed, 971 insertions(+), 1 deletion(-) create mode 100644 continunet/example_image.fits create mode 100644 continunet/finder.py rename continunet/{images => image}/__init__.py (100%) rename continunet/{images => image}/fits.py (100%) create mode 100644 continunet/image/pre_processing.py diff --git a/continunet/__init__.py b/continunet/__init__.py index e69de29..32b2f3e 100644 --- a/continunet/__init__.py +++ b/continunet/__init__.py @@ -0,0 +1,8 @@ +"""ContinuNet package.""" + +from continunet.finder import Finder + + +def extract_sources(image, layers=4): + """Extract sources from a continuum image.""" + return Finder(image, layers).sources diff --git a/continunet/example_image.fits b/continunet/example_image.fits new file mode 100644 index 0000000..9c9914a --- /dev/null +++ b/continunet/example_image.fits @@ -0,0 +1,903 @@ +SIMPLE = T / BITPIX = -32 / NAXIS = 4 / NAXIS1 = 256 NAXIS2 = 256 NAXIS3 = 1 / NAXIS4 = 1 / EXTEND = T / BSCALE = 1.00000000000E+00 / BZERO = 0.00000000000E+00 / BLANK = -1 / BUNIT = 'JY/BEAM ' / DATE-OBS= '2000-01-01T12:00:00.0' / ISO-8601 time of observation CRPIX1 = -1529.0 / Pixel coordinate of reference point CDELT1 = -1.67847000000E-04 / [deg] Coordinate increment at reference point CRVAL1 = 0.00000000000E+00 / [deg] Coordinate value at reference point CTYPE1 = 'RA---SIN' / Right ascension, orthographic/synthesis projectCRPIX2 = -2124.0 / Pixel coordinate of reference point CDELT2 = 1.67847000000E-04 / [deg] Coordinate increment at reference point CRVAL2 = -3.00000000000E+01 / [deg] Coordinate value at reference point CTYPE2 = 'DEC--SIN' / Declination, orthographic/synthesis projection CRPIX3 = 1.00000000000E+00 / Pixel coordinate of reference point CDELT3 = 1.68000000000E+08 / [Hz] Coordinate increment at reference point CRVAL3 = 5.60000000000E+08 / [Hz] Coordinate value at reference point CTYPE3 = 'FREQ ' / Frequency (linear) CRPIX4 = 1.00000000000E+00 / Pixel coordinate of reference point CDELT4 = 1.00000000000E+00 / Coordinate increment at reference point CRVAL4 = 1.00000000000E+00 / Coordinate value at reference point CTYPE4 = 'STOKES ' / Coordinate type code LONPOLE = 1.80000000000E+02 / [deg] Native longitude of celestial pole LATPOLE = -3.00000000000E+01 / [deg] Native latitude of celestial pole PV1_1 = 0.00000000000E+00 / [deg] Native longitude of the reference point PV1_2 = 9.00000000000E+01 / [deg] Native latitude of the reference point PV2_1 = 0.00000000000E+00 / SIN projection parameter CELLSCAL= 'CONSTANT' / BMAJ = 4.16666676756E-04 / BMIN = 4.16666676756E-04 / EPOCH = 2.00000000000E+03 / HISTORY FITS (Flexible Image Transport System) format is defined in 'Astronomy HISTORY and Astrophysics', volume 376, page 359; bibcode 2001A&A...376..359H HISTORY CD1_1 = -0.000167847 / Degrees / Pixel HISTORY CD2_1 = 0.00000 / Degrees / Pixel HISTORY CD1_2 = -0.00000 / Degrees / Pixel HISTORY CD2_2 = 0.000167847 / Degrees / Pixel HISTORY RADESYS = 'FK5 ' / Reference frame HISTORY PUTAST: Oct 28 11:47:44 2018 World Coordinate System parameters written HISTORY FITS: Miriad fits: Revision 1.32, 2014/09/15 04:39:01 UTC HISTORY FITS: Executed on: 2018-11-07T07:24:38.0 HISTORY FITS: Command line inputs follow: HISTORY FITS: op=xyin HISTORY FITS: in=sky_tot_chall_2_560.fits HISTORY FITS: out=sky_AGNs_SFGs_chall_1b1 HISTORY PUTHD: Miriad PutHd: puthd: Revision 1.3, 2011/09/15 05:53:36 UTC HISTORY PUTHD: Executed on: 2018-11-07T07:25:08.0 HISTORY PUTHD: Command line inputs follow: HISTORY PUTHD: in=sky_AGNs_SFGs_chall_1b1/bunit HISTORY PUTHD: value=JY/PIXEL HISTORY PUTHD: Miriad PutHd: puthd: Revision 1.3, 2011/09/15 05:53:36 UTC HISTORY PUTHD: Executed on: 2018-11-07T07:25:08.0 HISTORY PUTHD: Command line inputs follow: HISTORY PUTHD: in=sky_AGNs_SFGs_chall_1b1/cdelt3 HISTORY PUTHD: value=0.168 HISTORY PUTHD: Miriad PutHd: puthd: Revision 1.3, 2011/09/15 05:53:36 UTC HISTORY PUTHD: Executed on: 2018-11-07T07:25:08.0 HISTORY PUTHD: Command line inputs follow: HISTORY PUTHD: in=sky_AGNs_SFGs_chall_1b1/crval3 HISTORY PUTHD: value=0.56 HISTORY CONVOL: Miriad convol: Revision 1.11, 2017/04/10 05:36:06 UTC HISTORY CONVOL: Executed on: 2018-11-07T07:28:17.0 HISTORY CONVOL: Command line inputs follow: HISTORY CONVOL: map=sky_AGNs_SFGs_chall_1b1 HISTORY CONVOL: fwhm=1.2 HISTORY CONVOL: out=sky_AGNs_SFGs_chall_1b1c HISTORY IMCOMB: Miriad imcomb: Revision 1.11, 2013/08/30 01:49:21 UTC HISTORY IMCOMB: Executed on: 2019-02-19T07:19:44.0 HISTORY IMCOMB: Command line inputs follow: HISTORY IMCOMB: in=sky_AGNs_SFGs_chall_1b1c,AGNcb1x,SFGcb1x HISTORY IMCOMB: options=nonormalise HISTORY IMCOMB: out=sky_chall_1b1ix HISTORY IMCOMB: Miriad imcomb: Revision 1.11, 2013/08/30 01:49:21 UTC HISTORY IMCOMB: Executed on: 2019-02-19T07:20:45.0 HISTORY IMCOMB: Command line inputs follow: HISTORY IMCOMB: in=sky_chall_1b1ix,PB_I_056_skyb HISTORY IMCOMB: out=sky_chall_1b1x HISTORY IMCOMB: options=multi,nonorm HISTORY IMCOMB: Miriad imcomb: Revision 1.11, 2013/08/30 01:49:21 UTC HISTORY IMCOMB: Executed on: 2019-02-19T07:26:49.0 HISTORY IMCOMB: Command line inputs follow: HISTORY IMCOMB: in=sky_chall_1b1x,sky_chall_1b1rdx HISTORY IMCOMB: options=subt,nonorm HISTORY IMCOMB: out=sky_chall_1b1pdx HISTORY CONVOL: Miriad convol: Revision 1.13, 2018/12/05 23:26:16 UTC HISTORY CONVOL: Executed on: 2019-02-19T07:34:02.0 HISTORY CONVOL: Command line inputs follow: HISTORY CONVOL: map=sky_chall_1b1pdx HISTORY CONVOL: fwhm=1.50 HISTORY CONVOL: options=final HISTORY CONVOL: out=sky_chall_1b1pdcx HISTORY IMCOMB: Miriad imcomb: Revision 1.11, 2013/08/30 01:49:21 UTC HISTORY IMCOMB: Executed on: 2019-02-19T07:35:16.0 HISTORY IMCOMB: Command line inputs follow: HISTORY IMCOMB: in=sky_chall_1b1pdcx,sky_chall_1b1rdcbx HISTORY IMCOMB: options=nonorm HISTORY IMCOMB: out=sky_chall_1b1cdx HISTORY IMCOMB: Miriad imcomb: Revision 1.11, 2013/08/30 01:49:21 UTC HISTORY IMCOMB: Executed on: 2019-02-19T07:36:18.0 HISTORY IMCOMB: Command line inputs follow: HISTORY IMCOMB: in=sky_chall_1b1cdx,ska1-mid.8hb1z0c.map HISTORY IMCOMB: options=nonormalise,relax HISTORY IMCOMB: out=sky_chall_1b1cdn8v3 HISTORY FITS: Miriad fits: fits: Revision 1.33, 2018/12/04 04:02:11 UTC HISTORY FITS: Executed on: 19FEB19:08:10:43.0 HISTORY FITS: Command line inputs follow: HISTORY FITS: op=xyout HISTORY FITS: in=sky_chall_1b1cdn8v3 HISTORY FITS: out=sky_chall_1b1cdn8v3.fits HISTORY FITS: NOTE: Use options=varwt if loading into Miriad ORIGIN = 'Miriad fits: Revision 1.33, 2018/12/04 04:02:11 UTC' / WCSAXES = 4 / Number of coordinate axes CUNIT1 = 'deg' / Units of coordinate increment and value CUNIT2 = 'deg' / Units of coordinate increment and value CUNIT3 = 'Hz' / Units of coordinate increment and value MJDREF = 0.0 / [d] MJD of fiducial time MJD-OBS = 51544.5 / [d] MJD of observation RADESYS = 'FK5' / Equatorial coordinate system EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates END 64x-7"66S5>5j6BZ:6Gq854WCoյN4664##=4{d4u;5uŵCK4V66%m65#6&,6@e6e6!5k58?:橶i)4S`[vKNX\,65˶jRn>6Jb6##b,xA45BN{- 4ڤ6ߕ666j>6A6VGRBD׶RZ5 65{5>6,6U/pcUFZR5 +c5E5򗁶]456n4 @ʵ:fiړztC4IY4l޶Oa +XoRO5;6y6Vɉ6KW66Y*5&&#HVD56%Q"6Z7(78V9Il99;,8{7 D4`䴦L6;78C7Q7]>7%A665̚<5wT6w$6֏6Ě6G4454_~65kᬶ}D 4,$`4G2Hl6 +86=Y6:%"6{5v5RD;j!6D6Q6ݴHŶ$04s6 赽 +Q[\ڶ!5|66D5#`~նX<7Uܴ5llO^53%4dc'ɦ+6U6685ak>Z5 M6# 05fHv6p5̓.@Ϫ5VV6;~5+H5UZP6=6z5q5ƥx5ѯ6To6w z42[iֹ57$6Ñh6&g6%y"E5Hrڴ#6B665^孶 +'Qt.%65\6x&5쁴̵~5Z62!)t4 @66ʻ6^X5 +5c6Yo6S"5˵Yvv L6uq6/y1%.%j\}P5s6 I66w3ApXj5p5o5 4ʒ55I5ϊ56/K5tԶ'ʓ ]6Y| 6Ƶ5yܤ3e5rhVs5\`8>4wOlW L6I566:U55hضP\Dc-п4(5q6`6U6˨5㶨"Ѷe̲-4 5> Ga8@5=W2B07-h76Ӷ4<06<6?ɗ5G5[ +45miL;+8p5A6"6:67c6QV<ᵿ6:s5S84Qsj<%64lj?6Z8x9vB9l9k9 769z55.67!7XKz7PQ7uV7?,/76/6'6.a6JT6z6pe5=4 5(n8Eµ_5ovG'MB48dH6؛6665;;5mR5Bx5gj6XY6h?#dow6c-5~5 *6+&.6Fh5 5p545$.J , +ju6m3˶S%o_5"62oV56lt56$ 6'5kʶW`1xصE655M56+5:w4\4Z5?D05J6v5UL5456Ci6ߓ66"ݶvZ6Y*D6y5!#h\:>(5Z5n5E6">6}6d5534"e6 B nm56#g5;|޶(h^4V4R9 K&*x4566R6|6Z 5c0ɪ6K61{D4%Qً5ⴱc9ܸ4N5y{5ݶDQ6b6RJ662ⶌ᏷bOSt5 A>4"52b56 7%6P&FԵW,6\[66E6i4Tu3m)Y5 ln4ް61C_bz,QV'Il W3*Nn5D66&v6j7W7 54݁5\$b55.5ݨ5Ct6u5_DyVl6$]616 7O7x7&;6W6٢6-6S6h6ה6 PGc'i6I54ζQ>547>6*!H_ yH6h6vg;Ѷ. vN?6'<8<~9Dۑ9k9!8 +7N6P6/ߞ6?6'M7,$7wT7?77i7Z7hq7)!66Xأ6y66X7~uPܵ\u5x4su6C +6х6h4p`H2E^! +}56R # +-\6a6pc566t6Pޕܡ6)5-55>$>5z5>;; kI!^ .4+ 6h6ĴD6;5O4fBԵqi4y6d=5^q嶄C&lX6(y6?5455C2-p‡%'WJ56= 4pMJ6:5n5o*6526 +6.ҏO56Bu5kܶhl5*'3`6|6 3j&L665$ZVYzY(86[75ZTb:7ҴN5|],A3_Ϊ52>5@^5^nTa 5u5bk>a 4J4ڶF[!66}9r.6F6o6j5} +34 +6'{5_V"bP6" 65 ׄ5Z6S64u൶0#6(h6C3֒66@]5h6cok6u>j9k̶NpA۶ R<4(]\4(6뙵25 66s66|m.65֡#2ˆ5t~6mX6$]6xG6 6*m%2 ? r_5; 6I66z467(a66Dn76p6H66C^>6p5Ŷ$76e66"V5˵ܢS?~5d6R6-0Yõȶ7C8ִD9@9H8`+6*6 f6367(7Kv77#7Ǽ717~7T73r46666&D5396>55(o@&붮*xͶ$/3ꇺ6g6#ي5J*)< [ߒm[) Vw6V6i5?&5#=6265Pj66=5Ktgy6s +66gQ&JNnΗ[3@6Q6>V5';-4%P5+62'6H6:ҍͶ&]>Y5ݗ5޵6P6a56Sx5x4mv9/46 p6b5C =3[;6:Ƶ$`G 46P6R3056M6bV7X>4AѼ6 6/qNҤ\ܶӤ55ᴠ*A?̖5ߠ5Du6R6'掜zVZVP5&6:M5ϖôO2?rZ̴޴nȴ540W5M6k6Eph9#56i_5X*Y.N5$6y4E4u 6k6U6.5Pϵ6a#6C(9n6qh6x64/I666-9?.Gd& /6 6ˀx6B5Qu:6`66ҹ6.6@/߶Qj7\5676ߕE|8'{C$ 6' 5dfJ~>d/XN&D>HrRi5ĕ6M6y{25 66 o66* 6 8h64+6 /;^$̸iķ x൨My6i67.56e|g}27 5yu6qZج2q50Bit#}m7,8%8B8\t7H}6[R6et|6657-7vyW7#77>57(777D+7366Z6ؐ`6:6K5V@5gȵ7+?뵭 $c5dشͯ㖢J1UR&'y`4U6ج6mF5 T406 5{N"D4b6D~4InlS:쵮\:4ƵL4-X6W R6 646&6r66^#PÛ5W5ގ6o16UTy0z5 񢵹EZtQ3KA6q,6H6>.6 ro^5*'_ŵ)5Œf6[5Q:5,5y41営\"Vݶ +64(6'n6a p$wdњ69̆6 +6)yѶ~ dpXȹ@56{6'@666趖 wN52v25{6$!XKj5{5c55U5A46sh5*4&55ǫ4/𲴥lQ5_6), 6jXP6+45Ӎ6'%Y~$6U4677f6vʶW4ڰ6nA5-l%ﴥh66U6i6VN6t47G76.QTmK58xfF?[ 6[3 +6 6$sV.b9,k5 5b6Q6 6Ӟ6U;5"k\5/*6E~6WqCd诶ANjζ~Ěc5>6J6R3N<$휬F]55X,X-˭ +~1൝|5}Cx6o\5`4.l4;8 r$6t=5@Hu4Q4,c݅ȷ2:6Vhg6kP66)7@7Y5a"5Dob6;6 ?Kk6nr-5m6y7797ʶ7^Ͼ6.V5HV54 pGX67Cv77Űm7v8 M7V,77U$7 u6p[5ƴԶo57360dVv54*5 +5C +6F58օU=ܶ/㝶$nӴ5ˮ6?d5`Qõ5'!haʵ(* #<5X?50: 5c<6~+b6~~66<6gI66}#.5N}5g6@5yDU5 !5^s.5ʲ怵pr5"5U4L${Uy,h68E36r<5Vm4wH6%5ɽ5D)a @C1c656Gj655v6%*65 $:'56ƄW6R +h5f5Z"-6J6y?"66 (ȅ2:a45K69e! +5l663zZ8652~4/2v55d<9lk6Z"5׵a.L5 57G[t0eIi5g4i,!6"7?B6qѶ=-.6 461BF5/"M_Go5J6{I6w6X6|5Bo_~)FoZ5c+*?4O5֯sе3s6\i5:Զ&626v1r6BF6,U_і0'|bBڶ )50A6o56'5/ ++|@ՒGV6H66 a4(>36F5Հx]l<^(Wqws6m635:5ҋ4DdKTd$-6O67B6 L6}e?7NX7@6p<Оp46(O6CG6fRn56k6El6m5O6,I6 Z6 5҈H Nn[3H67G"7c8T<8%83277t36ު6+53u$)545`*w-G5yZe6e 6n:6e6g6 d噶ζ33r h(q3eC6BD&6VGj$Y]5ao?"59޴lUd5Afs`66ޜn6Ge6X6a60 43ɞ5br4L4j6$Mv46B26Fˠob56xg4'p84H5sm66Ԡ6"a(Fx^}\ON}|VꞴېV5f 6 5e5V6{ +6663LTN5;)25Eķ +4\˵ZMg +[/t $_9v6HI66y?5dH535696643wC5-"P ^N ;Xe66*25JyB޶5g{-25r {{;5e6vd5z/p67t6I)ȶ +36=!6cF6S5⦶ms6G)6g646hi4CH66 on:5ץ5"54|ʴ503p5T6}>6y5%6qUPf%8666Ã3|##6\p 65v5 kӵWiе64-5,H5H5|.J˱*.4T-K||On66Qy6mHw~Gw6;b53е^A5lLņE\g6kN6 +6v5EYB6L|66R|6׍6"L +[J϶׹O5g6|Pzx큶V~FǮ϶I6|6@c5:~6LMN5bu=QkO&7a`-45.ڴ2=4+.5Q5K5ء\Ǫ65aԵn95Z(6c645B5O6y^6]L44庴˶c¶, xK6.ز5(5'C6\6/5{4ULx뵵>ڵe6a3pB;+{@6@ 5v@*46.i6^4o,X:5~ b46nj6h526ZNc)H֎6?6Y 4dC=!f5cJMDh{}>4+ȵCB6*6z5]Sq)45ҙ5N.p8F@56E6,P5#6{w5*ᶢC; +_6lj6#6{Ufp)#t~ʳ86'6_E4@1ZA:5x޵W:zf3*R,?5$d6LsQ6t56͂6!5Z?e*55"D<׶"v6,65Ζ)ɵpgi뵸h=6>66N6Y0Q6'W67 7~7־88*D77i747Pqf765NSЕ616.UG5y/4k4@;z5hH7\ն\-58𵩮69Z6!6b6uFq,5ݶ _p_ڶ(d5-5@6pdh1c596 +=\}F󎵺ζ 6H$>6Mp p5rf6.m66Q5tVfhI)ص6G~6H64/p5550 +B 4 5i~Ŷ5H`EL5A6a:n64(6N5E5좚4Z\r~pC56w4`R+566UpIĶƶTwM5|^f\666n#54Q7޵ʽ5:6v6'@e-Z쵢F%I905A53obI6?65%V7BS70k65E4MC>=| 債ūwVKDIڲ5`B^5iXX6:6g(6 Cն65o$cˀ5@U4Ȧ484Jy +ᶜ6Tʴ6Il56_55ǽʴC6m5E҃={2566:4B>662q5mN5mJ35O]i_*557.o|!6]76o 4_ 4CWwP6x16k׶RŒ 6;B5cT556Thi6o2\>7!+`XS$5n 5d (5ε6_]6ԴX?'Xr606MM&dbh66vw+ +,iJ ݶ6R46aX55]6r7Ϡ7"Eu7c87X7D8t7l7@7f-7i6ҷU6N66785SVt5 WZ4`H$l`fR V$6_6ݹ5U~Dfm6-v6@56eҶ6E0H|x36 6u!6+~6'[6Y 6~-z6bW>5.Զ56lĖ6@k66#5 540{ֶdඟ->\ +*5#5]8R@\Y5e6{H572&A궀~(-32`6($4ؚ"Ӵ7JBmd5AVp&K5a5^5Ū45566|6u0uaе/δ4U5[͵ǵ5@MhI7nr1c԰67"7'^6 63dF=g4$5Aa?*25)6 5Ofzx]{+s6 6'02!ӵ5G&5&=!29Kq3(n5O[qD̵6|b6S6gv44Z6YxXe{J63:x6>.e5*6\66˃5J&궓W4 +r6B5C66GR,DNnj_g,5^5ϣ4BD6p7j7-7Fp7,78-8_7 7-6j6rZ6Xn696d@6l\3Za64Jn>eR b6 \4|R25^Z#b-6Q868 U 513X64̟66g4ܪp굝4f-55kMA- Z6F.6B6=B6%p666yk %[66Y&6v5u5]5Ķ A +6zt68p'7gѵPr =GE5UA6!?6&6666AGܶҶx62т6-n*ju5V+6,mq6<6S5*4F6h5^9-4j42_Qn[qC5o6H.6FQѵ% 46=޻dɶnѨ|$Ե5@h6,66ж5H5;ϵe566,3 +5L6P6C5R5ҝ66GLe6].N"xᶫ @3;5>46Lx+G?35b<67$6Y6 +¶ppY魶wk?5ҥ6`6h/66`p @Sp4V675[ϵ 5?]ԁζ13 6@6m13\6NP5@6:5}5J64Rx{&++55(4(zĭSn66ډ~64M׵`Zg5D7 6yB6W6fl4nе̦ydٴMUH6k8B ɵ~5n5:HRrUZj?4.6 )6]6<6گ7#`7B778a7378+6L76BD666E6T5r6oP4Ɏ{4 H46a5!5'|5(_F{'4f5W6R6*U5`ŶY)e6hT6-W`6(p6"6bu6]*675؅GE`U=LCT4ȡ556rK6,7g6u5B"/E5<56Xg656$Sv6#6h40|5Hz.5ϭp?5)5j[5R"5vb5[6'66gCh5C4Dy)A,O5QPy +/in 6p;6Ύy6|6P'|66g¶6%Y76U6KS69ɵnl 4ьbd¶Y>j&5sn6oۥ6Uǐ6626M5NnTg3^q5&5(61<62\3 5tA6m5֝}6)}6kC^(.Jm 5D~6PG6gvATy6[ +A68e6%5q6},6j35浑4p535t y>x[6f|5f5I05L6%qt66\4H66n6~j6Nj̍޶)*.4@?'M_6D 65s>!_4͵ĭ\4m76p5>O4 +O5^ވ486cl6@6 5OeEAFŒ5Vjl596rh76#6kyx68(W(ݶp4)#6"54565`1==Ķ54-6@4f4dT> ڶFٶm}%36,@6t6) 5<1ö굇x~;?91[#B3E&&jWڬm5`͐6zL16"6z626_7f7=" 7M77el76G6k6ʦ6y66s5w65-G%5|62C4(5`16w6+=4%65e6-7K<+m56&5pZ6 Tr6QFt|5;Q6Q55266wd3)j 5V,6_S6mh2H@z}re4N6̴66Y6b6{jLIr5Q8],z55dvI/Sڶ.=6H6'\6 Z6>Y6]o6\Z6s5*g_{µY5K+6;'6j?5+w(u,GHU 6/^5綶 tu.K*oSYT66Ko6I/6Qt614o3936 ئ6K5{%5qG3*F򦶑4g@dVie 05v5Nn8IP]^66ԯ5=(g12#^FF 5֒O65 f12 `.j156x6@v3F5|WV6J$6Y 5P745,Y]̓62[!6Z52t{RU"53ͭ Y'/05k5w5?5-56‹6EV5_P5_6!51Yv=66H!G[pvA\^HQ.(5i5mRR赠pVj5Ҿ5 H`? 6&35ɴ`x] <6e,@f6L67F168<5cc9R㶆#W,I5ƵE656 8ն*+6Q6G450񶤘GD㨵}3Qr6/"{4wzgJ +UejTO552)k5RS8ƶ|:M{` +鶽.Ķ]576T 6D6Zm6K626t6R=7'7-7N7L66E66gV6]6g5T6J6{?f%P:566LE6D5^r645FڵO66+4Ǵ + ky} n^5SZ6Yt5 쵛U4(ZX_e6YT6`6@lf)_6tX6D~6h6 `+44Q72r A`EǶ m۶sg4Gu6D5"r56U{6[6E>5}x6,66jQ4 +xɐ6!66x,tѲyU&޶n;'6ga6.5ٳ4``4 fJ4ϭ56#u5q['l4`5PŶ |[B5rxb?4A6 `40(d,/5>|6 5|H]Fiĵ}Tʉ6b6$3Y9k[1nzFlНu Zmpа54Tr4͋61{5?ж~Y= 55 ׶k0/念55%4 ]*##b ME5j"!^ܵUD4qص(w5 h5iqj]ᵪxurq8CRl 6d5& YߘHy_36?^J5:rotF5a%5肵!E趁%O?{r=.*z606nڴ5e5>Kz}9`K4iFH/5U彶bVTX56560.]6 5i:C>|q25P<ǶKFM9H2]5RM6j6Zwd/6%6B6%ɞTTbVP6($6B3gg6x676 607<7C7#6`86 616# ,26A3$^@5t5*Ph,ܧ4d66\o6zil5L4;LUm6B3+Za5j6966ךYW= +Mt:*G5e66b|Q5π3` 6!25pڶLv?OI1_4S򗴈r?Ͷ^Rc5t~3)fy#S xa`h3t6~66J +z6,dM^6606G6 6R5Pâ4@D2͉}6¿6g2623ښ4BL꜃%b1}z¶(f656_ +56i6l궖n464#NXA͵67˵556$65iR0a},5&hp%a4^_CeG%}xhY1ET6P(6A5N r<64) 5ʶ4w55}5&505,6]gE F uĵ7M޴5%kCӶK5׉7dbv55=6"MlI\5*3\I57}446+6/&5;ߍѶg󶥤L4N6]5pͳ5 4JBx5B5j%5Jt3B/"% nJ+&c6H6~6 ϗ5<6pk2}@̶J5n 6+65WF^Ѵ+F5n6m6qAc'R"4 똵ֲ]ȋ .B5t6p6l5I4&|6 56S5TOG'ni^56i(6VH°516Z7~66 7* 7+[S6y66}F6-5>P&ީ@6B8D6ؚ5-Dqߺ36?N6iP6)L6#X+35;iC6L +C5z59;{յ١4~Iu/Z6G6A5P6 (5_'jRn6*O6v6655nOq/-޵_5LKJ5,4"5h67p4 +hP}!L5] 3~46%]5haTԶ|6/7a65UM{6H\:еn6`66;|55;4=56?6Og5wɶ鬈Cʵ}5,=5ڈ˵ !exҶϤ5$76d6ɰ5ʶ<M65&Њ;|5{e856Tf6ܢ46˳.5IfZ6 6CW55ȵVQ0^60diW$Ľ4ڮ666v6O6"(6ϵktU3,Zb5s6[m6y6b6<a絝5m6v6Hf6n>6I$Dd5>~5'(R+ @ Ƶ͹9RJ5@o.1=7`e m3r~55'5 4ܚV w6kSg69 %qCN5?BZi6'Y6A)9*2r4`5@T}g4ɨ6۵&L5Va66625^ JpKy= +θPׇc R6Ռ6I6Ƕ},=6 GD6<,6 3C9C +SiǾ46Q06GM6ml6VD6b6a6*q6 67 16w69V _PE!L6u{7 6 +"|oϤ~ȶHŷ_@ځh6 6p5F5:>'+`586h955 ̶ M5N61R55yYX5tضv}'55.5M9ɶ$׾SHl85.6T6b66Mhg4@6c4}45X6 +G6e\6z66(EhQXy1Q@55umH%r6G76au5Iv662"H6<5<6X5F5$TW66;2Y55-6s5s:45cϵu5!6/6B5pH4\)5 ޜ #5a5rӶ|ɠj5a5Vϊ5TƵ,RD޵l5}3v5z%;`r4 +INwk5N6H۷qx +5,̷68+5`L5LlVbʵ5i6? 6V6%͵@*˴yX3x12 {S>Ͳ#o6=6hv6C6?@]XT>^ඓh)3R6\Q6ۜ4褯;#4!5P9n-5cVRM$3GAKt¶kl϶ⵢD`M\C:7g_F䖵G6w&6zP96[ +6T^66={66.W"H\pn66cj5!y65J5U 56~@6<5Lz5dBr66o?6,6Y+</V(FD(Vc46N>ǵHp^ q˵(67\66v6w5ŧ-5%6b56;ԅ6666`$Y6[\6B)6RP6E\6.i<|ifs4Qe66%"Oo~t}z7ڵ.6n6g REVw/k;S酵CTVj9j˵{F*435 6OD5X"W'.K3 @2t9M#D{-6006:u{7C<&Ÿ棕t^5n6H|59Tɵ4%h6>65t=<)3$55xf6S6WxζMζ~Yfoc&?X@16I63$I*bEr06n6>6+5IwOĶ:ϵ665ȵs4(5Y6 5xzs4m&6P6:6DF4hx616eÔX4G6 Bl%=858Nt65q)&5o5a-ض 嶲,6 `5 (hBU(96K5Ӿ*Kl +0lP5F`2Pⵟ>b65H);)GS ܽjGw66Ƴrݶu +hGA~6l 599#-*nm6.U6x"6a?6 %~жH2>Lfr66L553RR2p6 03!rˑ6p95h z`6OM6ȵ0Ƕ_ t3V4. NՂof0o6C6 /W69p66l6нM6G 5Pa`5/E߶+2Ͷ86U5KشӬ5~v5ڇ6R)6hvфF3{@4*%(Oɵ8Bn?6664IڶeoLo_56U66Z4>4C,6e~Lu4jڶ b5B<6Xg6>N3$yIJ d4m5(.4kq51v6_6i5 y4w3v5/0|߶-6Զjh3p56_B6wN5P s|5µ+IZ5!166D]͙m.5e6C 5{h׶ij@:5f64SaTvᴡ5(6G!5?c85nG5!5q>65H}P6*6U\4h6cU6pG6 h6r6ivX6l5 0C 56"6{#565g!3eVo#5w V3ŵ䦵L556]b6f֣35FJ$i%u46'5e5k6OW54é4$56xz6h1̅,ie616` <5MήV~xLxe9p26&6\ab>Jv#]6#6Ogv4.Qy[¶[$G 6!GP6>ܶKL:Ķ{.2r6D66|yP𘵚cs9!6l5~?N|_e[5P5Χ-X41u(X0߭5?6hu4U^656L51By¶|56<986}5= pI66(5"/>(5l~4jr0R綩q5s6Q5ݱiuvsγ5z$|sKn>_Ӷdv26f6,W[6$O5 Gg1ֵ 5vd6 G53-6, 2&uĵ7|k#JEgA@o6or6O5a G ]45ѹ5fd3/'l55[BV?UHJ5Ej +6ro6[5BMJܵ595y똶)Z[3Fi{ $3V*56֔6.z46[95ֶ)Z]64M kˍ5,i4 s&" |ʴm ;?u\k+v|8(6 64T4 +}` +ѵsI,.cEk2t4h,6|96b~s4%9s5$44ڦE"r5.6q}6Zcնw +806hE6}66K毴=7\F-"o6$ɛ6IUa5+ r>k25G\6#A6T6$Q0&s(&5{ɶ!;6 &65$o¶8zO5{r5~3f[S5e95 5q;75Ʀ5fb6KB6Kд4SʶnYYG6`m66$p6X55,?2M JBZO5wX6b6?6r4b7~6,+66FT?66605KRm+`4y6GW5C~5c606I؀ Q576-$5&25q6 5z[r5:5|[5 +6iDz6v> +:l6:6x5ɏ6C6P5up&Yq+5B&5*5p65ۋ9艶W +7i~|5t5a7=ȨV5xf-u^MPЌ5*n65XWZµ5e!5Tg6F4.51fuQ5D5Qq̶yPmK*xg~&5=3T'5sֶ}. +k\6O4cJ3_еoZ5-52>7v5@61" J 196i6o"IֶtNL4k+θ ^[ h|5o06\6 55_ŵE5@J=mWL6j5%?3?ζhB經m-Јc4f6G6Gr5$55*M|')=" 6gH6 +o-R|GX(,ɵqP(A7PF_6dk6C"Fĵ`X8状8IS4M6}6b55擵ǶH(6H4C絛4 ´"Fe4Q PF6L 66E5S5f#s6466YFd68XTBleK3tN+) B~e5͵5]:55V6U6Ub۵C5Ӹ6ZUh5K45]{2=@5ht66 ȵB$5&5z516u,6#550cZ&~"%}:5Aʴ#e>`6X6.G6,!56ry6T55Ew6 65-l;Dz5X3u5:t>656֛6iu]{@&4 6G6'kzO4Y*8k]5⍱666w6@6k6QRȶ}6 +Q6;h66 + 6I6;5D!A>W5DZ,5> +/DEFǂW5"xJ5s6!,54݄&466'L56c=6>6-@5K4O5VV5kM6<6D6_6LIxh)76v65$c;knuB]gGn6i˶[r6I*Q-5_~t6{5+~ߵ'`@L<66t5y5њ05 QĶdqⴴ2F3ظ8I*Iߒ6~6?o3>6E6ϔz66&53r6" @56,6P5ɪsѲ55AC53&߶/6/U5)!P@65 ͵B666GjH5?6ETT54dv6e6N5L57K(w4F^Ȣ6YZ6K5 +aF+ kΊ5?6n5CC<>5_5i#ζ6h#5O鵠 +55N: l5&t\\}]7;!2#fW4 r\6B5$x536޵NCiM5Z53d%Os66{@&6]<֑_544:\3`6 Ł6,6#{^4 M aE6yv(6&6^:6E6 `5A8xK5$5ɨ \,<c~56* m636q5# :`6Uu5j|T&5}qpAiCʵF5N66mzQ4x6$)\"RgXc'&y.SDY=_t*\5n6y6le#4Β36m6A96۵t5jʁ ^ \ ɬ6;6cǴ-Ρ6Y5S)dk 5d6j5*!'5 6d665ܵAZ 55?KUX5܁5Vk495Q>z_5"j7 ?66I66P5kdwc  qH+&!'q*Wp +uK5i6u2Z62yxAζ[/ǵ|4_5U~(Dz6 p5-5[3Mim ]Ƕy 6 +T5llhϵIxcRf6k g5l6U 63)5U>ԉ5?_f66>n5^]TQd` 65ܵjkֶa4vn<6) +6u/!涌|XL+]'V54]0[;5 +O5̆ +=6ZX6'74嶂/66J6U6G5<5SN5z!6 e6Dz &q%Krж{Q&l5P60' +5D?Z,5(5kaAHbNJ|6T(E6;6ʬ-MZ|8536C6jJ615x.d>9 5^6Z64b3]55b4é6GY?6viL&!Iཱུ(26P4znl3_kj256K|kN-C쯵L5t5PԵ^+D 56RM>m z[>[e +綏n_T>a@㵶On16CH+5A!̶hVضUcG5-p49$Eζ8M_WT'K{6686,K66}p5)560[1[5I ݈]FpW&qw55 Xr.+` $Yl1O46|5;5q?d_)ȵP^5"JY@D 3n,L|c5(56M6365Ѷz-I6 /mⵡb$&BqӶ jضSY|t6ϲ6{u=6BMi53*b`U5 66~6e)D 64o5xq@޵{ 5Ŵ#̖5nȶ0|0_vB!.6^MA6q5s6KvB6p͵pA625`OnN־5y0Oz\ 趵ʰgpΒnԄNϬ=we6J706/6F6.5 ,h 1  +66gN_p5V46p6C*6o/Gtvu 63<66Z6 gA5 T\6I+67K>7Dy6Ɨq5yE^(5L~öx16YuͶR´6Ƕ6ZAclpD(5~NV~Ғ 4Ҷl/$Ñq6g4!:+6-k6wm6.]< WL50'54%556l#666)U6=?AFd/D`5i5#ܶ' |55ģ/F72056[{55=4i^ +?ζiݤkՈFr85253REµE6阶Q۞?X46j6 +U5V5u63IpLq6 ~5m*4!6(36&i6965\gbѶ=4 66;3j%/rĖ4v#ԵJ6;E6Q<V{ST L dw66=`6@x5Vw6nׇ5mp{831 5 H65y4߲1j׉7^6(6Ay6wI6by6q5۲1(6J6ľ6?636 *6rY6Z7776ڝ6u5&6/6sa''XEմ՘.&6)|67hTE75hN=6B`6sfS*m4εN6e6"05F5_6ݣ6D5 p=Dbilc66T7GB6撍6"SiIj5`tb29Ĝ;w5) 6X6C6A5H8-PR46+l66X66Fh6:ϙ8'ٶ$EJ 䵵0x<6O6K5JX46HR6H&6v6[5%Ķ(6664#nA?A c5fZ6E3sDŽ`6?H6t6e5D5YuԄ3?A4R64VX5^y@5,M7z +noĔY42լM!?!x5-sN5F̵&N565g4Ũj4t6765A_*5l3~6fܵ6j6Vd7ɨ|55yk5R6V{6{oX-*P5orgɸ%w6*V)66/uʵĶ%{\qkg/73Ϣ4Ե456V5o~F4w lܩ~47n6l5q$@6 9kCѵJJ6/"6R5εQжQ +l5D6-55tϢ%Hb6ܚ6*/O<H'V4e?Z+qk4L9Tj6wR6/5ڴ´4jo\˴T LR4J~5 +J5'2F50.5g565qr/4ީFȶ8F%e2̵ֶ[16A67z6bɗ`Z5q6_Q6k5\6>b7G7 6\6.6H6!67 6g{5E0vaq-둶`Ӷ^ͨ۴#o6,6 +6Yq6'6a6 x6 TţK!6]+r7#E6Ș=KP +y a%|F665$ \46@5F`2b0a62O5摚54K6g:5&'6%h66nsh~@5V6 64(4&IGV$Cu6IE5SH6%6tN6k6 6!6,_qk6-6P(J6F=5 KzqOaQյOA}lA686׻ar3:l5]5P=5~Zg^5_5`E5!5Ĵz8@; u}-$.6CE6a5~5~$:6E5,叵Dz5ߵp9i55,7,BLT6"f>`e jfe>uv{_ϋV'<56D_5sMtʵ/ 6e5}SRWabanfa83669g2AEĵq65uK]5fȶ05C5D^:2貳(WHȶ?ֶ(55 +LK`^_j5`4zöxEζ5eX5G6,r63\66246A 4@5:f66z6`W64Dൡ_\C!a/"ٶ5{-[*4J,5@b5Lܵ9s*I 'H56G5ֶ̱G6 6y5(450aV5z4N5K7ڸ7M&+76ɠ6 586L7h6152L6m2* TN}X?eBO5aIz޶*66qr6$69264bE6ϝ7I<6 +8\ܶ3."z!K +6aֵcb) 4ƿ6Rw64y4 +vj:2+6w65/676oz64"M22jN45}6tv[6)ߵ*?9 +B5ݳ"6!<5>5nC5y5M55b4n3$5;orP=z6M6J}#5=Y7>˶rgV}#aP5)p5s(O<ԡf ׄ6%6k656J56.߳5HZ5`3zI(3l55;S( S٬쏙꺵6S6:Gx_4ص,i7󶋃בĶ Qz6"8g^H8I4A$涻sFiV[,5/6"65&>OӶôܶm8ֶ +FĶWZ6rn}5Z굮)*굁NenyA13@'ybŵ65Fw3Q~X'~C8]O345nP5> 25BX5W50=6㐌x67 v6366!64U4O5#&yiV6'T6BH5Ŷ ,49^64U0ص_4v- qv#tOzBҴ0fw556 ʶD5H6^6- ƶJmG"55R3b=5x6,]6%6j%66X7wv)7D77'b\66m%(6\?c6[5aݟo56ޱSNs#s64L6jԶ.4P\f6?6 +5c>68`6Ot6, #060!6le6U5(XJX4.u4U&6*vњ6M265u*ԵE5$vഐ3D6 +Ө6fn5;Uڵk~;55=rE#5/S6;6?5 I]g[Ti'4@,65T/kC56+5Qu]44 d5J9-'T>o6Mbl6@6 m{Dg6k52篥#ʵ5{65E5o#5Z"kDA2> BPM6N06ɇk6V6U %-ěoB o5j/#6_,6BE6S<`6I6~XF5O|D5R=cK{ 636604ǐhD#¶Vn5Gֵiȴ\5LU j +hxL ba ٶg~@175Gr5~6 ۸6)6y 8 + 1%5PI6>6%:ൠ/6L6\66D`6,6"15L҆,8J*,oP6$A6S5\xүֶh5c6"5n2*ND):i1 `ôJ5ͤ +r@66x6f6W5qu6Q6u6LѶ߶gI596޵0MlA25667sn7Y77E7"7j7 6FM54r4|UyzѴrn6?6Dv66ce6i:O@46-V5:36'66b|5bd6I04 #)I6@6yf6"oĵg㳖N6}59b5V53w9: `Q46%62o5X^ﶇê| #8,]4ƬٵK4ů6uK6l6 aG5,5NY6O"pL5>*5صaJ|,>45#oJ56Uڵ66o+5254c(@B5}(666.%5VuX4*6 ~5-5[6=56^ b4a2ֶ·/t(ZQ61"66m]|G[:8@뵣7K34#R46>66ZѶh͡Ry66pI=6wO625x6r25PGhҵr~Ƶv +5T45ܷ C@~6 6MD< 24Ix666oo5/4k5Kb5@ȵ56$ 66|6-.6 6b/x`f InDv66Jf4Z6 $6e5gV~Hdݱ`w"BJ1k޶44: 6; 6r6hW6i43YѶs絝6Է6_35HedC56j5^5Y|5@J5rdٵ0:66>46K6H5NN[)@Oy6?6\ĵ!KŶOߵ_5h5068;6Gwƌ6hy66p5TҵPAZuf5665]1|'z96D.6\H6667Mv7G87,7K7*6]474d585YVNuN"5Ar}67H76 +^(256 75LX5%6+A6%6?M> tL}r36*Wq6~86x5єM#%*26;&6q#56P|3ԘX6%4ӿ{/56e6lwʞU|A54nc=65ga36B6 64\5ȸ_݊5X|׉>4ol6HS5NFr{Zz={}(T6N5ҴLȴ<ʵ& +0"tgԵr6C6]H56Q54}+ -5KĶ5z2vCD6L@6XٵZJHJ@56rG65J'cF>@JszNܿ"6(6 }63jb%6/166,%5޵h686D66506/ 5T^9 146p"M6;666(/447o%"浀846>V50ж6z5 $58B#"6.B6R6(6Ɍ6"x5 +l5SejIö#Ŷ6p6M5|56D 6x5j5#5E5ʒ+"ɶ E N6`65f686G̶tℾ6p+55 55ؚ64LTY[Ӷ5H&6~6`R͵ +0z55dյh25>b6\5'jdCbWKsa6Ok5/d 6z 64]ʶoo6<6S Sx϶ر@o5 6Zj56':Զ`6[6IDD-4x^66Y8677481v8;_8U7Uz6+/>~5g:6g5i-Hgi666cCՁ2+55[!@ɢM (l5s56n/3{#%36ل6B6"5>Ƕ +1D66$6lMR,pf6XdK5c¶Wcȵ^"5آ6iNR6xi6v5ڲ6!5hbm15g5_D5H=6F5@BpLq"` L6W6Hv6254jt 6.65\5q5`4Kﵞ6E~5Ϯj)46!6X0K;!Y64l6B5Wtޒ4 I*44@`5md6T6!6Vs6ܵ%r5=6 6Zy Ͷ656p6h9647-'%p5\صq趗e6dV6ڷ6}6`6 sDʶ#U2oDn^E5hU5ඖKܟu 6ʮ6686C6E$5 ڵ_}fީn4ˌ673656kx66o6-W5騵i6>H5rn>5پ6v{5FӒzn6D`61<605xBεϦж5wN6.$״!$U  57Y7\73@16x45n6)B5ص9=öiɶK¶ªp3sz6x7H7a88FS88r-77ӱ717Θ6w/ڶtS6ʶrስ3B66,@5}V9[ý5j6?v6X{򸽶V66 s6rPڵ"p6 B4Zfi /︶|l>4P4566~555 ig5!{626*"Ƕ_ Lu6GQ>4x0Ķ(ϤDضuMHUk4\)5K5G\۾6mжqxp5aXv34-6#6h*6j61'5w5Ězs2>/Ԏ`57@69S6j6ӤE69Ͷ,9iw' 6w*606֎M6sg5`՟58 6$eJ ÌhJ56/66{6Q64!*4=6-5PβA5q6V55}4f;/J2ζF,*45Gp![|H526+6$52\bص:0Y56C5Ņ5c4jRm6V25 2f4mfb;|{454ⱀ6+j6!h̴]ʸeCͶ#.%H-5449iy5#6=77c̞7n,7mV6ܢ6Q2610k5 6Z65N/j/ܶL6ڧ7-H788B8v88H7y=7&!6͚4u8@5fŴWq( '\5sL3"d޶ [56o6[Lmĵ5WN4op)hhұ6u 6'Xt5p5(835;Wb$%? ض.`CuռyPZ66l +൉oZL߶'06O <:e+{ +IV6d5iQ6#D7u˶>.}RV&5PhhsZM5X4Br5(6:6P5)b4(U4x5<+55`>5Be5 5Ѥ7'Q7\\6'<$,75?vgs߶.h6i{766Y63ȩp+ h555Jö/K B͛5P6˶X6;34)L4ܾ6i6W5նty¶o55666^t66j5=I5# +%4m54dqy4N>66<6Ilêt [9|swpQ ȵKi񵹕ܵ05f6b6;]8!:86 5u~5Gt58wjה6>6^J3™RΑg !?5V,6d.4U׵S5@ȳ5J6/63oñd58)6U! m;h4)25n&nr?C%~w4 h355K5oB5h<6_77`7H66)''t6D=6zJ [XxwKڤ69=77T&L78w8`Z88D77 r6+5嵧5I6O +2MP5OR Oֶn6!v6h!6cc5LW$N5i64Qw 4lu6a6c\5AǶ_'|66 +Y5v5\쵁Ť46 $ 5G6v6>P5m`(rm3z34P 7=7]ɝ6qU5DemsEz浧#586+5 ˬ0wex6E767X758r8h8es8n2W7f{7)6<5-|4h!5wA3A䘵5\9Ug414f66R6#C58B45f6A2|6@µ_Vb 4ȩ5`s565d (49^66e4[r@,9O}LG'S 5Q𫴰h 6 n56rg5ڒ4@Ӹ׵ O456JX6&^uKrNŰ5`>6CG6u5!685753X5E55:PR۱049<5(Zж#~y5 ^r/#56%@4,4bp6Uxeuel68&f6S5ZNW]εp?G}$6* 6 p@67hnB֍6G 6Դ]E5no8󶻎-5(5piq_y-A6766n5M75SK6C6\;565%5έ6<6_8хs +n#d=6ȵެ6456ڶ;2[F5O6 58@>0Ls@"6)36^6hҶV`0:v46=6Y.rӶ*fp"4.K564DP6^6\6,W56µ@5 L#m(X5*6USwW@`WbOJꏵz3C555Lʲ66\v[5V5A6^u6f5ၣ4Ss6?36]6$i66 wBfcc:.5ȵ\:m6 6m@nn +h4hf%f5t6"]G+/r?ɯ_5쌡5 6B?նcdo$>%567[*5%6Dx6PoK5>ٶGѶ5,r|(4mA5+Zr1̵gqA1(~5;5ߞҶ)صd5㵡Y˶oѶ2S66slsVt-UPJ'674hٶY¸+ +zC56ueB6+mgܵ '55%6SU5`$5O 6 6P5 Ե5b_Ы6)~ҵ |~5+:594L(( 0y5mNK66uCɵh+?8tbi5lv66M5@5IRܵ6(66&6T6>j<6?5HBF6 ߎ6% +4v`ԼY&H|)Dah'T4L,n@zӶ +5Hr6}6p6FN6M<5-PWﶘv z6'7 +/7 P7RJ7-7!H828}H88Y7֫7@6o^6iynL֯59=6vp6!X#)4,Y+6)66j6[Ã5k̵{n[Z 6Dt6B%(5x5dƑ[~ 9X)6C6A5q~66(5Fx#a2HWⶉ3L86I-5@@5D6uq69c61%6d5'E5K4s}6Jwd=5 5z}%?D5/6!l6 {R1ȣ5u0BtR4ڣ44T#6K-F抶:[4~66c6WfJ6U6J1]#5o5_ +u嫷#J乶LQ55"̶~eB^<65;@T5Z6l6 "56f$7Z65@5ï$64V7B7v*8>8c>y87v77GkF6(5N6 + GZ߶?G5=5zJį4k6,6j5T65~hZmFY<: +gF6S^u`5ޭ4;DR3J8ƶ]65h +6p~5OgjO& +5Q6ˋ65ݴI㈴X4*6y6125%5 5p +x")K63`6*5w(eܷ >5z5>H@ze57k |rRµO55y5O!ൎj4> 6j660bJ66"T6 +6:.4}ʵї566T(3ڜy=K6B51դ6 +~ٶ涚㜶fg@5m*6{ h +ڪ6t5J.~b55in505鴆 }·45$6D6;]66:y@$ض|} 4sMնlpPh5&I65{5zdqֶPA߶c4M@jSZ6B'o6ȱf4 +57"606|6-6bK6sE55 v#Ԙ56,< ,X6` ׶=s6 6'qH6j6u6m6Q6l&60-65ȋ!q +\q5 6fE6{5̵~5B54V%6s۵AF6M 6_[H!FOm<+"NUW}˦kwWk56C6U?625,kZ5W6*6&6[6ʾ76߮6FU\6wȶ5875 65ݶֶw573ۥuW5&IfaʵMS\SZ_}KU6^5.O5a65tڴo҂+!e{R PYw-=+F5I6y6f5&4ctԳ׶N46 6%g66R>^%L5`C5SCJ57(6ڐ66S6 6)(>_涂DS>:5ȍ~56 +d7TQR7)8 k88f777 +Q35݆5=74Xd695ڂՕH5*=[:B1 5{6005Ȗ6(4 #!mAU255J6bĒ6'M6_絲M[6=6n`Ps6q4]E_߲ioJ3ʤZl<Sf*6A6033& (+4-0򶛺5϶6=3֪"pӵNbVR5T5JzZ5 6L&6/669Ʉk6z;6Y6Z6ӦB6-B9-7𵞴G 5$w( S6),65if t4䢶^:ѵ5UK6Qk6I8}I6Y۠5| hq~ fzҴ[ŒJ66 25νX5cEL55ޘ{-B)3F(6< 51=,H54ɶ'h0D5VY36D6626Jٵ=ȶеk5"O 46%668;T9c<465$`5K䀵"Gs;y~s{6skal\656m55mh5V5%$hN6+568oW6N-d6v6Al6m5=5o5T568'6ss 瞶-Ueƾd5 {.Q}.4- =$< 66f96X! +@5F$6%566 Nhʅ)0̀5ɚ0^%[ \vp666L,UG7&gC56D5c!@i|vv5R8ȶȶ-'6ҽ775e6|3/" !4zվN5Fu6z{47 ?`7D7W7:7@77<6#N6.ي66T=6!6 6Ӛ5@ Jx65,MU`5F60?4}|&kE& Z +5gP54Lz^h56#%6S2eHf? ѕ66HuҘ'`G6EVk4[ʵ/h5f6k6B6{7e?r5K<6mQ75p56z5 :gLj1|:/r56M$3ф^䈥X:@5"6d6V6V.hľV6l6';7%5rh6;)ٴB5q@5 PI>v&o2P7N +5g,5Izs󃶾26G6!6,v5idd+oJ)n^4 +36wV5 5P6y5ɶP&|䵩 4Ƨ)ⵠʀϴvHllxM|0b6/5;+ cg_ͶIՈƶQ6 +6P7666e{7F ++m,6l7 6h6]r5>t656 +6(h9n 53p5\N/ඥ^B?yI>zشR8t4w5MFB6L+5.ڶpi뜵X4 I\6hZ56|$6Q 5u-4-xU5 646{nt궊¶ +oV05k6dև6+m,56M5)j6o6sY}>( +յ툶D{6NM5Y|0)o06i6ԩ5TƱ3 55X5h}5&Ͷ25Xw-5n&Ͷe"j^pmյ6'_6O6hEI5+5>4 +Զ1\Sqm^5zKϵ!`6},7l777s5{7R6i6"06K7 !6m**=i5z޶d5m6-;4s. lɤ56Q4rR5}4q5W6c6-Z4<5T57/撵:5% 5v{84ǐ*a .6iKٶ5XZ3ii4m 4 P6sR77V64X +c3c@6>p6M6v4y7pXX޶:56u96]- +@>3%014Oz5V6QX5r56>55(@#Eqϵr6625ƨ6_@ 5Ɛwr;,oLV&Ӷ:D36%6c 1ك3na5"G65&k1E$cQ*yUI056dScȕ4}04Op6@6aƉ0U5+$5-50i6ycǩ 6#4X6:4:L*AU6p6o3~brf19Eоɴ}H5S66[66r6Đ*Z6GK6*M6696g5ԎcZ5HCڷ ȶyL&5>6<Ի5B5]4z5N06.݄6Q5Dŵ/}TFm655cb7&61SZ$N6\66 : X-E,3K5 O6p7 z64洤D6 6/J55=<4:6?|5&5666AM 0wtKy65a`T5j5.02 6X66e;5P:?tdsPƵ/<ؑ{;x?pó5:6B'r+ 3|6 ?*鶏' 37gy5 +6.7V߀7G7ys7 x66A/N67 646y4eZ/!9޵j^5J4̶\mʶy>{5d›5Q5y=E56G|l6P6ة6{#g56 ųBd;0X5%h6굺26+3yDŽS`N<6TX56M6]6,657v򶮱y6DS6&f3vm&ݗ5c5Vvݜ6dJ}ѴW55H6tq6g״ + 626zz-@鶒ҵd&6#q6562ܶ&heѶTO6 L645끵#H6B86L69SƐִ# xM56v6~6!l縶{qd55.F5+6f6:5w|46 Xrꇏ36't5j+}@5q66w46R,6k5XU&Ro۵44EJ55$?#YncmՄ6:6^n6S6%1jtIq5 a6"w6pj6E6س&X5'6f˫6cY6 + J6>gaW6CO67j6/6,E6iR5搱xç 5kӶ *Nwj~4q5OawZ}46o6o6* 5輬6@4`SP0}V6o6k51onŶ [rݵRt+u 6ص6+648D\5q5۟5'>6>5Ul 4BzY0b:56s55HF6e6'pRVnb\.%0[5X6B6 +6ȿB5r7},F[R5롤6ԥ6.>n´g4ar6"6.a|6d5ӎ!56"/5 ڱ@5Q5O2S>^|5w546%zM3c4V5h bvqfu:[6&6_46T6`)9-565$F&ֵ55b+6 N4 5d6S6Ik6 +55(F+tV';6<-.AM&@245j<>p='QS4V6h{3ȶbM5ܼ6o6k鵁5h+5Ɂ5%JG45[j)q80޵mS(B5(l4n*vQ66i6`+6J7eF7S4I6'6LTjtqpjm6s66,5'4&>Ika̶Dܵ6 z5(CE4CQ4S5+5_5q58_aص]̵K\ 6vV5RA䲇3%rR_Φe51U46>64E5`򶷪5(E6s6Y|^^%y]56u665퓶ϲQ8x66E 6 58Ѵ'8OaN|#0AD56-52-5"562~5 56L6!#f6!$45q-6S6KG6(LA㐴mP,#6_6&4HN.Fn46?6%9b6y536;^6Ş6C# +3j6,6{q68JbZ P4q2n5(>r6 +l5>:do 9fn +'/D3Q89H0ɪ$Qh6Y6s6nƶܵ 56d`5P5<4`$O@6Y^66& yk|WZS4Jm5G/F2,D6`66!V4jه6\lS#.qJ +'<5r>6]?6ŵnAϵ^ 565IeR5DHh65C~ 饬#Hw)ɶI58j6:5'a8q4'zP5 v!腴ܵ@6 5[]Z5c]5ɒ5BX6A 6L6b66t%5C4ㅵb}N65H5*6ť6;4fG)ᵿ|hlۍh]435(Aqx5%DM춽z,6އ6 6~z62t7F.\7AGx6\6Q$4:R4J жfo6.5Y5~W6["r{;x{&R55j3PR06R5o 'F5|6,#6"M5m6 P6/5Cx&;~Oso'Me7FcTU5y80 pöeƶX6i6K4tv56-$W#+D6&<6~6"QضT5"65,55-XK=hدJٯm56*65 n5݂68bs6Ԣ`\V66V5|6q.B6a{5#,66'ʶcwٶQ 6^~6"5$5TȵuU7I5yK5>6 6j 6)+|ovǽ6;76z#?@5k +a(Qᶆ=6:6u5 +XɶIύ55A<f?&6LY56<6N0`,jV0+66Ї\6k[pYDH2TkbJ526~6Ÿ5׶۪ѵf^ +[*55k6Ҷ .XR5O66,R5jRd߯kEMʠp}`jXY6qz{WA3@46}7u69"ඣP9*6€67!OQ-5`涊Gҵz%5l%6$5R挴*{$so\Ҥ5y566'&oV}z516#6Sb6 *5ë5b`6à6`%[h65ia. 6z2606QU4U51!Q2l;3;666Nx@z{$5i5R EL5Kz66y5P6H7|}7066| 5?5-B.Ӷ=l566߮]#/f{e054U5?4W2v$ 85Ǎ6<6q|hCI6z 862Z6\s96-6}D&vw9&}5qtشF*4&3#U= G̵n6&V6 4Y66ƶTl6'J6;ıQuFζxrµ^5+8525H4u5g65v4P:ĶI e5[6v46j{>83)5ކԮ,t6 6h}566I6.5eε{dw {{>'5~486n7_6g5X6Vdp7&5w6bJ6_15i `3)6OV6i6e٩F궺 s4:3^6Iܶ2.6q6660__p6l6Dq'*8˵5Ѕ{+G66l66ݵIշq4oV85輻6 69 +54ʵu3&R66K5JI5Lz5P5K׵4@*v4n6I5FDiv6726_tAضR4e4g6^6Vq44PtsI{6`@5P5T5H5085O6f6JQ6@.6>16Y6Xqk7eԼj|,!21`Ls|47J565߶)mdr^f"J^Ks\ +5kD666ZK:h\Ҷyf_55C*?5rA5u-SovI6o6v6s5ۈ6+N|,8O!r~[5Gq6(f6165tPܠõ|]Iy5*~6=f6'ܵX6H6i66J5| Lڶhh*m6r66u5].5S̵VT5]2t4$#6)ٶh9H-*6m6W6k63ؙ6r6|5qm詵JL53VX6gh5*wG4ǯ5 6+׳bK&\o6366nٵ?eHugqZ_5>̶Rd!3x?@6 +6k ĸ;]8DH6 I>6 4du$1?5q6W(6?6HiжY_1xޞezɶPFOb6P5_8{+166&0'5@]Ķ856z.TŌw*6v66G6`6?_ȶ\m5l5G𵷤6}6.5!`*>4¦"Ɖc5er5䵌!,*5踶g>#3u6 +P5)Z6%M7 ͯ׷u굜Ю6ֵ;&5{˵p[ೲᘶ9-!ָ66n&,kJG0KIZ`{6)57 H56&A5cWԵ#6!Ep63v! k%?5%6V.5 +ɵͶ/ ܴѭ6yPn6Dൄfi5'L54/H4Pȶvja+5I6ج6dH_oUy40Z66W4p'sK@,L#$\35H2yĶ1"5{f67ǥ5#V3ks ]5 +6P5ξD5j+fp>;6:5X%޶ IQa5n1嶷ܔ4+K)/nN6+05m@ǎN5,4I5Yrf6kT86i)4>G[6}/ٴ6A!6C6r67n6^6Վ6n6b686Tk58<5X5ѷ''ᶨ݉5ٚ6!O(Q?X]5 5P4j󙶤 6 }4,/5@562u5KrC66 ]>5fu6f6Z6V50ƭT {G5606q(T6a)6Q4D>6A6 5FR=WBR\8eRB6YR6 a5W$5|R4.5r@6l605ʢ5q6B Y@4϶5Y@3"{jB6Ym5rs<59ȶ3jdP_o6Z67fmrζLH 696{6lf66[!$F8$ C+6%$6!5۫@55U%))q~.Iu=(C5h6 4N׵@жp6.6{Y4+t666Wj(W6S3244x,4f$(OY),6^[5-Ri +5p04厵̰) ͵y~6Ht5R6 pf6$H|5{2f525ú䶄MҶNXFU엶@8")ؽ0|616D6AZ66[Ue5﵊3LT!r6$m627J5p3ζe#%.pdx\oB455;5?6+f6ws6!64j5b$NՍ5 ާ/,+n|5(/6<866@6*}484V@55z4O5z6%p`5`'5@56L6|jtǶ]v;Ŷ`61b6q!5;6[b6B54w5=z6a62#5v4nx4W*bDeb%d4\6_64T ɹ}P|p榵4ܶ[A,pa-[T6'5;kG2b.5zd6=i#55dVm6,6Ye9Ŗ6m"545o5%51[j4p6#66nV6F Y"{ys55|V W5=H5.oS5^66;4>dF/6CW5+74XL x̶ISC@ȶp*TxUn;566͎5M^5b4Z`5s~6ޛ-趤cȶe953Յ5wԵⶭ@r7θ'Y'ʵz@56m6o_5Kc$ 5r5Yh+bg5k]5JO˱ 4x5F&5 +6q6xk߅ggl?j#d66TY6F6Lٚ5/5ih5M9Hz5-b5!9e5y66봶"B3e6,@6,!5#sѵ@+aD5f7'Aq7-<7cT77J67X6CY56)=5I5}޵7n5΢61_4^-5*67X3ة5 6666e45H롲՘ +758l65{ +"a35qn66ʾ5"\ 1EĶ\5XTxAJlAs}嶓6*jL6 +8˟9=1i5ǃw6s_!6a5G6jƉ66ddJe,6VP5~!55uԵ^t6jR6s}HqԶ+6:t6~ŶF55ܹ65lݳi556V6$7 6x6ݸ +6an,۶ș2a6"3624%,1 b,6A 6~J555NM>v35X66k6~5~5xG& Ի*)-LN5 |55b5<56R6fQ5ݾ*5<܋5{}T6(= +(Ա~{6u64մ$7Q +hR2J곑x5x5:ȶW3[l~6K5L`¶PL5ݙ;A50CI6Si6) ʶS/46%Gl}4#6<66 6ir6S62>T綖ƶ[IN@0h66sP6^ s^ 65f65Kk>rR3t5 6\v7%!7g6z.6_D>6>5r.ҵX_~ Z56/d+rPM𵭋616r%,`%4e+6`5Ͷ)>,雧~(Z3#U5k1t4| E>?5B66lD/Ҧ +^.56Gp_3Lص]b4յ0Nۜ 0ɾ4vXv̵KW32t5Q\5,4BͶFЃmiI6"F6q:66:!dN4&'6e546Ed%uF5+5횑6Ex76F4{Y5,`66:4Z60>t4C67{5eFA73wK5/GĊ-15iݘ5ʑ6Rg&*=55p6c06R6x66dc15Gf54ϋH1%Kxoֵ6554Ƶ*ζvzܵ\6<6J5~x`|p+Rk58M6s55&z޵ 2Z/]/i5960 1r5TR^I%ÜQ5 rh6H5lg>(h54jF+Wߴ,hCܶ4N~L̶5cw4U5Iu"sr4C5JXw3jX5[6,Y6*.ƶE! {6|4ܕxU6 6qΎ5EHĵ4@2+#h616g]k4L6i +{66 +R66\W44xqD6/h@6a2ΐZ66Z]d53@;\.2ˆy5&j$Q_K6)"6J5s䵫Qt[X5J5L\6&P6Yp5r55Q;Ͷ}506$5f6\jRõ~3tP4_!ҦX4(5N +5-5̴F59_`A*:6,m2y`e6 w6n6H55\600V=<7 54s`ֶn6%^6m`X՛6=2dӢ66R6@cnӰGw55jɢ 7 +4 u5:|5è4k5 ˶"//l35T4NX4ǘ66LDO4)7_w+ݦ25 Z5tඖꁶص\66`E635.4ٕ5ZkCz1686jZ Q䶚f5{6H|5vr!&ö?67 3h6(bg춸+l3%\45P +;/q5UL(XD&X?/O8-5Č6m6MK fʵ|6Z6܀65-<{ⶇ ?+ ?)q3}4&d 56h0}=~c\5͂5F6))c0ݤH3^x5ĈYk.Q1pȶ + 9){4k굱W8626C6* SΣdt6j8B6O5>J4H i~5WWR6pX6YW-Ykö:sPH16ԋYi}5B6A60 ؆F|M6O6BʶS6Z6bJ1n3XZö*2;6D5ȶ72R'51+6DU6; %4yD(^=!67!6J5)g>r%[;S +P|R!I46~635[ѶBB綨KxP5:d6Y62q' ĵ +m |4,3q56-Z6#Y^|`F5,ֹTJFڶQ> ~n὿]!p> 6~ ~6xoB6q 6'59鵼*v3 `T@5U۴̚&/A>"56Q3]50uđF6X6Q5A5G6j6G6,򱶑fd6 ]6)ݷ߶綵i_"@6j{2ƥ6d-6iϟ 5 +66G]I22S"C6D6Ӎꡂ8d6xaE59xQ53 5656d66|6U7 ^*56 O6e [帶wǻ'0N461776Hpbw)յ,@5v65[`R5b+5a6J0Al%SCE"6{66i1ĶY޵6n76N66* !55aM) %V])O6qx6jT(x5⫵pc%}r=.FBmI[G56v|555qR_[I51I'5]'6';5^5O556R'/7J6}6kuv45}P65Gⵢg:6 +6ZW!45ҪA5/=6*6`55+ȶ745=5³&/hn556eV66(䶉ҵ5ń/5#46w5=r64u74X|d6@e5v$ҶbR44g5#,66/Za%4]f&5?t[D"j4zZŶiڳ凼6g5E6 36685i/qjYK,K|*P54%5Mt / ^5 +9P54#75XHO6zpiov5%r^:@{巶k@!Ŷ=\-X`69 H66L|P#45wwDu¶4E]q9̵?F5E5i7Dt6TC6D63d9]G̜B5e 4^fb6m566s`aSzuS55ηו"̶\ 606DV:a(6B6 6#M56>P5B5 ׈k^O +Rj(6VvfdG5o6S6k붱\Q555G&5&6Sh 5XMDN-6+H5c;]5A=6 46O6m6L ᚫ^X5ĵܵX569&d\55[8>6)p5rS϶ZԵ .6 d6L!3j6#S55D[p66";546Ag6eY5^e16 6e5*Β%+5>5&Mm_l=5^63*76r6fJnJ/*dWj6>5'涴ZxS4 6= V6pZn6 6 6U+ +6h^5ϙ:B % ᥶ Lv!:)նV5"5,Ӷ;.M$[Ƶ'@=dBjFi'ȶ5(։6*-6y67P6dO6 6Nr6S4v~ +M25A5I{ɵh6i7T6o:׳2y#7q$5b&:62q6?`õ t4E`I 56D6)U5bLʴ-5V_416XZ5∴`"{딶L"6s6}BV@5Tu<z3J۶2j5.6c6];lѶ!#Ȅ& ]K)4>564+65vYLr4D5q a23xp5Tϵ݄g5+5 6(6p5JBx:t F;jA6~ρ6Q6N5{d.ռ֎y9R Ռڧu){6ۂ6d56}6'6v54]17)#o5+22Ŋ^ж0e45@^Cö!T&-^55;uG`j%Oȕ4َ4?GOCz83#5(6@5hZVtA4Ln]:zq6M6|6\46sHu b-Ѽ$5z˄jƵb5F6_6166?6-a +V5M/$6!ʍfɵɵo⵴6, 5Ŕo26eQ6mM5f4R6@q5bpa)6ΐ6̵8UTZIV5546J77 /65aua?ͼӶ=\+5q6@6*5x`5-]wz~6H606m852]r4a6@5뛴74eY.#K43kX5+6x`N@P\nm5A5[ʴ.Y66r66,P5c5RJ~*C6aE62 eJ3WX6Q6ɶ!5T5dń26%Z6gn ]"5㶤0oM]K5N-~65;d3q!X5Ք6f ƶ9is7;LR64H6d͵aIMB59)+64t5l` 6f6Y58x6z3؊kD3@5Q69g6x:d,#Ѵ*0(4€5B66{ජ.d6+8.GdcJ85-5O5P>6X6OT6/0¶5 66@56.<ʶdN05-ݶv}ik<64숡> 5=6r6[E@6f+62'4Tzޕ4ȶ"=zxs56Zu޶~㶈d2Àx5k5*<^6:@6X|540ڴ&6''6/"5 f6A>6Ռ5zE`Av|X*5>6_%6v60X'5ߴ?䶔+f5Bx5T1T]%L.67 )6{f5߻553ֆ4%3家aƶ0-ƢS5ҵ +J66S_p<ٵk576p6Vj٠޶V4[̶it6!36F6׶6|6O5-YG8`n6D5CyK +Uy5]6XUteoȶ5Q6V55>5L6Fc6qG52bMDܵ.!뤵kp|yB~i೴Rh5޸R~a6&5Eǵ46H6utn&b6#{b2ݺ W05!5M 4/'660M~~7k6Bc6lC#6A6n5qN`lR񄶅SΜ6 6n66%5o +4Dŝ-\~L6Y4jQC4F5_V5%' H6M5~yL,ޘ6[ 5V: 5q&D6C6?6HpPǶRſڵFvQ޶zj61Wv6>66]5Gn2 |;@$5r/{526?D5 qm5.@Ӝ6x +6sζeu6 SBFy՘&4A.5\$67%6z6`B5`&BIS6P6g6;眶 +N82ʵ 6?"6k6r뵀0ҳc5v@ªliڮX04P66c6V|Ͷ>5],Q>"6qf6TW6K56/g6_6'v5:44͍Y5 K6G6"!4죸5ސ66nG6@6Nc66]6L4fd7[Z 566(5®:&ֵk TG˶+8ڵsz3`k55b*X,?6u6*)0`4z65ӹ+>5~6~S5s.Ёz^md'QKvs}4V40Grfv5=6,-6h6԰6T`4G+nhgf۵v +64a6(M5^+5h6Xg65K'zs(@t 5;|µ:QI Զնt|5ɶ>v8436#N5GQ5o6PH5m'4 +616<Ĵlxܶ&Qntƶ45 +'qR3ꮴi3Poߴx4Qt͇SC56 66;5\ܵZ5(C2ـҭj6/;620ĶIcM+4WKٔ#b5;f5;5ж6h696T!EldUqp 1%&bm,56y?Cڶ]h5!(y +v6ڮĶjC7"۽&6P63յ3x|hxr"+TO(46|6k6&66h')˶ĵ2D47rh6G-6c4ѭ{5<60Q6 b6)465\s +6tB46Ѷŵ#r56a66ڴ5ٷ5C6ح6soM35 +m6h<6V 6|_ζ50586+@z\> Zr576o6'ih̵_䶍MC6A6M6F6H6j6k5T5ϭ5nM%ry_晴0'F4v;66/5._j5)6$55iuض޶Ŷ{_6 P6P664Z.e+ʡ4a`qh& + +06E5nr5#µ(-K44#X'6R6,6ȭ6 535y]yW@ $5t4qSAvRn,4ӀZ5 \666k@ Ķy˶DV63!5Z%sŜ<_6B6p5V{ȵT=`K6]/6Ev4͊6P6SJi5,60z3dJpԈ]5x 6aT 66Nz5>hֶѶ2sݶ+xto|`h66m5o?4 w=O=55T5dt5Q5#6xP6y*:5uo6o5Ȑ.55ÚÆT4 +688;6LY3,d.N94F4'Q5W6O15Ե߶%365kȶɶNB7c66Ѭ6=ʶ59RVRƲnB5 +6R6p16Te7r3w|jL5&66u5[6 n525К5$yo6 ]LReگ2Ċ@606ҏ6)6ߠdP56M4Rֵ:P6db65¶.Tն]pt0555eNѶq7|?66&~-"|ն6Z6D61纶C! b6*65dd/L4X~'t=]2B4B:54UQ}¶;28566666rB5R+lGBî5H-Q*E:'WŶP2d3565i?ܵM] 5;6lh J 6 Sj6B 5~5955Nl3 845f6.p5X#] אC\ 46B5jMn+玻50 Olж%D6p 7+6}tIGxN6)U6ݠ05{Pg|5=ڑ +ƶC5G66N5C;Ӷ=.&/556*x5j`#!gf(4:A64&156ҟ6k6RBHlS^676ɓ6Z+ee.,+P5EE6~`5BͶ^U6O v65Jʵo6-6c66J$h6}궆5@;D O46R5g5U(ɔ!%^N5t4h ?6%7Qt68mڶƶP*U#[wNͶNȊ55UHȷky0_ו.U35(21+5Ef +i`o2Lfd +6j'6mm66Q6l74̓'ն8$Q65$6Aq6J"6['aJg1>85N{+6?6b5ۘ&ɜkb$^kg25i6S6!ԵK|鐴襮JG6s06Y5v6_5h@K\55oc6 66d16&z/~oL|Q8zB5668P5k lY5oдWMrDcնc*54Ee63h&6̍5oRMn *Ҷv745FD6Jߵ4ֶŢ 4tj=65{50Y .6(I5#悶n=4? -v]pLϴjJ695g54c55f66Y%6;w645 Hj43x4d5aKᴉeD5=5|4jz6z6a/]uw9fO"6,5е)A3Ͱ 65H$Ќ8N40&h6&<6f5456ɮ74$Dq5ip=5h^6w;(#Z5쵞 U'>569C5 #ٰ hK6P65׀6695w630fOuy!/6'o6H66i65㶁N6d+䝶qL.GA+赎a56~6$!Br|.5063]55؂޵e`c,ɵ5j۶ P +=5T 6Ya\ֶWͶ5D<616ciI*U67f5S||]h[L $Wb|4 +x5\ضPk55p8 UȶS7h6=ϵ(Asn3}H4ɒ_LtL6K66, +IQm6Z<5xdܤ;EO`6 55i6zVJ<}\`Bɴa'6/gD6L65鶃 Jҗ6 62:5565֚5$3u4H5ؔ64ܛ״5ĥ6.\贊C҈o~Ŷ(h6 +76o6e3;67634,Xs>caQHDBQn5%5Lx5M6^59߶6۶^"eJbY#ST6K6f̛6<5Qu`ӵM刵5y6/mXk̵R5صhS/5(ڵR6vep6Mt5a6U65_9.w4 s6.6#_D~)a0,5q6+065ܮ6M66³}35T5ֹ,< +Pp5]L6$W5P6hI 6Y^`49,5_5I4.3@p6K{6z5zõ54͵`z<ɺ$G*596&6N7 p6E5vkF/]6IrD4(yW¶ 赯4D6b:ߧϵC6CU6Z5q(5-}PX6ƵQ6u6D6Yz0-X`u5U~͆ +5ާ6AO5Ѯ S526g,65I¶ 3H6J5Zd5&+$5#6 +s6A` 6$qzTC5׃6|K 5_5d5dT3 `Em\6Tv(6iE$U5l5*h5y\|4>'`5 6v[5? -VV4T;iDƧ63C6;5~46J167FEX^X6 +a5/Hn<5tP6M5Φ5R5_4Ҷ7j:56-6J޵u2ү526AV&_hU48q*^6#4Ԩ>[6y6i3Y05G6j66Qi5.A6Yyz6i 6 C; O$t^6~54+ٶжZ56贓A56NM5Q"ԶA^B}F04۶*)ŵص~$͈4G555j 4U6B!6l65eZ5<6cO67.m͵6L6uM6r6C86 ε?Դ4Y6[;6д4;4)6+5ٵ>Pb\V6w06j5g"%(66m(P6M76U5l4qC5X6vG6 +^WnҘS75_-6{6SDh5E6m)65Pa<?BH1s=6 6!6ȳ5:&4>@ϵ 66a6FH5s6xt^5H)'̵ƀjR 4~5!xa|*Môl0 vQg5(hǵ!?aR|wIf5y.7FԐ6 +i 6aM'!w۴V|7$.<趖W;ɶ$j6@5669 JҷǶ׎d&6ۂ63^6I5"4ET6;|5.%D&V$5Dõ?r6d6/55GnC8D;5sً6:5b#55٪586=5B555$5H5áѶ>?Q3{ضhBj<45=[0ODR4BO޵36EL26xG5Yp*F4 +d55`=GF5xS쬵6a+6aŶ?"~52h{3d$5)510ʶ,P9zҶAXA4{| (6556j65 6[‰7-3x5<65s374Ժ5H5 +^27˶k5}6U5~۔ݶ(Wg۶Dֵ%3l5eQq75'6($66նStpEQ C#4Y6#2갵^5* ^6bϣ6F/D46n6p5üܶ:4;5e53z\<5We5gsҵpDJYĵ0$5T6(5Op_=T^2uʶ66Q+!еM6brX:)z 65L3D666lyN4h66P+6Djv6M5V.6Y:6A5С25^1|@9<`r6w65[6 e6/Ե?p6~V6Ev6&6m-(@5(@52%5嗞yT/64:[6[6*'5yCrԶͶG.3{56SеNcJYh%3ЄԝJc50r5o5U5496H6@g,$2~ge5R5̷ȶls5V +5ɪMZs:6i6!4Uo5@&Lȶ5w4v ++4ֶ3[n"굫`޶5-Ek w3obl `sSO65kڶTc6e52Ju5R!^G|Q5T6j1 [965*ڳ)P45@F;ɸ56WaZw-r.Iӄ;i5Z5?-$t54ɸ)5.Y5gV㶴cʶkT%6&6V.oC545 +\5h06n661A` +':3x94F6G 1) .Lia5p6 +R¯"ӓ5q`6s5J5QS6[6פR?c^5M6V646RBD׶[E6$@50l J0r`D5(/6E|5 +µ&w2gZ7KH4n3ص~,??޴616<]*AbY˵<44Y3`fI#6tHE66G r >ĵ09ʶ@ +$EFGZE6zQ6f5$6Y6+$6iݽ56`P?bo6^6Ķ65t5T6w_6bF65m6 6\e61-H66LMtuW'6 5: V/q5൹9HĶCaQ6.6646>6l6[&085̸6:^Zi6!6M7uV6FжJݶFN[Ƕ)|荈55Z F4yv_A3(5?L5;P6/٫5*W4764ݖ46 a5['. 6 )y6Atf\VO6M6(4Jd5AS>5'=5M(nQ40:b'3r"}#d5 +549<Ҷp:[V1@i,Ŷr/,Pж +s5{5\® +G .544,wCcL5ө6ש56Q556z#Ca5鲶bg95`Y5E6|On6S(B5!G􇢶56W5FR/]p܅2{6^5.ɭ"a6@6/l't6_w6<zv +,6&6v*yS҇$+fHM5+Oh66I6õ/fx="϶EQ;x5)jk5{4Fʵ676Ǟ66 H66.K6sg6Tq551ݵ۵P>66M6-4/h4j*6en5ysH04ε85A6236<@6`^4:w3rĵ)T +A|Pk}4et59626566_`A6TY5-I.Jеg5!5K:r5xZ)64!46[~6646_0[B5qE}6&64Ī5~05j 696}&p65+>626‡5䵐;56rE6}}3|A5Țf6W9666[¶Q6!6㼵(05,6 Z 5ߘW6sո66i?6s"6c :6OMO6V5oS e5b6u65 +Զ 5V5{rx25@|?5G4˖tX嫵xB5$t5sHp\C`m6>K66"hB޶I8>n_E6\e5׶GĶ>56~5sbqHb5Z@)3OV+L4qZ 5h6s5Ŵ#ԵM5 6ُ5x55Fi#15z4͒{Ӷ|ƵU2鶀ݶ'>5624#J+ֶ-Jo5̨977Zq6b6 +K6.k[G-5$afSI8k6CLU6]66hf6 1Z5fP6_6C,cČ5kIT56s6+65Sn=p6u`660Hv;4wn6=f6>G,@ 涕{c=4 PX6ƒ 5~ȶ tC]ᵴ676'6c4r&ݶ,gc165p\5(6N16H5Dft;q5R066`6>9G + 56Mv635_ȴ^64خ5Q5=N68=66[6!6FH3M5#K4qGP5jGj6.666T6 6W,,&c4Q ՖXصC3+#6#_67%6ې544:5x585o5sM4lJc`d\ 4 6 N5qkShֵ Z6k6OS5q 5:6p5\_5*4b6%h5v(6E[6[3`2@fE56.6|ᴷ6!"'5ӹ5_ւ6Yx6"5LA"^h"%[=+5(5450x C=˵44=36*35aà)ݶ~6Ie6&5w"fCʶ-R<Ǝ>a6:6{H5ZAűz!wba>@5 38434o5e4+3N5&RS67650X6k6,{5&5 ^6A6H6Y`6 6Di5I +M ܶ :3*4Et! 3@sce54Q6R6 +/61(5t}<5(@43kbƵﶟ1YљMnߧp6@R6uA45}?6Bd5͟~54B0T6yr6T/5R6 55xmw-5666*060_b6266Cie4Gx46M 6ngWy iH4ƘcIl66H48y5F555`69`5,][P5H4y"P5F/555)6 _L663ܶ` z^Y ~W`7559O5JmuWٶ3EF5,5F"X^5_ob=Fl36R65n[5xF˦6Wi6j팵QCζ>An6\R6dz6R:6 O6h\[6L(xֵd34 6 4UAöjNѶ[4ez+2Er>5Z`6 6JH4i6G6gt6XU5 |5Xa%pF7(\ I΅ +9)d-5ȵ;TU絖05bP5''퀶Mʬ~¶e555tC \b5z&RҵV6(6F6kwZ޶=6RW66@$Te!yJ3ɦ555>}ζc2s BĶf~D5r5/85hZH5F,ȵaM55 5k6> 64 69t) Ҷ`2 +Զ1R6m6t51ʵ@k5 5ѐ̵ΜM۵޲hS565{9<-0`ڵx%5^6Wn6v5$ӴL6+[r6b]0v665.5b%6nc5=$g66! 66 G6\5{BƐQ*566dB4jʳ, 575hĵhH5Tj5?ɵٜJu^u׬6^6>WQs쵈-`۬m6bl5|*g6k5ȳJ!sf66̢7 +E7$76h666ih'ȵ=&G41T_f9ٶ85c@5X" 5ܽ64u~5'6e\4Т5m6)o6Ө6t5M432Q56=T6-6sY)[{2S9sI47TG66-Q6k2(g!$;6$ti51Qv5)Ӳ@6\I/605S|h ¶Ӳ55㔵ܸ56).ؼr'>25@6{693D5<.=JF6i@6gD66QA6b3C:6&15FV|owh6!5hX5g7::5k66I505%9y65RƵ74PL5#} +24$j6?µ4ET@NVC&)Xf4-'5<7T3f4F5yF660ipa,5}H86ʳ6e5;*n4"86<6X_6 \?öV4t:5G4oll"4|4425U^WJVd>U56BZ5jt6~v6V55t6F<+6F9ҵ# Ṿ߶ i6[65]$56 H566G6u!6q66gc6S@3ا;5?yp~56f5fgK43"bU`554s4b58>56*ԙ5ŵ'Ne婸5B 6"F4*Ɠ 6Mv +6#kU6?o6x뮷82r5~\5b4D۞6 6$U6@J5"?5 9-b/&4Os+E[ &(m6h]_arLїɵt|?wi6Eל7D7VW7\͑7:6_غ4VZ/bw4J䶌7!-5O%456y6>~6U5O2c)V5>,6`6/"bZxdg^޳ߵF5ڂ:aZ+ʹWn6l5c#n- +sg:t6;v706Z3Jdg16&T55.yx66zGأ5"3Ԁ <EP<f5U;6n6546& 6Ƶob..DJ-,On566<qixLC|6;Pw6 -5a5̵55\q6f: 5Ra69%614Y6t +56&65w5lӴе +a6 %v6k6^ŵ~QzF˵ATW6Ux6$;5GB5!fŶy45y5 6\6|Y6 uڵ7V5z6'6"4 4`6=4P򶂡eI34ʑK۬5<&51L6˙6i5WX6P6^5gU5Z6y6#6 a6S 1@XGIʐ6'@6G'l6Am6:05y'벵g55fH5$5z6*#6\66K66|86d374Y55mxC˄W鴴ȶl143346P5u;Gad5[򬵛6n3"N-5^6F5@E 6A&X6>6㚻㲶ߩi`s6&6B5уX6665ֶ Tj4\K5҃1u5:*2U505 ʖ9µ)t.S5,Ny^%{5}ܴХ~ 6?7[77Di6[64rʶ$\t 5X:6ܵƹW67L67fQ_55~666$V%ζmPk0pnKv6G5DQ? n+@dc%^B5P6c6bZ$vҶ 35!|66u5~]<,öt5457 K6K66;<14 @ 4?oȶfG +i5w&`5\6I5Pw^uදwඎd`/͈6S65굠Y6 `C5VB6Lz¶I]5$5TgJ*L6q1"55pWx635* m54$icn4"55~5j5רr5Ҷ(ു*665G5ߝ[<ǶF:V 9t+zufd &5MV5̐`6n6~LL5 L5x5+5l6}4v6\6Lt;15~65ߧIlaOs)̶ܶn)ڶ ƈ\5Q T;4J;5D6IA6 +56'm6}6#6|&ֶ5N4>4ai5|oXe6"6%6<ζ@Pdd5$5rµtK&n5Je95zӶa6";6K6j >6o5* +nF,|)4\6<6 T5t]`(^5 +TڶgMTF6"5 F!5-O[66/6==_5&6X6hI46N5*6F1`5)=L>6N.4rɶ5{5l9R~56 ~4ExN䢵?1$6}6$-567m776d65J65!5'LԵs:84np"4&5054\X6B~7 ]7.W6̶I6V\R5KM:5[C^VHRV6ЦJ3(%(4q6"66AQo,U/НfA6r/eXR466-C1, L0O2p84ڳi@5A 6ug5ZVo\6w4ؒq/kZ64q5:56$X3жx[nM6066k鵀4t5z5bz/:[6\6!lo6AN6O5` 6Ӷ56S6`6duf5{E6D7{Z"5.t5Ƴ8ݵʶOo-44m66G8f>Vc,ܵ5B&4x] K6i6)66G6b6HN&6@F6,64 GP~6(e6 :6[<6:GOSO5/5 g43ض\jYr=^E57?5ͮ~45f5_h`5@66V*5˵v۠ MδY6J6c953\35Ƣ6!6f^8i":S2qR5Bx% 6Pi6v6~[%6K"<6B5Ӧ6n<6&6a̦,x? +zxkf6H6ߕ] $9ք5Rnb>b_4446:Xns-µ2b55`2,S 0d)y$4V5MX4щ.63552"6<7gO#5R~6Kg0;U6b6R5Tnµ\`OQ66ڃ6ʽ7o7=79e77 ׵@K__O>5&6_P<6w5c鵶Ncu676-/@Ķ_൬`55*ԞD`S*6 w6C6 u5L5?5Ҵ7Y5Y952oM~ѵ. 3XLy-l66by6*W5rx=HѶx66Y6&6Ā53,4N4t4]kA|FϤ6f) +6jT63Pq5~55N6g6˦6z#*=ζGF4Cm3!(6D653 x!@Yd{LA6(6 %595*\-Z6J5|ue4-5z35~6e5gY}1 1$Sܱv`65Z6}T5賦ڔ55' ClͶ'Q6 ]6֢6h5~Ԗ/jQZv6O5ć5%N$708z략g5@5A3<LJ84$I5C3F58Y4\=cƶqAnB55L c5 6_5$5X6064ʵ;/\ZⶴgT66H^6V6b6?5\D̶!|4Zܬ6 ߶ ᶁ"5tp۶% 6uq6"6)4g:5=x5!b;o.6KW66'ҿ4üE6@H6L?Z56a[5ζaCiJ4B6Jb(\,每6685;3=64 +v=Lʵеu0566z?&4<l趎Dl_dö %/5=f6'kh6>506I5No>@!Z(k;B_' 63t*ж:\:ܶCĶj%@eL4.5鵂޶,5.5u4AmBb-]651s5hl5x5|5"Ac}54*N%O3?5$56I36H5z5_ζeP uV{6n_? 5aX4ơ p 4 ?5j6D66 K ʘVAĶ`ڛ6a;6BݫYշjҶhr=Mf566{>6g96 64+FH46(6g-L~E5 LJ?6665^.C56 -15(qV.0"d536v6(/6&66za056l60l5g6X7 r7z7P7L64~.F0޴#zp3_6l^N6q0M# 5r6 ƴ)05 365@;5J685}6s6z Q5,J[.P65qҟ Z4<5k54^4:6V%626˕6Ԩ5:6o.6b'6'6O<[uDSb״ڴrV3o4sR4a˼pL6 S6k5YQ4ݵ󔵏vT5f2>Jz52y5,3VG6b6]-O 'W>׶Ͳ#v86=6?5-3o[ݶTٌ+.HXjj5P6a(5O +jQ|5Zc qT( a 7i}ȵ 6Z!85';5n$6dA5WӶ$J<ٵSj5JX SݖauS)3*[%،h#׵*5$6w~6J(h5*5d|3*5U5Rk6l6ۨ6u6B66-eSIԵSg5tNѳ/)bl4e?6(76465W8UE@㰶@:6_4ӳض4PIPI5>6<66ƞ!F#l(S5+WеⳋF56+@5x-e! +r;6>Q6I+Bq{X5x䶔Wa6sT.6d6'嵺/on2%=8D!+6d6c6mյNͶ6u5 53|۵[]v[,5ϖ4uB3zAz'µ'ʻ5ֶ8X` +{G5.{wѴS65\I'LG6D/6|䥴gƶ^Op5]th6N6 G6A5U䕴Mך75s64691*wmҵS>Ey]6!4k556A5h_~IbYw$6O]6B6 jöR˵<5e\{˸)'ϴ1,6p6`6>6Q6ε3[6*#6X"666B6V6p\6 శR=%X4q6g51},w645G66}6G6r^'5C%>e¶+ +5^.ڶyֶo855z]I|o/W6u6`5l#%6!k6}Y6/6x6'&h_M5 65ݖОI/lXεhrr6u6Tww fF"г\5w&5Kj^?55W5]53 "y޶5N=5-=U5Z(Xd6 +6~5*5RĶ@4ǶTl6mh6ʋmD46DAD4j6 +l#6fM6y6VS65[`j^6M56at52|&4 6o5 ֵ3Ș4= +(5\LY5ב5^޶5Ƕnt6߂67`*֯崓&Htǚ (h +*_"4E5^`m<5C)bpj6*R6_]T6'p5)55vcS񼈵~nx6M6 +_>l539F6fJZv5id) K:5 54=EɵL4r=|4&l4&4dڶ-[.}ɶz_̴,s g6lp6Tlյ~5R59GL?̏)n5)8Lʤ@<65&4q +6Y"6x6+65Ҷ +fk5 59Ӝ3W65*L663u66 ۵q5z4nqψ6W,6-5k6tS6*Ŷ5&5J6b6]p3o^i#rK3604O3]',6c6Ģ+6 465ʵz56M|S5|Z5Ur96!6k6'056OJ4Bo5Й56 +Z3䐶E嶔"ƶ2+5εB_gvG5Ƿ5d N#P[ ϶춯ϛ5Ft6l6bHf:o;5k6r6X6<6~5޶6 G60 6 "4˵ +~45µ^l j< w55@ZdiT5hy05(`bj5ѪԵ.i&2$O$ض54ҵXFq6pC6n)yGx>JNr +6ˆ'7Z^5hd"61TO ]5f6t[66b6 жg6@6ݗ6 +g ;۵ˬM +-^ݶ F~^55އ6Gԋsv`5i6VU{ +R{n355}o6wh5i,l4w:ŵ 5C6=i6=|557Ib Sz4##6+"Զe5,EcY5C5G4봷X_ʵg4d4C25/6#v4|4q6Kc5atص 4hu¶:w5&@ⵍXĶi%$E"-j56BL5?#NyصI?~} O5Pܳr0"O56ZU6(7H:7-%6@{p[6Mnf5U}n6C,6!5hl61,4uԪ6 6W54Ĵ6$6|Q6=AO?440D5r6p {5aX5\p5)6h66 6IV,686IG5>z5nU3ȴXr5 5̵YNV66UT6 P5nܵfw8^f6Rq'9g<6_6>65_t6/6ĵKԴ (55D5ѕn $(pP5mO\r.؅>5`66< ixFB"K6^6|5V-6"ٶ6776z*5$R抔6.6Ϧ6/l*z,n@5൬`4{~3\Ѷ72n<$JG|3u>2_z5l6Dc6 @4-А6 5}5{~pp5R_jLT5n5DX*ʼ@4݄6W77 e6~G5 ;Bض;㶆@$6k6y66-ŶC3)S5h64ӵ!45#|Q:x̼&ksd6zy26k6Bs4|IBҶ9n5#}kxd5"6 L6Q~66556Q~38vj-[صQ66Z5s|&(,ҶNC6u6,B40h5k5P64ہ5k@4ƇOST35[ 5(66W[ƒqz_~6'Q'5w43ۈ5&+1n.5 A63d,oڶ,Ȝ5~4wz5!F5#6W/5@? tռ%h\4}궊Ƶ5.{5J6"y~546E,6?78\Y77P6ڵ Dq:h֗5"/ 5#4}6 66</XvRףk5DZ5~o5֕6H6>s!BGt56#~67"R޵'$c6{66c5{{y5g>[5T3LP5F26l?5/뤵.6 I5&Pՠxv.ҶH$6"5IXx~45Z|sO;6!_5 X1PA0[6av61[ôZ6l;6J6Rq5"4=5õ0@E4y6[ +6.>6:ZjK5ﳼt4mo5V66aeD?5jD66Jrm'582V8&65ۈ~CĶa{k`-z566M46`4 46\67U6ى6H/5.t5$,55R̶O4p'5$Ƶg^5yX5@ 1p/EDF3TP%{>369o5Gmѻj6>[6i5OFt(1^d;4U26HR6cfq`H[55  2`5 ,GTw$"W 5n4ܔ?ﶁ!¶~Ae$xP6!5ɵ<l46q&95436p5`5<45׶*nnnqѕ6u51ٶ1 5yC!6@5rH(T6n7TQ5֡`8,5z54$hj5%:ѓ{5n66eU/նeI51(6:6ƅ6<47 +7^66I6Bk6 5+54R6o66 5Ե"s;˶ 5U7ex6 +!7q]75H66/5 %Ґ5576q(66):X L&sn6EX6*6=6%6$65ae5dt5@l5wJ5)5 JصS5+|5tbߨB4}g6 +p`6aնi,,lB(R45|Q5c676ƃNa5:5_r#X^b#Uf5r6 v=m/?&{E-Tp5ϖ6޵ӥK 5i4iͶ=5B>6޼;6o65QX56\5%,_5w6!D4آ"aΉ~iյyr4Wl665Q4x@G6\6kQ64h9p^4gB5T6:6]63<0] Kx )x35dF6l6Z׵} l*`5'<6G= 5.Ԃ6Y6g2xR56n5B6c/ *34666)T5Oٵi&5K 叶|486z64X5 s }o?6YL6By5$;AmVB ʨ' {{3ڳ" +^Pr3Y86+5VyY*2{,65Ԣ4Od6/w665,f3Mx6 #6_U25 6t\mfg#_S64Kp6`O6@)5]]"6a6 i:\-lN5еL(|""o +5&I夶A c367y6ߚ5 \6|-7BT707f7 6u655 6)55w]@ql1D96,6G N/xH6L.64G/pE4;7(6-r676X[9gq~}i'5lJ6y6 6> 5|6b 6w&ܵ_GqmLb6ۢ6l6V5c*5Zb4+|?ZMеd66!i5g:>咳\53戴vLE tb~574 +tDh6d37 66Vⶦ6?5y`+nhYj5d9^^z2ƶęI9nOƵY,g?6t6A68Z[;6nV6g6#hb5}?66'KTݵjS'5L3 {TYnE$uQ5 ?B6z6 l6 +5!5"4U6x25D47,h5ta6966IL6rҵOҶo5s2szM646Sl l_Eq75y@϶pĹ%CX O'63=6s6>6>TĶ8m)u5/S\6&06Va5o5Ԝ6JN4671#϶~5r6' 6)8峪Nܶ ۵o76!6?*_5Ӌv2=hy,O:/ %5L5Ix4!6$66A6$ARވ6.~m5G(y5N66Mt35B$b5vq6bqei8fq4MЏ^6 H6!)6W 4|f޵ +,ֶ(CK 8Ch~46hq)6 Jv Pߘ4/ŭ6)'CiT6-16 +5j67s87M7E 6<6Bd #s5cm۝56\6551 KyX6@26@5Rى~q/6T6n6'66O`cԵ1vk6606T15=55Kp869U |W6U65˚.5{6W6nt x'.?4 +8Kn6!636h6R5ӳJt4C/:={663$Px4Q~x625aDq*g.2D5)_@5(XϤC].6ܥ66ee5b6~6&5:)x൩@Kx4U5k.5o(J{9"$j5K+54=2+@򌂶{w~6Kuz66<05w,45̭ue)6A6b6_5-"M 34}{}A ßN6b|5ĵ5J36nT5L_OV66q5¶RVx 5yx648_\t6Ȝ7M747,-7Y604&oh𪵗4Z:ֵ6uЅ:ŶA=5eP63BL5B5#&54 +.6 n>6^r5;>66m6En6x5D%AԶضv"6ִ6:5`zFz@=Kŵv ۵b~vWcw6<56G$BL4513M " 6d5kܶFwGj6M|6g6c/5>5_ 5?sd5;5n/ 1lU_6ӿ5F318´oɶI׶O56Q4)ڶ^ +z65F4 k5{r6"t4ݬ_P5\w,Ҵ586q1fpğ_zqp6-05l584v5h4~ +"դ$dĵf^i '$K*6*@6T5/}QL0рA5<564bֶaań6`_36D5+ipX +w.5EAJ5%\J5E854Y.KL.4%\x(6$66nG.6L55##齶$d;4Y6_5VlUXB42AKܶ}BIVC66*?6 6;696E>35dĶTt9=ǵZ䵩^\_4eL5Ù5ŝ4?`-˶*$5L60Kiفiy=q6 6055Pe6>5!w+!C6_!65~6B6.66΄66й266P6~5zZy.hM45N3"k,5'6y6!-K%5$÷gh"955516+}!lc6u 6(Fc67SG䈹`61x5X0 +5;L+ׅ\4Tp6W1;6Rx絲$zh4=5m 65+ڼ; 66I4W mbζF +Ƿ ;ݶʵW9p4"f6o@5eV8R 䶦R5S66M7DP&G 5Ϻ6 5Nj68l5 5[.CC(3ƶ5浨S6Bc66K$3Ķ%Z" 4[6D6c5>f@,#L,Q6X6P̮5W4謴z6|A-ZDM&Y/6iT>f58667;ˇ"My̷"۶f+N55g5`395V6B4W(_HejڶWXK26T5sxgt5 54-H,6<.657J .5PA6Ȁ686&3`ov}.6,S6 +-$5 L6m6w5wt67,j6(X54,1N +ZZ5847U5&5 4 H iv7$5ɶi;dABk5x4^6>66f7V6 5wz5V}5Tm綆ב~ݵD3t5"6HA05w 8FSޣV*D6Ĩ6H͍Fc;ykv6v56)65*6Wy6 lh46D6:6p6֔06ٟ6W5e5´.d3A/f24{5N2M5a c6,ɳRҶ1>4$A6Qz5f5j A4h6 N666@5f6 B6Ѡ5*Ro6}6Ks1>Z|6P6C̝4v5ژW##0v.{|6nf6A69R4'#zm3}B52NL p5y3tm`4FY6;j67+l5dͤH/䶱?L{9b5En6*6%5#̶j!ֶpbM5o'>6Y5 صA2505eXE >A +6N63J4w;b55%8 6Ϲ6tICp^C?57!m#66~6>5H66@r55e3xQ`3h +*<6@6z+X}ɶMҽk<6)6#6M6򵕂ζB NNm(n4&5|aTՉԟ⡵ähܵ^5J5ֳiµu5j6[g7L5kڵ;-56Oe6_"9^@64`U6dN6ε&"5b{6BXiǶ´6 +67ք/Z܂a+Q5E6!ɨ6.69`&6еಷ6L<(5˃6 +*6#5R +41T5e4L5у6:5P}3|6sⴔd" j^26]c6or65fn5Z6q5*6lp]6*_{kJ0v[[2v?d5dV6أ6@1GfW8TD82K666 -t{綔¶U綝4t6E¶nϘ6{6y5:5plX56665a5w̵5tYI5RH-@(ZW55R6A6<pն{ 1/k"N G+tԲ5tK[6 6|5oo/s5{$`hN6@K v +0ƵL(d5!#5B5?(`5Ȏ26' V;Sz!ӵ`y"4y:6F6;?G;]55 }աnU$!x `:66gfYNqg6vA6 +65B5t5U6YW5'Ҷ>ԛ /~46$5凲'>ڐ6H6L<356#]5*A566 +66FW@ޜ66]j1y6HfL6"#76c34h^)E;6&6ʺ4n쵶hN4:v5e{!ih(4;6bGѶ|O?6x6؏D6Xh;mrbK^5 6 65`45浆OwC( j(gpZ<5&ah66 Qµ';gɶzĶN,6676 ,D=(۵>ǥ` 5Ц6's6}Q6x6!Vζ3xyN6+3|ຶs!-ӵF+/4ն6Mt4 +H6/6p3ќD@"?6|6n;jen'L>H.`>br6v6J5E,gе_5K5\66|Cִsߵӎ(5"5*G\JLxR6EF624qNT 6D6k64EXU86NEݡ86s +>U¶Y54!TɶiF K +ej&44e6/εٖ6356j6R8o6v66e6\IQ7XԵDLH4޵ʿcm,6H\6͵9wYg'5 +Ƶֶz(6159 +裔-ښ,u5;5PSgP?0H" +"56~S8@[6=6wJS,̵6#p;5c cȶ>VW5F5\Xܦ23s4ԥ3r"6|68Y`673r'ܹ5f5075 -56:6;5Z +MC6A_6J64" uV76Y6'W6i5c5&F*?B RP@')4r4T@;H}ݴV 3R/6V75BHkL55y34C6qs626QT*+56>`66=6cV4.4Ɂ5`^55"]6P6r62Aɶ2S6 263/L75(6P OiI@6"6iY6-5{^C.'#P5 bX5MU7_.66siv6%vE5&KB5=V6=6Azw6Z57 U65턵B'/춌Kq5c5[1;ܵ`664H_ tC /5/$K([ܶѶeY&6M6:v49Զ:**+d6qI5RXY=~6x6"5JdдUT566ii6(f6+6?05wb5J 궊v\n~4$6l45LP:{E+6r`60ipŨd5?6<6D5[J6 4葬6q5\`I%59C$6VM6P546_5 5Y0a:7ȶu V%6G>6zld5;p5ٶ6CE5ˏA5g5]?;B3m)6ƣ6Sc4,`3sPťūP5)u55?6j3R DֶK𶒰E66F6M6B,6"N =O:5ȿ6#6X63 +Do+X4}x*5ٻ5f޶Z1)5lv4]RﰵPq),} qjG6\`6c=6;4ݶ4=6c9 6w65oߧ0S5j6@ 62eT6qb5ʏ,˦4w4@żcJDwb+B6-l6975KG Bn>C1a6(5#6+T!(Դc۸67l6p@536?.6Bp6.65%5<õ!mO)5686.]5n?6;n6=5K65#59/564V8K~k45S6K5S|8Z.Ww4Z5h`6\604ROҶFؗ3n{Z5q65zH65{66d6sѶ~w6[5J3U5ɢ|6گ6&ϵpF4P2`Ibz*vXa5)X쵖2W\ib{ӶB?.bF5s_5R>}"^5݁5 54=K.74Ҹm4WͶV]]56+*6[Q\7 5]6Vb6695h6q $6V6*6:4v uA_f5J(6^5EVk#5k6òٕ}6 7_"735趠̒65U뵒VvK>#Ia"ى@Ix3we\M662v6e705طX6G[#;Nx65+L4J=56 +60Nk&t56f5<5$N6 o +6"6`|rǶx[N555[6c5|@; +kԴs566y{%ܵg<(6<6LM556}6>!Ƕ`QC1UƉ4$D͸/~~rҋj`@]ӵ66ߋ6 6ж1|L,gG656+6Wې4Es/5neRN2i`5e6 544KF6 6+N4FhY+߼5-ƛ5>d6D6Q634ж5m;N,C57H5Ѻ|43յLu6l6j5 u6,666FSETҵҵYP4ƀX4"3VȲ8)5yh6O6\5aR5K-ٵO5]+65$G¶d5h6̵/ 5c{6h6a5n&D&F#"-t2|G#zҍ6"6m6|51b6&6.Ꮆt(6k~Ĵ߯˶ԝ[]6O6l7oh6 86 +R7Mj6Ե1NT4T*/#7E+zӶVӵiz6 5tb趺 ҶCBq576D3n 5Jȗ6r6>n665z6և6@Q +O涛騶MLN&ܶtšW6036$57(jݶ&9fY +?aT5v4h_56#6wg25梵,!%Sj ?R fk !@&B6(6oi (Ҵ 6^V6z6?50|2^@ +Ytڣf6vit6"еZ4k06ɡ5o)۶5B6Qs`65MC4P6I6u<6`t3tCp5]6(6Y54ZQX0 46'j5^_M]656 6;66JS5P6'_6.6я$6j0.K_M&LV6)5Pq55F~4 I4R6mV6G6Wzl6/ +5bi*Mضs4#\R=6ڵ6g66$ 5Z66`Z6 q6AS&6`J(>%5ŶsVb56E6 +E6f/6d>6 f׵6{66S2`,7t #EV56!67/R07$6B5mREƸڶ}U6>O6P)myZנ5:e%ll159&@06}6}Tĵ{F{F4U(Udr36C663ƶVkI6!67J-&053B52u6!6jV;n'46L딳o> AzYc563g6jB5.8366qж!oi564&n[c돢ۃ1'52ƴ նD@!#[a6 566`6S55fՅ9~56j6P 6B6)x6V,4)f55(6L5Aص5b5I+µ4p3f8H嶡K\$ٵm5z6v6e6+3 +h |guF_3T6AO605~9$;8fE6&6X467s6X63¶Cr4öeiz6PV>6H5fV56]_#ߺ_ɥ4ȶbhv  +552]jk66<6OI5 5d66"6J5qhn@fn"F۳"KR5ٕ5]x5[f6D5xR5uֲn5![$6vT66h>3h5\5OVt5l6^P26RT4"%Ƕv:8$ ĵRt4$5R5&)i՛NAf6IV6\6_o54յ1CeZM4ҟ6a֕6r"5փ6534,6BM6̅6`5ۮ6)㵬M^$lR Xr46 5eԵpGծ5A.t5fR15e55{*8V^~vT4.<66R6}7+kK7+62϶ ?굲6P6u9C1@$,8aȨS6&F6#&X>]4;5ɧԴo)O6,b6_ 66eO<>62T6*5+ҵYv; 2G$6*g5ǵֻ&l& F$j1˞5i6e5h o56{t5v4sS|./5|5q\6̵оȴ5ꈜ6t2Ŷ5V5~>ʶ=V334غ`266Sn5B7x޶=a: 'n- +56<6K6)5p4WC76Ɣ666{6^v6/D=5D4:{]5յŶT^QAbb5r566/5L6f6y~GH[!A5T51F6/6"6c"54?6(6&6V*6^5e4$B5ھ6Ki4?)ƵE565~& +681s*55̃6G%55|6%6/*ضR<^7>YME6}6֫6a_<K.0lr9ovAٲ(6ec6kY$5s%|6@Z% ;I6M636\' kJQ㶉辶7'Fv4z|6'5's׵5H5cFvUZqXzV85P5[5e555IڄTφp6ž6lbr5);F:L2ej6lY6O9Agj5s6^ö ?5;5LK[6z5̴54 |5ǵͶ)$̮4C<46[Z,6zU*/ _9ZUG]o޶d$786*15ғ*(4̱27/Ŷ^^`6 +556!ֵb|'8q4YY5 5;4`9G$[m 5=6W6ޭJ65-zwi6( N6O6 H-. +P޻ a366|h5ǕWP Qpo5Hs65sʶܑնe56&. t,$kԑp6:CA6}6tug/(qCK\56R6G35<6^߭6e5%Յ:U~H./sA55c6&-4%U45\Bh5>6 D5su_4A5h ]JƉi,H)L>pWֵ۫,&  8,4IpE{55ҵau=Yc5 t666^]#55x5Ր 5TN E5^>?9(6|@V64rB $<5t65)D% ,16,s666roW6m:6B64.D4K6"4@k5m]5Mh6G65k5⧊6[C54FIKWo95t6:6OqxH0߾l?\mdBӀ666"664!kI"r5 Zj5nߵJ;Bnt3 2Veo 4}n5Bk9K5Jr63>D6d7¨6W&5?D+uqn}v5IR6I65׵nt<"t5LBqCy6?;6t#xKv665ssi7Pa$6o6Ƒ646w 6!6as>586{gy5N +5Rj6r4趱_0q5vl6 ++ʥR65P#6{6;6<6V6nZ63d5(5@6r`6A~[IKv4ks5ꅶGXX ( 5W4x- 5 +RH,ڶLp666ҽ6g;zTOX!6җ5R&QE0!T4@?Mֶ"6Y7GA6E"}~MRi695g4;5\x69505:~2^_l56uu:5WU4=&8*6OE6Q>6;5 A5Z&65߀L5&ZXP4ã47}#TRJ4K4^4Bca4w5 /45&65{5Ct665@@6Hg66tp55CcS17wݽd5z%65N6F,R6[I!D*56{6uW5HjZc41괵,| 5y062g!hOT5We5954΢Syx5$Y66Z6ǿ6.5G6|4>nJ5(.ܵq /}f2|4󵭿66A6g64 5SJW5N5vC6966D/^-`Pbܶ,76~6%6D&46%6Cy5xNgR;?5kP6>^5F$`xSִf̵Uʶ[DD洩'4Ekb5u^5yV6O6y66☵UNMx ,54jx5!5t&I66k +i絣6Yzc6n{rInZ"6#6]6!c5z L&6dz6z6m5"RG5F6gB64 506 p&64-_=526o6@e5X6u 5ĝ(N5.M6]E5=yܶtj5)66N6:5J{66 5Iu4[mҶ rg ^a_4戴6 F552'WP{ +-<!5b6 6D=6`$5Xd9~6}#.7-Q66 6.?5fv5*Q̴Ķ r5K6W_6\6j%V63'!`}a׫355B4m85.5siG9N6e6 4Sl~pQ;dx~+tDP*M4 6%,6$66詳ob5w<5zW~n\۶lWc\,i鶯 6k(6 625e5f&6:3a4:۵l5d6=5낶籶Yĵ#x6R~sc.eז6*>6 +޲ީõ |Ih16'W6<6dUZ񰶮Lr٤JA}fv5/ 6?]6OԶG쵥w6 5p46K˶ ̶~4T6Rn6Q5p4xCJ6uS5 Pfș66 Q$MBq5? 66mĸ55䵁춣b6O6D|+dE5ԕo5صJ6%65Cif>QK5$676u64k5*ev|lDB5ن5 4چe48uL N30Cg#s53̀Yi#m5i5| +-4l5<&445D6626ܨ춇U4pTh2CB5cLƱ#iJٶx_0566uM4dS86k5\7g27Zs6¶Tt6 6 ҵt65 )JV56{f5%t`Bc4ȗ 5v76a6'g5we(U5(5E:3$=A56)N5MC55 +6Pv6#5=s [55K$ֶxݴx@e5uN6_>6 +YUM45 6w6ފ65&b53XY56l P5@ kN5U5]6ad5sEY5 b5<2046 +R5$?pUd(˵p5^,6Nf61% +dUb,4nz5k0Ƃ+tyJD4hH5 6gM6D66tFCO4 E6FW4j ZPM`̂!>b5%4p6MF\|5 6,' .?46nhT=ȳ\ 646Ve' + jZ55Vx| +x?嶻aƶ%"5k66$j6BYP^0VuF2&6Ov66o}е"") +PE666j'6a566q6;r5+k;|ɽbĶ;>w5;66"TǗYKu5(wA}5ALcϰ s4 5HqY 5SR6pjƼTu56MB]]L4"iϵ6C@6rV6h; 5ҳI5y;䵩ʵNe6.ϨnK+}}"㶩;TR66W&9.Mq+y5`5$6(v6ŽzƵL1 6O!6J4_|_ #5)ܴ5>6'Ap6>625&4"^3 dе6‘7r-77Y6ov6 +605vFVt556>l5y`366BJ65r6gӶ$D۵oKe$mGw|66S42N63Y5"z62n50Gn5IF6J10뼶g,,sBs6-6j6_RcOնMGL¶g!>,3(+Ph1)ӵ5$8RŶ~,5SHU]xqQ566n^Mj5'64pT̶謵&%y6X6K3ԛ6D46@+6.P5`6N5=[ST.8r.66!4ixDq66FLMH"2[ +T326an|5i=gƶ9s~Y>DP^01N8 4DJ6u655yL|V2۷gfu6`6Tw5@|i6Ӷ5n2jy61[6Y5o7h5kw6Od6s$kWr; 5,0ĭ^5p6RT5S 4 o9E~>u%.u!8H<"4G<)O+PRB5m6d"clIH69#6?x~Gn5;6eM{ +Eɴў4yH>6~=6l&RҶRJcm%GHR66}6!ܶ;F U/5*t5R6685~Ӵߵ3U06?3]BYaUE5|(6R5Y58C5ߪ6-:6gIj6j3xj^L^~'l5e6g778676߸9ܶz3sـ5J̵I۵ʖ_PZ|4: ;44񫗵5%6?k6DN66)⭶ /,[qL6`6)6R4z85W5X68X6L]YBgG_5 +1o]ּIs5 +`5l5j6a ǀ>[X5P5z4Eܶ$ Y@6VC642u5 5FQ7ߚ6R7 76;54ݵPo nH^};/4!nBܶ 6(mc55 q5G55 6fH56L󅴽X{;ѶL5z6J67f6v6&xĶ{@rjZfʶ5M66s6 r (>ଊh6浗Pqs67,R6<%葶xIꃶ˔5Ċ5(ZI5O5,e55δ3 +bcԶ!BE5ﵗ5?69+F 4*YV[&56*w"2DR J5t5XbގHԶE=5jȴF5a5$ѵ 6:%5?RͶi.55>I,'5#5pAeB#5 w6S?6Z7z鶀-V H1`'B5(EƏG6566w4f=s56<'|5hq6 +6ćyT2Y +6t6'FZ 5^i4֢3;@4|Ox5C66OWɷ0O4f*6!$66si6H5N3^h秶?嶧[@_%p^6 V65SN:4=58?S&Y&mk涏εYV4x06+-J4l㵉}qGڶYhM~5дd504"*6n5;"2P` [L)?5N~5tmv5>5f$6 "06ޗ:C# 4w~&2춞x4Pw666d6_6O&a_RbEVq55+6~Y5޵0ُ5~6R%6D +46|YoksT5g/33* 4.86ⅶGX5 }6p$66;(5bn53`65;5Nl55uI5[6Ij5≞485@N55)5= n+>t4H&5>616}_5;H5ҕ6!/p{]3FŶ(,ضXH B赑!0{. ͌X5gdUʜh=c6Oc69(5M6 ͝6694wT6+j6255e6(9 p*k,δCw95h(tP5>6T5:ӶH.˛ܶ{'N=}4>f6R6 $55Ӷ0=5ZY6VJg5VVgQ*55H67P3m5'p6*U5]54;ڶO5쨎㼶#{⶘ Y~56H6ƭ365K405,uh.5[7665_r ~a?+6&G5L5!5A456Pe0ܶrb6 5A@4gK6'~6,| 5:35Zwە5e6 c64(516)MC6W6K5c5hH5Is)ViŷP`3);~6Ÿ66k +-궏 +i{[W5,6l3*@G]a ?H:0 8Cz5dxؖ̄8c56 5Oϵ.15ikMzt5Ί>ݐf\4!Z6ZȪ6GI)` 1F( +ʑ'6v6;6'C356@26r4鿔5(n5S]ܶ8 l<j!0ɵ`6e6nl>4 5U5[=3ƈ|x5g6&6265sY36.Yh6l6$5z966K6(54 +6 6q o6[C-a#04d4<5W6 +5Œ4Qwiٵ+565b \4𚈳R5Q<|e.z;@(J[Ht $Ͻc4=F+p4S5']s4 ^ʶxP9I5Y'yR344'g5s5*Y@wY(4p{2͵65VJp=->ٶ/^L5N6ɱ6K~C85K'25Z67^6[6V6Pa5ޯ6z6qB#<`K5 +54}dť$ ++:``T4\6f:5 "*su56vp7n7o7DkX5v .Te5z66Q6y6N6T{GJ/4O25VshX5)5uY5ޣg&N 4^6KT5垵 *6<69s5" $w5mJ5iNhε@566o-6ls6@a50 6p6!"4^5"5-Km춸ҷ)ED4 +66ӨE1L4%׶Il<赶Y8|2ڀ5*66𐴉!|„\H6%$6p`#65i6Ex6<"6>6:43 PDnCɶ`04"ᕵjNE`vB޶IXDp'5oh[5 +6)R6h˵ƫ>S@4#ۿ+1 5ep6Ӏ6 6`Z64FhR[&Ŵ~5` 67m66Z3F9k06T6K6N6E!6L5\D&mhjN5T66Sҵ$gTr5x5h5T4~ l5-lwඇ5jUȶ,{#]4 63 65BJpAQ5bb5+8$C'2Ԁ 5l +6V/IJB66U#\52i@5紾wA\6&5@O϶t`55kUa45 uXcjU98Lx8656U>:5ֶY-k4ҵF_6=LO6IrX@XCo6i͆6H5O4d-6"55ս6ڢ6z[HDӴ 56ٮ4ն?ozU 55 PF0BH66v66,7`+R7q6+&{3462X66 ?5p6.4 w5W ,jj3Re-@}5Hk5w4`5D5+k56:5D(gE6%p6s45&31N5A7E6P=`<5 764LH68Yۚ6q66 4(4b4O5jom3 6l|5'3)j>66{5)`Nd46n*5>䴿>b566X6<66O:866636¶zɶr$586@h6)4N6%6f5.##<;:ó1H5p5P64-H% ޟ붏5644Ѐ[4Ķ V5T65vXC5_li5G\sCz\oG 6 6r6.6ζp' ԵI6-'6T5 jVᶋn} 60 7r64wo6Q!5b.06\6"6yV5RJ\=F/$5ɽ6N595(DI5xeb456 h5594u2S55;8浣5&UZEf6H66%55Jp~z~`6YS6`W'46K515G66,Ѷo>s 5-ΒGc59$ZHncgjo˶5a4?%L36B6O:J×`]=ɵM`1s =v6@Q5a=}ϵ6E6"݈렵o5168F+6н@6o6*ܪd 8^6#5R5o95-6\ 6)N5Զş񖶔ω4H6o-65x6 7Nl647)1?5R;6O*54E'#l/ŶӇ?ܤ;,2@a bq:QM554tдolc޵|pܵH5q6HPL& +BjI7{5ZZ6g]7lh6]670608ȶ*KTS(515(P55~)\B5"6G6 L6;R6H5A6''066{8cM4A5"Z4h45R(6 ^6 +U3*_ർ6Z664;y56\5ZZy⿳o6{6i}26H65W{8rs@w|6Z6$6׾6VZV6n/59)z*S%*b.5O67R5f@45{(::4вjF5v={x~5&5rv9Y44@nĶ6$7]7{78ai>6_6 +2vRV*6P6r6u6-/5 +R5|6" 36?155ɳ6i66}5Hx >\5&56ə6|H6Ij35 C665ƞ}5~8qP64q´a6Y5M,1L66˵5H3 +- ed4[5T4wu_DG5<6$cj9Y$e$H69 x6!5AҶ56&ŶJA6C6j'('09262a6!66(k5g> +5?60-55T?PeN2H6Q6?5Õ,"b;6!855I튶J6 76x\4媳C춏n䶗V5C5@\tKT5ڪ5&b!W'A[K5;65O~ε{o-ll=FegD5~L6FR *6M,& ֢^5%`7196ЄS4qR8Jweo56=$5%5޴J 5VD4/ (l5.5{06Ն44ު6$686A58HߵMp Q\*5鵵cb=ly[*6Ld6G:F456nF6ˉ^6K޶ 9 5v6`6Ək6w6S04_~Lmζ+൵!E51u6/66)M6)6b6̡4qFMpT5̦6X6z6^aK6ݶ|:JеD+l g}]O3[6A6 +9Md=0ɵ ~ 47/7p7?7W*4:d6΃F6EJH5?6*Qx66(5L3,d;j}ѵ:ֶ%ި5(6xz665$'E*d6#7k*7T7777Q6yk06n#6t5Ĭ54\6E4Y@5s5MYBضdf5ﶢ܍I[5Qzdĵl6lf66P)169"OF6=6Z65P7C65k5p( +=z!mKVgS66'6"55lL6J4A46I6 +"4[0B<5P6?f6Nbr["MP̴ +%6FL69Z 5k/6ك6D4`?QrYٵBK5159f{V|n6'66-6 q -̲4ζ ȶdB҈5R6J-6C&T5ww!7I5864`ܵYXX696 {ʦ}g!o_2I8xNIu.u6;X65T0KR +Lõĵe65 +6|4߅ն^qc +(1^@641*϶>Y6Z6xs4_v6 65R5_6 B63$_ϵ>'7'i405 5o͵ؒ5U+6 y6<4X?!]1|0O2(a"2H5/6Y/6Y@6|=p66 n7x6L^;_56b666i541kS*5-!ʮ5T6;5웳T56$5Y5NV6@J,6r{?q56o6x#qmY6@}'ct; fd5϶ U}E5066Z\:k"b@5х6z6k777Dd7ȥ\7=_I46L6j5߶%@1pB5"/6Ȟ66Wu6j|A6ƶRNɳNj:z~\ݴuO =566ވ6I˺'4w07I?78$8PMA8h867$66f6AͶX[D6K3-4v;6yQ6^:g433*]I\%k(|3(2X66!7'K5Ӂ"66 5s4ּڶeW[i6b76Q5ⴽkAYtf62R6X67H6&6-*66V1̠/Pu 6 cLqԶu665%45, 5;T 6~6,%ϳ$5dp6]X6Q5 +#h5y}<4oҵ;6 6c'556&q6y5c%Maж +56S6q6Op65u550v(N5&6.QLrԵǶ@-24. M5!訨[Ķ@{y1-O+4Ԛ36%52B %4\6Hez6!;6+h; gr6D<66:4 U6. 6*\;=ֶ%*vP,46 C50)X* Y{j5 [56{5׹(XM*+UW5C52"O 4ŰT5M&57$ղ777q6*PG47K6l6y36[n yܶ 2`eXD5iJ63A5m J!VS&\1|jv5661 n*6:.6$rapGZT53D6 FHW46|5N?$5d5*6QWi7MK7#7L7%D6٠6yޑ6 6/3𵒢4M6I66F6!uL555ӐT_ FOE3K5'84C4J 2\6+@62OJ5L6A788.i8Xz8h.T8Y897a*t5o6Q65Q$WTɵOaFC 㙵66]w$Ѷ{5ӯLv n5L,f}55m6_B4aƶt+5p޶(붪6:<66,4o2hr6:6Y6n367*@7/1_5趇j65nFO47"67w5-6d69"A4|5A:6E55;K6ێ6[&6)Ҷ&W5uEe5o򵙠nO'~%4Tx6#V5:|636B\x4[4Vֶ`AH3d6*8-5ݶ '35?`Qkzkgp5<` b5ݱ45^ᶏĶb6R6"6b5k T}6^I6^xyL5L3jf4}D65v4W5/1WDI;#6ܶU36`5eX=52w3|6K5Pַ 56m5UDW7@}777IE6+ն+_÷ hɘ46C5 m6:a6-6yK( @#h6-$5}3uKr5Gi6d<6'5l6E#6<] Ѳ4c4(@6G6jqO,@UL6 +=5ww %6Xn6&ed5'/36~ 55J)zܵu54606|6>%3:s}&*6~6T@6AD6|5ߙX6|j7G=7f{=626%4]Ѵx󶊼涠Q?*5P5~445ұ6W 61_ =춘5Q A 4#¶x]34o5604굟4JP59鴽x,4 ]ɵ<|E8Ͷwb.M6j6AIH!6e@56rҵ$hI;6 6P/5'=K2tѵ?4P5p2o瀶L-_(6w܈ma`5cioE~Y毶prZ3Yz5م@5#z3a&Bz6ۂ&7X77L7^ +X7)n6n +,A.w6/&$6M46zw 5w<6HP20<46Q؂6}!Z5RfQ$uwS66 +66vh)S)Ȓ5Yٶ{'Ti&$4&/5h4å*5Vܴjc +D[+3&s޵y6z7R5,666| 6G!556+S`xM +6^t4Ҍ¶:6 6M6_5#H5^6` 6^g6356S86m) 5POmK9%54es(cH.ZҶ}6 5ʶ;`R 55]6,@4)528'_Z5a6[i6H5u-ﶲԶ*6HK6Ũ6?I!嘵5`6~6?6!5P76)ݶ–Rp54q4U_('@Y!ҶK5ʵ6)~6yö $ݳi686!3|6,,6ץ6R5V4ԇh5z5,ٶ?o7wJ6x16#5ЂC-,b35W.6_$6 G5ZZr5!@6`Ҭ5{tDd5&^5Pm^5)b6Ti5214O5ȿM6 6o!5kݶc.N6@C6crJ{P5I֑5Jg3Gq [%5c^5E5q6|63< 1=5v 6"[6 I53J,`6W6&6Vt63F6F5Ɍ4;f +}|>66f5_CvJO<4s4 {.>OǴHh56c5¶Ge\dJ5+5/_bJeQ!06zY6(66=j6g76&5qK:fJRf4nb6^6S5g$6hE66Dq5ҳQ5DQ55OHH5y6t66x-#gL M(55sqy5)VH66@6-N5LL46 A6)60Qŵ-=6r*6%6/3毵rG.!056Y64 ;;̀5ڷ)w?㶍Ե2`$ёⵗ=<2 赟F5d5]^6P6{6T_n=_56E5[;4Kj54ې\645:Yj"go >7 Pr6BY6g5lMN);5$~6A6 6$U l46=!#6B6zo5hBo fa6eu5 | .)&ζ>b¾os4W66Jj5,8Mr62F6 5w@j9DS6|t76DBMB5 +j4666_6KW605%64dq8]6(V66@U5IWb|ٶ| RQ6]6P^D޶ 505$x,_'~W26_6{5᜚ K6Kҗ6_6Hۚ4-{Sa665:5+ 6 +5uh5Ӟ ^\&ƴcQ`?566ȕb645]n+5-5L6e36;F5=6.6}3ŀ6M6w662̴ķ +nxa\Q6]6{5rP +׶uY2bB`6Mf4=DdP6W3e :3lRе}JMJ(ȶ>E#.ƵqɴF5U#3ʵ D4̫6k6 et5a5r?666.4nĶdgJM;`586a5\t676`ն [KG556(񇵂q305|5]6(6S55 5qk4u8Oյ$n!z6AƦ6 `57OL49YQ6)m55262b266q68g~]t]ĎC?:6! 55>*5x4\x'=¶X y0\ȶuDju/|T#>Ke46v^6ջ656)a'QL5159 355%55޶W샶LjvH<{"c5a67>7\65a5544)456r6&5 ;JǢz%6k5pD`n1;eg˵~g4Pxz66kNLz 16I7?j5NҶZR:ԶicJ_`6;6 <65.6^/6'g4%4G8ضjcX#^56o65%կR,[ +Ҷխ:涄45V6]%5"} /[?54N- + +56g5춶(󳭃6u 6 6P&5GD3.6!X6x0%]""5785ҟ5,5/6gKx=6/i66}Wtm5ېK6޵㬶a<򿶫75XB6;Cq6ʊ7H7.65j6D6$4Ih5؞6Rݏ6Y3A:&rM5975+5[ߵ555ɬ5߃66Q?Ͷmf浿Y5g6J{6h5~4Z +A`Q欶J,6K607';77~75PڝaM5 96r6;5x~;6o77h6eu5܀e6[5&44=4( 5+0H6p665V`5k}5eaAGópΈ;k=bof4<>uҵqv4c5:5 5Ϩ5`ߵ58'5gz'-Z2266z^6x\JUH4hv666/'r5t50߶l5}59*aڶ?k56(6&jv_.45FZ?o2v\."϶Tr)56"36e59Aq cd +6Ҁ^6,hP*R{ն-[ yt)5p6T*5z61Z56W6 +Zz"5 6n@6^4 +vo]4*5h"465N5X*6[Q 6Ri5F6556N96$6NY6 56B96[f57Ni7 7T63L}F656: 6,"6M5VW35V66䵴pԶSͶl56.5 5Ї6\֤5g4Z8|~AD3%W56in5T=66)6"<,[>5`,6E, +@'15h]E6xN͵55`ͬ۶;Ҷ5KF6h"51p@0=&L'(^l6(N65bƵ-QE!"651z%8:+UiH6a6Е5L95_D5dB賶_yS6*6 54_aͶjH9!54c=$yl* 6X6*6yP64 +7#7077^6p1yS 5CZ66`>5骶Ճ4x466{c5E-F0cA%@@56\`=6p(66<6W5Wᳯ<5ru5-5b5Q&Y̶1fZ690 F&6hz6'5oz6N5⣴4r"5j5;е5ȶj@xSfZBOԴ7Tߴcm%3g6D5ZضH N69%6ඒkz5<58ǵH#F6C<6ъ6G5m6K<^k {O5t'56Uw*f63Ws6y25WBl㺷g@663ǵi'a.I5!<6_J6?6[660r ϵꚗe5QR4ӛ656Z6 |0^ߴ 5b6-"56w6656y5󳤵Wd5O(`6e6a,65L6.6\65W~6(4T6c+k6r78076 P.<;5ɵ5͏S6\6 Gr|4o653H4Z+5#54`66616b 6r01d)Z4މ56 53&b4&6K 6x4a/h5j5ݚUÓV#4 6 ru+6.\66O#366T6i<4$g|6s6hQ56\*5)ֵ<76&06H6%RFmjʑVq:س76"6Wx6/GO\ɵ[5wg}50~5j{3;@aδ[$tm/ x=65s66.a5z׵ɻIyеl6Kr6@#lL05645,6n6;X676϶,Pն5:8f55R54T{<6 6<#3^[J6655u5n-5k){b=/}4O6!nÒk55_5E6:j6~6z6s5c6g7 78.!8$gAdG4K6 5ۑM1rK686_`GG45W26-V55/4P;Ŷ+Б5DV665JF4P6q(652z4„E6S65rv5o6;0?k67",6 5|4a^6(v5}565v(6Tq6ȸ pu256_H5"Sĵk%<@XȶQD(z5 5Cu5"5565 [T53V7?}bv4Ϩ6J5AQ^=߶Y6ϻO78Z8@<7ζf¶Z56KLZ\n?$zm8 h4eT)D)l,e)|5߽6(4oN T3.;5,5{G 3V.9(34"gF6B){66;t6t}6n5?5Q564V66 =+1_ȶ<% +dcJk24 69d4j0Q4$6R(B3tն02>S謶\T5z66*E5,ʵ4[5QbJ 5w[@55s옴J5w5ㆴ֌5E676>5O 6 +@[b3Ž6y[6Wa*^g#5:6bK6e櫲~6ı55 +kJ55t 4>x5^6%6%D•2>жo{2gL5/55? ӵ 5ڇ555>܃݃56HG659]5%6ak79 8I8Ao8736qB6ҵ"_0>&\\62be2)5*o6l{*5lRBEStM56kd +OWsxԵÞU05Ѭ5Geh#7.9 5Ѭ6Ӷ6rOR65O}3&4C.56k +7V Se!ϵzT4a6 +5g4e35 6/ صe0'6y6|6lQL<^26 +`.6 6|i0_6tA6{11J4TZaܶ$2p>%>3{B64prԼbֶF㊗5˘6Y05"K04I/65϶H36 h3U`5kF$Ķ!_е4I6e7y8-837lk5lI3Nf 663Ђd ʶnf/RLH46&6ʵ8'> +3 +$̴y6ݦ6`LFҵ'=b66$޵0K^[5n5.쁴56SN|6^=q3K5NW534H60>6 7̵t!445AE}XԵ6lϲB6Bפ6"&63GW6:6=56f6y5-}]4PB453Z0׶۵r;O/dԴvw/:n47[6N6]85,A㩉46:T5P6s6̊Cӷjo6C5W415:6W4C7e:NNS5<56?50t@%3pVYҶEI575)дrd5L4v-]56̋6*5|p$vvGj}4;i7;~7e87J*&61[JF´- lgӶlӲ^?Px&tg5X6[lJ5GʳE{ +6@7O5h^=Gv5_F5r6u}L"FV/oR6G5?.εB=Oja5NZ6,0e55_6T43 I`ze +y}ڶp44Sû +WC|u5\h"e|]*5U5@!öA=V47zϢL48ZݶQT,8a55ٶ.]{57\5Yz*jc< 6Xe6p67~xhx5":2bar4Dж6c7׬6z&7Q2ܴ`65A55\5ٶRw6u`667x@78 }77GX66kR2Ֆ0w(@A7G*66?5sõ̠ 554t A46D6_599uֶ4 6$C;(ND?PgBʶ C5j52@Ֆ5l&*lնƉq6c6i6C.5Lz'5Ql6vR9>b96u666,.C.6r(65GL6Sj5#7,4066G6 E6乵vѶ,M::0Su4L}#o9Wc59}6̵6U5p0uR56A"6-2555],նBx5#(55f5L6$56@65X5;h9=MжԳ J5U 5B(4r*K66zw16&65럵JƲ6mJ9f4 #T86d747A6F}ܵ/ע5NN59Cܵ5^n{)=5F86=6$V5<@[h6ڰB6556qQ6HŶ$'464n6ʢ5tqU4 + +]* +2B:6M4L55XCζ샵Z6&4[4(6`63FO~JC45ZFٴi56 H5* ++5C6b4]6W539Iܶ嶖6976ϳ1K65>Ŷ5ڣ5=h`ߧB6J65[j6Hh7C77 7wy684b5آ뵿C(5WW $L)~5ꆖ6-M5 }\5QI6M5!XF3ƶCfA6 26@`QJc +ǚ()X?5\ 62 D6 +65qrp_]/+ö ^6p 4fڶO05 6aU6|5D5b6?6B5Rb6=r6f@6FP%6@}5;VQtv/68 4vݐ5Z:Ȃv5k5u6e6J65yV5 ޝ-%ScIx^uﶒW*<̴B 56-61@$j5!5Y6I6ֶJGnO5$^5ضϵ/شp.6V6ڊ6(5 Y͌&[5¼56b6{6صz4zH5|LJpjx,v7 [7 ֵ}75)A*nQ]D6c4,H56£7:6ƕ6UU5QH5Z<61~66|7 +6H #5f-5vcW4\5/58%*?5566K5%"<qF6z42i_76*6C(6S#䵯O5Tڈ:*t[T֏'ֶ2Uʷ5`IgE71nd뵵,66J6H26 5c5IA5K5JԵ.453e U9ֶQPM\*d766sfuijX\56;d6`6RO4Spap4If55-5Fʵz 655Fe66rD-qL5T7851:yಇ5⣏xTJ5G55uX#*5z5= 22_6:7EC7s7I6t8h5ފ0>@l556m2 55Դ lP6-635k#5pٴ6e6åzO/(FWf~d)6U6O6[6 G45hXG4<# bHE:P6;X|4SԶ<v8b65}5i6# 5U55mݶ"MZ1@6mv5z56r Sӄ HL)^$ل5ҧ5^5ht6^5fppn#\2pdh6 5W3P{4-5UC, b1l6_q5yо.X6 %6X5N{Uנ57J+W6Fx 6l +6J6  0ҵ6:66~c"4R**%BD@66Y5.kR.ՌJ[X +Ka%8k;6g06S16d-5lS56Oatv[3y5-6T7^{5pض46FH6!4)@S46 06XCĶ(TZ355k5C6)6Xe5~pR>x5h , /5rLĵ.5]Zf3S@5.4t/n'x5b664P[]3(s6v6&6+4E!5J5;&&ֳ50rd6Z6CQ 2y66Jo55w459K4~5`5i4u04N5"7mN$.h5%6A+5=5rz$KGL)ܵ?66J5Ăa2`l5q6 j54NBڶvζ(.OJ4O 6}a6176E52'ζ)T<@455J5q5sҳ1p)$Ӵb^5pE665r<>656K`5Q6a5t[z p?56'6vv6Y65z5N68y GL505A{66L䴔%bnꫵ@&Ʊٷd𱛶5 DShĶ4ꇶb&٬Num=[~5 5hA66/}3?p퀴5P0A 5Gr4 6'5Z=56=8iδDa6#b555RO2Rx]_K 5$5 +$! +5x6)5%A^R45x6t 8P5֋[򷯵D:B @՝6Z696DHoʴY/E.(5b(?4NKg;wM5"Ǵض[^6{HյS'/ 'L5Rm6e +55i5ն~]l7]4w6/6|58 5ݴ,6˭a6O-lXHPSO55Ybi4 5g|&4e rEY2F8665xGO52D555p6as5ESCc6rp6jM6awL65h6.,xq5Ǘ([r 6 76[5r5)t 5 666$(n9q6$:,lBnn45 V5ۉ5ߞ5;(5D<њw5%~RgV6-C5ǭb8W56M7I60636R6fCwjV]9| G6^6NP6Z<6L6l5>Sn÷dL56P6yf+6r6}Y5L}ѴG]u5OgݵH5b^5 1ච!6X6&66f 6D}ƻ+ + + 6mC5 w4ⵍ# ˵ \I#Զa466Ɣ6ֽ5˶`UA +1L4 5N.S-5`@52CG;R! *}d6-mT62667'5rHjÖrj'ך405bQ紛C6*6G}۶P͵6+6765D@56.625Zm66n6~ 5R4+5k6+6'e#ոn*&̱Dt~MI5Y5?66@6]5 OӶ/p|!"V3ܶydբʴg526t=Y6L5` 6@'E405wD5V84U*tS56H6,5W3ɶCζܯW0666 5S5a*Bܼ_mPn4I_3? 6Yz55Z5׫4Ji o456x^4Ĵr67H5,nl@{͝C5V^R3=&Xյ 52M6om4?V`+;ɵ\3S655'5-U558!tQ956j6_sǵ}ƿ0 '56Z6dr/%eĵ6~ \jmXZ4616=е(fl[|޵5OHi46P5"7^RpZ['_ +ʴڶ8S-hC4 +êW5R55 @4b66|4le85餶5-hGX746I5浝Q@p͢1$,6l6>_L`5cy5h궆# +15#M6Ņ6,$5{L4u5C6p6D6Q6_6d6>6{Ļ5ܶDbCy ӵdmx6mc"6V5ZPb}XK]6QT6R45{j.4>񽵁utV2DGmQgƵĵBVT5%Ƶ.6A6C8x56 +vN.wct%Z40v6z]6V6`C3/Ԋ4"*R)٠>45*b5865:Wj `486V66K+4Gf55%5ⷰ6H5^Y5U)44h5ڵpZ67YR7ؑ7j76{65V3-45i064c\5bN5*(|ζ6춟RVT5q6n96s46%55Aضk$jBOⶊS6p!6ؒmu\]z6%5 +Ŀ` $߶-^[>% C@Ij6 5a~y޶j +Bj7T5lg;6 ?z"۶J׶U5 4E\46/[hn +8!4uhWiL6?6F3a󵛹)5=6-j6"(Zj5l5$!go(z4Z5eQ516+c +{еLA3a_T>k\5j4w>_ʐⶉ3oU*P5׆66&+6U665B66766"6Áh6FG,ʵ6#C6YF=an#f2660<ض> 5s5pG5:"ĵ:/55Im;,9P¶/祶2aѪ'Iͬy3~6h6i4HL45²kV5}o˩*6BX6-K66[:zHkXr,9^޶:6%6b6$ߎڶ)ې +)555;#6G3m{3Kp55V嵭}2 6JF6!R54k6T7 `7Q ^7q9F7f[p7Qv630`^N845o68k6>5ol`M5_5̗!آoHغMi4664hA5PecԠ1~kGz6/{c6]ZtnԵΎhԗ=42̶!$j46166I367W4R5cc4[_6-[5W416q 56}5B6!6Х54%V9Ӵ4/$ж[,Z526}6.}5\*_Ct3;5{m6]r*65$䊶`Cp@lc\Noo5 +6%@4 +5t_;*r5C5n\N+ +G%Łb#7:5AܜжO~؟({6-6ܶJȒ[b6_Q6^62.66O`Q`5Ś5Ă^_56 +6鶚_$B516!$3 61B6F6mT6$`%4uZ5zq56k6 6ΰ6o׶2-jkyw^2͆55 5/6g 666B5^ 6KW6:\66wFM686dJf44r5~z66]~IRzҤgm5f6 5.406PQr5]dGv5f5M5$56ŏ6<+6g5Ek5n ]52 1|5:6hY6` 6mwY-4ԮR=aav5p569ggR?665嬾ڛ(ϵ5(5m>5ߢӶ I5[T6yY6B77 64f1E46!:6)J96q45Զ1$:M~565C68D6q5lp4̟5c.4xre56S56∵׵`lZ5~Hڵ:'1f@ 56v6hi5i#ᓶc?n5s϶ֶB5{675m"B$'نGΉ浩d5E6b6\6Aj6y6$;=X%5L ߵX42{7+3(I5"6 7*#7a7E61h>56fJdu5a KsdQG߶޲5$6064 4䚵/=5>687v7775%.S5իX66n]79457 +5&4`H\ 56S)6~6D6q6ba(8`!/3i66/V6ލ7 6R5p/4BJCa4UU*53p-\v5% 407v7m6fV\6("5)L3cP(@5q٘55ng6 6AR +MI!ҵ'W60v6c6Tl Nj]BXxG%4X5}566;}6e4L&456N6U/KbV\m4 5 56K5Q5B5625PQ!68l6S65)2636H2ܦ5c66,5BZ7)6g5δCi5C5wT55dFU d,:56=7J63O>P6 <6e?\6^;6Bm!+w5uʸ5o44מ@54 +v5i5`r T?/d3pu4i'%=*65ζ´KR5OyK676{/5~Duڶ4ӆ0$$56.6,6&6vV6.n6?6&*6R6,db-qhy6wGL6565805"['.6Y5;ij6(6b52V쵎_6-O66S6IR65fB~ 5E`6W5 M5G5gd6_4 4666'26Aaq6>6ZG6K5'Q$϶RSʅ/ ,<56~64T1*V6=7P87\7P!5556 +6P_G=5 5)ŵE᧳&5".5{@!~dx6x/:6,r5ÜsݳSʶ,57l6ZS,5 X51|U/˓hd϶eҍ>h3[qp56_.ٵh嶞ȵ1N7B656$X6˂6*N>􊙵ɨ5&}6RuhGG6E85DϵH5 6B61SSr&~4*4X6@646~|6ҩO6N[506U 6b6 4#(KFʗ;z6s6p5b"Hg)6 t528O/5@QѶ5ߵ6|6;6dʵ;T5a66:H뤶˃^(n5-1%D/W9s5^5#!,ʢ3.s6?Z\52ӆ۶~؟&Sa"6.6y65^m4^4Ŵ15`E5544J54 >%Qcwȣ-LzzH5W?pwZYb'555E5g686V6j5A6Zt6k%?5hB7 l~tR56UӾ66T<6/Z6&6z6 J6Pd5u_a;k!f]39Bv]W3ݶ.^X,4 5խ#þ%F6vł6r*6\]$5%W4D tE +566Q5y-3 46!Av6{6wa6h<55?$jt#63BZ6,5Vkin˗uA3صv׵5Q66CUj6M|65y5]~t6],6'oi${ݶ*ępi"6&z6.\X͐ڠ!P6i6܍7͸c8W7B6M%4\5254ܖ5&ҵczi=5Aw~v5*B66U-q'V6>E6R5lf@1?D{Ʉn 53L7(6hl46$6W@56 +V6$/b_456=6}44N6Z5J#6D6@6/hb65u޷Eٶ]T26v6έ6n +5v<|66<$53 67t6}6*W6⡴7056!66-6v6Px+Kx3 24f5 +nW='k 4Յ<66 +;)\S)`DCh϶] +S6I7"w67K5b(䛴r +~SڞWB`fbz6 5 + Δط|Q6~L5z6F4PzrFrLWaG76q6$6Fz59N695!饶uA{u6R6 r4Kh);pM9 '+7//5Ո6v55v%6g36X6` 5G4U&Б:b6#n59̒鶆ȍBGޜXƵ醃w 5lk5w=RPG$d677W7Gkb5 5A{5q^5 +5N5 )#_0ۡ3o7h5 5(ٷn0V]56o5],׶9C?45鈵4kG5 sõס,6w6$5ƶ6;-6@R'6a66$ô$}^5p61p660춳G<נT6?06pe5Ur;hj"޵95Jk669553Tյ$ !^He|L6;)86^5(4Yj67 K6H<5 R66Ǜ6(H6a5ÿ1v  54N5#X5W6E6'i1!PZF5}t6iS6H5WY4w޶&"W6y65lRdx5 ŽEL35 + 5D4͉µザ/<4/ +6i잳|UT4&]||+Q6t6}+Vȧ{$6l6ԉ6(eaځ6@$55;Շx5K{jȜ5|7Ӡ6$]6>5IX]%W4’4;h5׼5R5ŀ6(5}ܣmi5<7JG73$796 4"4a5e3_5#6*5P4GNu0O6%˸6r5 :c'5}A6 oZ60 5l6=l6D}64M066+X5+u666^%56D5 5n66J_hX3}V"z5!o5g vO@6?[6 ;2Q)Ac 6l46|6#5 93ύ.55vˆ54Dp5)r5w4]3e3԰6#(6}6,n ן6ih6Aжn01Ek'55ܦT54@6@#6xv58M[4z5֞6J$T5ł 9W6bp3ȶ~s95A665D}YzHƱ6pb6Pфo,:ו6!v55C56Q-6s{665 CصIzFK"D0aV6F5A`ο6[6^66>O63!6L6*i6)[ +E)6>[556n5\A=55gA6ӵ5s6b6055֧63Ī }+#6p5wDeKKv6l7@4-=t̶Jv(616̆5濁WmIC6& 64Զ9ě40ѳOJ>35}ئ²vR>1›lU6RSY6H}$52*3IA566B5-566q6~%86(ܶdYSZP5,6F6 r1V ĶzJTn52KJ7 -6, (6e6 G5Ȁ6>6wD~U=5A6@6J]5܏66#[5@W絲mD5H}56V6i5;5D4ɹe_^Ƕcڤ5E65*$455 +k&}i62f60q6w65&gAܵ5m_@6|ĺDt666|Cy54362wNm5'5X727!L&555}6J6ܵc6Kg6wbzPQB5r5i=U6Z6#Ƕ4D5456=66J)|!ĵ+06|tb5ROO6R[5;o5 5L6ua$6_6c6zj4I3c00"A4ZX5P5WEm45l6:?6,ɷ56kXuܶhC'@5+~Wx755%35,:bq.66kMѴ]6I6/N5/2Р6'*65QQF#גMK666J&45O65Dj"c(_\Y6)6Ѿ6)IR'x~-j󹐵LY65-uD5|5ۍpUu66U]A4H6k35r$e(PT5/!6B(䣶 +5D06%]Yi5h-6J6@4t^5˿6Z5HӶKX Z566Ec5J66>n64F=S b5c&55Ww6(`!>W!„tE4Cl6p`,Jcs46a6r7j53cX54665Y.";;#M?L62{f_Զ{G575޿1 +Q67%5I5\_%6L-D66345L>5\ʇ5FV5CB6k6uȄ5 ̶/$'`d5a6l.6 4[53p5{J`η5e4Ey5ʉt6t]5aN587 #o6[7 ј766FO֎'x65S$! t-5%u52삵ӈt=+~4c0׶oL566r66~6OV5lH5U6*Os,554Ѷ4JDsn6'5춭3@;V5@44^N"6D66!:$Eq$4rz4$- ͵J 6\6).U"mab njn6R6:̵쵐<6AD6 {4]6.,695>5׳W-4*%ö6{ D6 +a]6'PA}m[VX(]sF3+&h6b}6Yi6q66r66 6{q28td2'[0_Rx6d5ܲ24 >50wB 66r<5=e`Gvd5y456Ͷ66.3j:浡ᶄ{ +c,56e6'fڷɃ 8t 5o(5}>5[o5浏7N%6|j67 !76WP6W5WUNL̇O66{a5 ڶgĵ 4d<۟f"434ԟ5 ̶Yk+H5T5׏6r6MBJ6oȞ6[>5Q&pBõjt7/H)ݶ1u|%մ5-&l^ϖ5A@ ݶzR55a3xnmD'3O2X.x*b5dF66kel=zrV e׶7F6 +16T)=rB554R"26u<,64ҙ5->eoȶet4n׉J4J5|HzD5i5c߶l56]µq5uD5v504@6707> 7pe7W #66H6 7Uhǹ>5m05556:| ׵p.U+5F4JO4$5v458ж +<4ýv54yδؖ53"65 q456 63VPp3<4X[ӵ}εGǀx&"6Br65į*_~5xsT1:Eb'sm 66")#Lϵ0HHm4K|4"03i޶(8JMሶ^6`6V6(5]VOpA,%P56;^ֶZPXV̶ߵ46fK6=q4 6?yz5 &Ƕ3{L5:Ƒ63+L6oe67 `a6cI664BǶfҷ5 +9DF#6yM6Ư~667}7Jf6V6¤j6Q$:>)Y᥵$.gS5R\6P5%6Ie4@tA45,O͋Lߵq5t6uF6+鵄ܞ5x55np6Ϻ6D6*y6AN34 aݴM6FP6d6o]6gv5:C05x2P0`̶kt3\3眊hsȵ 5yN5 ^hZն #qT>6466W~6ti-67 85!^-Ķ?ݶXQ3ѶFq326$~676h9:=I56,S5^[5!3H s\-"|55N56@4A18d 45a56T5ݺ;euEjԶQ52L6^6)6qz5JWf4A5ge5>g$6t5,#A45R~i46G(6 +9; wp61X55@CG55ڍs5)N6b+6h6X6&666"!N綉{58˄.е)R26b7z6d"7vn%į56C*696 45 6x ;5n j ޶3?n 5'40ʵhoa56ȉ6޿5̴[b1]b3|.0ٌQP|5X Aѷ6x6 Hɶjk~pO.?5dt·ʶFW޵@6s<'6*&n5,@6F(Ҵ-"064EdZ95l4l6-f5 +*7)GE56N55_l6<(#5,q56P2O'o-6D6oAvdI566C77D,576`7W6$M)n<=hZ4*x5ö5Y6?G5q}۶pk6g5p6NꄶRu&y6 +6JZ5 е65'OL6Vf6[ 6F6_69U6pa6V55Av&QSN4^5b66ـ:66PJ^5\2^5 +3:5 5>j+\r4g\60-6EJ5 p D5ȵXG(}/4 E646P6g\5 +6C%663 x5U7 +rHpw%5%H[P6(8=4PQ5E65sϵ4㙴YQ}޶˸2t616fL|KβH58m5ض۴P66s4Aն抯`S5G156A#6r6:RB +4\5LzµԵ5~555j6/681W5vT5>P3??5w6Cp5Fl.56"5O56R66mI1 l5DZ6Y~8/<[a5T66F5}_iAJ55$7Lbgu59626V_6$6.5!9 x ߵׅNG촣m5b.5r)56˷6/<5 #l!); 6%nض뉶?s8 5R6Nv5 +޵D5+uv5n53%5^55Ժ66$6>6.5OQpIT6%Q66 إ@6|*6nn +\ڶR- 6$F6x6V6۟:4|>#/$jU5p6s6pw4o9#ejN(6L6+4<466N6KD66y6N6?7Kh65!$%0׶*jBA]jƶ1 +NL'5*5[556zU69Rϳ>65Xy:{ؓY&H3r6$w3G<$a66785ש5m5z|%5PVjkJ/L6u6 +566DX5bI56#A&F6xa#6/6\f\/6zeJ5K6Ȋ6:MC5EM^3%~6מ5045F~5 N-V5֦66T2r5S֜Ü%42#55_hu624 ''5 Ȥ*aضO<ĶKe6.63U(4Am6,6gЍ5В04a/6ˆ6ip5uϴC4666xL66t6D54[|5+6pa0r6O&B6736n*Dɪ59o6I 6"6܉6$P&4T645L"˶coNyCBI6 6v6?!51JL666(635^ĵWCqYl +6wM6֍k6e6Px6ƈ65I5da :5?n զ۶^'6 x6hl5?H5)6] A4L|d3< +<)5%56q6e55G50G535Z^ 6T_5Rvo5+ 6"6 6|56B6v5ն@ж6[|jF^$|>m6[5$J1649hT?bRcE8a5;.߶龶z5m q-B#heXR56)a{4s9ZK5{5o+5Ko5l=z/絲Wn6a6D6_6ă6X4#ڶvizg~6H +5m*ⶁY4R/5!5Y65 4R+06 ӷ6O6DW%M5:f5lofqHvոc5W525696wֵ5v6j6"OpIܶq5.5Զ+BE6 ] +5g"ӅM.4ӳY6 k6?Y66dm5D4*8S456$LSǵ3*pO675~"5̶ zѵ㰕&66ܴ6mdŴ9-iѶ{%}FKOFٶ46)86r&6Ѷ9?p5h6O@5a'(5ki3 +6q@H6H3`~FmX46J6s5 ѵr׶(FB>Q6+5e`V66 C\u/#v5h6-6x5ctzfRw6g5465g嶷0nUs6M65PB25*663k5/)55L5o<v:2GJL b=4cSIʴn4VKյUfiHe= u5HI5V5ܵnf3^:Vq~FJ"g"˲)Se(666r6 E7Gd26{5ൢVEpi5J+66d(g6#6?sh+"6D66?4=846@d6$;ܶ^[H6686 3- 5<6~4Mgg>BnPzk i5ܸA5Rж6b5U6\-5sP"2 ɶP*p54O6d6 4-Qw5S65pRİ5q54|6DҎ6{ƵʵCV54n8H5F6z6Mw5y5M5 +zd(5?5v;056E6$yd!̴mٵ1WԵ^LI4/~4o  `:`4#x6=4 1557%5i85_6k 6KUP~4ƴIR4ؠ0\o+6N6rm~4J 54Mڍ~~ 54p655Z6t6(5^ᶿ~,Yj\e&5XpW6Vz5ҵϡ*5U6Kp6s4S͵)5d<\65+,ӵ X5Œ5;jzU"랶,

5Y)fȵ <66]/6Jؾ4ܶ6kC65{5͓6ty5JH@4 Z3Ɛ7`4׶5bE +ܶp6?-5U-/XWPX$0}6e6UK6#i4p6@s6G󙵴01[Ykx6΁57pap/o5OAFܵ⤼6w6c6~5]5Rd5>56|6><6Xi6&uy5صk95zp55=5򵹦4 ȿM>]5KDT0N6Ɓ6i195IQy?5)6$69MeGn qD5t5;ˤе}54s66ʲ6+5)56k$6 5i@4'X&ڵm~5#+5.*5i:5sY565j5_'665+5e +54]D{5gd66*60a6|650nkӶgx*f66!\6ͥ5'?5R\GK5'ʶ Ɇd54 5=tZ6o66.v6;d6UI6<66h{5z45ٴɮ5\E +6/w5Lݶa Ɓ 5d665I//4=6*s65b4Q5m6ZF6&16W6Q6_:Q3նF +oܶHk.56^҈5^"h*$%P585_ ^յ{6H66cC6(}6P6nP䧂T5a56,46t/6m5(jy.>w\:Ӻ666D6/+pr|:4:\56 525Ww&K>\%=4/ l.6f6&D5s=ܶ}c5|6&~5X46j5;ֳjݶK2% +ZsE +5Nf66op޶`=5O5/W,4*-q5Ec5;10p6 u:7oD7P _785>6@5"45=%35b)55{`6Z6r{6~q%5ijɿµ'63b5*6%YF6eFӶ~hcF3J35]5)µfc750Ymqu5[1036* 6J;59e56s M)ŵ||5 Ѷm"&6ǵ緵tJިl(?4u6> 6Z6oN4N5Mm6O66*5]*zX66nL5RݶHJ06+H5Z^㠶qϞ@:HO`^'56T{ac[f56 g4 67ss54͐޵5۵E'66e5_!H5޴ s-pF`456f556xb65ڵ׵06?Vж-96 +MIjW(Rib6c}6b6f35%/Vg4%L6\5,o3zVx4RY5P5>65<!3cp5,Bb-Ķ1.;eH35󰳷Ԥ56T$5ϒsGpS;R4~5 RJ|5t6 P5J@3[L6Ï6 ^fkdZ `5"ض Z5ː6`646Aѵ35@6 +56!6K@Wbe RQ5R5t5).54/Xsƶh`155gu5߳^}۶!-䶓6hH;66!40cPﶁMH5#e4̓jBx6-b(Hs(5ge63p[6K6Ϯ5ߋ4Agے!4(4 +с4Nx5ʴ6V7sy7~7F +_&6>54)Kw ۶H?5)6'\6d6a5Y^4v; &cIab561׶\GڵH]3ȵ8ȗJ6^696۰R倵ͥ 35e5i p/R+ +cW5e5ee\\SZ5 ǵն865`Q5ضĶ-׵>ٵND6&6!v5˕6K6#65z`575ya6 36_s5rʶ3Եt6_6W3e6J5@ϴ,=, 42ph66xB|!,p6&S6'30~³p6U,6W|o=8}46 $#~ڱ@504Ɂ.," "?¾G5N6a;򶅶$[<55Lb,#l5V*Ny( :4 dԶhNRd6&6!O =;;'?Gj4϶+Ƕ`6P6#d 5Ci +Jb6>6^3li&66/5_2,S13rJgcˇ6ecr:$55ض + 趀_6m6v.KXϵ ;rjA05`6d6ln'P5!M^.Xh\516>66!v3c0>P66DµjC}&V'G !&WkÃr 5>@T׶3_6'+5ڜ*5>r赢+BLĵ^36Zj6vJ5&4VL&Kʯ&6356@6RD6̘S5t2 56;[4N3_+cvxAa?r秴6 6zF56E7 5q$/J$3t455SMa#춏Z4?$5t\5y5Fݴ>l iZ*F5 &6;O,Oİe66o}6J> 䶢9#4Z7'7 *6ENZ5'AسtwO5'`4 ɂ ֏5t5@U[S 5l4=3M> 趩Mf]UZui<_׶(6 w6z66]5%Z355p4:p5CN1x6c686.96hݑge_665p5"/sNS5s4ƳoNd6m6qT6\;)"`46Ô6JƶH1nh5 + 65{A{5d6ZW>ɶe55\ڶ$&_5ѹݶWε)5 +1ﶉ@E35$ +y`D<6_Ԑ@qz5pҘ5J)tB5*5т"J͵n^6Z6 5@u5ٍ6C3|6!V( zE*{u-;O6:i6 5?T:Y5ζ"⶧.6S6zcyEJ4?M=56169Ūжxb" 5(V<Ր)0a6-Nd6vQ6tѺ߶;<ZPg4O6&ҶHEo6 (b*5"=6 Mu6v6BʵHF;hڎ6.n69$fٵ<ڰ54^Q5F 6^jt5p6n'iIԻ5]P6xy86vf656a54m5.5tJ5x05g55"~dp-ZV~i66bö]o Rʵ`ZNҏJJP5mg65͞JffƶʶLz5{:4ĥm@5^5GĴȘ4`i 9t`͵:5A14Qo[aIb6vO6exeF6`R6~4.nStĴ=3E@XL565ϹKg4O2F$686@5c6i|'Lɶ",9?A"f \B6t66v_>ڶ854?45ܤ 65sj~55q 5ʶ6%a +ɵ'48m665 +w%6O^4"X`qoc4&j 6 5i4@Z5i66f y(6Z D6C5֟9ڶx\>5hj6J⿬K{Ɏ6<-tT5e05+N5[w:fOՅ6}v5ɝ'x5AW6955-Ur\6 i5onZ856ݶ|JgV?R55ҟ>6\v6/N咶M35[]5t6ma6 _/E|5\61V5J8y]45{.6Gָ܃iӵ?3gp66ĵ>"= 2#H5dζA@,Ў56ϊD6 6Bvb4}R{6}606W615{b5z6 PPF仢4r}MFX5LX644>Qpܶh٪G5>5 y+546x}x5;68x6Č4g6]6 I65µj 49V47U.X U5̵Uy0S5|~5x5 6q C"Ƕ ضe+5)5'b4<5Z6*f 'V$xk&54Vd5684bfڷZ8F5io5o6?6_5`$o5Z5w$5 +4aA%͵)sJw6+6\#\'?#44dve26@6+66666_7m6=5ȣ5k6JJ06W6:4*e1JH?ҵWֶ2*ɶ)666ˏ5Y򵔡~45L5%6(in5lHӵCHl5ZtWE5iV3pĵ.γA6 05HU3g]5taE54 666[ 266ា'xf*9b3ĵSBҪ.4BN,U6,5R_[ +UL_5(W䶁A4~Ub56 b;5$B嶣xU7f,5/66!H⟶]"3R06%ٶ42524ȶ; 6!{ 4Q66oҵĵGp55@5N6zF6 a@Ϭ;mj956tG6_fs8.aoֶDb_5~5)P2Aj6[7 +O6wi5u51%6't6f6\R/'FUV6P5W5&5c5Z4 $ӡFE6725Զɾ 7s6Ur4yh޵ 6t5;Im]4q[46G5峭)RCW5$T5q5)54"(g@k޶0y;$^Z5z6Y66.hĶ'g;5ـ6)5Onl4$z5ηg5Ū5Y+A",Հv5u9IC54;48TҺӶ0̪5v?84>5S;gc t5A6>6e6]6ҏp6J&i`p9&=ZU4:5PϵgTǶʌP6Dܳ@5&6V65T0vo5V5l85Z4+5_66c6l61v^6GP6>4S=$q5$5̆6DN6 T쵓`)m4﵌fyB[6C6E1a㽶 +5ŵ|fje96@5RlԶ__)j4h4_B5Oq5;M4_ζNvA%"ʱ6>6;?S6S4gj766r_6f~5!6(6x?-eⶃ46t6|6!ֵah:5N|6~]HJ،|Ko4:ҶEAܵo5 <6À5E h崶Dɴpa656Kz5=P6iN66#65657M +Ò1 +,&å66 h5U_U5P5.~HUk65$50õS+-o]ζ#p4F6666a5$26L66 6EFC652K]4;5Ƽ\ @H%3u33V6o5rs}^Ƕ+h+}6m6ơ6h{76 6L4545m774 `9ٶ +U6 Cߵzo5SqcfB?V_z6Y{66K=5%:4M4K,P65 &]\ضѵr 6u:ȶ#4a5`h/we5P6J_6ģs6Ӥ6;'6Pm1Iām ܶ`p̴lx;)I,5Uf76 RYԳuL515N"zO5S6^\5" 5Df6)95`F6-6zz6V6B68Lm.4%ז66*WU NPM35JC4-}65X5u;>p)q*7m*O]795c 6‘5̼rh4jW/4SEPe:,жc5H5 5]\6}m66N6*6o6.6FL4\Ƕ@lϭJ𔴼6F 5b6 P6W5c*FŽ*ϵ2xm˶T668mc*SԶk@^K )/I4O^Ȭ +4i*4CdX5c6g56K6O6AB6660&.J56<4 56DJ6)Uո5_=6mm3 M࠵5-VJǶ?6+66a266V=a5,654t(P<:4MT4C5蟶4m1W6 6r5~vȶ7r92C춌-ˇ5Wb3x)D&676ųlAY Y5gI6 fj5la̶+?e +5F6y5g*bceܵ˘5 +@6ZӶ66 m4+z6zGJ4|!6"6_'28*쵡*_P<4{4OK6,6k6MXS7Z6ŶZ556$0[M 5+\= յ3LF5mH6e0A56/6z$5^%5M~JCJMRVb{x_ =ϯ߰&5ꟁ6gْ4>T3~:m}g^׶?5~686Kd3S;2ƒʼlmV5־6BcA=\;3X嵗e5WE5ǘĵh5}46-2Yײi6f6T5{VNFRROY~5dd q5 y6pP5Au`N&)S(W,_wY}Vsy ?m +c4#G55mu5&{4c36 B&5LM5"4/kĶ]?ի}ms͵'3C5)64D5M%b'3 +h&YlH6#X6R+ +5/س=ĵD&o5D"5L.E}Y06+:6h 3" NlR5"`56`6d6L5XzĶH٫#593ȶ!*5+6;6'\5Xn{cZs4d|𙦶?F2ܶq5^6g ˶HI{4ɵq2U26K6t"$),^8q+Ki,5 +<6pȵ޶K45?6=5`6S6PO6V66QLQĶWGѶMo@5U6CP69?525104=c +46u 9RuP "65_"3=L5iys5ɶ25,s5l p56 ᵹR!6.266D5Z5b6zf0¶IN6a y6v6~Q5eK-owx6,r6308v3'6H4A5uUfv^5s6(ඤHʶ2ֵRf55)6$5 285"?_{\3Vѵ-~d5"4XpoŽWeѶP"i6w6PP඲j7]8S-R6/66cmDl3u5܊o U6tC6NB76^Ђp +ҶԶcx +569캵kඥõd5.6V~u Q86b@66zl -PD'5:6 575w6=n%66f6f6g3X6T66655@߶ Q'I̴ˡdW +~3D5L@5Vڶ=yɦR66At%^Rgy5ȴĶQ5j:T6356G6(3X/,4 5ϊ{춃v5 6{5F6,*5Ҫ6~ 5l赹5j6za3]$`ݢ605y5Q|6 W6ԙ3Zܶa!l:dzYܷߵ0睵ژ4i`ִH5} +a46]@77H7M6b6eH~ך5+2Nz!/x4ҶP5);6\ |˵?5 5B6Ee665yPz5[,5.Q+Gxɹ5tt65n6Sٹ6f6 紵DJd{B4䲬6!<6`3ZD6+x6ʉ5/6o6p\q;546s.66L65?66~5e~p¶T$iox*3ˑS>2-~:gZ,4@<śf5D6MY5Bg՞ 3趠" +5~6x'6`6^66f46H5tz6v\66OT5646`4S5y+6!6&j5daRŶsbZ66Ȇ6OI55,6 hr;JTd_5=5=5T5v5?+lpLLp6F6t5#4p%|4/666w6PfMesh4*5X^9 g6A665K25=4FH5ê!65T5F|4o@kET44å$5ꢵ?LL!5ӎ(6iIq156X${5w6OR|3=_v޵j m&6^j649超xE5 yS%:D5}q4LD:455"4iDŽ4Ŷ5.Ŷ@ 6~6fi6.\6676µ61*6Xն>3S,+͵I[*5b6cJ7396vQ[zQn;Vh6pu6|Z66 65ͤ405}62egeʶX˙[X:[鵀4qPR5Z6?5l/1ˍgM#5j`667y6a5j=ൕִvp;ϵ55Έ67Փ6u 6g515!4F, ϶k'϶r@G6n6[6*6G5\\Ķ\ 9ZCƶ(#z15AP6n+l6e4鐶]߶ tRĶ̰5)^5 5`W555H\t5cj6V6kҵR,%D`3&6p5yػ4O_6P6&HSM5u,q6-8hҾ(g_d^(5 6PZv5o3( 15M6]昵6_~6=dnLc,5uY5z~QlNbaݶ6J5>6A7%6ĵ! Wy6s64vP]t:K6$ȶXGֶxڶfp]66e5" FB(ն?+2öl;5 65ʑ#{S'6MڞPw5561:6G5.G"1!66B3p663ի\6SD6嵳t jg5_6]5}{!5X5<04Nﵑ0Ƕ{560o65A@66g^66iAa35s6_ܮ1#*NjJ%5&nua شfR66i.\궈#+"^4̶ 5ɪ P<3X޶O>Lc鴖&5dm!$a67Y&6zf7 5/6IN5456@д52K=83ܠ2x605+ ,W2Ŷ,sC5PT67<6a6YE޳`i3Ÿe8e\l4eQ@܄5֫68YrµKe̵ SAQ1ʿd5d5j4zEb꼶b + 585|[5[ %])+{5ȫ6c6җ66Q(5ҵlS/ +óG5$"ഹ(aǶ9>ϵaLz5l[5vkzwe<P3M˔/7G6L6/&1ضg %46<6[5TX Q6+^6H~v_gp.3| J W5ޔ6%U$5]J^vtжRS6*6pF6\ύ6'`5/א6}'5eFj65v5ϲ664y8`#&"5M26/ܶ9 +T5X<6lʂ6A4}tu6"4n6)4 P_)* /]5755 i5A4jh63i5sP̶[e4H_FYq/ؒNFe6*P6* ו6>6Lxm=36Hs6v3`~h/;5_n4 4K2-nM F63מ6O5Oex6#95)X5ij6?6!6U5_6!B65 NG bXc>#6O7 +m6GL?6,5[Uܵ֕~XWcLu6_+ ?rW66JK5;<%tA?66;5kDK'bC5%o[6T_q6E5hIP6'&e(ʥ¶Mrm4Z׶R$(h`)xV6׬6p6OG5[p6V766Db54C6R]56h6襶؍! 5`5ZSr6x5Zs1KATa-q޵ +4qP5%\64}6aöCB5|5I3y56͓6==35U51Gemb4)e-> DU51(o5 6O6BJ57*?66B6Q6NJ5M5ǵ!͵:6 <6Z6/ⵚ?516G_sPq}EDtɶہ"55}5%6g*6j6Y6Ba5#6"8nX6^66y|6w 6 +?Y5|6156z66F6-5A5:5×l6)6o +hs3=Z5n^6 o6kX6k3ͧO䵞c@MX3鵗r57k Kֶ."ekX^തC55ι 6 6m86Gĸ5X:G6650Y04VrV2TԵiFa\Rm^O&l*355^85׋6i4亶5%{6A66J6  +iIv%/5PF7ܖ6X4z2&Yiϴ46h 6;5!6#6&"0 666G(;uѶV+))x56˸6l6D5v <ƶ:wBS`6-o66eAs\_g"߶5!6! +58r5u6 b5:Ѷo0{_4#|V[ߺP}P4 + @56{'65K26p16^5>4$6͂6\)V#t5[54A56V6Tf6in>5"@4-(%sLz-5M 5TMeuu354v ɵ8ѵԴ$5MN5dGT2 a5R6 65e 5j2Ab5P%66a6ɓ4B[Y6-657Ƕpw4$>56?(3T-,/5s03+ܶ$pk 4wA6l*5P:\ ^(6Ĥ6EZa6aѐڶٵ:4Ò5Q6kXo6jA 4iİ5"5 jA;\sp4 6v6J 6>65(lJ/ywZ׶ ~5U6:R6}6B6*LhVH5Ϊ62Rc6N5@^Xs5R4\W5@x56*_q6x6<Ӷ~r4Y6+ ϩCl3=56 6C6R6si5_8K4W64h6Io67:6V46!d?)/%>,3; +542$*X46H6qf:6PsR425#4#G,n5޹S61w6'.D4T|Γ^v'C 666561([d| ߵ&5ߝ661t56Yj65mHD.5"6K6690 "t;h6"6ߴNL} m6~2y( ㄵ356706^u6606:V.)&"ޮhAc"5 kH-vwlY}õAh`|#/^p>6 +:69@ϵ}\e?5h55[6{yb/G.&54jAOF6B6ɾ6cPBҶJ\>C56P66 3C(c,6\66q/4pu,GYxе572 $ɉL"Z 96`6]Hj6u5^4{5MEܶ3@65u66*6^y5EhZ[E+038x6Bm66R5r5s5mè458t66;K6s٘ rE6Ks4'uo-]4j(6`6~K6L$ܔ!,6y6٧48*ntA5w56`4=545fZ55ܴ)<5j5e}_6dH}6c5[8B!6iW66؄V7g70c6hXQﶂ|/Zy6^Aa6;5C{fCDζaݵJOi~B5K6#)6u?6^8.괰 +n!w#5Zc6 24~=5]*5=fb4ZѲ56U6/5=MYjp. +QjS68C66,5Hv5)66}86f^Bضv;x56v5;3&T +浴\5*,3T@ 95b6b6еcC*2t6\6SM:C¸.[@鶸 + 6AFE**6656鶝` 6(`68ŶX>@6Ty1N 3U+66 o2686z`66ws6RlóQu Ƕma55˵JյӒ\wr.y"%%S궵'R55Kޕuk:.NN`6N}IL56'4Q]f6)5`YKg$ 6o6)5uVrz\=d5X:4Թ5P66T5ڵa66:fM605M5eZ5J6^\MSY &5F5րl8|6ܑi85Dz6sCp6b'5,6<665@F`{46a6?6e066)034Z6շ65}c4N66(sr4 6xd6F6]ƛb첑ɁtFw6Pu5ꇶղ趣5]ŵ="/=:5n8jã455AȘ|6S6T66 :7&i7@d7H6}7 U7,6zLCp6B6@5UJ>H43H51cŶ9y춖糶mW&u4w06JW5tv'$hœ8e@en564u ܵȴװ53XWp6a6̓WbVJ¶a`RM45gq5)綁Mz~54P6A6ӷ6f.0 6h5!B5nᵛ$ ء,4!D5[6m5ELbd㗶8]5,6 Pm4N>6C6 5[3{y5)=5 ŵ'e!Y1<갶âTѵT5>6865Ƕ ^5b366P߶vߤѵ$H5r4C7y76PP65Hh&Ppfo,S6+!6*ey6ݶ?ȶʓI6Q6Z6u( +wrL4`62>A$F3{hN5u5Z D@@̶Cf??26r6iNe96P5,=n I61DFڶSE&`6T68OT6G6Oص]>T$+ܵTD_ 3 6 +`5ںn61cZ6{Q5gm758b6{M6LDA5`5ضMh6U6 +״$|#4#5G5 +5T +f 6h5f5*6ŧ66q5ܬ֡ȶǢ p V u%p560r6~n47WyV5,-jF5־6B٫6_6}65A0C5v5;.ex3X&#XHK6BEF65z5I6a6L^-Nѿյ;66hF?m޶XkP~Rik54=D5Ha6516q 6 6ex3)J5;)9o. 4B5556m66궐eж9,5h6VM66]lU156Y%6k$6m6(H';^c5P%.6Q6Mi7T +|*5D6 +⾵ɥS:6t?5H`0d P55Ԁ3fH6-M6:յJH&ඳ<{S_6k6K'k,5ӎC6l664JԶG~0aZt446<6<5BE5v(2Ѱ3w5c5Pm46 h7 6I=dI^3/oohE=4,ՊǶ ;56j+61S,?:5VMhlTs35s6.!ڶ7Ut6d6 5~6c6OԵa.)6%:E685^6 +6 6WQ5Y`56[J6lM6o4V]5ip~K6/6u68V$MQ~`/r(@Y5\T4钀rU+( 46>6a'lkA綻lyxh.FvtOW @5|7[5.V/3>|je(6x4ڥD^4zG5`6"7U73%7o07$77~7$7Xt77Sp7?D6pI 2j5 6685a`}O~C\~56u6 4%HX 5R6c653̊5u6.66M#ç{L56g6K&j4674¶j 62q6\6Ny45>54{/T\h6eL6 %/6[$6R6\V6#ZUˉ6q6V76>!#{FW6ʰ5ܵ 565r+v,56fR30Z[ma}ѕs4J,F`d56--Gb24M34ؽj5=6]<6%UF|7?6 +53 3x5y66_5VFK#y5|%6m5UWZ趐ס5]5y +5飼67~Y3ζ( 5z6!65('a¶c66c6/6?S4:ƶ06K'5ᜈMd[Iw6<(6K2_ٻ4Pp6)Q5"2ė4s5I66T OW82 uv44F(5t5^6tu6%mj6/h[6 +6|5󭐶ڞh>(T_aTҵS]5e6G56y68c66l赯TPֶ143duynQ67jy6of5k5y5$}4x6'5_4.76g6.6t#>T^63 Rc~̶"V6~67>X롶R7춿Gׂ66X6@Dd"6EX (R5N6D65TPBWB4>ֶ;+ij\Ͷ,<|A ۻ6"e,6gc5QdB 6N56^C5X5H딶~,4=6%5ݶGI-67*R6h=ض=\zpl5j=|Gd `2w7{) 5b-56<>6>555ݑg6{=+5\5ﴎus;ೳ| H6Z"6~96n5`3D66[8E4$,r$5Ȓ6mN6l(6T~6վ5Lڵ򵏴{ +ŵIJj55IѴ?5[xεbR66R6&667):6 6V۔6HqP61655?ΐ_5ZD5B{BO5Z5yȴzHr5 {q5ܤF4uLn5u>6?>e0dz5F婵KĶ5&5.Ӷe3866r6[.6C5{nݶ盷|,646=6b5/M2626z96/Gt6Ht54>El>qQ \5ҟ6ނa66Ie6_of5YI56s&6жmMdӳSxµFvUu5d66h:O~f5WR6G6W +~% +ɶs3)I!b3ض(߶F赭4 5C5Ej5/6*66kF.gv6$$6~?6s[7:78Fs6bd4>56A16\6W58Vg´=574W֦686'|34uG7d6,V6*63ש5%5.6'U mHᩜ6cP5e'5XQ4ahd4E6Z6~5$ڄu'S¶P`ol34 6;A51n5;/64AJ66e6b}6Ss6fzkg۶U4RD5}ض(k$l5$g63Be6.5޳׶X56<67ڂ5rb56 6 5/5\5[&up4:\6\T6[44Wl5Xsm66p6k<ᴶ66iΒpzl5N6ym0%4@5P%NoE\,52 i66r6M6)մ3z3 |:!QƶY*g#lY6F5S};ʳ5.<5jV|H+665-R6Y5Ŷ Ӷh%2f6"66Qr54 P7z5 6E666`k͕6g#燵m6*c`~5y6 +6S5 P*=6B6V6&b4=5TR6sw6h6Kj6 +m_ 'ç׏ALL66 +6K&tk!*ഞ:7SN5bZS<5du2j(5(G4P 4D*5*6.?D4*@$rJ50y5666e^5=A¶'Of5PƻM)Y!3O(5 +5 5 6N55C66:?5n22WTIT4贄MAFeO r#4y)$g5.襵FPˍ&V5U6z6Q~4uT운<5cY5'Ե~4.^`S5}6A475 w53KSi _366v6W`v_jY 54efKⵈ6<2>4$66 v=c#E%F6 85$5nC6`6:V6B]05ګ5r6SM4M$2Ҷ>[˵56C555̖5>z5Fs5&bc566%;44E5*5n;55Q)5yj\Y$^L5ï)62BH 4ݶԊ<5:6-D6V|6 +$`@aֵy5H6uylXw?)5GN6l&5.еnh]p:6a06{59aM9\hJ4 Lʡ χr飴[6 . +5ψlO85{576oT6f6"`'붲3G,δ[ 5Iy~5Y56G4dFjuل6rU6l #n +56E6[6;64øZ~Lo+&5 6C6x16=O55;5_6.k6Q"6#5{>3i65I +z; 8E5c,6o5暘cLF3Խ$L@`rB8c3xwѶ]V6jqHx4w46I65u3z66e5R[>:wSܶH80Ķ&WQ쵝6Y6P55Tv(i9x|-"26<6 6^x6/H3A&ty3ŵ:t 4p5l6 L'IU835Zv5!6O}1a*-5 i61(5"[sB6~W6^lq5|@ 4p3̡+붅U\66c4{w v14[/5Te6fu4H wUI:o56K5ƶV'0l=#>q6&635t4 +A\4i6~]6ym<56X(Vضpu 5._65n6g6$66 4,DjD6&.6/oѶ1׶s5:5'w5|"5}Po 506"D5P,tM5=6@r665mj?0#؊5"5}Ŕ/q4G9`]%ig5CDB626ο]ZѶDtQ5aGI.sW#56%6s6-6ǽ6Xr5{554fcj/1=MQȈ05Sm6w6Di26/3j5h,6aR256:6G5aqthm6 69P!|-ֵ 56V6r͵'(5 6O6696#d566oZ5b#U"6>ߥ5R9tO>5"J5]˶5(2-ӔԵ 6;y6k5L6~zg6[X5񶒠xh~߶|Lq^!S 6^K5_#25|5! nD56nM5ǵӐuvj6|55Y_gn_. D =h +;xfKMg&u඘~۳$x4_5o55U6(6ī6v3t MF65gAjyUb"ͯIV 5656968 6"MUJ@6 4L56D-6W55~$Z 5z6Y5>H P`:2 .4ϴ7(5X*5ŒJ)O6 6Id4ٷ DgǴ]Jvƶ/5i9V66636 5y.ɶ5A62C `-5VD5no 6d@6z 6kv5E6H66δ646|=ϟ¶%!\95R56[5U$6z˸6FpX*cgs6T&5{5V 66"ho`$m [0D4MY6 5605oZ5=d5R5f;6D6b6>[¶,!AՁ6&5[,<9Q{6Ym6C61g6Fg77 6p6`g6A#z5 D4tAtݵFos6̶Aƶ~H6C*5}֘!ﭵv?6_6S56=H5͞5w|6E6J535VLt56*4@B4_x0ՂI66)2ҶYA6S6o5/ 4~K/|[:S8`5yY6C6-2U575}6 l5:4 5ƵT5X*ڳ5KR66r_epŵ;555ᵇxp0Xk54 4OKY)2'4Ъ@ȴֵ̏ w2OR S3lE怶xU䶣)8>Na6o +6=6@5&sO'٠#350D(Qp|44N6L54с66d594е5-U6^6j;5rJ̼6㜵uAHŶ"zw㵙0"56/6(4Fж?6<6oD5~4FH6jW67p5e6\57cԵ6j xT,5l;a|F$z6~6h%j5ˤw6:b6c6E4:۽5p)6y6)5n +~|5f5h45%x6Jf6ۑ +#7"phg4̋66! 6|_6+y͵k۪h3B46P6#e69ѳ6Y68 +5QV55R5N|6=%5D[6IX63|N/262n64j4Uz1L6~6m696Ʀ6Tjx5Q6fWUOc ?4!6Y`nI5X~6lF'6X:4556o650ϵEd56gL50.~65Wi085,.66° bS4ޯ]4_ iĵNŵ^!ON@se6(6⒬6f35j5c560645Ժ462.0^S 9rRY_^b5B6t5wҀ6J6J6p6Cb 64ᵛl!N7]l0m5|55LE6:96pa5sˤ5I!5Ž4}=VɵdΘ6]6q6.5`T%4h5>25M g4rulj65{6*/5oFB6 4S͵|On52GA趉|Ku5| 6T6w6))K#i465nb;eVжYbݶ|2yb6Q/6(B,4?M?/5K!ٔ5$6-536526h~t8*ڳ33`5Y6H6)5šIĵꂭ46dL5<e1y[4U,5{T6RgˆA56-BCxݶfA 6a6R14x>iF6 866X$3sX "H54E4qtu{688661g@&|5i6C6y6_61⡵O`fI5k~576I6tK69sY 5>65n&7a1U=f5hbH5nD5Ζ`;̿6Ld6lRo5#K"'h6 0760l CwQK56!45r +U7h)5u/.A%` ihж]596J5_̵gg,(%Žm>86[6U4R#36A6j>4*W~}ZY✶PQR696XPp@5T,6 +5)}5 6c4hU67?7@:7J +6O6rb6>öR4삀hOuf5N"a5^6/z>6"5Yf3r 5*EGõZB5P54̶ 9pζY8i769Q5jR@.`I䵧W>=5:6\l ѕ5+L6'6eX ch4}y4C!\)b)fַ6*\&[}'5vE6xRիSH/69^6 +d٢ۨV%5(=D6mT5ص5tY%72fL6R6E?!4G>4:g\ P5zU0]붋=Fr6 61w"U䶤z#P5f4>5;N5650R@46d6ԻT7y6ޯQl5 5m4춄2Fe0ֳ$9T4 6$ +55w7/~b.RP576/5L5Wq6[$<5Q%;5+65I>,3%v/ƶ<6|66Y!6 7 |7,8=87z785+̶ (QӽF'Qe586AصZB8"pZ{*4k56z5#zb&6644m) 6L +64M€#6366V6RƳ4=\6{\6Tv6z06]6ph6jB6554tĵʵĀp5Vn4ɵ[ /dD5#ȶoy ~ж۵M5߂ɕ)Ms5m5596gjQ616)5Zn^R§@t5l5Q#R5;^'LWE-566?h~7&fQ,M 8d3!Tu`4!4ǵ1õIVB=e!v:碵6866N5Pyֶto\KcEƶM6o!T6"67eC$5Y`65ֵQi3x06!P5lPx5&Zݶ͐Xez^ a5ڡ+6g1w϶ޅ_S/285j4`d9(r5Aж4xUL6#5Xzo%5?ηË䩴=,l565y6, N3@5եMt`516R'G$16h6C6B嵥!6\=6P66r6Q538726J66ijNTs$ ϝ" Ͷnݾф׵ ]J4E@Ķ0k㶋M6Fs6<66]666%4@ĵS 35s兖4i6 6w5l!ɞϛ66[666Pc6VL68]5/z5$5'5756HL5q<~=,3A5637-7+v:655|kH5)5 o<56ZP6&6? +cjW6wT5`4/l<3\n1BJ6A$6߶|966A4T$ܶw )ACyD]M.B5>'/n66qq_FPr3-ඵڰ48aO6f55 56H/6-6^Ua6w5q$T̵]q=J*U6Tk6,6a$6O6{ X9N5B5-5O5r596'&9666Kךo] 6`5RV6;64 +6Q,}ɶYrozro!4&}5i,ha5i 4#m\.#TI566X<6{X 6655@zD :IwõZ35iA6.55w +5R%(j4{6wp68n5qHIE¡Q244P*5677>;c77q>77 5666+5U05*56@RдF\5C|e(\-R{385ah7 +7z]7H66Sb%¶,i'f +5!´>\5945 +N `ʶzb^35~ z6Zg6-z6,5? )T=K2 @6gj6c/5O5sZ6ej6\2XP~4D뵝/=c6|6xY6F5/6Lx6XD5*5686Q6K6p66%M5&p5.@ʦⶦ 75766*<6\4U6f6¶6\55 ^3.P 5q52\65^[1\fp6 DS̵ڵJ9hR $v 545_+6_4I\A6Ȣ6X6B66B+6&4X67XA6pE64W:d5-K5aw6V66׶6橵zYli^ЊtȾ6:56 +޶ub;5C5Y/k6A6v6D6I5gM43T|fa~g@, 4t_5ڷ>6[b5JdF056S69WwRMyuߵRw'3]#@6CP7D6Gt5˩[55%8Q[!~D6#~5gBT\;5յu֪(+N=w565.b6R6%h[̸a5e&5"絘LOɶeV5Xs(66/,>T> uk 5}7<7p7J}6fB$5?t65KdJOµ:ף$صr46X6h5ŴӃ0)4B)dl{ +5U#56 +6_~C5K%_13bI S;6]%6x ǵd>6 5'\:%:X6ln6ET4L5>B67 +#6иy$j|/_Y~6766#=|5©5^75ĒjضvöTӶ>G2(6>6s55f8 14rߵȓLo}д5(6YWz5=4ܵն?KbDBµV!ĶYs6G5IdV8M%l 5ds :05i6`3>Hd>*686~5 +HS-V5"{4a4|6|96bEY[! V4l0$55T5BBa,6$Ľ4:60Z646Ks645k66ɐ*6 +b6}V66E46L6i Y(Ѷ8i#Ln6<66Aȵ5T4hവ|56 z6 4.V:5U66ROf 4,6 }˶!J~ӥ9,IJ\4A`5X3f03О C:566BOq5㓶= Kɵ^: m5~s1 34^ z +06*06Q5Q EwõA5/:#ޘIHN׾6Z'6[y5qRU)559ڴ5'N6if6dghfyN6W05OTzԵߔg5ߵL4̶/&UF5$5ĵg-g]5?6Z76i$5,`66 +6_5q=66{2[yTK-6 +D6&l66/5~$(yX555)6m5*sp4ꨈ5q367ħ6/?43x6Jh6@' +YP4Rʶ.[5`P4~HZc5El6X6-⊵R +8T5+ݦSoL6H|7Y6ֶ[z"Z=P[h65yʺ,6R6Q$52`j4'5׏6t66e5 5Ҷ+_t/,E5|Q6'3uřt7 rn65޾5C^&|E{3zɶ621'6Z>6V66Vٴ5qAK +(򵜂5űCU\6C6+BsX\2n55(6J'6 j赘5.55̨Զ|Ե@68va6q6-6R6M<5+5m55N,O5Y6Ue6l66j6k^5ƴW'6a6^6[\e])%'2o6/5X/ 6O6ye4 650~5ȳ״56)6i6g>6K,`¶?sHE17ٶ;ML +3$< +4u^׵W66DN4XvʶQ]ϐl4z6 6!f3k5VT`3a 5K.HȒ4Q6)l5yڣWS 6b6]6;~6a66)pn-5Au6x6~5I@66(M5ρ~^>6%tTE~^:´$666\5f568 +6*~N5~D4Fjdݵ+o5Hq5UNsT32z34ך6$R66?6{ _Q65766ئ6?.f6V6%76[6ޟD606n66g6]5U676mZuhЄ6%36667z>3+2D0wGʶeӶěD>4 "6v6 +U$ĵ}f5i6/66,H I/Ĵ65)4̰0ГT0Vl5  36D 6EM%sF)6޴q665/5LN6^V_5FB6M5"56#5F 5'5@i1f">55c"z&*SĶ{Q_ f5>6vf4㤷QS< eN85P95Z\HvÌǜ56$ Ͽ5)h'56sz 5UBչG,Q5ƃ&5\s5۵&3l3E6Fk6Fz?Vk}g&L6W796u67$6 +2ݶ/+6{5i76o64Hiʴ8J4]r5z5g5k6֒6 6!m66f6f6 NᶿٶҺ5&5p2&ǏT^$hxQTe|]R|%455;d}6*ve66U5 ̳Ƕ7o7m7m7i?7&7 +6=40C'6+6c 6-4M5"V!:6UD(6f55Ʋ WP۷*vӶ56G4ֶԶfU5"6H6Ԅ6L6$Iڶ,Vö[4 ,FuW`7T!ƾZs6F5fd'͵1t&4Ft5١51 5\$MuN +E5h+M696Y6fs555,+4`5xF +qfa 5'6B6i6u(5AQӺfB7J5855Ro}Bae56 f^6 m46k16'a5&BEz6 +6(5?5تc71q}/-`{̶,n6<65E6bG48X5T\6.6N:5f4(Ŧ6idb6Qv3൓Z*^59#׵W6%e5@ն%۶g۵cI>\ +pE| +I-c̵c6q6ȸ&6I4Ij5k2Ŷ]¶@y56gz36MP6M5zA6H6,/46B264K߶H6do665;^~z5523g N&455FJ̺`xܶ466i6 +066L9T62ᄵ,K϶j6>3t&˶$6,6*N 5Ȓ415k6w6}6B6Z6M6qH6*06W"5(8Z|55EQ!ж diͶ@ȶ@dJ7W§/tK ۊJ5΃53t:563>5<5f6Cc pe5}07>777a/_76:6+HYmyV448@耶)6~5"׎[4|p6_46)t]J׶ꓵ5Ij6B6=h5S k675G5M6/6}6C5y/?@cǒBe6:6vET*6_ ,~+4_55"6n5,7󸶤lƶ-d36;k5ږls@+۶u4F53"6Ƶ7z77V7Y;6556eG6z5l*7$; 8'j-5z5"6W6:p\V5ZŦzx +4g5?5'4 Ik^ⵝ5'56w 6P64-)LB5$ص955'6b/ȶ6P6߶6h6/5۴5kI55Zq3e6)&5?SUP Dr'5N6@5Z ψ́5^6 65f)*Ri\ A81{5"u566qN545Ti +i'5\6t5䰶5 ;6?5-5F5 6^6:6 6:5ۉ5PJ 626662۬ż6c|a6!a̵em4~{69M565=y;޿5H.6j-6?x +"{V5651;4U16V55Oݿ46/.56({:V( 5hn4V45?44 +5jbsT.1-26Y6# )[޶#v6576Dq5+5A +ƶ' n4̱൨Vz÷5e&6865563>`4x6&7Q7'7ZE6I5j5R6Sv̶Hh5*'^6I75q/B1:[۴6+6r56G6ٮSfT666Hk5Sش:@P66:5%64euo$b3ص6}ݙ5o!OȶeQ664B569BApb޶5A6a645,Poa75,Q5FO5١R ߚqA5ќ:6Y!46H78e&8{Q%8p$6bC⳰( 6XX6269)Hhܣa̵¬ !=6Ma64F5O65D(޶y4c6'׫ ٵD_3%pz5T35ƣ5vs5>7 %6?ԈmR%L" DM36266S,5 @O}!͹_6:45 UH65f^cX5 5ﺮ6030 Yݶu9Ƕ>! +c]5,?m1)5J/f傕U0665 +Pʶ"F15 95*͵ݏ_|5[4$6Q^Sg5666$45:vK2!~J$_z6%6M=Z5\6!6T6>=HfdA66-iܶ.p64U6DDIpJmg5AKs`ԴqtJ05l6L6)B?456Li765ո5&3Fl4pz"56wр6R0y`'bζK@sZHbThoh͈66G5P5x5P@6K6J 6h96 Z6=% 3$0x*~%55袁EM ~4wl6U6cn6"=5=4,S.6z70S706E[5*4y.4E5\ 6BJ6@5S mvU6\l65ݘ;^Nl51 +5;zX-a 6L56k6ћ6=NV5 ޴65ʶ5ywU9]4wj6>96[{$-~V&5>~#46pPöNI5*65̶ o+a6ZU6'< g~`HZ4A5蛵q67I8V8A8 6?,3p46Gv;6Xb4˞jLҜ=H:E5B/58!616ּ*6fxE6 P6O4J23'p5;154e03! +5=6 m6dt64F6 6`_5Q`H?ትhM˴6 j666=6:Q4Cnf}1(i )~㘶^l45 jMH 45t4!5`5h==Mfk6)G6C6:3CZV% ,U6645 z4{[ &NB5$6K{ v;Hw" 6(b66Vu66'3?,c!y3G(q5ڛgsc㵉H6I66v8(6,6 [Yp?|865jFl +d6&23 Ĩz޶eӵ:!H*4N6(6uU5쥵03ǶٶiXh6=w7}6жz^_7P5~xB`:66r6 O'6%S6PB"295055&<415"59A.h5ڱ6)\6.<6=60"55J~O ݵ 5^Q$4lx5%6þ5˱ 6MD5D6 cH@5{`56 6w5x605\\{O)AW36'&5>[zIV4^0-ڳrx578ⶺg6:w6d53 4d5/> 2v5nؤ5˝55G5w 55n5> 66 4{h5#Z? 5d5T6db5rMix5K:.6W_y5Ab;X؃6P6]6J5HNg4a5+I.c4kb2m8B¶?J*5 j63Y6\#66]66\5kleŶR5f6U4536h36})6l666P5Q(d&ö6@7/6ub5I4}}t54[6|o_4v +6]6pdõ[r56y 53sv5p&`6'6x6g5=jK]6n66OI@/6P65I ܴ60m5j#ɶ?*ɶ3;r6)6r6u +5@<6H6&7CqﵶX`M56V6*֘4PT;?5/$T5봔5ѡQ696{7W7D55/6w6&6:>66G6a4Vp0` ݋6<615b<̶+Z4uR_^ȴq5b6o6G516 A൧+ҶI42)G[DLg&R69;66-}u走’5fU|*𵦶3fg򵂭65}ֵd.hfT5Ş4m ;4)4H +qn}ʤ4B0|@/F5-ϗG[44K5Z46j61Em5#s6 66(6%6 +66 + 0dWIL R[AvWv6 +E4ZS\6 A7x#f6rWxrs\ 66{{wlX66jZ5h: &vMr`H޶R> 5n#5/BS )(!>n6V 6m5ӿ51^SZ\[жLeeepO6 6>Y66?U4P$5O5CnW6WL,6$3@4O55E}f䶔)5Q^f242P̺Ϛ65ՈT^{5]͸568д~SEf3z6N56'߂ Dv4553X5df6|6Nfݡ޶H6!6ܵUh޶u᪵00:hnѶuFeŠ6ZK6@b5T^̶Fҝ5t:L6Q6626Lq60S75>ⶎ׵Ժ6*6:ٺHj6C6P540DrL8G*6Y 6Fh666 5H'Er#(]5gb646ʍ3Ķ$62B6yI5y6W67 6 d"6V6,~756j6s56 E6pZY +4! 575_޴5 ~Ly 669Wc!4ȍ4ҏ赬nV246X4u6 ٽ㛵625Jض~&9}{̶HOG55#6265q_6[64K%,#68(7}Q66 [ +S߶2@s5bU5nV5]W8„7445W*MŞ562eg˴Ɛ\5AI6_¿6 5Vq669J9IR5=b65,V5i66 2QеuS)Hj;q:5L6b5^V.6)5p_F"(h@0 ضR`Bp@S쵕Eaq.QdSr* +ж +,D$^95tت61<6?*LV5:Z{#WVP}:hV ./f4r6466G5h"P-h4 6ye:6S6|65%^̵ST5F5.`7e545eԶq-@f궐ض66r5a5H61Ϯ6O}m&2 6bP6/d3cBfmrI1)]4y44?6Bچ5Ѷ7"ill!tt58bT5Ķ E[;Dj55)3 5,666-6JCL嶋j޶y0ޔ6)6F}?ö/Vh] 5W#=  + +õ޸z6Vb7 *6E6'6+0ж_5)5"E66Zd-5%",[5 z&5;645 ȵJL/(455E2Ա5$B@5H +5Ӿ'FYda56R5v555AF$Xl>4"6,6'o4 dgag5D66w6޵^XP`ж?O:55V5!6g*6l㶹xw^ + v;HQ``Τڰs82z76D6b6l6[%J x˶R5v6 Z6)+7 j5[5ǶӅhP626|06j-{ܶ`,^422mh46\6϶l¶u5Tq6O6@@5̵iW56攮616{Vf_ywнĵp}5Ey66646F0d5.tRPs4H45eC3"*55V׵1JǏ509606 0TcݵRŶ(6j6k6AJ`f(XQ0`h56D6a65/ڶ_6'd6mi6"\6;5cNƶ_tH0 +h52 `6GA6}65 6d +641TB976I952$ **;Nf@T5"Ҵ(5#m5Kb6837xC,[x w56p5͵UkF56T +5.P|4"5 M4dB5h"Ψ5 524o60+6[6̽5|h5nh4PPS4s6fB6w6K6M66#C蓶!|R@5AƜ6635c656f _=x586cRy6ٵ^ݾp 44kw𶢘U#s5F z51{4.76dp5M@YѶ5aR6TP6&ε8Ƃ⿲{z_к4Plh5f΍7S33[8 6?68;̶zhd6ƌz6~ڶ2O`4LoDt!:i^6}4w6[67ϵc|ݴm 6,Q6"6726sq+ +ȴQ_Sl5(5 67?6 55ٲ¶[%5,6=6'6(guBw7'`6\%6354|Է/:f665XN'tYPضVH5n6.5.5۞1FN߶,$h:6Vs66+64޶]̶ w46ڵ6xb5'5B5i6Iw6#6ٌ6 m52C 4BFH5Ѽ6)45(6$&N_ַMe#rGkͶS獶3q]556cg6(>55-xi̶dlp7¶T`ONd6d65@vY4NF1iƀɈ㴏=5[6F5G@# Z-Hݦ޴4JL5^555Dx܌{_4ڴ!mN5j:66SL8U65ed6vEM*55E_ +V@c;.6D5_Bd6T86Z̻x5è6*6:4J}ͶIQc5 6ύ666Nj65pڎts`5 \Puƶ1\D%5 6yx6Ԝo66X%nxv4N45Z4v6-5@j6356 R嵦R յ6X6~|#5 hIVE C4S9*ML̲ܵ%BYo5;5~=p666-͵œ96!6&4̓P6m6I$u5M53J4wеuW7ri56$>7,7o? _-5v65ED=74'6&k6=6 }6c5*+&2?66N5V4E,65ˠζefgGqv5ն% m6,6h6S@c'|55{p~6p6#6K ضG~ dS嵷C^5 5ݼu55鶠:ے5+&6˴6[G5ЎxDص6HK5ǜVV'a6_!5Z!li66q06lȵPI>6o "65*ƶ95!<6#6h6Y66nR6:6]4x\55m6h5-3'u6b2v +`["4:5~[.5Qr525`M6S6e6>zU8a&& 0\.)W5 6u5>/6B<3)u4d|5N6.IgݥNR1BR_:oص4 9"425k2H쵂# Y 66OB66M5i&6!*86l>5&W궁whdH*t506/4ъS5DƵn/&t6D644:6з6ͻI4 /-yoBȶAX4G5kt˶[426_Dƀ6_$6:0RvR"6c6Iw5CgfԵ6r6!6l(6_6wb(̶fKh5{o5AMݱ4W5:N4ijf6V7_6g@Zv6'6v3iV5Ny|Q\5>6!15)@x!P36#S5B;RѶ ʵ:ʶ-+p50R6ۛ756AF5k6 +5?ZAI56QU6 55,c-Rٶ'ĵR{жyTSൌN 6gr6N565"OKp5"6':6D2?= o;F5t54$#PصqB5ʔ5yеCcc*6K6N6 XU166F6g6Rj6r6%6GB>=6xe6X@(6g6OjvF6?66+g6~6G5ep' +66"6gb)`t U5ڦ5">,V4R. 5!5vI@=ݶ_U6\6/H|5@J4Cj~#3&aBbT6J65߳=ضF#rD5/tVT4Jt+.S6 +6|v8jm^ؑ6_6ǽ6ƭ44UQY4[.6d5ض P,oi58S3/`8Ѷc\'%#4Y5 53KaжzH6i6'}}5W0b4a05FeX62 6W5vҶ'sO8Ͽ6:b6z~5|%a*e9O۵H94¨kƊöH?5yor6px6;ҘFSڵ}ٵ7O,'i6K#4<4p65[476k5\up6e56D'\ v/5Xh6 +65-6\-6n7^6x51VCf5ŵƽ~6n6`,6q;6^S6k6Һ6zȶL̨6n35ό'645}2X36WG5:Kܶ" +l8#5R5nҵ}<6*h_6w/\K5 6{65546  m6E5״m595Ey{BʅD~rO4D쵊n4V5@B5o1 +$5tV6Wd5 ˿L43N5%55j5N3n|t"cܶe66<5>i6)655Pq6'6s\5 +.pX^3 55d6@6 O;%66b5q5"5DdRx3PN5~65xy>39E5&r6 O6*5a5a޶R׶Ӏö\ q<6q~[5M6sd'6Mwh;oE9> p=? 496h6Z4_zlOwzK ˶l _5n63g$k. \61E5ֶT륶_`j5y6#96AtT55oW5j4쒵?O449@ˏ5d6V~5l6M5D4b hLB Oܶw63U#h 6E6Q*d6546v@5+̶iJն%n*$6e 6K52|Wݶ?p>vz5@@ ĶCT0<5u6´ P4 6K 6GJ],&Ij;K3T66 hY/46׳G2޴9b)eA4= +Zi쵶ZVhPl.O55qp_75΋qdӷI5밶O54%%۶Ŷ += ̅66N66 :l4@5!Fض65<63,5ʎuaׅ6t365I)G/յM35}5d*55`T,xj+-'1s 565x|`6ae77b77Q6;S#Ak]bBr$6dx[챵q/5mƵqDk5b֛5#Tc/ +^F&3%p6Ե6I55 5V!µd ,u66"526 m"퉶.|56{@ ܶJ5F5$I$K.rζ!^&nYzZ-N b(M,; +Z5;6GD>5046@5: ++),B3554[5;6VP6)6L58# +`CQACԶ _k׵gdbYV2dV9=\ƣ5؍6Rk6614+c5D4bU5-G6B!6@6ԵPz6 6p5P82s3T!6f:*_ֵ6V65+5<;Ѷ'ݶQ3(ɵöö/~SR5w 5Y5|[6O_L6:6675O\"䚵ՌK?*{^5LP6m54i㶩Lk'Y6"{6W5foö(R5g5Q5N6nM6,AWuS嶦u*4ذ6Y=6 =5HP- 85)535G6f6'䵒+z(QU$LnԵ|A3J϶}6JA6NkSH5H65cHԵ;66yH䆉5)\5d޶Gj6|X6Z E4a1w5KS6A5V5I5;#I&S5_5\5[9ᄶMBR%KՊIͲ6B{6V5,|56ޒ6Wr'bʶw6_ 5z5`+5v6i16/-56u6*v47p5T@6~6p63f6AB_ndM9iжvG5Mv觶^yOy/65ǒ65+<26T蝴]ֶ氶I̶HQbs^M/>@pV^~w56ķ5oe59,@D "6Pb6nS[`i6V_56> |C Di5/4-L6JB65(53L6e`4G5M5m2D!r5lߌz͵8Pc۵Ƕ C$ju\;5Ju6,j5/(?}VC|8Yv^q 0ΦT5M6Ll6?U4hjߪ`5%6)[5IHtU5'(Ou@5/5ԵW`oz;쵑t56u$ʶ}5JT6xa5pZ6h6-1Mk:$ZUWv6i(6,%8.Q[&4e5gJ45\ 6r}6T{$L[ؾ5m5uN6E!65)_5ܷ686&[4"k_gZ蝹a56q6 6O F5Fc5llG;Z&&5$6 3X5}5:4V538Ty6C5A^h6zZ7Y6n56@O A"Ɨݶ",55x6(4'5/65PG5m5<,5-J3X4#5."$5 mg04C&@7NK756tV6666A:` {T4n'66366 664]*03 *n5n6 6.66(phl6g5y6/5cRٙ +(VADY65166ND!Rn$+3pc5}r +g:ܶ'!F5σ4޶!<556QS6h5WD4P060=6zD5N4>TG66P#F>D>)Aw8U\696׎5㢶!;6 ukx44o~yL']d uӶUK!Èl$1q}5Of5ӏ4)4h0566d5e5^g+qv̶\ o~ʦXඩDHQPA46&"66oV54qT믶#ox)pXk"ڶb5u*625aT7b4 8!QR.mT;յ +y5}x655e'4g6|<6B4:/56\v6`5L5 n6<s܆̶3M6L6 6y6W55|6.6K5'4tlˉ@6;6W66_#g,ȶ/gyʕ>U56.V66$P(5Q4+6J6$z@0Dq)tƵu嵨Ɋ085WO6:i6( +636#|5$4jSt0εua6I6]6~f]4Bg5A6{ 66p3;fb6l$,*96IPZe60x6]bQUnWZ6'5wz46 L5$ +J656ǔ6Z6-)f55787,6B6j64,˶ɽPi~<6J_0Hj5*26YM6sTB5 +! {"~е^j5.664/:P6-F5~J#56 n5o`g5<6jv5͕4z\>T56<4̙O_A˶,6!z=Ķ!/c+犽A4Yǐ6s6=B +z ig6A6]q 6Dx6Z6`s5%1ڵt5M6f6j +iP6iT6~5yTF#p6 +c5^+2 R5&`5d5T5Ȅ|ek<V5uq6D)6TO,6lI6G˘6X6c5Zԕ5.z5ʵ(ܶzExRqB26jŴ (冀ʶX 66ѴI6.6&6O55n0)5.Kd;hk"t6@>P6PE*{ ,ܵb`-y7]K5 M5W6'@6¥$6>6?T6!5$5]N56ic6qZ5Q56#6O䰵~%\5mq556{'6>65=/eԶ5 +6-X6_5a "aֶU-60G5\u=(O⑫]l5_6c6uL5ȘNwĵ +Xv,46Wf?5l&6Ľ6݄6i.58r4uQ6*66l6ٛ66\]6C 75[66J`6RDƵL/s4õd2`6q&F6p5#Q.4ZL5}  o536q4.7465µE5w5I\F6?.6dᵆom66R6u65!Țuu6U666X693嶀M`00tu5 5T_vbg< +pYܬ5AZCŶ .p6Na6C$61*4^Z(̦6p08]tR5K @5 66s4 @5n4/6<5PЈkfx6ڶ Χ5 6*DYytC( 5յ>:f36PV6RUKna.Zsĵ㵎wW6?6o6g5 5qM6A6BhJ.@B 5j5 U7}S\6x6666H~`H(3ʴ3&%{4r+5Ⱥ6D6 5R6 6Rɵ]8C3@4V63ݸ6E5u^S4~~ %6VS6Zµ$p6-(5z[56u5ﶀTG.ε(|G5f$HQ6ScS66vεLu5,W6<6U6P66#6&V1~5 5i<0 b4u6E6C5=pAX44M4F=B 㔙2H66h≶w3y7)(4n5U(0dNJ656NE99f.w4CB6p6W=H5=Mg˔Q: 뵥f5$=J}6x7 6Ƶd5_556L5&^6I6T^46C ,(~6'65`50.50Ŵ5Uh6dA5 TQ5 64YD6o6y5UN6%6w5:ζB7DLZ3U5y5C5P4Z5ߣ6}R6)?Gӧ6"$6'=ĵI޴Ѓɯ=Įp-=46_X6786g⻴3%tW/6$ȵ^=5p?&af\/*;kʼnBU3h5 *R4^<˃ʵw.^u-s4.366&4eRN55vrj3|53B54 4`'5`lL~nϛ赚 5Ԑ66 +5(41aS5θ=Zµ}R8k4 +$t65iFuA4 +K5Lk6J4xb=6 5w_u5I66| K5if3Ҡ4 sx;g$OʵS6UR6&vP+)6J5 C5 +6;65 55I56uu5ζ3!?B55^0[~^6O+6g5vC涌ȵ.sb-5a6r 6-Fl66.6?ֶF}5o6IW6[N5ö))55S{j6Y6Y9N6X5cvc&oMnB)*ǽ&3A=Q 696D4"N5ܑ5[.+h1%506YӶ'Y4j5xwp^ 5qK56 R55 +5茦5(t5D~{6X5ϹH9T665!0g6#6Զ+޵E5H3X2n?x Ŷ_"&3ڧLڵxuE5A5^4\6nN"6@5فLqF۵x968:6 5~5B۶FO~0@t4r6%J6i06J"6}6EF5k.A* DT޵W5H鶠Cε666NP`V5 JpCO4 56f6%m5Dɞx 3t552I 4*5wUc^-Y.3Ny66͔в"ix"55Zj5~bƶl +?5Oa6y65µw 3ZJ=%4|6`}46=6h6n6X `/646#6I5zW~&5>6aw +!5쵻!G'&/i)?Ɵг޶*^)x5`66RP6f5ֿ%!;44}%uԌ}۵l66tȴI¸ͬ϶5-95$l5^6CP5`fܫ-6::6z6ӆ66`i:6 @V +y૪ QCR>2hMᴚ.H5*6BC3rI 5EֽJŶh4/V_z_966ך5N`a̯5 64(QEҵ/޶):\fhܶBx4 h6g6*0ҵ}\ڵS1bԣ5Y6,66ճ)T^~F揺56wy5sN6b46g%4VO6 +6ss6[6|#6dĩ uÌl[5!666:6T?ǞIF564O5 P+M!ɵ ĵSd68=n6~Z6S6hA6VZw`nIq5 !Nr>䇵 +۾5T¢6Y6~Z5$ȶ9565N_I5ڳ + +6am6NQD5$4w6jJ6WV6|5zT6 +51L3jζܲVYlZ 5555c55}4KdZK ۵oz3355H*8O*YcU64JQf5555Cf#w5ݞ6*x6,3wYլ373y^5+5v5GY5>15b(5$.hȮ56.5m%5"Y5$6S667VǾ Zh55v<1+4J556g 6BE¶j4ex6cu6\ .+jݳNj`P.5޶QL5wmlMڶR6]6&&m6! 6`6&576C6hǶok Y5ى жzʑ4 6f%5Y+D5i5I5}n6S:Q5o26=#V +SID8:Fr686556͙ķ$vE:yGɒW5B6Dqaݛ54=lb1 5p;Ki$6ѵt?w6P0]v*>6 I5޵E, +CjcY]!s56nV6kt6 5^'4vŵDu5[v7 L7V77M5 m +}^1Ҵw6'J6&6u5\o5&5GO(5rgu44EZ8]͊L;޶056R5OHP5P6;(嘶Р4wm\5Ű4-rF+5-66[6"56x5-%Jo7dY-ж0Ry56w_6>w"/~546T535S5~q55+66M@6u6O4y8264$5دmG|o`j15t6Yh6h6kW6+`sÐnǶ{6<ߺȶ-#86wf6[ " - ?b?M4GiD"5ƴVȫ6Jbx6N6z+:[Z`㶔ؓ0t666>5`5޸ 436;6c6 >3 \5O5U6Z>b5\6(:66"r5˱ІŶU?AJ6f6L6xԵ?浬MJ ~жyp ~5d5;"0YtJr 6CUh߬366^&56!5A 6:6s6s5qE@˶wƵ96;)5Qn5ԯ6+uy6p4ӵ۴ζ5 +.ǵXV5_5L +5"41[}5'˳52+Q+6, +g6Z[6_6rrdt,T6)468^h646Ʊ;'"<µDi84855.5$4w6."5ŧN5z5G.k266G6f(6 +46y7o85v8ah8ܝ7:57 +]Jжt I68k6=_5*Q43`c_oҵX.2JS'ε*ztɌS)ZIԵ"5Ca 66P256 5#`#ͪb[-Ѵ.N5|8h1E̶3r@)%b5e6665M66!lOʤW #5v5s55d=6ї66Q.5W5lv68d6hC6F5kOvF"3=5 6F'6vX6#;J= P5q6k:6$76o6^4pAp$Es7>dzU3g>'ڵ،g6O74ˌ5tҶ4AC\553 +1:3tLk0+ ws>5M,6 }N66676L}n6A64=&Ż6@k66;˵Nj(;ex>5**6r76|5f9vF9T5-1H156e6{2ටŜVL5s69f62l6̻ +(ć &x̶dG*K56H,s5pDܵ ?T׶#K*66ے鵍춭ZEA2R6Mr3z8n==ӵ9>Ȑ4FT556 Q6xX5W=_@/fRh|4]{@ 66/4ڡ誵򸥵t541lRp5٩O1Kܵ0w4r6 \6$AM5;6'?6XjE/ma56g5݂p ,,1h5c6@56'\5Bӂµ^*6%6n6Nd5.ioR=2-56K͙6 06-6]`7_88ٺ7ҷ6<55I +򶣠5AZp53"(ضV>u䙵͢5~5ZJG=߯5A}T55L5!(4=6s#5yô./nEg9غӶ8LCXۢ4xD3l53ɶ%s466?6F»6JA6e4œm޵"e6!U4ygj6 `5¹T춃K461ݵ2Sm!56]]5E+ε`4`63,6 + sǶ %V n@6m6p6|y56266T5˰`6`Q"6R 55-/Ĵk:9:<66+3C65L*65P6P6s-6g66,>ⴊ_[o*)+ +86O6<g5wl3Ҥ5.P626667 +673C65d@܎z!0610:h4!5ߴ:j6/6Hy"d6]6;6^6"656dw5L6B[6?C.JD 6 3Ȳ7y}A}5k4m蔵@1Aʀ56ͳ 4^WIڵO;+Axt6jIjNun51]3BLl=F6/z 665~J44pO|FR3j5q6A65Z.t66j +3)tO0~%1-3Lt6Bۧmr\_ܵlB\3)5`i6?65j?6W7jz7f776n94ڥJ6#54#413ݶE#߬86M62ԛ55k”56[P5붶`[>6F6x5b65f86,E6.$l5v5 55LG5)4јyM;!6 +6 +gL5Pv"O\5x&R596˖G0)5y6H66|64"X5@q[,t5|5g5p63636662Q +v8a`g5C}6;SQ4Oe5Hj6' 6"55Z]+:Rs591ZT ,4\*(54b`>5?j+1Z36#6Z5DP>Z5k646l0= Lc 6+4F_W*o6-5bq5QB6876/?Ŷ(35ƒm$6gja66p6d5F55w: 5Kh5ITlŶF4]=5'B<641\x0ڶJ635}EX5M (52˶ 8e4#6z5426Y붴ʳjSR6f60G66p 5A6+6>4ҡ䴗^ִ'V)6 ҵ=߆Yalн4ɐ]{껄6~56}v666"7 f6.65)a44a.Ut4̱lMֶ!n66xM5ؔ5KQCu>D%I5~4y5zlܵٶs=5ùp6G'Ql{5ZF M|<)%6?5bDȶ!L 5646@6Y@۶ kTյ6:65DYH%ĵմ-6W<66m5r52?5WTֶz{(+9O5h6\5t<596#+ml5NZ3?P6I4u7FZQ5{e/76 +my\8/5{i30h66V65̵^O[S4_5< im95GLѶ&_5K53@,˶[5]58IM <6_9m5aжvir'6 +$ @]Z6p(6*ZԵ9&aNܶ%,t5e0666G]**{4z5z5ijf66 6Z6h6~5l6.5fQ6Y6 64KqX4jю!6J6y65z6 86 V$6Ԕ5Yֶ6ŵv5" +5O6z4Zj561A6[&5/K3Cieݶ_S5Oi6Kx3`IqWk60};5c/f[8R\9ж56*5IQܫ!6x6N|ҶR/жZ3{L +6}T\Tr6%6g6[ôGa4U6i5P,556:q5dAڵֵxs 4-.둶"?Ͷ0FY2606f533ljU޶*}l4";|wᵤ A6ܻ6(5dG4`kWY6Dp5:6?<5X6ך66nO6\6 Oz=6TI+6 +[64K6766"GdEL~ֵ%Z㶻s>4dS?$665wb5 6;>={T5:4[5\6 ->5Cy6T8.F*nԕ~|5t6m :ΐiT6[ag66Y6t3' ~0ҵج4ӆNyz'#5ĽXbLǯawlXGb6?86CM5ϑS{Y˵Ľ3 c62z60s5]tSp:5$+$H606V<"q{^~6!6K 5j*}6$*6oo4=5D5'2lY`{\d6(6 +af8S>/6a@dYԵĿ$жԵ5_b5U6\j6~6: 5;5Ճ5L̴ҾnBDv@ȌPtؔ0V 5:6566߶pyC6>6rƶ's6Z6ED45h6&_T ~G?666 Ub3bx1U5/N66 _\ݶ@;6wo|6V6_6+5ԁ55*5>4au6%6q33'̴WwV綗6(62Q6@5 +_6tA5zԶr鶨¶fV5z66~5”4s5Ři@ @55EY45yP5߀!5A53v mb޶>5Y6#6cB56p/6,n<37 66Kg6s617״"=Ѷ625Ts_@5U66{6Qz~5 X6Cj43v6E _DڵJ5ax6]A5ڗmoR*x:Q +^f'DqUNϵ Nƃߵ<4 +Š66*5D6$|5sBд_3X4 62̵ɋN 9DIw46L(66丰6Zd䵈a"5 HXF6 86輨6bo#3NBi ‹|~5 5 @,ʶ L"55`6M 6u{51`~gD56l5g5Ky686 z5}4v5@POX6/K6z w5tD?^2"hO-e5n65⢶.'h4S}'H^5S +5d5=`6)r5D|tUIxH5&赟Q+8Ь`ɶ66cpwX~569J6 6S5P5(V65Ƀ5/5I6$vy5 6vӏ6=J[8qb} 5V3(g4qXCN$$6g !66`xP6DK g6!F76Ͷ_6>P57Z3N HVz䋴kd053ГRڶ!R4ڰ(6C76;66bf?~Դ56L6fO66TJB6z6M4S7赖r)65&6(6\55"ꂷou75n^6_6Rb-5:5[:lɶ׶2( 6K[;6t]5`%4; l'T/]51"5GU55a5H,5L)Z5w`7^6ʒTÎG&'ȵѶ>tMä6(o6'Jr4O5q&K6;<\D 5662µ~ص3s5n65,W6IF63ԘnQ58p6\#EHP$5 D6IZ6-oʶj^ktI̴-26& 6Q{6. +2JRdP36L`6z_56\5D} 6)g5-(+4Ip6˱66S<6-66m6>k=3j6!-6{@4/<5?x6<6D6F]595zEq趈/rB5EEUP,ϵG)4/4F4xU;9˵M}Z5"6X + 3`6Qh64C!l8"舶%!>6K$6Ts]5Sy5<, 66z +4|1HTw'OZb¶?Uƶp^=Y̧A¶,T6!6 4Wɶ/-${5SFPvQǩ(b +k58~6%3n5{Pk5ݻ5!Mj̶ ".40.@56_6G5ẅ́gMԴY5Qj5"~551ڴwky4Cz5W`6B6}6r1f5c638/6\:)+)v665U6׶K\Xش&6a66B46xj5}lUuy"h6a6th45d66\+#K2}xc7#7(B63fլ56v6:646?6z65E4z56IzD5ӎ9յ-QZQe565&6eꁴ5i5^f񶵦F gGֶf<4ڃ̶~!@6dZ6Z*3"1"5ρ66?K5d45:55h6Z67؎4u5غFf s^x-Pv6n6~E6Hqֶn53:ӵ@c6{5(:2h(5»5wc7-34K666r4ា/v5 ̵p4'ж0&45|5n`t!]]g6j4hs5pp56@666R5^%,cжy566#=6: +F6!1+y6*@5 |/¶[+8568+[5^ж_=_555ވ*6;Xư}45ᶴ?\ȉ4)6-3Vᶢ$4ZK56i*̶x5(s5yf4@4b95pe5bFX#6hX6 y@鶤õkܵ zpc"(TRζL"=BurjB:h6g5ͶX5J6,5u?9ζYѶ$4L4=5E(5b4.T"cXH616NtT5//6C!46a6 $6}z6O,_w 45l̯RXm.˶5ζ"]Xe552n4p{566C&8'Ϸb ;66J6Bc5ϸ5ǮQyĵ05՘D6]n68F6 ׶*ͶRrpS5@61k䲃d4r4-A^ k嶃PwA*Gc558GF~X5%66&Lc5@6f66%ܓ6 >u4I'4ֶfR4lG-5C5 + B65|5_D5̶0Ѣ-36: 5֯PŶfE1c3Ђ<5hhU\65\26xS5 Y5V66~F6[38!DQ4J6&66Y|60OS65`/0^4|6&6X6 +&6Sܦ5Z64_5󝊵j6@\c4K6.L&mֶ_ D5{t6C66n<#6Z 6 "R.H@϶.;6 6rX>5J6~66v6^wO616e ^Y6l61\6664Ӵʳ6H6&X2 k/5r: bJ455j6e9ܴ^t6E6=ֶٶn^636mU5pFXM5ï5TEP <5p)6Kto8~uJnV5ɳ6f6C6*5x)6[5px ڶh +6 Z5]dm59#6{6z5-Is5h<6?5l`dzzU/õA5e76@6n4|]1 T[{5q6z92wِGo֦P-( 5 556S5PIFѶyE߶HU|+56^6p!I6?6j]5nf%hX4Tt6L\6'on4ܮ35rЗԶB'͵+:O"66cD3`41x6 ,@26xxH445[б5'[ֵ||-^5.511޵L6xmz6|V1"Ԃ4:ActA55Lӵq3mD9Ҷd ˶Oe&hD}WI4ܾ{645$˶;5=[5{80'!N5$^6a*^63J44d3\ﴵ +5Å$6kc5@7ު4*tSO1b45^5 4b5 5q6Ƭ,66/i6Kb6ƥu66|gm)E ]3]6C5͹49~56H5S6J5 566O5ԢBm856sԶ& 6'6V6uo94=RնV}@5m6X5wX>4W5}545D6 k)5Ϧv5uU6ou64;~ 凵@_?oKzs6u +6216[w523ҵ؛0 cu/ضqS67(3o:5Ҷ6"%Mʙo6 666@ܵ)j25(gy1-5/b6d 6]V6'56"H606_Xuh&5쵙 i>5}g66&_ѶS(6)i37m(;\5x5zc[5B#65h_5¶$I47e6H6H26%'5϶YX5sN|6t65޵HlҴXضb-e66ǵŶ@?Ez\F´%E Q{5<-6Nj8,6I!6۵&D4v3't5 ~3b붫Uݲ6,6v6+y]#6cX6B5^56<5vc$E559R6xY5jFj&5!33,鵦Q6=7 +673 K7q4I +l58q65Qȵl4\46C<=c5>66 L64)絉#s41㵧߶C7;x5@~C56<6q66*6.b6!ӵ +46g7#65^d!$J5g6?6J6wjq6A6`[S2ˬ5(5@4ЇL5_06@?~5ٮ4޵&:>5#6c4jMFNOτGI_66s#5KJ10T +)RȵWnǶb4u?ڶ&0vt<066Ķdܶ nL5n!ͳ5l4d?py6C@6>5!65X6`f6f_6BAp?ζA? x56^ζ +Wwg:5dLF!ڶ8m:?5n58)ϵ6+65E5T75&~60^-$4 =6]<63赝׶j̵G6a65H"ضӶldZ46^o6_6"ڱn}ݼ5]%6,%&$5}@Ҷ $u46K6~66^64FPՠ|64#5˚5_5{45dg~6}ltIеޛ5a1\6 +l2O^%o5=@5駊6sg* 6GF59";6L7 }6ڰ? f)?534^6956'꧶p3~@545 s6S6`5885x'"a)CE./-3V\6J66:5 |Y`0>?[56d54LXv5 85Vaq66<05X956d6c6-66i5h\u6r66~6Y6+jh6L5 "9gʵB5#66 T>[ U4\\5T?l޵pY4J&3ۼ5~5g45chX֤565ƵA6 d6!L7@սRbsͲB5 n6q6 +6=߶d\0x%7uR)/by͵!# +c<:۶}ٶ0PS2BaM5!<65̵J?36hr6x_+v58da66d5}AR56v636жb0:jJD9U85!6: 6_F5FAj5ˮ&56*5Q56G6{6OuŶAgOp5?6N76$V56Ro5C.i56qq5=5z67ӡ5tw 5 6o5ϴ؝3O46E'66cF6J?SPy6R6u5'5ʶM2Qt}6$66p%cW6coP6;5~V5kx5 5ӝĶ/ٗ46::66hO6ض@%d565(X5(6p^ +5~<4^635b5Yul&;376b5A>]3q 4939f4j#5s6Oi5 5c5Z`;9e );b 55P̹-hg5*6667ذ겧P6"l-3"6P4957R6w6 k8ǵN5(6ת5~p);t5.5Xu46 V6{m4ĵeƵHNXm>5 {4W4ϼ5x 5+T5+x +V4&}5/5u?o&W3(5)IQּ5d6"6 +#-[ݶ:=k5wR6n6i 6;7$"7R7b7J<4H=e̔"6;e4e!X595Q#5{5 5O52]6Pm45ct5Uʐ5JUf366S6;Z*@h.޸u10!p15"6?g6̷v6Jƶ +q +t1(52U04z5;~,6x6& ʵY&[#z@ Ķjnℚp6:6dx}JK6wOx6KTIQp546Fyƿ83ȵSw6,|e59sQ+5Ԓ52/AH6{6ʵ>67bx7:a7= 6h6Ds= P55 6 +'jY55j44!"5&5^ì`4󫎵w!`%U5FX6$58'ֶ66"e0NC f]l6B-66 ~ǶD?+3@,6'k5Ry4@4+=4jDI`4v5.jqiض̐`6vƜ6v &t߫ 5צ5f涵.]2aT]>56]d5Oc6$]5(5T`$[*aAɩȶd8#Ŵ4S655~䥵lo'SiӶ\&q]oS\5466\4Cu(V~>HH4D646X5V[3Ro 4C5A66ME8`z5O5FVf +z5& 5֔3D?|5rS553\PQ%͐45jŰ"w 5傶)P8{Л`|B5$4v}Fe5g6 +6i6`4.dG$zOQ6:U6L5N(CV6694Eew[Ά4拐4*~ ڶ7+6y#6[^6Py6B噵̚␶Fk066µJVµY5R>5쀼56-E5@´W5~53o&v4*6^ 502q5'6S6:6gToDl6--62aw..>5e5 Eo6׽5 2O5sS6A6B+h6F\6d=&FX +,=̵:44]4F5',pvG6.̔6HR\P!nbԼٶ4i6,26XH_OF)`}"dO@q"ζ]c0!l4666tQ_$No0=H5S.5'J">M}ʶ,PG'?86Z6 eƵ.N56#̀6V6̰6 nʵ5M<5_6u 6:6Y5?f`!73B ~:I:5|6Dd^n6 +6o5d56#/5F 46*X6#7ɵ6fZ=& T9 l5B(,T4rb4X56]5X055daIu5 5tGB-y0p5v5Hϵ256jG5bǵY +4ŤZ 4Pt6gs_l5]5!xs5 wMݶ60!6D6 +-VRGͽ6?.6"lf5Fo;zv|66f66d +5)൉Y.ސd nEEv56c6uT-̶px|p0OߡcVeuɶؽ^R.5}¶]g[O)Fua66l'16~64t5]prkk7*77R504;@h45I5;6EO6U6u5"4d`Xy쵣T5۶6݇;ë5?54Lȱ5$W6j6M646mo6 XO45P1c@U5AD6?6-Y6%JMf5K6 6E6#lS4Bm6ZG6P =6&65jG鶧֌4?:c6,<6<5z6sQ=w6;6ӴC667t?B㝶f=W%62}<7H6X 98H5 H534e,Aq4{5۝p0Tnmֶf9s4)!55S[96?/6ʍm65⿵kG|R޴6J6t2յvy6h6cw8&4J l4\ +t(>6R5;6 76Rk5,6 =53c5m}"6H6]=6 +ŵgx@tV2=N4N6H+_26kU5Rm`7rLhwp +d5J4p6>=r10.x|R66gD0#<~45]5chص FkfyR?Ӷ54۵3zNX4@6[5)S6L)6=8cWڵ޶MJĶ9ҳ65|B566McHlSS4Ւi&N.M@6aZ6m6/[;(A(N6T7+d765B4b5 `6?I46b6?O{v>ob5} 5e05iL^51gȶFߍ3^f5it5iH6YA6AX=ic '6F6 +566 /7և65xM34I469 7PZ7%n6~RKCBU""5a6d6T@i˷Rk65 5{{c3<5/4sD鷵q56x>6Xn<6g5!5U642r+&} ߽6t55׃6g6$ 4򛴽B4 +5=5{5̟6J6N3 H򵚘϶H+z6?5Ğ>o\ΜU56:5 4U676I45㶠63,5%5ǧ5uF64=Bp?nh4TEP40KϹҶ% _5ytк J4e6 P61[nQ6 +6/*6<5;6?o6#dA'LܵTyٶ6{6@󶉣66"鵟˽ & ozj 5U0DB5Vʶ3xhk6=iX׵z6)67E@3^h5E5ʵ5:455=r6 #.X5 )6P77嶃iW$6>A4<<յa:`Fh6#DE5ʼ5w6cr6ضX56Qô];еr5)5Uy6 Q4x4H4ﻣ- vyAJ/55"=2.4q6s626S6#!5$6 -ˍ{6W~666Z6Y37CfQ 5Lv6CI6J5* 6!6޺7"m\66nF566u]v=z5M 6]4528N6K66O<6?6 &6z6*5ϩT6O6Έ6t69H 液%ȵ552cy6G6^j7o5̐VIG4(266Y7>+71/6P[씵ʴ5R8V|ڶZC626DT5[ +M$._66\6755!5&5ƵnU=Ė57SOB3n5ШҖ:*j5!n'6Pv +_6±@6G Gnb } +xL=F]µ5E(6736J6`@D X׵5cU5H6>>6]H6Wضps4z5;ʵkj5=fp666 6(7 +s76Hj65\U566/?\16r$4`5q5{#56,6Y0n5ڙ6FD6"W޶?6:ʶ5P Ӡ&4ʶN53e6,-:6QRni?ij4KQ 4\6.5MP5"6Wl66A66z5Ѷ-Cݶ5<26n6M626}/({%4CvQ6$5B6Y^6<(6ֵ͙ȵ6I5tLl۶Wp RT6"4m63-B.$:xU5kʵjkn-v5566j5664l6M6sPho T=ᵝH狲P 5c>6i,;6'0t贍4ݘu2ǵz 5!5)5'6 5ije5]|6y5R趰S6576ohZ:Qn~'66~i65T=¶;{Nk 6s|W6]p4w5kƵF +6Y65~v585_5e(6@z6y6ڼ676=$6N 6Z e6bP665"ҶVVa뽵o6 _6}5֝6'}H6OS^b4o5?5K<ơ[a9e*:6&{57´o3D5Y6LZ626UP6t66w%56J4C 9M&xjGw5|6B539<ҽq03-.55@J6Z666-۶qcnŶԶ25q5/$ TVHBG5H06zŏ6MS/C}5X,C6*6 +h5.5"bl4G+T,׺\ pT@3܃ֶ# .쵐@VĶT95©6z7:c@7>/77Ћ7U7W@6u6b6l6<<9@߶j5q6ju5s62-6=6_B6cs6x6@W66L'})l)gǞJPu DdI15i65q7|ƴovv8BֶE15\5Җ}9ƴM6 6K6Zj&5p5"޶C%5^6F6Ex{5oQ6!G±5v6-60)6}5`G\p5-pǶ5$+"6u6i5m[/ܵ46 $5@ 5S6b6"gZ8(5#BS45U^*/󇄴RYж M3@-촉4b^X4QD656:E>g1 ^Rܶ6,4^85 :Z6ZU6A5M4ĭ*95aD6/6xѵ[45L664޵贾ŵ^5X6n6B66m6Y66?6y61҄]E_ 6+6v6%ya6vtl2.*j5759epFx&5.6@5Pn\6'6-;5̖m$Q58j6%6R653 5T@6&D57_ųrP){5c616J6rKǵN(_5+5/Fֶ,3>5e55 'vܶ$- U 56UA6*@6*>;RVJ52<אųL5Z6Hj6 =5_4g{5@5ĵ?Pv!~ǶT57!R6 5%ش/逴H4n3dƶ}Jv747<[07oY78766*J6J+*n|G^6@6d5?55o5iµ/%26v,6mGBV6g6`,m[f׵W~4P*O;$dx4޿$54RN5ʷ6p6h5?P2& (6T69kx46/6]504Z45ҽz6L"6 6$ +5۲=Nf5651vlF4;Y$5Lx2%: 56w62=@p@+`:85QC6O[5sK4Ѧ635,5蟶O9]>R4-553!PƵƴD2dH6m5H'6!6Λ6M$iִMֶo[¡6P4Ժ:,k̸w6`[7M6ir;Ir$55+ ^" 56cߵK~)nk5lP6~6x6045`%45_6Y6xz8՜+bs6/]6H=5l5/4nt谶xnU<Ŷ?YNbNܵ 676Y3'cRUUUij|x6ۧ5KӶMĶ fqEZI͵tSZ"6^]6~61966w5!5#町p656$+6򵁾uXŴ:A6I65h26{2t{:඀J/(6 +d5v4r۴5O.Ķ\5gn5@5˺5Skr5B66S,`̵VK2r5;865 RpUQ5=buY 6A6wu4عc/04ﵫֶQ"6q6|6Iw6L(@ﶖtqص"ʵl'b 415嗲$z576"j65s"εB3HA6;667S5`"K8|2X66R6AO 6ZAt6Y6}6 1u4F62V3@VvK͵n꯵~ӶIw4)563xOi{a5h55a5u26[6d +6g86`5z񻂶HL6[#W5;^6B 955{5,65W4潇)9P-506j76SxO3ഘ8޶p548F&[(Zz56>,5X2-566P6[6Qd\6$6wM6ض:`576Uζl4h6DutwJ&53ܐ'۷67 6#65]X5tN(6K6 5#X]z56V6+%xL#ճ50~5{4MzA5x5 I㫶AhضeȗF(+I6P5Bݶ{5ݺ6X6>6׬~5ޯz¶]@5=BGZQl.r5EB8Vv35 z6;66F΢6u624J646:6HzAԶ#k$/53٦5(6 \6.0譶S! )o6 恰kr ܐ'$Z'[ⵄK54v6S6}!^4n6X7|6]굼+kOx)g3>534:4`t6h6$4.44 E45@Ǔ 'U86t6/ 5-񵱱5+@ܶCHgS5I,%¶ +A"K6]Zl6C ¶sp|46pu56`4TA55JõE@6}66-6 5\9}lmf'55MB.'#533֞x.L !s^al845Co9>(7蝹殶P_]l6^Q6y6 x5eyэ[ <546ZWζΦ65>Q6o6T5D=NBը2W066Ѳ5- '5R6$[6Q6%(Cd5 k}6/@5AUzuB5?6Bt65\$/xXp4f5ߝ6z6ڵVs;5J6m76/ܵ +5r 5Eණ/-  +Un5q5#XN|665h‡6J5D35b}5΃66O5&C]Jʵ7Q!<6 +5 +5 +C5m6?6.6]l6/%6DՋ645:/ERHl5>6v6pQ;5P6H6M06[-66M6zOY6556D4Dڶ9诀4^]e⩶5wP +5le6q6/oJ6n6UJ(yR\*6%5o5D43hB536P5N0b_c5L6K-VH 44<6Y6bv5)5l5c5ٴi7vYZN@V6QB6i6 +|5ͷ + Cߑ5Q5>6a6~L5^627656 2;6.V6ef;X5B6 Fi6I.66olM+` +@H~ԩ5Q?ecG5*V354 +*D5;8¶ý5/>OW;04IC4}(۵p6?5|5xR#aF⟶l 566'&i66>96-6t 'Z4ڵD=(v, Gv:;1Y v5V@56 5Iu 5 +6uS02536Ѵu656mȶc[6 F66TZ6e;@j12xWеڱ66e6DfiD6&6V6P>Vg쉶h4~4B\ᶜuL\r4nbB5aC56\$4$7W6('v^<-6jL6Zs=PY5o6W%5ζ߻{ 56F67'ܶ9ٶ<ζж <6/6f.`4:5 ?66c/r}j;jG떵6|6Kw޵lDա3g(5׼4R*&]`a x46Tgq6Y6_BڃCI5^6O4*696o55ʶT|lEx%@A6#x6(t6YET5[ 55<:=V=,﵆e61Bjqp'|4ll6y16`%60;46yô87cv[D0Cߦ66 x0ب56xK6=D55dߵ5u6zx6%2tO:FI6DL6#6JI_56NZ6ԍ6O[5⣵P5\5'rm϶趛wPѳ6- 6 3@g55쪵ĶD*55xaU Z6̹7J6dࡵX455cWZ|51554+괳6ᔛ3τ66Wh1ε)23Olϥ(cV̶2ۉ558oT2 ' 55蜨S镯${)? 6=y6"N@5?q5O5ٟ5ʺ6;51榶6^ݶeQ504.Y24_V5r5?*ܶ4G<*l6ol&6)5q5vd54Oֵ~;˶4?x45&fR P!i3붃L`Sfvܶ\ʵ]M5@5_c!5V`4a4t44R4&S%561ת6N4j?Nl66_[5WX8~&;5!h6kk6?5&6r4WBYҶ T#66"4HXX4bM5ق̵ +Ŷy#;!5*2`*͵>XxæBXt3+l6ע6F޵YSo5IG2rVj4p5g5ż5S3k756fkdM3J6pZ65. Kb!϶|c4L666K6z3uж֟1G25#6-65[NIXES6@W65x6f5JYQ 6pun¶`v}ж_ 0r55 ŵ  J<:l5#RT4x44 J6,6%6546l67*˴4U̶?hߕ耶Ŵ6Pw6@rE}GH25ڵڣ_Rõ6L1r6EC(@$yʻ66ˆ65g>Ԟ4r5JʶضR5䅶6߰6 T\-ԶCUʭ65T4yyʵEeR55ös-fY3y*51/G6b6|2Kx4ƴ3㝵|xXl554϶ڶi6Y`T6"45|K3 +4V6Ļ6b5d,6Mb6zk+6)6W5 6FV#6m2{4Z{|o2hf5S6x 5TkF47)糶hMj>6UCgC(ߵGqn5Kж: +#ӵR!B.5̨-6^D6vdr1 5m@AϬM66;ܑ~58$46 'ɶX׶޷ɶu[K nC{5FS2̴6&65qHMxn:x3!F(6_)6j46XR5 4a5AHIl5vW+PE45u)}5!\6V6_*4荶bz6?s6AiZl6a4K$tIA6$6aͺdܷ%|55*"6~;6N64AΪ5$6Ը696덶A%p5ѴQiK35\5pH3"45[6f׭̶#59L66Bd +L}5,~E66OP d_e@ܵG5,6~5bx՞3Y4_<5@5S? Ƶ$C6!45еpj5&.n" QDU65LU066F&5e6qc6nJ`5b6 +76 +6J6$6b45s5!~5C"Sv+׮Dh(z583)65_ \5]6|5!x @m i5:;K׶ _5ˎ6Ld0gL=״׎^g-wpk6oz6)"f^۴0)PŵN,6x6V ZF/ Hf@OH4qBu4#E5D4385|25V6y6C`hauL"60?6@Rpo$5h4h636-4?aͬ5 HoW{Lir6UO5H45"&5u55: St M3!,V$̶C<1y;366T6@6Cx6J ҡ򶢴"h6 7(766AN56ҵn끶nW6a6x76J)h&ȶ85'4zD64ť6&26g62v5AifMz^6 y66ǵՄBy56h45#^66~(ƖD !2;5096#<.6H6Q^=zvCgHʢa]5r3ⴶDbZXl6C66_ߵқt16 }1Ƶ\A6%645^ -?5 +6VYL5g[45?I눢 5B~6&5st ޴ެE8|xҶI^56p6o}3 q'4铸5U.6X5& IX755b(r6$69W5ۚ 3A165޻6}&5Z?=5 4^U:5{b5UP^ʶaֶYҶDQ3 6JtJ(a/ւ6N6yb>HO1ր6V2a6t626_6-5:|3hI6m8566Q5$絢r}`G6 +6.6cU0lٵ6N6ko6XqFu01G`6 Date: Tue, 4 Jun 2024 10:56:50 +0100 Subject: [PATCH 03/11] update readme to add pypi link. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dc0dfba..b816b86 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Source finding package for radio continuum data powered by U-Net segmentation algorithm. ## Installation -The project is available on PyPI, to install latest stable release use: +The project is available on [PyPI](https://pypi.org/project/continunet/), to install latest stable release use: ```pip install continunet``` From 2d025f097147cc742225c3f41db3c4f3c68f3a8a Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Wed, 5 Jun 2024 11:39:11 +0100 Subject: [PATCH 04/11] add fits file check to finder class --- continunet/finder.py | 9 ++++++--- continunet/tests/test_finder.py | 0 .../tests/{test_images_fits.py => test_image_fits.py} | 0 continunet/tests/test_image_pre_processing.py | 0 4 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 continunet/tests/test_finder.py rename continunet/tests/{test_images_fits.py => test_image_fits.py} (100%) create mode 100644 continunet/tests/test_image_pre_processing.py diff --git a/continunet/finder.py b/continunet/finder.py index 62d013b..6be1637 100644 --- a/continunet/finder.py +++ b/continunet/finder.py @@ -1,4 +1,4 @@ -"""Compile modules for source finding""" +"""Compile ContinUNet modules into Finder class for source finding.""" from continunet.image.fits import ImageSquare from continunet.image.pre_processing import PreProcessor @@ -8,9 +8,12 @@ class Finder: """Class for source finding in radio continuum images.""" - def __init__(self, image, sources, layers: int = 4): - # TODO: must be fits object, add check + def __init__(self, image: str, sources, layers: int = 4): + if not image.endswith(".fits"): + raise ValueError("File must be a .fits file.") self.image = image + if layers != 4: + raise ValueError("Number of layers must be 4.") self.layers = layers self.sources = sources diff --git a/continunet/tests/test_finder.py b/continunet/tests/test_finder.py new file mode 100644 index 0000000..e69de29 diff --git a/continunet/tests/test_images_fits.py b/continunet/tests/test_image_fits.py similarity index 100% rename from continunet/tests/test_images_fits.py rename to continunet/tests/test_image_fits.py diff --git a/continunet/tests/test_image_pre_processing.py b/continunet/tests/test_image_pre_processing.py new file mode 100644 index 0000000..e69de29 From bdd28f15e00a4f2996a5d5f2dd5b21ba57a82cab Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Wed, 5 Jun 2024 11:57:33 +0100 Subject: [PATCH 05/11] destructer input_shape tuples --- continunet/tests/test_network_unet.py | 30 +++++---------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/continunet/tests/test_network_unet.py b/continunet/tests/test_network_unet.py index 012aa61..0062015 100644 --- a/continunet/tests/test_network_unet.py +++ b/continunet/tests/test_network_unet.py @@ -14,18 +14,8 @@ def test_build_model(self, input_shape): """Test the compile_model method""" test_model = self.model(input_shape) - assert test_model.model.input_shape == ( - None, - input_shape[0], - input_shape[1], - input_shape[2], - ) - assert test_model.model.output_shape == ( - None, - input_shape[0], - input_shape[1], - input_shape[2], - ) + assert test_model.model.input_shape == (None, *input_shape) + assert test_model.model.output_shape == (None, *input_shape) assert len(test_model.model.layers) == 49 def test_load_weights(self, trained_model, input_shape): @@ -34,18 +24,8 @@ def test_load_weights(self, trained_model, input_shape): test_model = self.model(input_shape) test_model.model.load_weights(trained_model) - assert test_model.model.input_shape == ( - None, - input_shape[0], - input_shape[1], - input_shape[2], - ) - assert test_model.model.output_shape == ( - None, - input_shape[0], - input_shape[1], - input_shape[2], - ) + assert test_model.model.input_shape == (None, *input_shape) + assert test_model.model.output_shape == (None, *input_shape) assert len(test_model.model.layers) == 49 assert test_model.model.get_weights() is not None @@ -57,7 +37,7 @@ def test_decode_image(self, grayscale_image, trained_model, input_shape): ) decoded_image = test_model.reconstructed - assert decoded_image.shape == (1, input_shape[0], input_shape[1], input_shape[2]) + assert decoded_image.shape == (1, *input_shape) assert decoded_image.min() >= 0 assert decoded_image.max() <= 1 From 96d9fc907cc1dca5794c341c41623ccc7a8704e3 Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Thu, 6 Jun 2024 12:59:26 +0100 Subject: [PATCH 06/11] add preprocessing methods and tests. --- continunet/image/pre_processing.py | 35 +++++--- continunet/tests/conftest.py | 80 +++++++++++++++++-- continunet/tests/test_image_fits.py | 16 ++-- continunet/tests/test_image_pre_processing.py | 50 ++++++++++++ 4 files changed, 158 insertions(+), 23 deletions(-) diff --git a/continunet/image/pre_processing.py b/continunet/image/pre_processing.py index d5fcf51..3732e16 100644 --- a/continunet/image/pre_processing.py +++ b/continunet/image/pre_processing.py @@ -6,26 +6,41 @@ class PreProcessor: """Pre-process image data for inference.""" - def __init__(self, image: object, layers: int): + def __init__(self, image: object, layers: int = 4): self.image = image self.layers = layers + self.data = self.image.data + self.wcs = self.image.wcs + self.clean_nans() self.reshape() self.normalise() + def clean_nans(self): + """Check for NaNs in the image data.""" + if np.isnan(self.data).all(): + raise ValueError("Image data contains only NaNs.") + if np.isnan(self.data).any(): + self.data = np.nan_to_num(self.data, False) + return self + def reshape(self): """Reshape the image data for the network. Shape must be divisible by 2 ** n layers.""" - if not isinstance(self.image.data.shape[0] / 2 ** self.layers, int) or not isinstance( - self.image.data.shape[1] / 2 ** self.layers, int + + self.data = np.squeeze(self.data) + self.wcs = self.wcs.celestial + if not isinstance(self.data.shape[0] / 2 ** self.layers, int) or not isinstance( + self.data.shape[1] / 2 ** self.layers, int ): - self.image = self.image.data[ - : self.image.data.shape[0] // (2 ** self.layers) * (2 ** self.layers), - : self.image.data.shape[1] // (2 ** self.layers) * (2 ** self.layers), + self.data = self.data[ + : self.data.shape[0] // (2 ** self.layers) * (2 ** self.layers), + : self.data.shape[1] // (2 ** self.layers) * (2 ** self.layers), ] + self.data = self.data.reshape(1, *self.data.shape, 1) + return self + def normalise(self): """Normalise the image data.""" - self.image = (self.image.data - np.min(self.image)) / ( - np.max(self.image) - np.min(self.image) - ) - return self.image + self.data = (self.data - np.min(self.data)) / (np.max(self.data) - np.min(self.data)) + return self diff --git a/continunet/tests/conftest.py b/continunet/tests/conftest.py index 8a9be3b..63e47e5 100644 --- a/continunet/tests/conftest.py +++ b/continunet/tests/conftest.py @@ -3,23 +3,49 @@ from astropy.io import fits +from continunet.image.fits import ImageSquare + @pytest.fixture def fits_file(tmp_path): """Fixture for creating a temporary FITS file with random data.""" - data = np.random.rand(100, 100) + data = np.random.randint(0, 10, size=(1, 256, 256), dtype=np.uint8) + # import ipdb; ipdb.set_trace(context=25) + hdu = fits.PrimaryHDU(data) header = fits.Header() - header["NAXIS"] = 2 - header["NAXIS1"] = 100 - header["NAXIS2"] = 100 + + header["SIMPLE"] = True + header["BITPIX"] = -32 + header["NAXIS"] = 3 + header["NAXIS1"] = 256 + header["NAXIS2"] = 256 + header["NAXIS3"] = 1 header["BMAJ"] = 0.01 header["BMIN"] = 0.01 + header["WCSAXES"] = 3 + header["CRPIX1"] = 128 + header["CRPIX2"] = 128 + header["CRPIX3"] = 1 header["CDELT1"] = -0.0001 header["CDELT2"] = 0.0001 + header["CDELT3"] = 1000 + header["CUNIT1"] = "deg" + header["CUNIT2"] = "deg" + header["CUNIT3"] = "Hz" + header["CTYPE1"] = "RA---SIN" + header["CTYPE2"] = "DEC--SIN" + header["CTYPE3"] = "FREQ" + header["CRVAL1"] = 0 + header["CRVAL2"] = 0 + header["CRVAL3"] = 9.5e09 + header["LONGPOLE"] = 180 + header["LATPOLE"] = 0 + header["RESTFRQ"] = 1.42040575200e09 + header["RADESYS"] = "ICRS" path = tmp_path / "test.fits" - fits.writeto(path, data, header) + hdu.writeto(path) yield path path.unlink() @@ -34,21 +60,21 @@ def trained_model(): @pytest.fixture def grayscale_image(): """Generate a random 256x256x1 image array.""" - image = np.random.randint(0, 1, size=(256, 256, 1), dtype=np.uint8) + image = np.random.randint(0, 10, size=(256, 256, 1), dtype=np.uint8) return image.reshape((1, 256, 256, 1)) @pytest.fixture def colour_image(): """Generate a random 256x256x3 image array.""" - image = np.random.randint(0, 1, size=(256, 256, 3), dtype=np.uint8) + image = np.random.randint(0, 10, size=(256, 256, 3), dtype=np.uint8) return image.reshape((1, 256, 256, 3)) @pytest.fixture def invalid_image(): """Generate an invalid shape image array, not divisble by 256.""" - image = np.random.randint(0, 1, size=(255, 255, 1), dtype=np.uint8) + image = np.random.randint(0, 10, size=(255, 255, 1), dtype=np.uint8) return image.reshape((1, 255, 255, 1)) @@ -74,3 +100,41 @@ def colour_image_input_shape(colour_image): def invalid_image_input_shape(invalid_image): """Fixture for the input shape.""" return invalid_image.shape[1:] + + +@pytest.fixture +def valid_image_object(fits_file): + """Fixture for a valid image object with data.""" + return ImageSquare(fits_file) + + +@pytest.fixture +def invalid_image_object(fits_file): + """Fixture for image object with invalid image shape.""" + image = ImageSquare(fits_file) + image.data = np.random.randint(0, 10, size=(1, 260, 260), dtype=np.uint8) + return image + + +@pytest.fixture +def valid_image_shape(): + """Fixture for a valid image shape.""" + return (1, 256, 256, 1) + + +@pytest.fixture +def nan_image_object(fits_file): + """Fixture for a valid image object witha NaN value.""" + image = ImageSquare(fits_file) + image.data[0, 0, 0] = np.nan + + return image + + +@pytest.fixture +def image_object_all_nans(fits_file): + """Fixture for a valid image object with all NaN values.""" + image = ImageSquare(fits_file) + image.data = np.full_like(image.data, np.nan) + + return image diff --git a/continunet/tests/test_image_fits.py b/continunet/tests/test_image_fits.py index 03b3dc6..b584900 100644 --- a/continunet/tests/test_image_fits.py +++ b/continunet/tests/test_image_fits.py @@ -14,7 +14,6 @@ def test_load(self, fits_file): """Test the load method""" image = self.model(fits_file) - assert image.data is not None assert image.header is not None assert image.wcs is not None @@ -24,15 +23,22 @@ def test_load(self, fits_file): with pytest.raises(ValueError): self.model(None) - assert image.header["NAXIS"] == 2 - assert image.header["NAXIS1"] == 100 - assert image.header["NAXIS2"] == 100 + assert image.header["NAXIS"] == 3 + assert image.header["NAXIS1"] == 256 + assert image.header["NAXIS2"] == 256 + assert image.header["NAXIS3"] == 1 assert image.header["BMAJ"] == 0.01 assert image.header["BMIN"] == 0.01 assert image.header["CDELT1"] == -0.0001 assert image.header["CDELT2"] == 0.0001 - assert image.shape == (100, 100) + assert image.shape == (1, 256, 256) + + def test_wcs(self, fits_file): + """Test the wcs property""" + + image = self.model(fits_file) + assert image.wcs.has_celestial def test_get_beam_size(self, fits_file): """Test the get_beam_size method""" diff --git a/continunet/tests/test_image_pre_processing.py b/continunet/tests/test_image_pre_processing.py index e69de29..5e7f2ca 100644 --- a/continunet/tests/test_image_pre_processing.py +++ b/continunet/tests/test_image_pre_processing.py @@ -0,0 +1,50 @@ +"""Tests for pre-processing image data.""" + +import numpy as np +import pytest + +from continunet.image.pre_processing import PreProcessor + + +class TestPreProcessing: + """Test suite for the PreProcessing model.""" + + model = PreProcessor + + def test_reshape_valid_image(self, valid_image_object, valid_image_shape): + """Test reshape image method for a valid image shape.""" + image = self.model(valid_image_object) + + assert image.data.shape == valid_image_shape + + def test_reshape_invalid_image(self, invalid_image_object, valid_image_shape): + """Test reshape image method for an invalid image shape.""" + image = self.model(invalid_image_object) + + assert image.data.shape == valid_image_shape + # test wcs object shape + + def test_reshape_wcs(self, valid_image_object): + """Test the wcs object shape.""" + image = self.model(valid_image_object) + assert image.wcs.array_shape == np.squeeze(image.data).shape + + def test_normalise(self, valid_image_object): + """Test image normalisation.""" + image = self.model(valid_image_object) + + assert image.data.min() == 0 + assert image.data.max() == 1 + + def test_clean_nans(self, nan_image_object): + """Test cleaning NaNs from the image data.""" + image = self.model(nan_image_object) + # import ipdb; ipdb.set_trace(context=25) + assert not np.isnan(image.data).any() + + assert image.data[0, 0, 0] == 0 + + def test_clean_nans_all_nans(self, image_object_all_nans): + """Test cleaning NaNs from the image data.""" + with pytest.raises(ValueError): + self.model(image_object_all_nans) From f8e27f15ba90e94d669e74f5322b89c3fdeb5cb0 Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Thu, 6 Jun 2024 15:53:50 +0100 Subject: [PATCH 07/11] refactor models to not perform actions on initialisation. --- continunet/image/fits.py | 46 +++++++++---------- continunet/image/pre_processing.py | 26 +++++++---- continunet/network/unet.py | 40 +++++++--------- continunet/tests/conftest.py | 1 + continunet/tests/test_image_fits.py | 10 ++++ continunet/tests/test_image_pre_processing.py | 27 +++++++++-- continunet/tests/test_network_unet.py | 44 ++++++++---------- 7 files changed, 110 insertions(+), 84 deletions(-) diff --git a/continunet/image/fits.py b/continunet/image/fits.py index 42dfd1b..658520d 100644 --- a/continunet/image/fits.py +++ b/continunet/image/fits.py @@ -10,13 +10,13 @@ class FitsImage(ABC): """Abstract model for an image imported from FITS format.""" - def __init__(self, path, data=None, header=None, wcs=None, beam_size=None, shape=None): + def __init__(self, path): self.path = path - self.data = data - self.header = header - self.wcs = wcs - self.beam_size = beam_size - self.shape = shape + self.data = None + self.header = None + self.wcs = None + self.beam_size = None + self.shape = None self.load() @@ -27,26 +27,26 @@ def load(self): with fits.open(self.path) as fits_object: - if self.data is None: - self.data = fits_object[0].data - # Convert byte ordering to little-endian as FITS is stored as big-endian - # and is incompatible with torch - self.data = self.data.astype(np.float32) - - if self.header is None: - self.header = fits_object[0].header - - if self.wcs is None: - self.wcs = WCS(self.header) - - if self.beam_size is None: - self.beam_size = self.get_beam_size() - - if self.shape is None: - self.shape = self.data.shape + self.data = fits_object[0].data + # Convert byte ordering to little-endian as FITS is stored as big-endian + # and is incompatible with torch + self.data = self.data.astype(np.float32) + self.header = fits_object[0].header + self.wcs = WCS(self.header) + self.beam_size = self.get_beam_size() + self.shape = self.data.shape + self.check_header() return self + def check_header(self): + """Check the header contains required information.""" + # TODO: check keys required for wcs object. + required_keys = ["CRPIX1", "CRPIX2"] + for key in required_keys: + if key not in self.header: + raise KeyError(f"Header does not contain '{key}' (image information).") + def get_beam_size(self): """Return the beam size in arcseconds.""" if "BMAJ" not in self.header: diff --git a/continunet/image/pre_processing.py b/continunet/image/pre_processing.py index 3732e16..05533ed 100644 --- a/continunet/image/pre_processing.py +++ b/continunet/image/pre_processing.py @@ -2,6 +2,8 @@ import numpy as np +from astropy.nddata import Cutout2D + class PreProcessor: """Pre-process image data for inference.""" @@ -12,10 +14,6 @@ def __init__(self, image: object, layers: int = 4): self.data = self.image.data self.wcs = self.image.wcs - self.clean_nans() - self.reshape() - self.normalise() - def clean_nans(self): """Check for NaNs in the image data.""" if np.isnan(self.data).all(): @@ -32,10 +30,15 @@ def reshape(self): if not isinstance(self.data.shape[0] / 2 ** self.layers, int) or not isinstance( self.data.shape[1] / 2 ** self.layers, int ): - self.data = self.data[ - : self.data.shape[0] // (2 ** self.layers) * (2 ** self.layers), - : self.data.shape[1] // (2 ** self.layers) * (2 ** self.layers), - ] + minimum_size = self.data.shape[0] // (2 ** self.layers) * (2 ** self.layers) + trimmed_image = Cutout2D( + self.data, + (self.image.header["CRPIX1"], self.image.header["CRPIX2"]), + (minimum_size, minimum_size), + wcs=self.wcs, + ) + self.data = trimmed_image.data + self.wcs = trimmed_image.wcs self.data = self.data.reshape(1, *self.data.shape, 1) return self @@ -44,3 +47,10 @@ def normalise(self): """Normalise the image data.""" self.data = (self.data - np.min(self.data)) / (np.max(self.data) - np.min(self.data)) return self + + def process(self): + """Process the image data.""" + self.clean_nans() + self.reshape() + self.normalise() + return self diff --git a/continunet/network/unet.py b/continunet/network/unet.py index b6be882..9204e71 100644 --- a/continunet/network/unet.py +++ b/continunet/network/unet.py @@ -31,7 +31,6 @@ def __init__( output_activation: str = "sigmoid", model: Model = None, reconstructed: np.ndarray = None, - decode: bool = False, ): """ Initialise the UNet model. @@ -61,8 +60,6 @@ def __init__( A pre-built model, populated by the build_model method. reconstructed : np.ndarray The reconstructed image, created by the decode_image method. - decode : bool - Whether to decode an image on class instantiation, default is False. """ self.input_shape = input_shape self.filters = filters @@ -74,28 +71,9 @@ def __init__( self.output_activation = output_activation self.model = model self.reconstructed = reconstructed - self.decode = decode self.model = self.build_model() - if self.decode: - if self.trained_model is None or self.image is None: - raise ValueError("Trained model and image arguments are required to decode image.") - if isinstance(self.image, np.ndarray) is False: - raise TypeError("Image must be a numpy array.") - if len(self.image.shape) != 4: - raise ValueError("Image must be 4D numpy array for example (1, 256, 256, 1).") - if self.image.shape[3] != 1: - raise ValueError("Input image must be grayscale.") - if ( - self.image.shape[0] % 2 ** self.layers != 0 - and self.image.shape[1] % 2 ** self.layers != 0 - ): - raise ValueError("Image shape should be divisible by 2^layers.") - - self.model = self.compile_model() - self.reconstructed = self.decode_image() - def convolutional_block(self, input_tensor, filters, kernel_size=3): """Convolutional block for UNet.""" convolutional_layer = Conv2D( @@ -168,5 +146,21 @@ def compile_model(self): def decode_image(self): """Returns images decoded by a trained model.""" + if self.trained_model is None or self.image is None: + raise ValueError("Trained model and image arguments are required to decode image.") + if isinstance(self.image, np.ndarray) is False: + raise TypeError("Image must be a numpy array.") + if len(self.image.shape) != 4: + raise ValueError("Image must be 4D numpy array for example (1, 256, 256, 1).") + if self.image.shape[3] != 1: + raise ValueError("Input image must be grayscale.") + if ( + self.image.shape[0] % 2 ** self.layers != 0 + and self.image.shape[1] % 2 ** self.layers != 0 + ): + raise ValueError("Image shape should be divisible by 2^layers.") + + self.model = self.compile_model() self.model.load_weights(self.trained_model) - return self.model.predict(self.image) + self.reconstructed = self.model.predict(self.image) + return self.reconstructed diff --git a/continunet/tests/conftest.py b/continunet/tests/conftest.py index 63e47e5..a0274ba 100644 --- a/continunet/tests/conftest.py +++ b/continunet/tests/conftest.py @@ -44,6 +44,7 @@ def fits_file(tmp_path): header["RESTFRQ"] = 1.42040575200e09 header["RADESYS"] = "ICRS" + hdu.header = header path = tmp_path / "test.fits" hdu.writeto(path) diff --git a/continunet/tests/test_image_fits.py b/continunet/tests/test_image_fits.py index b584900..5e932b8 100644 --- a/continunet/tests/test_image_fits.py +++ b/continunet/tests/test_image_fits.py @@ -34,6 +34,16 @@ def test_load(self, fits_file): assert image.shape == (1, 256, 256) + @pytest.mark.parametrize("key", ["CRPIX1", "CRPIX2"]) + def test_check_header(self, fits_file, key): + """Test the check_header method""" + + image = self.model(fits_file) + + del image.header[key] + with pytest.raises(KeyError): + image.check_header() + def test_wcs(self, fits_file): """Test the wcs property""" diff --git a/continunet/tests/test_image_pre_processing.py b/continunet/tests/test_image_pre_processing.py index 5e7f2ca..9e93881 100644 --- a/continunet/tests/test_image_pre_processing.py +++ b/continunet/tests/test_image_pre_processing.py @@ -14,24 +14,29 @@ class TestPreProcessing: def test_reshape_valid_image(self, valid_image_object, valid_image_shape): """Test reshape image method for a valid image shape.""" image = self.model(valid_image_object) + image.reshape() assert image.data.shape == valid_image_shape def test_reshape_invalid_image(self, invalid_image_object, valid_image_shape): """Test reshape image method for an invalid image shape.""" image = self.model(invalid_image_object) + image.reshape() assert image.data.shape == valid_image_shape - # test wcs object shape + # test wcs shape + assert image.wcs.array_shape == valid_image_shape[1:3] - def test_reshape_wcs(self, valid_image_object): + def test_reshape_wcs(self, valid_image_object, valid_image_shape): """Test the wcs object shape.""" image = self.model(valid_image_object) - assert image.wcs.array_shape == np.squeeze(image.data).shape + image.reshape() + assert image.wcs.array_shape == valid_image_shape[1:3] def test_normalise(self, valid_image_object): """Test image normalisation.""" image = self.model(valid_image_object) + image.normalise() assert image.data.min() == 0 assert image.data.max() == 1 @@ -39,12 +44,24 @@ def test_normalise(self, valid_image_object): def test_clean_nans(self, nan_image_object): """Test cleaning NaNs from the image data.""" image = self.model(nan_image_object) - # import ipdb; ipdb.set_trace(context=25) + image.clean_nans() assert not np.isnan(image.data).any() assert image.data[0, 0, 0] == 0 def test_clean_nans_all_nans(self, image_object_all_nans): """Test cleaning NaNs from the image data.""" + image = self.model(image_object_all_nans) with pytest.raises(ValueError): - self.model(image_object_all_nans) + image.clean_nans() + + def test_process(self, valid_image_object, valid_image_shape): + """Test the full pre-processing pipeline.""" + image = self.model(valid_image_object) + image.process() + + assert image.data.shape == valid_image_shape + assert image.data.min() == 0 + assert image.data.max() == 1 + assert not np.isnan(image.data).any() + assert image.wcs.array_shape == valid_image_shape[1:3] diff --git a/continunet/tests/test_network_unet.py b/continunet/tests/test_network_unet.py index 0062015..5640109 100644 --- a/continunet/tests/test_network_unet.py +++ b/continunet/tests/test_network_unet.py @@ -18,6 +18,13 @@ def test_build_model(self, input_shape): assert test_model.model.output_shape == (None, *input_shape) assert len(test_model.model.layers) == 49 + def test_build_model_invalid_input_shape( + self, invalid_image, trained_model, invalid_image_input_shape + ): + """Test the decode_image method with invalid input shape""" + with pytest.raises(ValueError): + self.model(invalid_image_input_shape, image=invalid_image, trained_model=trained_model) + def test_load_weights(self, trained_model, input_shape): """Test the load_weights method""" @@ -32,11 +39,9 @@ def test_load_weights(self, trained_model, input_shape): def test_decode_image(self, grayscale_image, trained_model, input_shape): """Test the decode_image method""" - test_model = self.model( - input_shape, image=grayscale_image, trained_model=trained_model, decode=True - ) + test_model = self.model(input_shape, image=grayscale_image, trained_model=trained_model) - decoded_image = test_model.reconstructed + decoded_image = test_model.decode_image() assert decoded_image.shape == (1, *input_shape) assert decoded_image.min() >= 0 @@ -44,37 +49,26 @@ def test_decode_image(self, grayscale_image, trained_model, input_shape): def test_decode_image_invalid_image_type(self, trained_model, input_shape): """Test the decode_image method with invalid image type""" + test_model = self.model(input_shape, image="invalid", trained_model=trained_model) with pytest.raises(TypeError): - self.model(input_shape, image="invalid", trained_model=trained_model, decode=True) - - def test_decode_image_invalid_input_shape( - self, invalid_image, trained_model, invalid_image_input_shape - ): - """Test the decode_image method with invalid input shape""" - with pytest.raises(ValueError): - self.model( - invalid_image_input_shape, - image=invalid_image, - trained_model=trained_model, - decode=True, - ) + test_model.decode_image() def test_decode_image_no_trained_model(self, grayscale_image, grayscale_image_input_shape): """Test the decode_image method with no trained model""" + test_model = self.model(grayscale_image_input_shape, image=grayscale_image) with pytest.raises(ValueError): - self.model(grayscale_image_input_shape, image=grayscale_image, decode=True) + test_model.decode_image() def test_decode_image_no_image(self, trained_model, input_shape): """Test the decode_image method with no image""" + test_model = self.model(input_shape, trained_model=trained_model) with pytest.raises(ValueError): - self.model(input_shape, trained_model=trained_model, decode=True) + test_model.decode_image() def test_decode_image_colour_image(self, trained_model, colour_image, colour_image_input_shape): """Test the decode_image method with a colour image""" + test_model = self.model( + colour_image_input_shape, image=colour_image, trained_model=trained_model, + ) with pytest.raises(ValueError): - self.model( - colour_image_input_shape, - image=colour_image, - trained_model=trained_model, - decode=True, - ) + test_model.decode_image() From cb40f455a949d53fd8589bb95dc3173d756ef682 Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Thu, 6 Jun 2024 15:59:23 +0100 Subject: [PATCH 08/11] move finder class to another branch. --- continunet/__init__.py | 8 -------- continunet/finder.py | 31 ------------------------------- continunet/tests/test_finder.py | 0 3 files changed, 39 deletions(-) delete mode 100644 continunet/finder.py delete mode 100644 continunet/tests/test_finder.py diff --git a/continunet/__init__.py b/continunet/__init__.py index 32b2f3e..e69de29 100644 --- a/continunet/__init__.py +++ b/continunet/__init__.py @@ -1,8 +0,0 @@ -"""ContinuNet package.""" - -from continunet.finder import Finder - - -def extract_sources(image, layers=4): - """Extract sources from a continuum image.""" - return Finder(image, layers).sources diff --git a/continunet/finder.py b/continunet/finder.py deleted file mode 100644 index 6be1637..0000000 --- a/continunet/finder.py +++ /dev/null @@ -1,31 +0,0 @@ -"""Compile ContinUNet modules into Finder class for source finding.""" - -from continunet.image.fits import ImageSquare -from continunet.image.pre_processing import PreProcessor -from continunet.network.unet import Unet - - -class Finder: - """Class for source finding in radio continuum images.""" - - def __init__(self, image: str, sources, layers: int = 4): - if not image.endswith(".fits"): - raise ValueError("File must be a .fits file.") - self.image = image - if layers != 4: - raise ValueError("Number of layers must be 4.") - self.layers = layers - self.sources = sources - - self.find_sources() - - def find_sources(self): - """Find sources in a continuum image.""" - image_object = ImageSquare(self.image) - processed_image = PreProcessor(image_object, self.layers).image - - unet = Unet(processed_image, layers=self.layers) - - self.sources = unet.reconstructed - - return self diff --git a/continunet/tests/test_finder.py b/continunet/tests/test_finder.py deleted file mode 100644 index e69de29..0000000 From 229a216cc725f2a5b3a60b2dbbf85a2b02b26fbe Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Thu, 6 Jun 2024 16:29:31 +0100 Subject: [PATCH 09/11] remove debug statement. --- continunet/image/pre_processing.py | 8 ++++---- continunet/tests/conftest.py | 2 -- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/continunet/image/pre_processing.py b/continunet/image/pre_processing.py index 05533ed..3786f97 100644 --- a/continunet/image/pre_processing.py +++ b/continunet/image/pre_processing.py @@ -20,7 +20,7 @@ def clean_nans(self): raise ValueError("Image data contains only NaNs.") if np.isnan(self.data).any(): self.data = np.nan_to_num(self.data, False) - return self + return self.data def reshape(self): """Reshape the image data for the network. Shape must be divisible by 2 ** n layers.""" @@ -41,16 +41,16 @@ def reshape(self): self.wcs = trimmed_image.wcs self.data = self.data.reshape(1, *self.data.shape, 1) - return self + return self.data def normalise(self): """Normalise the image data.""" self.data = (self.data - np.min(self.data)) / (np.max(self.data) - np.min(self.data)) - return self + return self.data def process(self): """Process the image data.""" self.clean_nans() self.reshape() self.normalise() - return self + return self.data diff --git a/continunet/tests/conftest.py b/continunet/tests/conftest.py index a0274ba..1ae6d4f 100644 --- a/continunet/tests/conftest.py +++ b/continunet/tests/conftest.py @@ -10,9 +10,7 @@ def fits_file(tmp_path): """Fixture for creating a temporary FITS file with random data.""" data = np.random.randint(0, 10, size=(1, 256, 256), dtype=np.uint8) - # import ipdb; ipdb.set_trace(context=25) hdu = fits.PrimaryHDU(data) - header = fits.Header() header["SIMPLE"] = True From a850f407a987e2bf084d188da76a73d41dcfee3a Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Thu, 6 Jun 2024 16:53:33 +0100 Subject: [PATCH 10/11] raise error if invalid image type parsed to processor. --- continunet/image/pre_processing.py | 5 +++++ continunet/tests/test_image_pre_processing.py | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/continunet/image/pre_processing.py b/continunet/image/pre_processing.py index 3786f97..5e33cba 100644 --- a/continunet/image/pre_processing.py +++ b/continunet/image/pre_processing.py @@ -4,11 +4,15 @@ from astropy.nddata import Cutout2D +from continunet.image.fits import ImageSquare + class PreProcessor: """Pre-process image data for inference.""" def __init__(self, image: object, layers: int = 4): + if not isinstance(image, ImageSquare): + raise ValueError("Image must be an ImageSquare object.") self.image = image self.layers = layers self.data = self.image.data @@ -31,6 +35,7 @@ def reshape(self): self.data.shape[1] / 2 ** self.layers, int ): minimum_size = self.data.shape[0] // (2 ** self.layers) * (2 ** self.layers) + print(f"Trimming image to fit network from {self.data.shape[0]} to {minimum_size}.") trimmed_image = Cutout2D( self.data, (self.image.header["CRPIX1"], self.image.header["CRPIX2"]), diff --git a/continunet/tests/test_image_pre_processing.py b/continunet/tests/test_image_pre_processing.py index 9e93881..028a9bd 100644 --- a/continunet/tests/test_image_pre_processing.py +++ b/continunet/tests/test_image_pre_processing.py @@ -11,6 +11,11 @@ class TestPreProcessing: model = PreProcessor + def test_invalid_image_type(self, invalid_image): + """Raise ValueError if invalid image type.""" + with pytest.raises(ValueError): + self.model(invalid_image) + def test_reshape_valid_image(self, valid_image_object, valid_image_shape): """Test reshape image method for a valid image shape.""" image = self.model(valid_image_object) @@ -24,7 +29,6 @@ def test_reshape_invalid_image(self, invalid_image_object, valid_image_shape): image.reshape() assert image.data.shape == valid_image_shape - # test wcs shape assert image.wcs.array_shape == valid_image_shape[1:3] def test_reshape_wcs(self, valid_image_object, valid_image_shape): From fbfcabda493b26f7d53b11de109bfbd4947eef54 Mon Sep 17 00:00:00 2001 From: hstewart93 Date: Tue, 18 Jun 2024 12:19:38 +0100 Subject: [PATCH 11/11] check wcs has celestial. --- continunet/image/fits.py | 3 ++- continunet/tests/conftest.py | 26 ++++++++++++++++++++++++++ continunet/tests/test_image_fits.py | 5 +++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/continunet/image/fits.py b/continunet/image/fits.py index 658520d..f3421fd 100644 --- a/continunet/image/fits.py +++ b/continunet/image/fits.py @@ -33,6 +33,8 @@ def load(self): self.data = self.data.astype(np.float32) self.header = fits_object[0].header self.wcs = WCS(self.header) + if not self.wcs.has_celestial: + raise ValueError("WCS object does not contain celestial information.") self.beam_size = self.get_beam_size() self.shape = self.data.shape self.check_header() @@ -41,7 +43,6 @@ def load(self): def check_header(self): """Check the header contains required information.""" - # TODO: check keys required for wcs object. required_keys = ["CRPIX1", "CRPIX2"] for key in required_keys: if key not in self.header: diff --git a/continunet/tests/conftest.py b/continunet/tests/conftest.py index 1ae6d4f..0544f76 100644 --- a/continunet/tests/conftest.py +++ b/continunet/tests/conftest.py @@ -50,6 +50,32 @@ def fits_file(tmp_path): path.unlink() +@pytest.fixture +def fits_file_no_celestial(tmp_path): + """Fixture for creating a temporary FITS file with no celestial information.""" + data = np.random.randint(0, 10, size=(1, 256, 256), dtype=np.uint8) + hdu = fits.PrimaryHDU(data) + header = fits.Header() + + header["SIMPLE"] = True + header["BITPIX"] = -32 + header["NAXIS"] = 3 + header["NAXIS1"] = 256 + header["NAXIS2"] = 256 + header["NAXIS3"] = 1 + header["BMAJ"] = 0.01 + header["BMIN"] = 0.01 + header["CRPIX1"] = 128 + header["CRPIX2"] = 128 + + hdu.header = header + path = tmp_path / "test.fits" + hdu.writeto(path) + + yield path + path.unlink() + + @pytest.fixture def trained_model(): """Fixture for a trained model.""" diff --git a/continunet/tests/test_image_fits.py b/continunet/tests/test_image_fits.py index 5e932b8..9b29dc6 100644 --- a/continunet/tests/test_image_fits.py +++ b/continunet/tests/test_image_fits.py @@ -34,6 +34,11 @@ def test_load(self, fits_file): assert image.shape == (1, 256, 256) + def test_load_no_celestial(self, fits_file_no_celestial): + """Test the check_header method with no celestial information""" + with pytest.raises(ValueError): + self.model(fits_file_no_celestial) + @pytest.mark.parametrize("key", ["CRPIX1", "CRPIX2"]) def test_check_header(self, fits_file, key): """Test the check_header method"""