pax_global_header00006660000000000000000000000064141144435100014507gustar00rootroot0000000000000052 comment=4875f34e6bbdb6e975bdcedefd5c1d0acf6e19e5 tty-solitaire-1.3.1/000077500000000000000000000000001411444351000143225ustar00rootroot00000000000000tty-solitaire-1.3.1/.gitignore000066400000000000000000000000261411444351000163100ustar00rootroot00000000000000**/*.o /ttysolitaire* tty-solitaire-1.3.1/CHANGELOG000066400000000000000000000043371411444351000155430ustar00rootroot00000000000000# -*-org-*- * CHANGELOG ** [[https://github.com/mpereira/tty-solitaire/releases/tag/v1.3.0][v1.3.1]] (2021-09-03) *** Improvements - Made only executable basename be shown in shell output. [[https://github.com/mpereira/tty-solitaire/pull/60][(#60)]] ** [[https://github.com/mpereira/tty-solitaire/releases/tag/v1.3.0][v1.3.0]] (2020-06-01) *** Features - [[https://en.wikipedia.org/wiki/Four-color_deck][Four-color deck]] mode via =--four-color-deck=. [[https://github.com/mpereira/tty-solitaire/pull/43][(#43)]] - "No background color" mode via =--no-background-color=. [[https://github.com/mpereira/tty-solitaire/pull/31][(#31)]] *** Bug fixes - Fixed building with latest GCC (reported in [[https://github.com/mpereira/tty-solitaire/issues/40][#40]]). [[https://github.com/mpereira/tty-solitaire/pull/42][(#42)]] ** [[https://github.com/mpereira/tty-solitaire/releases/tag/v1.2.0][v1.2.0]] (2020-05-31) *** Bug fixes - Fixed off-by-one issue in ~game:shuffle_deck()~. [[https://github.com/mpereira/tty-solitaire/pull/35][(#35)]] - Fixed memory leaks in game and test code. [[https://github.com/mpereira/tty-solitaire/pull/35][(#35)]] - Fixed broken tests. [[https://github.com/mpereira/tty-solitaire/pull/35][(#35)]] - Fixed card drawing issue that came up due to changes in newer versions of Ncurses. ([[https://github.com/mpereira/tty-solitaire/pull/41][#41]]) ** [[https://github.com/mpereira/tty-solitaire/releases/tag/v1.1.1][v1.1.1]] (2018-11-10) *** Improvements - Added LICENSE. ** [[https://github.com/mpereira/tty-solitaire/releases/tag/v1.1.0][v1.1.0]] (2018-08-12) *** Features - ~M~ and ~N~ select and deselect (respectively) all cards in a stack. [[https://github.com/mpereira/tty-solitaire/pull/20][(#20]]) - Game now automatically detects a "win" situation. [[https://github.com/mpereira/tty-solitaire/pull/23][(#23]]) *** Improvements - Version is now stored in the binary instead of a text file. [[https://github.com/mpereira/tty-solitaire/pull/26][(#26]]) - Some compiler and linker flags are now overridable. [[https://github.com/mpereira/tty-solitaire/pull/15][(#15]]) ** [[https://github.com/mpereira/tty-solitaire/releases/tag/v1.0.0][v1.0.0]] (2017-01-07) - Initial release. tty-solitaire-1.3.1/LICENSE000066400000000000000000000021371411444351000153320ustar00rootroot00000000000000The MIT License (MIT) Copyright © 2010-2018 Murilo Pereira Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. tty-solitaire-1.3.1/Makefile000066400000000000000000000036001411444351000157610ustar00rootroot00000000000000VERSION = 1.3.1 CC ?= gcc CFLAGS ?= -g CFLAGS += -W -Wall -pedantic -ansi -std=c99 -DVERSION=\"$(VERSION)\" -fcommon # The Ncurses library with wide character support is available as "lncurses" # under macOS. ifeq ($(shell uname -s),Darwin) LDFLAGS += -lncurses else LDFLAGS += -lncursesw endif PREFIX ?= /usr/local EXECUTABLE = ttysolitaire SRC_DIR = src SRC = $(SRC_DIR)/ttysolitaire.c SRC_OBJECTS = $(SRC_DIR)/common.o \ $(SRC_DIR)/frame.o \ $(SRC_DIR)/card.o \ $(SRC_DIR)/stack.o \ $(SRC_DIR)/deck.o \ $(SRC_DIR)/cursor.o \ $(SRC_DIR)/keyboard.o \ $(SRC_DIR)/gui.o \ $(SRC_DIR)/game.o \ TESTS_EXECUTABLE = ttysolitaire_test TESTS_DIR = tests TESTS_SRC = $(TESTS_DIR)/ttysolitaire_test.c TESTS_OBJECTS = $(TESTS_DIR)/frame_test.o \ $(TESTS_DIR)/card_test.o \ $(TESTS_DIR)/stack_test.o \ $(TESTS_DIR)/deck_test.o \ $(TESTS_DIR)/cursor_test.o \ $(TESTS_DIR)/keyboard_test.o \ $(TESTS_DIR)/gui_test.o \ $(TESTS_DIR)/game_test.o \ $(TESTS_DIR)/test_helper.o \ $(TESTS_DIR)/test_helper_test.o \ .PHONY: test clean install uninstall all: ${EXECUTABLE} ttysolitaire: $(SRC_OBJECTS) $(CC) $(CFLAGS) $(SRC) -o $(EXECUTABLE) $(SRC_OBJECTS) $(LDFLAGS) test: $(SRC_OBJECTS) $(TESTS_OBJECTS) $(CC) $(CFLAGS) $(TESTS_SRC) -o $(TESTS_EXECUTABLE) $(TESTS_OBJECTS) $(SRC_OBJECTS) $(LDFLAGS) ./$(TESTS_EXECUTABLE) clean: rm -rf $(SRC_DIR)/*.o $(TESTS_DIR)/*.o $(EXECUTABLE) $(TESTS_EXECUTABLE) install: install -d $(DESTDIR)$(PREFIX)/bin install -m755 $(EXECUTABLE) $(DESTDIR)$(PREFIX)/bin/$(EXECUTABLE) uninstall: rm -f $(PREFIX)/bin/$(EXECUTABLE) tty-solitaire-1.3.1/README000066400000000000000000000066061411444351000152120ustar00rootroot00000000000000# -*-org-*- * tty-solitaire Ncurses-based klondike solitaire game. #+CAPTION: ttysolitaire gameplay [[https://raw.github.com/mpereira/tty-solitaire/master/resources/ttysolitaire.gif]] ** Dependencies - Terminal emulator with UTF-8 support - C library with multibyte locales support - Ncurses with wide-char/UTF-8 support ** Install [[https://repology.org/project/tty-solitaire/versions][https://repology.org/badge/vertical-allrepos/tty-solitaire.svg]] *** Using package managers **** Arch Linux #+begin_src bash pacman -S tty-solitaire #+end_src **** macOS #+begin_src bash brew install tty-solitaire #+end_src **** Debian [[https://wiki.debian.org/DebianTesting][testing]] #+begin_src bash apt install tty-solitaire #+end_src **** Nix #+begin_src bash nix-env --install tty-solitaire #+end_src **** Void Linux #+begin_src bash xbps-install -S tty-solitaire #+end_src **** FreeBSD #+begin_src bash pkg install tty-solitaire #+end_src **** Slackware [[https://www.slackbuilds.org/repository/14.2/games/tty-solitaire/][Via Slackbuilds]]. **** ALT Linux #+begin_src bash apt-get install tty-solitaire #+end_src We still need help making tty-solitaire available on Ubuntu, Fedora, Gentoo, and more. Please give us a hand at [[https://github.com/mpereira/tty-solitaire/issues/29][issue #29]] if you think you can help. *** From source **** Install Ncurses tty-solitaire depends on Ncurses. Some platforms provide it out of the box and some don't, so you might need to install it yourself. ***** Ubuntu #+begin_src bash sudo apt-get install libncurses5-dev libncursesw5-dev #+end_src ***** macOS macOS has Ncurses with wide character support out of the box, so *there's nothing you need to do*. *If* for some reason you want to use other Ncurses libraries (from Macports, Homebrew, etc.) you are able to do it by specifying =LDLAGS= in the make invocation. See [[https://github.com/mpereira/tty-solitaire/pull/8][this pull request]] for more information. **** Install tty-solitaire #+begin_src bash wget -O tty-solitaire-v1.3.1.tar.gz https://github.com/mpereira/tty-solitaire/archive/v1.3.1.tar.gz tar xvf tty-solitaire-v1.3.1.tar.gz cd tty-solitaire-1.3.1 make sudo make install #+end_src ** Play Run in your favorite shell: #+begin_src bash ttysolitaire #+end_src ** Usage #+begin_src text usage: ./ttysolitaire [OPTIONS] -v, --version Show version -h, --help Show this message -p, --passes Number of passes through the deck (default: 3) --four-color-deck Draw unique card suit colors (default: false) --no-background-color Don't draw background color (default: false) #+end_src ** Development *** Get the code #+begin_src bash git clone https://github.com/mpereira/tty-solitaire.git #+end_src *** Run the unit tests #+begin_src bash make test #+end_src *** [[https://invisible-island.net/ncurses/man/ncurses.3x.html][Ncurses documentation]] *** [[https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/][Ncurses programming HOWTO]] ** Author [[http://murilopereira.com][Murilo Pereira]] ** License [[https://github.com/mpereira/tty-solitaire/blob/master/LICENSE][MIT]] tty-solitaire-1.3.1/TODO.md000066400000000000000000000011041411444351000154050ustar00rootroot00000000000000# TODO - signal handling - turn either 1 or 3 cards to the waste pile (configurable) - {cursor,label,hacker} mode (configurable) - undo ## For 1.0 - [ ] explicit non-support for non-colored terminals (autoconf, ncurses) - [ ] make it somewhat portable - [x] handle screen resizing - [x] number of passes through the stock (configurable) ## Ideas - pure ascii interface for old terminal emulators - automatic moving of cards (think windows solitaire) - move without cursor (a digit for each stack) - move like a hacker (e.g 'm03m2' == move 3 cards from maneuvre 0 to maneuvre 2) tty-solitaire-1.3.1/resources/000077500000000000000000000000001411444351000163345ustar00rootroot00000000000000tty-solitaire-1.3.1/resources/ttysolitaire.gif000066400000000000000000015061621411444351000215720ustar00rootroot00000000000000GIF89a ;*33);$33;%+=4$,7#:&;))B1C1C 0j"8F%=I,@K*FX1FO3HO9MRVC/D1I:%``ri#N@*RI4QK:UQ?LVOCRSLWSUTDUWNTWQ$W,[(\1\2`!&#& ')$&()))))%(#)(4%?4?%%???zR?4h%RZZ4zIIah4?IRRžɾ»Ű%IR$aIzZ|4ZI4aahannhha%R%n?zaRh4tIn̰œ̬Ũ»³ɰ»ɻ·ŷɾ?4??4ZII%a%ZZZZaZ?hʼnIaz̨ݰ̾a4h?RZZ%ZR?IRZZhn?R¨zŗŨɷųŰųɾ»4??4?I4hIhh¾³MTM4d{l4M@MRTI[ZaII§àȾɷ̽à̰M%fl%l4TIMnMfImzMnzzŽȨ4e—! NETSCAPE2.0!,ڋ޼H扦ʶ L ĢL*̦ JԪjܮ N (8HXhx)9IYiy *:JZjz +;K[k{ ,N^n~/?O_o0 <0… :|1ĉ+Z1ƍ;z2ȑ$K<2ʕ,[| 3̙4kڼ3Ν<{ 4СD=4ҥL:} 5ԩTZ5֭\z 6رd˚=6ڵlۺ} 7ܹtڽ7޽| 8 >8Ō;~ 9ɔ+[9͜;{ :ѤK>:լ[~ ;ٴk۾;ݼ{ <ċ?<̛;=ԫ[=ܻ{>˛?>ۻ?ۿ?`H`` .`>aNHa^ana~b"Hb&b*b.c2Hc6ވc:c>dBIdFdJ.dN> eRNIeV^eZne^~ fbIfffjfn grIgvމgzg~ hVS!-,0ĀGG 3#9FD1/2'@F;3%*?E"/1G3AF= ĈÃ)FFE(67843AD&F> 5҉3:1# Z0cC*Ah`-  ?x @"BI*c&&!6m !,+*!,+IGGIKSYQVT^`Z\URWXLJM_[]aOHPN¦!,2IGGIKSYQVT^`Z\URWXLJM_[]aOHPN¦!-,9_ DP@x@gD8t##2}и37iP !,V:%4?%4%4??%?4?4%??4???IR?R$a4h4?%?I$IR?RZIRR?%R?4n4zIZRIRZZZZRIZaZaZaZI?I%Z4a4a4h?h4t?z?zIahanhzzÄR%a4n4n?n??IRnhnnnz¤z¨Űś¬¾¨̱ɽľŬ̻³Ż»¾ʾɬ¾žɷ̾r,F 4;&=$J/6B!"GW@%]pRT>.llpQW9PL3nk5Hpmjr#I# )K-<\`2D'g87:A qT@0k1? 䂆O> @=r6s@,̓L3p0 L2Ⱃ ēB?%i?qliPJ?0c\J(42???r&" Ƨ,1ϣ7k !L@a|o:@v<.+8tTE F>0@5 w 2kHj=;W:лB*ْO@;;cMfRa9R# 0 KA?09hT=2#t@ 4U!H{SFD<(#/p]Uۆh5ԅ~W `9Q(s$d kuZP /D xѴP ^X!BR%jE_;j%x E[f $"6@`һkW ,8Lh+[|G3pG=7)ȇpFp#K9>Џ8x" ih%-`JT6sԨTAdcp>M2\i{A \ WH 0Cb\?Jf0#:1)5XB AZ<T=9fjd\ErJ"j΅X ?u G/CJWҖ0LgJӚ8ͩNwӞ@ PJԢz{jb :$R_3ŢtTIANr FU(*5a+ C%ս<j!{SĮlZ(W7~MTM<*0`B"2@Ax2JiBuyĴVDԫ) Y ͬBXٱ rO9g%SB8"n VB/8l49 jR0$f##'(!94{#kEƶlX? mD . )-!ǽWXJhȮ-XK,0 ,bT! ͕/ pU}E8p X`9D;N #^R\p,4Va @Ύx"N7!d51ȜTN@Lg9M''P @Tue4!RVK#H$G=iUdqH r fp7&x1[;`[֌xF @`z B^kvoWm"-PsT#?@x*3ԜAYC P_^`rDn  |cpr|TM \@qW"⽳y;!笹 ? p5hAd, P7M4!?ꍙp&4)_Z[i[Tr@)1@hƅRkf `$RNl?kNt6> ]&{˄<Q*i=X "O^LzIHD'b~Ҁ(E𩑋T PA [i#EPbD4jT@KXĢk>Qvp%%PsHUrլi`d[tDqoW  PwW_W;wL}B ԥZO$pYuO,v55$@AYqY*Y9; .5! ŃP0pbhE3P#p4Ȃ ,WPT(-LZ4Hy. L#]e53^%%0.NCLUS /gUV#Ȉs22/FzVpjUc_@4}cb`k 9]p0]E 8P  `(r@ 0 0uSNuɈ0(oh+W r c`!eSeWe[f|:2^ /7+RD@NT)c1^W b)}UA3d@Y *]F@ p ,gt0H*hY3Pi`f0ΰ3z77q9E. HcP6 wĆ; `3 jCj1kRkk@ t;D`6F)mFp[y)D }QC&fC.Ann Bn`FNereei6?< dDlSI d;N`R' qJ4`;`*o GD @UqaE!s5 @PD F C`d)iFD4Y@o)CXuq{eAl=wrʰ3p s2uidD& @7y@CaC E24A\w&Y^`qeK1$HYWJvp'wtgwxw8Kc5br0`P2C:JEK pX@HPJWzd}MM$z yhy(x `z8 ` `p0 RkpxtxuDJJH$IШ@EBgz $At/{{x{ %Y%YQ"ORHPz|1Pa{1Qa/O X×EQrNH/6p|Y"3`4;B0Z{ ' àí+JG 8( Cj /vD-a(a|l!WA+s_Ԇn 1-2+UZI`.t?8IkӭB0uOe5ʅ^X9¬?8ӆT%-H>O@ 53`6f8c11Ѹa`5]cUH @4~|v?L[6%2>lv%cP2K 1 a V5ϐ }x^B93[Ȍ,234Ee0 #6∋`ѸgrH4u0{Ѱcpt=v& |(b 9F+ (&Q)ETA HK3 BGhWL0460򁆲_V ;gNi9@F3^HA𘚶XoAf pҢ2  ?N+zOPp iqh+@  is2 Lʒˬ9;܉Ew3cd gw1paB@Ì.`tӜ,ԏ9KǼ  DNt s6DqI]ʦ0zg`BMLM*0Q@>I4`ԩH~ wzdgVKwo1^vyR YXǪJBKLTLLvmvD`D`jVNZ}a?JA*,aZׁ@$Ae[h {j-2 Qp.j !U#|Q7[5'8箬Mj! <S r$QRw07qwA0M\``m: Puu8 2+I1 0 !;AWR $++Q!!5=NۂGj7bd5&egY2[Ocb-ִBܧm _PT`6.` Z)xB5{ H8wX+ *xˍ _hUa[ *O5SӒt;Ah=8F{1s3 s6k4wO8h[s@H5.ko2 5_ens!ÃYî}kTbE7]k/ CX~K{?i7 -S oMqs]apof77v SDz⪑\}wywaӿMQy4ӍdgfvjW~rv1߹x?fpp=zpK_2}pGsmlHKo%~~`P"EKvO\>2,! Yshϟ*;>: ;?VśW^}X`jkX? 2D Șbad{73`ʰhu`5H;dC{T8kV`d]vݽ^x͟G^zݿ_|ǟ_~0@$@D0AdA0B 'B /0C 7C?1DG$DOD1EWdE_1FgFo1GwG2H!$H#D2I%dI'2J)J+2K-K/D3l#V~ovnۢ5猪#9pj%}24>:aeЅ;rp?,!/D>P ;,&aɀDl#@5_MV+V@l`b `YbW6Y".*Zy#kU k$ X/q,ZQ-TBDHG,0ş~蓅H~G^KfQ A`~.ַX7 Al'%i>G7Mi*#b8s<)f@#.i rǍ4DzkOdև F'oY.{갋 aƍ&XmݶÔ!Fi~'ލЄběO_@ T Y#>1H%--С@Us.@1[il w3`@!d(t`x'ܹZY u ~%f@`תxf06{\R[n0";*x{-.F,`٥ !j p` dУ*QF27d hF$xZy FNV!X::1`? j>fXۻ.y߸a - Thq <,)""t'@O$ HQJ CXBF]Ix<1й 1묲H@bH+]Z2xtoi;Nڅ;hnoċ x`ըg$QXdyR}x. % @ ʦ tzІ>w@w$:AA0Pq@!+)}yiG3,-[yĴ" Щ90G.8)O"Tdu1@E8 |a V•G-"Q eynOi ApV11HF5p6W Y_İfKHfX.&E1-$Sf.bГ~h֩]-H j%1)6YgB| V1fڥ7ĉ`4Gt=hBЇFthF7яt%=iJWҗt5iNwӟuE=jRԧFuUjVկue=kZַuuk^׿v=lbFvlf7φv=mjWvmnww=nrFwսnvw=ozw3o~x>pGxp7x%>qWx5q^!Z,0%5'&66%455BUk)J'b'x7{6J07P&/l&MS4Ig6fvUG-P/%xd5r7KHL7@]'[I7qU'bU7po-O]MLM5]M%UC5]V%]V5mFfC5xC%~C5~V5SUHKSx]f[YinvMKtQsofNdfbkzvxzixzpR_-Q6m4e;t?wLMBVBVBiBmLtBtUm]mYzHeGwReUz~fqoMYM%M4bzl4{4MHMRTI[ZTbTzaIangrn??]DLV]YTpddizuq{rwbbxPPt{ʃ7JX,h.s2OBoMf{m@xc%/BSb'@7xGZ%t5QntJw@_jsJfwfpp@SIRhJSWJXippievy@Ś[цSҚ[ßbҝfҚpǫtɾzƖä§àȾ̙ͬŭϵȺ͆͊͋͜ϤƲȵѸΤɽɴҵΨηř˨ǽɦʺЩԹyH|°Ç#JHŋ3jȱǏ CIdE(S$h˗0cʜIM+s\xϟ@ JΣ9*]ʴӧ0JE իX֯`Ê+فdӪ]v+CL]v"wnݼu (q)1cƎ9k,1ʓ/Ciŕ),:̥KC"Ũk6ͰbqKؖO_ ̬]'Zc3lyXvW&^uǕTt'{<ȩM`~YMlƙe=D(xҞXF( Zӣ~&cZꡑ4)PajxӪcJ*DzOU*B^9ʄM. B]lגjV-Һ4SPf PO\4D{f{oMV e.Rm% w$PnĆE'kmqOgLQ>yl0J|P}fMKV>AC6 Sl2LFysM<*kִT;m,PƚÆeLW5M`3sLm;iPK}vi-S = _j6'ْ0 +8.!..zLT9OmSXޒtzC${L7{UǓD{&D&-ϩؓS><̛Sۋ$MC_Zvd_C޹׼S-uoR֛M՝u; /H| wAH'KA#[qOhYѲv8&ۡ I×\;2K-OI(DTq"SI%rŚD|LHH2.a #ŖeiMP&2 čM8WRW1__ʐR$Y*-zOd))e.7|&ę@bkf1AM$d:?N3#Z59>u'<7?O#>X_|̥*IZӅBINR/<=rП4h- Bpz2),M n}e#A+jB4:(NZ@ʐrT$3ZU[J)GNfKW[A%,"]DzVlڗ(֙!iI[F ,V5"~ Ųؙ0#Ib#XTIc&H2K.)dVPKzK1-g#LEe)R~6t>(i N")'*'Tף,<'Kܪ(Dj{P@m+҂nqi,))ykjܛ:.G[K"ÝoqG\νE~WiXxF ܥ>7SFؼZD.048dqo.#4yȣ0f)>r7G8xQь1xp~# r:'oCOwS<9xf.CGr"hH Z`>:ޣW{]WړmFr3#و__{N ,7%Hbٟ B[%W0{"GOz·'O{zgX+^,wOO;ЏO[Ͼ{OOO04/ W SoHFPag0X |wRPO&x(*,؂.0284X6x8:<؃>@B8DXFxHJL؄NPR8TXVxZ\؅^`ȅ{lDe{chAfar8[hwg{LJt8(~m؇Ȉ70PXxzzg ᆡy}Z ȉ8yW aZh(ψFHgA@10@  H:H6׈hȋx `@ 8xshpppp g@{w y  ),<`z"99$y0IFqy-YQi9,{1P8(rhPRLt^tQ@"N[]th P B% Bmo y!uZ!Qytf)H`9jYw !a dI4 0P V9z8WyP@%H: oȑ`d%FF <  @ yɛ_rYayਜ਼6^ٜI9y3؝I6 y,ybi*] 5*yWy0*njdI ZᩢiPӡxWv Ꞌ)j) =h}g:G:<}.bHFO MJ6TʜY AR0A-؋kZm*>A r:fyw}CZH: {ʎ 5Xt:*3*1+ZaH)^Ҏxiꦯ `H PYP p ªo 4AJ?Pj0z0*ߪʭꬆ``p֚|JC:jZ檅z <@Y( #Y  Y;z9Bɱ ˹K W dCyM)ʻ[˛ zˡ%jl8"zkiȣ3Xn3L˼TBϛb뫾xdgYuNzhk2ӥJj)݊#L˹L*- %̩qʾ+/L%;1'=| |{­" 6SY H?3 _]'Hl\P J|NujRV\E mܫwPȇ ‹{L aĔ:2@p`lyĝ ʟǑڮ0 Džz{k:K*({LLz.+'ɜBY 7<;(|?@5``Y( j Wc[]r \˖uٴjw^Yt[L.}E2P[ ʽSy;M6+-AlOZ]Ji&ar*m̊^P~hȸ o% M> 1_DJ Xx~?@Mx-:ܲMʏHΪ/[O)H?L-Όrnno͟RN \Aݾݍ>[xHώ KNR Iv Ф~uٚ@Op h  .ilFmo.יyY<>oP 6Nj0d.lz}ּ>n^n2M%.łՖ*O?V>~0?~y?Boy?Boy?Boy?OB%pk`.MnyƈP{OBZ8 JnyZ Z`x=/=//YC`֚' YPOB`YҊ?2yp?BX .~$.%iWol 0_~ֺɊsn9&YC0^o=/H` XWծ$} -`ΤAz^o=/^_z?Be}^o=/^_z?BS쟗^o=/ʾgھgھgھ㇪.ͅ(4ӯ~: ʅ}(4 PO~鰅PANM@P_~AڮϢ'pfAڎU08~Hk@7pHAڞ诐y>W` @(4^ FYhD d'\@A@#gھgھgھgھgھ@Hڮ ھ@Hڮ  m,pBO Q~ܯ=//AXy\OOB0 ŸnOB<ߨ `FOBѠ pܯ=//A(  [OBίِ=/@߻=/@Hڮ ھ@Hڮ ھWo=/Wڮ}{B/OBF_ N-߅+?^o=/WreY>BOPa?BO?8^o=/Wr/Y?B/Пȯ?^o=/W OBھWo=/Wڮ}{BG}G}G}.P>|' &ݯ8^/Wy鐅YC0^/Wy[h f0^/WyZ [ 80WxyHk~W` *'Yx -`G}G}G}G}G}Wh~~Wh~[ pW~jO Y'-P`W~e\؍'P*=Wh~zP|W~/ޘ~WП{0-xWh~~Wh~~7!,qk H*\ȰÇ#Jŋ3jȱǏ CIɓ(S\ɲ˗0cʜI&ś8slњYS YlݺiZnۤ tve1;g@!,@e H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲˁнl 9uT8.5&ҩ$Ī9N.dZa c9vfIpʝKݻt˷\~ ;PF}dpqȎ$CIv $෋gѢ̅I]R=;ooIoD >OaBw$)vNoz={ߟߞ~Ͽw?WWE`q$ "` Wa~ڗ!}{bz#Wz .b+ubs/l3ע]5w#;c^?$aC•#|E$KYP&|RFY䔴Y""mrzC$(\hA`'lJE*"= , p2q\|diEԡHA^^d뮼+k&6F+Vkfv+&qLM tPjABP ZqE U;!k`/ G!F!gl@!,Vq4eMT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanzªœŜɧɷȠŤƾb* %iȥA^qX)8!)x"%2~ &%1A!,Vq@ M[M%am{MtMTa{tM[gmr4@I@@aRIhaªȻȬŻª±ƻ̳R@pH,ȤH0˨tT *πOPR=p*Ge2yF  C( "&A!,q? Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬQ@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! A!,q@ MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾS@pH,Ȥ06tJEJ(Rz|hCs(x5\~vB{G "  C$ )A!,q? Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬQ@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! A!,?&66%675@Si'F'['v7{&7S67J&7i6V[6Mi6fvUL'B7L'%U7%xd5LJBSY@L7@B7{]'br'@r7S]M%UC5kMkC5xC%~C5LMJUV@UVSLV{]Vp]f[dCJdMS~CJ~_@kMvxVi{Zx~fSdfbkzvxmbxzixzpMV&C&_6Z6m4e6v?wBVBmBt]mUz]zHeSeUzqoq|JMYM%M4czl4{4MHMRTI[ZTaT{aIangrn?BLS][Tkrdekvuq{rwbbxPPs{ˎM5V%V5_5m5MJt[jFtJf{xd%@Sb'@'[7wC_%t5Iwt@_jsC_m[bASIRhWJ[ppidxцSҚ[şiњfП{ɭsɾyǕ¤§àȾüɷ̘άŬϴȷ͋͋͜ȳ˷ҷɴҵΪιƛ˨ȽʥҩչH*\ȰÇ#JH3jȱǏ-Iɓ(O\ɲƔ0cʜIE8sɳϟ5Oѕ@*]ʔ! W;ׯ`y'C U;kΰpʵ/|KP[.Fëˆ:8X3ļ3F dÈ;}bȿ|eҠ?e¦/O<;Ĩ)[jSx圽jaFZgS]չ}zXjgj.^{y׳[aUw_uwՌ_8XO& #5L Uj!r-1w&?i^z -=Iq 2FxFB =HBB4Gӏ 9!@@s =>OEP6_B[TAXr!e~N k2]ж3;PoA+M/LnLn(nTAYR$2|)| I$IW \K%uLr+(r,ܦɣK>9Wλ˵۾>MQv ?2Ya3{ք.Op(61 q ~Zga|<@ 0w^7C?om|@׽̃5I[Ai0n݆Bm!{I 4$"תW)·BxX"Ml!J2+&ds**J=2i⾰Yqa teЋ_2ƄkgQFist+1.u<UG>$6$<QiyDȂ &]c#8ɰT t^!!,R #?jLD=$ ,(K:rjY skIJ&-,U4kMP!)qMV1U0qJfL4>jiK7svGX}hpP{u\9s{'MTCM=?>ՒwOy-Q_onyZO/=9fտ~W^ɏxw=aywqxkly;~ү>i;VxS_>?~c? x6lƶkfkek0}Fm~ hHkGiЗv(#h} H(jĦi1Hi*xF'؂.rXƂ>Ȁ:j3H8xk7ȃ%v&G?H[6H op6qnvnh(pgnHqFni(qrnelfcȇpxmmzv&ouF'vIqTrbqZtWvWWuRrKx7rHv9w3s}1grsxstNA؄'wtz7w׋xwLX7{i׷|'hzͨiWkF|HޘਉW&>{度ͷ~@ &~griwjjgw@x\(hE^XlN8莝&W]CH)yiX!X&y4ȍƓ&O+iBIDiF!"s0SUϧ;SDP/X\YmYhVX`ٓ0ePt@go gq sy0e)W֔(I9蕗` D.βgmoy8薈y(gnxgY_ y6P ka w t&7JrvgI# `ىhrg07#VQ1X iȎ@ S!~ 7x:hQN@X։vƏʡZ:.ڈ'.Gfz֐WƑv.w!pFȤ8j6ilQؒ'UgXh5NkYȥ_WJm:4&ݨ:-P % 9fʧrIwy-egjh 7`! x66 J01 A0 h Z=hv&AêЩgoqqbhy֛̺` z*O 7ItxtY׊ kYڮĦP Ő wG!Iizd(@n= 'FZh=yE-ڳƳ'+:z|"&( IY+L&fN G>褚 '& gKv dJ楩FMvZ{DxKgj[]Zʁj{BKs?>;Hzv 0@:zgikq e 2+\{DeI Wvl De w : 皇[{6rY+p:篕 qк+/CRers(|o:[ 4S  Nj9 ̸,0oi‹ǟ1||UiX u +ĦY˸P &R,uzQqKt˾+mԋ[JL E H*\ȰÇ#JHŋ3jȱǏ CBRȠ,E(gzaHQ)*D* Nk׀f`h3A+֫2M ًC; zR!0/ȷp!,V@&MT[M4cl4M@MI[I[bbw@aIIR½ di(lh,oms.F'1ؗȂ A^= 7Mp e{xHl`] !,!@)Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬ@AB Ȥrl"UШtJ %zհXJIwOAϷZ0L xx{{ "&wzlo ' knH! _cbVTRA!,?M[M%am{MtMTa{tM[gmr4@I@@aRIhaªȻȬŻª±ƻ̳j@#Ȥrl:Hũ`ج$vLv~"Qn9$쮏;'%  M(J "&YA!,zm'&6%&'5675@JSip'@'J'S'['v'{7{67J&'p&7i6MS6Ci6Mb6MiB']'L'%d5d7%LJU@]@r7S]M%UC5kMkV5~C5~V5L_SUV@]V@]f[dCJdMS~CJ~_@kMvxCbxVp~fSV_&C6C6V6V4e4e6t6z6zBVBVBfBm]mUtXjUzkoqoMT[M4cl4M@MI[I]BLL]U][kreddkrxqrbbwr~C__%f%f5m%m5z5_@t[fJtJtSmpzJlsibpp@aJ[JS[[piIIRv{ɤ[ɱvʱ{ūðô¿ɮš̤ˣϩȭʮϲ˽ź̴Ͼű̵ű̹лʚþɺɾɦˬʴЪ׶Լ1QsI+Ç#:LB"s6HpdCh(S\ɲ˕;wKBoܹdn i0 #"0$/Ja ѴħՆ t3y]۷+^a3H4I5 8GRZrmc_3Cx8:|8A#s'Xc'KkUunٰ/Y*厒sJbd,iN7xG1_vEzg9⷗.:Nz4I={vp]ݎCwKsR/v/;HdBڼP3ݜ7DqH!Vf+ 8G3lP HBBހs&Ud4 3 aAͼ)́ qj`["˜p@' "pPAmg|8 s@-՘ eo;@Jc rp":9Uh@E\U1f7Movӛ6!!p0Z7 i$~Bh[ˮ[~YÃ/:"C5M#ҠaB}4kFN zP 8c8/ >2KM5B,'Q>IN]:;Ui{裆l8G0g*\Пc A P0f$C-X|dGQ_1Y>_A!JVT#!n `J݇%!1~Fq85HˉWdIU(p Kt%p~Yz×,NɠfUe0&\iJfm%Û#%#~R`$ iMfe V^h`ȧa)B/Z*cǕjZYbG#d:h8R7⨚VD,3ZÉ:sl2&Fk#V lnxSr-Bin{볹 Bi|r*㺻#`G)dQ:.VbO%a~\U((2y?7? ܨ?oƧaJl/*pjө0ҧtϛjlF--VZ+5:-Y̶n+:0ğ}p [xz3w~C Ԃ3Nh;wS7MtboK6fc9;^;bvCta>Dgitұ>l_l4EdzI*/<_D3ӗs9?|RAtM1ɮnm؋ݸ{8RoCA{#\>'-DH .,XZǾwexȅ x>K[dz"@ et`!L@1,BU3`06@ pMBO3>~ CЄe$\F7φqi\A,ƃrJWNQ]ƀ"PdNw yM@$e1!p)2Ӧt@DhFP4\L gCpb| HSתSҁNlG',&.HBp]0Eh6yD7$P & ],0Yy> -95NњiWkK/cKڎͭnw pKMr:ЍtKZͮvz xK&7 r0z'ƒ!]oy@ U z/ywb c7/y RA p;'L [ΰ!,!@f H*$l#JT5eѐM1alݺiɓЪu&ˎήQöMɘ{Vϟ@ JѣH*]ʴӧPJJի7!,!@F H*,8‡#*Ld$jܨp\<5lnԩX2fǞhNP9}TU^uV]m~Xe͞۷pʝKݻx˷߿ LÈ+^̸ǐ9!,'2P&CSUC%rCdM%dfiBm]krxxxŘ_@@SbCt5C{Қ[ҟiŤpŨvɨv̭{Ⱦ͋͋ΟӹžɾЪҲԺpH,Ȥrl:P(u,Utkh|gLB(i;Vpei!yN B-'~ MB B&mM&)C!O#(ڍYESUWdE^`blnFiu wE{}~D򮉋-\j(ҤXh)Wmk!,!@fN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳϟ@ JѣH*]ʴӧPJJի !x,3P%7J&'J&'v_v&M{LUB'B75U'@UC%Lfv_6M&fBtUtd~~~ȡm5z5_@tJz[f@[sŨiŨvȓ̓̚ŵнŬЪʼӭԲpH,Ȥrl:УI%^6-7C׮Eg&2 "uP 1q~r)NBf*M.c+0#$ %'N B g6N25Y[DTVegi9_anprt9lNy dȀ,_4*-RIR?_D2ӊ``=LjYu(!,!@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,!@MT[M4cl4M@MI[I[bbw@aIIR½H dihlp,tmx|pH,Ȥr$*ׁxLťb@+bq+ƄAA !K,V@FN*DxÇ#JLdjhPǏŃ'O:(\)ћvҁKI#˛ {5q<&۱r?zScLY>UuTUA^ V]~EVXe!VZm7\u[wo¼z,xp6"zx1aǍ?d˕_֜fϝ~hӥVj׭׾l۵ͻ Nȓ+_μУKN!,VqhN`2p% 7.**\XEE 9a1ŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣHLjRT2m:*F: 4rW\ Xpi;ødm_TNFFyP?v`^xeA`[F!K,q@F H*,8‡#*Ld$jܨp\e G 0rB % i ux9d5,cV@ HP X ҦOL}9aQ5ޭw'/h#ɓ/'KѥO?8zvb1+4lyyc_:~qso~d~Rۀe| *}5ԃF(aK GӅ.e yh!…$]֡"Fʅ7^y#(Qz'j蝎5q@99("EB{M:I@>_Vn>F#3* f4fc<:ץxݚ[H8g&&BV$cYeP6iRy狇I蕆>eIC h{2'{fn*g$ 8 Jt= bqbꧦq!kؗ<1@!*}DE}pNBg[IY/HDVXi\c)lvF)0G!,F_x_~ś&'[IHDEH@:wFPD:!Tc!E<rҀkr#_镡)64z*gX hkz#h۬B,RKl*rJYbZ-ȾnN[o b۩'}-6O>uIxB-( A˂JA%U\VafmBAo5W]w[Xd^&QiBe 7dϑx!6Av 9e(GK-5?-9x_EQ-O02[vHw-wKsM 'q*4xk  _=yg%r iPXI b Ir@z_#b/b/%*p(F/Wogw/o觯/o}:q"7A (HD)GDEب$eЀ ܠGH!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,Vq MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾ1@@´ `a9xTsiTTŀ!p ()!,Vq@ M[M%am{MtMTa{tM[gmr4@I@@aRIhaªȻȬŻª±ƻ̳R@pH,ȤH0˨tT *πOPR=p*Ge2yF  C( "&A!,q? Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬQ@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! A!,q@ MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾS@pH,Ȥ06tJEJ(Rz|hCs(x5\~vB{G "  C$ )A!,q? Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬQ@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! A!,<q4eMm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|ªàŨȾìƾɷ½ŕƠȬpH,Ȥrl:ШtZجvhhȑcƏ CNHɓE\K,c|IM2s~ӠΟ{ Z2z*hܸcөիb+ETgbƀ"24 FKbKyIV|ϐ!rrwE'3].jDI~u\1TbC9⦗k_cÆ-ۗؽf}{7^Qnbc$ RBmUhB vX S٧U\TlΤVQc^Z*6w/Y(X4둱ӮiiZEwty se,:[cu)K(Wi)Av ,kbUfڮ\ ﺒ:サKW;+nAhpl< ;L1u0LS0$@,lL^ alw Nߥ|CEOy%d >A0j4!ENQ{H\wHC0V@C+:q+BX3ejhOq4 E@Mop55I did<2IY%cwA{$AFqet(|(*SyD2M]<*GNfA,HKCf-my?r+9cjaC0y,XK@/泒F@rfH~9SDBsmF:\Ј4T3:Ɏl^| $N|'~ZNnNEǔg1C+#@"@>1 ie?T" &2ԇ 3TeʘnjRxڢ!WJ!EhZ2\-3X^qA ვ`~s,g:y"hP>>aeh g7Z>hKd 4g! B.xapxƧ;Q{ԠF5? 慪e=aZԦ9 o uGZءfOUv6wl^:RD@5_z ?qr>5kg0Ϳ]OzROh>?}{GшNtLf{yӮ7B>.^>O/>od{W>?q/|E~=߿b(GhlfjFkFmVmy'kņlǦ؀vm'`&k hkl|A"X Hv~7qn&rWfq~on WntdpwAqVqGga3qWEnMXpO{Ky=`u'gNA@t^؁JWsbt'xzGx_gwHyryI~dž\8yLVy'}gvvxxzvjwp}`xyl76LjzAozxwRȇFz{zztf{X{b{~Hbȋ(g8׋!F3Xgxgz#h׌a L@ (fa8@6PVߖ|(y d`!w}ߘ}}Ϩ:0c!XI3=}q(sFf,Fɀiha*x}06 9h?&q(JHL8NqP(A0DIqLyNn@&0 u@ l'sI){fX(؅M\pM3B#vi|ex8dw7dxxiyqIIy)td9\郖eHf銷+&d&,țE6ɕg?dIϹ011> "p `r >p 9d({QjhH߀NVv9)i$ ya ]ir`e I.1"VrXY0VV?I@ji0&Vvנ0 jpWtbe 5*iwA>22g '0B@ Pa)}*` m9Iג'l9=^JilR à PFV0Apvuyv THFpY#?Ґ +p 0{! P0ꐧ@ŀ +ec{w({@u pb:+ˊ4`e K8"q РK|)Kx0 7@͉  wYcٮɜ*yI) }[_{I ##( 9)h։1ZA˚-(a wxn &YK6P'g_q:BIq?$qZKE1 )WA,G I:f@?nE!ۯ9 :a*a֦y6Lp S+ˁ!g iRg7z@Ɠ~ᓥ;y!ʫ0m+XZDKг'˲; NEb"A d1 c`iB["G\&"`@r*뻧;kx,8%k~+[ @ lտ֋Wd"7&L v qD! <myXç|I1 ZHJ<§;R 0:4zń(\]|],V${|N z}֧Tu|wm M:K̕e@ˬ fXh|vdXjaмM/K詞tҪQeWfɿ̑ Z$ jw@fr%sQmTg}guwaWg+D, m2ifiP0a:a}F ezw}@m݆ep T_Z  n=!+r/sBlګA ־|%@u`uÖMj*zjMqÝl}٪ ]6= ݭ=ҡ[-XG[m [m2#P Mh2Q <ߺN&|+;ԍ\MhR;`uCq%k #>=!¸ +IQ[~Xh|1:]n$[/=ZAXCZE~INZK_rNMTޜ10,$2LWUPS>,Daߎ1qr;Ajimr`e^ayr1i<`k\HgǁDŽJ p@hLň70 {Qɗɡ*j^SĽP>~Ȟʾ>^~؞ھ\[ [ XU@)0.\д,%[ Oq!,<qk6McњYS YlݺifZnۤ tve1;(S\ɲ˗0cʜI弛8sɳϜ oH*]ʴӧ<WiRXjzSЪVqK,ЩT5;۷pʝKݻx˷߿ LÈ+^̸ǐ֜L˘3 !,q@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,Vqg H*\ȰÇ#Jxŋ3jȱǏ CIɓ(S\ɲ˗0cH͛ ǡ 9uOu̵ܱsعCvLܷc!,V@FMT[M4cl4M@MI[I[bbw@aIIR½ di(lh,omst (a<2;T u6} H*\ȰÇ#JHŋ3jȱǏ CNĜBЋP0EMA~2H#A)f)6QSɨÁ.ffГ_Na6f ޜJc$ 3[tʝKݻx˷߿ LÈ+^̸ǐ#KL˘3kV&5W@ X*B qJ.W̢ F:la#BƉ@!,q4eM[M%am{MtMTa{tM[gmr4@I@@aRIha«ȻȬŻª±ƻ̳+áThpTD$A\τD~,P+ UI`I ~ #/ȽрA!,q? Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬQ@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! A!,zl'&66%&'5675BSip'F'W'x7{6J67J67S&'p&7i6MS6JgUB'B7]'L'%d5d7%LJBSY@L7@r7S]M%UC5kMkC5kV5xC%~C5~V5LM@LMJL_SWVCUVSLV{]f[dCJdMS~CJ~_@kMvxCbzYu~fSkzvxziMV_&C&_6C6V6V6m4e6w?wBVBVBiBm]mYwHeSeUzqoMTM4d{l4M@MRTI[ZaI?]GW][krdhxurxPPv7C_M%V%_%_5f%i5m%m5z5MJ_@t[fJtJtSiuzJzb%5@Sb'@7{C__%t5C{w@_sCM_mteppIJWJXiipiexцSҚ[bҟiɤ[ɭpʱyҤpɕçàȾɮɷ͜ϤˤϩȬʮϱ̾Ž̺̺͖͋͋ΟdzȵҭѹҹɴҵεнǚàǻŢʤˬŲʴɾЦѬӴջH*IOċ3jܘqǏ ]jMȲ%ǐ0c* L'h ͥO2 2 i,ӍCXNv 2 VZS H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cFM 0fրtL(<@ Wakj|V`'qU]r[F0p6bMk&t=Ĉ"J yF[\př, pLlj!K,q@F H*,8‡#*Ld$jܨp\.ˈ/g0Ȝ&$b6-iJI4 LKپ$*j<UY Rˣ o tjS/!Cu9j"O/Ҩ㯌 yh$I!QzTɑFaRC q*y'Aڐ+"ZP)FJ?WԺkI_JEV`ٱ.{-۷oi(/g@ZjdA1 8@E+a5jCzL5OD"A^j净 @1˱K# V qfC[B樃gv@peLv!,q@F H*,8‡#*Ld$jܨp\Et[;W?؂M1ڹ_{ȣs }U!.B 4XԸ:ڨ㌺rE^Gwy8 5T`%!5VV@A7NF5$ 4$cg2$Sryg{92IETx"C&$V6F\u y C`Bunq7ћj5R`% %+D 3 J LX d2@?a Qw &+DR?@@dD(?dF7$6AXY*{.Qg5{QfUY#|M%3qRraȎ̓lͰ m4349\Y . BCMF't0!-2?]KZKTEC9v8qa͕3rr?rwO6pܷCz^=n8H~xGmCx]K>)Styϙ}yW9 ^:ݯc:xCz̏?4:C{R~P<^zܱW'_+ʧ4ۜ:'5pu?WʂS7Ս װ׾){KX:|3L·5^MЅa 2C pádCφBD+>%Tb 3Fh/f̘*1xXx"q}o 1BP#o?id dƽUmN#hC ȓ,X(E(!!'I@?𔌔"VRAXK_^qzgL7jmyL\"1LMZ&/LU,C9Nnӕ'e41xy9e/uL>XԧW8޳u$%F@Hȑ|/Ltf2q J43SAR+TM)9Y OC;( \Ja F%=UHe'I:p #Pnr# f p>Q5@k#?:|&4Lf6#ә4Cg0fA0X#C7 Kĩӂ@r`ڄ':Xs @x[I[^D;k;- j447 b b+tAn(-4 %"=E5# G9юh0-P&HH.a`*4#UYJRUᕄ#:?`$TdIP1v|C%(V:C4Qp^TagB4*e ?D"a ps,eIX0kW_pFW1φ+Ex#1@K\MX `iͯ S/y%@T@ـ 袨dBzǐT"5H4ڒ^)G}kZSslkЎMj[ζn{MrNvMzη~NO;x [\VȂVa-\GB=q{(+o_{" )Ґ^ 20/\@ЇN$ !,qySN*\ȰÇ#BLd$jȱdž'oǓ(SftTʜIw!ɳLqߎ鳨Q!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!-,@2I&675@['v6J67S&MSUB@LJLM5LM@UMJUVJBC{B_{~CJ~_J~Vv&V&_6V~f]kx7M%M%zb%'7@JS7vVV%_btJz@ftzSiiivbҚbҚp͜ϡϥϮϮϺ͆͆͋ϤŵұΤΨϽÛəŢʦɾЦЮԴ׾VQ>VV2VR(?*,USVUSM$VJTP%I 8+AÉ3B& z̫a +|YcfD1/JU $C$V"j@="$R@'PA !K,q@F H*,8‡#*Ld$jܨp\Bŋ3jȑb?[kp(SJȲˌ~z8Z$ӯQx],ӱpY30m!36` OU $Ck\!?vm#kY牜'6`ңMFY`֭]ÅYXڑmVX޽};XxO_GT9O͝St*Ğ]\(Q|G+DT=ac_EǟPEW8 zD`\X`2! RIXr!8~%x})|-{18z5xy9x=wؕV<$i\<T:R3=y*1a8eBȀd)"qꔩģ3h̓ZwZG-p&q C.̐ d$qĐ@i04TDbnxaMj1꫰*무j뭸뮼+k&6F+Vkfv+kxEL+b.B 1`U<q찿(r<造Rې-V$$Hm&Ȟ (לP<" G5N m0MtJO/m&$3ΌQwC4d]fO#M465h==T#yX 2s]V vAo^-rЊD?>ab?PGj>.d~ E0Dq>P8n 70!:Ax08|"k2!BdqOh60ɇ=ѸxgY%1-! _AzM$0R|$#)I%0j#U28MA'DAd-.y $;!~L qH)N*e.SH4!AT׆Eͼ;2(2TMCe!ө3|g,),$>yzcHH+Z@0&ȤLx%RG*QvHP>D7$q8J0m&fqE&@Z "dUBNQ~д7$J'TBeER+B"D(WAAħtEr8܀4@ J =\2A-Pg >äŖ}lc#XzR> !R4* n<N8ZӖ=eD;[rm9[ܞ"$YÉ&I ;(^޸ ,o ^WWo.{`L2hN/"Rp++ _@+ଭ9#+_أ¶갌j[b!,q4eMT[M4cl4M@MI[I[bbw@aIIR½m`, t2[mAm3Ib"pH,Ȥrl:CtJZXd\xL..8|n9|N~tPI!!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!;,q@F H*,8‡#*Ld$jܨp\g'οX(:ΧJiDTV;tԯ}ODvGA6Xc8cI\9}S_KQ˖[:NH2B!6 kfϟyyќX'~D9b]p3qZjL%\i߼U|i˛[k9͗Gg5~Z r2E{o-7ZN=O;GX%\DLT "ؗ~ć , `?dǠAP-CL&T)E+ak-O5~1ΘP6O7+fq$D'KMvP\$VO%]J%az4yT%ᷤJ"Yu㍃hT~vt(H.OJ:iz2XA^J{Z雀'z*Bh jb:*zk#+ $z@6J+{kRD!rj[P +NJKWV*6l:.K'Kx+U+o*,N0J,ŷqsܰ2y'[<%S0̫,8/<߻(7L0Zt6+Nͳ sm&Zt>}0]3-r${-I˵tM]w\w1.MFq3 24|fЌ8⃧q>M8Ֆ7mX}hkê@XXԳx/tuy:_L_nwd>TIʦ ֛)@BDA U.V)"SOQy!8UYie-M[GmHኅ." ,S$@f0Q$ {zfRcӈ3!ah@Sagr‘ [h3:pk@j[3'!U wclg&6;hFWP">dC$bn(AЀQ2֨DD"2nH'GT"7 `';A␐\yHEmw 'IJZ̤&7Nz (GIRL*WV򕰌,gIZ̥.w^ 0Ib*2&0nX SP/~ɔ. ~oL1l~ @JЂMBІ:D'"!XͨF7юf! HGу(ըISҖ%])LgzQҔ6NwR9iJ*ԢU>=IT2PSӂPuSVCԭ ^hVJVvH+ZJf\!׺Cu+]J׽կz̺1ElbXu.jV!ak^#nU>5]#{_Lp6AvF6r iv6 ªحos \ruBn[vmsK[⊶Bl;^rޭ-xob hVQ߁\4o ,WWuL׸ V@`^Xf(3ef0rVSYՋV%P_ZZ%~jU]gݎ2",wӽG`PhlwC1QxI7M57B< #CđH*qyVIRևZl:uhvE{?׭6>p7p[4'-7s-]^\.oykOs;'?}Ѐ[dv~`l WpE>'@B?VsGe)|9t<+3p3U/Ft XdJq x4"bc'V;WT/vUCwr18ZKe+X6ugTwuVǁ]tPuwkz3/%1 )7gT/V(.;wT$p8p  P ݇+ ԠwahT@CQkFg(jX#:pwzXT1 ;0:0AJ `Bp`(xa50 dPAE P"Pf ` 0` xpogx(VA8x{*@C( P2|2px8Zg|F|fZf`X+p H 2Qn^~~op@  3 !)41` Ơ t{zPɰ !ЇYg HU' `@f3v5 X+$ ЉKi)H XMZ3DbhQ^ WU+Se)T[uMńyZn噆be隅_(Yi h)BE,`&@f 8JIٚ"GR ؇kI\1Т0)GlFtz) 4)RP @ٝIP@GPxɠ j-i)IJ9%j:џ( *j'01j ;7.J<=9ڠAj9XzM - *riidRH<4 O`w0 `Z(?:IZ"pP"q/-j-7ȧlʥO9JGxȨdIrxhxHhLF#09=y:n 3@@h `$1eyEz;ͺʪڥ~m"ꭎ  ZϺJڮ6J1ꚭ檯RbB \Rj*$ ˰[:ʩۨ{ ۧ ۱ ":++ "z8J5K2k2'ʳkG[j>@kԚ3p0O Px3V9w7İ <Y yP2yKi4zu{׌~؋JJ* t[_0 (X6☍8- `i5Y"`̀hPqy BxjZz@`Р ) #Y7  Vɍ*ݻ }`pQ $P)TهLyW  p#!ZPi- Ȉ<T1ŝ%ɾ7]GF3!IHӰb X O H*\ȰÇ#JHŋ3jȱǏ CIɓP(ǀMq 4=<1 :@T&( #4 D.N#C4_e ),Is4aS,\@@@!,q@F H*,8‡#*Ld$jܨp\/+9TPщأwZիV+Ч4PY2 ͒q`Џ;b<`RJ*`), ) **,` "h "EX#3v{xsd}&J$G2l@1"ߎNa Ee#GI+1J]VL/[[6zAM1(G7}nc7TAvwp]8Z7</v 6;Jcߖ׍yK39~:^ꬷn~&o3\W~|gMy!}K?}+/z_?}̰ܛ9>#8ı&/w'? :^΀KHA,P $\AuJf*tWB/ccXCPx#wD!Gq*H HωO\L ᏇY_׼zW`xC͑L{%CF͌13a٨>]尸xmK۟iXH>o[d9ȅQ$XI;\rUqRt*&ѕ#W;9K/ڒ\,9.`LfU MY:S#d2Kbp%KJrl8F/݉L`roW>Y[լGj.B6Oi%giLF h3Oz^4/ yhz&̤&)- GiD NHGDYG= Sa[IZڂSL\B~H-n)j:Ԣj+^9< 2 @`gs :!:>?BST^sv젯tZۊDf2F~V1*=2ɂvKK3i2Z*FlrcH/aa69v&wŁ , idzFT9ĸ͑mc?P]Dl Q<hIG 1IJTҕ%.iKmғlG*fMmrH~ʧ? ҩ Xh ).8F@x TC*SS o8a4Qjԩ!5ݨ (T(BUk9uҖCl-l9X0D6rkE,c%,K,p(tƌk sjόZn^'Og}~=X~ЈNF;ѐ'MJ[Ҙδ7N{ӠGMRԨNWVհgMZָεw^MbNԖ e;;D8&A$<[B=q{t {LNUCwС&[η~_% !,<q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,q@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!<,Vqg H*\ȰÇ#Jxŋ3jȱǏ CIɓ(S\ɲ˗0cH͛ ǡ 9uOu̵ܱsعCvLܷc!Z,V@6MT[M4cl4M@MI[I[bbw@aIIR½ di(lh,omsUuTUA^ V]~EVXe!]˶۷pʝKݻx˷߿ LÈ+^̸c!,!@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,!@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,V@6N*DxÇ#JLdjhPǏŃ'O:(\)ћvҁKI#˛ {5q<&۱r?zScLY>UuTUA^ V]~EVXe!VZm7\u[wo¼z,xp6"zx1aǍ?d˕k̹ϠCMӨS^ͺװc˞Mۤ!,@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,qnk6McњYS YlݺifZnۤ tve1;(S\ɲ˗0cʜI呛8sɳϟ@ JѣH*]ʴӧPJJj՚Xjʵ׃!<,?4I%5&6@Ji'J7S'v&CiUd5r7]'[B7pL7vU'b]M]M%]V5kCrC]fbUm{dMS~VJdfJdfSxfJdfbMVV6mLMBmLtUmMBL]rrdkk{ʃCf%z5C@M@f@m@p[[bvŚ[şbɭvɱ{̾ϙΣϩ̶ȲϾűйɽÙžźʼԦЮԳ׺(e[Kae\b904*e:-$cXN_R5M_ @#e?)ed2"ˇ3 b_ ̻(]81eYF7&GP(.e=MUO˟ o A}nKp_~ (Ŋ.bq?:D$rd#QTFaV)C q*y'AZ$+r" QiFrʋG$ ԚI_2Ev: ˪+umiAZe\aAi Dt@FWNlHwV CSX _{Q)] ,z{(5[€  )LQ)[ (^,#+!,q@F H*,8‡#*Ld$jܨp\sLbPbR '؟'>IP _pO6scYQӰV ڝM;/3F@J91ҍy[{N{ {svbMbGzɰח `csJ;$G<ra2 28_Ù1I4_QZJ1;ܢ  i'ߛlDBy |F@ Y;@wE CюD4H+ah =+gx5L@ ԍ,mK_BUqQ[ y7IJp\8ձqFIRL*WV򕰌,gIZ̥.w^ 0IbL2f:Ќ4GLD0"A#\3IH9ֱM|C`0 #SȆ(!w Ei ~e@!,q H*\ȰÇ#J8ŋ3jܘɱɓ(SH*cʜ)%ȗ"ixϟ@ JѣH*]ʴӧPJJիX*ȵׯ ǡ 9uOu̵ܱsعCvLܷc!,!@& H(\ȰÇ#JE3jƏ ;Td#MdAw, F_Pa$A 9|xHs1eЙ$A`VIUJ!r*yFꝦR89I+z孠~*Zl2 왾&z,k6Bgy|۞+ߡ[[K {ܯ̚#<¡1BLSŋa\s u|'|YܲӬղ_1R,6@#3SEmKQ3vtI02Arm؀s3bӸb>7)MenZQG%ՏO@ cO+>CO,Y Yf}X^Td[H wT` 58)8M-a=?Ĺ\t9fg?4WCZB)ySUBeuIP>!wv =TtLs>#G?X`G+S+~0? F1>@cM (N=ζ"AHB"RX)BS ^X/kP`+uh▶Ǵم[B"HL&:PH*ZX̢.z` H2hL6pH:x̣> IBL"9.U`a \dI}"UhLC<~+2\BW̥.w^ 0IbL2f:Ќ4IjZ̦68nz 8IpޥL:yuO~4Ցt3[׷ke^a+Zشbvs@evAMl ٍbVCCe; V΢t,iQ"ֵ%jZ¶fm [֮En-;jֹqik[Vemr[╸"q]fP^ZFhFhQ]f V'l|`sxFiH]R0z5av9`?:8/JkգԪ6VaJ\NEjS"TZd:YJ*sKV6~l1z2dżش6֬\fbYˎ5(;rh՜jVSG+[~tUn1 ݒZ-.Sh.wNp#-RD[Wсmw+^:њ=/F۫YVxoI;_{/cl?` DoG4; vq=Cwł 9p MXx" CЃBk" ;>q! L8tVUc=|7… ! uquhXo}Wsh" `{ r"f^C4t-%X6Qh5Bĉƃ8@480_@56*`r`{X7X, a ! A9c.  Q2vŒɣbwxcy8|&e ɐɐ3}p~- aI!PP13k(" " !P! 'ɓXQxZCi Qg9;s;4\Wv__9aԈzCQf0MݰՖe9u^釒阔ɋ96TC Řəi}YXh#(yI] )tF'uI %9HuZxm8?薲MZ¹ihCY{w#DpY8 Qxɜj ryGy>X;c'zӚ12yqy! {`=2Ii|·:j @~: Y+BBxiy 0 f=: 4C4tƘQ)mWGtIGtiGifYPȹզ\h:oZttejlhnڧpOrtz:Gzz^&{Yʞ5ȧ:^Rf@Fc:TzʩQȍޘH;yFae鸎h FB؏!wVq Iͥʪu}8V won 嚨񡜱- Xw7Vpl ʐ(0zwJqN R UypO#b9)a9xIsw46I nB;D[F{HJL۴NPR;T[V{XZ\۵^`b;dJ!,q H*\ȰÇ#J8ŋ3jܘɱɓ(SH*cʜ)%ȗ"ixϟ@ JѣH*]ʴӧPJJիX*ȵׯ ǡ 9uOu̵ܱsعCvLܷc!,!@& H(\ȰÇ#JE3jƏ ;Td#M-A@Չ1IN E匔 H*\ȰÇ#JHŋ3jȱǏ CIɓ(I!ХKZ]a AY^`P ~WJ#2}XhJa!~Rvp`.]y5;l"`€MW` !,<A@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!-,!z&k6M*\ȰÇ!HŋEkfMY4dCIR"Ɠ()6֭6nKʜIaʛUMZ͟@eJk԰- ʴCD%cvYLXBc[q~4MhMе' 7ܻO^w޽} LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^zl@!,!@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,zq2'&66%675@S'@'J'S'{6MS6Ci6Mb6MiB'd5d7%L7@r7S]M%UC5kC5kV5]V@LV{]f[dMS~CJ~_@kMvxVv~_{kzvxziV_&C6C6V6V4e4e?wUt]zHePeXe_jqoM[M%am{MtMTa{tB]U]M[rdkrgmxrPP~C_5z5MJt[tJtSf{mpzJ'@7{_%C{t@_s_4@ipI@@aJS[iiRIhvaцSɤ[ɱ{¤ñªȻȬŻ™ͦɡϩȪ®ʮϱ¾͖űұлӽҵαϹɞü̳ɺɿʤɮɶҮջiHAKvsÇʡ36Db Oc4 ̎PČ\ QPKh@ypLvS`96zѳ]ixQL4JիXjʵׯ`ÊKٳhӪ]˶pʝKݻx˷߿ L*XӇ!Ɛ -̘cʄSSfˌȈۤ%ISTI5H%-MulԽe2⽛te +: KɗhrҼbTt|o hӫ_Ͼy2f5ShҦ& kl&$֛{V\{Iz7!{DvzxW|v ,0(4h8 -.2J0PbE*rK „)Yt9J8J0_3-] 5"# w6 . Yt獷\@+E06裐F*餔Vj饘f馜v駠*ꨤjꩨ&)*b\0XhcnG + R*"+0+2 r0yXˬR#p"RJ d&*R k,l' 7G,Wlgw ,,b-@p1L)&K0O\".;iЫԁ͒lLF᭴, ' 0<5OW *R0 M0 ߀.k!,q? Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬQ@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! A!,q@ MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾS@pH,Ȥ06tJEJ(Rz|hCs(x5\~vB{G "  C$ )A!,z %&66%&'5675CSip'F'[7J'v7{6J&'J&7S67J67S&'t&7i_v&M{6Mi6fvLUB'B7]'L'%B75U7%xd5LJBSY@L7@U'@r'@r7SYI%UC5kMkC5xC%~C5~V5LMEL_SUVEUVSLV{]Vp]f[LfvdCJdMS~CJ~_@kMvxCbzYu~fSkzvxzixzpMZ&C&_6M6Y&f6m4e6w?wBVBVBiBmBt]mUtYzHeTeUzqoMTM%M4fl%l4TIMnMfImz?]FV]YMkrdhxyqx~PPr~ȃ7_M%V%V5_%_5f%i5m%m5z5MJ_@_@tJw[iJtJf{f@xc%5@Sb'@7{C__%t5C{w@_jsF_mtbp[WJ[iipridnwzцSҚ[bҟiŨiǪtɱyҤpɔƥ¾ɮͨʬϸʸ͚͋͋DzǵҭѹҹȴҵεнŽŘūžЪŢʤʭɹѫչH* Iċ3jܘ{> dw?(Sn\ȲKW"D\TQ琜ķH9\T\A7iRX1zVdٳ]&A򟧪,M߾ZKN@t v)Q7uU 0ҭ@o_sy?{pݴ؜/r5Sv}J.ʃ^aZ4 }Ԙq?uNhAv$6c`A/>VзGu?[=_g`  ȠR  }MRYx!ZvTa}"%g"$hLX76R@(䐄dH&6R0)BTPZ\bLЖifcVYnFIpj٦O։sz'Cwi暊 g )Nc.jVb顔z離^Jf(~h*aJgk)Z+\gjl^,^[k kJ \ӂrv&MH$Uk2Q>& {gzEAO@ eoLB\!:T~`QW,nUe*lXk{{Dw~,6)b}Vk%b/߷b[HC{Zk[Aߗ$S =c2r NbD` qoȓ <^<_-atqFw/o觯/oN H@"Lw:p Zp 7Af GHBV! Wp*| ;06̡kⰇ1ADf̨h%H"U E<EftQN8 }Ec8.Inpxģȍmc7GncV`6@qGGvcUA=̣#H_ ܤ ,'EJX/+sYֲ)L_:!$&AGK B33ug`5e:ӆݤc&)́P:Tg;sΰPF+{ .̓NC1ly@D(oÅ6tC{8шZE!Qr GAѐ갣IIZt2D)_:C!"jF8BQb}JT'攋pi ?4j^L{jT9|$8J=f5f6HA~_ %-YΏviYMyJC:sdXiL[N/o搙gihzM5S݄aéHڐn iXtrV'ejY/y͡B+(P anM*SԢZ)MY\6 pW8Y`#XrQ8J$(r1 w '=.D%2e@b9&[]wA?0u@{AD%'̼+fqk*UoĥNpj|&j̤=0" @4bJ_E2s+\ZIV $Eb1>qL{Qc%L+@W;;Y$W_qSC喋,C&Y,d昁(sɯ_m{BRtQѐF-B Z9 \]ԠE 5OA"`XS6>N{Z"L{|法C0:=$/q< ' nC aۚN /l\D1C,&֎G4Hk rLp3js7s< &H$x#؜I"(I TX`ϰ~<%d3:DA0-B_PKJ `A$ 9~<2}tpsqmM}JɮnEkp\w}{6Sj:~v}t?Mۡw=f~8=w7_8fy#~<5y=[!.AOרO xG>y?8^‡{/+~ >承[_|Wt;~D{?ǿOo}W8cx7y8 {}'`W1P0wto1 qQ*xxP2)fx@Ua0P"C12268.2D|8 !+h Uh~-Fa~gȂW~v-|-bu` ˡ2Pj@~_si&8A1i0kƈkcQ6lv]" q0>VlC؅)nFnm,60 Po@o؆a4  q p| 0Ԡ!Xr,rVr' x@4QtG7@'t87ui'BCŇ8Mr ? "9$Y&y(*,ْ.0 '!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,@3I%5&&'%J7S7p&'@Cp_v6MiBLU]B'L'k'x7r'%U'@x7@]M%BViV&_6C6zBmLtUtBLLLUdk~r~~~x~Ș_f%f5m%m5_@tJzJz@zSzizppJJipiŚJŨ{ɭvʭ{ȎŎ̘̓Ŷ̡ϡϥ϶ϼűŵнŕОŬýŦ̲̾ҬմռiYYpqfmsslHFpN [@$/#=]k(2 9X&h:D_6T.ː7+lUs1Ƞ"8]scsrML3PO?0^` W H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗ H3n!dP9@ 2*SC9ahRpdN<2\ش)C@8g5+B&<`$J*X"eΐ,p9oD Pbb!,q@F H*,8‡#*Ld$jܨp\/\I] 472#Ă=%81] ŶS$5KdYD6'EO: (UN\_ H*\ȰÇ#JHŋ3jȱǏ CIɓ(YFFJ/zpJȰ@Dc* E@?,F , !傩+ ZThP 6P!-,@2IL7v]7pd7bd7iUV[U_[]_[UVvxMbBfBmLzLzdzxxŃM@fvzbmJzJ%'7@JS7vVV%_btJz@ftz[ivҚbҚpɭv̱{ȉ̘϶Ŵϼ͆͆͋ϤѳйΤΨϽŞо̦Юմ׼I GIH0D<FC3 "* I@I-IAB2!57 HBH1): H*\ȰÇ#JBQ! r$1/ҡUijFThuB.c|h^nTGwp/!,q@F H*,8‡#*Ld$jܨp\s?wLCBmBiLtBt]mUtHeLmEwPeXedvMTM4d{l4M@MRTI[ZaI???]BLLL]rddk{{~PPu|ǃC__5f%m%m5z5M@_@_@f@tJz[fJfvzbf@mJvJ%S'[7vCMvt@m{ippIJJ[[JYisiv@јeП{ŨiŨvɪs˲{ɗĤŪð³²̧àȾɷ̙̜ϡ̥ϩ̮Ϯ϶ųʽ̴ϽűƵѵлѽнɽΪϽÙɞéž̰ɿоŢ̢ʹѪԲռ}H|°-e w,jȱǍ CIaCsr"0cHͅ&R :њ9v"xU2eU+`Y˕.ĢeUj,Y\E/PX@:z^,pͽcŐ!+Ƹc?خ'ׄnNz@&RlUuI&yN3h)bk֮m>F"1(a"8~aH;NGo~ykL>|?m?7Y[~$i! y'GAzq$I8rW~ ewu||&"|*"Gb{-1XbX^:@>&dk3is)){J$NdDNcO^Mr_I4ye!ӆ}a?fa Q!gj!9}ɡv%* QRj)V*uꏤfJmzjC~jZi+ꙛ 蜫_Pbjt e2 +;[~lún*NKm-ƛ,& L.(+*<(qb)nKgri._ƅ!OZOӬD+;՚Nӭ9 .Rˮ« *nʯLU؀ v)k'ƺɱH5)byڳ'f3;U%fC϶[@BG(~ L.^G{x&EQgԕV2LÖH`Airo!R)\;vt"H,Xnr%$T"|QKvr1M n @EӟLPE?$ $t $gh9 $fF%T#0ӟZ$d񑌺wEr^<['KL*[Xβ.{`̐*B RB!,@'U=q uX=Za`d*< w`@!,@e H*,8‡#*Ld$jܨp\l@ ]b0v!,!@Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬj@AB Ȥrl:P%p`جIIvL<Zn )qqɆB1YP ' M! A!,Vy9&&7S6fvU7%xr'@]Vpxzp6_BtUzMT[M%T4mM@MIMZM}w@fnUM[mgV5mJtbzbzi@SbCt5C%4npb@IIRRanzҚ[ҟiɭv½œŚʣͩϷɲ͋͋ΟӹȠŤƾЪԲռ DS5 XWUJEXB-@)6#BK 0¹œN!!G8 +Ɨ4;Q.ڭ&"VPCݔ4:1/7$,X (Qć y‚R,W80@h !Q e|$IRx H,xEHa/]%9Ae\0GnʩPsjBz4SUhUh"̩Ulnʝw]u굚wߵ/ Bن$_s<7lӐ#4$EsW_ӄX $[TM* BNC-ƕGgFNe4$")2Zy^)ihL';݉GJieM~C`~ S?p馪d Z/hEb:J+KZ^zQzKqxV*v*8,JH-KBKV hdZ1E$k|knkJ5:  <oz&KqO<8DC y qgڲ4B5PEщ2q?2M !%j =rB-D!&BXct G 0_1J'~-sSUi? KæcGmt6| ER.C:Jfs}")8[똲CՋV O{㵧m|c{EG}_~o=Foƛ>̫NK~>7{ٻD)lߝ֡b4/Ƞ ֢@$i%~{"@:#ndأ^7*yx $x``(sxHB'͆ #D(|f"1/ Ўt $Gs'5EwόF{1-߉QTj9=LSK3APgYStIRq)RyQTT4YVk| k@ e%iU@wZo\败\Vp3`\N:.mJd9'z~!WfҫOPb(' +d!w! RT4-HJ5,f BPy~Cn8Gm=J%B4Pf`U5 ,(wIL!.+XceeLI&x)62sM֌a 5:f*A!!N0OSd G;Az'o#Sg>GLp)tB]<AY42 (C3QlD(|u/#RR<: »-Q %r`,ND!d.3(]7U<3Knn4vgYh-C&4K":+ٴGcԨN=5Vլ~gf:c0@XP0v!{Sx$f;{tڃҏ(=em~U$9@*яEP1"eZ& (η $=*AuG)\_af'8N0 hk\ذV;t}?;.9a.c6yXq@ЇNHOҗ;PԧN[XϺַ{`Nv!,V@&MT[M4cl4M@MI[I[bbw@aIIR½ di(lh,oms.,o(}O B 1*ofN& k!B%#P DQ+-HTV`bd[]kyoqin|tvPbN\ʴ)"HS" !-,@f H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɒdiZ>̚hd.l[7mbTZm҆.tveJ&cvШ!-,@e H*,8‡#*Ld$jܨp\嚄1I&R.dhUq'|>_yh͓\:%W6̆uė=K=p1iYʩA&]jqy=Y>:`<#V'7B [UβUk&g-   mRgf;Zж3B }  ϴŞ{kUrGTڪ/jS U8p0NqP$MV%Zn1mig VIP !P)QU걗݁ZuRW}UzN=3t_[$&*ɱZo@sH?fj$w25me>b}A[=y&87+8]U(*@?zJWƩ*^xP{+jټ+ : x;ID<1_4J'FNz`wJUz`CkQtd(EI M|$DEdY,8UrH?2.cYB  `_n8g}|\bA:ȳ3Dh(+m!a#WzҘf4~3>oӠC_, ^=x!* jN Y P8GkJF3L";,zQ#/ CIɓ(S\ɲ˗0cʜI͛8sɳL 3* & AH&C]G$.JF Z%P Aԡ!,q4eMTM4d{l4M@MRTI[ZaII«çàȾɷ̽à̰`!Ap\ۆim#"d!0Ȥrl:ШtJuجvzXϓznQ>~Ͽuvx}WU'!!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!-,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,@2I&%6%675'@67J6MiL7]7[d'@r7SUC%L_b]f[~CJ~_@kMvC&C6V6f]tUrkrt[tJzJ%5S'@7{C__%C{t@z@M_mtSiivivцS{Ҥpϣϩ̮Ͼ͖ű̵ҭұҹŹҵαϹнɞþɮŲԮҲֻXL;XXMV17X?T#+PS5UXR2O)P$,W:XC µW8P WK H*\ȰÇ#JHŋ3jȱGF]q1 |J:I”' +A9 %."sKD0D8Go/Z`wDEz `DA!K,q@F H*,8‡#*Ld$jܨp\U:EiC]LnۢjI*iP kCJvk+f(*ĭW 1 2;՟.P 0bKfu^΄ H*\ȰÇ#JHŋ3jȱǏ CIۑf/  ~0p?"dxDA*}H*K|2*A#tؠ0#*=i2_  `4d@* .a!,q@F H*,8‡#*Ld$jܨp\(*QTM"S2UO#)@V:WV%V8Q 9PM,Wy0͟@]`)[] ѣӧP,O aU >QSلM]jF)y#iip׀XJpa{8 DF)3:Tg2 Gp jl' Q + ˞ͲZYB t4(ks#!+.Y /Y@nLz9zFMi- MOise]D 9kT?L~aW0@TLw'aqE5ʄX*6$@'xbH8ѡW 5^'CB /pC$Ẍ́@BEK)EjQC@l$$FQ1  Q.KVs!,@] 2B],rɒP@5 H S"(ICQ@]6 35dim,*ujEYJ뭲J'(ڊ뇼+K:,"˪Ɇͦ(*;mZ{+-b{J;^,ʹZ.;x>/՚;lދpŒ.p6 O|m{fq~c &wa*;q Kr6G\Z7`J;>VMVwuGZsy}QMfWo6Smí9s=fu{7}}>Յ+y#R;޴T=yo^vhl7u:Иo:U^zzÞk᳟ݧF/o>Ox`Er_1q}`G x#' y`^J($N2, {R&!C F:lR,0aC"< ]2 .KLf 8 C~\#D(CE:ө@$!VXdfyNG(! NBrQ@0oL_d!4!+F*ȓ!bC=$>D  c 2!ᒗ̟hJp$LPg5$C!JQP@P+w>*(HM7g(AC!%[5$PK;MHRڕԥP^(9G)kTGԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺xͫ^׾., 0_;&$FhX$Ap(!Z0L3zaz6*J#4qϚ#E@PӺl%!,q@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,VqzTN*\ȰÇ#FLd$jȱG'oǓ(S<\;yIsعCfϔ+ѣ!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,@3I%&6&'5@'J'['v67JUL'%L7%d5r7LJU@]@B'[~7@]M%~C5BMSUV@BVvUm{dCJdMSxfJMVV&M&M6t6zBVBfLt]mUzBL]rkrUkrxŃCm5z5VSf@m[S[J[bpp{vɱ{ϣ̣ϩ̶ȶű̹йɽÙʛžɾŮɦ̪ɺЪӳ׼kk=UchX hA!5*90kjR[5/6e[E42j3iȍ`DO8Pe ւ? ]J7&KT? %YS^ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S RMЕ 4 2 q9!HGVZ! A;FܢTZ5f*!@@!h (6Iak<X,"( a!,q@F H*,8‡#*Ld$jܨp\E`8̈́*e6Ic>D;$9. KHYMo(@ᡏ#0"4ahЊ EB ʂ`'b(p"FW0D[dT']\)g7 rCOi1JJիXjʵׯ`ÊKٳhӪ]˶۷p ʝKݻx !,?IMm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬ@pH,Hrl:Ȩ4ZӬʅjɮX.bmu}^RaXTGgdFDCl{wsokjpϮѰӲէ_)(%# ЮHcW .3A&}pw N X`] &!,GF%'5&6&%&56%103CSn'G'W'b'v7{27I&+n0HT6Mi6fvKX+O,%xd5r7n7(LJY@L'JL7@]7[B'pd'@r'@x7Jr7SBC5[J%UC5UV5nHdM%kC5kV5zF5~V5TYEL_bLV{]Vp]f[Um{eEEdMS~CJ~_@kMbkMvxCbyWskf@xfJ~fShfikzvxzixzpIV\&C6C6Y6V6f4e6w?wLCFVBVBhBmLtBtXkWvHeLzReWwdmdtduqoMM4hl4MDWQaI?]FLW]ZkkrdgsrxPPkxC_\*f.m%m5z5MJ_@_@f@t[gJtJtSkrzJxd%5'7ASb'@'[7wCZZ%t5Iw_btJv@_jsD_jtwi{epISJXJ[iprie{xцSҚ[ћeНwɤ[ǩuɱzҤpɗû÷ΧˬϹʸ͉͆͋͜ϤDzɷҭҷѻΤŻǴҵΪκнƚƼʦɴЩԸ O*\xPÇ#JHEf! ? C2WPK$ϥ@˛83ş@ MWswQT I[%iOLI.RɈ?^:rt#V$@zзpu>GʵI>-e8ă˄"mM jLQ w! wY̙{ε`ݠ=E{7xB>PFrٷS9 uݕT7 pnLƓˏ{5`m9|L{qT%gO4XAM83߆A#@^da Y P_|Í@0a(c? lR (4a;HR" p5 1o14>&xH @&B}#|馛}N`tF(&z.ߢs&'' 飔J)ib)6z(9ꑝ*Z(~7+z*Ҹ|YC9,,Ɋlr:)b6-Z[ʺr݂mٹ+r{-[/jҗj[k{ L0;pa U?UAM)1Pmdž};LrS&_2#,R'Zi:s 3A+4424IQ656S]YӶ5 ]a56grBN6)7p=jn=/}#8#8kxߐ3~pW޵_sԋow֑ 銣nիg~wbn r.zᴳ֡7/Og=ȃOы}ߓt:DMKO2Tg/I(A H*uV|D t偞  Hec XBT aR,IqGDH `|„c~5a'~Gct0LA"dc~yc+F;>^PZ 2&vs I Or|\4ww&](І:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNwӞ@ PJԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺DC׾ `WM_':}d8L5,f7 Yp,h?[ه=-f#ՊUQ3qM-n{6E@@Obϲ-p;2W}_δltr n>XCw6"k>NL^bQ 80 ݍl|Wp w}eaN K{X1_q_ Ty7A"yFކ6j0Hf61X e)?KN@rf#o]2Le ArL5E~\f# Jx*n }i:;HO:6?Ա%P O38J[4wgmfښ&~ykNvش5[؏k=>[>vM[#5Gmo#6dtٺnOna 8uvzGtW Q=qmӷn5>ߋ[v3ȡ}8O#o/}  Wy|Yn[{kӍnܣ8>6q|t tZ?`ICpGM~q|[Wo7 *¾ߑe7KWNhwPc.w{)Q c '^Mc[FU|+:v: ѾH4Glv3l7”ϼ@7r,>˾uv'I4_`acz~|mY#"d`jQ3 Fu%R)[0yEoڟl|[\k\\ٶnV̵l~xti\o}W \Fs"Z\Pصov oҵo(0wfϵop']YpւY4]iPqvcgs;E?&r'7ÄVy}#m9ze/DŽUt<1F^T(4w3-Dž3`TGLGWxPm5~ `D}k5[hI>T^ȆȇbȅpPov+zxx`7y_0/_wzz}m0C@p Q {YF}\{\fgw|Bf}8g׌h}F>^xz̕jVr&i@-"pCi ō65C{*ȁ؏F-ؐ"؅wł/%px<p@8qh//6q6(y(]46MȈ숇UOYt;YOD~ 9#?! €!؇'ɓ@ ШtKw#-B".c KysYYODD +p whFYgFmF xboHbh8zmHĖ&x6{(fw}N8Nְ  T)﷚>Y.bdN%uP}$[ =Y'T.n)xI(ɝ8Y [&yOW?Hq3ɚMS(ɞ9>O i VJ-?s=ؒC:( ,0qqG9ژ %j "vz!'# q) @U'g w=j,ãI**%=3 0?#Jy{ʧL/}1Z2r:YtZ 26HڤJ2 :3*13*6zZ/7J ϣ7^qГ2s?IaM*+BuVu `dIX~ vTuWuP'u0I^`V.D|$˳<1wqvW"p~=-ZQJ>JkGhJB.E\,y>0WqJ>yxz۟{|{Dޑ,T !ङ5k1i.%` "N a~~A* ]K-xp1R zuz i+z' '0α[MO=ۚ?zV y&˩K *𪹕-pK?:C=I?r[23Uغ⺴K3{&@o{0j9.& J{;0K,zp [[xѢw"$KRP쫣AFz m񋺶2Jp Ř1!PE5᣹0 !E$rr!"'Lb"P0< Wr5%̓l2E<,úĻTij |*)#'Ec%!0[6A+V+!մEOHRR]v +U1^u^`ّ.E N$ …RcH ™ A{hh,ĦF&=Ã\}rĭ,s,$%B"e+] cx%),\͓،$Լ͛/μl|<-/Mbki 2 .mq=sv}xz|~׀؂=؄]؆}؈؊،]Qf d؛f d'fzٙ&g `nR`٨&cPbp!,@VN*DxÇ#JLdjhPǏŃ'O:(\)ћvҁKI#˛ {5q<&۱r?zScLY>UuTUA^ V]~EVXe!VZm7\u[wo¼z,xp6"zx1aǍ?d˕_֜fϝ~hӥVj׭׾l۵֝n߽pŧWr͝>jukνËOӫ_Ͼ˟Ow!,@&6%&'5Jp&'p6Mi]']M%~V5L_SkMvxCbxVp6zBVBfBmMTM4d{l4M@MRTI[ZaI]BLL]ddr__%f%f5m%m5_@fJpI[˜àȾɮɷ̶̽Ͼűʙàž̰̲ԼQQL42OL ' *!Q(#Q*P EQGK-0EP DN˫%Q/8O۔΃)ў91@ ޱ76+;:&"F=PD|m>L";,zQ#/ CIɓ(S\ɲ˗0cʜI͛8sɳL 3* & AH&C]G$.JF Z%P Aԡ!,@MT[M4cl4M@MI[I[bbw@aIIR½I (hhlDnmrU` Xr)bL(4 ӬvzxL.zn|No!,V@fN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳϟ@ JѣH*]ʴӧPJJի !x,@f H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɒdiZ>̚hd.l[7mbTZm҆.tveJ&cvШ!,26%67%Si'J'v7{&7@&7i6VS]~']7ik7bkMxC%rV5]_[UCvrVJrMv~fS6_]mBtBzdtMm{m%M@MIMRMZMz[gtB]dkkdxgmgm~{wr~ȎVJmSfJtJ%S'[7vCMvt@m4bZtaJS[іbњiП{ľ|ɱv̲{̥ŪàŨȾìƾɷȪºȺ̳Ͼ̵ҵŽΪϽŕɞƠȬž̢̮ԪӲּ H*\ȰÇ#JHŋ3jȱǏ CIɓP J{6Dá';Db A蜓~ZI*in A  yɶ۷pʝK R +HzK.9QaKP#- P1!RD@1EfH2qO/ H= C}& H,\օ C|,.tKNسkνËOӫ_Ͼ˟O ho⑅ fc@&b(agLVYIF I6jU]H_I-\ksX8<@)DiH&L6PF)TViXf\v` %Zbr@C Q$x!fet0Co/Qb@ iaf1BH D\F4!,2%5'675@S'b'{6Ci6MbB'L7pU7pk'S]V%dC5~C5]_@~CS_BtLzM]dkrC_5z5ipJJJSi@Ũv̱{Śʡ̮ϮϾнŢЦЪҾpH,Ȥrl:ШtJZجvzxL.Tzn|N; B8yl;-<k3;2<&j;/<"j!.y#1<$u5 '<t6 9<(<7+ ),v%0 *v;߃A!,@)6%67%Si'J'v7{&7@&7i6VS]~'kMxC%rV5UCvrMv~fS6_MT[M%T4mM@MIMZM}w@fnB]M[dkkdxmg~rŎVJmS%4bnJS@IIRRanzɱv̱{ýœŜȧɷɺȺ̵̲ŽȠŤž̮ԪԲּcH@S].bQ_=?b\ &c_cP5N0UT3 "W*8F %Lc-OVRؑ"<E^6ʄ>`$!E`8̈́*e6Ic>D;$9. KHYMo(@ᡏ#0"4ahЊ EB ʂ`'b(p"FW0D[dT']\)g7 rCOi1JJիXjʵׯ`ÊKٳhӪ]˶۷p ʝKݻx !,?YMm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬ@pH,Hrl:Ȩ4ZӬʅjɮX.bmu}^RaXTGgdFDCl{wsokjpϮѰӲմ׶ٸۺݼ߾Πt H*\ȰÇ hHBC%8А lhXC$82,Ё@?D8P ',0C!,R-''5&63'0/-ASk'J'[7J'b'w7{&'J&7@&7S67E&'r&7i/JT&M{6Jg6fvTT'L'%B75U7%xd5~'~7-LJY@L/EP3nq+Gg7eTJ*kMrCdM%gC5xC%zF5xV5V\KTLuLfvkIIkMbkMvxFbrMvyXtkf@~fShfikzvxzixzpV_&C6M6_&f4e6w?wLCGVBVBiBmBtXkYzHeGxReWvdmdtduqoMYbTbTy?]HB]W][ThkrhfusbbzPPt|ǑU\-f/m%m5z5MJZE_@kOf{f@wJxd%'7ASb'M7wCVZ%t5Hx_btJv@_jsC_hwi{dppQhJUJUJYpsf{{@цSҚ[ћdќuŨiǩuʱyɗö¬˨ʬϹʸ͈͆͋͜ϤʴɷѷнΤȵҵΩκǛ˨Ƽ˥˸ШԸhׯ_ eP„:dPAy)ݳI$S\ɲ{79$nL'Μ>s9N*3c:įνֹiسj/ƝFr2yd' 4SY"GhhId^XeL"YzU+b&# d]i({)⛤U~:G>stV` i1**hƦ 2Ja6hKM*&Z[ڜȼ穧ԨĎ\ΨdRl_$G4;-^ۖQKfz4e`vE(zzo|Koub pwK Ҹ<*;0I,* q3Ɔr̮I&1cQJx6+(_=dN69(i/2!LB&E=q9=찀8N^L+m̗SC{#6Ln{?#ޛ=8I]f3F!|>O ?Uݯ*-Fx~87/]vzwodC5IMr )V?-4x@ G=C_wsA@~=AFmKѻT;GEjT)`{tCu$)'dx!bxiѰ{6 WBE ȀP$8ejZ]# xe]q)YGF49$Qz4GF?ۺFѐTq6q#Id${p)N\ IvuɮLT imi+GֻuXX/1RkKZER.UW1c"MX2gjJa|ntMR39#J.&1uvtyO7" +Qy2{:էyЂ3=ʶ Z0e+g0b2tC0!ѩТ{3yaqKܧA4E>mj\WQn W/O[rO_gu[+w5> \=t^7Ў}bJ:.꾛tA .sWgsQNtoE p]XӬϳ~s{\Y{AE&"@B k6g:'nq 2b Ә/iރ.tw1{ݰFg.7ׂW :=ퟟyww, Qs`9a;re>~w'ُnSm?o~woq8W}~~6fo~ H(1P5>'~+H4CS{m*/"BR6g6d g‚J5B6j#a36`P*q(8˷B!B@$73bnYscJ[%9'C(Adh8 x[DŽWBAÆUe@PeЈ6ד=p`8ÈcR{=*@H& /چ"aR`ESkpwe(/S7(F.w~CC81P  P 8/4F*q  胎؂H,]mt(֦k fO# =81(GYt׀$ُ,uq6t57)dHm80 Z2ɰ)6֝{E"ౄ7,L:7'-[v6o!` Hٸ@?GP+TJ[X S\ 2W۵`[._d{Zh+[l ۶pkL+cTGq1phO|[U bVfk{{} plwg{k10h˷ a69 Z[` ((lVly볱ۻ+`pmݦۻmkۼ\;Л;U[؛I 6۲[#{蛱껾 ۾;:{ۿ;Zܩo \{|L<$&| * 0l/<\68 <;%BD\+|H>JN|J8*TS|kZY`,\<*fLe#l̯h^5x@)77~ eU5#K|YS%g+ǖF2[ƹ;,Z4+43Kl6Q̥lCm»ɯLƐk(Jŋ1Ψ  C4 DQJP\@bƗqlĉ8ҀHԙC%@&L;q*S#S%2d"2ƏHsxT r :ƒiB5,D-Jx܉{ø6.DeҳE=*&+j IR9o.+*FW=WSڇm][H\}SHō/DRBL&FHܹBJ/:mB(V@* U{̟?HD×?_ 6~T֟A=Ei'Ey7Q&rQ8Bہ Qn\WQ*^bc"7b&MKxaȆ)bBp2QX9Rf,zF`' 0RDvt@Xdy^(<D>Aa 8[ yr&U]B'|Сu1$)fA!J%(`@8$}juX*"7zZ+pګ5Z%J[--*-:{ތ뭼.$K»;{oluۯBbr,.SL";,zQ#/ CIɓ(S\ɲ˗0cʜI͛8sɳL 3* & AH&C]G$.JF Z%P Aԡ!,q4eMTM4d{l4M@MRTI[ZaII«çàȾɷ̽à̰`!Ap\ۆim#"d!0Ȥrl:ШtJuجvzXϓznQ>~Ͽuvx}WU'!!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!-,Vf6%6'%@S7J'b&'J&'v6C[&M{BB75~75L'Jx7JUC%U_@LfvdM@_6M&f4e?e?s?wLCBtHeLmPeXeMTM4d{l4M@MRTI[ZaI???Ld{{PP~ȡm5z5_@z[f@%5S'@7{C__%C{t@z@M_mt{I[vцSŨiŨvɨpɱ{Ҥp›Ȥūô̧àȾɷͥ̚ϱ̴͖̽ɹҭұѽѻҵαϹнɞàž̢̰ŲʼԮԲ׼/HB(\C' qI#3j1# 2\EQ ˗C48R!$>TbG#@a*&(0Xh#Arrj,Y^U-U`(: r(PISJʥxݻc׮h  uԀt筏s$TPC:;zd/B9$VG$$Yeb9?؜[rbh~#d2ݍ.JNV9bIav)$eeI֩戅B& 裍^Zt=)yh^2hʅJ娖CMA0,CE40Qʹ0l"_EVXiuE\b9+v.QW_yW_EB[H8q@boE@E<$RqE@$[~s3o"w<@-DmH'L7PG-TWmXg\w`-dmhl X6+ +07'%H"p"GF"~0A8(%,~&!,q@F H*,8‡#*Ld$jܨp\9. aV4^7AX;#f5*Âe d-!bf3TfeKJ/ML2Y S H*\ȰÇ#JHŋ3jȱǏ C9'KEKR"ሉ}ZbB@D?~.KgRlP!|\ P"Ab O 1!Z,q@F H*,8‡#*Ld$jܨp\C8*26EX =$%]#A X$0 ?+3ŏ!Y @K'"EaPI$&O7F/H H*\ȰÇ#JHŋ3jȱǏ C I#0Sl 3о($$)ǂDF<:>%҅ѱ$ *!,FР@9,( Y`0;|!,q@F H*,8‡#*Ld$jܨp\G%׼BhQHm|H/5<,=z lFzxTT\}۪دxMUvm+TfφZ.aTkh\Q`|͖9sǍ1 2^1~vO]4Pp>5_Z!LX w?ʞ1^'!wg?jɑ FZ]۞x!C7/'C>Xm8ν|G?'o?Ý N-9{ހ d@" y֠HܡwBi !FyA*'hP؝XH "FJd!9bRH;a9[>2$d~Ia}Tii6 9gp  ]|fhߘndh6zgrR Ib>F=9>*W:ebꋵJz+6뇽 m*g&K&}j Y^h}bm9 Ѹ칕贠jo۟»Z/Kj.Z˭ީ,*u%Ɩ,i 3CJ/F0l˭([E0F󚰒TRB,_l|RA@da%YmqZabrujO 7$bY&eAd5K*8ѩP Vw"^ndEϥ7\PtT PTA+9W|Ʋ.?s:_KUogw/o觯/o HL:'H Z̠7z GH(L W0 )lF6!rȢvHCx;z~x /t8 P@\$#Xt39\],#yA{>D=px%A U!cP@#77PƑ-9;zı&5q42 -@do܆d2@8!q$LCDơ.utTeI&r=y)N9':uf<@NEg /ȇ?ABA"<*)H>B<~Fa5}ACCuQ2HAq%5}h DL5#I <'αS)(*~کԍ0y*TT*ժENSԫCJPӬD:ՊNӭ7MfӮīzC*̯5&T)- `GXO5STd5YCUVOSfӴYÈ!H"x ӺǍp%F'zEǨ"%Fڶ WG$#~zbBJ D+ : &DcPB#8 !,qnk6McњYS YlݺifZnۤ tve1;(S\ɲ˗0cʜI呛8sɳϟ@ JѣH*]ʴӧPJJj՚Xjʵ׃!-,@3J6%@J[6[6VpLdk7]7p]C5xC%B_i]Cp]tpxCJr_JdVif&f6mLVBfLf]f]mLz]LU~ddkrxxxŎCC%V5mz5VSzJ%'7@JS7vVV%_btJz@ftzpJibiҚbҚpɭvϮϫϲŲ͆͆͋ϤɵұΤΨϽÕŞʛɶʦɴЦӮԴ׼llcGN@F jg7.T9.;dOlg&b.3EEe4?!`l:VłB"^lk6`S)%f.5X #D\b> cKj[Ii H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲKWk(QcЋ Wb-@)8ĖlNxbQ<(ǦP  X"EO0`U" !(8a  UAB[MЄA"M !K,q@F H*,8‡#*Ld$jܨp\("L$)!ɗ, \A@^["b|rA 6qYA P5%l/*C%",rf>@p0`H@*[!,q@F H*,8‡#*Ld$jܨp\gdo:B!tDJ ʠ ŰI4BXHA hHyA-l1P \zZ^DPy2@(0B+^J $A{Qvz 䡉#1ۧuPB Y,Vr-YG^ۦF DgEk/wg50cu '0 #41t#1!W;rQqޚ!kbAh6en)MnP~iJjjJꪕuu94 S{x<[BH$6|$O;4ƚ jS=x 6?U2SWZW+\w`-dmhlp-tmx|߀.n'7G.Wngw砇.褗9Qꬷ޺EnN>{ o|ӌ1#;)د|'?@\І|s/_ GY|dz-Rk>(Hiw8< y㥵Y 32AfP 7(0 /!3djAkmhHDl0Qx6Dmc+5(2qUD/n*AD#4Q=1ݏc ,R!yxa4 D0`:fP>`~ף 9H1 d%]74/d.G- R "־Q>QvVDx56Kd#X Nvm-1>1S\P3?j*ΒV4#rZI &eR;׻u_x~yvmlES>"2mOpqmB`DVLs㼚ޖHXy")4<Ym Z";!j|L4D2#$Bsyc=d:-Wl+U.͙si sk}CtGo7 Z9GabPu/}PjJaxgTڙ-|\ ۭ&_LI9>صӑ*sW4>,DX $+ۂ,{/=v^o87w3w x?gG4$I0;zJw#Q/#x۷'Ա PtglՁ 5#gl t|ʇ|め#C~c}|{Ãzyx#wCvcutsÄrqp pd8O/9P+{-Z q Mq1? X7R.P@D-`gcnqWA `z82Xh-|/ȉ1艦8Xx؊887h f@j`j h= ȋЋXg@i`n!,@&MT[M4cl4M@MI[I[bbw@aIIR½~ (hhXp,DkrᅨKr쎪Rf\,r[Z[ƄzW"0(x`y H/gh{?G~209!!Z,V@fN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳϟ@ JѣH*]ʴӧPJJի !,VqkN`2p% 7.uU׃`,;QmqNJVC[ =woh sFȥOnzน?bzפ;"=:x]yGnet-%Wyvvy5`]wXb!R)AVd=bfmZ(Qiv^12_o_s2v-l77x}^<}ފ8)))cgeXҨ%>v d؟GI$Hjj VXh@XބUhᅵvzsYy"6p&u*Fg9X%gv旒.Y$SɕLj*MYTeتfOvze:ZfzjzJj#[p"TwNw烃X~hN'E! D[a=\*l&gO *kowELJN=]TgQ` w2L14_53oJ c;r;3'(@BA)$C$ F u4JOkTJ7Ky@a ׸x ⊽ ]  ۼ wj!-,@3P%5&6&'%@'J7S'v7p&'@CpBU]L'd5k'r7x7r'%x7@]M%BViUm{dMSxfJMVV&_6CLtLtBLLU]rdkkr~~~xȃCf5z5f@zJz@zSzizpJJ[iiŚJŨ{ɭvʭ{ɱ{Ŏ̥Ŷϡϣϩ̥϶ȶϺűнɽŕÙОýŦʼӳ׺kbOOhi`ebgH Q?&3%k=Tc,]R9N*c6Lj1hĎ7/dMkc Ҍ8Tk\ _G4!IU> 2 VZS H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cFM 0fրtL(<@ Wakj|V`'qU]r[F0p6bMk&t=Ĉ"J yF[\př, pLlj!,q@F H*,8‡#*Ld$jܨp\B|$O` J^41P (v \!EZ| a@!,@3J6MiL7vd7i]M%U_[]_[xMb6zBmBmLzdzMBLLxŘ_f%m%m5_@fvzbmJzJpɭv̘ŶϾűе̲׶Ծ@pH,Ȥrl:ШtJZجvzxL.dzn|N<-c82j/ z3'0,1jk k%4-)y. x+ jwj3"! $#s3(k*&sA!,V@ M[M%am{MtMTa{tM[gmr4@I@@aRIhaªȻȬŻª±ƻ̳R@pH,ȤH0˨tT *πOPR=p*Ge2yF  C( "&A!,?)Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬ@pH,Hrl:Ȩ4ZӬʅjɮX.bmu}^RaX)(B%#$ &  "& ' ! A!,@&66%6'%67%@Si'J'[7S'b'v7{6i&7@&7S67J&7i&MS6C[6VS6fvG]L'%B75U7%{~'~75LJWCL'JL7@]7pr'@x7Jd7bUC%kMkC5xC%~C5rV5UZ@Z\[LV{UCvYVsdHErCJrMv{Zx~fSkzvxzixzpV&C6C6_6m4e4e?e6w?wLCBVBfBt]mYzHfEzPeXe_jUzqoMTM%M4e{l4{4MHMRTI[ZaIanrn?LB]WYhkhv{w{PPtÉV5_5MEVJmShCf{mJfSxd%ESb'@'[7wCVZ%t5IwtJu@_sC_i{bBRIRJXJippex{цSҚ[љfНwŤiɩqɽzƖūð´̧àȾ²ͥ̚ʤϪȮ®˫϶ɵ̵͚͆͋͋ʹѸнɴҵΪιțȼо˥ѬչHAYrP!-` a!lpVRȱ @jՊU.(sCI2ILlKL$Y=#2-eyeʕ0}JO)Z;XcX--+l]";v5+زX^ggGoMF.]iu7ZoӞ {uoj<ϠCe4H7\ͺװ]s3 sbvs&_ N#Ч}^Homan׆Myϣ}}9 NtiݟO#{川W߁1s r@zMW9vUr Q DEo*(6,h#1'] DVXȣy;y]| I6 MI|N~^V.e]mY%^fHhfV&rn Zٙۗ~ݧfcRTMBDTR9]@U)ID$TSq\IevYfW`ESX%Xcz]Յk]aᠯ~ghl~dafJvsi* ʠBvmJj 2Rs̡z$"4.'F ⢯)@z,0ܲȁ290P,<2~l3 27GK@+wD m5@)tOK2<#Wg=v1ʅ!V&[:0ʉqWݶnS =3fghٷjgfҡnbڤ"nUzQ2 u(K *MB]4BuRC03X6 Ts k#ܠG2S H!1fGT 8 O>C,OKPZ]+!L,?`, ֿ#<.Y\węua+_q e?VF, iS־6겭mq6%q&u;K~-oѻ7}.fL?gapG%ᰝ0nװe3NbsC.r8#x/|.?3>s|7xs?'x>t}Gwty7OgwJ{ԡ.]7r b=2~Zg=AeҞr4Tҽ%l4ݏ@ - Xpah#X#Ǽ[8)}@DE:OccӾ =aOO;ЏO[Zx&/hV,%C.4C(k")pa!,@FMT[M4cl4M@MI[I[bbw@aIIR½ (hhXp,DkrᅨKr쎪Rf\,r[Z[ƄzW"0(x`y H/gh{?G~20;9/XI)'Umƌʈ΄Ҩ!!,V@6N*DxÇ#JLdjhPǏŃ'O:(\)ћvҁKI#˛ {5q<&۱r?zScLY>UuTUA^ V]~EVXe!VZm7\u[wo¼z,xp6"zx1aǍ?d˕k̹ϠCMӨS^ͺװc˞Mۤ!,VqvMTM%M4fl%l4TIMnMfImzMnzzŽȨI 83Ȧq$,MX'*Ȥrl:ШtJ]R"؈RvxL.z͎^[MG!,Vq MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾ1@@´ `a9xTsiTTŀ!p ()!,VqyMT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾa@pH,Ȥrl:ШtJ5:؎4vxL.z]f/X6j2@E,  /  -% &  )$."A!<,@3%5&6&'%@'J7S'v7p&'@CpBU]L'd5k'r7x7r'%x7@]M%BViUm{dMSxfJMVV&_6CLtLtMTM%M4f{l%l4{4MITIMnMfIanmzrnBLLU]Mrdkkr~{w~~xȃCf5z5f@zJz@zSzizp@RIRJJ[iinzzŚJŨ{ɭvʭ{ɱ{ɿzŎʼnŊɥŶ̘ϡϣϩ̮®̥ϱųɽ̶ϺűнɽŽŕÙОȨýŦʼӳ׺GH*\ȰÇ#JHŋ3jDXHg>R HjC?Ynu!ةd&y iMBw~2p骃*}؉J@*CR|&P2H*`&n P (,Ы <2f+k,l' 7G,Wlgw ,$\(%Ӣ 'IA!vv?`k$F28مUt4, m|Ak -4PzubqP$Dؼ,}i'7.d ) *((BJ C#h’9hF%$,`0nQ@!K,VqhN`2p% 7.Eh2 !,q@F H*,8‡#*Ld$jܨp\\ 9P@yЌ:k*S ,!PLѳg JQNPQ' :4JիXjʵׯ`ÊKٳhӪ]˶鄷pʝKݻx˷߿ L,#&ƐϨcgSfˌtK7S~G56ݨ ulԗĝHwtÝaiKɗOhrҖ8TKat i|o;ӫ_Ͼy2f5ShҦkl&֛{V\{Iz7!{ECvzxW|xU{-ׇqtqxtbx#s=#9c>C")EwR6Iy;ww"t}"dihlpiEe"f2rH)'6CbуyH4h!=T:Hp`'HhI$mB\nfr$ 2=뛑$ cND'k&6F+Vkfv+k覫+k;'Df0Ђڃ d~qA?[D>p"$Czj@yE 1 *!xbJRi dZBkf4keL7Pk!,q? Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬQ@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! A!,zl&66%6'%@Si'J'[7S'b'v7{6i67J&7i&MS6C[&M{GL'%B75~~75LJU@UJ]@L'JL7@U'i]7px7Jd7bUC%kMkC5kV5~C5UZ@Z\[LC{LV{UVvdHErCJxVv~_{~fSkzvxziV&C6C6m4e4e?e6t6z?s?wLCBVBf]m]zHeBzBzLzPeXeZjUzkoqoMTM4d{l4M@MRTI[Z~vaI??LXU]kei{rxzPP]rxÉV5_5ME_Sf@f{mJfS%5@Sb'[7vC_t5Mvt@z@_sCMmt5{bIJ[Jipiivs{{Қ[іbћiП{Ťiɨp̭{ɱv˱{ҤpЭ{ʎŖūð´̧àȾɷΜϥʥϪȮʮϱ˽̺̲ϻ͖͋͋Ο̵ʹҭҵѹҽѻɴΪϽнɛàž̰ɾоˢ̬ŲѬճջH*76Oŋ3jĸǏJ%<SK}eFb<:tܹϟN1JөfC?8T#Ч ݩL8qi"ԯ bbdֵ-طGIDy8u ,&1|E8⾍#K|Xrdo-_UscΝ=# Uh@MEZuW?]R6Wڵm3Rn }\JGQJ͝SS _W;Gݽ{oPEOFOPzP>_~ | { 2 zB8!yRx!xb!wr!v!8"u%x"t)"s-"rF ѐaEx>9(tԱDm<ʆNH$N %4F3O6NVx,N2 @MQ v#Q>Yu6S_iF&ȥxzvUj饘f馜v駠*ꨤjꩨꪬ꫰"GE*QRT(EOsO5kGWsO:QŒvNXalv+k覫+/P8kP,' ߋpG,Ml ?q sq@) , (2̯ )r(Dw0-L3C<q1Tmu sul]L.^U3=|d[]o v1ؓĽgC>s6Bna|/9D3x?^ۋ9G>yچ[~yshTooޢ 窫]hn-*M^Pb":Z~<#/i?/=Oo_}?}/orL;ͲK3i (rO3O6jwV c۶@b nV;io=NqÁ:' [abBՎu I8px!s΅Nx/rC"'=q{ٻ^ư0̯|cbA; vO![4p9l#ԘEqo2:VO{|hO1>AMsrco(Z,4X5n,,#(:6.n% Ic%Wr,%t(F#|\/qE,8>8>n]bxSaH(O7ɂhs/ <(am @!p&߸3HD544a N@h#xY@1jˍR 8 x=lOqf%P+MK%9N#E+WЂ٩ 9x xFC}" Q*,vЃ e6SOȬ{U/BBV@x^Zq`9bkG1u+?*aBhO}S|! U.@(: (F5P"ed=m{Rt>5AYj.0y,5E)NG;#*Q*bb1=?jU2 .$Z;&'F0r4p Mx lL,h+dHk[?/[@":@f%; @qa8p3ܓ\xŻc(O[m#֙T%)roQtv+Ɓw(tCw}nzxn !,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,q4eMT[M4cl4M@MI[I[bbw@aIIR½]` dihlp,@mxp+ȤШtJZجvzIygzZ8Dgl2M@h " !!Z,z2P%6%675Si'@'J'S'v7{&7i_v6MS6MiLUB'd7%U'@r7SUC5kMkV5]V@]f[~CJ~_@kMv~fS_&C6C6V6VUtUtUkdx~r~~ȃtJt[tJtSmpzJbpivɤ[ɱv̱{ȓ̥ŲŚ̡ͥϩʮϺ̲ű̵ŵйŬɺԲɦʮɶҬֻjU$g\;Fi1Qj2'cN7,^0+jX- =[NcJZ _K̋bMY"j\AC)DGՋ` O4#fe H*\ȰÇ#JHŋ3jȱǏ CIɓ(SV+cʠ08/,hʇ"@Afl4.qDЫ 32%MAd(H(0A iPUI` !,z2|%6%675Si'@'J'S'v7{&7i_v6MS6MiLUB'd7%U'@r7SUC5kMkV5]V@]f[~CJ~_@kMv~fS_&C6C6V6V4e4e?s?wUtUtHePeXeXjqoM[M%am{MtMTa{tUM[ked{x~rgmrPP~~ȃtJt[tJtSmpzJs4@bI@@apiRIhvaɤ[ɱv̱{ȉ“̥ŲŪȻȬݚ̡ͥϩȪ®ʮϱ²˺̲ű̵ŵйŬü̳ɺԲɦʮɶҬֻG(C*\FB`H"E,Jŏ G( G!S.YRI01M$irɚ<{3(H.=:4iѥx TU6qb֨Z01'WgZY۷pʝKݻxݫQ(DTnI5)TI  a<@~ˈ/19R Rw8qF9뽒@`Lv7iID)JnLp$4`P[-&n(OËOӫ_Ͼ˟OϿ(h& 6F('8zct(mmaF)|@bztF#puwaj;V(_yb@u8(d4!ݱ "V' &tvm-a@1)X tix|矀*蠄j衈&袌6裐F*餔Vj饘f馋J(\pB@2p*.`H2!E hLGr  7`4|b Y Tš!,q4eM[M%am{MtMTa{tM[gmr4@I@@aRIha«ȻȬŻª±ƻ̳+áThpTD$A\τD~,P+ UI`I ~ #/ƀA!,qy MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾ_@pH,Ȥrl: jxZجVi(MvL.'a1$Cs(ޜt. {Vs(!G "  $ )A!,q? Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬQ@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! A!,<q@ MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾS@pH,Ȥ06tJEJ(Rz|hCs(x5\~vB{G "  C$ )A!,z%'5&6&%&56%433CSk'G'X7S,q6i67G&1k_v.HT&M{6MiIUB'L7]'G/-~d5q7)TEL'JL7@U'@]7[Q,md'@r'@x7Jr7Sd7bBC5ZI%UC5UV5mIdM%kC5kV5xH5~V5WYILC{L_bLV{UVv]f[fFCdMS{CJ~_@kMbkMvxCbzYurfGifikzvxziHV\&C6C6V6V6i4e:u?wHRBjBiWkUtYuHeHzReWvdqkoduqoMTM4d{l4M@MRTI[Z~vaI?]GX]Xnedi{vryPPkw~Ș_Z-f*m%m5ME_@_S_@tJt[fCtJtSjssK%5'7@Sb'[7vC_t5Sou@_jsEmtw5kIJSJXJ[iriivwҚ[љeП{ɤ[ŤiǩuʱyѨuɖä§àȾɮΩɮϸ˷͉͋͜ϤȳɸҭѷѻΤûɴΪϽнǛéƼо˥ɳШԸH*!k #Hŋ- (뗱Ɍϵ@pɗ0)n1d}ʆSŸ@n @*\?XSroLnlQqĬ17BJa ܠ)]h'Gͥk> .[@2ӈr'Dp\MM?T{rm 0Qno[\5׾\ xClulqKԓޗ@t?Pz2`eWS{˟9 ]'B( Lq`D58׃$H%? b"ba# {9fT57?8/bAh;MD $F8ƨ?8S\2,<0ݑ8da0x4 0 ЀMbFi? `efpt6zc#)~韋x)F#~ HPv* Mꨏ^:맻^Z뀷NꪮګJlK&k]" Z+-if2k. n+o+Ի+j믷‹/ ZmŰiWp Y|bl0 /'0w̲.{7ȍr8ܰC uAޯ}{ BԐX\W*lH"BQ KHԣӠ+FE!K V\th X2+!Z`h>L'>hDqF|{hQ c*r?' q4q,o>2LjJnvCLIq"1+@s&$%ۣ⌢!'N=11Dا!#HZ"xЏ]GP#/dJLh8ȡtdmP" >x3rd P6'SLre'[-2e(yW2d6JB0AdɐƝl=۹x4ſt0 u&d4Z~n utq =*fz}򤛼զԑnR/QSYd~䯃GzGv" 6svG9Dz݇v!ʇ:i\aP "OeW2YNbCh g"ȯ2p9}cjlbcP}oc݇5F=nj_<}3_CWs5 o+K_۟:0p:&wOiǿأ8BQp,V~DeB!Qb Hxuii~kVk}ji7EPLbkkH3jXWvO0k#gj>h"h`d uזmpp o\GTg oNnKȅQlOmLmqE`=wuMvwncpXvrxd7Ȉv׆NwPf5V(xkh~DxXACsKsy|gyy'81 -xR3ր]6{w{"z(bXbd׊З'ZfW7։:7XV{xv¨(Wfhc| iU{k6[wȌHLJJ֎"5ِۘgcF2fOЁV1i4h%x$O;X@xj&xi?8vAxgC8uضlaomg8n渓Yv[؅Xyo¶p\fq8vQGr9UY-W#WrrIdW w.ziGis8dI(d9x@i9@VZyNIy 9h\:F"ǘvy˨bGj)zddy,"b dHewNzydyd|Y͙fIɉIV) )ebI( @ؑ鹏 p N))ifvwP ݑpc 2CykEd:(iL4ٔO&V 0 [Ҡ"ZliIUgnXm*pjʅlD8<Ԁ  YrǗPVyjoC pt19e Uj7c)c|V$#`s Iw dIcWJyPudyɩdYHJ88fe)j8e dytAãY%B*b) y zA}44BZ!0 #bDfA# D  3 qFXJ4V5J}{7!N 1KkB@9@opd5Q 64?iQ@` pS m| yM򔳻Z%& R+%'`uxʜa J҂:<бMćT2+@J:9/@TIHw^B>~9Ǻ슮V2 C G:m˩Ҋ>{<,{B43k CO# 59N)}L` r3*F }@8d4\L dJGY~p_EI(~("ȳ%b QS`,< ,,V g1:š(SSM,J/S!1QE*ȂM:::<ƴS<4SRg?!1"[LXTNYK\`" TJZ 28Y̽ثۻVtS\5ÉGJ;:|pRLVM:@,6;0M4mPlכA3!btp#+]3[3+ܓP!, q3p/=BA@ ҜO@Q=90ΰES\3Xk[՝ 1Q_A5(N5?D71#(ϻPbC;͘5pSz > U@r <ψ2`ٛm=me}Ѝ!,q@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,q4eMT[M4cl4M@MI[I[bbw@aIIR½U` dihlp,@mxp+Ȥrl:ШtJZpHgxZ8Dfl2M@h@Â!!;,z2PL7v]7id7ik7bU_[]_[rVJxMbBm]mBtBzLzdtdzx~ȜfJfvzbmJtJzJ@Sb'@7{C_%t5C{t@C_[цSҚ[ҟiɭv̵{̶ŶϾ͖͋͋ΟѳӹҵαϹɞ̢ҬԳֺG<*5: @?$ 96+<.31) ;7%#Ï=-! ˏ9 =E H*\ȰÇBhJ3a ,|ܯ 0 `p- D QXU @\d[/ YxBFJ"&-f˜Jc"<Rd!LBO \)s&˚`V©TU^՛V]XeUZm!\u1՜^}A`>S^ͺװc˞M۸sͻ[KaE  8`#+X{4=(bÐPQQ D7!AX!,@V%5'&66%&'%6'%@Si'J'[7S'b'v7w6i&'@67J&7iCp&HS6C[&M{6HeEWG'U7L'%B75~d5k's7k75r'%~75LJWCL'JL7@H7vU'i]7i]7px7Ee7dZI%kMkC5kV5~C5LV[WY@Z]ZLCiLC{GZeLV{UVvUm{dHEdMSrCJrVJxMb{ZxxfJ~fSkzvxzixz{MVV&C&_6C6m4e6wLCBVBjLtLtZj]wIgGyReUzdxdzMTM4d{l4M@MRWQ~vaI?]GLUX]Ykrdjvv{PSxzƃCZ5_5f5z5MC_Sf@f[fCzJfwzvzbmHfSxHwSzizp%5@Sb'@'[7wC__%t5Iwu@_F_mt5{dpIJJ[JYipiu{ŚJцSҚ[њfП{ŤiɫvʱzѨuȗçħàƺûͥͨϷɷ͚͋͋ʳʹҭѸлɽȴҵΪιнǛОƻоʥȹѫԶ1AKDȰÇ#2 Cŋ3jȑ#BH$IEcߠ7&cH͛g%@ep^*uxSpI-QH%יOӪ^U~ji٥bC@M%pa|;/V+Ug>cB,OO)PS#} "M뒠sǯ; a%w[&#i񈺣{Gԍzν0Ӌ?o^/9wڗ'I6 6 6gJ8aa2x!ZzaZ!8"%wS)bS-"17#N5wn9ηcM=cGA7$EwtIFMFQ:9exUwEYjeE]z%a>7&ev&Ei·fj ggk7g}ryWzgg VTh1-(ny>hBzfh])nYi JCOJ}-^ޖ] ͢} C`= +k<+xCpв2 %2L9%C* v?E DqW3A#MKMdqqLRI< >E`22@-ػj CsT8K?4O'uVmXg\w`-dmhlp-tmx|߀.n'7G.Wngw![f$騧ꬷcFne7c? )$E Q1 EW;4-KWA?L[>#QQ))?|'z aqX\u=3OG@_I]'ŁPF aHCeȐ1a P7>! 6cB05 cH]4.nc] F1fQ[$#?H}P@HlfS*./6 $@1@Iذ͂ "00'V<}d"\# =R s"4HNΓl$("nҔC%W)Y|>J4ҏwF.kdžila7LMɬH3L;ْ]5iilnѤ7Mh^ӏ8te; ?x3 { uC1!9Cd9)?bQc'Z01i/N|$d*Pq~*yӽ*%2] tƔ 5Kݹˑⴤ &JPc4-jd* *?):6TU]ͬ&IW̫vիLTѺU!@ Р=*X;҇1+ŋv1e)_ORլKk:Λ*6ݩMj+f';Ԟ>VeEmCXc֭$kCŪWӶUUb vmjUE: `S>R|P!@ xvB1 jn)c3 Q) "dA)db nZh2Cy!&:-&>Pj$#HF3`8 |a, t!n~cy7nq\2~ՎgcFEuX/\p -@@d$*X>8<Y㓆D%,<$01$4,UZOm 8*ԊC"ipİRcw ] ZY2sD] ؇BX:Lpx19yLd&+hB &2ּB[$ 5dHʚ]F+XFVCAR>=y!P6E?,LtƳutv6=<81 . (3)vq}ω<-8Ľ D7ZV i.[XbKavHhk=/7coy{,fyB/Q{2\* cX+!^*1򎖝#7{7{ H.\@߃Y|{q0#Xy5* A$qc@ e[G- $}!o37?: A{@]Dgv_q7~?wm ̂>n2~,x  yJ/BX1G0QZ>3 ~Z8 @ 478`p` =WvagT![#a%k')H+h-|y#w3|5(xC9h;w?ȃAvE(GHucKMtÄQSs#WHYhr]_ȅqce(pCihkooȆqnu(wHmc{}lÇ臃k#Hhjp 8>  WxaHn Ra1e !Bqѐ s8}QgHsD0^H`1p#6nØ}Ȉiۨ8Xx蘎긎؎85g` d@kp@k x)`i`,  P8fipk!,q4eMTM4d{l4M@MRTI[ZaII«çàȾɷ̽à̰`!Ap\ۆim#"d!0Ȥrl:ШtJuجvzXϓznQ>~Ͽuvx}WU'!!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!-,Vqg H*\ȰÇ#Jxŋ3jȱǏ CIɓ(S\ɲ˗0cH͛ ǡ 9uOu̵ܱsعCvLܷc!,V@MT[M4cl4M@MI[I[bbw@aIIR½1 dihJpDrUYnH$CPlJI! !-,@v'6%6'%@S'b'{6C[6Ci6MbBB'U7L'%k75~75L'Jx7JU_@]_S]_[LCiL_bdM@xz{6mLCUf]tLmdzMTM4d{l4M@MRTI[ZaILdkrxŃCz5f[m@%S'[7vCMvt@m{ipIJSіbњiП{ɨp̭{ɱ{ȕ¡çàȾɷ˥Ϯ̮ϱ̴̽ɹɹҵнӽнΪϽʞàž̢̰Ӽ zzb,zHVzwzC4:E47xyZy94gnvSuzDžn =c8n`zeD6Ӑo[zF+;5hzfيn<|@ BP*>xK"&-f˜Jc"<z#a(PtȉD@Jx- 0) -,B ~C Q"E*z0 @QE:BO h6 /#( B `@Az R^o2J/;|͖;sYsiѡI|Zuj֫Zvlm}cn޻}[xp)G~\yr˝7euO{wQ?Gly͇7Qw=v}7y wzW xC| ^D B`1ؠ|җ}u ($h(,0(4x L@ &\1 !hsE:ƘBsČ'`D$(B c !,q4eMTM4d{l4M@MRTI[ZaII«çàȾɷ̽à̰`!Ap\ۆim#"d!0Ȥrl:ШtJuجvzXϓznQ>~Ͽuvx}WU'!!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!-,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,@2I%6%&'5J6'p_v6MiLUB'U7L'%k75U'@]'[]M%]VS]_S]_[LCiL_b]f[Bf{dV[xz{6m6zBmUfUt]tdzBLLxk~rrxx~Ș_f%m%m5_@f[tJm@m[{pipŨṱ{Ȏȓ̘̺ͮϾűŵʻʞŬþ̲ҬղԻl['ldB@j9%ge-#9*/!95$Xla6<`=VIi,ǒ4T.ĝ"DilcWkHG0LKк7)YRk_ H*\ȰÇ#JHŋ3jȱǏ CIɓ(S#21&HPAĥ2fAiOȨe .vdph3Opҥcp6H ^q`ˆ6J Q 9=L  5 ~ &!,q@F H*,8‡#*Ld$jܨp\/\I] 472#Ă=%81] ŶS$5KdYD6'EO: (UN\_ H*\ȰÇ#JHŋ3jȱǏ CIɓ(YFFJ/zpJȰ@Dc* E@?,F , !傩+ ZThP 6P!<,q@F H*,8‡#*Ld$jܨp\$\(Pa8gM?<4 ]`!&`8< +q^İ?`UV m(>Ui Cr*q6`kH-.À/ M1;Ayg3  B( PL_ĂC QX" 'DjRJ$jTReU1d C^З* IBbTՑ$0d*& eZ8zWЗsTjt$VB F(LdX4qG:OtCH 0P+o!z`FC}3GjxH%ImTuո>@.)^4#횂!,qMT[M4cl4M@MI[I[bbw@aIIR½M (xs.We]!]#DE" pH,Ȥrl:CtJZجvzxL.znJ|2!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,@3I%&66%@'J'['vMbUd5r7U7px7@~7J]M%LVSUV@Um{dMSrC[~_{kf@km[xfJkfiMVVLVLtLzdmdtdtdzBL]rkxCz5f@mbS[ɭvɱ{Ϣϩ̫ϩ϶ȶű̽ɽÙɞû̢ɺТԪҲպUUT;;K;SMRE!B,&UN$H=I#P +UL"UP I1 J7-8A/?F>΄ H*\ȰÇ#JHŋ3jȱǏ CIۑf/  ~0p?"dxDA*}H*K|2*A#tؠ0#*=i2_  `4d@* .a!Z,q@F H*,8‡#*Ld$jܨp\8 fh¸,^jlEz"y)|gPA\TGa$`$̞-GZihTWmXg\w`-dmhlp-tmx|B߀.m3N611( h $.9̡ #Rl | -C 0y[!i,q@F H*,8‡#*Ld$jܨp\TbG#@a*&(0Xh#Arrj,Y^U-U`(: r(PISJʥxݻc׮h  uԀt筏s$TPC:;zd/B9$VG$$Yeb9?؜[rbh~#d2ݍ.JNV9bIav)$eeI֩戅B& 裍^Zt=)yh^2hʅJ娖CMA0,CE40Qʹ0l"_EVXiuE\b9+v.QW_yW_EB[H8q@boE@E<$RqE@$[~s3o"w<@-DmH'L7PG-TWmXg\w`-dmhl X6+ +07'%H"p"GF"~0A8(%,~&!;,q@F H*,8‡#*Ld$jܨp\9. aV4^7AX;#f5*Âe d-!bf3TfeKJ/ML2Y S H*\ȰÇ#JHŋ3jȱǏ C9'KEKR"ሉ}ZbB@D?~.KgRlP!|\ P"Ab O 1!Z,q@F H*,8‡#*Ld$jܨp\ l${W nw0;=hl=”FPSX^&P5!01NgIU'auﰠ,_|@hUocxOA̗)?a+BG[!A8ᒙ]*L@= #y? ӆ◒A9h>n| Lt<#7 +2i(V3J96ƕ@@?#-$Љ?L"\vH#21R$ A͋A\"Oh.0bġ,:j`(-Wԟ鈱ޱyl!cG6R$ 1J9L!KxF2ld"Hqd'HQ(II:2:tc&MyHUr ]K\.}V s."^rp7bP0,ҘRC@b21AJZk~87Nbv HHŎ@ !@@3!eG* aZNH&-nYТsr,x _!؅U+R#1#x~Ͽuvx}WU'!!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!Z,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,@3J6%@J[6[6VpLdk7]7p]C5xC%B_i]Cp]tpxCJr_JdVif&f6mLVBfLf]f]mLz]LU~ddkrxxxŎCC%V5mz5VSzJ%'7@JS7vVV%_btJz@ftzpJibiҚbҚpɭvϮϫϲŲ͆͆͋ϤɵұΤΨϽÕŞʛɶʦɴЦӮԴ׼llcGN@F jg7.T9.;dOlg&b.3EEe4?!`l:VłB"^lk6`S)%f.5X #D\b> cKj[Ii H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲKWk(QcЋ Wb-@)8ĖlNxbQ<(ǦP  X"EO0`U" !(8a  UAB[MЄA"M !<,q@F H*,8‡#*Ld$jܨp\9h{'Ll-L"w]O> wX=hC"Sa7]8:`pA[Ͽ(h& 6F(Vhfv ($h(,0(4h8R8_f <B gW+K'PSU0lBp@xwѡ[`$]q -3YC|rF:R:Ift50ls@߬c%@&C p̎vlJ.ar*O:q!u0b9ac\{5BQq|EuC=]p6>CO 0jW7gG^B ]05ysH_4 ,l' 7G,W=h\ԡ2y!M=\ c(BRU +9" w …>فM7B0tqa ܵ2@! cB 01^g1D, 1tmx|27~Mh""J8 K;) E1lDVx6FDE+ P#ӧ2=%!PH3'.4A H&0䥂d@Yipi Q=1`-^F },Ha% Jj-S̀1oBi&k>y9ThКE͹eR36MԒU^ ֎]~؊eɞچmپM\uޕ^q}j &a?dF5Yig/~:ZkiŦɺװc˞M۸sͻ Nܐ{Аょ 5`ȑ;`R :b B !;,az  H*\Ȱ##JHË3jtXGCI$Syeĕ0c6tR͛iSΓ=iRQD=]1RPK:ETj֯`ÊKٳhӪ]˶۷pʝKݻx˷߿ !K,<A@@6%67%Si'J'v7{&7@&7i6VS]~'kMxC%rV5UCvrMv~fS6_MTM%M4fl%l4TIMnMfImzB]Mdkkdx~rŎVJmSbJSnzzɱv̱{Ŝȱ̺Ⱥ̵̲ŽŽȨž̮ԪԲּRR/1MLNN4?N0"F6EėϽіՈ׳ۧ݇ AJTB >D]ԸkG 0!Afp % JHq!+r4X D)*|b(Dx!jB3*P$`" E]YHXY%@i#Pbv= L˘3k̹ϠCMӨS^(!,`3|%66%@J'J'[Mb_v6MiLUB'U'@U7px7@~7J]M%LVSUV@rC[~_{kf@km[kfi4e4e6zLVBmUtLzXjdmdtdtdzqoMT[M%T4mM@MIMZM}w@fnBLLPM[ekv~mgx~Ș_f%m%m5_@tJmbs%4pnSp@IIRRanzɭvʘ½œŚʢͪȬͩϴʶϾűŵ̽ɴɞȠŤŬû̢̲ТӬԲԼ5B*\ aHb7 ޙhG 5rHraȃ6\#Yt)̛45ؼ93#JH.`Sŧ=q LĠ uTBI(z m t!,<Q@06%67%Si'J'v7{&7@&7i6VS]~'kMxC%rV5UCvrMv~fS6_MB]dkkdx~rŎVJmSbJSɱv̱{ŜȺȻ̵̲Žž̮ԪԲּ@pH,L1-18Ш2є@~X&WrETJP+-]!,V@ MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾS@@´Ȥrl:Ф4"ѬvdK.CGE1BMҨ\Q "  M$J )A!,@S)''5*2(2/-ASj'J'[7J7S'b'x7{6i&'J&7@67F&'s&7iVl,HT&M{6HfOI)L'%B75~d5~'w7/LJWCP'EB'pL7p]7iW7pv2Eg7bBC5XG%]V%UV5kMrCdM%dC5xC%zF5xV5LZSVY@\]ZPNmLfvfFCdMSrCJxCWrVJsOokf@km[~fSlkmMZV_6O&f6m4e6w?wLCHVBVBiBiBtWjUt]tHfFxSeWvdmdtdvqoq|MM4cl4MF[I?]HB]Q]Y[dkkreghvwrbuPPu|ȃC_V5Z%_5f-m%m5z5M@ZE_@iWtJz[fEmbjCfStJ%'7@Sb'[7vCt5Mv_bt@ksCmwi{fpp@aJUJXJWiriyL{̘RљeП{Ŧiǩtʱyɘ¾˩ɭϸʷ͉͋ΟϤʴɸѹнΤɴΪϽȜìżо˥˸ШԸ ^~93PÇ#J(Pŋb(jq"FMBIɓ(I~رK+ŤIȘ6s,)]! g5/Biǘ2wJԩU+jsW}q(ҫ.]׷"ղE׺v>76*:t*qSŋwBsXA;q,1];ƌJ&լaV=,N>!6:ֽ_=pڶ?iQC.0|Pfzmn}{p˟-|%xu?G߁ɇ|g 8UHط{ ч_9`Bh!4,254Dv7!R6cuՇ=Y؈8a"$J?ԂQt<:dKG\vYфcHiJY!9݆ao)Hmy؞|^R6h]ęhH~Z(K8.gKcd裐:ɩz~&:`e)&HpzzQh\OKj֕  +&yku₅1BuYnr;m˩{+.o v Np4. \nº.j+C8,0FA/?걶D@a rkQ++#@l M-[9EJO yB(ʟ2vl5'qSۭ6ܨm uu vz>Ì.\lsvx!yH_=HZ9}r}xּ)>#T2X 4MxlD}4J~*T0eCQ exH>*žQЋ<;ϴ ?ǫ]gG5QL]mܓՄ5?AxQi´5~¢uMN_[ eX bpi5Xbfp{8!2F:;< "2fDwX4%RP 9JFE%8EߵωEd9d"ѺD 8JҐZ_0$:.EyybpTD"HC!|' 6|<l qG(;!2b Q*(:'yFQAt"!&xYҡ+hӌΰ,ePRϤ=?HvIe7jRai>[5HꠦD +JV )RVխ:jZA8V@_y*L*鐱Q@{GՔJE;(D!I-{(bHIУX&*$(戉> .<w1իU @ G\4}!mc$C",cנ$ڌ@h#Ш+hk[Wl &Ԫv5:0N_iE"[nϹ᮫=Ts[H=odj=TzW[e" W4b;\q&Yuug/x;ME<7Ӽ2G0Q_Y}pDž]U ~HxKxa W@7PHP8@cQ wOHYRB2Eb%]$q?5R˶ʷ~Mt8p),Wn7DXPenCNTs$(CWROrH#fJh 7qRq tT8_r"jprx ׂ$whr{ [`XX2{x3`tvG؇gd`Bw38Z;i5 1H<燣p|sPx7#guP {'5m؀h  (t0s\g*bx0 PF(ethpg cPZPըzw'0ӔF!&> ($~K8 # ;sgyghxg4Ǐ|؊0:vjjx RUBjj؏/ARmI ,x6F9yKS9U{![ɕ($W)BBU%d4c9{]dBmoIkXVasyyuygYEٗ8Hg3@`X9Jǘ$H &vjF ؒȗYeOw, !wC1<Zywb'4 D8D8)tI@ t}ؔz/N9a 9+WtZ8eYra!)I9g9yvʟxjxD J9/ **z Fɞ' j'ZH`~e*ږ,l~%[q57z^@?:Aꗋ ; fVI K x@679U)z!A@ ^fcjeJ\Ph;Tx4X=3|ڧqJ5أbz*ʋJZ(Jʩ*fgڞp# z:-ZTyz꫺ګ9J zjqک:ꬬZ֊؊кڭjڬZ)sju!,@f'@S'{6Ci6MbB'U7L'%k75]_S]_[LCiL_bxz{6mUf]tdzMTM4d{l4M@MRTI[ZaIkrxŃCz5f[m@ipIJS̭{ȕ¡àȾɷʮ̮ϱ̽ɹнʞàž̰ӼH$ NPPICMJKBCO" ,8)<ÅH-5D 6P*>+ P#ӧ2=%!PH3'.4A H&0䥂d@Yipi Q=1`-^F },Ha% Jj-S̀1oBi&k>y9ThКE͹eR36MԒU^ ֎]~؊eɞچmپM\uޕ^q}j &a?dF5Yig/~:ZkiŦɺװc˞M۸sͻ Nܐ{Аょ 5`ȑ;`R :b B !,@f%6@'['v&CSUr7B7vLV[]V@UV[]_[Um{xfJMVBmLtMTM%M4fl%l4TIMnMfImz]LLMC_5z5f@zJzvtJtSzivnzzȥ̥ϩ̥ϳ̱ɽŽřȨɺɺԪѳTT.0MKOO1?O/#D3BėϽіՈ׳ۧ݇ AJTB >D]ԘF}H%םTJ-ǽL5ԙN=ZQcC;p)ӤHbsʐ*Db(Z(h@L "&Q^%5DXp@KE2e4#ĽAr[Rr pq%I)XEl#5y ;AEI  5%LCNTnMKNسkνËOӫ_Ͼ!,@%5'6%67%675@Si'J'b'v'{7{&7@&7i6VS6Ci6Mb]B'~'L7p]7iU7pk'Sk7b]V%kMdC5xC%~C5rV5]_@]_[UCv~CSrVJrMv~fS_6_]mBtBzLzdtM]B]dkkdkx~r~ȃC_5z5VJmSfJtJ%S'[7vCMvt@mibpJJJSJS[i@іbњiП{Ũvɱv̲{Ŏ̥Śɡ̮Ϯϻʺ̴Ͼ̵ҵнŽΪϽɞžŢ̢̮ЦҪӲԼaH` "GHbE3bl#;"iТISl#,) 6ɓ*sn,QpM:tD%rU:G#* C\X81Ѭ(&A#/.JD5h mR1yU)sb⛋s>䬕S^Ɯ9棝=:hM !#bY Yi( %[a҈B4JBy=ōHΟG#dGCxD!P"|&ϊ0q~!e^q E.X|:Ҡ.X! D*ttw !"y1%Qv2TtPqs@TFeƍ540Ce[hhAHFC1%g N $(N@@!`!D@P Pށh'mxRbX`(:) Z))* brZ82:gfŠꀳةRz**,ÚZ,E(awꪳBKb;˫&*r[.ע۲ۭ+kȶl;Dg' 7G,WlgwQ@!,<1@P6%67%Si'J'v7{&7@&7i6VS]~'kMxC%rV5UCvrMv~fS6_MTM%M4fl%l4TIMnMfImzB]Mdkkdx~rŎVJmSbJSnzzɱv̱{Ŝȱ̺Ⱥ̵̲ŽŽȨž̮ԪԲּRR/1MLNN4?N0"F6EėϽіՈ׳ۧ݇ AJTB >D]ԘF}H%םTJ-ǽL5ԹkG 0!Afp % JHq!Kr4X D)*|b(dhx!B5.P$`"@]aHXZ%@m#Pbx5`#M۸sͻ Nȓ+W!Z,`3P%&66%@J['J'v6[6VpLUdd5k7r7]7p]M%]C5xC%B_i]CpUm{]tpdMSxCJr_JdVixfJMVVf&f6mLVBfLfLt]f]mLz]BLL]Ur~ddkrxxxŃCCC%V5mz5VSf@zJpJ[ibiɭvɱ{Ϣϩ̮ϫϲŶȲűɵɽŕÚʛɶɦɴɺЦծҳ׺yoP[pvGL$w@/q]yt:jJ.J+ysE5k%x;!ŒI6i's Њk c>9ylQB(Tbݍe7g^n D4$r̔`*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8s pYgP]"jR "b”Izs P_A(ZVu0-,@PIˁc L%X1AH4\z"aNMTu͗`b.3`)]gCaM۸sͻ Nȓ+_1Z,(?QB1<;qŷ~;rɿ+ 6s=rEG'=tuUgg=ËOӫ_Ͼ˟OϿ?@!,V@MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾl@pH,Ȥrl:ШtJZجvzxL.z'LM4&Qd|K *J  I(!H "  G$G )EA!,@)Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬ@AB Ȥrl"UШtJ %zհXJIwOAϷZ0L xx{{ "&wzlo ' knH! _cbVTRA!,)''5(4'20+BSj'J'[7J7S'b'y7{6[6i&'J&7@67F&0mQn.KT&M{6He6VpJYG)G/-qd5k7~'w7/LJWCL'JL'[B7[U'@S4nv2Eg7bBC5YH%]C5]V%UV5lJdM%dC5xC%zF5vV5W[OQLoTmslHLkMbkMvxIfrMv{ZusgLifirtbxz{7V_6S&f6m4e6w?wLCIVGVBiEhBtWjZx]tHeGxReWvdmdtdvqoq|MM4hl4MDWQaI?]GB]R]YhkrdehhvwryPPku{ǃC_V%V5Z%_5f-m%m5z5YC_bkWtJz[fFmblH%'7BSb'[7vEV%t5TntJu@ksCjwiufpsIJTJUJUiriy{̘RdљdНxŦiƩtʱyɗ»¹˩ɭϸʶ͎͆ϤɴɸѹнΤ¹ɴΪϽțéżоˤʶШԹk7M*\ȰCa"J #3n3jܨpDHSf(˗0cʜIfLz6ϛʟqJ(LF*OUT%Ыpu%qD$RXjס C|KһEK7D.$Y:WI;?]LS10q)8A񧞤ӧ-qNY1z/ӥho}{1x#e;h9+%/5ye[%=S͝A@w!0o7<?)Fp@@8AĒ+ O[9 :( fvT)̊-(+K'%MO&z"3*YcKB":Ky($[FbO~//-2 ?ȈMG$NDHmrZD~> vyR6l 54h78*D:2Zi>ZӅ@HORꪥb* ^8(꣔b*;/Ţ@0>ӨA1՜KD0 }&&֢ݣCI<Ã/XULd,C+BQvSIaH1do8l2O+BhcV y(;^+>6`PT, npM{ܫ9,AD.1)L:/YrF+^=)sts9Gګ?_w?Ox̉h>+x$X0My??F.\!ԩD05$l6 d7AD sȾi8PxDPBG*Fԕ3F8C-ꮉ;{"}xA ]t".1P p4=YH%FRRd .G8LVSD@%*~Œ2떳D-RVE)M*vXc!U*aҕU([ݮ U)A WҞ$%}]- y3!i+x\ێw0B"p'dj>j &hBH:f1m(1ӕvTw[=?>'fZ-z%Rj[V~UuER*1K*5@&]׬쯀kX=Ho ECGn:yd'˷5~lG h\ FX]s, &>nY eS%tXpr"\^gsޒDWuMU6VV]-{['FmdZOֱuh%q`A.$aъE`-@ A gQOk7(P^t;wln_: >xw&&5OZ t"5֖7-c;A80~7'4pdZ?#\" 7`o WnGιDdNsBH$7)/=4B^q{^& >c~W}g_9qgw.O]?O#}";wzG^ ;5yYТ34q]AE=iv>oO]LF){ .wu{l =m=Y 9ip<_ Z:8aMYЊL13\Q\@'B( Ee@BEWlRx*  Rr[( &;5"%o@rPgacr"rty&l fri!#2, p|_l_'qAIHv(!U'D-B-,,8-q$1ܧ@'b"Fbg'/Ŵ/hE(,@u.$QHqS1#c1i 1 /@<a_b[ǔ{_]RX)ZyShNu7|wi|ٗ~aY9I]U.a{{/闇7i&uIz |(079@v|Y0. x=qA<`p sך9r& hEZLlI!jlH\ !l pʪ3'~ fԲ.J/ʦI.}z.8b%6ɾ,2Rc=̕l=65Ԍ ݼл̱ܻ|Q\mLκ!,@e H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲˁнl 9uT8.!,@f'@S'{6Ci6MbB'U7L'%k75]_S]_[LCiL_bxz{6mUf]tdzMTM4d{l4M@MRTI[ZaIkrxŃCz5f[m@ipIJS̭{ȕ¡àȾɷʮ̮ϱ̽ɹнʞàž̰ӼH$ NPPICMJKBCO" ,8)<ÅH-5D 6P*>+ P#ӧ2=%!PH3'.4A H&0䥂d@Yipi Q=1`-^F },Ha% Jj-S̀1oBi&k>y9ThКE͹eR36MԒU^ ֎]~؊eɞچmپM\uޕ^q}j &a?dF5Yig/~:ZkiŦɺװc˞M۸sͻ Nܐ{Аょ 5`ȑ;`R :b B !,@f%6@'['v&CSUr7B7vLV[]V@UV[]_[Um{xfJMVBmLtMTM%M4fl%l4TIMnMfImz]LLMC_5z5f@zJzvtJtSzivnzzȥ̥ϩ̥ϳ̱ɽŽřȨɺɺԪѳTT.0MKOO1?O/#D3BėϽіՈ׳ۧ݇ AJTB >D]ԘF}H%םTJ-ǽL5ԙN=ZQcC;p)ӤHbsʐ*Db(Z(h@L "&Q^%5DXp@KE2e4#ĽAr[Rr pq%I)XEl#5y ;AEI  5%LCNTnMKNسkνËOӫ_Ͼ!,W%6@'J'['v&CSUr7B7vLV[UV@]V@UV[]_[Um{kf@xfJkfiMV4e4e?eLVBmLtHeLzPeXeXjdmdtdtdzqoMm{m%M@MIMRMZMz[gt??]LLegmgm{wPPC_5z5f@zJzvtJtSzi%'7@_bstz4ZtaSvҚbɭvľ|Ȥõ²̪àŨȾìɷ̥ϩȪ®̥ϳʽ̶͆Ϥ̱̽ұΤɽϽŕŜɞƠȬźɺ̢ɺТԪҴ-HL(\hb #J"ŋ.x! 'vF,r-/lhʘ%m83͝uEس&̡ "-XTRG-C*6UNJ.6T8hʙ6-h٠ؓ>Rt T'w5k,3L!ߝ'kgcqFVedžwe??N3iZSBAڗ}p& Nz}_μy'KQyPCq@GHZ$D$CyO=`_~=t[UuUV`U^QVl %ȁZ\qed%"H~qP~I6$B(P(0P5!䐇%f`$DJܕ5ډ[rP6Bbvi]ti]nƹr9vI zgq h*f^hB.(>_zGi]tn\fJj iNj ki~kkJkJll-BR;b۪r{[›;a]:r.zx0ȡ yG ˸p~b^ q2{n$)8$pH*(iٳ?3mH'mJ7tL?-1?ITGHk  UJK^un_ wSMv zcw] x݂w]j/θV?ߒSxGSs.珃θ艓n郣}wNqk㎶l#9';Ï]<<˿{e}O[y9}~_}]˽>g~=aJpX,oS4 8Fp':9#"84r6#Ef@/&V@GhC%@9@=h~F  #3aj),QB6Ds!BЀ!ⓑ(8!/{Zw pH:x̣> Iĩ  F@\  \NADr+,uI! - HV( Đ<;qŷ~;rɿ+ 6s=rEG'=tuUgg=ËOӫ_Ͼ˟OϿ?@!,V@MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾl@pH,Ȥrl:ШtJZجvzxL.z'LM4&Qd|K *J  I(!H "  G$G )EA!,@Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬj@AB Ȥrl:P%p`جIIvL<Zn )qqɆB1YP ' M! A!,i%'&66%6'%BSi'J'[7J7S'b'x7{6i&'J67J&'v&7iMb_v&ES6C[&M{6IfIUB'U7L'%B75~k75~75LJWCL'JU'@Y7py7Dd7bVE%kMrCdM%~C5LVSUY@[]YLCiL_bUVvLfvdHErCJrC[~_{kf@km[~fSdfikfixz{_V6H&f6m4e4e?e6xLCLVBVBmBjBtYiUt]tJiGzUgUzdmdtkodtdzqoMTM4d{l4M@MRTI[ZaI?BLLXZkkehxrxPPrxx~ȃC_V5f%m%m5z5M@_@_@f[tJz[f@mbjCfS%S'[7vCMvt@osm{eppIJW[JSiry{іbњiП{ŦiŤpŨvɨs̭{ʱyȗīðô̧àȾ̩ɬϱ˾Ž̺̳ϻ̵ȷѹнɴΪϽɛèûž̰ɾо˥˸Ҫӹ H°#J\ċ)VrǏ CIFX)ɲH3ʼxr͈5o4x˟@CěHE=qӁ9:*fϤX]=ӬI~O6wߪbϬ;mf+ڄTf ЍDE*6?R?^`c$T s@s@x("P>wDo-'#['mLC<@M4q[[]-XyWա}q 4]}grXE?@UT>޽+_m/"r/,8,It{%JB@d9@d F g`G8O4$3͏@Vc DI͐EBSd?^JGla{@8'D\T?C cnXVΤ3%Ii-/m|c7{tCu̢ojOHzwo0&\>}kkJ8@PxRı/zx<(p 8/#Y7јDEEY@ P^HmP:I H= rρ$r"9oʯ+(h?""h ܆>n2QAP$ :F_G2LIJԈ΃ŏ$%GEҒi!{\w@C\7?|QCAPR%"KS8iiJ?}KbyYK_޲_$&&+K%lÑ2IB&Sf񧸞x '5L?1Yn#3i{d!6zBYGPxq19B?z"gCЄF9NLr;(& )KvHwiNSN*@f+*0?Ҷ P֚)̻4V(hT%pOZIE$Uj~4"d{p=V 姡V\kTEVJr2:gN񄁈t#V¾8Ȅ]  `6DZOa كz<=ZgFPo}+K nqh"׶f[S5e.s␻.xy7=7K[3^ro"Ec 򖷈59p`.M !# F1pD rQD`] 8@@U3ָO@`(6?H7zuc G1!s^*x9%q)s򝉌c)/7 `5mИV5X-4B4"$'Q0ve48@gA=4uҥ/JYڒҎas02G#itEfVH sjPJsyF1H!. @ Pz( Zzʼ2հkwChgwipø. _;Mzη}7Npox;a?2v񛂘ָ"NOrG,юlV1c;6#wZn>}Ǩ"^X2GQVR.%iy.X NvwhvήpNw~ϽxwdE dF«'7pcW}gȼ{72d5ya ^0W^s7 !,@F H*,8‡#*Ld$jܨp\!,@f'@S'{6Ci6MbB'U7L'%k75]_S]_[LCiL_bxz{6mUf]tdzMTM4d{l4M@MRTI[ZaIkrxŃCz5f[m@ipIJS̭{ȕ¡àȾɷʮ̮ϱ̽ɹнʞàž̰ӼH$ NPPICMJKBCO" ,8)<ÅH-5D 6P*>+ P#ӧ2=%!PH3'.4A H&0䥂d@Yipi Q=1`-^F },Ha% Jj-S̀1oBi&k>y9ThКE͹eR36MԒU^ ֎]~؊eɞچmپM\uޕ^q}j &a?dF5Yig/~:ZkiŦɺװc˞M۸sͻ Nܐ{Аょ 5`ȑ;`R :b B !,@v%6@'['v&CSUr7B7vLV[]V@UV[]_[Um{xfJMVBmLtMTM%M4fl%l4TIMnMfImz]LLMC_5z5f@zJzvtJtSzivnzzȥ̥ϩ̥ϳ̱ɽŽřȨɺɺԪѳTT.0MKOO1?O/#D3BėϽіՈ׳ۧ݇ AJTB >D]ԘF}H%םTJ-ǽL5ԙN=ZQcC;p)ӤHbsʐ*Dbʑ+H$˒,L4T˓-PD*mǔԩtJW1$PPЀ}U_AhE'L Jj<N/)% )dzi DG|!&h$JJ]XEl#5{ `;AEI  5%%'7j{ʟOϿ(h& 6N!,3P6%&'56'p]'[]VS]_[]f[Bf{dV[xkrxxšm['@7{_%C{t@_{iцSŨtϺϾ͖̽ұҵαϹɞԮײ׺pH,Ȥrl:L(DtK(\-(qQ򈜷%;x8/*x&{[3O/3+BO C,1O2(bZCTVXdfB^`lnjwyrt}8*&MB"MdkT)!>ꅊݷ!,@%5'6%&'567%675@Sip'J'b'v'{7{&7@&'p&7i6VS6Ci6Mb]B']'~'L7p]7iU7pk'Sk7b]V%kMdC5xC%~C5rV5~V5L_S]_@]_[UCv~CSrVJkMvxCbrMvxVp~fS_6_BVBf]mBtBzLzdtM]B]]dkkddkxr~r~ȃC_%_5f5m5z5VJmSfJfJtJ%@Sb'[7vCt5Mvt@CmibpJJJSJS[i@Қ[іbќiП{Ũvɱv̲{Ŏ̥žɮɡ̮Ϯϻʺ̴Ͼ͋͋Ο̵ҵѻŽΪϽʚžŢ̢̮ЦѪӲԼwH]2QZHbE3bt+'D b$E(S&CY2ɤɔ81rɥTIJʦŜH bSO̜ŤX Q]RzkRL<5Sٲfsr¼7eDN+W0Y8 FRUƍۄQd-ĜYU]uqG`>؊!WM@[yhFVK1`\  .NЕ 4r >ԆsnwNTChz|Wm B(4XgķQG!_]>ajB (ᙄpJ)l V|![rQqH+aMeE&;6)EZPb\0+U(TVdc*AOq& y"j<'sR8uBxyاf"3٠()O>m5FU\d``C}^[+#DD >^{ U6 >_!*A|2 '1<ǀV 'ZFY..{%/-ʛ/ڋ[) (D]ԘF}H%םTJ-ǽL5ԙN=ZQcC;p)ӤHbsʐ*Db֎A-Y!`Bv@AJD_URC"wO_hRT ^K2 &Bؽz)d0H!eI(ha"a]H`[%@q#PomZ*7粠NسkνËOӫG!,`3P6%@J[6[6VpLdk7]7p]C5xC%B_i]Cp]tpxCJr_JdVif&f6mLVBfLf]f]mLz]LU~ddkrxxxŎCC%V5mz5VSzJ%5S'@7{C__%C{t@z@M_mtpJibцSiɭvҤpϮϫϲŲ͖ɵҭұҹҵαϹнŕŞʜɶɦŲɴЦծԴ׺odGNcm@F k4 dKkYIj H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cfR %qeЗZІNxb+ܙQU I֋  X2($َ7`2 r! B.'n BABP $ .t:l& )2Y!,<!@`6%67%Si'J'v7{&7@&7i6VS]~'kMxC%rV5UCvrMv~fS6_MB]dkkdx~rŎVJmSbJSɱv̱{ŜȻʺ̵̲Žž̮ԪԲּ@pH,D]ԘF}H%םTJ-ǽL5ԙN=ZQcC;p)ӤHbsʐ*Dbʑ+H$˒,L4T˓-PD*mǔԩtJW1$PPЀ}U_AhE'L Jj<N/)% )dzi DG|!&h$JJ]XEl#5{ `;AEI  5%%'7j{ʟOϿ(h& 6N!-,@v%6@'['v&CSUr7B7vLV[]V@UV[]_[Um{xfJMVBmLtMTM4d{l4M@MRTI[ZaI]LLC_5z5f@zJzvtJtSziIv˜ȧàȾɷ̥ϩ̥ϳʽ̱ɽřàɺ̰ɺԪѳTTÜŗDž˃͖ѥ؎Ӣۋ݉a8P`5 FCPa3&8Qb1-øQc/=9Rd-'MBRe+/]BWf>pYgB FZhFTZiJ-Ɣ:S[0H3;F + P#ӧ2=%!PH3'.4A H&0䥂d@Yipi Q=1`-^F },Ha% Jj-S̀1oBi&k>y9ThКE͹eR36MԒU^ ֎]~؊eɞچmپM\uޕ^q}j &a?dF5Yig/~:ZkiŦɺװc˞M۸sͻ Nܐ{Аょ 5`ȑ;`R :b B !,q4eMTM4d{l4M@MRTI[ZaII«çàȾɷ̽à̰`!Ap\ۆim#"d!0Ȥrl:ШtJuجvzXϓznQ>~Ͽuvx}WU'!!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,q@F H*,8‡#*Ld$jܨp\D]ԘF}H%םTJ-ǽL5ԙN=ZQcC;p)ӤHbsʐ*Dbʑ+H$˒,L4T˓-PD*mǔԩtJW1$PPЀ}U_AhE'L Jj<N/)% )dzi DG|!&h$JJ]XEl#5{ `;AEI  5%%'7j{ʟOϿ(h& 6N!,3|6%&'56'p]'[]VS]_[]f[Bf{dV[MT[M%T4mM@MIMZM}w@fnM[xkrxmgxšm['@7{_%C{t@_%4{ni@IIRRanzцSŨt½œŜͧɷɺϾ͖̽ұҵαϹɞȠŤ¾Ԯײ׺ ]]HJì5WUZMK5"!5(FIG׹Q6D;YRLA]4%:Y]SE$Fܻ"VQe-.P9Hŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣV#3g!ؑ@~ U}pW\k#@kqaCU&, ѿ"Q LÈ+^̸ǐ#KLY!Xf(0@ @NdA.Fˀ dxa O|# 3 #@!,qMT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾj@@´ `a9xTsiTTŀ!p ()~{,A!,q@ Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬR@AB Ȥrl:P%p`جIIvL<Zn )qqɆB1YP ' M! A!,l&6%675Si'@'J'[7S'v7{6i67J&7i&HS6MiLU7L'%B75~d5k75LJWCB7v]7pr7Sd7bZI%kM~C5LV[YV@UV[]_S]_[LCiL_bUVv]f[dCJdMSzCJ~_@kMv~fSxz{VV&C6C6V6m4e?e6wBVBiYi]tHeEzReUzdzMTM%M4ezl4MHMRTI[ZaIrn?]BLX]Ukrkvrr{PPvÆZ5M@f[t[f@tJzJzvmEfStJtSzi%5@Sb'[7vC_t5Mvw@CMmtbI[J[ipiwwҚ[њfП{ŤiʩsʱyҤpʋȕ˜ȧħàȾϣ̣Ϫ̭®̥Ϯϱųɽ̵̺͖͋͋Οű̴ʹҭѹҹȴΪϽнʜà¾ɺ̰ɾоˤʭŲѪԴպ)AGCȰÇ#6BZ C8ǽy23K% ,s38!߹qSQ0)6BCbpI0134>F^DXoQPxn_C)a<2v-,{B/d "yҀAo(#嗃^D $&`6=E5c -Wypͥ7iBskNywݿG~yϫk}{0~ϯ>{^`-Ƞw>^}Ha^n`BbG"&a*b%Zw8U6'c#}/(B 7b71-9NcAIA^Z"e_jcRYfg:k"fo sXgwJN? )B #O}PFf}4.s B3tyWDVJT1w CkD%^WZkPYgw^nP,s a!` ^r;CifqVem *eCYBlka C )ǜsgr#CJv 6'RLXw ,$l(,0,4l8<@-DmH'L7PG-Jpr9;0G8A5+=D`D/#H5/A+ 7F$1h߀.n'7G.Wng7t砇.褃t騧积/ 쮷Nێ+N&)' * ͟RKC[CE' wJor>2>/>ݹ.L-0P_iL -Q \₶(-,\B 1hA^E=Qyx(%,:32XHu^ 6fC⬈-.^CC|u*MDi*qV\bS!FИ,`bB-|Ev88Nw~\]зI d4LlFT/FR#VILfTc'=:Jnf^$e)5IQxǣޯi0 vd5wɃ#@>ײ}Dp <XXE 1z4p C~kȌY}[f9~囟'aDH!eB91)NXjЄ (,f8!zx8*4a;E!$ ЄA4#ԞPm4VDSJP!]v_CbhETxv]R͹ZzkcA5rtvpc])yӫN8/s[nԪv-Ui!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,Vq@ M[M%am{MtMTa{tM[gmr4@I@@aRIhaªȻȬŻª±ƻ̳R@pH,ȤH0˨tT *πOPR=p*Ge2yF  C( "&A!,q? Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬQ@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! A!,Ai%&66%&'56'%67%@S'J'['b'v&7@67J6C[6VSBU]L'%L7%d5~'r7~75LJU@]@L'JB'[~7@x7J]M%xC%~C5rV5BMSUV@U_@BVvUCvUm{dCJdM@dMSrMvxfJMVV&M&M6_6t6zLCBVBfLt]mLmUzMTM4d{l4M@MRTI[ZaIBLBL]]drkddkr~UkrrxŃCm5z5VJVSf@mSm[%5@SbC_t5z@CMmt{IJSS[J[bpp{Қ[ҟivɨpɱ{Ҥp¡ŧàȾɷ̣ͣϩ̳ʻʴ͖͋͋Οű̹ɹҭѹӽѻɽŽнÙʛàž̰ɾŮˣ̪ŲɺѪӲּ)"Tx CȰÇHŋ3jܸ  DV,ɓU&C0NPʜɱ͛8J`)1jd@t:kD2IjUd65e(`rPR_0,Qpf̕cؤtMc-X}WǏsI@ǃ@]i<!Le6VmƜMB^m5|$&sCI>>ɺ_!brWWQO1aaGV0=Y@AUpW=M-"ڽO h`jxa%FwV؄Yw u!$% "(1x#h=H 9$  *yM:YJ9%ZYjz%ey)&ʹuډgr9w @ h~! iN ^Ziom{~*GjꅪjjgJ+BPh믓R)<@A޷1 B6w/h\Rdž BcȀ,=Ʉ^!fAv4)Ap8K,nuBal (piVF}p°Fff́DQRZK #ȳJfjО}8!ԗ.[*f BxTL/* "" p¬ӸA CXXx 0S}{, ݨp}Q"*n'7G.Wngw砇.褗nF 2f*a%C(VI0bKD%RGVI#AB//;!,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!i,dP&'5L7%B'[~7@BMSBVv&M&MBfMT[M4bMZMzTaTnTtTzlZMMTTbbbr{Ukxʼnm5z5VSm[%'7@JS7vVV%_btJz@ftz%IRZhSbpRtҚbҚpvtÿ½³Ϡšϴ̵̶͆͆͋ϤұйΤΨϽśˤ̨ž̷Ů̦ЮԴ׾H*xÇ#J(qŋRȱ㡌 C&HG(Q60  8腉51L̈ɑQz8d>&F]AtѫА?RJQ%L8¤mڷn8mMu [&<3 !ۆDq2F˗hyLΗd˕0/{ւ& S SQ:`X1bp 1bă[]zHDs_K_=B>aM=+@x}LFU@: % $aG]X{nXtyHbq" -z#A/>772TcDc;:9*$DCʸG yOyd٤Eg'eޖW ߀&PI&|abXI#Ty.A9f}& UQ` A <!9dm`@xFy@ tکaA]@GgnjEa AkFABF BTl@NGjJmbpfM飺.ZgZ^knX}+b;o!+W ,! lU: -z',J-k .Z\*>nbt1FC^R,x 'Q9Q=e * qLSU  5@[xa R]p5W]aۥW\}T'!XfYji4fjEdWRqR l4ĸA ]9(o.p5!i,q@F H*,8‡#*Ld$jܨp\< {I-D:l5+{|dޜ`@wR*K =%)#UqmCBenFV 3YM>uU׃`,;QmqNJVC[ =woh sFȥOnzน?bzפ;"=:x]yGnet-%Wyvvy5`]wXb!R)AVd=bfmZ(Qiv^12_o_s2v-l77x}^<}ފ8)))cgeXҨ%>v d؟GI$Hjj VXh@XބUhᅵvzsYy"6p&u*Fg9X%gv旒.Y$SɕLj*MYTeتfOvze:ZfzjzJj#[p"TwNw烃X~hN'E!D[a=\*l&gO *kowELfN=]Tgb` 2L14_5BoJc;r;30`KBA)$C$ ԰F u4JOkTJAK@a ׸x ⊽ ]  ۼ wnmx|߀.n'7G.~?BQ,@b^H8Ta(y !-,@3P%&6@'J'vUd5r7L7v]7pd7bd7i]M%UV[U_[]_[UVvUm{dMSxMbxfJMVVBfBmLtLzLzdzBL]rkxxŃCz5M@f@fvzbmJzJ[[ivɭvʱ{ȉ̘Ϝϥϩ̶ŶȴϼűейɽÙоɺԳ׺XX,VPUW+CSL (!3MA-=Q Q FXW'Ȟ.&N8*9D֍WEJB H*\ȰÇ#JHŋ3jȱǏ -&% IAcP Tr ,5]" `Oi$a] Ia0ގj訖D>Eh2 !,q@F H*,8‡#*Ld$jܨp\ !{6 : Ǎģi(S>4 '*P6{ - `pƐѐ9"0h^cfmoo?J"Ao}`7@O4Ё`G: V0%7G !(@Q!Bta{BͰ-a UPvA".XDЇJl 0a CvCiE&S#x@0fT8G%rubFܑ}qjcĈC/1  EP!="2c$ 9GP&L'GiS‘d+ÈJVR\+Si'$/yIQe2[II2hS 7O35!E01 C̈́&lts+19T^ i! d6Sp5?11h6E i[PG/L?򲗾)@RHS)c@ldxȼ,$YY/R5UZC$6A;,;( Bz },Bi@,}J* 4<}ʛG8 6! D4"iE INDKЇ AE"A=3M]6:K1a bї$*)hdO7v r@8> g&orL BĮY Tb)#vF#!/nZJhT 5\jT>\1OaJaQU-R&PvhqL-,\׵]-mq[ )0 *0$A5aIr/X+ҩC'sl|1K]$o4wjǘ*s^,_ UR.{`L2hN6pL:xγ>πMBЈNF;ѐ'MJ[Ҙδ7i1 `(zŪg}>.HhzMlՅ Z ðf;ЎW!,<q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,<q H*\ȰÇ#Jpŋ3jȱ#|BķOɓS\ɲˍ E#y˛8sS$͚v J̙%zӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻxʥȷ߿~!,'!2`6%67%Si'J'v7{&7@&7i6VS]~'kMxC%rV5UCvrMv~fS6_MB]dkkdx~rŎVJmSbJSɱv̱{ŜȺȺ̵̲Žž̮ԪԲּ@pH,Ȥrl:ШtJZجvzxL.VG0 U%rBppCE2{1f.3/B( {-d=#;d >8+{c">6;,& ')rd8 >5{h4hpBjl~cz|~tvx PH 4EHQMtPXXjY_ūYy0PI͛8sɳ@ !,<q4eMm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|ªàŨȾìƾɷ½ŕƠȬ@j U)&D0@RR`*$K%`@`c*Q~!  /̅rA!,<q@ MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾS@pH,Ȥ06tJEJ(Rz|hCs(x5\~vB{G "  C$ )A!,'km)''5&&56%&'56'%675CUp'J'S7J'j6[&'J67@&'s_v&CS6IU&M{6If6VpJUB']'B75dd5k7d7%~7%~75L'JU'@T4mk'Sr'@x7Jk7bBC5YH%WC5]V%UV5rCdM%dC5kV5xC%xH5~V5Z]POQlLfv]tpgH@dMSxCJ~CSrYJkMbkMvdVixCbxVpdfiMZ__f6F6V&f6m4e6w?wLCBVLVBhGiBtYkUtUtHeDwReYtdtdvqoMTM4d{l4M@MRTI[ZaI?]H]Ykr~ddgxrxPPx|ǍLC%V5Z%_5mf%f5m%m5z5_@VS_@wJz[fJtSmpf@wJ%5@Sb'U7wC__%t5Kwu@jsLmtiuippIJ[JJYsf{͔RiљfП{ɤ[ŨiǨtʲ{ҤpɕŤ§àȾɮú̩ʮϹʹ͚͋͋dzǵҭѸѻɴҵΪκнǚéǻʢɶѪԷ{K*\ȰCd"J$ kvÏ NR,e0ANPQ'ϐdhQy?&_= *SU$j՟L)ʓ|vPןjخk>[`$ U+/&SZpH (`?ㆰ.v9 +ҤE%߈ 9Dmz" u.vf!?~zb~];綠VaN`.a!~xa"jHbN"w xU.*cҝHcf3߆:c2d*XF6d -d}6>I$MRe;^%pZnRLF9@٣:y4TAx*dO0,N]J+H%'Bp@!3uDuTBA?l P)x?Ym:U2CE?lz]]F݅P\s*$^^6lp*&b-Tb}#eࣀ[t1^hQi=j3Ϝ4IT]o نnvI-LGnEw*R̡w ,$l(,0,4l8<@-DmH'L7PGɜ!unnquj9X5mdÏ=]<nlFdav|߀.n'7G.Wnw砇.an騧ꢗ.{nT{/<o 38/=;4?}o?p^{oSϽct?lM㿿64x? 8@  @rs}G70ۜ8HAႜK9"0 , 9 p,t!g9qpQ!qXB0Q!h(,|'P4687lq2ư<cK:$S#(9v\#=q~"ʗ>]C>0Fs^" I{? ꯓkrc d`IIPzҕlbBP$ "J"oK1Kf_PVd28Cj"SM"-KE.ne<G;':u<㙻yv %]S$&)>$FR}(@OD:/~_"ORp3(BU:0-EaA jt$z2D4Fd2;&0YBe2ӗܩM5YLYS6Q#>3 ˙{c#Vc42|4;`UQ-"(Djâd @?~aKu;iH /cF1\ЅZLh% X)V' :q ),1 Au&l=wZiI8ӈ# VK`rLOu/؃BF:uOU܁=ϝatUjgz<[jՆ)^|6Ⱦ 8qr$,xlqX&ȃ_b(9@0 EQ2Q)@FIW6vP>ZUx>B 0}! Qibs<_:0}M &2~|*XrL@  d}!`P!NBk$ 0$D(8H/ Y ٙ3w!C J?Aȡ9R& Bףj,zyXv }q{mB4|Ҧ=hZ1@Ga_2CbӗK/~8%eGUvQ-m(B:(+Bƈ-$Ld?4l ݿC1E!q|hCNJsٳL/?S45ռM7 >h8̆?ujL#7q!v{ 7%  I r%$D06Л K" zNg3W'U!"08g |НweVH#2utrĊZ!?A|a}HHFnB% Q ɬ`w]E2 3:p m \!*@G} ;!ʛ5qhwѯS}- I?,W>~°bo4Dƭ e%*4 AzaWQ z%bAn~ RoDjW 'UF4w4%!W&)H#h/+*ǂ3-9(5Hۆ7Cȃ?(=GHIȄKhAQUS;EȅMH.gaW(eg_OȆY1g(chu"iyHwH{臁hƇ(}HhьA~}~/(lj]Rg(hW jehNjCs؈ǘHӌ8Xxؘڸ؍8Xx蘎g!,q@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!-,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!J,q@MT[M4cl4M@MI[I[bbw@aIIR½1 (hhlDnmrU` Xr)bL(4 l-!-,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,Vq@MT[M4cl4M@MI[I[bbw@aIIR½1 dihJpDrUYnH$CPlJI! !,q@F H*$l#JT5eѐM1alݺiɓЪu&ˎήQöMɘ{0 !,q@F H*,8‡#*Ld$jܨp\pYgB FZhFTZiJ-Ɣ:S[oTS᳛OϿ(h&phT?<G<`60H3;F )R(U"'s t qP bQnCS)ފv;?z :+;(usŧ-76wfB@My0i;Ο>0pq~vY# S3A"uB eO z78p?aC*%܁21ЀcD!?yAhdW>&Iё]\)$HMJ ",Zi"zI&b yg~k&oG&s^Y'wʙ'{jקbhvZTʖhEhc.)R'b铟YZhꎰz*Y+Qᮼj;TľgP&{ݲ5oz$ӖWFfٶu_))Vnꦻh[O://0{0+0McCg/[\ p) ,L41(,1)\0@WYsDC:4K=uL=#efM< \=P,j]e SR:f?`=lU~rWtO[g8CSUu{>-xyLB ީuׅ^B6hUo*"$7h q晎MBavs6I)@A6qEsz (i֋:]r {gD?~7ǾrCHzvM!y]IT" QH-1A$F6Q( 4` IBL"F:򑐌$'IJZ̤&7Nz (GIRL*W<DHfIZ̥.m K%&U٥0IZh4Ff:G7r ]s2!č* q23r23#Ҥ5Y_PH@1 !=Ea~bwǙ}H'[Q+8c!\ AyВR% gGF 7FW ."& *-Uә~ʹ2vP kGwaHFXJda=kYִUgPԧT=هtS(> oFSYFȆ6Zv۰f7nVlgхY` EApBc4R9?B1OmPҚ.=l gx`A G6QeY]&U^C-fP׺8\hAJo{Y k^W-m{=0`%i!aaa[8/a,,qT,Xs 1lNlExRΆ۽=!#0p{LL Џ}t )V~+dH0L>C{mEպna(s1+Zߜ11Dy{cP>'ӣv=qyIWث`[jRh5[: GEiy̢Ÿлd9Y۳fE yG@߉]+ ie]\;60dpT>VHsp=mW 6`9M^=%o/;5b*sҸLasca ˉ7(|8u 腷)WΑT9{#oj;Gؒ>Whp! KW')ӛ.## HhP_cZ޺G&}!0ѮvKx{>L(]wG5QwձZթ~ȴ~bN2W+ l Ծr~ߡҮO~|!@.V62q rr*P{ `<ї}( >`u:<@BP w~$ƂJgx0C|~H-Tv V g*̐ 3el6I8t?20Q `  ͠GWYwW!6bsǁ x2*qMȁ%6G/È (Fh2Ɖ("as9HȊ+-$P@dx$]TMJA # 0 㵁P EOC =Vsx/R5'4NPeb"TTPT3x Sqm!8PW{v{Q`?؀ZȎ!@ \\]\(2vTee_^ו]8Y+xp23HcF,Mi4QY8sO!WU_ىK`[IYiRgYk-ۢc)Li f 0ޠpCsrY+pٕaOKp8SqxfvIi0(_X +9q n uXA8Er+0 w=pR=QS(yʱ[UWy✾#  ]xЗ@l膄yݙ\P_N X0>:ɇ x$M)܉i>x'vj Zvo !J#ʠ%'QuY5 !Jf "Qyrp1H،b@7#R  r1ma O!TK501 *b8! d0ʱWR(=題` ( 3Xӡ G}݁"e0ap!,@%5'6%&'5675@Sp'b'{&'p6Ci6MbB']'L7p]7iU7pk'Sk7b]V%dC5~C5~V5L_S]_@]_[~CSrVJkMvxCbxVp_BVBf]mBtBzLzdtMTM4d{l4M@MRTI[ZaI]]ddkrr~ȃC_%_5f5m5z5fJfJtJ%@Sb'[7vCt5Mvt@CmipIJJJS[i@Қ[іbќiП{Ũv̳{Ŏ̕§àȾɮɷʡ̮Ϯϱ̶̽Ͼ͋͋ΟҵѻΪϽʚàž̰Ţ̢ЦЪӲӻUH/1Pƥ,MHbE3b% 8 vIb$E(SZ Ҡ1Ǥɔ81Z%HDBɦŜH ^B" ̜ŤX#C$FMzkR>n<\4ٲfs^7eB+W0Y8 FRUƍۄQd-ĜYU/`F`>h CK?v@-QhECK=0u.] y .Nܹ>0QaL\U(T k4 fzK[v(48pgħQG!_]>aj.(ᙄ#ZpF<KTr%aMeD ;6{)EZ]L0%ETF$c*TAOAq 8H !"j<'sR8uBxyاf{iY(򙨠W(*)a:)Z(rzJ):6*z¬*:+J+uaiZꩲ2몳"k% "Zk)j뫸&r.hb &۬⛮,l' 7G,cC-LL p@ À#aH#T!q q1  2d!,<!@V]7ik7b]_[rVJ]mBtBzdtMTM%M4fl%l4TIMnMfImzM~ȜfJtJ%S'[7vCMvt@m[nzzіbњiП{̵{̶̱ϾҵΪϽŽɞȨ̢Ӳ׺pH,?rl:KHZЬVhDH ulܚ]nKسv=Sj+3 {d}r W}VHsgGEfZDqOMINKTѾջٷݳ7UbF'0la! 6G 1 bDj/fİQ />b#c$"( IF =\0sFdEOnpl(BcbAERIW!ʵׯ`ÊKٳhӪ]˶۷pʝKݻxe!,`3|6%@J[6[6VpLdk7]7p]C5xC%B_i]Cp]tpxCJr_JdVif&f6m4e4eLVBfLf]f]mLzXjqoMT[M%T4mM@MIMZM}w@fn]LPUM[~dedkvrmgxxxŎCC%V5mz5VSzJ%5S'@7{C__%C{t@z@sM_mt%4pnJib@IIRRanzцSiɭvҤpʠ®œŜɣͪȮ̫ϲŴʲ͖ɵҭұҹɴҵαϹнŕŞʜȠŤƾɶɦŲɴЦծԴ׺-A*\ EaHb< hG 5rHraȃ6\#Yt)̛4-ؼ93#JMQBpظq! 7,è#"(!&AQM.6zBhC#A@@ D#e-ʮׯ`ÊKٳhӪ]˶۷pIʝK.)4$Q@C`e56ȑr`$pHa`%@ATԝclj!,%5''5&&56%&'5675@Sp'J'b'{6[67@&'p&CS6He6VpLB']'dd5k7~7%B'pL7p]7iU7pk'Sr'@k7bBC5YH%]C5]V%UV5rCdM%dC5xH5~V5L_S]_@]_[]tpkC@dMS~CSrVJkMbkMvxCbxVpdfiMV_6m4e4e?e6t?wBVLVBfHhXkHeEwPeXeXjYtdtdvqoq|MTM%M4fl%l4TIMnMfImz??]HP]ZMkrdedddkvrqrrxxPPrvxxzǃCV5Z%_5f5m5z5_@fJtJ%@Sb'@'[7xC_%t5Hxt@ksC_mipipJJJYi{nz@цSҚ[iњfП{ǩu˳{ʤ°´̿ɮˡ̡ϪȬˮϱ˾ż̹͚͋͋dzɵҶɴҵΪαϻŽŕɛīüžɾʣɴФѬԷs *\ȰÆS"Jŋ3jDC_(6'ݡqc|1"ɛ8=G Cf*]ZbϧBqv붥`iJԲe=9pɅYlڕ.]} ºj7o f#x_Ņ>f˰,rsܑ~^˺;S۸m#Xc~'+̶s{YD@?{N:$5v%AK %'*F=<+v 9>х{d?4$(R1O;P&iXIт!:Qh@/xh(nDb| `5j~2XwcFEXxE?Z(vޓ}a%6UKX^,+NYaF%Yylff!tZ4g9#|'~hZyҙ(ܠ=gsYqb]xgyeaبqd!j_Z*bR6of]oEt) s+3,nU+Scwe$}q1јKNcQ;akan2/kbM$+ЋC4[h~6\Wrܩ q&j4od Rr($+ $rIs7cs;?o6{<24CYG# j^*c:W36 ݳ$'2٪fs Bު[wk /2o /d7ӊid/kyGpaN<1V+a"}PS|%2gT1?{>̀]<;85;|ŋ !)P+?B[hsm_/zR@t>V bʇBPx( ]k2H<)hG⑂ ,7,! OJƫ@1o(dΗC_~vdR!qQ,\vEf1P{ c xF,v T+$iK&蠐x pX8b& Hfr Lr 2 @EgɐB䔎~$(C)񄃼1Z '*Xъ %7 NL(eľ-EZRLnzl&Hchg2JMWV3Ҝfl1cBͼJ9s<9 ilcYmQ@ L0 x-k̽l!v+q{ăDnpqXڤնcm.v6ݢ~ i߯r:&BR E aJK`kX~?51W_[E۱a>-k,pVukx G=ъ!;A0N;UB5A , G',ۉf*2͐\ 'pP?cJ<NV1|ΑB ĈZ/8A[öNuYM8`B@\ZոjO^ת57-a#2e3~6QXC{Z)$TqFh4A Q ~.s-`w=wwzޗwz>x>燷ygx7WyO>yW>xwߟw=zm^ڧvèmm:4ǔmnn{ڄo[ ν;@^veVO-#w_<>S1svS?3ɆϿ8Xx ؀8Xx!,@v%5'675@S'b'{6Ci6MbB'L7p]7iU7pk'Sk7b]V%dC5~C5]_@]_[~CSrVJ_]mBtBzLzdtMTM4d{l4M@MRTI[ZaI]dkr~ȃC_5z5fJtJ%S'[7vCMvt@mipIJJJS[i@іbњiП{Ũv̳{Ŏ̕§àȾɷʡ̮Ϯϱ̶̽ϾҵнΪϽɞà̰Ţ̢ЦЪӲӼug)ruumtRu/,at_uEt.+Yu@*?XɅuA[uBǑi Iu0٨jquJulP= KQuD'S%kR[ s=lS]Ę1c=~2HS%MК b6Yp PȌHfؘH11iS1ENF!qud񐫠H2ZD:ҴѭR!c&ZLJhv\ܻ,"Dx¸4v KP P 1Ç#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@sRI?2t!%D2 `2nI]3b}f+8A=$!=(]H67OB$`ȅA# !-,`3|%6b&CS6C[L'B75LJx7JBC5BM@LCvBVv~_{6C4e4eXjktqoMT[M%T4mM@MIMZM}kvw@fnLP]M[ekvmgxkrx_@mJmS%'7@S'[7vCMv_bt@smtz%4nJS@IIRRanzіbҚbњiП{ŤvŨvɨpɭ{ʉ̜Ƞ½œŜɣͪȪʹʾ͆ϤűҳΤɴΪϽŞȠŤƾ̢̾ЪԶ׾,A*\0 `Hb/p hG5rHraȃ6\#Yt)̛4ؼ93#J;[03 9Ͼ@ Ń ,链˟OϿ(h& 6F(Vhfv fH]x{sP4 FaX f`k?X3vvmڋbvpJ§d\tɷYuXz!tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v)|FX@PG4DMhEG|AZ(A`K: XxqG$!,<!@Y]7ik7b]_[rVJ]mBtBzdtMm{m%M@MIMRMZMz[gtgmgm{w~ȜfJtJ%S'[7vCMvt@m4Zta[іbњiП{ľ|̵{̪àŨȾìƾɷ½̶ϾҵΪϽŕɞƠȬ̢Ӳ׺RRÜŗDž˃͖ѥ؎Ӣۋ݉a8P`5 FCPa3&8Qb1-øQc_K)C\M-8x%4Yad>MQBpعs! 7lé'"4&!FAQM.vzBhCCA@@:D#me8~Ȯ߿ LÈ+^̸ǐ#KL"4$Q@C`Lf5&7ȑђ`$pHah%@ATTcljɁ!,?y%5'675@S'b'{6Ci6MbB'L7p]7iU7pk'Sk7b]V%dC5~C5]_@]_[~CSrVJ_]mBtBzLzdtMT[M%T4mM@MIMZM}w@fn]M[dkmgr~ȃC_5z5fJtJ%S'[7vCMvt@m%4ipnJJJS[i@IIRRanz@іbњiП{Ũv̳{Ŏ̠½œŚɡ̧ɮϮϷɶϾҵнΪϽɞȠŤƾŢ̢ЦЪӲӼ=x#*\Ȱ!BDz$PQED.jܨ&!qHdC 9D0Ѓ8`xh3eRL&<ёP@Mҍ'|‰T $[0ť/r6*@h@Tcav@!E}yq@! C"bK;-)@@CP4"& 3Im}VxbhEUr橝[Lխo^R;G$\@vtHDVpc!jaPH~-t _X`Bi1"r0ȃm*t 2\t:`Ce!"vd@Cit9xcEBY$GdKzy?%S*Y%W:%.yۖ=&҉Y&Ι&ʩ&6٢9^gRIVZ%}"2:Bz(Rbr:iyyv9czk{JGڪZZ&6F+Vkfv+k!,@i%6@'['v&CSUr7B7vLV[]V@UV[]_[Um{xfJMVBmLtMm{m%M@MIMRMZMz[gt]LLgmgm{wC_5z5f@zJzvtJtSzi4Ztavľ|ȪàŨȾìƾɷ̥ϩ̪¥϶Ƚ̱ɽŕřƠȬɺɺԪѳhhÜŗDž˃͖ѥ؎Ӣۋ݉a8P`5 FCPa3&8Qb1-øQc/=9Rd-'MBRe+/]BWf>pYgP]"jR "b”Izs P_A(ZVu0-,@PIˁc L%X1AH4\z"aNMTu͗`b.3`)]gCaM۸sͻ Nȓ+_1Z,(?QB1<;qŷ~;rɿ+ 6s=rEG'=tuUgg=ËOӫ_Ͼ˟OϿ?@!,V@MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾl@pH,Ȥrl:ШtJZجvzxL.z'LM4&Qd|K *J  I(!H "  G$G )EA!,@Si)''5&2(0,/@Sk'J'[7J7S'b'y7{6[6d&'J67F&'s&7i&ES6C[&M{6He6VpHK)L'%B75d~d5k7w7/LJWCL'JB'pL7p]7iY7pt0Ig7bBC5WE%]C5]V%UV5kMrCdM%dC5zF5~V5BM@L_SW\@\]ZLCiLCvL_bBVvUVvTmsfFCdMSrCJ~CSrVJkMbkMvxCb}^z~fSnprMZV_6E&f6m4e6v?wGQBfEhBtWj]tIgExSfWvftdwqoq|MM/fl*TIMskvfImz?]JP]YMkkrdedhvusxPPkuzǃCV5Z%_5f5m5z5M@_@f[z[hFmSjCfStJ%/@Sb'U7wC_%t5Nst@osC_mwiufpJ[JUJWisiyw@цSҚ[iљeП{ŦiǨuʱyɚŤ¾÷̨ʮ϶ʸ͉͋͜ϤɳɸѸнΤɴҵΪκǙêƽоˤʻШԹ H4ð#J$ċ Vd#ƍfIɓ(S9R0cgǛAyC@ ̣HO2Tҧ(IЪ8}byuǥPê\ΩXRms&t0l+݋Zy4a.(#سG58iZ$V`I 珗P,qna>wo@`@|i]TG,)W4}"!b#|6{7-^*uA/A"0vts^y-XEY t^z"/3_'^ݗ?-Xۀ%@]~hsL3h#6L59Xc5x( 4?wa{ %\E&?4sK١+bF 7xf7p)'o͜TmR%oGCDl ݙ4ퟮV+ҒOU=+,Pj.G2nܦ{Eދ~'m^jTo +nj9o*lnÅm /xE5?\E2d,P/ǂy0Y2I:,C $44G3k㌦MqRGj5Tsc?-Pan=|SϧX!ǝ~&Ng6 +s4Qw&`. B@|1uCgr긾?:S-W_i}4\&z?vWB@!qOomb|C_]F|!P$}!Ne5;2EvZ@'bt8@rNs{2׸Yxh+NwA @u…!Ihmn咛އ/r}}ۡӎC!щM"$稇)J T"pz8>1pgDc XE fK4 tLE9# ɡ qbA~o*9/t DNBL>V/x#y#z豊 D72%[5)u x[Ylchq:Qc+ĝT ?H@}``dS5B;Z*<2 cXAe´o^> (}괌,qcmZl|G6t4`@MyYBY21 d:}?A*(vVPR6#1BDyID(R,1I|N?ѹw-\: HQ4X!Ȱ3~ʱ^*L)dؒ>Z0d&]rScr::sZcS8(qӜ4'>iOxm7L(+4 kl/QDPֱZdjSZQ|!3|ܕI+0hA0&OzGAr4/؂:b(Y\h颏 D |9!`.v 'T/ _q$-סU䡮⒨l%||X/uc>r#q<'W) %E+[)2O2`2}66[3Lg:[x>Cy~t,BxN4 F9ʎ#~$$_h7-iF:DЈF <51:Er8Mk=kCc ?jo4|,# s =A+!,gw;r>eUt>mYd!P,a>n7qά RRN.LCH?@[ g>TDo3<AKxx Îl!WH gr|(1W.;>YI9>WW'y^8ӹ/f?өwmvԱv]YK[ x*"ɲ k%@&,юL6fctСܠ/h?Dsceߖ@S[ ~#z5H@3E7|+%ܾ"0K.zύV 񱢏+Qg;D°=鏬nz,\u8cvXNQy$|w?5 ]ϗ) 1&ew[!'~s]~ ! 2 ב\\ڗqP$?,\ΕV@B+"+.v{zN__8urf.-6FXi7iRwWva'6wDžww9H;tdžs(k&fmxtzƇ)GX&ꆈF!GJ<ƈhlq jkwg(wA?&.J&*E)&HV% SMAJCV2V5&-U 8#=͔RBQR3&,ă7"1 :RQ/N('IV79r HPD *{OH `,+0>8 AdfΟzJtYEuҧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝ7!,@f'@S'{6Ci6MbB'U7L'%k75]_S]_[LCiL_bxz{6mUf]tdzMTM4d{l4M@MRTI[ZaIkrxŃCz5f[m@ipIJS̭{ȕ¡àȾɷʮ̮ϱ̽ɹнʞàž̰ӼH$ NPPICMJKBCO" ,8)<ÅH-5D 6P*>+ P#ӧ2=%!PH3'.4A H&0䥂d@Yipi Q=1`-^F },Ha% Jj-S̀1oBi&k>y9ThКE͹eR36MԒU^ ֎]~؊eɞچmپM\uޕ^q}j &a?dF5Yig/~:ZkiŦɺװc˞M۸sͻ Nܐ{Аょ 5`ȑ;`R :b B !,@f%6@'['v&CSUr7B7vLV[]V@UV[]_[Um{xfJMVBmLtMTM%M4fl%l4TIMnMfImz]LLMC_5z5f@zJzvtJtSzivnzzȥ̥ϩ̥ϳ̱ɽŽřȨɺɺԪѳTT.0MKOO1?O/#D3BėϽіՈ׳ۧ݇ AJTB >D]ԘF}H%םTJ-ǽL5ԙN=ZQcC;p)ӤHbsʐ*Db(Z(h@L "&Q^%5DXp@KE2e4#ĽAr[Rr pq%I)XEl#5y ;AEI  5%LCNTnMKNسkνËOӫ_Ͼ!,3y6%@6[6VpLdk7]C5]tp6mLVLfLzMT[M%T4mM@MIMZM}w@fnLM[ddkrmgxxŎV5'@7{_%C{t@_%4pnJi@IIRRanzцSiɭv®œŜɣͷɲ͖ɵұҵαϹŕɚȠŤƾɦɴЦԮ׺f]CITf2? dX&U^Mf`$)&(>> fR&P1X _V=W f<,XO%#+&*Q  `'e\/^r̔"c*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIS^%(֬Z30aA3L3Rز2S㞕-)w̜Kgf)|ɣg!?|4Hx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠC{FSh2#7d@:* CcAnp;$8|+qhl!2q !K,3%5&7p&'@_vBLUB'k'x7r'%U'@BVi6CUtMUk~r~~Ȝf5tJz@zSzizpipiŚJȎŎ̥̓Ŷ̡ϥ϶ŵŕŬž̾Ҭմ׺A900?@8=7#)Ƭ(2"A: 13; :/ 5$,+< -vH>[f!ȍ&T8` @"H+!,3%5&6%@7p6[&'@_v6VpBLUB'dk'k7x7r'%U'@]C5BVi]tp6C6mLVLfUtLzMTM%M4fl%l4TIMnMfImzLUMddkk~rrzx~ȎV5f5tJz@zSzizp'@7{_%C{t@_pJipiinzzŚJцSiɭvȎŎ̮̓Ŷ̡ϡϥϱ̳͖ŵɵұҵαϹŽŕɚȨŬžɦɴ̾Цӭմ׺ H*\ȰÇ#)SС<%GZX8D~`#i@!l؃ uM8 } a @T<$!+X(k$4a` +9r˷߿ LÈ 2`!!v|I܇DQT ! 6b ~`s u6$zb;ACB !p~ 禂"- -{ū_Ͼ˟OϿ(h& 6F(Vc-dmd]Xi%gvk%jn>Am Flp=]")se@Uw]{]xgz\v`)dihlp)tix|矀*蠄ʥ Ke#D$j B01,Q(ZP꫰*무j뭸뮼!,@f%6@'['v&CSUr7B7vLV[]V@UV[]_[Um{xfJMVBmLtMTM4d{l4M@MRTI[ZaI]LLC_5z5f@zJzvtJtSziIv˜ȧàȾɷ̥ϩ̥ϳʽ̱ɽřàɺ̰ɺԪѳTTÜŗDž˃͖ѥ؎Ӣۋ݉a8P`5 FCPa3&8Qb1-øQc/=9Rd-'MBRe+/]BWf>pYgPIbj"PNDIzsx RPKA(NVu0u #&@PIiɁc L$(1*H` "aNMBuЃʒa.)L)]gCaM۸sͻ Nȓ+_I =hqC~@%(L(p|0t$:hXʔ /)i`AnLÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺ‰&2B4'} X $G;I@`@#vP.KD`R(L=P$1 @K$<Iˏb\BE%l P`Uk~T‚ 6F(Vhfv ($h(,0(4BrB%G 8PQc u QB aԨ&䐇4  E+d1dG<0 58c ZF !,6%6'%@S'b6C[B~75L'Jx7JU_@dM@LCLmLd%S'[7vCMvt@m{іbњiП{ɨpɱ{ŚͥϴɹҵӽнΪϽž̢׾a@pH,Ȥrl:ШtJG3^2 L`Ch@oԊdmx|e(dk%z2+#2& Bo02, "2C)C' B+F*`HA!,Si'J'v7{&7i]7pd7bkMUV[]_[UVv~fSBfLzkxxŃM@mJb[ivɱv̱{ȘŜϺ̲Ϻ̵йо̮ײ׺a@pH,Ȥrl:ШtJ&1łq6eZMJB P[0tГX $D"2~~r2.(2t*C!aBC, kBA!,7S6i67J&MSLB75~UJUC%rCJV6C6mBzBzUV5f@fS%S'[7vCMvt@m{іbњiП{ŤiɨpȜϥϮϺҵнΪϽəɾ̤Զ`pH,Ȥrl:ШtJ}r Q8ZgL,3C(!0x\Z^[> B(|5! B#Bq3B+B4 2C.E-0JA!,2&Si'J'['v7{67J&7iL'%LJU@]@kM~C5UV@dCJ~fS4e6t6z?s?wBV]mHePeXeUzPkkv{rxPPrb[Jp{ɱv̱{ʎţ̥Ϻ̵̲̹ɴʛɾɦ̬Ъ׶׾!":C&L%LŕǺʴϾь 0֕8ݶPB ;7/?I za 8׏Hr)N P` c<%F@H (`@LxFE6l$=,1!,?y'6%6'%@S'b'{6C[6Ci6MbBB'U7L'%k75~75L'Jx7JU_@]_S]_[LCiL_bdM@xz{6mLCUf]tLmdzM[M%am{MtMTa{tLM[dkrgmrxŃCz5f[m@%S'[7vCMvt@m4@{ipI@@aJSRIhaіbњiП{ɨp̭{ɱ{ŽȡêȻȬݚ˥Ϯ̪®ϱ´ɹɹҵнӽнΪϽʞŽ̢̳ӼAD *\Et0 hŋSD CtEM 2b!7BFdz:4̋eC(Χl8DТD؅$8BA?dբ%k )vrP1>ED%#$"+**ȡGpE`BExL0 +`OϟI:#l߆1͕?oF h? {z= d/"\VB '6O)b8_:T/,R[}C7̰ `aAs8pA *(yѭBtEBPF"9@2٣F.dsS&WeqWeo[ve_.fc>aRIVZɥ^eљ`)djfh♣k"ڦo2sBZ'wy(}br:hZ {zڨLZ)ʚک*Z*"۪6F+Vkfv+k覫!,V@)%6b&CS6C[L'B75LJx7JBC5BM@LCvBVv~_{6CktMT[M%T4mM@MIMZM}kvw@fnL]M[mgxkrx_@mJmS%'7@_btz%4nJS@IIRRanzҚbŤvŨvɨpɭ{̜Ƞ½œŜɤ̩Ϸɾ͆ϤűұΤϽŞȠŤƾ̾ЪԶ׾h_GfVKZ)-U,)Xh( e`QZShh?)0g B&Jű)/A%5#֕a+*YͽhA"C瓳h[b΂@$hW)TZ9sJ{qA BCC^SqЗ14nH2Hc%SDb-]I͛8sɳϟ@ JѣH*]ʴӧPbB*@!

 h!,@%'&66%&'5675@JS'J7J'x&'J&'v6'p&M{6Ci6Mb6MiUL%B'U7L'%L7%B75d5r7k75B'[]'[L7vU7p~7@d7iUC%]M%BMSB_SL_[U_[]VS]_S]_[LCiL_bBVv]f[HfwUm{dMSdV[xMb~VvxfJxz{M\V&M&M&V6M&f6m4e6z?s?wBMBfBmBmLtBtUf]tHeGzPeXedzdzMTM%M4fl%l4TIMnMfImz?BLLLP]Mukdekv{{txPPUdkxx~ȃC_V5m5f%m%m5z5_@VS_@f@f[z[m[tSfvzbiBm[zJtbJS7vVV%tJz@f{ippJJ[SSWbivpnpzҚpŨiũuɱ{ʊʙä©̦ͥ̚Ϯ϶ų˺Ͼ͆͋ǵǶелнɽɴ؎ÙɞêľŮ̦̲ʻѭԲԼ H°a#J$!f\ȱǏ =yqɓ +>DrJ IfM:\l3˞@sͣHe?R`d8W-~AMuhѤ`i.m:Z2\%n az3FLȭ"niJTG i8 BU(|ˢ<|6o&2._~=ZrYfAK$ lcp<y'MMT~1͙7OXZzXNh@O7n)0O<*wGJߺ!d_=~GG y-(!(o2XQGo`j-d1O8EbE)% XsHH%8.8$E(r ׄ$bdHӤQ' ?X6D }WN>%Q 5ݰ;Z$p\?{@aptm , F^!UK#:{YtUkKF:ͮvz xKMzaPaA ^PPuG>^_] ȇ*P`šA( 8.d _0!,V@v&'JU7L'%d5k75]M%]_S]_[LCiL_bdMSxz{V6mUf]tdzMT[M4cl4M@MI[IB][rkrbbwxŃf[m@@a[IIR̭{ɱ{ȡ˜Ϯ̽űɹʞžպPP"(+#L@KL,3LK)$7=-×μЖԈֲڦ܇\o % &D8PaCFObE,fhOcG<NdILDiNeK\ƄMfMliMgO|h1E̚hd.l[7mbTZm҆.tveJ&cvШ!,2P%&5Si'J'v7{&7@67@&7i_vLUB'B7%~7%B7@U'@B'pr'@UV5kMrM5Uf{~fS~f[M6tUfUmUt]tdtdzUkkrx~xx~ȓV%tJz[bJpŨvɨpɭ{ɱv̱{ȃȋœ̥Ř̡Ϻ̲ʵ̵ŵʜŬ̮ЦҬѲ׾]BHW &A7MP.*,%\G6[4)UZ]3ON2R ]<$JÃR"!5шކ4XL]0#]E:/ ;>P"TD@ dhUG\dAG; Cj)3be$ɹϠCMӨS^ͺװc˞M۸s!,`3P6%&'56'pU7L'%k75]'[]VS]_S]_[LCiL_b]f[Bf{dV[xz{6mUf]tdzxkrrxxŃf[m@m[%'7@JS7vVV%_btJz@ftz{iҚbҚpŨṱ{ȡϮ̺Ͼ͆͆͋ϤʻұΤΨϽŞʞþ̦Юճջ[[E 1VTY[S&A(*1P"1 -@[Q#O4>7X[)C<[Z%ˎ6R?R$ԏ. 0HߏZN H*\ȰÇ#JHŋ3jȱǏ C,4ECS!la *^b}:y`ƃ|!I9Ёo ,d\gA8z* BE,A?'8G!,<@v]7ik7b]_[rVJ]mBtBzdtMTM4d{l4M@MRTI[ZaI~ȜfJtJ%S'[7vCMvt@mI[іbњiП{̵{̕§àȾɷ̶̽ϾҵΪϽɞà̢̰Ӳ׺pH,?rl:Ot*ZPֈvw ohNm{G]}^X\WECVeNbKI•ƑʍΉ҅ց}yuqmrFX`6SXa: Ɠ8OS,veH^78iBT=-!,pa!Cxa=*>6XعS (léBp!tF5!QM-"vbACt0H/:rC(\FsȪ߿ LÈ+^̸ǐ#KLy *KpbرÅ̒#Q+N`@YAPG!,@v%5'675@S'b'{6Ci6MbB'L7p]7iU7pk'Sk7b]V%dC5~C5]_@]_[~CSrVJ_]mBtBzLzdtMTM%M4fl%l4TIMnMfImz]Mdkr~ȃC_5z5fJtJ%S'[7vCMvt@mipJJJS[inzz@іbњiП{Ũv̳{Ŏ̚ʡ̮Ϯϱ̶ϾҵнΪϽŽɞȨŢ̢ЦЪӲӼ&Ftf*qttl!#'H!$sVt1.`&mlnnOs^tIs0- )\nG#ΤYtA,@Xƙ+eSctB[tCܔ%"(h MFpۼIzH'謡#*)$GH H)n,GgV9O3mYS(| K(E.BJ"5*Hԩ3޴!;!'Df\[a̞=DIM/l•;W%'|ћf_Ch퍲|NZ%6< nOc**Î-ykط[Vt睊m=\wq}'.[xsύGG>]yu浡gzw߱ϝM7RDUϓ=᧗~{?}_x؟!BhR9܁蝈(YWx ¸ f8<@)DiH&L6PF)!i,@f H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɒdiZ>̚hd.l[7mbTZm҆.tveJ&cvШ!,@e H*,8‡#*Ld$jܨp\]yu浡gzw߱ϝM7RDUϓ=᧗~{?}_x؟!BhR9܁蝈(YWx ¸ f8<@)DiH&L6PF)!,@f H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɒdiZ>̚hd.l[7mbTZm҆.tveJ&cvШ!,2|%&5Si'J'v7{&7@67@&7i_vLUB'B7%~7%B7@U'@B'pr'@UV5kMrM5Uf{~fS~f[M4e6t?s?wUfUmUtHePeXe]tdtdzMm{m%M@MIMRMZMz[gtPUkkv{rx~gmgmx{wPPx~ȓV%tJz[4bZtaJpŨvɨpɭ{ľ|ɱv̱{ʃȋœ̥ŪàŨȾìƾɷ̡Ϫ»̲ʵ̵ŵɴŕʜƠŬȬ̮ЦҬѲ׾9pC*\Cp1HbH%Fȱ@"Hh$C" n4!ʑ-c~ Sf˗*I4Sʝ%{r PE+ՙT)͜M>4*Ë b5#ڬDٳhӪ]˶۷pʍF.$a?s ĈY$7(ACV &{%HE$Uҁ,L~[2YC N4c6n[!Odyjk13o~G{0YGTR0N)x@ p 6hVqRzϿ(h& 6F(Vhfv ($h( "\aV]呕^1A`b1cGUem}$_%\%vYSޖ}x\F%qgfHn\YIG]~S8'y^h)$袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰N*k-I"+̚)ĐƬ.ء~+ uP TB3F!ޱ P<CEx4i@!,?)M[M%am{MtMTa{tM[gmr4@I@@aRIhaªȻȬŻª±ƻ̳@#ȤrDШt:U :H)nO?CIXۿpYgB FZhFTZiJ-Ɣ:S[ NȨoCÏ-0ǁ > B pE4Ay0Q=`E`1!,@i%66%&'5@'v6'pUr7]'[]VS]_[]f[Bf{Um{dV[xfJMVLtMm{m%M@MIMRMZMz[gtLxkrxgmgm{wxŃCz5f@m[4{ZtaiŨtľ|àŨȾìƾɷϥϩ̪¶Ⱥ̶Ͼ̽ɽŕřƠȬɺӲ=aZeS #ee]b*U(:e9"`_c- M1A+WKE)P͏93!R^ śD&V8e\;O@bd,ܖDICV͜/J^`f` F`pA2>4yQL.(qBRX0pW aJwt#2JDft Th9CJOCܜZLNšU#AIX.BI"i>[F.*v[nݼ~^l;b!?vd1_6fAhQjavlq6nőwr~͡?:a%g]swE7=^uyӫ_Ͼ˟OϿ(h!,i%''56&56%&'5675FS7J'x6b&'J67@&'v6'p_v&CS6C[&M{6KgLUL%E'L7%B75r7~7%LJB'[U'@]'[B'pL7vU7pr'@{7Ed7iBC5YI%UV5rM5BM@BMSG_W[]YLCvBVv]f[HfwUm{kC@dV[kMbxMb~]zxfJM_V&M&V6I&f4e6t6z?s?wBMBkBmLtBtUfUmUtHeGzPeXeUt]tdtdzktdtdzMTM4d{l4M@MRTI[ZkvaI?ILP]Uxfhv{{r~vxPPirxx{ƃC_V%V5m5f%m%m5z5_@VS_@f@tJz[mJmWtSfvzbhCm[zJtb%JS'[7vCVV%MvtJx@gi{ippIJ[JSSbitppіbњiћsŨiŤvĨuɩqɭ{ʃȉ̕“̘ȜȤ§àľɷ̡ϩ̩ϩ϶Ȼ͆͋ȵƴйɽɴΩϽÙɜ«źȦ˹УѭӲվ H°#J\ċ)V2d8CIIFƇ-cB|)@[wOxMh@F"MZgǝ?JxGJ!Ń9rƔ zư#xke.ҩNSzu=Ɵha]7އp7ҧZ4;.FPɗ?{VA9x@:( ̅F`"i8YZiߦ|wC20^U[b+>$g<7Rvi=4e!pb@<}~MwYZ t!-e2} a~r (P>&|*l#1Ʉ@2dx?`@\Ҏi(vؐ)!9ph &ES#)Ђ A=DVRy?0*ТSZjB6 ] uNE*CUPCeg ,L^@Zڥj[+zjGJv-²I>[-kHrc/k1jkҽ@Vc4O["1r\pƬy+@|S)%K,&(Sr'P%s; =p7$=qMO{q(G(sH00{r>4MA¡nTC1~MwHbD>9Wᔓl\x袣:C +:kz9ݵ^K;<+r=.[31?O? 8<vJ?xbI9X('oG!zC}rT q|,8%0@a~!` }Rs `&*H, B7 pLPghz`w/ bjn8#*"0bdX" 0ьY̢57Y$G (N,g"~h BDlLd6 E:Rt$6Cʎw 4!GfR:D/w &s H-#J=F'1U,@Lb)Km\/Q"{M72l4oxla:˙srg7iNwhĉ>~ ( MBzOv.? X z)юz$ơw@8tі4 "2r8>cIlrf5YuJԢӠ 6-FjQc%$k'ZUƔXֶhh3koPJׄ4u+CzTkKX֛MlAǶX*$C! ғ_1WhmY@kJ|,gJN/La GtJa#6;:8҇sm^T w6 Y(ݺzjv>R"H,X5@ԝawD4c yS;Ծe?6 B_$r-'CY_s5.p@8&6pebLdd0]ET5+Mwǎ @&著 Q|20,X)SʾA ,*ZԣqŲ 7C4Db<6|0<-Ecn Hц@S|cXF f\IxD'M 2f E,4W`:vcЫfo9\Oɾγc`>lV'e6axҞNmx \P+0Tǵ=mr Ї=TU^%VUr*v`ײϢU[X_n{TO.{P?|L/T1Lk!r\s1|s^{At`ӃQV}ub׋a78ldhsͻ Nȓ+_μУ.z2p% |\{ZE`1A8Q؞axqށؑXҡ̱8؛uVyDRfRFwA:pp#z DM8F xEdRJ1EPk`% c`Fv%Ax5•WM!gF#;A B"Tr@E)gXx 7X\Lzz!a8bGKJbMDHЀEQ@ 4"!D,beeeYg8tZs!xߞK+k,l' 7G,WlgwE  g %˂$| f6_B .Ԭo@!i,q4eMTM4d{l4M@MRTI[ZaII«çàȾɷ̽à̰i`!Ap\ۆim#"d!0Ȥrl:ШtJuجvzXϓzr|N~U'!!x,q4eMTM4d{l4M@MRTI[ZaII«çàȾɷ̽à̰g` dihlp,-`x|?`!)'ry8ШtJZجvzxL.zf|~pF.w  "" w!!,@F H*,8‡#*Ld$jܨp\dAG; Cj)3be$ɹϠCMӨS^ͺװc˞M۸s!,`3|6%&'56'pU7L'%k75]'[]VS]_S]_[LCiL_b]f[Bf{dV[xz{6m4e4eUf]tXjdzqoMT[M%T4mM@MIMZM}w@fnPM[xekkvrrxmgxŃf[m@m[%'7@JS7vVV%_btJz@sftz%4{ni@IIRRanzҚbҚpŨṱ{ʎȠœŞ̂ɪȮʴʺϾ͆͆͋ϤʻұΤɴΨϽŞʞȠŤľ̦Юճջ#DQA*\ aHbE3z h5rHraȃ6\#Yt)̛4#ؼ93#JpYg[K*C\MM-8x%4YaMJQBpغu! 7Ī+"v&!fAQUM.zBhCc7@@ݤD#]Lm|6̮ϠCMӨS^ͺװc˞M6$4$Q@C`f5f7ȑ`$pHap%@ATԞcljف!,?y%5'675@S'b'{6Ci6MbB'L7p]7iU7pk'Sk7b]V%dC5~C5]_@]_[~CSrVJ_]mBtBzLzdtMT[M%T4mM@MIMZM}w@fn]M[dkmgr~ȃC_5z5fJtJ%S'[7vCMvt@m%4ipnJJJS[i@IIRRanz@іbњiП{Ũv̳{Ŏ̠½œŚɡ̧ɮϮϷɶϾҵнΪϽɞȠŤƾŢ̢ЦЪӲӼ=x#*\Ȱ!BDz$PQED.jܨ&!qHdC 9D0Ѓ8`xh3eRL&<ёP@Mҍ'|‰T $[0ť/r6*@h@Tcav@!E}yq@! C"bK;-)@@CP4"& 3Im}VxbhEUr橝[Lխo^R;G$\@vtHDVpc!jaPH~-t _X`Bi1"r0ȃm*t 2\t:`Ce!"vd@Cit9xcEBY$GdKzy?%S*Y%W:%.yۖ=&҉Y&Ι&ʩ&6٢9^gRIVZ%}"2:Bz(Rbr:iyyv9czk{JGڪZZ&6F+Vkfv+k!,@ Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬR@AB Ȥrl:P%p`جIIvL<Zn )qqɆB1YP ' M! A!,? M[M%am{MtMTa{tM[gmr4@I@@aRIhaªȻȬŻª±ƻ̳R@#Ȥrl:Hũ`ج$vLv~"Qn9$쮏;'%  M(J "&A!,z\%5''5&&56%&'5675@Sp'J'['b'{6[&7@67@&'p6'p&CS6He6VpLB']'B7%dd5k7~7%B7@]'[B'pG7sU7pk'Sr'@BC5YH%]C5]V%UV5rCdM%dC5vI5~V5LZW]Z@UV[]VS]_[]f[Bf{Uf{]tpkC@dMSdV[~CSkMbkMvxCbxVp~f[dfiMV_6m4e4e?e6t?wBVLVBfEjUjHeHxSeZtdtdvqoq|MTM4d{l4M@MRTI[ZaI?]]HP]YkudeghvrtxPPwwǃCZ5Y%_5f5m5z5_@z[fJzJzvm[tJtSzi%'7@Sb'@'[7yC_%t5Fy_bt@osC_mtziuipIJJJXiix@цSҚ[iћeП{Ʃuʱ{ʃȊĉȖŤçàȾɮú̩ɫ϶ɺ͉͚͋ϤɳʹҵΤɴҵΪηț§ƻţɴШԷ H°!C#J$ċ VdǏ CI-T)ɲH5s`MThRx5bLJJ֕e<tN8 ExQw3E"1~&Ç38 Adg,x#CYeG=TVieg$~DVщnzfQ)ex)Y gYgw9z'~ )^~h^gD5̏uiuL&!.NqoJ\!E+H}Z&R0h!МGz)2,i6[2z-c߂ˬEh)gm{dmǾ /Z'ֆ @:'}Wq{w|QeZKԃ!rMJ[)kx|ܝ4 ? h_pH;/L砂\nV]#i]j)$3JILz:o; w?̚)*XncNyLs$xZI {Z4玣E}=-VN?tӍ< O!}k{묷B !, Oƾ;?!P=3v|K^!%=r~Iz=wGn@z8Vd,>;}!s(kHB:D)A B4^&ØY !hт D5bhAU-@ ڻ^C-uGv~3갇l4ωC%G8zr$cG7B&L"5~IJ&r$d-Nb-(3@  PFRp LeAQEtXE99Ӏ+b́Bsz@V H3M"z :+IXb(H7т ҴcOGO ')U\D/I4*<##EBZ@T(G0xt409 `#GO7$VJԐ*䧡y*'40,%*TCӚVѩV IbA6RvԨ +h FUBJZX'VΩhb2s'hU_C |0_UUF2x`fv{i_bIO!BPJEPbR:P-qpkc+c pÀډ;dZ>3 xSݮ6ד$~#Jr}d%ݫBNyegxxM旒#Nphn.##t50a7,a{h(iya3"&q iQE|d cU-¡ p* 0 \DILb!Ba(gtYd&3c "7qFLjNo 789mB&u<2ɣn5>O8 [.la+{~SHS^dmNo 0nm @gr aІwK`^dC8pȃ # dW ueLk#xp|S05U:ۭ a`JnT`C0,3fy-,ci@#ǖΗz`@H=Q e֍}< .o{=!,@F H*,8‡#*Ld$jܨp\dAG C&E5{Q]Oɻ Nȓ+_μУKNسk!w,`3P%&6@S'J'b'v&7S&M{6fvUU7%xd5r7U'ir'@]M%kV5LC{]VpUm{dMSxfJxzpMVV6_LtBtUz~vBLU]rk{]xÃCV5z5_Sf@mJtbzbzi5J[pbisɭv̭{ɱ{Э{Řͣϩ̩϶ȲϺűɽ™̢ɺԮҲ׼^SNV[- J.$< 8SYL3X9%^4],\]  !\X ɍZ^2ITD0EM؏1QK H*\ȰÇ#JHŋ3jȱǏ CId$)uy_ ] $?(ndCEK \~ڭ^jAA}G`b.; 2 pɻx!,`3|%&6@S'J'b'v&7S&M{6fvUU7%xd5r7U'ir'@]M%kV5LC{]VpUm{dMSxfJxzpMVV6_LtBtUzMT[M%T4mM@MIMZM}~vw@fnBLU]M[rkmg{]xÃCV5z5_Sf@mJtbzbzi%54nJ[pbis@IIRRanzɭv̭{ɱ{Э{нœř̤Ω̩϶ȲϺűɽ™ȠŤƾ̢ɺԮҲ׼EH*\ȰÇ#JHŋ3jȱǏ CIɓ$\ɲ˗0cʜI͛8scA>t m#>` ]Ē* u)N@ Z$!"G kBckr@C0ܸ5F1@>f›Ƙ3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μyN;W4Y6X&i:XDGk tQ (0hhf%H!N7`@ b܇ Ƅ҈$h(,0(4( q r'%qĉ3A8HA)|'`SŒ7Q! Hpb mTaBE{qE!,vqMT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾj@@´ `a9xTsiTTŀ!p ()~{,A!,<q@ Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬR@AB Ȥrl:P%p`جIIvL<Zn )qqɆB1YP ' M! A!,q? MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾS@@´Ȥrl:P4"ѬvdK.?GE1 MҨdY "  N$K )A!,%5'5&3'6'%675BS'J'S7J'b7p6[&'E&7S67@&'v_v&CS6IU&M{6Mi6Vp6fvIUB'B75U7%dxd5k'k7x7d7%r'%~7%~75L'JU'@B'pr'@x7JBC5ZI%YC5UV5rCdM%kV5rM5ZY@BVi]VpLfv]tpgH@dMSkMbdfixzpMX_6E6_6V&f6m4e6w?wLCLVBmHhBtUjUtUwHeLzReYtdtdvMTM%M4f{l%l4{4MITIMnMfIanmzrn?GUU]YMkrddgzs{wxPPz{Ƙ_V1f%f5m%m5z5_@_@tJz[mJtSmpf@zFzSxezp%@Sb'@'[7xC_%t5Hxt@Umisip@RIR[J[iprf{nzŚJцSҚ[iљfП{ɤ[ŨiǪuɽzŔȤåŶ̘ͫŧϴǴ͙͋͋ƲǵѷнҵΪηŽřīǽʣɶѪո Ü@\ȰÇ H基(ȱ'8@'˛CJH#;tMkR&8)F)!Wxא&U+/l˱M`tjU. :S}T=F~Юe;#\_vaTlQ} 3Dqk8n&ӧCх~._Va @>hjQ(t%uD?ΐhמ6. lg'JKgn?D'=;dZy -B@ 1 a^tcc7,?B P΁`ͅ$?ޕ\H哢0ބZ+RD8͈A:c"(PBI$Gc42NR&T%[f `_Z%bǝy^hVɢleM)go 权홦|2~zU!jXΙ*ʙ蒍V}fiXnVꖩF4|k^ꤰ *묝 e:koRúZlб2&N릍抭f;d1njZKhԒ뫻rd>oll,0b¯>̪RLb/ű w@$7$3#<q'A|QF k00F"M6W EQHOܛ>@Կ$? rXeշ8bmul0u^urtsU?%&.;\F226iWhShTZ I]6l`A)*qU[pn2=rvqAPQbxw${zkO3άp3ILu*xNօ Ob,-FpCQRP#u3z5^^vwJgiz GH(L W0 gH8̡w@ H"HL&:PH*ZX̢.z` Ǹ2ЂhB`Zt! icP"`1\HC9Q 01qG2豅? ^ iF:򑐌$'IJZ̤&7Nz (GIRL*WV ƒZ̥.wK\:q:0I[R,2i&?%Qa6hlMv6_:Kd>}H%( $GHs# lSoq(ԹbXE7э^t(F5Q$-;ȅ<xLcә"2=MsSHH } Έ&:ZF7ʍZUUUnPS*?Pa7qj؀ZZ pmm[WH"ATԒBgE!XȂp `/L&,;bI08F[!y,k[;^v,g-9{8ӷ-ke+m \fÎ5nSjHֺ\y. =ԃ*@WDŽ}L!7{)\!;D ~i kLrybsH 2*UDo|OjX ֳ`p?ndMik;j_'9abY#ׂn{ti&;6w>gړ6 ]x~qw}~;!.we{Yg]6{}uaS\uOP+~n-qt/ǿl󚯼Am畳ܪ{˭s5O:䉾h[ɇ.j{қO?GW>跿ww_f=}W?ϫv7v/.b`A~<x7x.w4sg2MPj}%u1 ?@  z (|GAhW6 Pv#'~ze jQ NYuA`y1( 0S:SpSN؄NSQx y6+(0O8J ~VtWwVvEWfWu nWn  p  QFu0O gXD8/}IԈ)DBxDph(%a qaf?` 6 w>,D"*b% 'V4:>@ W( Q5cCc6cSNXp _KD"HdDƅFQQ0((-0ex鈎qNS(prffXqsCH" hhӨ- pYgP@ :b"Bٙ:R`Ǡ!$Q&<,&!h tTIIHXF<99դXk `Z%4"<5lnԩX2fǞhNP9}TU^uV]m~Xe͞ڈm;eܝuuW޾ /aKM|X⏌ ;~=TU^%VUr*v`ײϢU[X_n{TO.{P?|L/T1Lk!r\s1|s^{At`ӃQV}ub׋a78ldhsͻ Nȓ+_μУ.z2p% |\/ 52X`e"ko?aߞMGs`#wLGůVuhN>QQa%np3>%@ 9KTEڷ_y83f8C0LÎ1VFS T*6,PK, !a81dύ8Ϗ9HRd$o=.\IMNi%Qzxm饁Yj_^Ygfk٦~esifwZuu'(:Y{Z&v>VT6.٩*jZ~jYPA+ %llG6Kݳ1+xԂheQ܂歝"na z%璕R.e&Y/ڛ*'Z00 opY;<1M[|qeK1G,$ϔ)c-frƜR4#lsD+\2 337ϼHOm4#7]ӐF YW4luJw-`su11d A9Y3C(;^8^?`=dEr>?W IEݕCp&wғӚS&zuəgUBsn("d7grYf8]rEv[& $u?S'q#p)]ލv'P>H4u;r5Abs`#C`1}!tygA8l4ڑo\9:x& ' jtp֕C+pMe3VDyMQH*ZX̢.z` H2hL6pH:x̣>񏀼nH< hȅP:*TF#5$d$Pd 52L*WV򕰌,gIZ̥.w^ 0IbL2 F 4IjZf5&g*# 8IMnn͛'9rH6{`.!Fa!b4IPrf$=A jA7t!'> X<\΂4D):>}<',,b!)"ENJkd5>2J^hiZ`J*Տ,8H,4IM>'!-)cC`XaX"Va[TAP:IÐ]ϫ5lLlgK؂4UY^F0 >!}P+TȄ)(\ae'r׸2=8á$ЗA<І$z\t}j]f}n2^ýN˜u `CffT_ 3;1K* t98u,}hS/{P!*2/у`q\m1L叏t}+4aGg&+K~@p/G}>Fm; 0wއʰFmmx4e  !0#b{+P*8_s|N &kw'y~:Hb'.GyxMdIlEH2Khy7qSdWȄO(C8?wA8r_C8% CG#: P@a uVWE2mBW]x#H; ~y[(er҆jVmo!r%H5#`S;H~o?XFX}WB7 q ؋&P<@P0lp\Of*HSȍJȎbr!bH z-☃ x؊Hx`ш7zRȋ| Dždx!8b I ɒA} ٷ}}H9' ~';i$P ܀39' ([a 6S- -9xeP?yDeȕYIbChXf#xy`|9,z 1i0<`<ז(f ea6feVB Qep\u wp*ɖ)lfh}Q hrvϧ=+>Sx <& !wuiQk0 M᜸xm̓j 'iʦ"(q<^Ap݆$Qp~I&i&}z+ מ&i%"'i᠔2ss\rs. RRpG}JtuwtOuAuV%A+s?oz%~ƤvoL)Nwu`:Xji2IYoY0k4ĥ wzG7mxzK.qB{6 x`X||) щ t`hS} 377eZ xkA{JmƔn1@ZQȁ9"Hi e6"|]yu浡gzw߱ϝM7RDUϓ=᧗~{?}_x؟!BhR9܁蝈(YWx ¸ f8<@)DiH&L6PF)!i,@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,@MT[M4cl4M@MI[I[bbw@aIIR½H dihlp,tmx|pH,Ȥr$*ׁxLťb@+bq+ƄAA !,V@V6%6'%@S'b6C[B~75L'Jx7JU_@dM@LCLmMTM%M4fl%l4TIMnMfImzLMd%'7@_btz{nzzҚbɨpɱ{Śͥϱ̴͆ϤɹұӽнΤϽŽŞȨž̢Զ׾KKÜŗDž˃͖ѥ؎Ӣۋ݉a8P`5 FCPa3&8Qb1-øQcc6 BA^,IR2r$D؁©È%A qqěMJB>% ʇNHXA~nt1hHKeTh80B9( 00 4DgR[d(PW_EKv4v7I@c /QEj6㴦hS^ͺװc˞M۸sͻ NE!,@f H*$l#JT5eѐM1alݺiɓЪu&ˎήQöMɘ{Vϟ@ JѣH*]ʴӧPJJի7!,@F H*,8‡#*Ld$jܨp\]yu浡gzw߱ϝM7RDUϓ=᧗~{?}_x؟!BhR9܁蝈(YWx ¸ f8<@)DiH&L6PF)!,@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!<,@MT[M4cl4M@MI[I[bbw@aIIR½H dihlp,tmx|pH,Ȥr$*ׁxLťb@+bq+ƄAA !,@f H*$l#JT5eѐM1alݺiɓЪu&ˎήQöMɘ{Vϟ@ JѣH*]ʴӧPJJի7!-,@MT[M4cl4M@MI[I[bbw@aIIR½H dihlp,tmx|pH,Ȥr$*ׁxLťb@+bq+ƄAA !,qMT[M4cl4M@MI[I[bbw@aIIR½P (xs.We]!]#DE" pH,Ȥrl:CtJZجvzxL.zn|NB~O!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,@3I%&66%@'J'['vMbUd5r7U7px7@~7J]M%LVSUV@Um{dMSrC[~_{kf@km[xfJkfiMVVLVLtLzdmdtdtdzBL]rkxCz5f@mbS[ɭvɱ{Ϣϩ̫ϩ϶ȶű̽ɽÙɞû̢ɺТԪҲպUUT;;K;SMRE!B,&UN$H=I#P +UL"UP I1 J7-8A/?F>΄ H*\ȰÇ#JHŋ3jȱǏ CIۑf/  ~0p?"dxDA*}H*K|2*A#tؠ0#*=i2_  `4d@* .a!,q@F H*,8‡#*Ld$jܨp\f 6h9q9%JN ?UD/RQjpet)i 6bAs Oq<4TT wp2Ec#R7أ?xT@;ژYwrD"JHG!HPh,XfF CS^N&is-I!؊m@,veOp`i'>0AI鈩PA㦜jƍv'ڡJ񺛯[!+1똳)I)oa;Zy##K)Ӫ(׺+ dꩥދnqK~;ך ['7#G'+ܲ 3\7;ܳ?\GJ(c`E1\b |0E8XuEx\ T16Em`Ga=(b#}Qd$- hB". }XRF!,?Mm{m%M@MIMRMZMz[gtgmgm{w4Ztaľ|àŨȾìƾɷ½ŕƠȬj@pH,ȤrHФPtJEBJ& # OAڞBaJ\xqLyHE ' B! RA!,@ MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾS@pH,Ȥ06tJEJ(Rz|hCs(x5\~vB{G "  C$ )A!,@%5&63'&'56'%67%675BS(N'b'v7p6[6b)1A2'q_v&CS6C[6VS3PnGWL%G'D7+dd5k'k7~'u7r'%~7%~75LJL'JB'[B7@U'@]'[B'pH7v]7iW7pv0De7eYK*xC%rM5rV5BM@BMSH\XVW@[\YLCvBViBVvUCvUVv]f[DfyUi{]tpdM@dMSdV[rVJxMbrMv~]ztfJkfiMWV/N0j4eJRBkEiLtBtVkUtJiIyRe]tdsduMM/fl*TIMskvfImz?]GGYX]UMdtdkhvsxQiwzƏSW0g-q0M@[DVS_@f@mStJz[iJmWzJtSfvzvzbkGm[xFxSyj%5/ESb'J7wCXZ%t5KuvBF_htwtJUJT[gisistŚJцSҚ[ϛjŨiƩuɱ{ҤpȗīøͥΥϷƸ͙͆͊͋ϤȳɸҭѶѻΤŽĵҵΩηнŽǚĬļоɣʷѩշEAKDȰÇ#2 Cŋ3jȑ#sEiOɓ3;w`97~\ԆO J_Ӈ*yOܞj}ȋ CztٳgPߥK:!,O䒕t 8$È5ϚQo7,2Ut!47 0? 52XX"o;>`ߞMGs`#wLgůVuhN>PQ$n`3^"%? 9;tEڷ/X^y83Âf8c0LW` 1VFS T)6,QK,3 !a8FᎽ!dύ8Ϗ9HRd$o-VI"$y=NiaQxUn%Yz?BeY[)]ySҩM٦iꚠ:٧O2ڨkBZ!Nbapکh*꒤蠧^Y㫰A:Tr뮶nk ԱRlG6۳Q fmyma߂U.>.e뺻ﭔ[\ [(կ0Y_/o 041C90c0K1![<\L1`L2:\<sm?mD>[iˬd6.TGMTAk4]wmXWC_>1"DԽQK;Ul 63HVv * Su!ΐTT9]y9 EN/`+=1n^גyP/^ms"Bp}=^|/ecq%_f_(] B4H0 n$?n7o czh͡:q2ui #?'G zPi?D&WD?@@AYPdD#Uv+WJ!C qDE.2u%"J>dڕ U8jED[¦H*ZX̢.z` H2hL6pH:x̣> IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WV*Lᖸ̥.w^RTbse_e0ii$Ќ&0|lc=4)'#@܎w"L'43bMlj5 @sV,zz\ʈ:ǰ,>ĥ( $] BDqO| M.UQH |rd mz ` }4O-Ң*75Gq $#GDZӤƛ!W a ehUYZֵulmk\ͺaIQ?`P@>HAG:ά{ ܜb5lLͬf7^-U^ð,ፂF!} {-T)NJ)\FB;Z2<8c)$З@<І'zdtwQBsĝBFKXiz5s-y^Ѫ*/ªݠ0L0H>pz2 '+w Fil!Q\ KCTW2OƬrጤHU{LD G $}ⱏbN#B#+,9nz+9#)UA]9[FA#}`,ѽKl]MB\mAx1%.+-葖H?Dx a{GB c'g"FHWԷ0E=H̉ ʗX?5 =W6M/Post!{3?o)`Yj=ڻ3mr9}cqD I 5Yhg,_4cnta:;}0 )sPHQ!'J~r#F 0:@_A$bbuJLwA~cR?eDq`wNchkgow͝\w#w{u_p 6=}GsM{`;(F}鞨Z e[I ?D9|A37+1٪%auV/l"T=YlF?R;'ѣXq|[k0b zf"4ꩴۡ {4=[0!nCpWq.:zoA{g-_`11l; PҐvևʰkpl (5a@;7y  !0#KyP0]0r-.17#6d$۰5Uvb'wrFx@PP~nЖxGw͘&1xX1X01(2؎wɋqC&HȆV]3& zy, c~ 5'lr@(|)ۘ#Q} Շ;ԓɐz~~С~4J# c3ȑQ ~8YȌaɖcP 1Hp&QG`)bb9ni} 3Q}) pɐYY0c$%Ù~5C)'>񺥛YoWrHfȯJ-QKвC{XU2 8{谛"Op\e``*>14ױs` =YBp 3S :&alp 0XP|X{&&h2_ɵ9MږS;KdpdIb@fdTA Ib7a d`WIrP rTch`!,@gk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=iϟ@ JѣH*]ʴӧPJJիX!,U|&&56%@'J'[6[&7@67@6VpLB7%dd5k7~7%B7@B'pr'@]M%]C5UV5rM5UV@Uf{]tpdMSkf@~f[kfiMV6m4e6t?s?wLVLVLfUfUmHeLzPeXe]tdmdtdtdzMT[M%T4mM@MIMZM}w@fnBLP]UM[rddkv{rrmgxPPxxŎV5V%z[@Sb'@7{C_%t5C{t@C_%4pnSJ[i@IIRRanzцSҚ[iҟiŨvɫsɭ{ɱ{ʃȋŠ®œŚ̢ͮϷɴ͖͋͋Οűɵ̵ɵ̽ұӹɴҵαϹŕɜȠŤżʤɴХҬѲֻED*\4"JAŋ3jIÏ ANBDScȗ0EHI+sflǙ5EY%tb)B6OkCσ*JENBzրLr5RL/^+ tP>A,aATΥ5I,:qV^id%] vq":NK3DX8UB,b<dH P\]ɦ]mP쥡]y<"Z~R9a,IVw QOɞǽ'~H\ 4q0 xXb,dEL*z5JXfJ A$᱅Wj8w}Da-t5',S-3X xZ X ,2TJ0sO*$1\cYpM aY\eji}(o&1@u l}hADEICbBV{U!H9D 1`Ut E ``&B+~RFZr-Nlm:~mvk^nK nKw+[zo: JRG o.̰?pLq_n,̰ l ¬L-ͭ"m2MuԶvLJN?EJ)VUч!^D(f[p]=`쉦hRNB>f߰:ugC枓mï&@J0p}jjw XV_l8uԭ;C/o'7G/Wogw/o觯I/v:d q?E h8xE7x= `8$zlnupE8T,ф$Y@n"@L`g' @pZQȍ>Fp*}J7.ہj@kz+Cʑ@Dؕiy+2둳vڪvkZ{iYʊvFjƽa/mK/w@t<,q{1ax`r- ⪬ݺʌ| '%Dm4LtPG}-RW5YXDw 'SM<5lnԩX2fǞhNP9}TU^uV]m~Xe͞ڈm;eܝuuW޾ /aKM|X⏌ ;~[5:(Ր [ZD0&M [>AR4푓5_XS)!E&(Ŋ.bqcG+8aI'<`ˁ/7S_v7嬶sYODThQG tbSDK>8QՌW%euKT[*ٳaf-)!CjDyrEl%(1c  Dd%NEɁ"^%NAbK @ ,1F$(pD-,x-W8KR -< [_FP`dʂ l]k !,@6 H(\ȰÇ#JE3jƏ ;Td#M=TU^%VUr*v`ײϢU[X_n{Th˷߿ LÈ+^̸ǐ#.r2p% x\;d};VY@!,!@V H(\ȰÇ#JE3jƏ ;Td#M=TU^%VUr*v`ײϢU[X_n{TO.{P?|L/T1Lk!r\s1|s^{At`ӃQV}ub׋a78ldhsͻ Nȓ+_μУn6MYhͬ)ylݺif9jݶI5lˠ'cv!,!@VN*DxÇ#JLdjhPǏŃ'O:(\)ћvҁKI#˛ {5q<&۱r?zScLY>UuTUA^ V]~EVXe!VZm7\u[wo¼z,xp6"zx1aǍ?d˕_֜fϝ~hӥVj׭׾l۵֝n߽pŧWr͝>jukνËOӫ_Ͼ˟Ow!,@6k6M*\Ç#Jx,Z3kʢ!cȱ CBl[7m z\PKЪu&̓/s><5lnԩX2fǞhNP9}TU^uV]m~Xe͞ڈm;eܝuuW޾ /aKM|X⏌ ;~J8 ^CO*Hŋ3jȱǏ CIɓ(S\ɲ˗0c`Bf$ $i3"7QA "CN, +&!K,qMT[M4cl4M@MI[I[bbw@aIIR½P (xs.We]!]#DE" pH,Ȥrl:CtJZجvzxL.zn|NB~O!,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,Vq@MT[M4cl4M@MI[I[bbw@aIIR½1 dihJpDrUYnH$CPlJI! !,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!K,@2I%&6&'5@'J'['v67JUL'%L7%d5r7LJU@]@B'[~7@]M%~C5BMSUV@BVvUm{dCJdMSxfJMVV&M&M6t6zBVBfLt]mUzBL]rkrUkrxŃCm5z5VSf@m[S[J[bpp{vɱ{ϣ̣ϩ̶ȶű̹йɽÙʛžɾŮɦ̪ɺЪӳ׼kk=UchX hA!5*90kjR[5/6e[E42j3iȌ`DO8Pe k? ]J7&KT? %YS^ H*\ȰÇ#JHŋ3jȱǏ CIɓ(1j&ʂNiQQ@H#@+hą#mI*3\ iRR$0 5aw,p@_ !x,q@F H*,8‡#*Ld$jܨp\f 6h9q9%JN ?UD/RQjpet)i 6bAs Oq<4TT wp2Ec#R7أ?xT@;ژYwrD"JHG!HPh,XfF CS^N&is-I!؊m@,veOp`i'>0AI鈩PA㦜jƍv'ڡJ񺛯[!+1똳)I)oa;Zy##K)Ӫ(׺+ dꩥދnqK~;ך ['7#G'+ܲ 3\7;ܳ?\GJ(c`E1\b |0E8XuEx\ T16Em`Ga=(b#}Qd$- hB". }XRF!,?)6%&'56'p]'[]VS]_[]f[Bf{dV[Mm{m%M@MIMRMZMz[gtxkrxgmgm{wxšm[%S'[7vCMvt@m4{ZtaiіbњiП{Ũtľ|àŨȾìƾɷϪº̶Ͼ̽ҵΪϽŕƠȬ̢ײ]]J] 9XQ 2 &4 #[]5WVZN 6\% L E* <,I? GɃK$S7F;Y>O1܄3"D>C=Od,] @/X ) hp`0´4@aEZ\!AV 2Lx5䖓d= JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhR !,@9MT[M%T4mM@MIMZM}w@fnM[mg%4n@IIRRanz½œŜɧɷȠŤƾ@pH,Hrl:Ȩ4ZӬʅjɮX .c}^RaXTGgdFD,CBџ &+%# '*  (!"  $2)>!,@&(&66%&'%&'5&756'%67%675CS'J'[7J7S'b't7p,P6b&-B/'qCp_v&CS6C[6VS3NmGYL%H'H7+dd5k'k7~'u7u/)LJL'JB'[U'@]'[I7t]7iW7pz5Be7eXI)xC%rV5BM@BMSGZWWX@[\YLCvBViBVvUCvUVv]f[DfyUm{]tpdM@dMSdV[rVJzMbrMv}]yqfEkfiMWV&M&_&V6E6_0j6xJQDiEiLtGt]mUtLmIy~_hrduLMTM/fl*TIMskvfImz]GGY]]Mdsdih~t{UixyőQW5h/s1M@MS[DVS_@f@mStJz[iGmWzJtSfvzvzbkGmYxGxSyj%5/FSb'P7wCYY%t5LtvB_RhtwtJWJSZeisiqtŚJцSҚ[iљeќtæiƪuɱ{Ҥpȗũ§ºͤΥϷƸ͆͊͋͗ϤƱȷҭѷѺΤŽҵΩιнŽřОĬļоȤʷѪշUAPLDȰÇ#2,Cŋ3jȑ#BsEiOɓ33w 9s7~^,O J0Ӈ*O>۞j}( ypٳgPߦM: !-O䒵d >8$È5үSo?,2Ww!,' ?O 5cޞ]7s`#wD$VuhF>RQmà3^"@ 9[EOXayV83f8c1LW` 1VFCT*6-AK,C !a8FᎽ!dύ8Ϗ9HRd$o-VI"$y=NiaQxUn%Yz?BeY[)]ySҩM٦iꚠ:٧O2ڨkBZ!Nbepکh*꒤蠧^Y㫰A:Tr뮶nk ԱRlG6۳Q fmyma߂U.>.e뺻ﭔ[\ [(կ0Y_/o 041C90c0K1![<\L1`L2:\<sm?mD>[iˬd6.TGMTAk4]wmXWC_>1# TԽQK;UlS5cHVvG + ASu!ΐTT9]y9O EN1p,=1n^גy0^ms"Bl}=^|0ecq%_f_)m B5X` r$?n7o czha:2 ui #?'G zPi?D'YD?@@AYPdD#Uv+WR!ՀC qDE.2u%"J>dڕ U8jED[¦H*ZX̢.z` H2hL6pH:x̣> IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WV$jJe46rVemh":ddH2ҎZ^1fb3ˬ1QgxʇX"0?hѻcE7n `lByOF̉NuO @RTnXiG!(8jaR8x]><H@_iVD}RܴWN?҈d`8i>ZӤF`GT܌ԥMj2S X:ҁ+^Ϩ fC?WkU=&aO* D>dWb Qogl6chAB !& ehChe<`: dA0'"{o~!8Z`VyD/taQF3o{DL¯B2&˿%,;3aEpKLg$E[d"}ʇRM#b0ٝo,ez+%u!mAcG6 .x1ld$TEPIxc'cC?ںH֛L=y_W.EEm"2fN/E-K<(@A.xotpeըK}ӦH hC`\_GS2=e$nR.r@jVķM`BĠB\ZFdrxbtPrxERߙ y,n\s !sj% Ё6dA2 4 {ֈ5w{F6469CoDg~oo'7K .2͢Ox-c { Gv\pY@x< 0eP`W'MRv 192e}Tok7&(2x :S A&~+IA<3(C#Cle~R2IIZ3j8ӄ_UTxz;)qYZc W8TpYhZx~y8v̇W8 tf4A47 i]W;$艠)0Q,$|5 8ZamŃ?SrgU]3zpgwC،Ԩ0#ǍR ~aq7֨82qˇM*戎ar)Q r례ֲdbb8נȏ8V$tBxdd 0*qYu9R~ UwuƐuב([ahb 'Y09cv, .l.8ɑQvvA*1I}gȐ ?ӈ8h1F!>!dg$yy~dapCq #"a{`RC9k Qs Ql}I8n1D: Sy218~}Y~闱nY39iÙkc%><C&0b0Ƌft2!8617% ԥu)Xwh۰DOBXyNZB $ a C//=>BG(Z$j=yH,j' t!GHrRK&Zs]K9[P ddYf&E'Q|j&`cSʮ&pj&4X*گfr,: H H+Hk9brh HSk(' ","G9x/1)D[ _iO] 6 [ 1eI!I!)JO+KkH+Z[K"^[Ȳd;Kd-`{<h%p o;tx{x+xط| m뵁K;Ik ױtiи{Ik@TQ {tnpT `khPm!,@Fk6M*\Ç#Jx,Z3kʢ!cȱ CBl[7m z\PKЪu&̓/s><5lnԩX2fǞhNP9}TU^uV]m~Xe͞ڈm;eܝuuW޾ /aKM|X⏌ ;~J8 ^CO*Hŋ3jȱǏ CIɓ(S\ɲ˗0c`Bf$ $i3"7QA "CN, +&!Z,qMT[M4cl4M@MI[I[bbw@aIIR½P (xs.We]!]#DE" pH,Ȥrl:CtJZجvzxL.zn|NB~O!i,Vq@GN*\ȰadȩKΡŋOuCl\;y\Rw!kI3oͬɳa@!,q@Hk6M*\ȰCњYS Ë3.l[7m jI!jݶI+ɲ@gרa[d̎=igÀ!,kP&&'5'[67JL'%L7%LJU@]@B'[~7@~C5BMSUV@BVvdCJ&M&M6t6zBVBf]mUzMT[M%M4btl4MTITRTaTnTtTzmZrRTTrbmbmrt{Ukrxʼnm5z5VSm[%'7@JS7vVV%_btJz@ftz4RZhS[Jbpp{aҚbҚpva|©˳˜ϣ£̣ϴ̶͆͆͋Ϥ̹ұйΤΨϽ•ƛśʛȬˤ̨žɾŮʦ̪Ьմ׾3H*hÇ#JH‹3ȱLJCLI#Sl8EB'cRTI3EFm`SH"dͣMAaAxHIXAAJb`ˆ&[p߆F[1v|V ah 9InB"Pُ[#91ϑC93=1ZN7z2c,g%$MigǟD}1 Y3xaz17 -* XPK#罡KzlLˌ<Be|B$z.t&4(h hRl-Nf禚 FZg+E+/a7.f/c5#u0  41tzmي1z;2Akӫ{" NHs"h/7,܆/6&Rw곿D' @ Ip #f!KB EaobB-fWАDJkxvW\oew%_ms0U T0@&emVgViƚV]LUuCq̮`HD iC@ BdfC'us}M}^o!,q@F H*,8‡#*Ld$jܨp\N|펞ƞMc^-H撓KܸsoO.pL4Azop;UzbG_Zo^>%qW4`v`-XPJ!RX׃*A҅a#N^"C'Tb+^Ѣz3U1cK7B(ʍg@JjFKrEٞBSBy~Vrd`RAa`Ld)AyCr2S`y\q s-s"Ќ!B?h |";(FFd?єXdyceeU2 =Uc&QFu'b~`XbtW_8]`T46`5*QF] 0Jq9X2LzqKqN n/o'7G/Wogw/o觯;;rj==P?e|?.RK Ѝb,44prkK|d~&0pG萓DB5pCQPDWy.(IYf44@7X 9AP0J[%'7D )DQ2L Z(+L 'drFHjVӚ9"8>6pɜ"E&`C8 נqX$('Jb{*MIU )BbdQ>2 (.9DH1D~#@)0Bqt# 8@O?C?lQQ.B) 72 M&*D'O F? &=RS'JnA >p, VXa5[T#L'8> #="A'|$dEeĔ!8b@Ë#>R-D2 8d&5x #%YcɞYn}<)ѵ+^ͣ'Op ?XrX QE00щ nP0pHʈNUA;R4eGQD[ZwsWm '=ELl²p*ĸ0DXied"Ѐ"` pTUF=3R翽5N_388 ~`)S0Fa ڵa"I; 4#۲?oZQ0@enml\G\?z۵=h~ ?jr'0>AM\ z2;Hab3(4D6}y; 8LS&r 0:ȓ7GKm Hsڪv-nyvA!88=TU^%VUr*v`ײϢU[X_n{Th˷߿ LÈ+^̸ǐ#.r2p% x\;d};VY@!,V@V6%6'%@S'b6C[B~75L'Jx7JU_@dM@LCLmMT[M4cl4M@MI[IL[dbbw%'7@_btz{@aIIRҚbɨpɱ{ŜšͥϽŴ͆ϤɹұӽнΤϽŞž̢Զ׾KK&(F5EF).FE'/2*×μЖԈֲڦ܇\o % &D8PaCFObE,fhOcG<NdILDiNeK\ƄMfMlcA !zj1 ƒ$AZѡjUK಩VX"GM5U>d(PW_EKv4v7I@c /QEj6㴦hS^ͺװc˞M۸sͻ NE!,@&6%&'56'p]'[]VS]_[]f[Bf{dV[MTM4d{l4M@MRTI[ZaIxkrxxšm[%S'[7vCMvt@m{IiіbњiП{Ũt§àȾɷϱ̶̺Ͼ̽ҵΪϽà̢̰ײJJ9J + & (HJ)DCG0  I;4EE6? #8 /E=$ ʄ:@*5.F1-2 ރ'3   FpcxAD.P{X-b$>Rṃ@LCQ2\I͛8sɳϟ@ JѣH*]ʴӧPJJիX9!,@F H(\ȰÇ#JE3jƏ ;Td#M=TU^%VUr*v`ײϢU[X_n{TO.{P?|L/T1Lk!r\h3k̹ϠCMӨS^ͺװcg.v2p% z\;d};VY@!-,1@F H(\ȰÇ#JE3jƏ ;Td#M=TU^%VUr*v`ײϢU[X_n{TO.{P?|L/T1Lk!r\h3k̹ϠCMӨS^ͺװcm6MYhͬ)ulݺif5jݶI5l`'cv!,'2p]7ik7b]_[rVJ]mBtBzdtM~ȜfJtJ%S'[7vCMvt@m[іbњiП{̵{̶ϾҵΪϽɞ̢Ӳ׺pH,Ȥrl:ШtJZجvzxL.@֠T1, 8( g#gBh C~f$D h!E"oױjlndxz|'qsudCCeCg DhC>:)l!XȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜIa!,'%5'675@S'b'{6Ci6MbB'L7pU7pk'S]V%dC5~C5]_@~CS_BtLz]dkrC_5z5ipJJJSi@Ũv̱{Śʡ̮ϮϾнŢЦЪҾlpH,Ȥrl:ШtJ} Kx"G3!;#+Q v!ZB"0;#}04 l&;}-5 8;';6* (+B$/ )^]IA!,')'5&&56%&'5p'J67@&'p]'d5~7%B'pr'@BC5]M%UV5rM5~V5L_SkC@dMSkMbkMvxCbxVpMV6tBVBfUfUmUt]tdtdtdz]B]U]rdddkrrxV%_%f5m5fJ@SbCt5CiiJ[[Қ[ҟiɨpɱ{Ⱦɮϡ϶Ͼ͋͋ΟűɵӹɜžУЬҲջl`A3d1]hc@"40k Qe Sb$b glGD_%_ _#Z)&^0ʸ!lH(bւeTlB*PLIOhc-["lf X<ƌ#JTfB֤Ytc/١h+lx8#Dk2TI:$hlC%R0)chF5\"" Ǣ5aLA !<,'2&CSUC%rCdM%dfi4e?s?wBmHePeXe]k{rxPPxxŘ_@@SbCt5C{Қ[ҟiŤpŨvɨv̭{Ⱦ͋͋ΟӹžɾЪҲԺBȤr$"%sJBLQz Znv-3Gy&lZ8u֗p~^}`T]uW]F$ Uz8.&&,'75  #/)!6̸8ժ!"81*ݩ %0(04+-d!,,'2%5''5&&56%&'5675@Sp'J'b'{67@&'p&CS6Ci6MbB']'d5~7%B'pL7p]7iU7pk'Sr'@k7bBC5UC%]M%]V%UV5rCdM%dC5rM5~C5~V5L_S]_@]_[kC@dMS~CSrVJkMbkMvxCbxVpdfiMV_6tBVBfBmUfUm]mBtBzLzUt]tdtdtdtdzMTM4d{l4M@MRTI[ZaI]B]U]krdddkrrrxxrxx~ȃCV%_%_5f5m5z5_@fJfJtJ%@Sb'[7vCt5Mvt@CmiiipIJJJJS[[i{@Қ[іbќiП{ŤpŨvɨs̭{˳{ȉŌʕ§àȾɮɷˡ̡ϮϮϱ̾Ž̶Ͼ͋͋ΟűɵҵҺΪϽɜàüž̰ɾŢ̢ФЫҲԻ H*\ȰÇ!2{*-ܲEhБ tIF'+ȧm09&eK<9V2#Вn!,宦 `}سhӪ]˶۷pD&h h( )(kZh2! 7 J#e͒`k @c>+"W9hNE1Ȣi6j+j(ìn<E&R~Bs. qrO"4-irӫ_Ͼ@P`n2\n5ҍ1;KpqCC.F@YMt"4$,7#?%:&;)?4%???4%4????4???IRa4Z?R)B1C1C$a4h 0j4?{"8F%=IIz,@K$IR*FX1FO3HO9MR?RZITZI%C/D1Z%I:%R?%R?4``ri#a%h%n4|4N@*RI4QK:ZI4UQ?ZR?zILVOCRSLWSIRZUTDUWNZRITWQRZZZZRZZZIZaZaZaZIaahannhha?I%R%Z$W,[(\1\2`4a4h?h?h%n4t4z?z?zIhIIZahakhzzň!&#&IRR%a4j4n?h4n?n??tIRI ')$&()))))%(#)(IRRhnhannznz¤z¨|Ṵ̋ŗœ̛¬èɷž¨»̨Ṵ̃²ɰ¼ĽɽŬ۰̻óɻ̾·ŷŻɾɾ»¾ʾɬ¼Űžɷ̾H*\ȰÇ#JHŋ3jȱǏ BN.H ԘVP"@@B JѣH*]*p@,I[0 ׍!*FA3AĴ۷pʝtd,q@,qTpp`|`T _@.8a k LϠCHcKԦ:QZ(`XCX"ipڷ3K]wTXLPh&l=c b ;vĊnݔ !I'kF id [hDaA}, P+ ` $Jt TX=V#- A D( *qt%L*yTmRD'  B:Z#A%PÄt,s %&0F'DB2̊9P @ (1K4)餔V [p@4@&LP*`vj4@-%M!6" $YAC.9T*A@ $:P}af5 JC X p0դ+@ @ <5`9̈oSM'8ֆGdKn74RI'K.)DᙗnNA9UUWe.{v{6Pk 7&  :._/%Vb%y A̋/b)*CoP -p\Cҵ.5n`hr)uߓ7薮}͂a9Hj &L i! gH8̡w@ H"HL&:PH*ZX̢.z` H2hL6pH:x̣> IBL"F:򑐌$'IJZ̤&7Nz (GIRL*WV򕰌,gIZ̥.w^ 0IbL2f:Ќ4IjZ̦6nz 8IrL:v~ @JЂMBІ:D'JъZͨF7юz HGJҒ(MJWҖ0LgJӚ8ͩNwӞ@ PJԢHMRԦ:PTJժZXͪVծz` XJֲhMZֶp\J׺xͫ^׾ `KMb:d'KZͬf7z hGKҚMjWֺlgKͭnw pKMr:ЍtKZͮvz xKMz|Kͯ~LN; !-,+ \!-,+G!-,+ \!,+G!,+4?%?%?4%%?I$IRIRn4zIZZRIZaaZI4aahzžn¤zŻ̾ɬžɷH@p!yT Fg*& T@bʌP *X26@sdVB \LUTNJVA!,14?%IZIR4k4R%IRzntatZh?n?ZZ̷̨̓³ŷɷŰB bgI:[2 ,4Xí`d vQ8KLǒep" ̬ZٵVB!,94?I$a4zIn44Z?a4¾Ũ¬¾°ŻA e&9*X< _"67@19XADql&@!T(%A4U%;tty-solitaire-1.3.1/src/000077500000000000000000000000001411444351000151115ustar00rootroot00000000000000tty-solitaire-1.3.1/src/card.c000066400000000000000000000026241411444351000161720ustar00rootroot00000000000000#include #include #include #include "card.h" #include "common.h" void card_malloc(struct card **card) { if (!(*card = malloc(sizeof(**card)))) { tty_solitaire_generic_error(errno, __FILE__, __LINE__); } frame_malloc(&((*card)->frame)); } void card_init(struct card *card) { frame_init(card->frame); card->value = NO_VALUE; card->suit = NO_SUIT; card->face = NO_FACE; } void card_free(struct card *card) { frame_free(card->frame); free(card); } void card_set(struct card *card, enum value value, enum suit suit, enum face face, int begin_y, int begin_x) { frame_set(card->frame, begin_y, begin_x); card->value = value; card->suit = suit; card->face = face; } void card_expose(struct card *card) { card->face = EXPOSED; } void card_cover(struct card *card) { card->face = COVERED; } void card_mark(struct card *card) { frame_set(card->frame, card->frame->begin_y + 1, card->frame->begin_x); } void card_unmark(struct card *card) { frame_set(card->frame, card->frame->begin_y - 1, card->frame->begin_x); } struct card *card_dup(struct card *card) { struct card *new_card; card_malloc(&new_card); card_set(new_card, card->value, card->suit, card->face, card->frame->begin_y, card->frame->begin_x); return(new_card); } tty-solitaire-1.3.1/src/card.h000066400000000000000000000014051411444351000161730ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_CARD_H #define TTY_SOLITAIRE_CARD_H #include "frame.h" enum value { NO_VALUE = -1, ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING }; enum suit { NO_SUIT = -1, DIAMONDS, SPADES, HEARTS, CLUBS }; enum face { NO_FACE = -1, COVERED, EXPOSED }; struct card { struct frame *frame; enum value value; enum suit suit; enum face face; }; void card_malloc(struct card **); void card_init(struct card *); void card_free(struct card *); void card_set(struct card *, enum value, enum suit, enum face, int, int); void card_expose(struct card *); void card_cover(struct card *); void card_mark(struct card *); void card_unmark(struct card *); struct card *card_dup(struct card *); #endif tty-solitaire-1.3.1/src/common.c000066400000000000000000000011051411444351000165420ustar00rootroot00000000000000#include #include #include #include #include "common.h" bool term_size_ok() { int lines, columns; getmaxyx(stdscr, lines, columns); return(lines >= MIN_TERM_LINES && columns >= MIN_TERM_COLS); } void tty_solitaire_generic_error(int errno, char *file, int line) { char message[TTY_SOLITAIRE_BUFSIZ]; snprintf(message, TTY_SOLITAIRE_BUFSIZ, "%s: %s (%s:%d)", program_name, strerror(errno), file, line - 1); fprintf(stderr, "%s\n", message); exit(errno); } tty-solitaire-1.3.1/src/common.h000066400000000000000000000006001411444351000165460ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_COMMON_H #define TTY_SOLITAIRE_COMMON_H #include #define MIN_TERM_LINES 28 #define MIN_TERM_COLS 57 #define TTY_SOLITAIRE_BUFSIZ 100 #define SMALL_TERM_MSG "Please increase your terminal size to at least 57x28 or press q to quit." extern const char *program_name; void tty_solitaire_generic_error(int, char *, int); bool term_size_ok(); #endif tty-solitaire-1.3.1/src/cursor.c000066400000000000000000000077451411444351000166070ustar00rootroot00000000000000#include #include #include #include #include #include "cursor.h" #include "game.h" #include "common.h" void cursor_malloc(struct cursor **cursor) { if (!(*cursor = malloc(sizeof(**cursor)))) { tty_solitaire_generic_error(errno, __FILE__, __LINE__); } (*cursor)->window = newwin(1, 1, CURSOR_BEGIN_Y, CURSOR_BEGIN_X); } void cursor_init(struct cursor *cursor) { mvwin(cursor->window, CURSOR_BEGIN_Y, CURSOR_BEGIN_X); cursor->y = CURSOR_BEGIN_Y; cursor->x = CURSOR_BEGIN_X; cursor->marked = false; } void cursor_free(struct cursor *cursor) { delwin(cursor->window); free(cursor); } void cursor_mark(struct cursor *cursor) { cursor->marked = true; } void cursor_unmark(struct cursor *cursor) { cursor->marked = false; } void cursor_move(struct cursor *cursor, enum movement movement) { switch (movement) { case LEFT: if (cursor->x > CURSOR_BEGIN_X) { cursor->x = cursor->x - 8; if (cursor->y > CURSOR_BEGIN_Y) { cursor_move(cursor, UP); cursor_move(cursor, DOWN); } } break; case DOWN: if (cursor->y == CURSOR_BEGIN_Y) { switch (cursor->x - 3) { case MANEUVRE_0_BEGIN_X: cursor->y = cursor->y + 7 + stack_length(deck->maneuvre[0]); break; case MANEUVRE_1_BEGIN_X: cursor->y = cursor->y + 7 + stack_length(deck->maneuvre[1]); break; case MANEUVRE_2_BEGIN_X: cursor->y = cursor->y + 7 + stack_length(deck->maneuvre[2]); break; case MANEUVRE_3_BEGIN_X: cursor->y = cursor->y + 7 + stack_length(deck->maneuvre[3]); break; case MANEUVRE_4_BEGIN_X: cursor->y = cursor->y + 7 + stack_length(deck->maneuvre[4]); break; case MANEUVRE_5_BEGIN_X: cursor->y = cursor->y + 7 + stack_length(deck->maneuvre[5]); break; case MANEUVRE_6_BEGIN_X: cursor->y = cursor->y + 7 + stack_length(deck->maneuvre[6]); break; } } break; case RIGHT: if (cursor->x < 49) { cursor->x = cursor->x + 8; if (cursor->y > CURSOR_BEGIN_Y) { cursor_move(cursor, UP); cursor_move(cursor, DOWN); } } break; case UP: if (cursor->y > CURSOR_BEGIN_Y) { cursor->y = CURSOR_BEGIN_Y; } break; } } enum movement cursor_direction(int key) { switch (key) { case 'h': case KEY_LEFT: return(LEFT); case 'j': case KEY_DOWN: return(DOWN); case 'k': case KEY_UP: return(UP); case 'l': case KEY_RIGHT: return(RIGHT); default: endwin(); game_end(); assert(false && "invalid cursor direction"); } } struct stack **cursor_stack(struct cursor *cursor) { if (cursor->y == CURSOR_BEGIN_Y) { switch (cursor->x) { case CURSOR_STOCK_X: return(&(deck->stock)); case CURSOR_WASTE_PILE_X: return(&(deck->waste_pile)); case CURSOR_FOUNDATION_0_X: return(&(deck->foundation[0])); case CURSOR_FOUNDATION_1_X: return(&(deck->foundation[1])); case CURSOR_FOUNDATION_2_X: return(&(deck->foundation[2])); case CURSOR_FOUNDATION_3_X: return(&(deck->foundation[3])); case CURSOR_INVALID_SPOT_X: return(NULL); default: endwin(); game_end(); assert(false && "invalid stack"); } } else { switch (cursor->x) { case CURSOR_MANEUVRE_0_X: return(&(deck->maneuvre[0])); case CURSOR_MANEUVRE_1_X: return(&(deck->maneuvre[1])); case CURSOR_MANEUVRE_2_X: return(&(deck->maneuvre[2])); case CURSOR_MANEUVRE_3_X: return(&(deck->maneuvre[3])); case CURSOR_MANEUVRE_4_X: return(&(deck->maneuvre[4])); case CURSOR_MANEUVRE_5_X: return(&(deck->maneuvre[5])); case CURSOR_MANEUVRE_6_X: return(&(deck->maneuvre[6])); default: endwin(); game_end(); assert(false && "invalid stack"); } } } bool cursor_on_stock(struct cursor *cursor) { return(cursor_stack(cursor) && *cursor_stack(cursor) == deck->stock); } bool cursor_on_invalid_spot(struct cursor *cursor) { return(!cursor_stack(cursor)); } tty-solitaire-1.3.1/src/cursor.h000066400000000000000000000023031411444351000165750ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_CURSOR_H #define TTY_SOLITAIRE_CURSOR_H #include #include "deck.h" #define CURSOR_BEGIN_X 4 #define CURSOR_BEGIN_Y 7 #define CURSOR_INVALID_SPOT_X 20 #define CURSOR_INVALID_SPOT_Y 7 #define CURSOR_STOCK_X 4 #define CURSOR_WASTE_PILE_X 12 #define CURSOR_FOUNDATION_0_X 28 #define CURSOR_FOUNDATION_1_X 36 #define CURSOR_FOUNDATION_2_X 44 #define CURSOR_FOUNDATION_3_X 52 #define CURSOR_MANEUVRE_0_X 4 #define CURSOR_MANEUVRE_1_X 12 #define CURSOR_MANEUVRE_2_X 20 #define CURSOR_MANEUVRE_3_X 28 #define CURSOR_MANEUVRE_4_X 36 #define CURSOR_MANEUVRE_5_X 44 #define CURSOR_MANEUVRE_6_X 52 struct cursor { WINDOW *window; int x; int y; bool marked; }; enum movement { LEFT, DOWN, UP, RIGHT }; extern struct deck *deck; extern struct game game; void cursor_malloc(struct cursor **); void cursor_init(struct cursor *); void cursor_free(struct cursor *); void cursor_mark(struct cursor *); void cursor_unmark(struct cursor *); void cursor_move(struct cursor *, enum movement); enum movement cursor_direction(int); struct stack **cursor_stack(struct cursor *); bool cursor_on_stock(struct cursor *); bool cursor_on_invalid_spot(struct cursor *); #endif tty-solitaire-1.3.1/src/deck.c000066400000000000000000000021271411444351000161650ustar00rootroot00000000000000#include #include #include #include "deck.h" #include "common.h" void deck_malloc(struct deck **deck) { if (!(*deck = malloc(sizeof(**deck)))) { tty_solitaire_generic_error(errno, __FILE__, __LINE__); } stack_malloc(&((*deck)->stock)); stack_malloc(&((*deck)->waste_pile)); for (int i = 0; i < FOUNDATION_STACKS_NUMBER; i++) { stack_malloc(&((*deck)->foundation[i])); } for (int i = 0; i < MANEUVRE_STACKS_NUMBER; i++) { stack_malloc(&((*deck)->maneuvre[i])); } } void deck_init(struct deck *deck) { stack_init(deck->stock); stack_init(deck->waste_pile); for (int i = 0; i < FOUNDATION_STACKS_NUMBER; i++) { stack_init(deck->foundation[i]); } for (int i = 0; i < MANEUVRE_STACKS_NUMBER; i++) { stack_init(deck->maneuvre[i]); } } void deck_free(struct deck *deck) { stack_free(deck->stock); stack_free(deck->waste_pile); for (int i = 0; i < FOUNDATION_STACKS_NUMBER; i++) { stack_free(deck->foundation[i]); } for (int i = 0; i < MANEUVRE_STACKS_NUMBER; i++) { stack_free(deck->maneuvre[i]); } free(deck); } tty-solitaire-1.3.1/src/deck.h000066400000000000000000000006511411444351000161720ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_DECK_H #define TTY_SOLITAIRE_DECK_H #include "stack.h" #define FOUNDATION_STACKS_NUMBER 4 #define MANEUVRE_STACKS_NUMBER 7 struct deck { struct stack *stock; struct stack *waste_pile; struct stack *foundation[FOUNDATION_STACKS_NUMBER]; struct stack *maneuvre[MANEUVRE_STACKS_NUMBER]; }; void deck_malloc(struct deck **); void deck_init(struct deck *); void deck_free(struct deck *); #endif tty-solitaire-1.3.1/src/frame.c000066400000000000000000000014771411444351000163600ustar00rootroot00000000000000#include #include #include #include "frame.h" #include "common.h" void frame_malloc(struct frame **frame) { if (!(*frame = malloc(sizeof(**frame)))) { tty_solitaire_generic_error(errno, __FILE__, __LINE__); } (*frame)->window = newwin(FRAME_HEIGHT, FRAME_WIDTH, 0, 0); } void frame_init(struct frame *frame) { frame->begin_y = 0; frame->begin_x = 0; } void frame_free(struct frame *frame) { delwin(frame->window); free(frame); } void frame_set(struct frame *frame, int begin_y, int begin_x) { frame->begin_y = begin_y; frame->begin_x = begin_x; mvwin(frame->window, begin_y, begin_x); } struct frame *frame_dup(struct frame *frame) { struct frame *new_frame; frame_malloc(&new_frame); frame_set(new_frame, frame->begin_y, frame->begin_x); return(new_frame); } tty-solitaire-1.3.1/src/frame.h000066400000000000000000000006141411444351000163550ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_FRAME_H #define TTY_SOLITAIRE_FRAME_H #include #define FRAME_WIDTH 7 #define FRAME_HEIGHT 5 struct frame { WINDOW *window; int begin_y; int begin_x; }; void frame_malloc(struct frame **); void frame_init(struct frame *); void frame_free(struct frame *); void frame_set(struct frame *, int, int); struct frame *frame_dup(struct frame *); #endif tty-solitaire-1.3.1/src/game.c000066400000000000000000000153471411444351000162000ustar00rootroot00000000000000#include #include #include #include #include #include #include "card.h" #include "common.h" #include "cursor.h" #include "deck.h" #include "game.h" #include "gui.h" #include "stack.h" static int foundation_begin_x(int x) { switch (x) { case 0: return (FOUNDATION_0_BEGIN_X); case 1: return (FOUNDATION_1_BEGIN_X); case 2: return (FOUNDATION_2_BEGIN_X); case 3: return (FOUNDATION_3_BEGIN_X); default: endwin(); game_end(); assert(false && "invalid stack"); } } static int maneuvre_begin_x(int x) { switch (x) { case 0: return (MANEUVRE_0_BEGIN_X); case 1: return (MANEUVRE_1_BEGIN_X); case 2: return (MANEUVRE_2_BEGIN_X); case 3: return (MANEUVRE_3_BEGIN_X); case 4: return (MANEUVRE_4_BEGIN_X); case 5: return (MANEUVRE_5_BEGIN_X); case 6: return (MANEUVRE_6_BEGIN_X); default: endwin(); game_end(); assert(false && "maneuvre_begin_x called x < 0 || x > 6"); } } static bool waste_pile_stack(struct stack *stack) { return ((stack->card->frame->begin_y == WASTE_PILE_BEGIN_Y) && (stack->card->frame->begin_x == WASTE_PILE_BEGIN_X)); } static bool foundation_stack(struct stack *stack) { return (stack->card->frame->begin_y == FOUNDATION_BEGIN_Y && (stack->card->frame->begin_x == FOUNDATION_0_BEGIN_X || stack->card->frame->begin_x == FOUNDATION_1_BEGIN_X || stack->card->frame->begin_x == FOUNDATION_2_BEGIN_X || stack->card->frame->begin_x == FOUNDATION_3_BEGIN_X)); } bool stock_stack(struct stack *stack) { return ((stack->card->frame->begin_y == STOCK_BEGIN_Y) && (stack->card->frame->begin_x == STOCK_BEGIN_X)); } bool maneuvre_stack(struct stack *stack) { return (stack->card->frame->begin_y >= MANEUVRE_BEGIN_Y && (stack->card->frame->begin_x == MANEUVRE_0_BEGIN_X || stack->card->frame->begin_x == MANEUVRE_1_BEGIN_X || stack->card->frame->begin_x == MANEUVRE_2_BEGIN_X || stack->card->frame->begin_x == MANEUVRE_3_BEGIN_X || stack->card->frame->begin_x == MANEUVRE_4_BEGIN_X || stack->card->frame->begin_x == MANEUVRE_5_BEGIN_X || stack->card->frame->begin_x == MANEUVRE_6_BEGIN_X)); } bool valid_move(struct stack *origin, struct stack *destination) { if (origin->card->face == EXPOSED) { if (stock_stack(origin) && waste_pile_stack(destination)) { return (true); } else if (foundation_stack(destination)) { if (stack_empty(destination)) { if (origin->card->value == ACE) { return (true); } } else if (origin->card->suit == destination->card->suit && origin->card->value == destination->card->value + 1) { return (true); } } else if (maneuvre_stack(destination)) { if (stack_empty(destination)) { if (origin->card->value == KING) { return (true); } } else if (destination->card->face == EXPOSED && (origin->card->suit + destination->card->suit) % 2 == 1 && origin->card->value + 1 == destination->card->value) { return (true); } } } return (false); } void move_card(struct stack **origin, struct stack **destination) { struct card *tmp; if ((tmp = stack_pop(origin))) { int destination_y = (*destination)->card->frame->begin_y; int destination_x = (*destination)->card->frame->begin_x; if (!stack_empty(*destination) && maneuvre_stack(*destination)) { destination_y++; } stack_push(destination, tmp); frame_set((*destination)->card->frame, destination_y, destination_x); } } void move_block(struct stack **origin, struct stack **destination, int block_size) { struct stack *tmp; stack_malloc(&tmp); stack_init(tmp); for (int i = 0; i < block_size; i++) { stack_push(&tmp, stack_pop(origin)); } for (int i = 0; i < block_size; i++) { move_card(&tmp, destination); } if (stack_length(*destination) > 1) { cursor->y += block_size; } stack_free(tmp); } static void fill_deck(struct deck *deck) { struct card *card[NUMBER_OF_CARDS]; for (int i = ACE; i <= KING; i++) { for (int j = DIAMONDS; j <= CLUBS; j++) { int index = 4 * (i - ACE) + j; card_malloc(&(card[index])); card_set(card[index], i, j, COVERED, 1, 1); stack_push(&(deck->stock), card[index]); } } } static void shuffle_deck(struct deck *deck) { struct card **card, tmp; int random; if (!(card = malloc(NUMBER_OF_CARDS * sizeof(*card)))) { tty_solitaire_generic_error(errno, __FILE__, __LINE__); } for (int i = 0; i < NUMBER_OF_CARDS; i++) { card[i] = stack_pop(&(deck->stock)); } srand(time(NULL)); for (int i = 0; i < NUMBER_OF_CARDS; i++) { random = rand() % (NUMBER_OF_CARDS); tmp = *card[i]; *card[i] = (*card[random]); *card[random] = tmp; } for (int i = 0; i < NUMBER_OF_CARDS; i++) { stack_push(&(deck->stock), card[i]); } free(card); } static void deal_cards(struct deck *deck) { for (int i = 0; i < MANEUVRE_STACKS_NUMBER; i++) { move_card(&(deck->stock), &(deck->maneuvre[i])); card_expose(deck->maneuvre[i]->card); for (int j = i + 1; j < MANEUVRE_STACKS_NUMBER; j++) { move_card(&(deck->stock), &(deck->maneuvre[j])); } } } void game_init(struct game *game, int passes_through_deck, int four_color_deck) { cursor_malloc(&cursor); cursor_init(cursor); deck_malloc(&deck); deck_init(deck); /* Setting initial stacks' coordinates. */ frame_set(deck->stock->card->frame, STOCK_BEGIN_Y, STOCK_BEGIN_X); frame_set(deck->waste_pile->card->frame, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X); for (int i = 0; i < FOUNDATION_STACKS_NUMBER; i++) { frame_set(deck->foundation[i]->card->frame, FOUNDATION_BEGIN_Y, foundation_begin_x(i)); } for (int i = 0; i < MANEUVRE_STACKS_NUMBER; i++) { frame_set(deck->maneuvre[i]->card->frame, MANEUVRE_BEGIN_Y, maneuvre_begin_x(i)); } game->four_color_deck = four_color_deck; fill_deck(deck); shuffle_deck(deck); deal_cards(deck); draw_cursor(cursor); draw_deck(deck); game->passes_through_deck_left = passes_through_deck; } void game_end() { cursor_free(cursor); deck_free(deck); } bool game_won() { // If any card in the maneuvre stacks is covered, game is not won. for (int i = 0; i < MANEUVRE_STACKS_NUMBER; i++) { for (struct stack *j = deck->maneuvre[i]; j != NULL; j = j->next) { if (j->card->face == COVERED) { return (false); } } } // If the stock pile or the waste pile aren't empty, game is not won. if (!stack_empty(deck->stock) || !stack_empty(deck->waste_pile)) { return (false); } return (true); } tty-solitaire-1.3.1/src/game.h000066400000000000000000000021541411444351000161750ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_GAME_H #define TTY_SOLITAIRE_GAME_H #include #include "stack.h" #include "deck.h" #include "cursor.h" #define NUMBER_OF_CARDS 52 #define STOCK_BEGIN_X 1 #define STOCK_BEGIN_Y 1 #define WASTE_PILE_BEGIN_X 9 #define WASTE_PILE_BEGIN_Y 1 #define FOUNDATION_BEGIN_Y 1 #define FOUNDATION_0_BEGIN_X 25 #define FOUNDATION_1_BEGIN_X 33 #define FOUNDATION_2_BEGIN_X 41 #define FOUNDATION_3_BEGIN_X 49 #define MANEUVRE_BEGIN_Y 9 #define MANEUVRE_0_BEGIN_X 1 #define MANEUVRE_1_BEGIN_X 9 #define MANEUVRE_2_BEGIN_X 17 #define MANEUVRE_3_BEGIN_X 25 #define MANEUVRE_4_BEGIN_X 33 #define MANEUVRE_5_BEGIN_X 41 #define MANEUVRE_6_BEGIN_X 49 struct game { int passes_through_deck_left; int four_color_deck; }; struct deck *deck; struct cursor *cursor; bool maneuvre_stack(struct stack *); bool stock_stack(struct stack *); bool valid_move(struct stack *, struct stack *); void move_card(struct stack **, struct stack **); void move_block(struct stack **, struct stack **, int); void game_init(struct game *, int, int); bool game_won(); void game_end(); #endif tty-solitaire-1.3.1/src/gui.c000066400000000000000000000074561411444351000160550ustar00rootroot00000000000000#include #include #include #include #include "card.h" #include "deck.h" #include "game.h" #include "gui.h" static const char *card_suits[4] = {"\u2666", "\u2660", "\u2665", "\u2663"}; static const char *card_values[13] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; static void draw_value(struct card *card) { mvwprintw(card->frame->window, 0, 0, card_values[card->value]); mvwprintw(card->frame->window, 4, 7 - strlen(card_values[card->value]), card_values[card->value]); } static void draw_suit(struct card *card) { if (game.four_color_deck == 0) { if (card->suit % 2 == 0) { wattron(card->frame->window, COLOR_PAIR(RED_ON_WHITE)); } else { wattron(card->frame->window, COLOR_PAIR(BLACK_ON_WHITE)); } } else { switch (card->suit) { case SPADES: wattron(card->frame->window, COLOR_PAIR(GREEN_ON_WHITE)); break; case DIAMONDS: wattron(card->frame->window, COLOR_PAIR(YELLOW_ON_WHITE)); break; case CLUBS: wattron(card->frame->window, COLOR_PAIR(BLACK_ON_WHITE)); break; case HEARTS: default: wattron(card->frame->window, COLOR_PAIR(RED_ON_WHITE)); break; } } mvwprintw(card->frame->window, 0, strlen(card_values[card->value]), card_suits[card->suit]); mvwprintw(card->frame->window, 4, 6 - strlen(card_values[card->value]), card_suits[card->suit]); if (card->suit % 2 == 0) { wattroff(card->frame->window, COLOR_PAIR(RED_ON_WHITE)); } else { wattroff(card->frame->window, COLOR_PAIR(BLACK_ON_WHITE)); } } static void draw_front(struct card *card) { wbkgd(card->frame->window, COLOR_PAIR(BLACK_ON_WHITE)); wborder(card->frame->window, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '); draw_value(card); draw_suit(card); } static void draw_back(struct card *card) { wbkgd(card->frame->window, COLOR_PAIR(WHITE_ON_BLUE)); box(card->frame->window, 0, 0); } void draw_card(struct card *card) { if (card->face == EXPOSED) { draw_front(card); } else { draw_back(card); } wrefresh(card->frame->window); } void draw_stack(struct stack *stack) { if (stack_empty(stack)) { box(stack->card->frame->window, 0, 0); if (stock_stack(stack)) { if (game.passes_through_deck_left >= 1) { mvwprintw(stack->card->frame->window, 2, 3, "O"); } else { mvwprintw(stack->card->frame->window, 2, 3, "X"); } } wrefresh(stack->card->frame->window); } else { if (maneuvre_stack(stack)) { struct stack *stack_reversed_stack = stack_reverse(stack); for (struct stack *i = stack_reversed_stack; i; i = i->next) { draw_card(i->card); } stack_free(stack_reversed_stack); } else { draw_card(stack->card); } } } void draw_deck(struct deck *deck) { draw_stack(deck->stock); draw_stack(deck->waste_pile); for (int i = 0; i < FOUNDATION_STACKS_NUMBER; i++) { draw_stack(deck->foundation[i]); } for (int i = 0; i < MANEUVRE_STACKS_NUMBER; i++) { draw_stack(deck->maneuvre[i]); } } void draw_cursor(struct cursor *cursor) { if (cursor->marked) { mvwin(cursor->window, cursor->y, cursor->x); waddch(cursor->window, '@'); } else { mvwin(cursor->window, cursor->y, cursor->x); waddch(cursor->window, '*'); } wrefresh(cursor->window); } void erase_card(struct card *card) { werase(card->frame->window); wbkgd(card->frame->window, WHITE_ON_GREEN); wrefresh(card->frame->window); } void erase_stack(struct stack *stack) { if (maneuvre_stack(stack)) { for (; stack; stack = stack->next) { erase_card(stack->card); } } else { erase_card(stack->card); } } void erase_cursor(struct cursor *cursor) { wdelch(cursor->window); wrefresh(cursor->window); } tty-solitaire-1.3.1/src/gui.h000066400000000000000000000010561411444351000160500ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_DRAW_H #define TTY_SOLITAIRE_DRAW_H #include "card.h" #include "stack.h" #include "deck.h" #include "cursor.h" #define BLACK_ON_WHITE 1 #define RED_ON_WHITE 2 #define GREEN_ON_WHITE 3 #define YELLOW_ON_WHITE 4 #define WHITE_ON_BLUE 5 #define WHITE_ON_GREEN 6 extern struct game game; void draw_card(struct card *); void draw_stack(struct stack *); void draw_deck(struct deck *); void draw_cursor(struct cursor *); void erase_card(struct card *); void erase_stack(struct stack *); void erase_cursor(struct cursor *); #endif tty-solitaire-1.3.1/src/keyboard.c000066400000000000000000000167061411444351000170670ustar00rootroot00000000000000#include #include #include #include "keyboard.h" #include "card.h" #include "stack.h" #include "game.h" #include "cursor.h" #include "gui.h" #include "common.h" static void handle_term_resize() { clear(); refresh(); if (term_size_ok()) { draw_deck(deck); draw_cursor(cursor); } else { mvprintw(1, 1, SMALL_TERM_MSG); } } /* FIXME: this function does not work on stacks with no marked cards. * In that case it returns the stack's length. */ static int marked_cards_count(struct stack *stack) { if (stack_length(stack) == 1) { if (stack->card->frame->begin_y > MANEUVRE_BEGIN_Y) { return(1); } } else if (stack_length(stack) > 1) { for (int marked_cards_count = 0; stack; stack = stack->next) { marked_cards_count++; if (!stack->next || (stack->card->frame->begin_y - stack->next->card->frame->begin_y) > 1) { return(marked_cards_count); } } } return(0); } static void unmark_cards(struct stack *stack) { int _marked_cards_count = marked_cards_count(stack); for (int i = 0; i < _marked_cards_count; stack = stack->next, i++) { card_unmark(stack->card); } } static void handle_card_movement(struct cursor *cursor) { struct stack **origin = cursor_stack(cursor); int key; if (cursor_on_invalid_spot(cursor) || stack_empty(*origin)) { return; } if (maneuvre_stack(*origin)) { erase_stack(*origin); card_mark((*origin)->card); draw_stack(*origin); cursor->y++; } erase_cursor(cursor); cursor_mark(cursor); draw_cursor(cursor); for (;;) { if ((key = getch()) == 'q' || key == 'Q') { endwin(); exit(0); } if (term_size_ok()) { switch (key) { case 'h': case 'j': case 'k': case 'l': case KEY_LEFT: case KEY_DOWN: case KEY_UP: case KEY_RIGHT: erase_cursor(cursor); cursor_move(cursor, cursor_direction(key)); draw_cursor(cursor); break; case 'm': if (origin == cursor_stack(cursor) && maneuvre_stack(*origin)) { for (struct stack *i = *origin; i && i->next; i = i->next) { if (i->next->card->face == EXPOSED && (i->card->frame->begin_y - i->next->card->frame->begin_y) > 1) { erase_stack(*origin); card_mark(i->next->card); draw_stack(*origin); break; } } } break; case 'M': if (origin == cursor_stack(cursor) && maneuvre_stack(*origin)) { for (struct stack *i = *origin; i && i->next; i = i->next) { if (i->next->card->face == EXPOSED && (i->card->frame->begin_y - i->next->card->frame->begin_y) > 1) { erase_stack(*origin); card_mark(i->next->card); draw_stack(*origin); } } } break; case 'n': if (origin == cursor_stack(cursor) && maneuvre_stack(*origin)) { for (struct stack *i = (*origin)->next; i; i = i->next) { if (i->next) { if ((i->card->frame->begin_y - i->next->card->frame->begin_y) > 1) { erase_stack(*origin); card_unmark(i->card); draw_stack(*origin); break; } } else { if (i->card->frame->begin_y == (MANEUVRE_BEGIN_Y + 1)) { erase_stack(*origin); card_unmark(i->card); draw_stack(*origin); break; } } } } break; case 'N': if (origin == cursor_stack(cursor) && maneuvre_stack(*origin)) { erase_stack(*origin); unmark_cards(*origin); card_mark((*origin)->card); draw_stack(*origin); } break; case KEY_SPACEBAR:; /* http://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg259382.html */ struct stack **destination = cursor_stack(cursor); int _marked_cards_count = marked_cards_count(*origin); if (maneuvre_stack(*origin) && _marked_cards_count > 0) { erase_stack(*origin); unmark_cards(*origin); draw_stack(*origin); } if (destination) { erase_stack(*origin); erase_cursor(cursor); if (_marked_cards_count > 1 && maneuvre_stack(*origin) && maneuvre_stack(*destination)) { struct stack *block = *origin; for (int i = 1; i < _marked_cards_count; block = block->next, i++) ; if (valid_move(block, *destination)) { move_block(origin, destination, _marked_cards_count); } } else { if (valid_move(*origin, *destination)) { if (maneuvre_stack(*destination)) { cursor->y++; } move_card(origin, destination); } } draw_stack(*origin); draw_stack(*destination); if (maneuvre_stack(*origin) && *origin == *destination) { erase_cursor(cursor); cursor->y--; } } cursor_unmark(cursor); draw_cursor(cursor); return; case KEY_ESCAPE: if (cursor_stack(cursor) == origin && maneuvre_stack(*origin)) { erase_cursor(cursor); cursor->y--; } if (marked_cards_count(*origin) > 0 && maneuvre_stack(*origin)) { erase_stack(*origin); unmark_cards(*origin); draw_stack(*origin); } if (cursor->marked) { cursor_unmark(cursor); draw_cursor(cursor); } return; case KEY_RESIZE: handle_term_resize(); break; case 'q': case 'Q': endwin(); game_end(); exit(0); } } else if (key == KEY_RESIZE) { handle_term_resize(); } } } void keyboard_event(int key) { if (key == 'q' || key == 'Q') { endwin(); game_end(); exit(0); } if (term_size_ok()) { switch (key) { case 'h': case 'j': case 'k': case 'l': case KEY_LEFT: case KEY_DOWN: case KEY_UP: case KEY_RIGHT: erase_cursor(cursor); cursor_move(cursor, cursor_direction(key)); draw_cursor(cursor); break; case KEY_SPACEBAR: if (cursor_on_stock(cursor)) { if (stack_empty(deck->stock)) { if (game.passes_through_deck_left >= 1) { while (!stack_empty(deck->waste_pile)) { move_card(&(deck->waste_pile), &(deck->stock)); card_cover(deck->stock->card); } draw_stack(deck->stock); draw_stack(deck->waste_pile); } } else { move_card(&(deck->stock), &(deck->waste_pile)); if (stack_empty(deck->stock)) { game.passes_through_deck_left--; } card_expose(deck->waste_pile->card); erase_stack(deck->waste_pile); draw_stack(deck->stock); draw_stack(deck->waste_pile); } } else { struct card *card; if (cursor_stack(cursor) && (card = (*cursor_stack(cursor))->card)->face == COVERED) { card_expose(card); draw_card(card); } else { handle_card_movement(cursor); } } break; case KEY_RESIZE: handle_term_resize(); break; } } else if (key == KEY_RESIZE) { handle_term_resize(); } } tty-solitaire-1.3.1/src/keyboard.h000066400000000000000000000004121411444351000170570ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_KEYBOARD_H #define TTY_SOLITAIRE_KEYBOARD_H #include "deck.h" #include "cursor.h" #define KEY_SPACEBAR 32 #define KEY_ESCAPE 27 extern struct deck *deck; extern struct cursor *cursor; extern struct game game; void keyboard_event(); #endif tty-solitaire-1.3.1/src/stack.c000066400000000000000000000062321411444351000163650ustar00rootroot00000000000000#include #include #include #include #include "stack.h" #include "card.h" #include "common.h" void stack_malloc(struct stack **stack) { if (!(*stack = malloc(sizeof(**stack)))) { tty_solitaire_generic_error(errno, __FILE__, __LINE__); } card_malloc(&((*stack)->card)); } void stack_init(struct stack *stack) { card_init(stack->card); stack->next = NULL; } void stack_free(struct stack *stack) { struct stack *tmp; for (; stack; stack = tmp) { tmp = stack->next; card_free(stack->card); free(stack); } } struct stack *stack_dup(struct stack *stack) { struct stack *iterator = stack; struct stack *tmp_stack, *new_stack; stack_malloc(&new_stack); stack_malloc(&tmp_stack); stack_init(new_stack); stack_init(tmp_stack); for (iterator = stack; iterator; iterator = iterator->next) { stack_push(&tmp_stack, card_dup(iterator->card)); } while (!stack_empty(tmp_stack)) { stack_push(&new_stack, (stack_pop(&tmp_stack))); } stack_free(tmp_stack); return(new_stack); } bool stack_empty(struct stack *stack) { return(stack->card->value == NO_VALUE && stack->card->suit == NO_SUIT && stack->card->face == NO_FACE && !stack->next); } int stack_length(struct stack *stack) { int stack_length = 0; if (!stack_empty(stack)) { for (stack_length = 1; stack->next; stack = stack->next, stack_length++) ; } return(stack_length); } void stack_push(struct stack **stack, struct card *card) { if (card) { if (stack_empty(*stack)) { card_free((*stack)->card); (*stack)->card = card; } else { /* Allocating by hand because stack_malloc() would * have allocated an unwanted card object. */ struct stack *new_stack = malloc(sizeof(*new_stack)); new_stack->card = card; new_stack->next = (*stack); *stack = new_stack; } } } struct card *stack_pop(struct stack **stack) { if(stack_empty(*stack)) { return(NULL); } else { struct card *popped_card = (*stack)->card; if (stack_length(*stack) == 1) { /* Remembering the stack position before clearing it. */ int begin_y = (*stack)->card->frame->begin_y; int begin_x = (*stack)->card->frame->begin_x; card_malloc(&((*stack)->card)); /* A stack_empty stack is a stack with a blank top card * and with stack->next == NULL. */ card_set((*stack)->card, NO_VALUE, NO_SUIT, NO_FACE, begin_y, begin_x); (*stack)->next = NULL; } else { struct stack *tmp = *stack; *stack = (*stack)->next; free(tmp); } return(popped_card); } } struct stack *stack_reverse(struct stack *stack) { struct stack *tmp_stack, *iterator; stack_malloc(&tmp_stack); stack_init(tmp_stack); if (stack_length(stack) > 1) { for (iterator = stack; iterator; iterator = iterator->next) { stack_push(&tmp_stack, card_dup(iterator->card)); } } else { card_set(tmp_stack->card, stack->card->value, stack->card->suit, stack->card->face, stack->card->frame->begin_y, stack->card->frame->begin_x); } return(tmp_stack); } tty-solitaire-1.3.1/src/stack.h000066400000000000000000000007611411444351000163730ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_STACK_H #define TTY_SOLITAIRE_STACK_H #include "card.h" struct stack { struct card *card; struct stack *next; }; void stack_malloc(struct stack **); void stack_init(struct stack *); void stack_free(struct stack *); bool stack_empty(struct stack *); int stack_length(struct stack *); void stack_push(struct stack **, struct card *); struct card *stack_pop(struct stack **); struct stack *stack_reverse(struct stack *); struct stack *stack_dup(struct stack *); #endif tty-solitaire-1.3.1/src/ttysolitaire.c000066400000000000000000000073131411444351000200150ustar00rootroot00000000000000#include #include #include #include #include #include #include "common.h" #include "game.h" #include "keyboard.h" #ifndef VERSION #define VERSION "n/a" #endif const char *program_name; struct game game; void version(); void usage(const char *); void draw_greeting(); int main(int argc, char *argv[]) { int option; int option_index; int passes_through_deck = 3; static int four_color_deck; static int no_background_color; static const struct option options[] = { {"help", no_argument, NULL, 'h'}, {"version", no_argument, NULL, 'v'}, {"passes", required_argument, NULL, 'p'}, {"four-color-deck", no_argument, &four_color_deck, 1}, {"no-background-color", no_argument, &no_background_color, 1}, {0, 0, 0, 0}}; program_name = basename(argv[0]); while ((option = getopt_long(argc, argv, "hvp:", options, &option_index)) != -1) { switch (option) { case 'v': version(); exit(0); case 'p': passes_through_deck = atoi(optarg); break; case 'h': case '?': usage(program_name); exit(0); case 0: /* If this option set a "no_argument" flag, do nothing else now. */ printf("options[option_index].name: %s\n", options[option_index].name); if (options[option_index].flag != 0) break; default: usage(program_name); exit(0); } } setlocale(LC_ALL, ""); initscr(); raw(); noecho(); keypad(stdscr, TRUE); start_color(); curs_set(FALSE); set_escdelay(0); if (no_background_color) { use_default_colors(); } else { assume_default_colors(COLOR_WHITE, COLOR_GREEN); } init_pair(1, COLOR_BLACK, COLOR_WHITE); init_pair(2, COLOR_RED, COLOR_WHITE); init_pair(3, COLOR_GREEN, COLOR_WHITE); init_pair(4, COLOR_YELLOW, COLOR_WHITE); init_pair(5, COLOR_WHITE, COLOR_BLUE); init_pair(6, COLOR_WHITE, COLOR_GREEN); int key; while (!term_size_ok()) { clear(); mvprintw(1, 1, SMALL_TERM_MSG); refresh(); if ((key = getch()) == 'q' || key == 'Q') { endwin(); return (0); } } clear(); draw_greeting(); refresh(); for (;;) { if ((key = getch()) == 'q' || key == 'Q') { endwin(); return (0); } if (term_size_ok()) { clear(); draw_greeting(); refresh(); if (key == KEY_SPACEBAR) { clear(); refresh(); game_init(&game, passes_through_deck, four_color_deck); break; } } else if (key == KEY_RESIZE) { clear(); mvprintw(1, 1, SMALL_TERM_MSG); refresh(); } } do { keyboard_event(getch()); } while (!game_won()); endwin(); game_end(); printf("You won.\n"); return (0); } void draw_greeting() { mvprintw(8, 26, "Welcome to tty-solitaire."); mvprintw(10, 21, "Move with the arrow keys or ."); mvprintw(11, 18, "Use the space bar to select and place cards."); mvprintw(12, 13, "After selecting a card you can use to select more"); mvprintw(13, 13, "and to select less. Press to select all."); mvprintw(15, 19, "Press the space bar to play or q to quit."); } void usage(const char *program_name) { printf("usage: %s [OPTIONS]\n", program_name); printf(" -v, --version Show version\n"); printf(" -h, --help Show this message\n"); printf(" -p, --passes Number of passes through the deck " "(default: 3)\n"); printf(" --four-color-deck Draw unique card suit colors " "(default: false)\n"); printf(" --no-background-color Don't draw background color " "(default: false)\n"); } void version() { printf("%s\n", VERSION); } tty-solitaire-1.3.1/tests/000077500000000000000000000000001411444351000154645ustar00rootroot00000000000000tty-solitaire-1.3.1/tests/card_test.c000066400000000000000000000026471411444351000176110ustar00rootroot00000000000000#include #include "test_helper.h" #include "../src/card.h" void test_card_init() { struct card *card; card_malloc(&card); card_init(card); assert(card->value == NO_VALUE); assert(card->suit == NO_SUIT); assert(card->face == NO_FACE); card_free(card); } void test_card_dup() { struct card *card_0, *card_1; const int begin_y = 5, begin_x = 10; card_malloc(&card_0); card_set(card_0, ACE, SPADES, EXPOSED, begin_y, begin_x); card_1 = card_dup(card_0); assert(card_0 != card_1); assert(cards_equal(card_0, card_1)); card_free(card_0); card_free(card_1); } void test_card_set() { struct card *card; int begin_y = 5; int begin_x = 10; card_malloc(&card); card_init(card); card_set(card, ACE, SPADES, EXPOSED, begin_y, begin_x); assert(card->value == ACE); assert(card->suit == SPADES); assert(card->face == EXPOSED); assert(card->frame->begin_y == begin_y); assert(card->frame->begin_x == begin_x); card_free(card); } void test_card_expose() { struct card *card; card_malloc(&card); card_init(card); card_expose(card); assert(card->face == EXPOSED); card_free(card); } void test_card_cover() { struct card *card; card_malloc(&card); card_init(card); card_cover(card); assert(card->face == COVERED); card_free(card); } void test_card() { test_card_init(); test_card_dup(); test_card_set(); test_card_expose(); test_card_cover(); } tty-solitaire-1.3.1/tests/cursor_test.c000066400000000000000000000001541411444351000202040ustar00rootroot00000000000000#include #include #include "../src/cursor.h" void test_cursor() { assert(true); } tty-solitaire-1.3.1/tests/deck_test.c000066400000000000000000000001501411444351000175710ustar00rootroot00000000000000#include #include #include "../src/deck.h" void test_deck() { assert(true); } tty-solitaire-1.3.1/tests/frame_test.c000066400000000000000000000017001411444351000177570ustar00rootroot00000000000000#include #include "test_helper.h" #include "../src/frame.h" void test_frame_init() { struct frame *frame; frame_malloc(&frame); frame_init(frame); assert(frame->window == NULL); assert(frame->begin_y == 0); assert(frame->begin_x == 0); frame_free(frame); } void test_frame_dup() { struct frame *frame_0, *frame_1; const int begin_y = 5, begin_x = 10; frame_malloc(&frame_0); frame_set(frame_0, begin_y, begin_x); frame_1 = frame_dup(frame_0); assert(frame_0 != frame_1); assert(frames_equal(frame_0, frame_1)); frame_free(frame_0); frame_free(frame_1); } void test_frame_set() { struct frame *frame; int begin_y = 5; int begin_x = 10; frame_malloc(&frame); frame_init(frame); frame_set(frame, begin_y, begin_x); assert(frame->begin_y == begin_y); assert(frame->begin_x == begin_x); frame_free(frame); } void test_frame() { test_frame_init(); test_frame_dup(); test_frame_set(); } tty-solitaire-1.3.1/tests/game_test.c000066400000000000000000000534711411444351000176120ustar00rootroot00000000000000#include #include "../src/stack.h" #include "../src/game.h" #include "test_helper.h" void test_valid_move_from_stock_to_stock() { struct stack *stock_0, *stock_1; stack_malloc(&stock_0); stack_malloc(&stock_1); stack_init(stock_0); stack_init(stock_1); card_set(stock_0->card, ACE, SPADES, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X); card_set(stock_1->card, KING, HEARTS, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X); assert(!valid_move(stock_0, stock_0)); assert(!valid_move(stock_0, stock_1)); assert(!valid_move(stock_1, stock_0)); assert(!valid_move(stock_1, stock_1)); stack_free(stock_0); stack_free(stock_1); } void test_valid_move_from_stock_to_waste_pile() { struct stack *stock, *waste_pile; stack_malloc(&stock); stack_malloc(&waste_pile); stack_init(stock); stack_init(waste_pile); card_set(stock->card, ACE, SPADES, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X); card_set(waste_pile->card, KING, HEARTS, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X); assert(valid_move(stock, waste_pile)); stack_free(stock); stack_free(waste_pile); } void test_valid_move_from_stock_to_foundation_stacks() { struct stack *stock, *foundation_stacks[4]; stack_malloc(&stock); stack_init(stock); card_set(stock->card, ACE, SPADES, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X); for (int i = 0; i < 4; i++) { stack_malloc(&foundation_stacks[i]); stack_init(foundation_stacks[i]); } card_set(foundation_stacks[0]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_0_BEGIN_X); card_set(foundation_stacks[1]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_1_BEGIN_X); card_set(foundation_stacks[2]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X); card_set(foundation_stacks[3]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X); for (int i = 0; i < 4; i++) { assert(!valid_move(stock, foundation_stacks[i])); } stack_free(stock); for (int i = 0; i < 4; i++) { stack_free(foundation_stacks[i]); } } void test_valid_move_from_stock_to_maneuvre_stacks() { struct stack *stock, *maneuvre_stacks[7]; stack_malloc(&stock); stack_init(stock); card_set(stock->card, ACE, SPADES, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X); for (int i = 0; i < 7; i++) { stack_malloc(&maneuvre_stacks[i]); stack_init(maneuvre_stacks[i]); } card_set(maneuvre_stacks[0]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X); card_set(maneuvre_stacks[1]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X); card_set(maneuvre_stacks[2]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X); card_set(maneuvre_stacks[3]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X); card_set(maneuvre_stacks[4]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X); card_set(maneuvre_stacks[5]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X); card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); for (int i = 0; i < 7; i++) { assert(!valid_move(stock, maneuvre_stacks[i])); } stack_free(stock); for (int i = 0; i < 7; i++) { stack_free(maneuvre_stacks[i]); } } void test_valid_move_from_waste_pile_to_stock() { struct stack *stock, *waste_pile; stack_malloc(&stock); stack_malloc(&waste_pile); stack_init(stock); stack_init(waste_pile); card_set(stock->card, ACE, SPADES, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X); card_set(waste_pile->card, KING, HEARTS, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X); assert(!valid_move(waste_pile, stock)); stack_free(stock); stack_free(waste_pile); } void test_valid_move_from_waste_pile_to_waste_pile() { struct stack *waste_pile_0, *waste_pile_1; stack_malloc(&waste_pile_0); stack_malloc(&waste_pile_1); stack_init(waste_pile_0); stack_init(waste_pile_1); card_set(waste_pile_0->card, ACE, SPADES, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X); card_set(waste_pile_1->card, KING, HEARTS, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X); assert(!valid_move(waste_pile_0, waste_pile_0)); assert(!valid_move(waste_pile_0, waste_pile_1)); assert(!valid_move(waste_pile_1, waste_pile_0)); assert(!valid_move(waste_pile_1, waste_pile_1)); stack_free(waste_pile_0); stack_free(waste_pile_1); } void test_valid_move_from_waste_pile_to_foundation_stacks() { struct stack *waste_pile, *foundation_stacks[4]; stack_malloc(&waste_pile); stack_init(waste_pile); card_set(waste_pile->card, TWO, SPADES, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X); for (int i = 0; i < 4; i++) { stack_malloc(&foundation_stacks[i]); stack_init(foundation_stacks[i]); } card_set(foundation_stacks[0]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_0_BEGIN_X); card_set(foundation_stacks[1]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_1_BEGIN_X); card_set(foundation_stacks[2]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X); card_set(foundation_stacks[3]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X); for (int i = 0; i < 4; i++) { assert(valid_move(waste_pile, foundation_stacks[i])); } stack_free(waste_pile); for (int i = 0; i < 4; i++) { stack_free(foundation_stacks[i]); } } void test_valid_move_from_waste_pile_to_maneuvre_stacks() { struct stack *waste_pile, *maneuvre_stacks[7]; stack_malloc(&waste_pile); stack_init(waste_pile); card_set(waste_pile->card, ACE, DIAMONDS, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X); for (int i = 0; i < 7; i++) { stack_malloc(&maneuvre_stacks[i]); stack_init(maneuvre_stacks[i]); } card_set(maneuvre_stacks[0]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X); card_set(maneuvre_stacks[1]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X); card_set(maneuvre_stacks[2]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X); card_set(maneuvre_stacks[3]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X); card_set(maneuvre_stacks[4]->card, TWO, CLUBS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X); card_set(maneuvre_stacks[5]->card, TWO, CLUBS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X); card_set(maneuvre_stacks[6]->card, TWO, CLUBS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); for (int i = 0; i < 7; i++) { assert(valid_move(waste_pile, maneuvre_stacks[i])); } stack_free(waste_pile); for (int i = 0; i < 7; i++) { stack_free(maneuvre_stacks[i]); } } void test_valid_move_from_foundation_stack_to_stock() { struct stack *stock, *foundation_stacks[4]; stack_malloc(&stock); stack_init(stock); card_set(stock->card, ACE, SPADES, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X); for (int i = 0; i < 4; i++) { stack_malloc(&foundation_stacks[i]); stack_init(foundation_stacks[i]); } card_set(foundation_stacks[0]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_0_BEGIN_X); card_set(foundation_stacks[1]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_1_BEGIN_X); card_set(foundation_stacks[2]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X); card_set(foundation_stacks[3]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X); for (int i = 0; i < 4; i++) { assert(!valid_move(foundation_stacks[i], stock)); } stack_free(stock); for (int i = 0; i < 4; i++) { stack_free(foundation_stacks[i]); } } void test_valid_move_from_foundation_stack_to_waste_pile() { struct stack *waste_pile, *foundation_stacks[4]; stack_malloc(&waste_pile); stack_init(waste_pile); card_set(waste_pile->card, ACE, SPADES, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X); for (int i = 0; i < 4; i++) { stack_malloc(&foundation_stacks[i]); stack_init(foundation_stacks[i]); } card_set(foundation_stacks[0]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_0_BEGIN_X); card_set(foundation_stacks[1]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_1_BEGIN_X); card_set(foundation_stacks[2]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X); card_set(foundation_stacks[3]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X); for (int i = 0; i < 4; i++) { assert(!valid_move(foundation_stacks[i], waste_pile)); } stack_free(waste_pile); for (int i = 0; i < 4; i++) { stack_free(foundation_stacks[i]); } } void test_valid_move_from_foundation_stack_to_foundation_stacks() { struct stack *foundation_stacks[4]; for (int i = 0; i < 4; i++) { stack_malloc(&foundation_stacks[i]); stack_init(foundation_stacks[i]); } card_set(foundation_stacks[0]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_0_BEGIN_X); card_set(foundation_stacks[1]->card, TWO, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_1_BEGIN_X); card_set(foundation_stacks[2]->card, THREE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X); card_set(foundation_stacks[3]->card, FOUR, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (i != j + 1) { assert(!valid_move(foundation_stacks[i], foundation_stacks[j])); } else { assert(valid_move(foundation_stacks[i], foundation_stacks[j])); } } } for (int i = 0; i < 4; i++) { stack_free(foundation_stacks[i]); } } void test_valid_move_from_foundation_stack_to_maneuvre_stacks() { struct stack *foundation_stacks[4]; struct stack *maneuvre_stacks[7]; for (int i = 0; i < 4; i++) { stack_malloc(&foundation_stacks[i]); stack_init(foundation_stacks[i]); } card_set(foundation_stacks[0]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_0_BEGIN_X); card_set(foundation_stacks[1]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_1_BEGIN_X); card_set(foundation_stacks[2]->card, ACE, CLUBS, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X); card_set(foundation_stacks[3]->card, ACE, CLUBS, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X); for (int i = 0; i < 7; i++) { stack_malloc(&maneuvre_stacks[i]); stack_init(maneuvre_stacks[i]); } card_set(maneuvre_stacks[0]->card, TWO, HEARTS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X); card_set(maneuvre_stacks[1]->card, TWO, HEARTS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X); card_set(maneuvre_stacks[2]->card, TWO, HEARTS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X); card_set(maneuvre_stacks[3]->card, TWO, HEARTS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X); card_set(maneuvre_stacks[4]->card, TWO, DIAMONDS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X); card_set(maneuvre_stacks[5]->card, TWO, DIAMONDS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X); card_set(maneuvre_stacks[6]->card, TWO, DIAMONDS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); for (int i = 0; i < 4; i++) { for (int j = 0; j < 7; j++) { assert(valid_move(foundation_stacks[i], maneuvre_stacks[j])); } } for (int i = 0; i < 4; i++) { stack_free(foundation_stacks[i]); } for (int i = 0; i < 7; i++) { stack_free(maneuvre_stacks[i]); } } void test_valid_move_from_maneuvre_stack_to_stock() { struct stack *stock, *maneuvre_stacks[7]; stack_malloc(&stock); stack_init(stock); card_set(stock->card, ACE, SPADES, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X); for (int i = 0; i < 7; i++) { stack_malloc(&maneuvre_stacks[i]); stack_init(maneuvre_stacks[i]); } card_set(maneuvre_stacks[0]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X); card_set(maneuvre_stacks[1]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X); card_set(maneuvre_stacks[2]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X); card_set(maneuvre_stacks[3]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X); card_set(maneuvre_stacks[4]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X); card_set(maneuvre_stacks[5]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X); card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); for (int i = 0; i < 7; i++) { assert(!valid_move(maneuvre_stacks[i], stock)); } stack_free(stock); for (int i = 0; i < 7; i++) { stack_free(maneuvre_stacks[i]); } } void test_valid_move_from_maneuvre_stack_to_waste_pile() { struct stack *waste_pile, *maneuvre_stacks[7]; stack_malloc(&waste_pile); stack_init(waste_pile); card_set(waste_pile->card, ACE, SPADES, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X); for (int i = 0; i < 7; i++) { stack_malloc(&maneuvre_stacks[i]); stack_init(maneuvre_stacks[i]); } card_set(maneuvre_stacks[0]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X); card_set(maneuvre_stacks[1]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X); card_set(maneuvre_stacks[2]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X); card_set(maneuvre_stacks[3]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X); card_set(maneuvre_stacks[4]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X); card_set(maneuvre_stacks[5]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X); card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); for (int i = 0; i < 7; i++) { assert(!valid_move(maneuvre_stacks[i], waste_pile)); } stack_free(waste_pile); for (int i = 0; i < 7; i++) { stack_free(maneuvre_stacks[i]); } } void test_valid_move_from_maneuvre_stack_to_foundation_stacks() { struct stack *foundation_stacks[4]; struct stack *maneuvre_stacks[7]; for (int i = 0; i < 4; i++) { stack_malloc(&foundation_stacks[i]); stack_init(foundation_stacks[i]); } card_set(foundation_stacks[0]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_0_BEGIN_X); card_set(foundation_stacks[1]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_1_BEGIN_X); card_set(foundation_stacks[2]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X); card_set(foundation_stacks[3]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X); for (int i = 0; i < 7; i++) { stack_malloc(&maneuvre_stacks[i]); stack_init(maneuvre_stacks[i]); } card_set(maneuvre_stacks[0]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X); card_set(maneuvre_stacks[1]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X); card_set(maneuvre_stacks[2]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X); card_set(maneuvre_stacks[3]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X); card_set(maneuvre_stacks[4]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X); card_set(maneuvre_stacks[5]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X); card_set(maneuvre_stacks[6]->card, TWO, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); for (int i = 0; i < 7; i++) { for (int j = 0; j < 4; j++) { assert(valid_move(maneuvre_stacks[i], foundation_stacks[j])); } } for (int i = 0; i < 4; i++) { stack_free(foundation_stacks[i]); } for (int i = 0; i < 7; i++) { stack_free(maneuvre_stacks[i]); } } void test_valid_move_from_maneuvre_stack_to_maneuvre_stacks() { struct stack *maneuvre_stacks[7]; for (int i = 0; i < 7; i++) { stack_malloc(&maneuvre_stacks[i]); stack_init(maneuvre_stacks[i]); } card_set(maneuvre_stacks[0]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X); card_set(maneuvre_stacks[1]->card, TWO, HEARTS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X); card_set(maneuvre_stacks[2]->card, THREE, CLUBS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X); card_set(maneuvre_stacks[3]->card, FOUR, DIAMONDS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X); card_set(maneuvre_stacks[4]->card, FIVE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X); card_set(maneuvre_stacks[5]->card, SIX, DIAMONDS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X); card_set(maneuvre_stacks[6]->card, SEVEN, CLUBS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { if (i + 1 != j) { assert(!valid_move(maneuvre_stacks[i], maneuvre_stacks[j])); } else { assert(valid_move(maneuvre_stacks[i], maneuvre_stacks[j])); } } } for (int i = 0; i < 7; i++) { stack_free(maneuvre_stacks[i]); } } void test_move_card_from_stack_empty_stack_to_stack_empty_stack() { struct stack *origin, *destination, *new_origin, *new_destination, *origin_duplicate, *destination_duplicate; stack_malloc(&origin); stack_malloc(&destination); stack_init(origin); stack_init(destination); new_origin = origin; new_destination = destination; origin_duplicate = stack_dup(origin); destination_duplicate = stack_dup(destination); move_card(&new_origin, &new_destination); assert(origin == new_origin); assert(stacks_equal(origin, origin_duplicate)); assert(destination == new_destination); assert(stacks_equal(destination, destination_duplicate)); stack_free(origin_duplicate); stack_free(destination_duplicate); stack_free(origin); stack_free(destination); } void test_move_card_from_stack_empty_stack_to_non_stack_empty_stack() { struct stack *origin, *destination, *new_origin, *new_destination, *origin_duplicate, *destination_duplicate; struct card *card; card_malloc(&card); card_init(card); card_set(card, ACE, SPADES, EXPOSED, 0, 0); stack_malloc(&origin); stack_malloc(&destination); stack_init(origin); stack_init(destination); new_origin = origin; new_destination = destination; stack_push(&new_destination, card); origin_duplicate = stack_dup(origin); destination_duplicate = stack_dup(destination); move_card(&new_origin, &new_destination); assert(origin == new_origin); assert(stacks_equal(origin, origin_duplicate)); assert(destination == new_destination); assert(stacks_equal(destination, destination_duplicate)); stack_free(origin_duplicate); stack_free(destination_duplicate); stack_free(origin); stack_free(destination); } void test_move_card_from_non_stack_empty_stack_to_stack_empty_stack() { struct stack *origin, *destination; struct card *card[6]; for (int i = 0; i < 6; i++) { card_malloc(&card[i]); card_init(card[i]); card_set(card[i], TWO + i, i % 5, i % 2, 99, 99); } stack_malloc(&origin); stack_malloc(&destination); stack_init(origin); stack_init(destination); for (int i = 0; i < 6; i++) { stack_push(&origin, card[i]); } move_card(&origin, &destination); assert(stack_length(origin) == 5); assert(stack_length(destination) == 1); assert(cards_equal(destination->card, card[5])); move_card(&origin, &destination); assert(stack_length(origin) == 4); assert(stack_length(destination) == 2); assert(cards_equal(destination->card, card[4])); move_card(&origin, &destination); assert(stack_length(origin) == 3); assert(stack_length(destination) == 3); assert(cards_equal(destination->card, card[3])); stack_free(origin); stack_free(destination); } void test_move_card_from_non_stack_empty_stack_to_non_stack_empty_stack() { struct stack *origin, *destination; struct card *card[6]; for (int i = 0; i < 6; i++) { card_malloc(&card[i]); card_init(card[i]); card_set(card[i], TWO + i, i % 5, i % 2, 99, 99); } stack_malloc(&origin); stack_malloc(&destination); stack_init(origin); stack_init(destination); for (int i = 0; i < 3; i++) { stack_push(&origin, card[i]); } for (int i = 3; i < 6; i++) { stack_push(&destination, card[i]); } move_card(&origin, &destination); assert(stack_length(origin) == 2); assert(stack_length(destination) == 4); assert(cards_equal(destination->card, card[2])); assert(cards_equal(destination->next->card, card[5])); stack_free(origin); stack_free(destination); } void test_move_card_should_not_change_stack_empty_stack_coordinates() { struct stack *origin, *destination; struct card *card[2]; card_malloc(&card[0]); card_malloc(&card[1]); card_init(card[0]); card_init(card[1]); card_set(card[0], ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X); card_set(card[1], KING, HEARTS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X); stack_malloc(&origin); stack_malloc(&destination); stack_init(origin); stack_init(destination); stack_push(&origin, card[0]); stack_push(&destination, card[1]); move_card(&origin, &destination); assert(origin->card->frame->begin_y == MANEUVRE_BEGIN_Y); assert(origin->card->frame->begin_x == MANEUVRE_0_BEGIN_X); stack_free(origin); stack_free(destination); } void test_game() { test_valid_move_from_stock_to_stock(); test_valid_move_from_stock_to_waste_pile(); test_valid_move_from_stock_to_foundation_stacks(); test_valid_move_from_stock_to_maneuvre_stacks(); test_valid_move_from_waste_pile_to_stock(); test_valid_move_from_waste_pile_to_waste_pile(); test_valid_move_from_waste_pile_to_foundation_stacks(); test_valid_move_from_waste_pile_to_maneuvre_stacks(); test_valid_move_from_foundation_stack_to_stock(); test_valid_move_from_foundation_stack_to_waste_pile(); test_valid_move_from_foundation_stack_to_foundation_stacks(); test_valid_move_from_foundation_stack_to_maneuvre_stacks(); test_valid_move_from_maneuvre_stack_to_stock(); test_valid_move_from_maneuvre_stack_to_waste_pile(); test_valid_move_from_maneuvre_stack_to_foundation_stacks(); test_valid_move_from_maneuvre_stack_to_maneuvre_stacks(); test_move_card_from_stack_empty_stack_to_stack_empty_stack(); test_move_card_from_stack_empty_stack_to_non_stack_empty_stack(); test_move_card_from_non_stack_empty_stack_to_stack_empty_stack(); test_move_card_from_non_stack_empty_stack_to_non_stack_empty_stack(); test_move_card_should_not_change_stack_empty_stack_coordinates(); } tty-solitaire-1.3.1/tests/gui_test.c000066400000000000000000000001461411444351000174540ustar00rootroot00000000000000#include #include #include "../src/gui.h" void test_gui() { assert(true); } tty-solitaire-1.3.1/tests/keyboard_test.c000066400000000000000000000001601411444351000204640ustar00rootroot00000000000000#include #include #include "../src/keyboard.h" void test_keyboard() { assert(true); } tty-solitaire-1.3.1/tests/stack_test.c000066400000000000000000000166571411444351000200130ustar00rootroot00000000000000#include #include "test_helper.h" #include "../src/stack.h" void test_stack_init() { struct stack *stack; stack_malloc(&stack); stack_init(stack); assert(stack->card->value == NO_VALUE); assert(!stack->next); stack_free(stack); } void test_stack_dup() { struct stack *stack_0, *stack_1; struct card *card[5]; const int begin_y = 5, begin_x = 10; stack_malloc(&stack_0); stack_init(stack_0); for (int i = 0; i < 5; i++) { card_malloc(&card[i]); card_set(card[i], i, SPADES, EXPOSED, begin_y, begin_x); stack_push(&stack_0, card[i]); } stack_1 = stack_dup(stack_0); assert(stack_0 != stack_1); assert(stacks_equal(stack_0, stack_1)); stack_free(stack_0); stack_free(stack_1); } void test_stack_empty_on_stack_empty_stack() { struct stack *stack; stack_malloc(&stack); stack_init(stack); assert(stack_empty(stack)); stack_free(stack); } void test_stack_empty_on_non_stack_empty_stack() { struct stack *stack; struct card *card; card_malloc(&card); card_init(card); card_set(card, ACE, SPADES, EXPOSED, 0, 0); stack_malloc(&stack); stack_init(stack); stack_push(&stack, card); assert(!stack_empty(stack)); stack_free(stack); } void test_stack_length() { struct stack *stack; struct card *card[4]; stack_malloc(&stack); stack_init(stack); assert(stack_length(stack) == 0); for (int i = 0; i < 4; i++) { card_malloc(&card[i]); card_init(card[i]); card_set(card[i], i, SPADES, EXPOSED, 0, 0); stack_push(&stack, card[i]); assert(stack_length(stack) == i + 1); } stack_free(stack); } void test_stack_push_on_stack_empty_stack() { struct stack *stack; struct card *card; card_malloc(&card); card_init(card); card_set(card, ACE, SPADES, EXPOSED, 0, 0); stack_malloc(&stack); stack_init(stack); stack_push(&stack, card); assert(cards_equal(stack->card, card)); assert(!stack->next); stack_free(stack); } void test_stack_push_on_non_stack_empty_stack() { struct stack *stack; struct card *card_0, *card_1; card_malloc(&card_0); card_malloc(&card_1); card_init(card_0); card_init(card_1); card_set(card_0, ACE, SPADES, EXPOSED, 0, 0); card_set(card_1, ACE, HEARTS, EXPOSED, 0, 0); stack_malloc(&stack); stack_init(stack); stack_push(&stack, card_0); stack_push(&stack, card_1); assert(cards_equal(stack->card, card_1)); assert(cards_equal(stack->next->card, card_0)); assert(!stack->next->next); stack_free(stack); } void test_stack_push_null_on_stack_empty_stack() { struct stack *stack, *old_stack; stack_malloc(&stack); stack_init(stack); old_stack = stack; stack_push(&stack, NULL); assert(cards_equal(stack->card, old_stack->card)); assert(!stack->next); stack_free(stack); } void test_stack_push_null_on_non_stack_empty_stack() { struct stack *stack, *old_stack; struct card *card; card_malloc(&card); card_init(card); card_set(card, ACE, SPADES, EXPOSED, 0, 0); stack_malloc(&stack); stack_init(stack); old_stack = stack_dup(stack); stack_push(&stack, NULL); assert(cards_equal(stack->card, old_stack->card)); assert(stacks_equal(stack->next, old_stack->next)); stack_free(stack); } void test_stack_pop_on_stack_empty_stack() { struct stack *stack; struct card *stack_popped_card; stack_malloc(&stack); stack_init(stack); stack_popped_card = stack_pop(&stack); assert(stack_empty(stack)); assert(!stack_popped_card); stack_free(stack); } void test_stack_pop_on_stack_with_one_element() { struct stack *stack; struct card *card, *stack_popped_card; card_malloc(&card); card_init(card); card_set(card, ACE, SPADES, EXPOSED, 0, 0); stack_malloc(&stack); stack_init(stack); stack_push(&stack, card); stack_popped_card = stack_pop(&stack); assert(stack_empty(stack)); assert(stack_popped_card == card); stack_free(stack); card_free(stack_popped_card); } void test_stack_pop_on_stack_with_more_than_one_element() { struct stack *stack, *old_stack_next; struct card *card[3], *stack_popped_card; stack_malloc(&stack); stack_init(stack); for (int i = 0; i < 3; i++) { card_malloc(&card[i]); card_init(card[i]); card_set(card[i], ACE, SPADES, EXPOSED, 0, 0); stack_push(&stack, card[i]); } old_stack_next = stack->next; stack_popped_card = stack_pop(&stack); assert(stack_length(stack) == 2); assert(stack == old_stack_next); assert(stack_popped_card == card[2]); stack_free(stack); card_free(stack_popped_card); } void test_stack_reverse_on_stack_empty_stack() { struct stack *stack, *old_stack, *stack_reversed_stack; stack_malloc(&stack); stack_init(stack); old_stack = stack; stack_reversed_stack = stack_reverse(stack); assert(stacks_equal(stack_reversed_stack, old_stack)); stack_free(stack); stack_free(stack_reversed_stack); } void test_stack_reverse_on_stack_with_one_element() { struct stack *stack, *old_stack, *stack_reversed_stack; struct card *card; card_malloc(&card); card_init(card); card_set(card, ACE, SPADES, EXPOSED, 0, 0); stack_malloc(&stack); stack_init(stack); stack_push(&stack, card); old_stack = stack; stack_reversed_stack = stack_reverse(stack); assert(stacks_equal(stack_reversed_stack, old_stack)); stack_free(stack_reversed_stack); stack_free(stack); } void test_stack_reverse_on_stack_with_more_than_one_element() { struct stack *stack, *old_stack, *stack_reversed_stack, *unstack_reversed_stack; struct card *card[3]; stack_malloc(&stack); stack_init(stack); for (int i = 0; i < 3; i++) { card_malloc(&card[i]); card_init(card[i]); card_set(card[i], TWO + i, DIAMONDS + i, EXPOSED, 0, 0); stack_push(&stack, card[i]); } old_stack = stack_dup(stack); stack_reversed_stack = stack_reverse(stack); stack_malloc(&unstack_reversed_stack); stack_init(unstack_reversed_stack); for (int i = 0; i < 3; i++) { stack_push(&unstack_reversed_stack, stack_pop(&stack_reversed_stack)); } assert(stacks_equal(unstack_reversed_stack, old_stack)); stack_free(unstack_reversed_stack); stack_free(stack_reversed_stack); stack_free(old_stack); stack_free(stack); } void test_stack_reverse_should_not_change_stack() { struct stack *stack, *stack_reversed_stack_0, *stack_reversed_stack_1; struct card *card[3]; stack_malloc(&stack); stack_init(stack); for (int i = 0; i < 3; i++) { card_malloc(&card[i]); card_init(card[i]); card_set(card[i], TWO + i, DIAMONDS + i, EXPOSED, 0, 0); stack_push(&stack, card[i]); } stack_reversed_stack_0 = stack_reverse(stack); stack_reversed_stack_1 = stack_reverse(stack_reversed_stack_0); assert(!stacks_equal(stack, stack_reversed_stack_0)); assert(stacks_equal(stack, stack_reversed_stack_1)); stack_free(stack_reversed_stack_0); stack_free(stack_reversed_stack_1); stack_free(stack); } void test_stack() { test_stack_init(); test_stack_dup(); test_stack_empty_on_stack_empty_stack(); test_stack_empty_on_non_stack_empty_stack(); test_stack_length(); test_stack_push_on_stack_empty_stack(); test_stack_push_on_non_stack_empty_stack(); test_stack_push_null_on_stack_empty_stack(); test_stack_pop_on_stack_empty_stack(); test_stack_pop_on_stack_with_one_element(); test_stack_pop_on_stack_with_more_than_one_element(); test_stack_reverse_on_stack_empty_stack(); test_stack_reverse_on_stack_with_one_element(); test_stack_reverse_on_stack_with_more_than_one_element(); test_stack_reverse_should_not_change_stack(); } tty-solitaire-1.3.1/tests/test_helper.c000066400000000000000000000020321411444351000201430ustar00rootroot00000000000000#include "test_helper.h" bool frames_equal(struct frame *frame_0, struct frame *frame_1) { if (frame_0 && frame_1) { return(frame_0->begin_y == frame_1->begin_y && frame_0->begin_x == frame_1->begin_x); } else if ((frame_0 && !frame_1) || (!frame_0 && frame_1)) { return(false); } else { return(true); } } bool cards_equal(struct card *card_0, struct card *card_1) { if (card_0 && card_1) { return(frames_equal(card_0->frame, card_1->frame) && card_0->value == card_1->value && card_0->suit == card_1->suit && card_0->face == card_1->face); } else if ((card_0 && !card_1) || (!card_0 && card_1)) { return(false); } else { return(true); } } bool stacks_equal(struct stack *stack_0, struct stack *stack_1) { if (stack_0 && stack_1) { return(cards_equal(stack_0->card, stack_1->card) && stacks_equal(stack_0->next, stack_1->next)); } else if ((stack_0 && !stack_1) || (!stack_0 && stack_1)) { return(false); } else { return(true); } } tty-solitaire-1.3.1/tests/test_helper.h000066400000000000000000000005121411444351000201510ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_TEST_HELPER_H #define TTY_SOLITAIRE_TEST_HELPER_H #include #include "../src/frame.h" #include "../src/card.h" #include "../src/stack.h" bool frames_equal(struct frame *, struct frame *); bool cards_equal(struct card *, struct card *); bool stacks_equal(struct stack *, struct stack *); #endif tty-solitaire-1.3.1/tests/test_helper_test.c000066400000000000000000000075711411444351000212170ustar00rootroot00000000000000#include #include "test_helper.h" void test_frames_equal_with_two_nulls() { assert(frames_equal(NULL, NULL)); } void test_frames_equal_with_one_null() { struct frame *frame; frame_malloc(&frame); assert(!frames_equal(frame, NULL)); assert(!frames_equal(NULL, frame)); frame_free(frame); } void test_frames_equal_with_two_equivalent_frames() { struct frame *frame_0, *frame_1; const int begin_y = 5, begin_x = 10; frame_malloc(&frame_0); frame_malloc(&frame_1); frame_set(frame_0, begin_y, begin_x); frame_set(frame_1, begin_y, begin_x); assert(frames_equal(frame_0, frame_1)); frame_free(frame_0); frame_free(frame_1); } void test_frames_equal_with_two_frame_pointers_to_the_same_address() { struct frame *frame; frame_malloc(&frame); frame_init(frame); assert(frames_equal(frame, frame)); frame_free(frame); } void test_cards_equal_with_two_nulls() { assert(cards_equal(NULL, NULL)); } void test_cards_equal_with_one_null() { struct card *card; card_malloc(&card); assert(!cards_equal(card, NULL)); assert(!cards_equal(NULL, card)); } void test_cards_equal_with_two_equivalent_cards() { struct card *card_0, *card_1; const int begin_y = 5, begin_x = 10; card_malloc(&card_0); card_malloc(&card_1); card_set(card_0, ACE, SPADES, EXPOSED, begin_y, begin_x); card_set(card_1, ACE, SPADES, EXPOSED, begin_y, begin_x); assert(cards_equal(card_0, card_1)); card_free(card_0); card_free(card_1); } void test_cards_equal_with_two_card_pointers_to_the_same_address() { struct card *card; card_malloc(&card); card_init(card); assert(cards_equal(card, card)); card_free(card); } void test_stacks_equal_with_two_nulls() { assert(stacks_equal(NULL, NULL)); } void test_stacks_equal_with_one_null() { struct stack *stack; stack_malloc(&stack); stack_init(stack); assert(!stacks_equal(stack, NULL)); assert(!stacks_equal(NULL, stack)); stack_free(stack); } void test_stacks_equal_with_two_equivalent_stacks() { struct stack *stack_0, *stack_1; struct card *card_0, *card_1; const int begin_y = 5, begin_x = 10; card_malloc(&card_0); card_malloc(&card_1); card_set(card_0, ACE, SPADES, EXPOSED, begin_y, begin_x); card_set(card_1, ACE, SPADES, EXPOSED, begin_y, begin_x); stack_malloc(&stack_0); stack_malloc(&stack_1); stack_init(stack_0); stack_init(stack_1); stack_push(&stack_0, card_0); stack_push(&stack_1, card_1); assert(stacks_equal(stack_0, stack_1)); stack_free(stack_0); stack_free(stack_1); } void test_stacks_equal_with_two_different_stacks() { struct stack *stack_0, *stack_1; struct card *card_0, *card_1; const int begin_y = 5, begin_x = 10; card_malloc(&card_0); card_malloc(&card_1); card_set(card_0, ACE, SPADES, EXPOSED, begin_y, begin_x); card_set(card_1, KING, HEARTS, EXPOSED, begin_y, begin_x); stack_malloc(&stack_0); stack_malloc(&stack_1); stack_init(stack_0); stack_init(stack_1); stack_push(&stack_0, card_0); stack_push(&stack_1, card_1); assert(!stacks_equal(stack_0, stack_1)); stack_free(stack_0); stack_free(stack_1); } void test_stacks_equal_with_two_stack_pointers_to_the_same_address() { struct stack *stack; stack_malloc(&stack); stack_init(stack); assert(stacks_equal(stack, stack)); stack_free(stack); } void test_test_helper() { test_frames_equal_with_two_nulls(); test_frames_equal_with_one_null(); test_frames_equal_with_two_equivalent_frames(); test_frames_equal_with_two_frame_pointers_to_the_same_address(); test_cards_equal_with_two_nulls(); test_cards_equal_with_two_equivalent_cards(); test_cards_equal_with_two_card_pointers_to_the_same_address(); test_stacks_equal_with_two_nulls(); test_stacks_equal_with_one_null(); test_stacks_equal_with_two_equivalent_stacks(); test_stacks_equal_with_two_different_stacks(); test_stacks_equal_with_two_stack_pointers_to_the_same_address(); } tty-solitaire-1.3.1/tests/ttysolitaire_test.c000066400000000000000000000005371411444351000214300ustar00rootroot00000000000000#include "ttysolitaire_test.h" #include "../src/game.h" const char *program_name; struct game game; int main(int argc, const char *argv[]) { program_name = argv[0]; (void) argc; test_card(); test_cursor(); test_deck(); test_gui(); test_frame(); test_game(); test_keyboard(); test_stack(); test_test_helper(); return(0); } tty-solitaire-1.3.1/tests/ttysolitaire_test.h000066400000000000000000000003631411444351000214320ustar00rootroot00000000000000#ifndef TTY_SOLITAIRE_TEST_H #define TTY_SOLITAIRE_TEST_H void test_card(); void test_cursor(); void test_deck(); void test_gui(); void test_frame(); void test_game(); void test_keyboard(); void test_stack(); void test_test_helper(); #endif