rpms/jakarta-commons-dbcp/devel commons-build.tar.gz, NONE, 1.1 commons-dbcp-1.2.1-TestConnectionPool.patch, NONE, 1.1 commons-dbcp-1.2.1-TestJOCLed.patch, NONE, 1.1 commons-dbcp-1.2.1-navigation_xml.patch, NONE, 1.1 commons-dbcp-1.2.1-project_properties.patch, NONE, 1.1 commons-dbcp-1.2.1-project_xml.patch, NONE, 1.1 dbcp-1.2.1-jpp-depmap.xml, NONE, 1.1 pom-maven2jpp-depcat.xsl, NONE, 1.1 pom-maven2jpp-mapdeps.xsl, NONE, 1.1 pom-maven2jpp-newdepmap.xsl, NONE, 1.1
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Thu Jul 20 22:21:47 UTC 2006
Author: dbhole
Update of /cvs/dist/rpms/jakarta-commons-dbcp/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv30850
Added Files:
commons-build.tar.gz
commons-dbcp-1.2.1-TestConnectionPool.patch
commons-dbcp-1.2.1-TestJOCLed.patch
commons-dbcp-1.2.1-navigation_xml.patch
commons-dbcp-1.2.1-project_properties.patch
commons-dbcp-1.2.1-project_xml.patch dbcp-1.2.1-jpp-depmap.xml
pom-maven2jpp-depcat.xsl pom-maven2jpp-mapdeps.xsl
pom-maven2jpp-newdepmap.xsl
Log Message:
Add new files to cvs.
--- NEW FILE commons-build.tar.gz ---
û
C
:G at IÞÑl¾@Uxô@Á«Oaü1ì²F4ì ×ùÝE±ã
ùݸ73;{,à VBXÃþË<g½E[%>;÷6jÊaI!'lÅ°FQµõÃçF=â u,%ª8{Hb$óÁ&ÕöÕ§bÖ@÷,Þ¨-7º"Âça
ÍØínı½õõׯ
+ÙN¨cÐÌ$&{ô1
cªÛ=Ò(Zϧ¯ê3×Vëüª;9çXî>)·<ëhGî¯V×?uSß\@¥'Jî[Äu
RukëØ
¾8 ª
2U A´ú¼¸
1Cq/«Å[V$â a¤ú&Ø\}*Ö±>C³#ëS0
úÑXÚ´35Þ¦6ÛàÆÁ±IdErí&´¸¶¥ñ¢¥4·
:κ¦CVÚÏêO=ñvèwçöÑÞÊA<âh¦°Çâp¨+-èÌHöåÆXµNJþ4N&icô4 TKæèXw®ervd 2%
æÔ-C¢ÐÈ«é¼uuÜ}â%Ò¡¾Ï2\sï§`ñ¯V°ö`#`Ðäy@?߬ëæÄ`ðÎ5U8qhH+võÝoFzz_'[dZ7ØO3HQ«ëpXaì. õâ£lÊÊ8,4ôo`ô¸¤Äâ¥yô³ØB«QÈBu!®%ØBódÍQ{AsX)çÆ!ôÊøµ"n½XX¥¼qaxTÁf¿*¼ÿ¹(·0TcQqô¸ç35©ujQ&a\}Ê«ÏN'X7HùR<Ü~WJ}òu±ÃÀtE
Ϩ¦u]ÏáLç, ÈÝA6PÞÌ@c¹Úævéݧ¢eÆÀnh#<ÃU$ý£/PóUÒ¼2g'4ßÝÝnð÷Àõà á¢!ºÌU`uØï°°OOù<,k¤ÎÆ=þBÏu¿%$#ê-D!69&ÌÃ
#´ÜíD»8éY6¬9nƼmñC §Ì¶=vm1"
PbFN¨88ek}¼ñ»÷È~'Ü*oÉЬÕ
´>BI-Ï@h ꨽¢÷ÎG@áÓ§`
A¹q Qç¢a}«â᥿Ä(Dǽ4é fU¡*d`68$Qà¹éxÔ~2Ìsi¾¡µYÚèZèÏMfé9D['ã ÿnch8Ð
ap
Æ|¹"@qZ£`p
~Æ=y°¶±I¸§ÒU*Q¦Q|*è
í6¶ç¨=ǯT%Ù_'àÿB¼ ñæƵHÆv1!©,À8é±Î6Ϲ( VPhxT%
v
£»`vú]9.¦Ñãûn_´n@½¨T%7õMÓ.oØ)Æj±ÈÁâ¬&ä,ÙÚ|¾rikÝÁy±äh¦HÍËYÊ
ÄH;+[ÖO
àDD0rÔZÊpe®Þ
¾%õÂ*ì»Cèju~i)ÁÂ
s^ëF0Ñ+±êÕFì-Te½ì¾yFeèLíÝ[0X¦JBëÂS#^ÛBJYSç×Îí{àV°?a/°¯°Á0´Y)QùvM<!Ë°Á5çCCÐH£Fèq"rè§%ÅgUÁmJIj ä¡Ù
Lèv>UsÅ:.zqxrÅ´Þ[±{A1môlî0¬xÖLÀ
¶JhÒ1¨
àÛÌnÄ&FM`ÞX¤¦müÍñ$¯1Ç?+d+9øá茶wï/ÇGVÏäÑÕíÔ|˦WÇ¿^RþrIBÏâ;F¿[b¼Hr¯¼D2ù2ïdb{%ÊõZÉ%u*·áäIVFû¦-ÆÀ(âøôt¬ïË'ªúÕ_¶2
Ôa[v®ãpQ
0* úØY6è×ê©+k´ç¯Ó»Boª&BÕ¥n²«ø¹Yfà2[M
ö?Æk·â
æ&3b¯8éNH!¨Ñ:L®¾eRúbX}¬ÑÊbV.Þëz[ÓßÐÊ6÷Ùez¨aÊõéZHéFP`Ûº,µ=µÀÅ,Åx¥Ì]ã¯1'ør~d=
£QRZÍo¬4=éRÝÈ%Ñ]-ÍD|0QÅÇÔçáIA»#¨®edR¯É5LXã©Dgèma¸b@£SñÌ%èQ¾sMeÞs üMNþæ1ïé 8Ð:
~/ÎØÛÝ_öýI,¸ÕÇâ-íªá]/RÇ-ð-üÇ fR¹ýsNZ<ðáGõ`¹ð%§H§%çT)&É]¶O°Ö1-L°jL ÛºÃöëIé"©öQP~1¼ÞOÁÂ\w)êáÄê²Ì`bvÄ:xˬa\e÷ó»íÁ/¯j®~aãiº¨`ÏBUè'AVÄät5
Qç°~B·ñU
¿E=á6cYÛ²;âǶ²ºéÿE¡ýü3ýÿùàÿ-ÂÓÿÿñ:®üúóO×^(íÿ¿4ÑÿkνYÿ×q?·íÝctügV{Ö¿9ß\ZXZnÎãÿYZZzÿyW\|ëÌ(ð|©¿lYù§Xp ~ýüüü£®Tð®?·áç¯àç/àÅÅûª.?O°ã/×CF1BÁ#1è@}²ñàs¬ý¥qICæ_*_ü{¥²äT*kO*ÚÓê~?)Û¿¿Açûô
¿ÇÊw%°SÄS<%ïñÖÊÿH+ÿcíþ}íþÖ§ðókøyO«Só¿âwé³¢Pé1ùWøù7³îÒ?T*ïü ÷ÊÌaÅß½û÷ÉÏÏ+ßß|rréä»ow.ßßÜ9ùÙÉ÷OnÂýwáÏ{ï¼8}÷ôûË0qÿÝo/Ãÿ{çäôt§òNå?o¾8=ýö&`xrú³Ó;
l´
FJI÷0éL÷«;H®î yFä_WÞw]3Qu#hë°al?Þȶôr©XytÓPDìÜAÀ> ,4Ï3$¤Ç¨%wD±×Ï801¯TפH:g)=BâCHÂå[ÄÏfÖÜ$&³øÖ+ªi@üLÙ_^_JÖfÈ3(¡õ\íÛóâ YEôà>¢ý¡ÎÇ
jo0PHv¡a¦µ
U=jÈõ!n¢çPKEÊ~»+¥~ã&J¯¡ ê&)¤sȲ|r]LmìO1µo_©<
~°I'qnÉ<\¿áô<¤ç°h®¯`l_?¡7°§Wí3p§^<çÀÒ#
è{³)-È])ؾ¼Ì|ú*Jq2÷î&Çñþå´O)Ú+jÀ¾¶
g
B at d4VwI+æ)$#L~!aÛdL oHwu%Ïà}UJ-ßBÒÌJ¸@¸°hÞmòCêÎõU¦´Ö-Îg}Fn±Çg³¾¸zz
Qe³¡Jè#b5®"`·üÐ:+þÉi=ÿ~ëVX±8~Ïëçêʾ¯ +³~M]Ùé;t嬮\s~«^ó¡Nø,ßL«ùo at eÞe±úÖY,AèÊ9ÖÿÉ*aW³JÙ,6WÏÎc³KÈïüü7ùyäF¹ñ<¿ °°¨¨]Ì.ú¢Ò Ç÷VÒÂH»¯ÐøQÆú*(,*.-+/¯`W|V^VZRTHr³?#I%T_ñ9Iy¥÷¼üÂⲪںú¼ú/jk*ËK1gþ§
Å¥åLÂçuµÕR\XÀ.xS÷¯°Æ¢òªúÆæÖvNG§½¥±®ªJUT×64µ´¶q8Ð)Õ¥%ÅÅ%0·ÍÆJ˪j[Ú;¹½ýCì¡?èíjoª,+-
¬õM®î¾þÁÁþ®öæz¨½¼åSÌ\RQÓÐÚÑÝ78Ì$2T4ÚßÕZ_Sinïêáñ"±D"vsëkkëaÿ%¹¶Ó=0Âe
µnl|L¯÷´7544·sûG D©L®PitN-rÛ[ZÚ ÷³!se]KWÿ¨PJÆ-¶É)E/íílçtõä*
[ósµF«7Zlͤñú»»z`/üWP\Q×ÂÊT-[ûg:Éæ¶êe¼¾þa¡B7n2t:ýÅ1=·°àvU¢¡aÈÿ¿°óÊj¹ÃµaÜ8¦×B6×üÒòÂôV*à eZmrÒnÓj4zcvy}s}ifB+¿ýÏì¼ÂªÆÎ!ÖdµMõj¥Zo]\^u«å2ÕÕ57?;5aPÉå*ͽº³ôÏÚ*É_T^×Þ/ÖML¹6£F&ȵæ©Yl¤I¯Ñ¡ÆµUˬ
bѵâ?E³¶q,áÿ º_RÕÄå«'¦ççgìc
áÈO¢1Ù®I«Ñ`0Mίíø¶]Fh`X¤±y|ÑT:\±Iù
eµm2£kquyÖ®÷öô z£Ù4¦×ÛÜkþPÈ¿ê4»»º¤F÷vôøì8æ[tÚ ÇÎ/®hèâiõyFÐ×ÑÖÞÕ7*+UlÕÿ5N-îã±½5§NÐÓÞÚÞÍÓL//Òû³ØÒ
ñø̺/°í±©G¹-dÕò
èóÚÞáQr}J3ÚÕÜÐÄ[CÇF½ðý?äV·È'<;¡oÉ®îl¬ÆeÛÙÝ7Äg6ÃGgÇ)õpGCm]s·È¸°~øø"á_6WXZÓ>¤\
F£ÁÕIõHGCUEEe
ìaé¸Û;{pÛrª9õÕ5<½Û¼||Ü]%ùËj9#Z×ÆA"q°éÒñ:«ÊËÔ6´tÇÝ;.Þií§¾ªª3¬qmÇ/]@~7¿®cT7³=:ùæ¢æ²²òÊêºæ~ÑØìNâÁSþY=¯³¡ºªÚ:µ={p~Xaòs ¿7vrÚ[¶)8
Õ¸u;úÅcnÈÿáããàQÈmª©Ç¾nÏO¢;ÓÙöOoÇÏ.OcÛ3c¢>NS=0©FA±aûáãÓýå i_k}]cÇ°jrm?uÜߢǯmH=µ;{ôà(´âÐ
û»Ú[[ÛÚ;ºzÅzçFøôñã³Èú$LMscKרzru/úW¦qý×@K¿Ü¶
t\$°GûzÙ½ÿW_ÿà¨Xk_
¦.Å·gÂ>N§W Z sz!W6vLàÑ£>8û'jXÈç©̳[ãóÓCÿE1ÚËíËÞÝÀgÊ<F
HuE?nÝåI½dthX 0:aÍ/:Íz-µaöË&é~øð$Ü\tONëþÈ@>æ\ñcáÀÚY-
¥óÔüÒÒ¼Ó¬U((f@¶Ö¹~pôàñãËãxhgmÁeWKxC<ù8¶xwgmÎ>®V(Tz³czÆå0j¤" ÍJkZú`¹m¤Ï//NSÑàöÊ,r»á^.·oT>>µ°¶±¾<7 ýÒh
¦ ÕlPx#*?ðÒzÎ ÌäÞÆRGéÃÈîÖò0ÒѾζVN÷°ToÞê°ëµ:½alL§òúûþ43f²´½ÚßlAíãJ~gKC}Ck× H5>a·Û,FVÍV¢RÊ%ü¡Þ®Î®>"HòJ«ê¬ÓµÕåyuL!èïl®«®¬ªmâôJZ½^§Q)dRH0:ØÛÙr¤CEeÕý|¹ÞbÂ2¦Â:&°¼ê'rH" ø£Ã}ݸÆZ) XPTVUßÊàçR*d¢Ñn[C5^
vùs
aÑë"À6_°ó Ö¢âüÏ©È(ýd+`Ñsï°óÞä
lðª ÿ
s`òòM>+
?/"
F6¿ôô¼2¯ò
gx\þ55D5?¢,`(WàPWVT𬡱©©±¡®¦º]ùcr]3@gHQS[Oâ66·´¶°[~
eJ~lL¯Q££<D¡Ñô¹` «¥¾¡hElÑ£b£D®ÒânîÝ£3- ûuúq³Ý9=3=e5êÔJ0Bw{sswH¤2,f#B«qÃ53㪠zuMÚl×ÜÒúææÚÒìÕl²
@ªðgg ÿ¼Q:Ü?,5ÎûS3+7òkT[·óKú$ß1½ø²ú©ükSz¹Lcõt~¨ä·9²ù1?ôÿî?]ÜñÁúA!Ãñ£ò¤ÃÃRÓ| aüoßÁCÅK,î8¼îSʵ00þ8~2?ÆÏ +q~pÂ2ó·>©¡¦êÅIxVW#æßõ3óg°{üÐ~È?©HÆÜT~jýP'ÍF=6¹²&ù'üa¾bb1ÒZ|ñS2B:¬?@þqlðS/áññÖÏqxÓmÑf³ºþï.N(qýáp¨,sÞèÑI2+DÂȶt>Xw¤¼Ü¤6ݽɹLÇý ìd1p<)t$ÿøôF(W§2¡P1>½©¨½Y ÿÔ/L·ç,*`Gª `]býäÒNè ¸97¡ó2Ãäo?ÚöØu°ÿðR÷¼S&½nÜ>¿¹{°X6*|¡Ò4³¾ËS¦7·Ö=SãrÁȨHmYÙòn.¹L*'ËåÍí¥é Z3;=ëÛ[«³67Âêìsk"Å9;7S8<08*ÕNý׬È<Äj!Õa½R*UhÍî¹¹iAºéàcûBDÉlÔÉC½ÝÝý#bÕH#À¨#ý==ý£bL5Ô ò%JÐRÍc)o Û3ÀiÇ[:ûGE©D0Ü×Åikëèà¤2©pt »£½½³g`/E¼!@q}£BL*æõt¶·µwöð¬}%0GZ9hKéïårZA6H]vwBáíÔàȶ¦vÃ!VT×¼omin¬«©XV¨Ýú1>@oëOæÕ×ÕÕ745ÃÕ}ÕUìª_T×. 0¤º¦ºª°K^éÏÊjÔÔTÞ,GS¹d×¼tÀv¯*ÉÕÊ.ý¬Ñ @¿ÈÊ.y
è
àèu1¢O^±KòÙ%¥/K Õ§EÅæ)ÈË@ÐU^!ÀLøÎ/,» (
V
óJØEyó
øÍÎ{ÈúÞ-Ô÷=bÃRb¬«bAyoØyjcg¬v
o#ü)@>À|8TU0F°ø9}XÐ÷
KËòËØå?ŹÃq¥a_MeY þò>¥
{Õý®¦
ÞvLý¡Ô><¬ÙdýuÕ_bàr¸½¼¸º9¾8GHÆä2Ðîüò$ØXÛ&.@£o¡-´±®¾OjYÜ=<>ï®{oæd ? ù£þuláé#PvÜAwkc3g at fñø£Ãýí¥ÙÙÅíðÑÝ~í̲A
Ú*úV<{¨ !ê
v¶µsGVw?²ï[uM/l
I~?óhhwqyñBKÞð$í:4~ma+V±)ûäÜæÁÑÅæS
à;¸hUòGøÊ @ú
{»8}
6p×`¯¥¡XEÑÆasØí£]u¯_WÕ5sìîlknt÷SÄÕM
üòÒbvñÌ!»þ/Jà]ʶWQ]ßHHÑUHþ7Ûá5ñØð9¯¶ñ=/ LYyÕ/iÉ.ù_1yå>§^fÌ}ìÂsßü|
9Ù&,¤,uEô¡+@'@k_P [¿
ôiÙÚ_iÔ
ñHO[]iCëß/ïìEâÑàúQ6:00"ÑN'
HâqËôÚ^ê<Sc¶¬s»ûû»Z¯ðú;jÊèñøZoóøÏPÁwÕJÝÄìæ^4Ýó®Ì:L:9¿¿£©:C,U¢ë*
Æ<³¥R¾õyPpÅC]Í5åEt3Rk#rrqÝ1*e
TÄ#©ããd4¸µè2Îéà¨H;¹ï$º=3.KTf÷ú^üèôôèpgeÚ¤éjª&Çúþ@íXÝ?:ÇǤ|¾Dòoÿðøìì$ñ¯ºÆ¥ítÑlÖ÷ù*û
E=móåc
\¥ÑÂîRi¹µomÆ(FFäc®õôéqlgÁ¦W)T(åþ{ʶ8VÖWæìZ>·Ú,±Ü0µ§û[sV=ªZÈ@¢êÆN÷ÜÝ Ì¶X¦³ÃÌ
÷}+.F.S¨µzO¥]&l½lÛL U&×Ò¦wkÅmÕaXÕ:
\&z½V%én+§WÉÏyyj´ ½L02<ê[üF$d 6¹°{©%øÞþRo² Xôv÷ô
}<ØßÓ°Þ3?ætt÷+X`Ðh¬±« ëv¤¨÷WèBÛZZëë@755BÔïr
°ØÕ/kQyf·þ£UV_U]]_îþ,s
Pä+ÁöètÚIK;LáßÒQ$ø(½Iy4É×ÃTDîòËjÏúe)êo5ÒB˸ÀÍ4
zxÌbQ>YßË|
Y/UWO8¬>ÖkÏ«6ããÙE
±¯ëhÅ+ò?.¸®£"~8¬¼+âÝ_Gûª qî«c½à\]?;duS>_÷« Zsa,t8U& ¦U|UÈz~ÓW0ØtÜÔTʤ³=oÐ0=°é³£sfÆM9¡èøâÃ"~S:©aÂhÏÏbâH¡Ñ¹/'bêi&òÊ Âwr|Wiã]Â4úÕéN~Æ.qrGª|ÖKèzÊ2dlIY²<Bæ¡b~£çéÓC*&C±`HTAÕåFd`úÉøë£kûg×¹0c4E%ëùáÓë+ëF)Ã7]Kë¹êÉõ3â9y«,Êù¼ ÀÕsýFeÉ^³r£®(O[zÜoöí
í0_3¸byoÒþ¾¡?¤&¿øÖRî*&t¡vR¿ºEH{K¿Î.d<âoRdZ%ôÜMH·2eU@·&ã%ÎõÄgh·-4vÄá3,éFËá5½F©ø*Lê ÀX¡ë§öóô
VC³
È+ÌY%×/`]ØE\À©´eqæ¥Ü}¡±mWTtú;s<ÙéuEW {õ«+ô¬À
¯¯E{©oðËìÿ¥#ÎZØ×ä·4Ô:ÓPk at MME2IÜ~YVV
dÐÏUWÈya\\=?dÁ ¿u.SûC8Lëg0heÔÐÜÁÑH(¥Åâ(2æªîàj$¼¡WÃÓë§Ô
ÈR¿ÅÑ=sõâaĦÈajt4ûá/aÞ2K§òmÖFÂ0Ë2É·YZ>ìI5ë+c"=1±-
åÞo¾Á»rSoó¬Üĺ·yUnrÍ[,*7µúmÎ\õ6?ÊM®| ÝJ¾Ízr+Þæ7·os·ßb-¹T\λy
CKÇq穽§°3ñ^åT©?Å°DÕõ!x³\Q
4¦èú¼ëgW:8ò.ÞbýåSé*&÷ó¯_>Ã
ÖC
m=ÌÏg=,xý°]LøÎÄs=Á¨ÐO1
agÓWW]¥ á¯+$ÏÞª%ñ lJf¿>|JÅeV°¾P]]?=äÐT\,æ ½i4ñ¶$,¹URm'Óú^A&bøƽ'[åÜxvëFÁ+J^Ь²>_Ã
>ÅWåDgÜ|Á×ÁüÝ¥tfMNÀ´ÒMJËëÏúÍ4Ó5ýoY¬Pf¶ÿ[HÁgè59ÖÿÎÊgÃò
Õ @6¨
PgÙ¬Ö/hLôÉÃûª2BL¢Ú;¹äüÒ«¡
èNÚÙÝÛ×ÓÙÖP
S÷Sô-¯iêèìio¬*Eµ½ ÕÞaX"éã4ùOÐU¶²ÓÇÈe¢¬Ñ
èóK«8ý
nÜhP
úÛ }~!)HÕzJ4ØÙXUÖJÖÏHùµ=|irÆí´¨ùÝT"¸ÛËWLFmÈf ^¾F×ÒÆæÛ,Ìdhë¨ÆÌ&½|´ûFÊÆÎQµ}Ñ»·Xuêxt²\76¦w5UÝÌÌk{ñDdgÞ(¢ûî½B
Z%ã÷sk`9ûçئNεN$÷'¤ô TÔµu D"^ÆÊGyA)Ïgçý<;C¼¶)Ç&»2þñæ
Aïêç¶5T3CÆØ_ü¢Btã,.¯ã«Q´êmLbHÙ3ô#.¬káp{z¸¦Ú
tµZLGûü¤}iJ`´ðè0rryÝRCÖ?ÅuT
k¦³««£ùs~y%:Ô7Ô×סÃ@)д(ìkáÓèSyÿʹ®ÓÕÝÝÕÞÆäbÊ'D±;~Lû
TTÖ¶¢§üÒ¶\ºlüNm3§§h°}D+ËË+ªI
ôrÛëkjêÛúeÖÚjg ]ÉÒEP±`¸ú\]]×<P$F/Q!zC754¶0½n#qþSªFX¯rÁ BöÆξQÏøÑKýðÔ¦µc@¹/Îwæ,ûßÒ·¯Ãå´ËG{8míÜ\ü¦|Ó,V;:(x}]Ü!¹meNzlÃ7,³!9Æ®¬.LI{ºº
ªq«cÒa·ÙN÷ü¼{Ò¨àõw÷(1÷åE*¸2Eå}ÖÄåkKÞÝÝm]#ìC»ËívMÚíSnÏêúgj\6ÚßÏSÙWN>8>ØerW7÷Çf6B±Xhcf\::4*ÖZ\ssÓ{neÛïßò «é@íXÃ
îÈë7:<¾øéËxp{}mk7v|¬º'ÓK¾Øé%:¡lÜÌ{ó»1mÖë-3ë¡äÉéQlÏ»¾¶±§Sß{jrzÉNÅ[yÏÒûkÎqµJo#GWû¾åÅ¥µíÝýð~`cÁe·;ç×áX$¸éqåæ]â,êdbÎ:»ºíómzÜÓ.÷ÂòúæÆʼËf6[k^wmaÊ×±~>Fß`°Mî`z Ñ4ápNOOÙLÖ`vÌÌ{æ§íF
-eJIæµýd:î_0ËGúzxR
9Ô*ñm
Ëëi{mRHYTxgC} \~GwwBá¼Cé}ÍUûh»UÊ®!AR¿Ê'1c
5è@ÁÙ¢hKÅBÂõßWìÿ`;âÂ<÷ETlV¦}NÝ"®°ðzêýP+ú|¶÷
w4ÖTUæW>¯(ÇhõvÁ+l~Ååe'ìiOØÒ2{¯¬ªAç@d[ß«ØbvñÏE´-%~Äÿ[VS[Kmö®ÞÀ'Þr
íÂ
ËìÆÛyj\«ß!ÚÎUÚGêïö.Ùòþó³äþ&¨x¼þaÁµ¶ß
U7Ô³ë_6bt<»í'è>K\5©Èúò2ÄÑÕ5yh,ý
A»ê¬)TWó9q-"¨éu~aQ>åú©óß [ìtú´ÐÔÃ
xGEHåêBvÁêCy,ê`ÃÕCöo±/ûÉ+d±Y
T}ë
ºµ¾ Ìܽ¬7¥åìò/è¨%VëcÀXµÄo¯»Y¿1kC[°1ºªõ«nô9æ4Ñþ¦ðýT¤*ÖOh´@êBûN=õ(¯øs´|9ë§z£Ñ¤©ºø!3Ï7Â'Ñ~´e¬ràÐú9
t,;F=a8Ô§uèMµ±õñ×»>gÕð{Ð×]ùÚÖF=Ôϸ~°~ÇB³fùpWKÌxs['(fÞôñ
úÐ 1Q5øÅREë~ó£ØÖÌd¨»³³»T$Sª¤FÓ«e¼>h?Ñ!X?ÿÎï|çQbgÖ(éïíʵcÆ~a°;ÖñWÍBÖ¿þßýíÇI$
&:28DéU²U"tÄæxæOÎxñÙ:õìÆO¡
$ï£÷¼ÿW Z¾ÿW?r|ÿ/Üýæý/½e½w¿Ö÷}/ô¥2þm_éÛ{ïôíý5^êK5û×|/é>^ìÛ{/oöí½ÏWûöÞÓ»}{ßÿrßÞ²²Þ{ùÊÜuxS\lW"äp]Þ£@Kø×Øõ¦Ã©$Ð÷9üîÛü+Ëe"%y5_$áK\±D#WhÄÒUÄÁ·ï¾Á |{0p,(Øõ×ês^2L$¢áÐ`þ(j&ÄÎXÐJÑÝãÒ;Õ¦Þ07û²Øûí0¾Qà£*ÑßÜnwPüÌkYõäå®·ö'î
á¾÷ÈËϾò4SJ$
UÅõÞ¸ï(y¯£5éRÜ
@·ôýP
Õ
§Çê¹»Þp2@'í§¡VìÇ}*@»c{Èf¡8Hr÷`áûc¸9©÷ßò`Ò/ä*ëÍ©äÑs©ïqh0ÁÅ·÷rÖû¥Ì'ØOõð&la®°^¤ÈÍ
sH!Lñâø1@;Þpà:SRp»Ä\ôË
S¸öJ!nÊø¹À÷%ÇÿcÅP
TÃúC
E½G¡ áXöo(lýéR¦õÑÝb«{rªåñxj¡%øJvý]ôFÎ|W*ÀxdxIýÝÊfvGßÈE³É¤~äå¤Áh,°R4Ieé]tÙÕgºtg&Bc7Å)ñû>ÚT(y÷7|ÇcQXTÉ÷fÄãóëÐ/ü,8IÝ9©Óx@¿ïMP/ÿÍk³ÿáÿ½sK
^ä¥÷QÇÛÄbLö¥T,IÄäý¿JñoÞÿûwò§CÑrDÙhô=b¨
®VÞW:pãRK¤,ÒAÖIJä2"4é-*ÌêϹ6"®éhP'ôß"Ä÷°DKMR/evuäI]Ãð~U´ïFL
ÿ+×{w-XÖFIÏ/B:NaÒÑ$¢z¤ágn[HN¡7¹Ë4'3
ä}m%z
OæïÈ'8¸î¦¸?;`´1¹½e jsÉ)¼UÇórÊ¢o²(@<äÉ$gʼ]Jj reîeoÎôFd®ïKÍ7FæÃñÖ
äѸ`·;èÞ9J$ÞìTö³V7'ïí¡¹c`nsjrgçïìz¦CÓ3HßÑ¥;;ò&ÛÚ3¸&|Ç´Ù^ææ[Ýdzy£[:afÏÌÈ
÷¥"H,*d,®ü¾r×ßàöß»æ?éúf³Ø hêoYÇûìÿ%οD&Sd2ý?Rñoìÿ:2ÉÀëR äõ<5÷ Ã÷È5õT{b¥)¿Açåî%»ú÷éå$ôa°Ç`ÆoÐÖ°X¶D
)D<Ú>
ÐàÆvèc~G¹I<ÄÌ Af»§Æ
½ggØ8ü~gã0»óÂDó{´ÂÑÂBú¡dñFCñt:»¿ÿ¶Æ"ÄVÍ¥¾³Å9Ãļï좴Ësn1çÇhÀ£M¼ ÷,'ÙrÐòu8ª~
ðùñ¾>STYÆàõûC¸»¼ajËÁ-\Ë»¡Õ?¿Í=t©ú\GÚÀôÆQA'/¨(¦öqk
Éà¶àÑfñ|±Í8:dl`³YÉrV
ï}àv?Èi4yõ¬w
-
$B>.Rº %r@b×Ûp¬XÔ@)<öd\ÉxREÜn$F`]¢ÐðîÂ</>ÜÄå´çða"|("âMñEâÙc0ÂMl(*Ø:c´ò¸3n´dn~þk®tU`+ê×»ÊÈ¥IñÕK]È
ñfüÌ2|¶7Ý5<<6¥Éî$Ð##ÁxR¾ÔÞäqô0ÜCbUú믯ÈQa7%ÉV ù(rpÌç
Î §È0wÒ°£{X6IP$f(À5``Nsò¢«c'@l*`0fD3Ó5Ý`ͤ$9ªG')ÇM¦#dr¸r¨Üþ@
ÿ×°åB~Nÿ»Óá§Lv<D2×è¿B×ÂÐn(ø"n7;FNÒ?ßÍNq9¦É¿µáÿ¤7N¦ð§°á´íËðõ¬×}_nv¼«Õ4Ä$¸}ÝCö½È(&'½ïäÌÿ¤qk¤Îr'î»Et!Æ6¹Èwµ
þ(j!¢/×KÛaqjÃø²®Är½çè °½X¼Ð¥LQX)ò¬TÀ·
cÁSîWp ð
¸ã7îMÁDï!àöDTßïêsô87yk'ÑKé8@|vþ6àtÍ£7.òãÀ°¯ìÄCñ
FQ&Q3Lzz¤!-&ÒQâfìM
LµXZ´kdÍ,¨D
2xýq8ÂráwoHºó7Çö|Ô·Ecé$¬`( ܲMÕ`¸Tõ\âû jÁBè'4MvKé»÷±ÀÆÑ"{þù®q`ÒsYÁM~]ÿ)0Q(Ú¹ÉÓd*ù¶ÂI$Aû]NÇÌ;7-5´¸¾w½á2AQ¤ÝW÷n(NPr>w´½êïÛnöåï.ûo6á~LÀ_nÿäJÙMû¯D$U(cÿý»ø»mÿÍFܧ #å´cæâªx"é|I
"b·¾mláÑæù $SÞ`65
@:íC£lÌß&
ù¨¬°y\{àÇ5ÚVȨ¥êåzæÁ}ö6c&}Î\½ÿX!kÆÎ÷t²1vvÔ8húI*
rñ®Fg)hP*côöúýÜDlYw/Üãg"R
¥j¢´B£ùÖ%Y¹ 3Qìë3¤" OÀ
Ðg;\ÉÅûhòÝf°~,{Èo1? Ô4¥³ìDÞ¤bî¯kÄönSc13ÈÛãÎd
ù÷×}P^Nâ÷;ϲ01ËäigìJp%äèhv¸Î¶K$@!ç½TqÁXÌ 3ͲÃãy7×Ë®6Î]¤Æf_V at aV5S9UêíèÚ²l!=Syîc_H]dºñá:äà'ÈjýÛuI0W^î<µÖi»n'!4ÜãÈÉÀ¼û`shå«á|V.0 ä;¹/½'ç)´Î/8xEBah:qÄMwîÙà»{Æ<»F8h`&{FÆ}³OïqÙn¼Ã·Ñïã
U#dOÄ(ãGÛ
nh0
n¨øsîòî{ó& Hiÿÿ'ßWwß]Î=÷ìç\#§¼
ÆxåTxmÉb\\ä1´ð¢R/<j°èGq
å6Eì°ñ°ö
ÄRHÂE@&gÎÂÖ$£dJ¸ ëxn<¶!#¥¾ÎOÑBÖcaENfRIË6¨
ö¦ÉÜÁzüÒ!hdKÅ
Çh¡TøHö0ÞR·M©°Xá5ë ãÆm! IÁKN=Þz kÚÔHj¬§Z©AÖ%ßØq@¦Ù8ñ9ÈdrÇyD(U1Ë"MUØ Õ<jÇr˪kØZ³ÑÆJ1É
aèD²eÒ ÷ë× ùÈz bàóÍ4"üIiåÀÇ'ÀÝÄ0GmnÍ@Wñ0º_ÙwR]Oɲ-G¨õ¬íc
RÛä=±¼¬gÆ?µÀ 7A|nO¾1òE×VʶX¹¸¨Ä8~-nÓdGÀ^øgæH7YQ»9NßSîÏ
juµÚc¢a¤ùNt[I¼±Ið!´dWÿã1L~ñ?ôßP4ÝActpÿ^÷á¹ÿ£²´´xWüÏÎø#ä<zÈèúõù~iuëêÔjy~ayü]YÃøD¼NoþOàþ®?ïùwWÞQ%`;8ÿeeÅú¯UåÅ»ò¿wÊ_ûõ_GÔ)ìÕ«¢waÉ®"°»Àî¤"°ÇÔÔO;Dó©A
ÊCÆ¥G(Tuµ`ÿE ¦RGïýóZ2
1ÕeñGµèÞ°A¨¨#ª-Ç2Öe¬[.±"o/lÀ°ºèF!ö3QeÓã½äiÙõKrq^Q;}ÿ§"
ï<é@ãëbßp\PÏÑ^>k*ì'3Xö°ïð(ËÖc¹ÞOòçít1X»Óe@»ÊótáÃk§ür| cè¶Q';ÁK1:ZÒE V*Èsͺ û5:êÕ@Sµ|^á;¸úÜîJ xC ûôÃD³ÙÌkZ¡:¤·æ*¢Ä)D£YEE.ÙùM3]Q`Í
X3²ßî ¡¨Ó¸dÁÕ:úÏql
D¤úa(bá¿PpÊM=gíè1¶©þSi«ÿT²«þÓÎøóÛGÛC-à§Ñü_Q\VòEYieE Õÿ,Ø%ÿï?ù`BT!Ìc5ê1À_Qèܽ¢»´
]ÚBg´vEÈþöÚϹ:n#Ý»òÙ¤¯gÒM0+í'h Mß<§¹zUVoèXËzÂáÔñBØÇÑlîFeâÄL¶fè'&¹ôK2é
b+ÌÝáhfÌ,?lDt<&9w©|Inµyi:iåh<±Qá~°C¬:AÒíHhBîág=0i×à(Âs@@(À¤}*²Eñúl8³s¶ÇyÍ};êkHÌ6Zɵc¤Æ½5´7
V,fµì,¾¼HÝ)tÊ{: «vÇDQÍÃôaöËÈP#µ¬Kf" £G¥,bôXOQÞ~áÕ±ô¸Ú Q@GHEgOxu#ÀB;¢@A7ÏÅ
÷ZQ¬&rm$2ñ0®5¨â<ÃBzAT^£MÅÀdÌÄwÔ D@\ÓöÕÎ@Q±M^²-l0¿@âÔRB©s óSWõH:c38ÕÐg8±®ðåñçbà£HFîhÌRiÞ(Í#ÚAmÈÈA6[hJFÏ ;ð!
÷ßLÒ`òÎ0È
//寬
ÿÔ¹9>?Xù&4As8|«
o>ð8DER'/=¦äÄÍHÊj`ÄBÎ[:9Ûé»wC¡ëjPH«àã`ÈFÒbiH(uDÖí,¦BÁÎå)d!££é³4ê)÷8ÎÂÅ» ~Äbì?<KÄRÌpª:ýÀ"òͨ'È¢Àguý8ñ#þéðÓÿ¶`ºëo§üùéÍFй¨uàwÄè%Uÿoh
»ô¿ñW 4,¾vÉ:ú=|Å°Ub ¨SµCoNXTD°a
KK+µ²>}JÊ´ã'{êé ¿5ÂÔ¬@;&pÌv½¥®Í7e´´zT¯(ñÂÑsN?èÿ8ÞE¤¢¢¼¸
gã7åköTÐH¬ºUæÑ>øµõq,ÕÜcT:âüÀGiÈ
¼mö_¬ÿ^QQR¶Ëþ»3þrïÚlLv(bÛ?uöùiUYi¹ÿWWîâÿ;㯨§FDÎÙíN¸½{×Kþ$jÊAéà7=Kó",4Òáõ¼
ç»{`wrßmÀÑ;¨Ýø̲W¯^¼PÖ,ÒLý
øÔ Í
ß"Iæ
(
ï]u¬gÁ>ÇÀ38+nX/
XI¨¬«%v»ùk®Ù¸
ñHe±/$Ì:ݽ¡Äòvºwíå¶vï´×·@8ÃU:À<í¢CïaâÍxê
Ó\Å
êd_¬±³3Gm¢ýÉö¹»d§GÇËû$^±oì#í|ìÄás1[emF[0KÝnzº»ñ_YGhèî#ÒbcÀ >÷"µWño`ÊÂÝÕ2e`H\.Kw7æ÷¾äѪüç2uæ1í><0cÂe¶¬ )d¥~WV9¯vòç\F®ºR£\6¡CF¼¬¬Òy¥²S¯ô®T^©Ê¥ÁÔ(ê£ÑСJ£ÞVßâν£Â®$ÕÔ¨r!OMâ²ÎÁXXI¶EÎ_Tß©È©'*
R{ÇI°Í@¯gRÀËrjy'çÍ>9//ëw3ÑC¹KéwsåÃEÍî
ÆÅàg,[ ¢ï|ñÂÖÔ©2 êÑÈí&q°«
r
é*!RÄOÂ%½KØfÜêhL!ÊñvTYåÛûºÂãÈÌ&L§bò¡øUÎ$ñòéD£P£JÉ/~Ö8ö«0ø»ÈÇßÆê¤læéxl
äÖ7í´»C¾]ì<{[I5Ƶb4:Áým4h±ë
ߣë"×(lÁ
n/ôpj*ãÄÌìA\N6 NGÕrpèí÷51ÀO̹
^Ô§bxË)Ù)°êï
àq.îNýÔ_WÖ«túRÅÐ,%
¶¹»Î±ôäî:Kh?ÓXvàÍ4ÖÔ=ÊZÁ7@Ï 5J3òÄzÌdªQ¸·<øíÊÉVøçøtýi~÷]²ÚÿÊ_ö?¤ráL*al¿(ØüWYZQâÿJK*JvÕÙ)E=»n°k ë0vÝ6À®Û`äÓÞ63 i»îK`×i
ìºl];6v
ô,BXõÔúoÓïÁ[©ÁHFõã/DãD²ÔüQШ`Àºfw
duã27â9ô¶ª h9úᯠDuux£;Ü¥;¯{
ø®Ä¯2[´+÷ì ÊùÏjD°ë7Wt²g%åÿñD";~%<*Ö²í<Uå$êqGàx
&Ï
^eÂ[¥)¥
Tå)jÃÓ"¢,
@Äèóýy\ü¶åFxáX&°fDc8PD÷¬{³@
É¥ñGAJ7ÌG&(jGËÑ'ëÁ
ü|á¾Ã©+d[ZÈð¶$Ui¶i:{Á¿Â
é}¬:b¶5Elpî)ÉÙSB÷`6U°IiÞü)#ÅÕv/Ö¯¹bºJ¤»²rSSZïl¢â2DýZ-nÅö¹ÖLIÎÔðâvNZÖx©ÅðTS[®·Â9ß`ï¥"]ÝóKMÿÛÒÿ£~ú?}ìÝ1·u¤ÿÃg¼ÿ·²¸¬ª²îÿ®*Ûuÿ×NùËuÿ×®~w
í¬«»rÝÝ5Ó!í¿}÷¾¨ê^=ø5ò/Ü7>sK`õ©Ø|´4V9¤ycÉÐD{©¼1õæ½PJ¹x
ßk5ªt3AÇÐ33e¢x¦~)T{wZ í]ÛÉîÞn²2±(¿"ä,M]o6ð6dbt{te¦ñN#eôzÂhuÍïÎÅð_xÄ/<¾ÖÚdi:
8#¼ÁݬÊã* Òí7¶
yÓæÅ2 ÃÛîûexGüIy/¾"~¹
¯Ý#& W#¯Ì.C0®ä±óø}ÔGK.zH%à,
ìÀæißiò
H¶fä1H÷å5Ü\3¶,3
±]Æï"Ä©±³ïÐ
$«F02xÄèJ &®O ¥A½§Tv wIxÀ%Ù>´PËÄ.Âis?súäM
Q÷§·XÀ
£$¦¢k
CPk²Z
w±J!4¨ kFñþ@¬6b8ª¼è³MâcØ -ôyK¬-`µ)"!ïL¼(ßR "Ø
n'oßê,yt8ºÒ¥T¶ÅÅîüy̲¡ã-Û´=AAÓLÙ¨µ¿3â>-Þ Ýbhò2I-.õíLAÙb`Ñè*áà
u¿1ä2f6éìÈa5?9¼Óã1g jî9»ÈÛ±@*1AàÅWêH:uíÝ#B'V&ù.QË"ºÄE^D¬Ñ]´¶1ý/ë@«'qCÆ°ÁÕS\c«h"@>HWÍ$Ì\¨¶:ÈåÜy§`GG òkãáõ·ÎêâdhÃ$u.e¦½!Ð¥² PÊ¥¥²ÊÒQZ>Ãt&ï²bR¸R"Å@~bV×Ëxo8!˵\}¦è,2[+4ÃRòAÓjÂ'0Æ¿A°ÀÙAgq²å#$¤l)ÀÄ8_DºNQÜMÒûsÆ®ñÀÛÓn¦0%ÑN©´KbZ·k²(íàÔ\Â=ÛM¨îíó# ¼z;¦ èþ÷
¹Äâû¯tÀq`gâÜ ¨Ø=á&G:òÒÓqç²P8ÓD{ÙÇ$(²òáÖØ|o@a[ç9c7gÏÄr.¡v4PíÍ×[I-¼LÂȹ»/ûN[ÉB÷+Â
â<È¡åRºÚJ,\1ú¥S𿦼ÿ~Eð¿}ßÌ ø«ùÔ9>áÖ¶Uº@XÂïQúB'=i*Ck¥Ö²è¡Å:ðéÝʾ~921ãZü%ëѼL¢Ã¹dußÐÎløõÜjí¼Ê~z;³sr1)î³âPqî'а
ÝL6ô¢
¾
¼íÑ=ª£Qü´)J;i±Au#lté`XªuVJF(*»§F
ª
$sêÐ*{tÈ.95
ã7ÈÐØq ,ÄÁ,úbq*S*ÓÈ:]£ì¡ämÊ/°ëtÙPG j °Ä6äJó\c¦õFѯ»¡î
¥æäÈùG¹®NMå¨cgPæjç¸
}¯ÅTa»µÉâqÉÎÝ!'ùB¡R±_ÄÜe{ÞwL¯ÐÌxð̪/**é¹ »0[Ê"sÙtÉ´åe4½´
4óóîNà~(Ø;Èl»x!vy"m\Yú£ÂÙËSÉÁìÒ,ÐÌÜÀRä¹Ba*ÿZÐ@\V<!ÁÒ`S)²³&
f|RçÖ°9¢
&òx3ÐÃ
çDÄ.æuOØHUd
°q~§.c¹Í_=¦~DÍPý¤zÀÊR*í ì8ö]KfÂp &ë8ÖRG6ËrGÎs§1 m캥~à×i¸ö~B!³Ë{ a8sÚÌ|É-Þ¤¡hæäfÖ¥jƳ,zH<˲©0i
©°þãó7ñIy¬{ügîÖDIú
ÚÁPÉdÈn6Ô$q±0Ð-¼2¬23RjãYTS!
Û 0$_ÓY g@2âAÌ2`{'¶IôYT ¸×
쯺:éF³`!¹Z̪®ÉY¼¸YÌo9Â`/£Å|DSèÔ¨SvW¹ó|q#<$
wÓê¼ËÉSABúÏN¸£
BìÓ¿
AíN4PÃ¥<È ×d
ýàE>,-·"Áþ²&Ù(̱ÍâîûéÑf
)\(míLÂ0~N¹3NÁ<ÇìKV^J
¡²IjÒGÑ
ò¹ÙþXêKº»êSFi0³ª#£ßÉái=Õh ë>bTõh½Ålä*»¢à¼È¢r²YVÅlëÿLÀ3¤pHZÏj9dF´6j4 ¶¦#«BEðÿîJflößP4
JÙÅ
¢ôgqk7áéЮ@²Ì4ßÛ³MMèÅCø¾e(4ñ/Æüþ
Rå1Ü;!ÐH¶"ãzX´·äDôDux2ÈX.bÀ¦pmq[V4Å0Ñí3AfpuBJglEL*5»GvSGÅMI¼/aAÀ_N'Fz^éô
³|¨ñiÜvÊùµ´jáp82i)aCÌ/ê
ÑëaB¥d
YqÄRIæK]hS³Jü¼#F§UjÀÂ+%ËAÒ©Ññ%*:,X8¸äÂønId+Ûnâ'q0´¡UÆKÑâtB_é;!&µ¨®/ĦÖÏq ÄÌ-
mÁ8r5Ó÷Ñes·,´YµËºÈlc`n
¥¯HP¯b¸v{±<
U$^EãA¹s1ô¹£I
ÙÔØ9E5;Ù<øö°Îºlß
NÅvpÜ :Ð,í/u]cU
%õÉ"&L®jfÞ òù©à/$ÿ*
rF#.Pi_+å
à 9Y!5vÊñÅ\ÕËz¢®ÄÜ=lÇA§»ö²ÐJâÔHîv§dµÖdy×9ÿåâ!_·YÙЯH k51$Ã7ËTg, sÜH+d¤+ì±èª
NçàÁN$OsÂá²xÿ8±mÈæïëçñqi
§DNËpÞ
ÂK´l§¸Ã¯ð®¥>rÛÅ[
{v¾¿'$ñµ?4ö*ï)ÛZÀ»1[/Ðôfwÿî)$Ø2YºK§Pq$I:xK¼äÕäåLǽ]ÙZTH¡(4zCBú³ÎåH%Î&c¹tl)4ªèV_&&I¨®Þ(|Ç´ePF~gªò}(ptwçýx´Ûþ3qµñ®pÔ"Â;ß2ß×ôIÂ÷×EÎÚ«É:êäslGjVûJ,Ø¥ÄEdEpS%MDpÍTÑ#0ìÁ¤ri"¤Hf_B${)|"¤y˶ .Ò7óÈeòàaçaP
bܸ
akÊ +å>
u£«ÇÖ
#$
<±
²ùE¤6Ë;ST!ÏeFº'ø0í%¸jÐÇh:$±P¼ã¥ñþg'êX¬*¬³X.ä;+=ûÌf
>º-êÛ$ÚD-,,bü
P$ÙâXE§ê`ýÕfÞ*C"Ã)EµmZµ³jK/X 3æV{ÐøÚ(±ßâZºb,üR,2ÌVÅZ¡ý9kK
@ã#Sät<»Zïz2-2eÏÓÌ´!Ùp£b£äY"I*Ò
Y\ndöRbã4¤
) h6(ÏSâtz£Jhý0RÎà]*YîØuÄLÈ2Åé /r*#òC8ÊÕuÑÇI)·
þCDOê¨(Ï<ÃJ«°!j&Ô©Ø
DK±Í¹ðèàfÇ~Ò×Ï`bÙ+VÀ²ìô5hÐ
:W'Iö
5+ÉY1®<e°D¬¨Ú#3
:ÇãÎ2ÕÒëèöÃ
ÌB2rU=vVXâ10Jq¦Âì)Õ`!:'JàD\S@¸±ÔqËà8D ü\#¶\ÆkWOM¼R!¾¦ÝÏrl8X~Jä¹ÌX{R5ݺós°IÌ}ÎPn¤r5¬lÌ
Y=Îñå¹mÕBª÷Ù{&Ѷ±e¨\þ ìXôW'_B¬-(kÙa÷&ÚÈG%Ö-»RO®f j¿é H%OËLE@ôÛ÷Ñ&7cJ®;eT7ÈÄÀÕTÙ<×èxè^Á«¢Þô-ü«=bèºúPíP¦q@ö+è%¡»R*¡t$ø=À¯$TæÆáÿÆÝèÁªù0é=r.Ð Ü&lBνu
÷ì&5 !å0dã¦CyUÜ8¢zµOT1TT¨M²×ÓD2¬/ÅrIùÏÒÆñdî¾¾DvÑ׬ëôÌ´ãYN¹hÀ0A'hóïoDBÔTfõË-ϨÿR at QÎÌÊDÅ:XN4SÊÕðj-zÚy-(T^çÑypÄ}Çð^ªt±E¼Û§nx§Kd>lQè¨0é¥W#<EcE¤ÉÂlZHcF,=LfitcUÆ«ÆYy¸5Z^
ò"»Ê®HÊ$Zð±~)ÿ½v¿Üqñ¬ð'ÎSïøY¢Ù § ÌjOÈ,_LÏ"Åõw÷l9ðÙW¦çz¦åpHUqÔ<Qd°Î¨@³)vJd3x^
xÊza¢d·¾ð*ÊäK3ÝØ5c%$ÁfbßNÕ ¨ÆØ6òf8³*Æ®-à£ECêâ&8µ§ÃÈ\D]Ä)«W;A=0x
+Ñ
¾Õx9àî69êÁ m¸ªR*MWÂBÊ;ã3 2a ò&Uf^u¦½s%Xè4fQèOÀA:ÐHÁ"2 ôA·ªÌË(cÌ#Å1ñÞTiÌ´ýz
1cùyù·PûLGEÎÀÜ#à etÌe®Ã¾a,FbSXLOºÎNu¢0ÛÄ´W+âüp|a &~Ûx×1xú
)ðl/3â§'éÞ<FgmX²§Uþ]äÓÅ;tæ¡ÁÕ^;à¾9ìM×Þ´'
(10¡üJXè7Ú=+.eѹB!ÂÂK¶Å@>d?ÀØ8kE1òVZ¦µ:nq
}Æ×c¸d@ñ«{´º_6ȪÖîR22J
öÝ\ÔPpñÊcÊÊQ¼6QT¨S+ÕPÂ2·Û§YñB]ÊQHND
V `UÊÄP!Õãk¼»0ójc:*êlhæ`'
IøÍI¡÷9TÊZwh»,ö¤æê\äÕXüÂAòxgb¥Yÿ¤¬ýnT$:Í.áDU¸Ê°cèi)uU]7Ô9 ®³i
à}+¨R@²¶é²aÔ%3Î1¢ð½ nÛ¡ä$«Ml¬ç&b5&Rðß00ZÂÀèk8åS^ûRhH×ç)vhñaó`Ø
B0ØÜïk¬eÅDnWÇ·%¬µª\(=B<_-[BÐÙî1µ*Ê'Òj]39[9!Yªù
çA 5Ì(.ö(j/3v(³"ÍôfYlèr65"JÒÒ)ÐuÒ=Ť1Ð+Èkò~CÚ¤°t©¡)éëJ4`TXÒcm
\AÊHw;d
¯ÍäZÛÄé Ãʼ¹òèå!-T`Új9(QkÆnbeÔó°íy¤`*®³
/k55
S$Тl(ÍñXg¾l
Å| (IÙ¬ø`Tw«Þ °Cß-,3×yµ¥aGRL~Á·ZeO
qÙ¡X(Pí5üè|´Ñc$kôb´±b£e<ò¸µÑÐ@yªi+àçÕ±1ÉuÉNÑ1$ep%À¨wLWH°d¹fX©?±ÜþXÿ}Æsà
ÖgR ALÏs×
Í-ËÄHÀ÷xn$¢Ë+À¤¢ã¼ç@|&ô¸pÏдÝH
#f0üF
t(E·¾k¹4q2àäX)à!A<Þ'
GJ^úD&Ie¯Üo ³esD2El*̲¸ÎûÕx$>c(´ qÕ¦N
®c¸¬¿,òÐÈäp¬
ä=¢LH96
$AÎËF)
EV$¸i,âá\äâ=~ÐÁ¼
IÔXÑÄ%Ûæé|pNLO÷¨p)f{´<âmÒ"CÙM !OXA|9
ÐÛf¡:ePL6$½Mî9÷ÂÄõfèqÆ9ª
$lTR at KÀ9©cì5]>AAådCõEÆN?M:äGÛ OÌ ¡e9&jp§8ɺêéô3Îã>á¶\^G¥5s¶ÓöÀá ëQ§ÏKHÝiqBåDÊ"bÌ%x¹#WrîíÅZÇm| 2|F-¼
H¬JHâ½Í@c JáÚsøvÆL;+Hù{¢zï`i'¶)°|
«@tÂÑ©vfaîWä|Lý¢ðQV?FÞ2'ªé
l¤éÖ]ôäqnÔS .ÞÍ].Î é¥fí :/)ï6£WÂS"g.p4Õ-\wé¶
´:¼$HëÎÙ %òZÚ¸"ÝÉûsÔsnòfª¶ÜSY¯Ë6 ÙI¨Øëî8q¨E4`CqH§4g~=Íî .ªÌSµ!o« æòqÅá2û8 qY>).O½ÄÀaÌSêZ¤y¼1³Oñëë©VÀ lF®sjÚ ÕfGt¹V®Ú$à×R1N¨¯"H Ùó.h®áͯã)ìLñ)räwç½míYÅ|g`]
ê÷5YÆ
3H·%eqÀ¸ï9ÆjÅE½³*m@<
äÏÄ«ãîèaĹUpcnÐñP¬ËBæ±ÐöcÞcF]µq/!ÁÅÓ;ª¥0ÊüÜÑÇÌÃqËò,Ä$åÍά`sQC\0&âDSÇù÷Ôuϲ&fQòÿ6Í3È_Ç(bLoÄiD E©1¿¬ú
|qøÝ«`.~â±kuNïBÎE¢(ÚAªÂZYkÂÖîlîPs~äõ´Ð|ÐÄÚq9ó6t~ºlmÛ3_$Ev1Þíöàã²ûÉ5þVi`<Á`Õhá·L¥¢ S+]8Fx':£óX½YÿÀ9M}n$[¤óÄãàçµÐDE´´à?¨C=fÙ$ÜKd³äAnK°êÙUk
Û-m²e4*cCô÷±]qd9+áó
uZ·wºëX at mçwÀ4ìlÈ;6
´J'\ul/¸à§ÐOa.zì!åtª× ±!]$¡Ç
K2ËÓõDÄÜ!Þêaý@ÛW(l~S ã%ÅeÑÙ?Ehá|cSmBZ^¬Í(¹¸*ÿ?^Û¥3¾õ_üvDöë¿cý
øRVUQÜ¥¸¤ª²¬xWýñ·«þË®ú/ÿõ_4oý§ûVQæ?SÆS F`h<O1e^²%3^ÿ0fæ zè v3'±)xÞ@I6éEôEã°ÔøÁz ý
÷ÕMAðQln4'@«Ë¤Ó0±|¾òª¡,סÕ4¡cÀcø¦>Le°´òH8ÖVx~>hʤR+ÍFf¬ðh33ͺfÃDÊÔ&ÃΣe´é©¨ÚhÚ ÑÜÓ¿ÊÓA0
KÜ£ºEOÌ´°A&ª·(
¼E´üý¢6É
2µ¦ÆAÔÑØJ³ìø
-¿~S0-ÃROÙ'µ¨À m´1°øÕ,D3ÆÂDâ@v&¼6±GJc§v<¥µzÊ´´°
½
$,ßÔ§&,Gé
$åÃβÞÀPºÝJ\ЦïöÕµ&bر¨oã'uÍõf\ÓcÚf°ê~?dÑúy$óÓô¯ÊL0ТM&+T×j¤]¯O¶ô
4SÀÊÛàË#JÑnfFZTþàhµ4²»µK&B¾È-k×¹E#¥^»84÷Òñ"jî¤)H}dIºhÐ!Ìâvð]fP:Oo w
JÁ$!ßq&*h+Ñþè:ìawÚ«²bÒ¡Ö¨xéô¢8Ũ°B8#Q¤U"5ïABÅË
sÕvòØlr½ãºóØò0J-ÒQoCÇPâë~. »ªåÖ»¥R®±°TÊÂã |ù:~qa
kä.¬
R|÷i7ØÊ4©Ǩñ¨
ÿø5a!Ì8kÄ¢@¡¢Î77Æêð),4ØvùÓADhõy@¬X«éðÅïm¬hS7ñ¦Æ2#6|õkÊc]Shiû4Ê*,GwDï-mnV¾ù´a ¬# ìAK>ä8ãîÂæ»ÌaÿßýùÙÿìÞȸê?T¢ý¯¼¼´¤²Õ®,.ÙeÿÛíØÿ\Æ¿ì~?Õæ÷
~¶ömoGØø~ºoY÷vi¯v=WYg»Þ¶Ùíê²k´oæC8Îãv}ÎQóy0¿èbSyjKÚox IºW´¼väÁ(]®À<1§JT`Ñ eàiC6OØÕZ($\Èzâ\{ ±ûyâ·¼
yJË£ î0~ÜÌ©¨Ó-áÕj³sö£Ý§Î
ÖmîQ§0L*ÆjÙ°HÉÄL*h¡¤"Óípi²feÒXrLØå°qõ<LO¡RÖÁé!¦
³D)ÉÞ" p 3·óÂï`ìÎÜìWfMUÇ(¡
]stÒ ¶Ê¤ Ìi Ä#*qkSq7éÜ15ì¤ÉÎÇçñûù9DëE #Ù+[K¡
")ùÂuξ*wuf>úOòO:üÎq°Q¢+' 9¢_x at GøÑsºÑXRh'0¸]¼»£dn£ÐOÃI±Oº£0A?l'ßÓâN¼D1+u·½÷ÙämÏÂjÿ:¼He¬D¡Åαx&Ö.ØrÎl[ÞR§æ.âsYÈc¨N©ù {¯l/ÇcQ-·íªd³,Â<ЩÞ=ÊyÖ9a<R*»PÌñRü&'@
P(Áä<åeD¤Àd6&DÕ¥¸äÅ}»ròd¶F¸eçP9%èw\àoEÓ!qç®7Ë6\3bS«&ÍiJp4"J0Rhâ¢ë¯?4òö8Bì2[h4iñìó^ÏSøý²®#^¯ÌR-15'ÒrEÔ=çòzo©º ¦È5À Ìeuí4Dg?ýдy~O,ÀRiOñ^7¹ËJñK-(Æã 2øJaKÀg" 6Dª)±ÓL¨Û¨Al¯3SbXéUFÈ87Uv¶ÒÆ ²!¯ïl ¾te'¡»H a°8y.ð Td¹9¤µ°!Z@¤^°j¦$¸
ª)Kw8½3¬*
Øæ+ù¬PfÅ9yA
§ ¦Z«S`òHÔ1òÏ)%ÈÞùjsÇKI¡[#ÒÝ^
ÞÀd"5Wê½òª{Nòtqc* I^˲¸ÁÉB»UÁ¥Ür9!§iÈÙ´¢<ºZý öò(AÁGýÞåÚ~þÞb62cÎqµïÿ).-Ïîû?«JËwÝÿ¹Sþ|ü?tOªýóFÔ)ìÕ«¢wa ó
SS?yìͧ~ÀÕM®«R«õ
èößP4í±+ª|WTùN*ï'äxÆ=®£<ånQÏ#Õ5$¢¾÷îGÊ°0Iº:ÎÓ²ÿêòD(2ÒqÄW±þf!¡¾ìWéÌQDÍQýÎ5¨?)[ýYVÐsÿHb¢üÉá³®»ØìÿC¾ñÌ,Q´£Æ ~_Uÿ»,).+.+ßK«0þD.ZÅ@{ÿóÿööî+Ú"`ò_yYU9ÅÿUT³ü¿Ê]ù;åÏOþëHÔì&¨ÿO¿±ÿîövI{ÿk9u¤ý/¥ú
5Õ AVÈ<çÏY0ÿ0´O)Í´%;·²Zcì¬]m'Åå9xÑ+6¾XQ^Ëw6tá6¿¨)ôiL{Æá-TÇXúR:¿Zª×kN`Ù/~OXÉXª+P=pçS
T oÀÐìt^H_±éññ
|ôØòu]:oÚÉ Gðϲ ͦJ<Õ
ÿl at UK:@1mYW9¼1%Ãlàõ]© 0Æ %*8hÊP'nPl|phr'ï/©BDÖó©})ʶ[ µvÇKõÙK¢æH»Ö±cÎ9À{Èð!ç¦z¶º±°Ô²{
Ldn
Ù,?V!ÂêjÛ(¯±òÑFÊ´¨ØåõdÍÍM vYýÿüä@FUvØÛ¦ÿUü_QYZ±KÿÛíìÌj´BÉDãO£}ý¯¬´ê¿WX\Jöÿª]öÿòwþØÑúCZØuÄðÁãºtùY!|übOøïß0þÙ3<jØà.?âÿݼ|ÁðËÞÉáí.]~ùküßÏÖ¾yæ÷ðã^éµCözñç?ÛýCþî
ÉøáKa3j:äõsOkYÛ/ÞU7aÚ~GôºùÆözاýÍ;ç=½lÜå_¿æ¼CÜw¿
wßýûÅ¿òsÞô«%:å_Wý«¶¶öUg}?ìø[Z*ßj{ÿÈæÞ¿ÿjáÆ÷ßï>p`·zèÎ{îÙ³Klý]o¿ýöC+¦_ùÜ5C0IûïÇß^¬?¹ûGomùò£&MúÅí÷X»M\ùéÊÙé®]»~³à¬-=¦Þ¸uóÕ/ÝÚï/Ã5çíûÔgïuʾGìù÷«÷6Åb+/=ºfÑ Ö@üâ@ÕÌç´û}X
Tèçxùë?Ö·áï¬ðêÏ÷ÚHé/º
PõWÿ¤ÿüà¢iûÜ~åU=F¯öÅm7]3wRöñµï¤{ãÞçÖ]hrøc/ßsÊ
§~¿á8ؼÔíÍF¯+.<á¥}ÏvVýÖ¦®ÙÅãþ¾çàƯ6ï>óÌ@`Ñ;=ä¤5ût¹ä¨þ=ïX²÷Ó÷õ^Ì»SåsàèíÖåÏÍ?¯ï§ËÖåíÓ§ïð'Ú¼÷>Ëo¹%ïÀ¾àý¾,S~Ñü§í}ö¹W=³²k¿ë?ìyö¤¥oÝüﻶ÷ÂúÍsÏ=wÉæcÖ\òáùåå÷~v¯a'¿áØ¿»ß×Þøþú
ýqÿ K¦]üæ#ÿaÔõõ'®¸eù_oxà}9ÿò¬Wï{eÁçuO®ý±íóGV^×ãkâcï8)o]¼ïö§×³äïßüã¦?ozoúõq§L_4åþÀA4ô÷ÿ×õÂÙ§^=¯iîû?Þ´ò©ÖmÔ\l|ùáKöYxìòªªÈWÿ~mßUEµg÷]sësGým~Õó_}÷Æ«kk/þüØ#¦8óeôk[}Ë#n¼oY_ýþeÙ×~ÂMf_z饿=çÝ/{±÷CmËú¿ü⧵þæýÎüíÞ°ï;ñtÿ¯ßxwø÷G\w×f ×2åÅçßÝcÖË«|ÿ²îÃÆNvÉAÇOÐ
LúKCí?xå°óWÎúfî¹ó7Yôû÷Ö\3µ¦Ç?¶zê÷¿ßm}ï¤Ñã®múæ¯=d7N¿©Ï?k®hë³dÙ||ÑÝ/:¬bä³ó^é÷å}O\·¨zi͡椥½~÷ÑÔ§/>¼ñ»ç2íOï^zå¬YW=¨¯½àå5.ùÀÛL~zÒ÷wÖù|¿±ÇÀ'Ƶ¥nÕ`·Üu×êÌ~GÕwÓn#7½xÀ©µ^]=¤û=N0¦-qï»?^yå¯ÄG/ÿÙMß̺öïÇ_}õ]/Ù;µ;lög,X¿ùQó{®:æ¼åß¿;oà%g}·ô¬¿üðÊÚµ¿ÿvÓû}ºîò%¥ÿÝÿÊ/¢¯?ßø̺ÿyñÓ=º~¾ìéçßÚûÆw¾}wê5᣸éúY+/vt¡ùôØ÷´à§ÞW·ÇÌ=ÙÏþ¡lÕ;o¿¾Ôê6mæǾÒõyßèrϦcú¿½®ßM¯><þ¢ãξïѺl4qÍ
nxìc·ï×íÀª7<u¯ýþè_y¥ïè=n^ùÔóµ7>}éÔÁ+3©TéÈ#x>ñÆ¿:ã«Üxò K? ¤§?wñÆÕmT>¸ûª·gûjýGjù`ííy÷~´Ðá
ªÇûõÚµk»üöûvY½zõ¤ÓÈÎÜ4ÿíWÜøÏæv¹fÊÃ@B<åÞ{Óó«Ruñ}÷íúÀ±â...©Øßc'ÌÕÚy¸5ïȾ{þãá/ö;¼òÙÊ3Æ tCßÖ>k>}ÑoÞÕ³øþý¼Èòbsí1«ö·CL,ÿMÛÚo·|¹ä¬ç<0 å=´oË¢k=ÿ¯ãêê@*þWrQ·¾-Ï>ðV6@óæ÷N;(å½Uû^öà_t9{Ï®O$xéu×]ðúëSVm"ù*`-
º;Òô%S<½xw3[eR._I^¯jî´'$íÀ®¤Fò÷o«\úP>H¾8¦¥jãDié7õÙ'õR:ÖMLr)×jn´§`ãÚ7Éj¼bÒû¼îL7³j]÷ãüجݺòA×û¬µ²×üúvUúªîmÛSó55!a°²rÄh.Þ,Û7q#ãªâÇìªê³lï¬äa³ý.oî£í{3Q9úGæµ7ò¸|^{scƸk_1Ü]×Èt$'[õµ2.zMñ÷f¼s!ÀÈÌù6ݨØRöuÕ»F'L=sdD¡ò±EY©ëh_"Ä·N¹QÁÞÀ»èFúóHîÎ÷
ZUçµúÊJ©Wl©I»¦ß7Íë³²õÄòåïÄïÙ³%Ë3ßã,09û?Z_`¹M}|Í oZ|y·¬·¸b¯òìóü§ùé6¡åòiÊ»=w4øËÖpÈÌt_à}M"©
êû}ãs>_!§¢2Hã|lÿaRLÏz;·AUUÌÝ\¹ÞkíæVÝXbíºÒ3jJD¢î|Ó·éÓXÙNí´ôhùÎ]¾U\®Üºýë&×Ù_SwñÇ9U7+ÿîþ¤s£óåvÝy½%½:1;æà±s{üTC'®_À".o¤ºú\?¿) YjÒμ¸ óag8c\éï%×ßy{p]@vÇÃüïV×F/5~»mèOù/EÛBUó¤Ô&%íóØmël˹åäý+ç+õ3Þ'vν~ytñö¦éÍ:ÑsNæt\ÚëøçÔJèYµß¿8áDÕ7-7tÚÐé
SUT滸Ð
l|õùôéSÝ´×®Wk¿lmïᨦ¨8 ¾¾þê[c6Яºx{ÇcyòéÛ",,¯éçÑ£S[©VôplZsKRròþ£G¯ë{ÏÖÑ©ÕÉ·ðHf¦¡ü¬"Mã}µ³µzõ)>Z#=¹¦ùôÛôkYYûöõzSüÓh¨AÀ¬ó6¡¡§4ä/Õ¬¶<4TÃáLjiÍ®å
ãtf¿È3eîâ¤fÁ»rÂt¿Í½·8ôÅݲ!º@nÕäÝqöôÜUÈiÞXÈkI(i\¥Ï}¶9År²âèùó%'Nt7oþòEè%BÇëÂ
¡çÔ\vijü^`ÜsßÛ˧êè¸ô
9·qãÆ#N-,Öó
³å
=~\:nÃÃó³6È]|±·=#ýàÁ£ [nç|øøµõıʡÁõÙæð
;ÇÀ
'Ê,å÷?\þsÙ®û¼g{Âhr±üK¹w½!½ü[²g&GÿrÛTeåÐÚ}@E¼.}³ ~¹é@AÁèåûQ×~û{È^SÌátä½mh¨öR-°õj×WSÚºkoÞ¼yôÈ+#ÏùñÝÀÿñ=ÿî9ôßÖ>|Èm»Õ³ÇÃ>6»fØûüpéKÀ« Çzg>|ußè3nǽæ»X«¼6}øâ
j[Ó¢Ï}k;`9¨h:Ù¦¼±ÅëÜÚøX×ûÙÎjN^ëü¡¡(òt í ù2F1õmÍÕììlç cÁÁ.Û5¼]ÙÅyJ»xýV{.PËWßÖb¶óîãÜLxîîî©UQï.füø¼ügþ¡±pâY!
F÷îÝËjOÚ|=51Ñ7>æxx/&{ÜرÛJFgã°å
L¤Ð¦+û
%/.~`î2¦bbµµµ²i1r÷ßWÌO xíÐ
ݯ°þØ$}ÞÀ{yÁÜIfK«²oÏ»nèä55ÎÚÚÚwx
no_{nå1 p.-ûüÀ?)°ìª/79JÀ¡_ì[Ïdó+úXçiikËWí
°9ÆÆ+CË}ð¨sé¢"¢O
A3Í^°w[É«úÓ§ÀHwãå,|ݾ_ýE¶ûù¨3M¿ßË>½:!QJ&=ëxv¶V«ù$40[N4÷µ©ÔÒªºy6W{<C4,º°{÷f =wVjjjzWH;oÜ·TÈÐ]dx4Çá¾üã1oêöæX}÷3ÊveÒwM¿xÒk;ó\ÊbWí£aÒF¿²¬¾°°ÆuÜZûi¿ÆZ7ï~!¶ög²x/ÒÞ¥êʽº»ûüÞË
/é9ò&s_}ïuÍlÛÔ
ÃÄÕÖdåñhµµjs¢óÇÎKÌh4îI`kw°Ì¿®Û¡Ï?ÚDs®>;F.~%å´Å\ <ëÏ5ùЪQÊZZZ'i×FÒ
ÑeÊoZ|cÛ¢S%í9üÕ
É:qb¦ÑO¯yw¾toU g«Ñ~+EgPéº!§KZÚ?|i}²kW¿|¤wdóÔ1Õ)+_ëÔoÞi¸4O§¨£PsH«Ë8Âl+lU?&Åøp®µ)m;)4ýÀÚºRê½ÁW¬ñ6éá£1ó[UØva»/)oö_±CUÉÎáûsìTå!&ë{sÝðÊ;Ü®æÝ·óÛçð5o÷¾Iؾý¹ØçÀ`:ÊèsgÎL(ß®î2'
_¾uHÙ´t®khÐÌ05J²xQò
Ð/æOo¾êàu?Gã^üÐ7~_«}7ʨ8{³ÆÆåLZÈ¿j£*æNçõO_
·®Ð¿QýYP` Ù ûìùåñým§{<JLHF¿>ÚbÐ ö><Èð
×nIòZÙ¼Ü"Çã.ä¼Mú8{¸ë «¹?Íq;ÞR[ó§hµ;ÛV8¨éÊÓG
̺ºì»g}è#Gî\¢rãmcé»Û¦ÃÜåËÕìfJKÅ'¯k³Û¯q¤Ñ{¯[ÅÛwÕòdú©¸¿t5^ÎPoRb`ù®®~NçÛñ¶î?%%Eµß£¼à.7kÊéììáoÝ;óqJÉƸ¸|w_Iöù/k)F»êߤ ¾yxÎuAb»¾ïù¼¼º¹}䢵clIå§$i`Q"E½·½Ç6ª1nÜz`ÖVU9ÞkÈX3^³÷ûçÁÁY.Û×\é~:ó}Íê{këß]>\ù
¡Þ}mí¥õ²íé«V¢×ñYíÞ
:(8sÕlÖ(þ®õõCËêß6ä/YÌ1»PÚ4
ȾMb¥gÇÖÔ8Ï{³ÍñðñãsÆNÒóá«_\<>°Nód(ÈËß8oû>{Í®\¯÷§ß·ÎÒï,ïz°ÚûHUË1-éVb±$ÏÏo0ëËÛpuOþý±)×=.5î¬i ´:¯Í*_·¥;)lMsÝ&u¹è©Gz½ØÒRÐÙoñàãÆ)®ËàW|Þ^uóãêæÂ8õ;Ë9©2ûëd~þp7ÐcFhhèØwzG6IåºXØOÝ×l"wV_^¶ù¿óeqq#ä&-´OÅC
.?ÒØÄdÕMû
קt¦7¨>¸°áÀûwçVtJ®X8Á¦|\zYMI5õKæ¶Ø]Ã\ßìf_Rõö¾NÒ ¤;Á/^MÕkûöÏ^$½¿Î¶ZtDýHÛí#m!Åcó_¼6DñK|D½esIyͱaëbb-Â
rnu6³¶/
Åíþ§6Ü}¹
aJ¿æ¼¯`ÕûUí§ÏvÄÜ÷ó£Úàö¥ï×í}óþ¡×ÔR³·8eO9·&éú\ÒòØag#ÄTkqå<$][{¿Þáá÷}yâqKþ5qÇë3\ãL\ª¶yøxõwëæëåý<Ô^¿:ï^¨Õ×g@¯J/9¶/½d}Ìî6¥¦=S$Ç念¸4;ÒôÉXé\yF
]
£Çu5}´â)¯nNÉõRÚ÷ÒàÅÏ'Kä5¶'y\v,ZÛbU¶Ä*=£úÐãßú§1ÙM¶3^¾¤*¹@Ýíø ýIon<ÐgqìLxRª¥ôøRÆÄÞnD
µÉ9C?FÝwW3Ôxð|Íå¥|;±¯Rj%xË9²ÍÛ¯ÇÛV?65°örvíÌüÔüBûc¸òÆØ5ɧ?$¸[OÕ|baªÌ¨ÛEï´2èr×,Ê]ïÈ©¹Åx·4e|<àÍÝô¡«¯À#qX{§82Î_¿dÇçEùÓÝûxYÙn´£óÙíxRÙRùèþKÍó¬){[É0¾¤9ÖW©ö¾-o6qû5ýmã]$Ê'êä×è*ß]Ëlî±y³OØ/JÞ}2`Ù[»5ÛmËÇMÙtÏÌc¥<3pØh ¬½^«Ë¨ìý¼úvÑÍá.Ës¤¶x)Ú÷.5næð£÷Ï;ºªÒ^tÕÂS¹¦w|¦u^¡Ñ÷U[÷§³ØÖtI[`¯ö¡Ù¦U¯¹¬6iÑv/?;u72·O9¶ëzÝÁªnNû«_3BÏÈËæ¶?SÎëo½^ÖquÓÿ£ãä?sii$ËÅrãjÞ¼ÕåS?Ô6ròmÿðд}ô©kùr^ùÓ¿TýLÿÚn2Ø@UCÑ#ÿ¾lFc/3µ¯²ì?ZÜ9¿z§{¦è7LÉ
(\ûMVfù
ÊÖ²ð?SÇ]:¢í:´ìÕnBV¼ç«ÍÛ,VH;ªÛÏJ|ã1£{æÓ¢;
ÙO¾É¿¶½?8þò=ëUB×Í×õS,cLJ±µcÑÑkÖ¶e(Åüö?nñg3ÎÝKÌ«{>×ëS⹫G"j·km~:,ÒàÝC@S«ÂIñ¡¿ÿ;«Ý¯Ý.dÙàôeßÅ_»¨\°ªÌ¢ßpäì8´:v£cÂêðb§]MVºVún´W!¯^ºp÷÷ÇgÖ·7x~¨¾Ñ^ñé@ÅÏ#Ê>ÆmOZ¶hÜWmåôゥ_Ìã:%§6ÇÚ³ä¹á¯Nïç%·µ}RâãÁ»6½WðbïÔdfe8kíáûVÆP¯·ÖÄêáeqw,¤kÇ~[¬xjӸܲ7Y³Íµº~ºx&«ñALò^¡Ã¿E°g»¸HVdl¾¶ø§s½ïõÀ¶}úåÅVçâ¼o÷gìì%ö>ÄGþÙ$úΣ%,o
=^üfòãc«¶O\¯)¯{¤>¶àëÆç9·.¾¶"ô¹KTTuuöÕñs?Üs»²cåçEI9ä$â¬ýn,7Û«®0ó¾Ôûð¢zCËqnÏF¬XZºpô§RëY·.Ú»¸sxJêä¹eC#B©+6¼L#¾©XZ³å¤·£O8Ýtún±õõO±MÓë7?ÊÑhð\WNù¡ ¯0û,ó{ë¥g^*\ø¼pÎE©%÷øÓ^[Wbõ³úØ¿pµónÄÝ6¹FÆò!¡Yë×î©ØÅ{âvÈq^Þ¶æÓµQÕj÷¶]l8yplØe½vS>µ+Msäzô8°Áɶ_p"*l/Ûº~«åÇÙS_ÎÝz£ óZìãÐí['3^¤Çoµ(9"3¹òVÝÍ
%£m&ô½|.ã¬Ëû'V»¨códF:7&åh¿¶Ó¾¼[P?P.ÇcÃý¢py1½Ý¾{¥Úédh©Ì
ä¤T~|ؽ÷ó?\Óm¿¼4+ÙsáÎÚìGc%=¬½õ±Ì{ËÒcQ¶§çÜX0±tâ,Û¥öG¹¼w :r×¹âUICêúío2Éjþ·W
×Ü)6MÐVÓd:ë_p³°iAá¤ðX¿?t^êF· ¹2IÙïB36+²1½°º® #K9=û§ÝïôIuÃk8û>Ü\ÒTë³kÈÄEí'^S>éç®þâópzyÍðùîó8SÇS{©QïŲûþgõ²&/~24µ¦<tì5
½»eZRScs2öjnK;ûbúí;«XÇÏUy1âÇzÞsxºîö¹ó¾o±Ì
5äºÒÀ]¬v¯Lßàh5#65iý4ZÓÜúÅÜyý®>`¸ýqêø)oM¼dÓ¦Ê) YUSu)Ê@d¸6dë¶f¸p²-jFxLîïð£2Á]ñDû±ûØg²4/3ù¾ïR
Rz[ÓO>cÎð¹
?¦Ú=n4*`·ícd§2În
N1Oßu¢Õp&Q5O¿ª¥£+1Ìpü¨««·«:mÙjû©V[w)«52`ßåW©2óìÕsøQ[*msWÖðÞÜS÷Üy»ßÊ1\Í9r{ûðt5K}[-VÖ?oY:]RkH}ßWì=ÁùìÙûf{XïÓ¼ü"lÔeý{FÎG§Ïýä±lï|yù§«Úéõ)3ôÉÖÚr7ñðrö
½ ývÜû<Z'1_±L¯ÂnYIÎS5CzÞ5Åî¯ßyëgÎ5Mñ;?HçøëÓoTz{v^7ÌXs&¿:D÷~üõSÎ}>];ºÝÁ'4xäÉYÞ-¯çÔ¢g%)YL¬ÿÄO×Ì5Üvá¢ùÂûMób®yrÔ_,òWË }
¶
´|wàmúu;x¦âíù¾9Ù_½ïSð\»bowó³¢ã9×äç§mp8Í1«xªWÉã^*¼
Od»}Z_ýÎw»·þת9¹G¯~íÿeukA¸ÊiõO6ã?ÿ|o¾]Hø3à Ëj§K©ºñy×@ç¹îVÒÙÎK¿;ú#åäõô«Ù$¼wÈHünæWhiâ9ÇdäÈÓzÏ;Þu´)°¯UÛÕen7óØ9ª¨¬ºìä¼¼Ê"ëDÅÓʱÖeM?±$déÛHiMקvçxÏ9¸kÏWéÍѹªåïç¼:Ëm½¹óÓÕq®}Æ×<¨5Ô#9/¦"vôåïíóûf00ôÉôÝÚÉÕis4=htÓñ©RÊã&Þ{Ùÿ§½óäDz.7zõÁOgí¹¥*crÿ®³çT+»'úßåz%¹ñÁ½êü,Ö1êcK71lßPúl[+fùüN]±¿ÝÝZ§!)éJÍö;?´_x%(cAänÉÕ²¨C>ÏO
ÿÔ9úJÉÍ,À%GüI53AQÌñhêÌ ~õ¶w÷ÍÊ^xY¾(}÷hÍÛ?Åæ7¿³¨hÅ3Úþ\£ÕG\¸«Í.>&¹h¤T.Ã÷ðU¯¾Ó9ÿ*úsùä µéó£ê
ÎyûUéXÀâ=çÝïf˪$lÚâ~Ì7µjë÷59î
«_F~¯;(¦ £,_±¶GkNËV¦hN3ìDÌýbK>
Ý4VûÚ;=WÆc»ó²Ï&l;ËÂJËplX?oÙåKk#
§¦õƼùÂ*ýð-Í
{¹ÔËG8{P × ð,uÄRÓ¹[©©x'+Kqʤû¡vìKkÔ%£_+´´|Ñþ;Íeé
/«ÖÝNÈP³èEáË8òqØ$´Ïa)ùza[3Âá)¼^âbG¢¾GúDìЫ¶2ßëÛYj?lÈptR¸°fÞ9n¦±Çɤ±÷í¦ßæLò?<fæíï¶9AÌ+Áë9ÖáSU>(!ѹïíò1/®V¶7nz4|ÒúsÚäÚkÏ8TSשà?sVZÐÝ~'%ç6Ú}&Bòh[ZÀܹOv*i
E£:T|;ºc«ßâ'+g
õ©ô)?å,ÃåJêÕ³÷®xHö²SEÁWæÆ÷_:lK?ÀÝjzÈîàþ7c/ùMæ)*Ì~#¦òbÑSò×ßJ±ÐÜüÅvÔÒoZ?8ÐƸî<Ìøݱ§íôx¦å¯9j÷|vó+½äÊÏn7â®)ZºEÒä@˽ä¸[ù®4éêG¹ªÓqæ·ÂçÜý1åý+éEÖ6[z¿öúpt¹qèצË|*¬¼ì½¥@q9ÇÚÙêyµ^ë¤#ü3e§=2¼2¾Û¥®ë¨bкýÍÇF&©xDsÝ÷ѹ%%=Ô ÑPéìê®5lΡ
ûZWüp©¾]äý
Uô Wú¤gÖÉyàൽ3TBåRbíeVX¶vûý
7>9Ü»Tµ^g¾Õ^ÖØúe|Ô9ôZÉabî{\/çÇÈ7]>ïù 3üäæ,4Ý¢ôÕ«cÝ0íø;GSw<gð&u,~nÛ
9HáLýgeÛ+o_¿ïÞübÖµöI79UO$+iYã²l¯5ѾåÞ¾÷!zwwÊRùÃC;c^\?ûíXÊfRÛ[Á[ì3rÆÝTf/57-qÐm?^º,íVØ}î/ëuѾÍÑN=ÓªBÝÄ÷Ü%£1íqéQ·"â'Å]¸³Ú=tdåþ±ånýýÞ¿P <c ®î3+17Ã÷¡»¾Õ×znp9ºîLçÞgʹv]äìQ÷ÿâ/ú "-¨ÚcIÏI
á1#<#CdENu4~Ø»ì¹Ñ´)Ì÷Wì_6Æl¡s{RmÙÞÖ;uRz˶uznôH¶x×»ÿòäãeÊ¶Ñ¿Ü ºM·*v^Ðd§Ôb㶸ܬ|?íÀHEÒ:jñǵÇ
%==s¿±>«â¾úÈá\G)Ùë}Èäîù'y´LRÑú¨çà=mÊzÚAëu?ô¬ÑÎF3ú~QÓXÜa¡e)¶Ì:á±Þ±EIÖ>¼³la¾»\¶Gøé¨ËSSÞé*{÷©(<þÖ$atÂ@9Jì×<Öø5oÖÝzj|rþ¡Os2TJ2!CvwÚ>Æ+"w={CóÛÓw÷M÷ÿ¶1îJîBÚqÅKq#Ù[
ºþª¿6])ÿ1õjÿÝeë¿ÿáòvìý
S«Ò¾$<SyXæLP~+Ë:«c²r~ï¥ÑH»¼SÏ,Ýîs5Í=¤×°æò£¯³ï쯽UA¥BÄwðF¤êj?îñ>çmMkB½vÄØä¿9ÏIJ×.´É=÷z7ª|ð
©w¥äÆZïo:ÍÏÍÍ ê;&Qfi:R¡-Wý)îhTëëÁSK_i÷Xä43»÷ÏÛ®évHKíX©vȤ¸°åz¢^Ýúý£bƤøOÁö <U}hIÌü¯ÞAGòÌ6ÿIãØSþï½êx*ü㳺Ë/ËgÔ+ô²µ¦ÛzkQ3Izï1
ó¶1×0ç«+VL6n£|»ZhkWŹ:psÉÃùÓ¶%þPWºáÕÊÆ2»çéºÉ»¤¦Î¿ð5e©¬î¾='¾½}Ê®JöI¾chÙ/çñÄõ²Ãâ3O\>2âáÃYÚ÷4?iõa÷]³*³©8töÔÚÁ9;ÞÝcÈ¿
îE9vaè×+á;7{Éx?ñsÒÏX
ï{üÐèÜçLT®&ØpÛùcÛ°^ÞQ3÷ìË\ô òó¶CMu ½Sb×~{¬0@Îègi
q
Ñ=µP9÷ôScý
ò;7çmÕo:.>þ£NÉÆ
r,´§UyÚï#ýäôO1é6ÃóÇòçX]÷¹ô0j[§÷¼¨#ïù¡r»Ì¶µlÛÕÛw[¸æû^¶p1øüàÔ¼eé4ÕtK÷ûs¶{ñýóÒÌWöl*=[Ü@ɾaWpÍTÜÊt¥|úªþÜz?߶âö²4«Û,ÎM
¬Ö¡lùué®,9hp?$zVEeÿ¬´$#»l -ÄÐ]Ò
uöjØ>Û³.Ö<}øgþ·Þ°Êt/]Q÷(°®JQiéÖ'J«çnÿðÀÃèÈkæýȬÍËkýëö6<;F2¡¾ÿ¬Áy÷o÷RÛGIÈ]Ü'N,l_ÿÅÛMë][Ä;{}wt¾µÅ;§«Y¦FïÚÊÔw¿OuHUó2/q£Ë7VÖ¬n>En{à1lÝÉè7cvûòî4ñú)VX¨¿¦½1àdöL§=f²>&Æ[Wã»9ÏS5Y·2ÚÑ·#ã`Õôýã7sîݾõíÑðu
^/,ص$ÃPRgöèk%ÛÉo[ý¼`X©ëö'Õ6<µrº)£ûSì©ôÔ§©{ÛvEèÈX6ù²õì׶v}Û4Ò6qlY²ñBú;95̬eÃØj¶OY_Ç°Lµ¹ªÑí±VF´:sÍKÒNM\Æ=sýdÚ;Ïî÷Ï¿¨ßy¡ÑÖëÿnÄNËÌ¥ÙæfgÏu¼÷ãvæÉ;T¾W
¸rìUMÕti¹©n#0^öRì°Zqòvî¦!ýår®[Éäô]µô¦{â¦Âkæ]¸¢ôP[9§ÜVç¹:¡.*òé0ò#YáÛ
\U÷:}GÜ5:b%×é=ùôT_[eõ.5ï
*^%«H«îÔxöÐÛóô·ábjæ%˦^ÙUïÇ*ÑWS²ß;àm´nYOciÌÝÖ¥]{µç¢â³ëL<MVܶYlÖZã:Ó:üy}·¼I®cø4Kþ§XK¨&~µvæìQ©FaÞ»ð¸Ï@ç´öë{¥g®Sô~Íu®Ó»û£*î\Éù~g¼ß 7VNCò2
ö
î£x"Îãy¿àÝ[ÛúänÔª÷bxÂra[X
^ѵms\G4¯yÿ|û@ÇåÜÎ[hTÿ^W,:}Åé5ÕâîVy
$ÜcX/Lî°vÔW¶nyªäÀ¸5¶åÛÔYÕág2Û¼jØ÷ONªø2êåÆm}BoÙsf`ü½4õc~ÝóhÈÿtBAê=&w¶ËÞ 9$áô ¯ÃÊ]ÏnhÒ0Ô,¸lCFyèÈ}WRä¿>Ë2êgêµHj\òÐz§
&Ï·x¶Ú9Ëçõ¥ ê¥àu[Ö]°ÐØhÕQ|ûSÅÉâvµùc$¼õX×¼ÌêpÝSÁð¢{{Ü>û¾f³×£e¯ÅgxLÈ6¶rôÑ]È_Ìó¨ÎüµôËt71sî]ÙuVY3ÜÀMÊú¥íeRjSêö籿| Ȫár︸Ü
»Ò¸Þ»¹ïdl/rzþ=Þ¯Gô=üTÁk£ýFËgÃvlëuoÒYV±lzìFk×}ßKÙS?uº\qÁOÝiÓ¤ë\H´«G
*HÙ͸3_¦~rµ¼Âµª
#NO½|ãhÙy`³o©ÞË©³..ìûýئ%\3;ýcAgÐ_Ï^úêü°ô¢cÖmqòÏGZ¾zßtÿA~㩪mûd-§sÕzyÒ§qêDïé±w®.½iIåì.H¹þXÍCýýL]§ûwG¤CVzfïâΦóOmõ;lôÞ¶Ùf)µúÛí¯ÔÎ062ÎÒO{Õ±ék¿è#?¢fèËM-©#*Ñ>ï$\.׫öë«ðy¸ÓùôÝ}ûÜNýÔ·jS6êJkÖÙ¼Vã½/QþH»¥ìÕ¯<fæ!ãëÓ¬÷Ûºú£U¿Ëæ[ýZT{'w^y»hÙeýl© måíßm}_}1¸">ZÉÛ»Å&K}ôè¸u[ÍÏ®;%tË»Õ?Å>{wÖ.\¶Ï/Sö²Xtï
hÁ}Þ»Ý:~8~×Ú!2WIRsò6ïÞ-¿8ÚEºÎcluVcöͲÜàgâªWi+rü?HyÌiÏ6½iÓ.';êM{ÆM
Ý2.QýÎ6|ºQêÉ5^NzX[_¶I8ïZltnø¥3ÒÆpöÝ2aýØÃxò\uÏglßÜöÅñø¨_G?qHL˲mÙµ°Ø¾wêÕ´Á+?',><Æê{½V½ñzîý#¼,tË+
|÷aþx®ùϯr>F')P¶û]÷\!eöS,¥þdì¤)²ùÕÝ<ìú±]Ëûð.6årÕo©O¿©ZwÝÙÑX¬ñdhù%K§ÈúV³Ï~»ÊØÍegW$fÉ
*'Çkfô)ëamõNª×áæíYóªã®éîA¬µawf½m ?õzꪳÎÀgÛ?ÍôÞÄÊ~ÛRÏi©x^ï5u+ëzzVs
W¾¾vm|ÅvÊ쥺e©S
Ì;øѦ¹bAôè;C½Â´V#¿jú³iQ\¯ïCó2sveýh1L+¸¶ÀÄb»ASãÆ2
»QÜã;æä{OáûúÔMWéê*¶~|Ì¢k,·ç!º³F½t[¡s¸õb@ö=æƹ¥ª4î@&ßH>ö%åóéî5·Ä¿;¸rN´Ë±ôe¯¤ý¤|ÿÙ4~ÖÿÓrþc?=å
±|N=`þ`ÿÐÿKGg¦V×þ¯3¦ÿ·þûäçý¿ÔÔ(òV4}JWd hêèhO yé¨MÓRÓAÑÔÒס¯9Ý6
£ÈSPÎÿöÿúoÿ¯ÿpÿ¯.í¿ðæ_ö,+ Ém^E[qhlV5ÜöËí¤ð9:I1COtüêÒFCeøûúb
?¤8ªSl}MÁΩTò]z Zué]ÕexwgRÃ&ÔM ë-DñaðÀ©ûùÑ9¨yLa£Ã»Am¹¸ê+"Ö=Ë¥û0zKZ÷p)t°:ðIØNÌgÁ6Eà@b®*ѳ6ÂúÔ)ö~ào>¯ íL§@$`RC`³ùp:E!Í3 ѹ!ÜÂ5Ð
5N¡±)VB.8ÓìÐÏÀ
¡³C
ñ
üWHj
X?lÑG?AðxNË` ?£*@ü"çÂEBàÁðÃZF"vÁòD¸R øw ° :K ì¤}èPq
iì`
MÎàÀg`h5à4 CëL]À ÙúlÔÊOð_ÏðÎXn/ãh
já
Ô%BÐc>|Ôb¶}
3- ¬yxp ɤjLaò
F}¢/N` ¸ÑC:oPÀâX'¤/¸[¸8ÐlÑÂ`
hg~Ô065Ä)g{3{['gcg'¤õqb(§2UÔ]ñR¬Õ"Ò´ ¢AÙIç!)ö³é?÷p÷¹ì?rp°ÿÓýüÞþöêÿ¬5SSKgêÿ£óßû?ÿ?Ú$d hû\O7ýtÔ4u)zúàÿÓu<(¸îügãO½ÿ_ð¿&àÖ4h3`"«m
»A-¹º6wéý÷æ\OKÅÚXÃM; ç¡UãGep(,~°¦rù>x!d|±èá_ËBöge2@]cý`SZB?G椮Á£v¹`:¬3ah at Q´(} qÁAøèÇ`¡óv/ç@ñ§BÔàBvå
¬
{15_DrHP0¡ÅbB²j öC
ŪԧÁHEv?þç¦D¬@A÷\¡îKñçµhL,$Þ»#"9 =`ؾ/I'®¶þ,Ö^:ÓFá`¡è=È F¦)Ï¡%Àh4F~ÄÉûC£GÐ`Ý i¬3a_^Øh,Áà ò
?J4×ù!PFgO¥!#ëͬ§FÌ1|t<`]"Ú-ÃÏäÁ
l̪½Ì¸y
öÀC0¶6ñ&l}MQCèA&*·Ä&0&Ý1 º¥¬ÌÌ!§òeòi@ÄóylÈ4}
)qèÊ#
¢7¡tï
X²VÂÄ8|Ìc (ñiðè¹tD$p$%me|á]Öø{¯rEÀ
¤ú[Ì£#«a¶=k>F@¤`+
@ÄÑ
W)Æþ@_RÅ^``Ð!qÑ*¾tì%/¹ÛZ kçöñAÌaÍþ«vSpFd$7z¢.x"]Tô¡É¸@±v"T~à#
&Bè=ýË`À ¨ýÈâÆç_)8KÀÔÆ`hv
úWùPL '/´²º>±jhó}pC0È1t`QÉå
KqG8jS!ßåbÒIEèÇ¡10½'9è#[ÏP
ç"q-Eö¦j#ËÀ½%;tãYJDR÷ð(àt¹Ê]fÜ3Æ=»F¶1|F°à²±
nìÌ^´ÖÅÄÅN0ô.~PB<Dh£ðØ!\?B_(ØXÀäp*Ð=Ìèa(°UBèÁÉ+Ó3LPD±Ð
³%й+ÏÂPŦB
ÄÄ.ÆsÏJ-E
gôbu È¥C*
n FË `é
¹¢G¼.(<a_ÌIü°ä©`*HVB
`
t%È8~ùÒÈÎÙÜÑÖ `°§çwq2W¥8;8Ú¹ÂUÑSfVNÎV&.ð4¦:Å,,`ªNlYÀuÔ{äOA`V0ÀÌY¡r/ þrØ4>BU|(tà".l@ºpJ58aèÃ¥h
2õ0ÑxD×Åæt[
4lÌÙïGÑ©hl2dÂÀ(J°t<Ü
ÈKYxþÆU&:ø?IÆcq(düÀ GÕ2¸]åÂ3"ä
¥ª9!¾$|ª]1-%ppÇ,¢@`eÂ)Ù4(0 C°ÐÀÌ6&0 LH]²Ã[UIãÃ`¨ôïÇðçs0&ܮ¥Û#ÇU÷¥cðT2±¨ôÓ¡[ºÀá
Cá'LÈ R0ð áTE7ÑeP-B!óªaÛÄ®
ÀGD6Læ^(LÎAÈL§1¨^dyÛnlNP7¦
ü£ÊC äÁ]&zÊHG,<¹ôP>v À×Pá%Æ´Ô)PÓ
4fÒ$sÆÌÈ\]ö$YX3Òâ^
OByoTV
,nÍas¹j`øíJ¨?a#*Îå3xp«Lº¿HðÒM¨_£H¤WüC2[87µ
ãø
'ØqÁHSÅ"Ù¬È.H¨L1S
ahiyV
IH¢ðô\¡r
åáÈ'.a¬@[âH'{ÔigëÊ
²[¡Ó «J~º/EWùy&ÿqª ab '$7©#ªx&*dqº³X
<?Äw%LQ>}&ïµçý¸1%f pm
¸§øNâÈ41î@GKE°É>|ø6 L@)QB'¼®.)3ñjT,ܧrø >7°nè®æ`1s(ŲF»º|ác0XD2!_%{~'V·ÍdcïÂï0åmÃmªH'àÃ
ûQLxÅäÄI,Õs&J´çøÀÎñ*è]qøg:Æ@AR<õÕêÂ@$7àÃc §N1F7" Îg6
jQ¸@Õ]\»n#´Pß
ÉÏá£e¸çÉDw'p'ªjw¿±O$®l7UìÀT Ì°¤6
Ö!°¹«=¥Á¡ïÀ#Vôá"oºÓ×=ó~.%ç¿|AO£õ&j5P
'Þ8Å9U¡%ïÇ Ã˼@@0Ùxýty
`¦¬çBYãC \Ú ËÖáUù°ËKZ¢dîâNË(cÍ*¼ë XnÄ6)6®G~!"£¸#
K8Âk-]®\=á
À2tI]¢6Ð*º§¬`QÐ |QHy°,Q¿¯[ò\&véÀarDÜUà:9¨ß
äßuûçõµ5§uÿ?CKSë¿÷þ?¿¬ÿhfoêìî`Ë<¨
åâäîälnKQTW×@`ÿV§ñhÿ½@ô_±ò¿@$.rH\¿@dÉ^þ³kCsaH\ôÂ8~aÌ%zeÈÎôeåòºV¦
oK3£Ýij\¾qmȬÏFÞ
TðwNsè|Ù/ÖÒ'Ïüæ*6¡s÷Å^N
Æ
þA¼g£øW_ð>,Z Á«à%#dåÈp@ðÁªg~ªcAVaL.ÈÊ]ýq¢xBOósù°#Hõ¸D§w¾'Ía4°¢Ó·ÏkÉ=¬
2.D¡ÛóKÂdùB§L-ázm̯ãÅþ+
¼OG
¡3[û©L?^=,?ºÏÁ¯«w_YìRüèNØWÍÑëxeQ¼~ºkק]Õ'2Wa>9äëðï_bÈd`átT¼Xòô1
iõx*sjCH¥<Z.ð³Ô%:jÀ+ìáXV4L9Xd`ÑS:vãGí¶îÒÛ-
øõç µy^$>P%x)ÂϺyÁLäêcDÊ G±ì>
~lV ÀR¨ið}4¨Ø@»®1mQ(ÊÕòC¬Ò4÷Ñ50_£CºUÂú°ø)wå?xuì`üPE`Ò"Ku
.Ý°ªê°ëRÕQI
+µ@gú ±wS6½>9`
Ñ@(!
êC¾0¡©¤8û!)G$¶
&q
K.iñÈÓ¹!ýKYA-@6¬ÆÁoØNM
áÛ, Q×M'Ìgߢ
° Æ£ñ#èÈ)"5à±qo;wð?8˲|¬F§b¬O¯ t¡ãJ@?
Õ^ Ð6\4P,ª$7L¼e{]Õ
XÑçèBvÊÀƤ2JnÇKö ÅjºÃW`6^L/ALH«REÐ1ªqà0(p¯òf·ãí¡k*±ìoªo**ª
¯bÅ
ÿªf+4zØ 7EÞTu|ÃÔe@@;É*9Rð^N@Q»ÛÅÁ0_÷ ©áwóp
Y¢HIÇ'Õ}ìéGP¦ôO?"8»*ô4
k(g2Gä9r
2ìGMhÂbV$Y^cI- at e¡¢V}ìÓÀÏö7Ð ïâ_ÞnD0óïö+ú`OÆÄ{~¡
PSÁÛp1.X
Jã `µLTä/wü½þr
&7ñ#.èza¨¨WLÀ»EÃõ$
¦Ô¡4
l
D
¦øPT¬Ï]X$¸yGnÑAõÌ|ä
)ßÃV)j]Çf
®µf®øÌ`üBBO¨BÇ®z/ B7¨J¾`tüMÌ
LÃz-Â'
ÐäF6Óæ@W?
ÕéÀNý¡CHXûhcÈ!¸Û+°>j@
,[Î&¼ø5Y¢:à§OFjjmÐÄJ ·]æwõ{`CXÒeß°ì^ ("¯
³<¬;
5Í aeö°è8ÒúÂVñL:Í_jà
&ì<|Ùì°ØkÂAïÁAáNºWp±àáæ\˧2±Æ5hTxgB¯¨
]bØNQ<bì<ñEÃÉ°Ñ°ºVÏóÁ¶É",SP"¼WÓ@¡rz0JÞÊÿh»öÇû1X±þDèï×Gô+r@ÏH/Dg@ÍÁX
âJ àáÀÃï\w#!1{¼VKgú©U÷Ç.(èâðËWØ5u_°{âÎ/
KqâÛÀÐ!
AÄèrZ¤*!ǵ ù ÖKvá!\¢ÇOÏý×hÊ;?Ypý¢ù¨Ó1ÅÑ
¢¿¡+ä,Åa-+ ¬ß ð8µ±"`=8çÂÙT$%ÁáñÝyQ
¡b9ávv§ç`%´°T´g§ªd qðã'*aÉåóÀK>Ù_ÁZU¤YÆ·èxê
èÊÔÑâ°Z븪 O;#ªi°×h¤p®Z$<ùn_¨Ö¨ýòù?(sÑL
[Å ÍíÊ
±ýRF&#ÔæÊ t
_î{ #ÒÆØ~Âáài¢ÆCĵ;Ás¤( óy¥Ó5eXçQÇ9,ÁhÌE÷VIBËàIC'-0¢À¢4Ó)µ*4v{Ìb`Xø©EXvÇæüZ!¢»H6Ç$º+xII{Hpè_Ä¡ÅÓ&ZÄæ§úpÑø.ú F6âk"C`ÙLk]^Ä}YxQ ^Rñzdëz´=
ûOÓô8´@Ú'ùÅ@þn.VWU¯ÜÕD¶Áðvü]"&
,s«`}o{Vÿ¬FOÜï$Á×á.Ð"ùûßÍF5
1ó^UpyT_ª¨j1BIø{"i°È7
+Î 3_¨èB5°Ý¨Å
1HIÁã
«á+(·2ü|
efàeoÀÓ9ʪXÝT@(8ßÝa!PÀáö°zÝ
pWt£ad1Cd§u£ì?P´
£õ¤lý
þD6°þ8Xf¨ Òäâm
`±/1
Ó+Î#Tñ
°Îï"h§
ÓMG¾Da ¯pÃþËð
Aª£Ax\´}X6Þ ºTÉ3@Í'¼Ï
ïG3PÁõ.PPÿÃ
&/?6áÜ.9A¿a_
÷%ýK)!è{OÜÜÆotr1ó/·BW?]X¥²î`Æ<ÜùEàGäáGGLû×.º$QÙï @ìñßÿ[ºÊd\ÙÅ/Ð@Ȳp\y+d4ùÇh
ö( kKTkµg}¢«°1ÂbQZêÓÔµñ8ù[ÔìPàõá°èÚF0kTÚ°»ðá9ú.Cd³úi]¾Ù >Eû·ÂB HJ)¢SË#¨?ÖÝ9]×cÀôTãäEö¥Ðü¥(
¾ª@ê+«wMóí¦ç~8ÁVÂ×þ4±FÝ_5ŧ3ýFãE7)Ì)¦ÃcölXÓ\oU¡%}õUÃÁL>0ÓWQÚP]eÌtu=umUÜ\èºyppÓÕ5§uÝÀ?ÔéD9p÷¢jÜ1ÃØ}D°ñ¼¬É&oâ(Ä)`pâÏ%K¡úñp·Î¦Ûãçýxã#Ä©Hì@ÜóÂäºräÓ'µ$ï@´Òapà
æÿ\Uùxm»*¿±-±Pù¿Ð¶
ºjóý(pÃ) Pݤ9$¤ý¡G²1U¨Vàë¢ëQÑEn¼Â§ÀÁ.réHË%epÍJBÿ fá¬'²CÈ7FC{j£ð`uáHWíâÊçbðív
ÂÒÎá[
[XQ¬OwÓÞ{VßQô
ÔõEé
;Ktáì"VÆ]°Ø3ìØ
êrlUP|n[¶ßdð]ÚPy:OÀSá$L*PXpp=°ðº,p*úÂ2X"ÕEz
/YáÊuxÖ,Pòº u
ÌAÝËXm¥eÓþuÇ¿÷%ªè@ùäPBs
vÔÂø@ç
ü2¨^$.Ò%Þ8Å>Üy¢VÝNï"@ïCIήê§ìbÛ!0sª(r6:Íî娩Dó¤®0\k N¶@ÜÂZª]£ÞÂÛ¾¿ì3XuAK]`"¡Â½x©_ì.+\)ºò+äÈ
²¡v\ÐÓ«åRý>tvtã¸CG`¸°=áèC=j@º8vWÙl¹´&`,¤rIuä#=.%¨@¡N1YTÄ}Õ&
¾°ÃHµð^<ï;iØmÁe-At»¢#Èv"q¼ÌãF"?~ànQz(øÿvE¯öóÛúox9øÿi+°ß×1ãÿiïݻڸ²¼áùÖêïPddtAÜlc8!clÀIçí'«WI*²¥*=U%°ÒùìïÙ·s©$0&éizºTu®û쳯¿½»ø[{[{[O¶Õs[ÛO6øoñ)Á ÿ¶»[¿}ò]Uðmçȸº¼XûýÂn.Z%ÚÚ)ÂÀWkXLý¤fï
$¾Ö*d[ÇÖÝs!(¸¹ºriðÔ CÔÔÕÝ æ!¢û®¼C#º}-\6*kEõ8 £ÃË×®ºKÕ]a`Õ¢¦µÍ\¥ó
¥qWî(IëVj×£$26ÛCï@âKÎ[¯ÁÛÒnnÔ=~U²·TX at b[{÷wÝI¡òµæ_öÞRÑGÍÊísæßPM¼9"PýoN*ÒÂ_Õ².ø
ð9£¶
A>¥°P¤cEeJÄË)
âÐe5UX×Ú[ÁÛdö»¿J±^0wý¬°ðB².¾CÞc¦c.§¯ìÊzOôµe0ç>díé\?a¢:Eļ2ò3o#$GBX²ÂTUSÔ°;ÒÄZRÿ²Ö§ýò5ÿ##²d}¤¡R·@ËÄJjø5 ÙÊui at 4â§|%T¡Ò-Uå)êìH¼[9MqÎ(²a[V²¢7
ùìeå¡fSÖÃÙIw?ͧ5PÄùaÒP@ÆiÈQ
:Á}Y¹Ýú!@TºÚÊr=J ÈLvQ±<(êý£ï
#ñ
Q½ö0üöÚ|a7`
oêULÊö«¨T~%b5ÚESItÖH¹õc|ÚD#Ie¤«9m¢÷=¤ø;$0÷ÐE¢UîÚ³T]±óÇn¤ÒÍÁ¢~¤°^ð 4Á{ÊغÈúP;õõ°©ÞµÏIÂû
=´a^/º¹y!/·»
pÝàó*ÝhÚäÙZÕµàgE_?DÑ_ÓP̾n;8.Xa½o
Îm°ÇKmE`¦B{±h´À1OM¨vEO[ãüÐó~Ñ$TɶqC©Å
hÌ}õÕBÏÂD9
Í£ú1*9u¿rå~9£¶¦ h¢¤Vl8<Z?ÃlJ͹ ÑBôýî"AÏÁ»à7à¨
*&J£b˪}vyº T/MCui3?ÐìÑlæRßYrÈ_ke½´r,Åì4S7ÁÁÐW
Ë
=?;&ó]Ô#«USÎRm¶ébëÝ÷`£ßù5x§^£ö¾V<{ìôJaé+Èê¤Ú¸°;(Ô÷IäýðãYêiSsl{ cñeø¥s8Á$¢~°O4Z°]k+QÌÞ8£*R \ylµídÆs>«êÚ*¡ßROön?<¤ùÓäÕhÒlä0°gFsÚÁ¡ÃBãÆy#/¡÷Ð~)Æñ¸î`|Q¨M ß®9éGiFÓ3=ç÷¤¤»{Rãµ*¡´ÜáËà<-f[£²_
¢nD,4Ù3@è^zÛP$RöLiÙÂÔpvÖx8QÚÎð,¯¼Qÿ¤¡ÐÈÈéÓ{þ$GF﹨ëä<yQkÚ<óÖGTÚw}ï.O¦|Ñ_M¸¦ÎkÌIÇzÅÀÆO5¥±£Õ"ëâÏdy£I%Ú±¨¤*MTõ)ìYl³¤QoÜ¿¬d®ñFtÙÇU´c+9
JuºKN£"£5;-²x"ñ(îÏáF#â)4appi:\Õ¾üúÖ¯ö/¿µÔ³-ùC°ô¿Á¹p«£,Í YÞÚn"§XÿDÍ>ÉÀ®ðÁA
ý -»6-A8yAO%ÎIÛ§£æYÅÓ8Hi)¿nÅäIõ)DW´.¨³Ã·§¯O.¯g¯{ò©#?Ïs4ha£?«<ºÇêã(ÖmeQ½j~Ê&¡TÀ8Fò
H¶Aõ<UOrî# qü¨½Á¢£¹!
ÈL-0ÔØL ½4ZçrG?B@;H£ÞÒE)È¥W
±øºæ×]-EDN,
f JzÂTí8SPÃ
EåÆûû¬¬"a'l£¸ýÂÄU2Õén.´pXi¨£üÈzæ?Î(Ê}EjÀ
¼ÐA#%vpCÅ@'Ç
E.â P*èñ2ª 4¯[ñ$Bà]
wFfÁõÎóç8(ÅV.cF¡+Çs©}ÐpáKuºÄ{BuuEò,ôÑüÊ&&O¡Fà}õdwK¤¼èG¨ù1ÀréY8HÂ"Mû®^)zYDsÊùwlÓ>1^¿×KZ- S£ÁÙAèÆX§¥×£k4
oÏ»é>¤¡@¼o¦²È?ÿíèøðêðo«$)~+r$3:fßPãÃ9ÙFc°ô×S¿zÆ5÷×t
Êé2/×¾þ8
ZñMI÷ÉæÏã;9Ö4éÎkÞiñ%ÇúË/$ñ¾Õá
¬{ù2ï
]BÇÄÚ¼ÇtYío0Ç$QQµÚ>16$y!k#ë 0õbÌnù+\JC}éHªÕÁ%áJþ¢ÑÄ1¥
é%énU«'+^êaÁTª+Ç-ß`a¤~j¥À_¸Gqô«+,"báÓ²Mp¦¶IH¨7ãEµÊ¢£S7fÔÃÄò¬d)Ñ9ø¦YnVu¦;q¸ ôÖ[öêâ«þ üÌíÛÜ1ÓK]çÓ+VÁ<®>ÍI)®¸
S×´éE^²nÑf¡7ÈÑß¹¬S;éyheGç¡@dΫ²Og'WÓ·¯ZµëmªîýÔIª9fe¸VK®k)û´Éèè±&Ƥ¡Ý°
Æz+;Q|»à~¿u|«wÍÊ·¤¤µe)*`®Û ¬:ÖÙ:`Å©1í½ç,
ÁÍÝïâ+wÚkÖÑÎUNÇG¤õÌ|d
,°
'E0z at vî wÂ73oR3±ÒÝ¿q×½uÄ°eEÏ ü sFV,S.ø¬P
D'*µ<6Õ>`o½6=rÀù7°×RÃÆñ¡®¹
ªbV¸Rv(ÑC%ÊõQv,ók\ô$6Qæõ_ÛcTj
Ô4å(¤3¶è1ÔÓ¦¶òW+Ö9iÉA{T½ô
é4¹¸ jQî²è|*²Úû¯½dV¦ÛÔézZkÞÄt¼~ò·6è
Ñ2ßÊsx|îgײ/ZÖòpkTüÕ}éÈwòZË}ïEË(Qù6e3Dµ¿)^ÆW¤¬P¹Þ#I¨vþ¤
6êãÀ®·ºr.EbKÒ¸ÅûÊh/}JRD¯ÿiÑwÖ¥Þ7¤^ÇN¢¹o#Éí bu
Y£x8¡S-*=gëqaIè0äæ#iÔ6÷TÎ9G b\287¸DyíRS Æ:sÒÖÿ@±õbøÀåʾ<¾ÿÝTUã<GEǯbu63 Nò±×[ÞÂìý.stX)òiЯ3tMôè V¨³Õý0R¶!g''áÅf\±3\Å
b";Êo·«;º3Y±dAH¤\Þv¤-:Û¦hBWiê
ÀÉÕ÷3LÍÝèb#ò²óÏ«¸ãý ¾ÎþÈûMëϨ7U¿ÔgÔàÓ¿©HåÉï·¹tùm)0
BMÀm&)8ÍT
CõrhaZNÙ\µ÷Ï>SévG>«&LP(³av&±²2¥Ðù÷@@pgLKup->¦ì7ÀÏ>+À¿¡;Qö?aaųýWiàFòÔX¸q¦ã
¨ÆgÞ
±øÞ4¯h£T'Õ2NIZ ÷W
^ã9³q´Ëà)*ùpI°î+ª
9
À+ûÞJØ"'à¨bßÚ
°Õ^6½ã¼=ZÎ6Õ&! S
o$Ùeõ¨)ÙÝؤà- Tï:\àkØ@'${J#$YË÷ÙÑ&RV_I&y¬j*¾
J9`éÂཱི
|Ývã>JüÎSØ>'vÚú5¿ý)TcàÚöRI6a®q#o¿ áð n÷Gê©Öj$ ¥.Y¡"áO7À£ó\æ ®_VBpu$®ÐÜv£0k×Uî:Êsnò
äãü^ÌÛn»Èq«vß}Ñ͹èäóó>
ÁCbZ£DÞ
ý{bâdõ@(Y±¶¹èòbóÒ(ÌY.æ§fõ`øÚÝz+>f~ÏÝx>k at ezùùuô
am?·üßúííí=¨ÿ·»½µ·ÛÞÞú[Ûíeý¿Çøܵþßβþß²þßCÕÿ[ üßkô\3ê¹âEý
ÿÕôxÐFǶ 6صÔ%ýòaÛ¹þÚìe@~xk §`q6!Ïáw%MP}5²,ß:Ú ÔxõС}Ø$¥]ØÙõX8a«H
9·@³¦¦T
ØÆÎÕéÁ'
ßÎÈ4#O½o_VdBiÀ>4ònôñMuvABMe4@|¯¤H³?AÂKÎw4§$$zÑ¥lµßH7?pñÚ±yV£|
¨Öÿ(bnÃÜÍn}Å^ÑoJ^W_¯¦
ø_B7u¦!º)ÃLÃA²ª¡)±ÀÕi'ôݳ>Ú$é`50 a¥á
¦¾¢isUc?èùÃR]Ü'/n¡:§µYtàW{l`a]J¡®³0{¥Y[åÞ~¶¢ZtiZÈ0«.ɤcéH³ÿßFý*]êí&}/(\-Ïûûíoh6/-ý2sða鸱#÷j
<ÿÖ+ZðïV½à¡ãóaS}ã@éA©EH
bÈ3`>haÊrh°ºé> Ñ
5_û@>
;ñI¸/y!Cy½
q
åóh1V~(<?:_7³ ¿Cø'üK21ÿ6FT5û_ÊXwK³Ä¼i!ÀB¸Â&[Ôza8Üxä{eAXñ4BS:óÈƲ»éøPzÀô\1{o±éWH#ÙX
s3ÜûPËðEo¼÷Ç8_äÜu-îpÊÎ
´±!:±¸5ÉÖ5Â&§'}åÝ$S`.Â:N²lt·§×uØZ#-w¼ÀûáHJ
,xÁÖ5tu,åðìE!'tù)ÇA<ÀÄ÷0°´F!¼8IkF¢A1hסÂía°s«¹Ï®ÿóµ½M¹-üZ*ÃüsßA³{X~
_³Ðq§ésZ.
Q1Ó=ÝÝاñkz»\I~2Jí$¼<Í4¦^Pzëj!ÞÑäÓÆ~¾GÊ
,+Bl~åZNå?6Õës)ã´/y¸Ä|%Y çt´x˧#WSE6áHTêúfàÜU5#¸a÷µ®~3ÿzí^·³ÙWõéÓNçéîn§³½õ¤ó´ýlÓïoïyßæÖסÊ2~d6öLË"ÅÚB%uNËññþ
yZ±È(u*ÅSR(·~@^XTÿÀ{¨ëb@Óö-u
ß2IÂÊ°bÜx>mºBGWÀ¶ï¼õ«kD"@jÒôÒZáv-±ví©ð-ImHé\«TYmÕ}yþk ÿ;3äã5ãDyÐȾáµêmn·6ÛÍm¯ýl{g»í}wvÅãaþn³w»¥ïÀÑoñ^0:<Ü-3wÖ¨ªxÓBóÝÜýg¯Ãôgñùæ½½¿³õO5ïj
·~^tö[û»{Ù;ÖãmtÁ\*E¯©1ïÓj¼Gz<ãN(Ið
ïY
ÔMfæ{0u4lAÈ!¸f@¤¬Òð³1ÃÑe6íÐËB,
;÷½ºÌ7ü»vÇ:T?¹"ÜÈýÿ¡¶ÜÃôionþ»÷ßßÎûü·zôéNÛû¯WðÒææþÎ>j(éµ×J÷Ûý\=ì}EÖoHwÔn"
Õ½Ôn°Z`ÞÐ_$·
¯¹ì6ÆK5ºp%©a)3Q/÷
jYhʳ&ü¶-TM÷8/6Úap at bÚ8ay#ʦ'Ö !gÇé"7Ëã;àÎøÜÕu ÕîRñU§$8|u¡LÁ¤H,ªgR
ø]xv,½ÖPýÖÁpo0ç ùFÇ0¬dêÀ±ÄØ1E5B0â3bÅM4b¶ámTLÂ/¸DP¹PÄ2¾qñ![÷u¢}Fa^6v°0Wy?äD`$U
j¸®jÍ&É0Ý`C^ú¸X¸ûhEâ
lEm]êE°"ÈòÓ~bMJ¸¸Õ£åÑÌ}0ml®ì2È=ëçèMÉ>ñPb8*ÛÎÆÀ\':=û°?àÒ):YO7
±*¬/½ÏsÚ[3eû^nt9]^,B\\¼Ø6wHBð$½i »CJ:[ªÔa5Ö>ÄyûpÝæËÔ6v U#¶ÞÅÍÑG¨^T7Ö[¸q<
£êk©¼FsS½¡zñ]0£PegÄùpbq9KI.¶.&Tg]zâ+i,I©v ¬Ö½ÖIÒ{íÂÖlÔttÍcT«=B jGXb5â~E8M/ãñ®®N¢"ÓTδâÝ3F
.æ¼»ÁXSêÄq¥N»=¾)ÁqB.$ä²Ä;1 Ò.ëz¾Mó=è
hV*eªS<Ò.Üå
;ßµö¦82æOAN䨲~~N¥IêkýÝâ;(À"~EõB&-ûh´_^kD4GbB9®[äu´Ø¤wÞ¹{÷êÚón²w%¡*uC5<qsóyÒuÇ[MâAÍò³aÐs½uíó$¤á´XD»åo±E(ÂÑÿ:ÆKÌ)òäÖQÚ£)$ s`P¡ (ö¸
ÐàƼ)ãûmAd%FV¡
nv9©i.uÝäíEH åà`bIïB§½µè-Cå.òo:¾@(¾¨~Ç<pVÑýLùuõ
Ì2Ãl)~¸Á<e»uæµ\°v$ÃÙiè#Ä4]TAkÄ~,S3Añ«¦Tû6[.÷/úàñÙüÒ;Ò (íIØý¼Ú¤Á>Ñ z*XÁ¡/y¥±ãsuÐ5,=Û¹ÕÕÚͶKk5k{ôf-·95~§Ý.Zkô¶yÂ5ºPª
R&è¢ÆÓ]41¡DWÇÂÇ$iD¬Ò(¬ ø. at S¬ÕIw2caø.¤{éÇpL,±üTÚL$¹èÚ*Í'í=ò%áHÇTYâ,Ø=Þ\T-¿ø^RK¡¶ÜË+0¨§
R?íðÇLC0®<Ë]X7×êÚ ¹®ÝÞìþ]Ý}×:ry=°°@X8ëJP²MàZ@,,0Ôs->ZJ62Yê]JãÿÆ©?*ä3ÆÞ`ÞîèÎ'vk¦¯«¨
ÁXÆz´Æ $xbõ19KÉ®1É^ÂaÅMP1¶æGü!Ødß_½±ÈÞ| Fêˤ
ó-u×¹@·3:è@ô°Å¡aÚàp$¸¼Þ XfƼYUqÂð4åÅ=TG,M-WW[ÃæmýÒpÙíFÌN63Ü%kJ(céu!Wz±a®Ùèõ5§¨-\êbhÅy©PjúQ|¨ýº%è. n¤8A&VR4бÓ1BüI0µ/XDÙ:£ÖÊy1§4· Xýr[Pÿ!#¡}¢J[¦vòã*ä¯æò<¼s@;/×°°
®eë_XtvÊt1¼.{%QÂEC%¬ÓÝøÚöÒ¦üNW§äV±
"hÏxO´"Ôr+³èe6ZIëøÚ±U,u/Ò|mxèPÓó§©íüx
ÝÙý¸ç
iW±d?
âI÷JãX課AqQË»È88D$°èmP³Å\´eqãX¥7¯áv~\£¢×c3Fkeq<4¥2JØ ÜWtów
62:J÷C
üùKuU¬Ý6«ºÖþH=¢\£?¼(¨w©±Ãg=ÂòB)ur7 at zMÐÛ°&u$À«
r©PÇ~':JÃÜ"µ(îPqH*üB Ø¥`ÎíÚ1X¸ÀÔ²ò\¨BSnµöùe§h¯{ VÔ_XÅohÖ9Ó
dÁIJ¿c!{Áv-õ,ªGÎØ°lL%
8¤$n)6.Ý`Veì¶;"´°EuR´!®³É2D·'=i¥íÖR%|=ÇÖ¼ÿ.<ÈÇÝ«$¬
®{õü÷¿ÌØVÖü
\:ÅX5,<,66àø«fÚÙàRróÑu©ê0áhMér£ÉSÅZ6¬*³b
Dà{µÖßpÂÿíöØù ©C
R²n4Øêb¥ÐøuÛ|ѦէӴO&/Æ«IgJð" E³[¨è¹÷®YdüP7Mz
ì%FñÔ0qad%3µ3íïÎÃs=ÈÇâä^¼_:Ë*úã%h¬s@йֺñp¨èL2¤ÜÃx<Âȧï) ïY¢
c
4˧[£86£Z?Lz.Ø<îÕ%ïÂNçµ[25Ðá±[qO,Ä£0
G2s3å¹aÉÝñ$ÓìXI¥ç¹Ó,óíuì}T"DJ%´!Ä·ý1(C|8gx,µÈVM
Ê&`\Êï³ ÐíÛ
GvãnùâáÃËä«/´ß$èûêôW^ôi4Ò}4¼¬}¥?Ìoä{%5O¯Ú£@~¤¿Ì[ê°¾¬a¶£þ5Í5þyx_%ÈѲJ5³JlÅÖÞ*mêÊ;UzÕÉçÉFÄiöÔ/&ï(Ëûlgo(Bk`rÍ4U׺8ß>ìSTÿ²1ðNS=ÛråzaRSO'ªÅ¯ÿ1GÍA#¤Ì`ç}ÊÖ×ðÝ¼Û °µ
x
ªI(o|mã·Çð4(XHÆzàÚýBmê>-²X½£Ñìo5±ã{8õ
о¼øÊïS9¹¶lAmÚ´
ÞµÈùÅ*ÕR27å®h`
m½_?@qS1/Áú¨Í0=·PÄBßuã±H_/ÆpkÖUw@Ô¥l;Yx²ï¼ôr
úQfâh©ðN·¹±¾«ÚìT5ýÕ\^ÚÙ{óÍë]a°Ù6?¤ÃÍf®Pm%'ì Søå0ègöãðÍ{i3))ó%¹ÝúRks
ì¥ÌhÉZÆoNW& ]$ïáËêbb5T¢YÏj·Ç¶uv8ÙÁ/§r5A´ë@ÝÇdYöGÁã
°q|°©|ùõY}H2@ø«4a¥]Ktyi¹%¬>©¥|È9AGµ(n $¿Z¼TªRù½
#¦Få]|GIÖ;ôOõÍüÁ£Z©q3ræ¾COÍ|W^إЦ^´¯`4-{8ú¯þLFcc<8íðâ¼h~¡¹ù§é$¸J5©ýo¶¿wÌGÚzÑ*¼¤Ïò÷í°ý»~AûËææ[©Ó,öd¯æüI¥ËÇ4@yozÖNð¢G# ¤ÝÑ~zíßµüìcC@^@^ÕçêSèý
e[: Á¯Ræ
ÄȨ¬ïäfu9òqpã½Aðcë¸yÍ Q6,vC[ymÞÑÍL¢ò¬ïK²ßÓùI÷:¼Ñu^ar
þÎ9lÁ4 òËR2ð×
ìTÆ =uaGgDÿ®cܺÏ5º¸ú!v.
ÍÈÌò÷HzÅX¸¢!'~
ÚQ~rVǺCCu,Þ£oÇ:SwØb/
®+T§WWm¥çW¬¬Ä!(Áû2L_ÆhÖÚ,µ©*9ç63wÌ>×®
òd4+s`nÀbûqR/®²/²eåbÝ dú¹Ò
¤Jk#äSjå$w8|¶cMÛ¼¾6ü^þMµ?,´Z¡ó
-rê´ú©Ú{N¨OùX7 zÅc!ýO¶3ÏÓ¨®"1 ¥²ì0¡µ
8PH&yú£
©ò[.Ñ*Pl¥Z1ýîYÌV@#`ÞLrXtÓrK$xcÚ+qQ3¯(î¦n
ÕÎV¨"¶uN%lº¶¬yf
ÔÈûG1d¼zA
8ä6Î/Ô½sxá¿¿8wyB·-y?NÇPm½è!Ð%µsI<N TLîs!Òḽ¬iªd"®°ë0EÎÆÝP«ÉÄÔÙÏÖXÛÑZTfö6Õß²¤ðÒÐïCtÂÍë)ñ'¢Ú:ÔújÆN5F
ßP'A¸y:ÏÞaîXá¼Ð󡹨CñÓu¥YìãwÎt·Ú½c²¢¥Óq¶£ÍËÔ ?©C=5BL\ÄIÉÊÜoJÅØG-ëPÆîÅ![¡PniÛÉ7µJ¥~
Õ
Æ÷ñ-hB¤JêÃõ´6óÃhhyC´ÌÍn4âò×ÀH
Åñ¢¤c¼(£KEl)ìOçצ¯×¦ôºBo(ɸWb:÷r"®õ*ã<Iã-cË1DÉcµC6¢ÖvãÎ
3¡)¬YS-ÌßZÔhz,DÀ'oá^-ÃßÏÏÕ#§ÝÒUÀQ§^1É~áÜj_ú\-øBÃ(\kÕ±:5 ¹$m®n4ù~@<uA¨ÃNL¿^Ê@Qfío¿Ô4ãCËßvS!&䪬õYtÓ[?£5/`QiüÏj먦2ñõ8X;°®mË7g%*~þI;BQ©§`=&,ä.|í¤ÂÅñY¢EeÍjc¹ÅµÚ LÈ
Õ× ¼XSCÃ5ÁáúiÎóÉÁ/T·/
µ?WNü®Ú<c:±Á8ÿ6U_¼¿á¸±tãeýeYúwYúw¡Ò¿¿wtóò3ïSQÿý!`_õgþëöÍ'ÿÚÞÜÙjoýÛf{o{wwÿÿ¯´
ú¿K@Ä5®T`J2&à*¯xxà}¡2WWÞ¾wä½óÎÔÿAÉKïNån¾DÁªqÏt·ï½c²½!Ù*
U`ÁiYöÓ/7¶\@2ÃRd
ªö¸Ð4H%ÎD¦¶jhWÄԻѸô¹ÊnV
Ý'Ó¤~{EroiÀk(¼fzËyªjn«/°¿Juû,Âû"û3©îìbue
ÍÚGmmLåÓ'oNVo\Ú/9GÐÅɪædÕ&»OÝÁßgJR 'ÿÑ$m= xùßÿP\jonono«ï·ÕÞÙÞÛú7o÷¡Röù_.ÿí?Eêfy>æÈÿ;í<þßÞ²þÃ#}PüGç-ì=/*Ébi"Ï[v7íø ÇQZ÷Íæªì^}¥k@ö²vøJ:DùêÎ9A>ÍuôÕs$
vcB´T*Évëý¥
kVóthH8èתaÆ
±{ Ìáÿ{mÿ·vvlîìlµ¡þ×ÎæÎÿ?Æ'9.7wH=@¾~½UÊà?z
Ã{rz}¯W4ݲüù_¼q|½´iu{
Q񚠕
£òß~¿êÃòfã^ÐýñÂë
fs[¶k^¯hÞܨݣyëõÒý`wrÑzøzy˯ÎK¶rá;Ýqi³órf«ÏËq¨ô¢¢L¶pÓüzEÛiÜÓûô¼^Úøɲ3³pãÁ°¼UH»¿ÿò_Ãàýxû½{±T0NðõÒÖ¿W
!î^Ã]|½´õÓwµÔa\ÚêàÓ¹ÿR£K¨¢áO%[x?oá|Ï{³ ¦ZiËo|W_¹cËफh7ûèßðzEèu_®1ä×ËÛ°¸·M¯6}V¶7=ªÚ¿³
ôÚ
Û¥×K~d»4åGú<?çÕëåí&à
p²{1¢±~½´õíV¼×¨µW²´ñ+
ÒFxe +=j¸ß£lÁ'ÒKYãÿ¥?*mz&i|Mì÷a2¥ñ_x=\ø×ÜøÍÍ|ü×Öæåùºí=ä
ÒѸ9ãûd8D Ýf³yP|o:Úðg«.)z/Óà³£Û¾èäJ:tç§Ñ¿¸³üä>eü_jè>HðÇ¿Íåÿ;[ÛnüG[ýºäÿò)phÙ½«¾ç,]ø¥ÜÅ?ôýõ:f*bFðvOî©S@Ïî©êã&HîÎbõÍ»¼oÜ«ø]P$x¹ï;zc?Is²»öÐ×Í÷ø3y÷Ê=z¡fÊáí§%@w¿qU3åí[FîÜ~yÀþßÆ·I¯¸ò>>+I÷Ñ-iúá¿=|æ?øå|
§µÏpI&árUgäë×[¿ };H6
]¨vìæá±î±Bã*ÙÞîbçö%ÎÕ]öïÒÓ¹çDúÙ5{OÉîè_ÔþÏùÿ÷0·À<ùok³ ÿmí-ãÿåãÄÿ³öÜX²wJÿßäJ/ùÀáSÿ@¾½çÿíüùßÛÝZÿGùØñ?¸ësN¼~jvpÏÚñ+
Öl=l^§L[+!k={kÉi°J+ZZò>eçÿ»ÙËzÔÇó¿Ý~²SÿYâ?=ÎÏ?@_ë:á=B3åòvR'ÔÔÙN5^(fwXFºªK1q©|#õ1;~Ò\=ôWË4h׸z_¯GÕt\®)Lr
aÝVÀ4®|>×Ui"b&¶KµXà
¡Ç°X'Ô>!èñþêê¿(¾"Ú_ÖÚÍÍàÆÇÐÉËÚéå»ÆÓ§»ÏíÚ_
¶c¸¾[°õ7Î-ïöö¯"]ÿkîÐéc®ýgo+¯ÿíµñ¿ò1öKÚõ9öyªÄWH¼\8ÉrÏáWlæ)GÆxÇ~æVzàªj»3¤ÿê ùÿÿhç¿ý¤pþwwùò±Î?û{í;z6+(y¡Ìó»CçðôqÏ¿©Wñ}Ì=ÿ;yüÿøyyþá_©¬Î%rR]¹Êë7Á0cÝ«ÕÙ5Á¼õòÊZË2à{þé¯ã`¨>ÄóßÞÝÊûÔ/ãÿåSZþ¯ÝPÿµ³¬¸¬ø5
commons-dbcp-1.2.1-TestConnectionPool.patch:
TestConnectionPool.java | 1006 ++++++++++++++++++++++++------------------------
1 files changed, 516 insertions(+), 490 deletions(-)
--- NEW FILE commons-dbcp-1.2.1-TestConnectionPool.patch ---
--- src/test/org/apache/commons/dbcp/TestConnectionPool.java.sav 2006-04-12 16:04:03.000000000 +0200
+++ src/test/org/apache/commons/dbcp/TestConnectionPool.java 2006-04-12 16:08:30.000000000 +0200
@@ -1,490 +1,516 @@
-/*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.dbcp;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import junit.framework.TestCase;
-
-// XXX FIX ME XXX
-// this class still needs some cleanup, but at least
-// this consolidates most of the relevant test code
-// in a fairly re-usable fashion
-// XXX FIX ME XXX
-
-/**
- * Base test suite for DBCP pools.
- *
- * @author Rodney Waldhoff
- * @author Sean C. Sullivan
- * @author John McNally
- * @author Dirk Verbeeck
- * @version $Revision: 1.14 $ $Date: 2004/02/28 12:18:18 $
- */
-public abstract class TestConnectionPool extends TestCase {
- public TestConnectionPool(String testName) {
- super(testName);
- }
-
- public void setUp() throws Exception {
- super.setUp();
- }
-
- public void tearDown() throws Exception {
- super.tearDown();
- }
-
- protected abstract Connection getConnection() throws Exception;
-
- protected int getMaxActive() {
- return 10;
- }
-
- protected long getMaxWait() {
- return 100L;
- }
-
- // ----------- Utility Methods ---------------------------------
-
- protected String getUsername(Connection conn) throws SQLException {
- Statement stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery("select username");
- if (rs.next()) {
- return rs.getString(1);
- }
- return null;
- }
-
- // ----------- tests ---------------------------------
-
- public void testClearWarnings() throws Exception {
- Connection[] c = new Connection[getMaxActive()];
- for (int i = 0; i < c.length; i++) {
- c[i] = getConnection();
- assertTrue(c[i] != null);
-
- // generate SQLWarning on connection
- c[i].prepareCall("warning");
- }
-
- for (int i = 0; i < c.length; i++) {
- assertNotNull(c[i].getWarnings());
- }
-
- for (int i = 0; i < c.length; i++) {
- c[i].close();
- }
-
- for (int i = 0; i < c.length; i++) {
- c[i] = getConnection();
- }
-
- for (int i = 0; i < c.length; i++) {
- // warnings should have been cleared by putting the connection back in the pool
- assertNull(c[i].getWarnings());
- }
-
- for (int i = 0; i < c.length; i++) {
- c[i].close();
- }
- }
-
- public void testIsClosed() throws Exception {
- for(int i=0;i<getMaxActive();i++) {
- Connection conn = getConnection();
- assertTrue(null != conn);
- assertTrue(!conn.isClosed());
- PreparedStatement stmt = conn.prepareStatement("select * from dual");
- assertTrue(null != stmt);
- ResultSet rset = stmt.executeQuery();
- assertTrue(null != rset);
- assertTrue(rset.next());
- rset.close();
- stmt.close();
- conn.close();
- assertTrue(conn.isClosed());
- }
- }
-
- public void testCantCloseConnectionTwice() throws Exception {
- for(int i=0;i<getMaxActive();i++) { // loop to show we *can* close again once we've borrowed it from the pool again
- Connection conn = getConnection();
- assertTrue(null != conn);
- assertTrue(!conn.isClosed());
- conn.close();
- assertTrue(conn.isClosed());
- try {
- conn.close();
- fail("Expected SQLException on second attempt to close (" + conn.getClass().getName() + ")");
- } catch(SQLException e) {
- // expected
- }
- assertTrue(conn.isClosed());
- }
- }
-
- public void testCantCloseStatementTwice() throws Exception {
- Connection conn = getConnection();
- assertTrue(null != conn);
- assertTrue(!conn.isClosed());
- for(int i=0;i<2;i++) { // loop to show we *can* close again once we've borrowed it from the pool again
- PreparedStatement stmt = conn.prepareStatement("select * from dual");
- assertTrue(null != stmt);
- stmt.close();
- try {
- stmt.close();
- fail("Expected SQLException on second attempt to close (" + stmt.getClass().getName() + ")");
- } catch(SQLException e) {
- // expected
- }
- }
- conn.close();
- }
-
- public void testSimple() throws Exception {
- Connection conn = getConnection();
- assertTrue(null != conn);
- PreparedStatement stmt = conn.prepareStatement("select * from dual");
- assertTrue(null != stmt);
- ResultSet rset = stmt.executeQuery();
- assertTrue(null != rset);
- assertTrue(rset.next());
- rset.close();
- stmt.close();
- conn.close();
- }
-
- public void testRepeatedBorrowAndReturn() throws Exception {
- for(int i=0;i<100;i++) {
- Connection conn = getConnection();
- assertTrue(null != conn);
- PreparedStatement stmt = conn.prepareStatement("select * from dual");
- assertTrue(null != stmt);
- ResultSet rset = stmt.executeQuery();
- assertTrue(null != rset);
- assertTrue(rset.next());
- rset.close();
- stmt.close();
- conn.close();
- }
- }
-
- public void testSimple2() throws Exception {
- Connection conn = getConnection();
- assertTrue(null != conn);
- {
- PreparedStatement stmt = conn.prepareStatement("select * from dual");
- assertTrue(null != stmt);
- ResultSet rset = stmt.executeQuery();
- assertTrue(null != rset);
- assertTrue(rset.next());
- rset.close();
- stmt.close();
- }
- {
- PreparedStatement stmt = conn.prepareStatement("select * from dual");
- assertTrue(null != stmt);
- ResultSet rset = stmt.executeQuery();
- assertTrue(null != rset);
- assertTrue(rset.next());
- rset.close();
- stmt.close();
- }
- conn.close();
- try {
- conn.createStatement();
- fail("Can't use closed connections");
- } catch(SQLException e) {
- ; // expected
- }
-
- conn = getConnection();
- assertTrue(null != conn);
- {
- PreparedStatement stmt = conn.prepareStatement("select * from dual");
- assertTrue(null != stmt);
- ResultSet rset = stmt.executeQuery();
- assertTrue(null != rset);
- assertTrue(rset.next());
- rset.close();
- stmt.close();
- }
- {
- PreparedStatement stmt = conn.prepareStatement("select * from dual");
- assertTrue(null != stmt);
- ResultSet rset = stmt.executeQuery();
- assertTrue(null != rset);
- assertTrue(rset.next());
- rset.close();
- stmt.close();
- }
- conn.close();
- conn = null;
- }
-
- public void testPooling() throws Exception {
- Connection conn = getConnection();
- Connection underconn = null;
- if(conn instanceof DelegatingConnection) {
- underconn = ((DelegatingConnection)conn).getInnermostDelegate();
- } else {
- return; // skip this test
- }
- assertTrue(underconn != null);
- Connection conn2 = getConnection();
- Connection underconn2 = null;
- if(conn2 instanceof DelegatingConnection) {
- underconn2 = ((DelegatingConnection)conn2).getInnermostDelegate();
- } else {
- return; // skip this test
- }
- assertTrue(underconn2 != null);
- assertTrue(underconn != underconn2);
- conn2.close();
- conn.close();
- Connection conn3 = getConnection();
- Connection underconn3 = null;
- if(conn3 instanceof DelegatingConnection) {
- underconn3 = ((DelegatingConnection)conn3).getInnermostDelegate();
- } else {
- return; // skip this test
- }
- assertTrue( underconn3 == underconn || underconn3 == underconn2 );
- conn3.close();
- }
-
- public void testAutoCommitBehavior() throws Exception {
- Connection conn = getConnection();
- assertTrue(conn != null);
- assertTrue(conn.getAutoCommit());
- conn.setAutoCommit(false);
- conn.close();
-
- Connection conn2 = getConnection();
- assertTrue( conn2.getAutoCommit() );
-
- Connection conn3 = getConnection();
- assertTrue( conn3.getAutoCommit() );
-
- conn2.close();
-
- conn3.close();
- }
-
- /** @see http://issues.apache.org/bugzilla/show_bug.cgi?id=12400 */
- public void testConnectionsAreDistinct() throws Exception {
- Connection[] conn = new Connection[getMaxActive()];
- for(int i=0;i<conn.length;i++) {
- conn[i] = getConnection();
- for(int j=0;j<i;j++) {
- assertTrue(conn[j] != conn[i]);
- assertTrue(!conn[j].equals(conn[i]));
- }
- }
- for(int i=0;i<conn.length;i++) {
- conn[i].close();
- }
- }
-
-
- public void testOpening() throws Exception {
- Connection[] c = new Connection[getMaxActive()];
- // test that opening new connections is not closing previous
- for (int i = 0; i < c.length; i++) {
- c[i] = getConnection();
- assertTrue(c[i] != null);
- for (int j = 0; j <= i; j++) {
- assertTrue(!c[j].isClosed());
- }
- }
-
- for (int i = 0; i < c.length; i++) {
- c[i].close();
- }
- }
-
- public void testClosing() throws Exception {
- Connection[] c = new Connection[getMaxActive()];
- // open the maximum connections
- for (int i = 0; i < c.length; i++) {
- c[i] = getConnection();
- }
-
- // close one of the connections
- c[0].close();
- assertTrue(c[0].isClosed());
-
- // get a new connection
- c[0] = getConnection();
-
- for (int i = 0; i < c.length; i++) {
- c[i].close();
- }
- }
-
- public void testMaxActive() throws Exception {
- Connection[] c = new Connection[getMaxActive()];
- for (int i = 0; i < c.length; i++) {
- c[i] = getConnection();
- assertTrue(c[i] != null);
- }
-
- try {
- getConnection();
- fail("Allowed to open more than DefaultMaxActive connections.");
- } catch (java.sql.SQLException e) {
- // should only be able to open 10 connections, so this test should
- // throw an exception
- }
-
- for (int i = 0; i < c.length; i++) {
- c[i].close();
- }
- }
-
- public void testThreaded() {
- TestThread[] threads = new TestThread[getMaxActive()];
- for(int i=0;i<threads.length;i++) {
- threads[i] = new TestThread(50,50);
- Thread t = new Thread(threads[i]);
- t.start();
- }
- for(int i=0;i<threads.length;i++) {
- while(!(threads[i]).complete()) {
- try {
- Thread.sleep(100L);
- } catch(Exception e) {
- // ignored
- }
- }
- if(threads[i].failed()) {
- fail();
- }
- }
- }
-
- class TestThread implements Runnable {
- java.util.Random _random = new java.util.Random();
- boolean _complete = false;
- boolean _failed = false;
- int _iter = 100;
- int _delay = 50;
-
- public TestThread() {
- }
-
- public TestThread(int iter) {
- _iter = iter;
- }
-
- public TestThread(int iter, int delay) {
- _iter = iter;
- _delay = delay;
- }
-
- public boolean complete() {
- return _complete;
- }
-
- public boolean failed() {
- return _failed;
- }
-
- public void run() {
- for(int i=0;i<_iter;i++) {
- try {
- Thread.sleep((long)_random.nextInt(_delay));
- } catch(Exception e) {
- // ignored
- }
- Connection conn = null;
- PreparedStatement stmt = null;
- ResultSet rset = null;
- try {
- conn = getConnection();
- stmt = conn.prepareStatement("select 'literal', SYSDATE from dual");
- rset = stmt.executeQuery();
- try {
- Thread.sleep((long)_random.nextInt(_delay));
- } catch(Exception e) {
- // ignored
- }
- } catch(Exception e) {
- e.printStackTrace();
- _failed = true;
- _complete = true;
- break;
- } finally {
- try { rset.close(); } catch(Exception e) { }
- try { stmt.close(); } catch(Exception e) { }
- try { conn.close(); } catch(Exception e) { }
- }
- }
- _complete = true;
- }
- }
-
- // Bugzilla Bug 24328: PooledConnectionImpl ignores resultsetType
- // and Concurrency if statement pooling is not enabled
- // http://issues.apache.org/bugzilla/show_bug.cgi?id=24328
- public void testPrepareStatementOptions() throws Exception
- {
- Connection conn = getConnection();
- assertTrue(null != conn);
- PreparedStatement stmt = conn.prepareStatement("select * from dual",
- ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
- assertTrue(null != stmt);
- ResultSet rset = stmt.executeQuery();
- assertTrue(null != rset);
- assertTrue(rset.next());
-
- assertEquals(ResultSet.TYPE_SCROLL_SENSITIVE, rset.getType());
- assertEquals(ResultSet.CONCUR_UPDATABLE, rset.getConcurrency());
-
- rset.close();
- stmt.close();
- conn.close();
- }
-
- // Bugzilla Bug 24966: NullPointer with Oracle 9 driver
- // wrong order of passivate/close when a rset isn't closed
- public void testNoRsetClose() throws Exception {
- Connection conn = getConnection();
- assertNotNull(conn);
- PreparedStatement stmt = conn.prepareStatement("test");
- assertNotNull(stmt);
- ResultSet rset = stmt.getResultSet();
- assertNotNull(rset);
- // forget to close the resultset: rset.close();
- stmt.close();
- conn.close();
- }
-
- // Bugzilla Bug 26966: Connectionpool's connections always returns same
- public void testHashCode() throws Exception {
- Connection conn1 = getConnection();
- assertNotNull(conn1);
- Connection conn2 = getConnection();
- assertNotNull(conn2);
-
- assertTrue(conn1.hashCode() != conn2.hashCode());
- }
-}
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.dbcp;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Stack;
+
+import junit.framework.TestCase;
+
+// XXX FIX ME XXX
+// this class still needs some cleanup, but at least
+// this consolidates most of the relevant test code
+// in a fairly re-usable fashion
+// XXX FIX ME XXX
+
+/**
+ * Base test suite for DBCP pools.
+ *
+ * @author Rodney Waldhoff
+ * @author Sean C. Sullivan
+ * @author John McNally
+ * @author Dirk Verbeeck
+ * @version $Revision$ $Date$
+ */
+public abstract class TestConnectionPool extends TestCase {
+ public TestConnectionPool(String testName) {
+ super(testName);
+ }
+
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void tearDown() throws Exception {
+ super.tearDown();
+ // Close any connections opened by the test
+ while (!connections.isEmpty()) {
+ Connection conn = (Connection) connections.pop();
+ try {
+ conn.close();
+ } catch (Exception ex) {
+ // ignore
+ } finally {
+ conn = null;
+ }
+ }
+ }
+
+ protected abstract Connection getConnection() throws Exception;
+
+ protected int getMaxActive() {
+ return 10;
+ }
+
+ protected long getMaxWait() {
+ return 100L;
+ }
+
+ /** Connections opened during the course of a test */
+ protected Stack connections = new Stack();
+
+ /** Acquire a connection and push it onto the connections stack */
+ protected Connection newConnection() throws Exception {
+ Connection connection = getConnection();
+ connections.push(connection);
+ return connection;
+ }
+
+ // ----------- Utility Methods ---------------------------------
+
+ protected String getUsername(Connection conn) throws SQLException {
+ Statement stmt = conn.createStatement();
+ ResultSet rs = stmt.executeQuery("select username");
+ if (rs.next()) {
+ return rs.getString(1);
+ }
+ return null;
+ }
+
+ // ----------- tests ---------------------------------
+
+ public void testClearWarnings() throws Exception {
+ Connection[] c = new Connection[getMaxActive()];
+ for (int i = 0; i < c.length; i++) {
+ c[i] = newConnection();
+ assertTrue(c[i] != null);
+
+ // generate SQLWarning on connection
+ c[i].prepareCall("warning");
+ }
+
+ for (int i = 0; i < c.length; i++) {
+ assertNotNull(c[i].getWarnings());
+ }
+
+ for (int i = 0; i < c.length; i++) {
+ c[i].close();
+ }
+
+ for (int i = 0; i < c.length; i++) {
+ c[i] = newConnection();
+ }
+
+ for (int i = 0; i < c.length; i++) {
+ // warnings should have been cleared by putting the connection back in the pool
+ assertNull(c[i].getWarnings());
+ }
+
+ for (int i = 0; i < c.length; i++) {
+ c[i].close();
+ }
+ }
+
+ public void testIsClosed() throws Exception {
+ for(int i=0;i<getMaxActive();i++) {
+ Connection conn = newConnection();
+ assertTrue(null != conn);
+ assertTrue(!conn.isClosed());
+ PreparedStatement stmt = conn.prepareStatement("select * from dual");
+ assertTrue(null != stmt);
+ ResultSet rset = stmt.executeQuery();
+ assertTrue(null != rset);
+ assertTrue(rset.next());
+ rset.close();
+ stmt.close();
+ conn.close();
+ assertTrue(conn.isClosed());
+ }
+ }
+
+ public void testCantCloseConnectionTwice() throws Exception {
+ for(int i=0;i<getMaxActive();i++) { // loop to show we *can* close again once we've borrowed it from the pool again
+ Connection conn = newConnection();
+ assertTrue(null != conn);
+ assertTrue(!conn.isClosed());
+ conn.close();
+ assertTrue(conn.isClosed());
+ try {
+ conn.close();
+ fail("Expected SQLException on second attempt to close (" + conn.getClass().getName() + ")");
+ } catch(SQLException e) {
+ // expected
+ }
+ assertTrue(conn.isClosed());
+ }
+ }
+
+ public void testCantCloseStatementTwice() throws Exception {
+ Connection conn = newConnection();
+ assertTrue(null != conn);
+ assertTrue(!conn.isClosed());
+ for(int i=0;i<2;i++) { // loop to show we *can* close again once we've borrowed it from the pool again
+ PreparedStatement stmt = conn.prepareStatement("select * from dual");
+ assertTrue(null != stmt);
+ stmt.close();
+ try {
+ stmt.close();
+ fail("Expected SQLException on second attempt to close (" + stmt.getClass().getName() + ")");
+ } catch(SQLException e) {
+ // expected
+ }
+ }
+ conn.close();
+ }
+
+ public void testSimple() throws Exception {
+ Connection conn = newConnection();
+ assertTrue(null != conn);
+ PreparedStatement stmt = conn.prepareStatement("select * from dual");
+ assertTrue(null != stmt);
+ ResultSet rset = stmt.executeQuery();
+ assertTrue(null != rset);
+ assertTrue(rset.next());
+ rset.close();
+ stmt.close();
+ conn.close();
+ }
+
+ public void testRepeatedBorrowAndReturn() throws Exception {
+ for(int i=0;i<100;i++) {
+ Connection conn = newConnection();
+ assertTrue(null != conn);
+ PreparedStatement stmt = conn.prepareStatement("select * from dual");
+ assertTrue(null != stmt);
+ ResultSet rset = stmt.executeQuery();
+ assertTrue(null != rset);
+ assertTrue(rset.next());
+ rset.close();
+ stmt.close();
+ conn.close();
+ }
+ }
+
+ public void testSimple2() throws Exception {
+ Connection conn = newConnection();
+ assertTrue(null != conn);
+ {
+ PreparedStatement stmt = conn.prepareStatement("select * from dual");
+ assertTrue(null != stmt);
+ ResultSet rset = stmt.executeQuery();
+ assertTrue(null != rset);
+ assertTrue(rset.next());
+ rset.close();
+ stmt.close();
+ }
+ {
+ PreparedStatement stmt = conn.prepareStatement("select * from dual");
+ assertTrue(null != stmt);
+ ResultSet rset = stmt.executeQuery();
+ assertTrue(null != rset);
+ assertTrue(rset.next());
+ rset.close();
+ stmt.close();
+ }
+ conn.close();
+ try {
+ conn.createStatement();
+ fail("Can't use closed connections");
+ } catch(SQLException e) {
+ ; // expected
+ }
+
+ conn = newConnection();
+ assertTrue(null != conn);
+ {
+ PreparedStatement stmt = conn.prepareStatement("select * from dual");
+ assertTrue(null != stmt);
+ ResultSet rset = stmt.executeQuery();
+ assertTrue(null != rset);
+ assertTrue(rset.next());
+ rset.close();
+ stmt.close();
+ }
+ {
+ PreparedStatement stmt = conn.prepareStatement("select * from dual");
+ assertTrue(null != stmt);
+ ResultSet rset = stmt.executeQuery();
+ assertTrue(null != rset);
+ assertTrue(rset.next());
+ rset.close();
+ stmt.close();
+ }
+ conn.close();
+ conn = null;
+ }
+
+ public void testPooling() throws Exception {
+ // Grab a maximal set of open connections from the pool
+ Connection[] c = new Connection[getMaxActive()];
+ Connection[] u = new Connection[getMaxActive()];
+ for (int i = 0; i < c.length; i++) {
+ c[i] = newConnection();
+ if (c[i] instanceof DelegatingConnection) {
+ u[i] = ((DelegatingConnection) c[i]).getInnermostDelegate();
+ } else {
+ for (int j = 0; j <= i; j++) {
+ c[j].close();
+ }
+ return; // skip this test
+ }
+ }
+ // Close connections one at a time and get new ones, making sure
+ // the new ones come from the pool
+ for (int i = 0; i < c.length; i++) {
+ c[i].close();
+ Connection con = newConnection();
+ Connection underCon =
+ ((DelegatingConnection) con).getInnermostDelegate();
+ assertTrue("Failed to get connection", underCon != null);
+ boolean found = false;
+ for (int j = 0; j < c.length; j++) {
+ if (underCon == u[j]) {
+ found = true;
+ break;
+ }
+ }
+ assertTrue("New connection not from pool", found);
+ con.close();
+ }
+ }
+
+ public void testAutoCommitBehavior() throws Exception {
+ Connection conn = newConnection();
+ assertTrue(conn != null);
+ assertTrue(conn.getAutoCommit());
+ conn.setAutoCommit(false);
+ conn.close();
+
+ Connection conn2 = newConnection();
+ assertTrue( conn2.getAutoCommit() );
+
+ Connection conn3 = newConnection();
+ assertTrue( conn3.getAutoCommit() );
+
+ conn2.close();
+
+ conn3.close();
+ }
+
+ /** @see http://issues.apache.org/bugzilla/show_bug.cgi?id=12400 */
+ public void testConnectionsAreDistinct() throws Exception {
+ Connection[] conn = new Connection[getMaxActive()];
+ for(int i=0;i<conn.length;i++) {
+ conn[i] = newConnection();
+ for(int j=0;j<i;j++) {
+ assertTrue(conn[j] != conn[i]);
+ assertTrue(!conn[j].equals(conn[i]));
+ }
+ }
+ for(int i=0;i<conn.length;i++) {
+ conn[i].close();
+ }
+ }
+
+
+ public void testOpening() throws Exception {
+ Connection[] c = new Connection[getMaxActive()];
+ // test that opening new connections is not closing previous
+ for (int i = 0; i < c.length; i++) {
+ c[i] = newConnection();
+ assertTrue(c[i] != null);
+ for (int j = 0; j <= i; j++) {
+ assertTrue(!c[j].isClosed());
+ }
+ }
+
+ for (int i = 0; i < c.length; i++) {
+ c[i].close();
+ }
+ }
+
+ public void testClosing() throws Exception {
+ Connection[] c = new Connection[getMaxActive()];
+ // open the maximum connections
+ for (int i = 0; i < c.length; i++) {
+ c[i] = newConnection();
+ }
+
+ // close one of the connections
+ c[0].close();
+ assertTrue(c[0].isClosed());
+
+ // get a new connection
+ c[0] = newConnection();
+
+ for (int i = 0; i < c.length; i++) {
+ c[i].close();
+ }
+ }
+
+ public void testMaxActive() throws Exception {
+ Connection[] c = new Connection[getMaxActive()];
+ for (int i = 0; i < c.length; i++) {
+ c[i] = newConnection();
+ assertTrue(c[i] != null);
+ }
+
+ try {
+ newConnection();
+ fail("Allowed to open more than DefaultMaxActive connections.");
+ } catch (java.sql.SQLException e) {
+ // should only be able to open 10 connections, so this test should
+ // throw an exception
+ }
+
+ for (int i = 0; i < c.length; i++) {
+ c[i].close();
+ }
+ }
+
+ public void testThreaded() {
+ TestThread[] threads = new TestThread[getMaxActive()];
+ for(int i=0;i<threads.length;i++) {
+ threads[i] = new TestThread(50,50);
+ Thread t = new Thread(threads[i]);
+ t.start();
+ }
+ for(int i=0;i<threads.length;i++) {
+ while(!(threads[i]).complete()) {
+ try {
+ Thread.sleep(100L);
+ } catch(Exception e) {
+ // ignored
+ }
+ }
+ if(threads[i].failed()) {
+ fail();
+ }
+ }
+ }
+
+ class TestThread implements Runnable {
+ java.util.Random _random = new java.util.Random();
+ boolean _complete = false;
+ boolean _failed = false;
+ int _iter = 100;
+ int _delay = 50;
+
+ public TestThread() {
+ }
+
+ public TestThread(int iter) {
+ _iter = iter;
+ }
+
+ public TestThread(int iter, int delay) {
+ _iter = iter;
+ _delay = delay;
+ }
+
+ public boolean complete() {
+ return _complete;
+ }
+
+ public boolean failed() {
+ return _failed;
+ }
+
+ public void run() {
+ for(int i=0;i<_iter;i++) {
+ try {
+ Thread.sleep((long)_random.nextInt(_delay));
+ } catch(Exception e) {
+ // ignored
+ }
+ Connection conn = null;
+ PreparedStatement stmt = null;
+ ResultSet rset = null;
+ try {
+ conn = newConnection();
+ stmt = conn.prepareStatement("select 'literal', SYSDATE from dual");
+ rset = stmt.executeQuery();
+ try {
+ Thread.sleep((long)_random.nextInt(_delay));
+ } catch(Exception e) {
+ // ignored
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ _failed = true;
+ _complete = true;
+ break;
+ } finally {
+ try { rset.close(); } catch(Exception e) { }
+ try { stmt.close(); } catch(Exception e) { }
+ try { conn.close(); } catch(Exception e) { }
+ }
+ }
+ _complete = true;
+ }
+ }
+
+ // Bugzilla Bug 24328: PooledConnectionImpl ignores resultsetType
+ // and Concurrency if statement pooling is not enabled
+ // http://issues.apache.org/bugzilla/show_bug.cgi?id=24328
+ public void testPrepareStatementOptions() throws Exception
+ {
+ Connection conn = newConnection();
+ assertTrue(null != conn);
+ PreparedStatement stmt = conn.prepareStatement("select * from dual",
+ ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
+ assertTrue(null != stmt);
+ ResultSet rset = stmt.executeQuery();
+ assertTrue(null != rset);
+ assertTrue(rset.next());
+
+ assertEquals(ResultSet.TYPE_SCROLL_SENSITIVE, rset.getType());
+ assertEquals(ResultSet.CONCUR_UPDATABLE, rset.getConcurrency());
+
+ rset.close();
+ stmt.close();
+ conn.close();
+ }
+
+ // Bugzilla Bug 24966: NullPointer with Oracle 9 driver
+ // wrong order of passivate/close when a rset isn't closed
+ public void testNoRsetClose() throws Exception {
+ Connection conn = newConnection();
+ assertNotNull(conn);
+ PreparedStatement stmt = conn.prepareStatement("test");
+ assertNotNull(stmt);
+ ResultSet rset = stmt.getResultSet();
+ assertNotNull(rset);
+ // forget to close the resultset: rset.close();
+ stmt.close();
+ conn.close();
+ }
+
+ // Bugzilla Bug 26966: Connectionpool's connections always returns same
+ public void testHashCode() throws Exception {
+ Connection conn1 = newConnection();
+ assertNotNull(conn1);
+ Connection conn2 = newConnection();
+ assertNotNull(conn2);
+
+ assertTrue(conn1.hashCode() != conn2.hashCode());
+ }
+}
commons-dbcp-1.2.1-TestJOCLed.patch:
TestJOCLed.java | 2 ++
1 files changed, 2 insertions(+)
--- NEW FILE commons-dbcp-1.2.1-TestJOCLed.patch ---
--- src/test/org/apache/commons/dbcp/TestJOCLed.java.sav 2006-04-12 15:57:50.000000000 +0200
+++ src/test/org/apache/commons/dbcp/TestJOCLed.java 2006-04-12 15:58:27.000000000 +0200
@@ -45,6 +45,7 @@
private PoolingDriver driver = null;
public void setUp() throws Exception {
+ super.setUp();
driver = new PoolingDriver();
PoolingDriver.setAccessToUnderlyingConnectionAllowed(true);
}
@@ -52,6 +53,7 @@
public void tearDown() throws Exception {
driver.closePool("testpool");
DriverManager.deregisterDriver(driver);
+ super.tearDown();
}
}
commons-dbcp-1.2.1-navigation_xml.patch:
navigation.xml | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
--- NEW FILE commons-dbcp-1.2.1-navigation_xml.patch ---
--- xdocs/navigation.xml.sav 2006-04-12 16:11:56.000000000 +0200
+++ xdocs/navigation.xml 2006-04-12 16:12:07.000000000 +0200
@@ -14,7 +14,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<!DOCTYPE org.apache.commons.menus SYSTEM '../../commons-build/menus/menus.dtd'>
+<!DOCTYPE org.apache.commons.menus SYSTEM '../commons-build/menus/menus.dtd'>
<project name="Commons DBCP">
<title>Commons DBCP</title>
<body>
commons-dbcp-1.2.1-project_properties.patch:
project.properties | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
--- NEW FILE commons-dbcp-1.2.1-project_properties.patch ---
--- project.properties.sav 2006-04-12 16:17:46.000000000 +0200
+++ project.properties 2006-04-12 16:17:55.000000000 +0200
@@ -6,7 +6,7 @@
maven.javadoc.author=false
maven.javadoc.links=http://java.sun.com/j2se/1.4.2/docs/api,http://jakarta.apache.org/commons/pool/apidocs
-maven.xdoc.jsl=../commons-build/commons-site.jsl
+maven.xdoc.jsl=commons-build/commons-site.jsl
maven.xdoc.date=bottom
maven.xdoc.poweredby.image=maven-feather.png
maven.xdoc.version=${pom.currentVersion}
commons-dbcp-1.2.1-project_xml.patch:
project.xml | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
--- NEW FILE commons-dbcp-1.2.1-project_xml.patch ---
--- ./project.xml.sav 2004-06-12 09:42:20.000000000 -0400
+++ ./project.xml 2006-07-20 17:14:46.000000000 -0400
@@ -219,6 +219,7 @@
</resource>
<resource>
<targetPath>META-INF</targetPath>
+ <directory>${basedir}</directory>
<includes>
<include>NOTICE.txt</include>
</includes>
@@ -227,7 +228,6 @@
</build>
<reports>
- <report>maven-changelog-plugin</report>
<report>maven-changes-plugin</report>
<report>maven-developer-activity-plugin</report>
<report>maven-file-activity-plugin</report>
--- NEW FILE dbcp-1.2.1-jpp-depmap.xml ---
<?xml version="1.0" encoding="utf-8"?>
<depset>
<dependency>
<maven>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>2.1</version>
</maven>
<jpp>
<groupId>JPP</groupId>
<artifactId>commons-collections</artifactId>
<jar>commons-collections.jar</jar>
<version>2.1</version>
</jpp>
</dependency>
<dependency>
<maven>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.2</version>
</maven>
<jpp>
<groupId>JPP</groupId>
<artifactId>commons-pool</artifactId>
<jar>commons-pool.jar</jar>
<version>1.2</version>
</jpp>
</dependency>
<dependency>
<maven>
<groupId>jdbc</groupId>
<artifactId>jdbc</artifactId>
<version>2.0</version>
</maven>
<jpp>
<groupId>JPP</groupId>
<artifactId>jdbc</artifactId>
<jar>jdbc.jar</jar>
<version>2.0</version>
</jpp>
</dependency>
<dependency>
<maven>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</maven>
<jpp>
<groupId>JPP</groupId>
<artifactId>junit</artifactId>
<jar>junit.jar</jar>
<version>3.8.1</version>
</jpp>
</dependency>
<dependency>
<maven>
<groupId>xerces</groupId>
<artifactId>xerces</artifactId>
<version>2.0.2</version>
</maven>
<jpp>
<groupId>JPP</groupId>
<artifactId>xerces</artifactId>
<jar>xerces-j2.jar</jar>
<version>2.0.2</version>
</jpp>
</dependency>
<dependency>
<maven>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>2.0.2</version>
</maven>
<jpp>
<groupId>JPP</groupId>
<artifactId>xml-apis</artifactId>
<jar>xml-commons-apis.jar</jar>
<version>2.0.2</version>
</jpp>
</dependency>
</depset>
--- NEW FILE pom-maven2jpp-depcat.xsl ---
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*[name() != 'dependencies']|*/text()">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="//dependencies">
<xsl:for-each select="./dependency">
<xsl:element name="dependency">
<xsl:element name="maven">
<xsl:choose>
<xsl:when test="./groupId">
<xsl:copy-of select="./groupId"/>
<xsl:copy-of select="./artifactId"/>
</xsl:when>
<xsl:when test="./id">
<xsl:choose>
<xsl:when test="substring-before(./id/text(),':') != ''">
<xsl:element name="groupId">
<xsl:value-of select="substring-before(./id/text(),':')"/>
</xsl:element>
<xsl:element name="artifactId">
<xsl:value-of select="substring-after(./id/text(),':')"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="groupId">
<xsl:value-of select="./id/text()"/>
</xsl:element>
<xsl:element name="artifactId">
<xsl:value-of select="./id/text()"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
ERROR
</xsl:otherwise>
</xsl:choose>
<xsl:for-each select="./*">
<xsl:if test="(name() != 'groupId') and (name() != 'artifactId') and (name() != 'id')">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:element>
<xsl:element name="jpp">
<xsl:element name="groupId">JPP</xsl:element>
<xsl:choose>
<xsl:when test="./artifactId">
<xsl:copy-of select="./artifactId"/>
</xsl:when>
<xsl:when test="./id">
<xsl:choose>
<xsl:when test="substring-after(./id/text(),':') != ''">
<xsl:element name="artifactId">
<xsl:value-of select="substring-after(./id/text(),':')"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="artifactId">
<xsl:value-of select="./id/text()"/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
ERROR
</xsl:otherwise>
</xsl:choose>
<xsl:element name="jar">
<xsl:choose>
<xsl:when test="./artifactId">
<xsl:value-of select="./artifactId/text()"/>
</xsl:when>
<xsl:when test="./id">
<xsl:choose>
<xsl:when test="substring-after(./id/text(),':') != ''">
<xsl:value-of select="substring-after(./id/text(),':')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="./id/text()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
ERROR
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="./type">
<xsl:choose>
<xsl:when test="./type/text() = 'plugin'">.jar</xsl:when>
<xsl:otherwise>.<xsl:value-of select="./type/text()"/></xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>.jar</xsl:otherwise>
</xsl:choose>
</xsl:element>
<xsl:for-each select="./*">
<xsl:if test="(name() != 'groupId') and (name() != 'artifactId') and (name() != 'id')">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
--- NEW FILE pom-maven2jpp-mapdeps.xsl ---
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="map" />
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/project" >
<xsl:element name="project">
<xsl:copy-of select="child::*[not(self::dependencies)]"/>
<xsl:if test="not(./dependencies)">
<xsl:element name="dependencies">
<xsl:for-each select="document($map)//add/dependency">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:element>
</xsl:if>
<xsl:apply-templates select="dependencies"/>
</xsl:element>
</xsl:template>
<xsl:template match="dependencies" >
<xsl:element name="dependencies">
<xsl:for-each select="dependency">
<xsl:if test="./artifactId">
<xsl:call-template name="replace">
<xsl:with-param name="artifact" select="./artifactId/text()"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="./id">
<xsl:choose>
<xsl:when test="substring-after(./id/text(),':') != ''">
<xsl:call-template name="replace">
<xsl:with-param name="artifact" select="substring-after(./id/text(),':')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="replace">
<xsl:with-param name="artifact" select="./id/text()"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>
<xsl:for-each select="document($map)//add/dependency">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:element>
</xsl:template>
<xsl:template name="replace">
<xsl:param name="artifact"/>
<xsl:variable name="this" select="."/>
<xsl:element name="dependency">
<xsl:choose>
<xsl:when test="document($map)//dependency/maven[./artifactId/text() = $artifact]">
<xsl:for-each select="document($map)//dependency/maven[./artifactId/text() = $artifact][1]">
<xsl:copy-of select="../jpp/*"/>
<xsl:copy-of select="$this/properties"/>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="./*"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
<xsl:if test="document($map)//dependency/maven[./artifactId/text() = $artifact]">
<xsl:for-each select="document($map)//dependency/maven[./artifactId/text() = $artifact][1]">
<xsl:for-each select="../add/dependency">
<xsl:element name="dependency">
<xsl:copy-of select="./*"/>
<xsl:copy-of select="$this/properties"/>
</xsl:element>
</xsl:for-each>
</xsl:for-each>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
--- NEW FILE pom-maven2jpp-newdepmap.xsl ---
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://icl.com/saxon"
extension-element-prefixes="saxon">
<xsl:output method="xml" indent="yes" omit-xml-declaration="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/" >
<xsl:element name="depset">
<saxon:group select="//dependency" group-by="./maven/artifactId">
<xsl:sort select="./maven/artifactId"/>
<xsl:element name="dependency">
<xsl:element name="maven">
<xsl:copy-of select="./maven/*[name() != 'properties']"/>
</xsl:element>
<xsl:element name="jpp">
<xsl:copy-of select="./jpp/*[name() != 'properties']"/>
</xsl:element>
</xsl:element>
<saxon:item/>
</saxon:group>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
More information about the fedora-cvs-commits
mailing list