ࡱ>  13$%&'()*+,-2`!T"xܓ1os(؄ QTxE7Ús,uiW5# ŜbDL f%3 30]uerpvW]UwuW\>w}a0]}lgfBt Fm!-oS<bjLwW[fVyybV}G"ݼZu8=I9 Dqx^(O}09 p _-l%N[SĦ43bP U/B^fb-QbĦyaxsωL b7eITt*]'^_%=aw1@&]P`*?Z??DZ{ >Hw g gx*8{\4b> Mp\#`8 A0u6z{rV"S;m؏{`.xB!|m +qj y$΂p{>{c<Ƙ:dtK%0o㸁8?/n0zIp4w܆jݝȺswcٮWUv ƹw`pλq=܇F ~xi Lj\5 ZR.s9eƐ=@f䬂y6SOFp0 ?;AonKq}V^眮f|Fq]?\ 'p0~aNZ+{G|e?8`8?&gt5SN韰ZaVzq'*w;[?w~~,sEcQM&v?-~[\-~y~9 ;lW1;5V5Im0 qq8nj~TnAMҭ0n#{N8.8wN:G^i*kpޫq1ӣmA.Ra8~? u CM1#0HK2]sWwO{GY1ё$>ysľ_\?/ DP$[([*Dȫ5o>QqLOh8}Ta4m` `3{zV s +qfJ,̀"Oy.>U\X٫WY:a}t^=T+x;>y}ygioœ0AF}޿WşQ:'>qB/e2MMLN1Sp1e_s[\3qx׌0A A-S0ɸLϽkͫx/ SMgcs%w[uލ5x>]y_OUߋ/;N0_]dz}^V"g{gϜ%gw =?PiϞYno|kq!ƻ}swƼc^ cQy6a xUioL:Sg\z#UG6f xV*  f`~۷yJ-|J-ߊcopW˯p";IȟqWgYp6C΅1z1a@K=\rM 9SY?3p3p~F7J;Y➦K:a7z҄UM잏1C 3 Ep1&}H_~|? I V? }bu.RbK|gҿµw ޅ"З̦il"Sy=,18G>Εs棆@oCz3!V@|3Vcp1(Br9ǝf^7DNm]ͺvm7Ku!K`+Vd/(@a:1x(eP2 b_Y|0TKC΄;QhBx7Ea${0!01=FHe~H1Q`(C1a} ya%!ޝNxr7ݰP* Ri=tH%] \m'YBe +$]n,T.SKa$K( Hƻ( ,u4N6AQ${#|#p\W䪐Q<&<|}0\|WrrYȥdRQz "r݂H]* w.g) G*MwXWޝzn$c<ƒ)bXqcȍp\r-V4_K( HeJ>w۵.q1 yY HI-01M܄1Lg;c( p8zr]ȵdRMjr%_8]pg֗z ZHI8f*-p+vrǝ]|R1 b,;pgn ]o6(A֨3kߥ;"(dm:LǪוݳ<88mp;N.ag:Γgq|x<1GLg02i{g?%lEp I)혿K:]o$6A$QU<uO@xyc "f3XdYt*C &e8Tjr(AUW^#a S)fD>m#+-Hy Su2c2F^%u@_kGmϽS:;b;ag[|3'qh ;]exއ`L(3I!SccV4}潐wb :W9{^ީl]r;2_I~(0Rekq}aUN+3Hx #?Liy.y蹰lx:;bn8,EHI,*Pf9s.)4 P72q,0 82PH>2&0F7s};סngt,\V^2ɾQ]l2B~.(OiE<i;+7l$=ܐ9dɢL06s˺Sqݰ[JϪ RaD/L sD}=QhIIU[Sb8_X KbE3Er9)z^!)",!Kc00Vp_+7=3c,Uzp.9r9MbfN>Lw*[zE02ҝÒZ!xkJ}~#,!K0Fv@orEB@Y%J%̋saݭs%©.>\y=+òw${z彽_}'s_!^t{(~bUПJ ]:\D.$1浒 :ۡpG3b*&\y<ıbe !0Bu?U\ŒXd YQb\,SFpe9νu{`|O,C`-e+)Xa}X]r;Ļu&ԩx"7M$[ީZ` yϯW,w=.0Ty}+ ,X(K1^`8 #CɐdH,kK3';0wy, Zyq$"qܭ|9,] WCbe4j ,%%(ˌQp .%#1Fv*-SKYzIO ڥJpWl{G]Gfܵ$dr5W+ነ˙Re='bGOutxxn,1 GeO(Rq}n#=n%} iw[qBqdu2j|%ZܫAPB'HA=B&X, ?H"{$<:{#Ȥ=r}^rgX_3ɝjmCN7x'tT&ӏx"q< O 4yYe ,L׳X3X0hIgj=f{= 4Gpԝu;:TyF)yJpSqXdVkI# .v+ک ;OD$M{"y%E/=^a^d YʔX1/ceK/$xLx<)h,%zU-v˺[qzbܦ z[yڽ,d<`"KBE^D^Z}Wj1 b z y^RJpJPk jgckIqD+a;ۡpG34,(\}=1b2La*A$oym,()zY{ ML%L!k2vXVb'wWa[.twbIӽRM&XTv_: dTI]灷^b Xc[M|L%L!k85{M)6tѶc.t ;:-O9%IѪg㋌w14Nfxdfab,%%1)370!w;^'宴pnuhӅ,yI$t}VTv=YLd~cUg<̃2zkŞBdO `K86]3k9ϱu|t"܁&aa(U>KV(Re=nb?Q|LP^g}tҳ껷UƁ$eQ@`N!z(cJE9Pd8%}n.t8)U۪ez1̔A`!`JIYraJƭP jv5wԤ=%Β)JM*K dUZRڱ?9V\MjdjH-SEqdK>cǫtF?aHVu|UIׁ;7jUYT* zH+;9$Pu+Zfjb*|f\FU&,,TWUuhS'}VeL׾ѱ (`{43-1ZJ 򥟭XGt7l'" u:VlVUu'}q@3ѐEr9"=fGwdNْQjv4hbtTݝ*I}>dotNґE; Kr 9`;Ƴ:IWU3Ȗu~ NpY [u_Q?ُٗ죄gG]Z A3hg:bt:FA 3:FIo(,Mag.$h*vvU':WըhL+W?ŸipJXդ͢cNSSGWLޙCq;aӆMUb\IxN"'*/{N=^?8'd+T#q:~V;Ci"LK8:=y6u:MT.ɞ;cH'ȉ#DrZrO?Ÿ8@͎4ʗ~NahbpST6UIp"JN#F;Nd8N?ŸBN 99:+qu2Frk#nْ$t*Ulu8$8Y larLNS'r1# ;+]Ke啉ۑp'tb4H;{*Lz\r69 ϩ (gʼ6J1N),9L=YGl'*Lz_^,MQ**>1ss0tRNl2+bw,ҹГ qUf' HTzt 'a/̦pgWM==EqɮS}])s\D.FI HJ1P)'LeU8S}>?:a;Pn^IS+|%O}0ԛ\L.;v}_XḘʒ@_G 0V WJʘ,P|~}XG.:!O?ԙ!!ei0I^uxgʼ)+002D)3Fu=H&7:ix ;kq%_`h&@%[ٺez3[a<Q&('Le*J-{[X7.tE+Jn8rRfVdn%6:v dqݩ2Tb _׆n.ش>vUd=Y֞&SJ[#ٺV@gYxS n g9)YUj8^F> GfE,V42f0x2)`| _ߥ^ ePH`BXe<"F%,9ǚ:%t^(aKc/w*Udo JOѨ tROHmH9X9BO"F\%uL} #p!K>[ߘnԙq)/puN^C *u'*9Uޡڋ"zWE8֪fjDo6"<-Yvvڤ) m^W]63}(Fx, Sꕡ?P 3jNi\#EpGHwuǕJQKXWn k @T&A\IH/]BF(u%ꐪdDwpʻ]FN+<$WXf+ jw#=6IGdIhT;WY6]CQĮPg?Uc5BQY$0n`n cԈF- 4(79ѡn]pƥ1T+Ud]qRjժ%~&.#y#rcƽ+fӧcn|ڵnԘ{B&3Uf.^{HOc(JuU868P0V:ױZ_j]3`&"~9!sZQK,dmFlGY'fl:Se\uI MiΩ/PEtAfJ?ߍ{*%ߡSj#3[=#n"d(|\!HuNڸNZ ${chIS>#{Wм*̇B(D"Y䱘YR೻2kn.ش ' il欕%k`g{=Jb;CM䝷x]G<5cF3iaZc=GwuDwCwAw,)i6Ud=}J j F^%~<(rݹ%xͤO0#@Nkx:b;MKi5:3W]ړ x+@zLiekץ3O(c7 }y.yx[-5W{N ^{* &T6Ek Cz< O(-Kkf< OaIiܝ, mH,}ᥜ^tw¦|Ӊl&SdxLױ`uN4{{wu܅&owBWf´fцc)A䳦{3 ۅfvC)y"ũ4dUySԧ5i`L%oXq[6#};ŃJ{L?0MLs Oޣ|ފH3넛4i,Udlk3t2 +B V _AE4 `6;u&1)PI Mgc [ɺv͖'IZL*Lfai&A4',pl`$`XۻCibcٝb _Y#ͬnp|'M3{٪K>CeY ]LgD7;|  Rt2]deȪX+PK)Ǭ#n7VdKY$M:$c >2 u01'S|Ƭ`JvQftΐ>+ǩ'Wȏ#w&)y4r]dm3`:U }+NcMu&̂0eNeSq+U^-_ BD;aƥR$+Mq%{^[0L9]Ύ,ڍ|_̂Xys`.ɏhWRA:vf)0*1;Y;& l;٪̶Sw1pΡJVUЈ8.0qp?<^UHg=z'6>q(kdxךgtߝ#:Mi>~3f1kW!*.BmwBUȻ yW!*d 2,T XyOg$eƣݱHځLiOTT+Z }w$߲m\ ,%J`YH)'Le*LJ_+Kvi#NR_,MRa*,sR-dqg)ZPXJJ`,||dTƔT8~HdayGf') ?&)g+LJT[J}MkVXiG0UKb) ʇ-߸]twIKT+Ud-8R YJ+ZDkRiSBrWoJfjBڲTX:vI4,MagWQ}Uc%O J G5ޯ:h$MͤZLSh&:ۉ*8[&'I%8$chDS3O|FF]4U)'LevFI]N8Bݰ] y:Ʀp*UduZ;iVEY+bvN肕YBӨ$U1ϙȰ#k7*Ml)WGTjuN!uvh#J%[LYҘOgC>gr"Fs.|g3ޤᔫ#iMq%k_a/_$Xz=uǕ+_| 仐 X5;ȗۉJ2.w$ʒ쳯0%e/G)| _ #߇`rRRg{ʖ~}F%낛4[MSn*.sZNڠϦZ ][,ՊgdU`%"#jqͰԑz!FXryNsaPgƥilz¸=5(H+pg<7U+m:H'tJUduO2u1~4` _.inGNԘ1 u"^vi'mR҆%O+^iUN`%"=>W*-L+sU[Mrk+nq)y"T.^kS:H;i>CM6\Q]V!:hb~NVCg^it$mI:əNAI F]+q&KiU:0@N肕D6Yɬ\Y:Sݓr~KM'J\7l']Iej}&w+NHkN=V\]]4*F\tΐ )_w#&=OK&pf.dڍ/_8_@?WakR/ #{@~4I i͢MhǘA\޳n~J-KT${k#}E$_Tm-plK| |Ȅg0%d򥟱YGl7Yܔ?8IU3v| NhϵFU.M~] uP H43-fzks4#C3e3~ۑh7ZLڸMNfVydwash"^BԃT-TN{.үwd.شq)X"U.[j?d TJ"czy"d<1ȫ`*ՎnJ %jv22$8WʲUdoǹugDgܣX DD^)2L7GrqLE X>o^z=Z6C:1Oe"IYUd?m6!4fu ldc&)l-Ȗ[9*F%ʢX[/s֦# ,?N^WU})6!p*jc,i6#dː2ʙ*dK6eݰ](7xY"7A.[EIv0Ҷd|OZ V\YUa: aK+0UTeQc_|i 3;;a;OKVn+UdOm1mabר; 𺷶%cGf'c3Yܑr%Ltck6;:ᶡdd)l_%IҮUm3IkT!ɝa+dO RRE5I]Y7l'*Mҝc$`Wd/1vev!;c,XI.+ v=Ȟ^!{eLx|܋j/W绱D;Q$tR93&{Fg( OxG3^<>gzD^ d<xu11nF# di MΚ$i7̮+مYz.YQv]a7؝{2{ymԒ:>^J/~sSu¸7v%q@PN4 Vu,L3ٍ{dVǨ!1|fl̖N,9OǓRkYep+م -9)bfWZAdOcofj&-10V@fL\;ۉf4pOVT&ɞcH].FxF]]n;T?XU>̾J#i igqoʗ5#N<%OSILʒ1vd[ +"B=mma;^io#WB܎FiaZhSv$ۧW*=DI:MbU`npgdk>Aٖlۓ+խr_mWcřAf`͡nBnG'ASdYFJ gfgo7~&kEh?ch΢IYK~uD^ 211r[-Lkm8T{l7xtJ_;r[;D;nRJd*KY*n+EYIHK`wԺ"{ct}L2}P7Jx7l'Lp=Y27I8${k!Nv#ibn=`O؋?ǾvtzgsGN{k֑h'l< vJ_er+TU+%bN]> [r[(U>OȧYXPPPPQOO'c1f(Z%kN|:,aI \W.;('|V(3 x+pl ITBTC S>SL~|cN; T5mWL7t'xܤD:yL[۱[BAZHsDhrX(1f#(_C||?pLZXCw4էV錯+#ͩSt-*O[[%A1,9H3k^E.h `! KÇtu;F>V(LK)|KS}2}؎4攘')Umnfu#|Elx>WD~voE_k"N?F?k"N?Fk"N?k"NӁWD~~AWD~v58=YCk_YC?~1 s)@~anš~ ?~ږ~ ??dMNcQ'krط?z!}O~֥=):R 3O9ۑ~_?>7k4mףfi Y5~xG-ic4Q_S.+݉:3D~vCLqt'q1f)݉:D~vC\#&q:a8똧;Hǘ sQ\8G#q\8}s`6;dc̢1f)=rXcG☣ G018{2K=N?Lq,gat9&QXG.S^GC.Ǥ̠AsCsacg. 88V}|_w2S=N:FsR,8Fq*ccGUfi8עhcMaGktu _+c-j8Aw8w Jz8n q~üFc6̢5?[=N?,{ړr_2S=N;<FתzYQYw ҿ4sFr=?Ӯߨu>ZVǏW A>N zq9"Ȓ|:v:M?r9k5N@sN9Qۗ>}tU.+}/..TwTԢFqc]eYLV8*O$2;P&er9f~Lߨ#Kvş'l៫$NCTM~K?sȾ?C x溒,[!˙mjufyFBڼ۹8ss:s8kpg2S* woC5gk76 x!U./fI{d$| [[Y]cc9Z&Øe5'mu22KN Tb_|o8p(G<&<*|wk,CI,W|5`Cg2t{w9K=ν 겭ocQ9 _fF說q[UccGQ9S#N_Tdwe fRfآIfܺgrCeB^Tϋv.t㭺KvFBxn2O=^Wˡz]f \)~Tǟg(E*fբSfhѐ+2:QUGxgenK37Hx^2~IWC韭|=M?oҏ⛷f:(~jJ?oŷbӏ[Glh%+\ #wO㻙os8ﻙqxf焂LOH`-`]$-5wknN {KPt[K=gf%| TWfVwb5:J=n|cK&h2cQרq*/OQק3gooJBxZY'>?NjQzQ|/@ 2yy߫ + Q|nf0(9O?oŷҏ[GV{Q|#(~L?oצŷӏ+Cw4u.Cjlhq74ou'GWvnFϽ ibM+3bLJaX.؛ǟ)LQGaX7V)2OOSKEW,ΐ|uIl [d+P3/?g&3>=y!qgJ=Rڒ+ɛj0Cʯ$oJHZd)sʕH1~w)nUįQ#zfD|-S윹Y앹IC=N*7rjIoSx꾙 I {]2Lc ~!} ՔߑLc2gS_3읹M63ޜ1}r) SWqzf8,3_=,>tt_׶o97TK򵽽6ukY$eYn!+Gk33կq9uMf ;Vss-nџ-˄e㪳(]muy Df84zE#_??=IGM6k<.^eoolj?:14/<m٧zކ->>'磛f`!#/ļ&&sԴ0E?X.x pUי{e9NkRet؎xMwKt;1M6 A$V}@ $@f7,^xw=ID\&4qhu~B0O֭ǝ껜oh/ZT3YFjD=ΨC-נU3g|i܉;p'<^jǯ _.-#2蠭`~;\Q׮k_XƺYZZ[:_Uk:l&^76s|'pl%E.颽.xcҏ>wҧjUO3uj=ŝٺ[h&soFuج؍XZF|~Vqnfܨ%L]gd^롇[|\+>5?zFTrc<8W\gsF-ܤ-vv˘g-܏jwvW9n*~'ivQ;OK2;g>)ٽ9{p{=NLta[} =I{}FwM7{D{p` ~67ݧ{?d>|sߍ~:*Z):wN:4w}LtL|LtW{G\ Oxsv bor?bBt{_{^{=_xsn;wg;{W >ߊu$ػ'ĥ>)o,s&C~7A7ٟ,db?ӑS$1xxxX'dڟL?&џItaFbcB{cbІq7M?].2030,dslrGӏս^*rysFplŹF LG{=7?.~,xCqcQHC:F=1b "0vƋ'1>Df`&2%&0 \c,0g6?V\-CwՎ%<^6F#@ UOo=s[uzsY Dkuzib4uԊ6ƽKЎ2,X*_M[#F"qc4xf `ha-helFHKb" -S9ZA8`6ia#\ '1vnKbqFx4:*#M7p]:p p]r.6lգv]bC,^⇆c\jJSLF:(H.z"vkcFY[):i1fnokCk08^V//ę?C91QMP8 CxlM[wa1GLUV{kZݭ$ڥ Cqw'ݑ `' qw<>ݎ>^P~#(vWeIrX۝]ݑ f7ډ$ Ӱ,]IDw-25+'}D z4Izt󀻈D;Ȯ ?*r#w;[xCF_bj{>s턫ǎ7_v~n'ăb35e\̴1)t5#e2flrc/ƌspxPDO1*'%]dcBfJIcli31ԔIDxp0O UCԽNJGMLㇴr&cTYl\\cK\)2{|3 1W sx~9%= YT31yP8ߚJнjc>α+03.3,e#͵4樹\|?spks kx5g/E 0Q?&1،7 #xc0V<8efd(`!]VÌ9bSi)mhG#SHiD?<Tҿ/PRE(#s`\bϦ\f?Sf!y=sDEQ)@7(D%(E9*9ui nmbCu <5O)WDҟSOVjz Soqf? Q%T"b*wEri̯1U=RD-dbBUWyc-e\50󹘹,Eʱ+T%Uj9(P(Rj!%k+Pr%Xbq\*|P?P$~UȧFO@,Bz_Ϋ!F jYKZک:گO F1;oA+ڰKЎeb)|*@!P(A*"@jUC<؁Rκ1`jC+ZЌ&kD֋Y͘*(Go 9a_U5 Q*>ը᳗Q뿆s\S,iu '*N8qQ8DC|ET(GKYb yy0k(7` )|1y)E(BLk?88㢆0/:puVTsRU:>G|y8UP18q"U,}lm\<3I`yw:S__}`'Ļw"~qL"UeƜߤ[|>79#>R/k ' }B۽>ҿ^xzۏ|y#>}g%C>;ri/ٴ= Y<1ٜC\ڙEb\$%b_˴wv/eq\oef.r{_f XxOȘ.2ORDʹՂVm?Lz=BK\ f8U^kj[bViÊf_jڷ:ԩFDTzVNݪUҰBڷ2jV?m3rT4Wt+KjV+F**W[ +/c|/cxLwU{uD5њbm >ưXTm5VVk~ mz[ Z^5{/SŋV&8W ZiyhVLwUl-Zw57fklaMm0?7s`fn*n/G*mnoem0;;ojfkh^52[{ө}5h' WXيj}gk {cYn-+~֮ܚUVekT>eRaMjS{3MsJՔ$֏85hhv\}(Q]քz[ ցlǭ537V߉vuGzNXqk8n&WR&˸52`_$[sҷR6>UnOXaq+*b+(zb&ULjIhOuĭ[jGX߾Ʒuʸz}5$k}jn}6udPFOGՌh%*aé\تgQ8*X۰u [ϰuq naka":#}V)SH:L_pYT!_[T[p(Dr [[pk=$/T}Hs`jn?7|l !Z?u[/uF[Qp+ U[AՃDUZзR0pIzt]ZA| ۼ/<~/rrsvֲn%C?пz *y{٩(@!TZ(KTL/w,J[WHد!j(0 8cFg(OM4Mi4MGa3#yn$d,b,T%6JpQFہP5D+JGqC@qD*D#FWSa~-kFj귫%Yhs:Z"cF4D#׸T:Ja1ߍ{bbk̜ub oE6]1]1bv^hcT:&HGEHLj8iǵ-f u9b|6bF!941fn_x9u2Y/9^tWE<+&y1QMP8 !<60~xlS#&B ؏xY]ͷUΧߢ{>] ֛! 1?יK5YI}XI81?#;Bôq1xc4y> 0G`8#}3( !;?38sx_yC c,5!q}b cc} d)uQg:^b8/ƩO+ H7Fpbh+p)uR ߁k'^`8F{+~ua;>57=wRk155K9ލ1J1t5Z3+mVzj &Zj#uLA5*'R+e(E Q(@>8w)%lȥdv? Yg|&grL1G#|,Py'v Qb,D JQJF1Do ee?S9b_-rٷ=dy{߼%̵y7D@gOhRZUFT2'*U*"G9Xe1բ4&CuzP4FՄfm\jI~XǴfVՂfՄFਏg V@Tȼ*_Tsn`Ec} ͪM-VKT;\Kłw,c,"Ur,B*QQuԉ增>u1K8&TJS 5hBj)gBu},}TDT:"᪡@jTMY8Z9hbV`E\ >_yZo6k6:696Nű8[XSʹgmrlO֋BmbP(3ߗuZ=c@SLLN.[^OWDxF49,`48UjU ĩ%n؇w;8yXF7kuzbuκXg].汋9b~E(xbz2v1[^~|ƶygC=ӈ&g2E<˽:Ȟu{^nN]m#Mn 41Y/ۙns=oSbލj3b7 1 @)J(B!^Q.7v/Pb,fW9urATYJU٪Fs_SXgqq '*N8Q301C?D[++++ :1Ì0spGYGYp5y$N4,5{9xoMI s.0whe(WPA_*U}2WUl)uZQgE8^#N1(}}]HrQsqgqF)u8 Q(NX0؜{}օ];玟\?P5T%*D㱑K[0y<6*PJ:wK`/? 1G1n{YϽr {\^\돹3[1>o#$! ?a`6mlڞ,l!N.gc 1."/%ڻDhL.ӷ2kuD/1\Ӌ\㋌~/>br Sä:~+- K_IVP\9L$m2ubbk+aMeh_; %n}$Qm$_'U[V:le#b R"~D1p'$miZ[ð [k#Dz[B` #$]d[I[-paEV&?hf~^^'rOFrg#tGsWc}a=Q]w3aF}T,zr+y?<`t~n\'^W0]^@7h3nfloo,Y=ͳYh.xoޮ:{*t6G]97[|ͷZSK~c` \}77flav-̬QKSͩ<͝|͏®6Vm ?~P)73J9Ex+@*Bx[JT*S婏,SDx\=UЍmj!2Θ.nbf:2=1YY*[堈6f,Gg&fnG)2'#KlMc} HwՠS=veKX^9ysϦF1* | ShQdcX7^Nj*o~Bߢ< vZ 8<^9,4N$Ͽ89D{| `wv>\ g! 7g`:7A{hwO4A2k}. Ĺ@ߢOh'/븘0鋱@'qJfUDxM.y@g :od>'Ql,Dgzi5FդUjdLbs mTzNg5:LgMXX/vocSfթb){<ӱY,r1bC̊bcZֈueΕ n=b'f)v9v=k}nW3' mmYR[׶rE.wV؋=؍]<=9fu޺Yk].Y묋ybNn減 5czXNNK`bxcƷ |1`+Ѝm؎yyxNϲ1=C;؇=ﻰ=jnStf7mb`v0o;?aN{[c'lb΍jc3b ȸ6Xk8Xo,'^`?kS{GV8)V0cZ8Wc syrAlftc+]|sG7;gqq '*N8Q=B0q!:DC!~1b,!wfG2to)qvivi~ӟvNRq|Mb] _ ['.(qFl?fq2֓:Ψl&Q1X-^g jˉ8˸38NxUX81c jf9/Y:Qp~BC>'~E>G~d?^^O8"1./%ڻLi2L.ӷ2k5L/1K%EE 2֏#>~aϗWJuoTZUVSJ[Aq+'U$_o?[cS:JX;qk&IG[ IXՐUhV9ŠFX9V*o:D1p)+6uh=ía5 N1DSn۩-$)p~`+r`*V>E /)Av>[|n>/ws(yrm~Dn=̡䯀q'f3"u7ͨ#q=>#hNw6se'mlv[$`'D},vnfjfݬtdʫlq| یp vd}l Y]ѵ>[7Su3n+eM*\zŜl0QmJm͍ڼho3wh3xNLt36kPULdȁ{|\z<) "}NN6'g8pJdap``4'x@ yD?7((1.;fmFfmf¬ƫ,^߬dh.>?l>lo-Ȼ%ngq0Csrn6f3okы^|5.fsm6¼٧ɗ0e% -el&f2XeR_3"=~3T:>7Vx_ffSk l`!Xrp9)PВ$&xipTו'%6N ؀ HB ;gYĎW`Y#@l6HbI{ʟ'Ui\yZi$ UR{Ϲ#ᨻ;5Q8wrԏn('g1_M }jOru?;~}!G;mZ++ {SbJC[G}bD'^$Dǧ2qrtSg'gJޯ&-};:鿎88q7g yI_W+~'/]7CSUZSM^ݩ*q)#/gt>ϥ>^%?8Ļw.AI(wWKVKW׬a`uc矃<kXѯ؛]{VK?j'?I/.}gVܫbtNL뼘\3]E1y,ด+vo_;x뉻gۢ/[\v]uץz.б:39|]:GIĹxww'G!fz_?o"ׯϙ眉|Dǭg|ox"Gb)19ڸU/sϩhs2'3[EM,P_L2~whYBU7 Ƿ~ErD;(o63_M:1q,`&; ?c&vMT` e=GvRx/oVUDP!ijJAڥěR b7=x{Oũ8w8~}~ Շ8 TE.ugcb}Cs9Ȝ27TZӈgOl{ֻA cr>Cxobv{'yv0ɬϛ">~+SC,c*q\rw:wD.tG?}⸦0l,d">#vV Ż"DJb|=7vj!>!ڊV9 ֹ[F8ɵуS\+ir Zx$(A.D'diP*.22,M)!Tc'{Πq =|~Rϼi&'XOW+T2w]g8byb'y򸲐 4HA21\XKu5Nslzho)He>FC=i8D.p y/AϣF4`1QZy5h_ LqGXn1 DirRJfT1Ԣa%8|8"Z(1ha= 8%p A8|\GT('8YGmqXTCsUרj|>~tR?=YA}s1HA UJVeX(97]%.U(q߹"y={%]e]!r\!r^%Ur1]elWU** |.s_{p 2A7̹O?ϡ܇o^e=!UO^L V8y*PTN+PUH Vrj~cꨵ71R_V[DjefU#+ $Uފ#R2TȪ"rEyeF' z!T+xkom໭z Z`UZT #+諃saiO0 _ k,{G^jY;n?zv ۹vGċqG}ǣ%=(ڣG#Q;hvW;ݮ|;mv]v`gQvџr={Ϟ{=wo=rO];<+)Nd{/ 1ت">+ԯ,z_a+(K-bnCHC:|Ȱ2%&+[ B [:GiNkxzN,ckyf=wu~W'#Q8?бO =qp6'p=;E 4N%_/y{2^ֶ2hie8ɺV1qq]8hf~~jd1Ld>#UP" @&1,~rՍ187N$q]HcHA2IHDO8q5Xq:CV팃"yH`~F",_ XOOO&.rm1q +U3qX%vdeP\ V"d+HD1 Ϲv>9-q0Ɵ<}g6VH^~ .Y+UXוӐ$#`/ΚL,ԸK֠5`θ(f$" 2jn}n9RnE~Q7IѠ׋P:t5Pq9ʰX@<Ϛ+e2vlkV&zc&fe ~v`:XC۵:%65yb=t똇V7'g>Y|-g]iZJ<·1ǚm#|n<,1fwgk9g<}-o)1J _F23 Tk5ɩEyh4ӿX-l!v+9Z{+ZJV:k+ZKuzkl$ZE\GF=PTY*F浑9n`뱎f=:1S!: XM5X+kTǨj]gcX] b72c V9BVbyhr,8F+q]D y[E VJ⸖36cr\r-ڈFvrwcY)jZZuX Gi17{3963B-ma7"HKRUnccw{ ͽ7reY,Wpc)JIߜ{fj^~$93wv9glG@OzӎчvZ1OL-эTp]Wt.ۙ>:_'D #1*Ƶ=i%ю=D1zכXO;A<΢?ןy|[/lAoq?zhG|3 :0#:1R_[Z59kÄ_ ii4m{O~N-_o2L,GY9cӑ˚j&2Gụ | D{GGGIuF?1:NN̊3S/f\5i*Gg#s UM,ϣ|x,r/br1sIF/,eLFZ2\uJѓq=Tw tEtWWOJ{e,We̳ jhG3N#:?Z[%Eyq=gY֩q{'qYY<乣!06~Gq%c/˸2u/c2{}}> Aُab0&nb+r Ok}Y3vdkcS|?/^oxO;g|wgtAW<_r]TGGIuF?0:NJڌՎc]u?c ]sp|]gU*1m"'x7179nAH8ߏMO{QU/T=.цu7юWcܐč ܔ@s|񗼡^^d722R̍d X^m?{`ߑ>gd$ HUQX-j~;1NWP1I,&c r}(M?C 9ēCӈwOcOg52y.UHEQShϚ,b dbb *bL*pEj%2+l7Jƹ{[ ۱C.[X{?NiS~ƺ&b1댩ȤL۱Mn~;bLt5riǘAL~gkY3S͠}#WlӣЮkȉڔ80sש3_`\;cLfIjmXci?Clcs*w*^lŹ[\9V݊$ rX5aeحVT|S [mTs+a7z_u+n֭ԆZ:2k+X _װ:ZYUTS+>TMGɪDJW?S?gVyruO[猯mښg:f| /ڥ[tknW:Q'údX kA1BlҭRV(d|e2*ZEcJ@G[uLژ|d {&1-~QugОOVH_uwU㫍h++L;-5_O왴XQ0vXa3gϱRi_] +n5V+ɫ=]{aj$^H+k}TVêbXAt a|uS nVlu|eϭ%%dz9~gvn̩\Xŕ*Wu16[gskl.p\=|--~fkg5^]| IꚭيU\AsgjfeRVXǤU#ZvzY).&l-Qk`Zu/_:_+qIZeYekXn*nekVW*V^u!$pZַzEZn=K-+:VZQקºTl=*EuWTjUlVlʭNW܊TRC֞z[cXAMS֋[ց׀DcD@_ +;nVcnLPUIuu䭵~TRb'Ub_)BRH#*#s)(a$dDk%nmTTHo%~ʇxrՍ*ɪV1 ^MN"ˬ}ۋWls5 b ݶ=Suuwm U#;>п^4ÿv~&7*<ޜe_{ū&jUWCuUUmUǍz>׻nX5;jtGmGUiߨo;jEՉ)jIW5QCUG60uQa6{➟m7Q-bnGPhOv=-1R MEь6fsĽh{p7Bs^L4zM&{11k1k1k1kw;:t3jܗ+N_F5F{DUJ|U*V#@kiwMo3홓Qۉ~h+@k5Z-p]94ђݘzi\5cΚ1w͙esԸ 4} }Z^R}54b FCіO[kKm-*Pux]m}+j<Ǎ]\HgTSS}}ToG/GOQKJN:ʬ;k&p&ddLLd!{^cƚyo~xG Չc0j2ZHgQuQ 'w 7 `xd\Eb qu;xvC z|5XU[wI?1To?ߋZMNFmQu%7߸GોD5?qDT_eQQKG}%RQuUs0:#xZ1.5|GyZ̏ΜQuQa\i_wW+eq.jMD5V5j|oL_D5b2j+$++pUWIu?]>%Dj_/G}vC#uZ7ƎFQ?_㦨1nwFݠ~F?=|7r^}GVNqv;j9jrU#ۢzwu|OTe,GܨnR?'FO1Pˑ.nb7<纁E =QS|q']/jWNw}?^7F$3WO?w:jµFӨc$&u"}|u;۴e|:4<wzz#^')\7"Selytfx]fbx@=覺'z5}яޯx"ab} 3|cO?9&҆Շ6ު.&9l2T*;;M 2aZXŽ1V5xTW XKnz x5ܣji%V`xC+Q#\k<*xǽ}Gu}L=X0'âq$PX|K[}#P̙*X-z9z:zX%+X2ѕgW5uf댛fN`2 q8ya <^JAR,`/.Jyo8䩅XU*TE^NTZM*;rYc 5SKb7s1k<\H"\D ēOěO|vf<+cy'x]0p]P̧=c`cV.mwhyOsqý-2:-gxxlϯ{=sDk~۱b 6c6bcXgr>YUgWe(=Zs)4Ji1P{X\gLڛ\ڟN?4F9đC<ĕMFfwg1,ƓŸ_6fٌ;0K>G?q \cn# H\ Qbg}>g(=k؆؁yn7C{c}߽İX2{k!fL;D.:q`36a#6`=։\<=ɽ0fq_fcqcbyE(QKhg -E)mO)-e8[Um\omQi7P\ڡ9)Na;wAӹn:ma!|U Y(Rj#DK.TV{^68E O1bw5뱁[۰;;`'abnvcs:crvb۱Mߝ،M؈ S2>ɴg8'Z&8efO'SdNUXj'ʟ'*:-X)=*uiD'sO~7ݼ٫Xb{>,\Xg`s`{+ID='g_q O;_ٝItfg_93:|=Sy,Ns8{&љ{=kc$>c|Mj|'lRk% i%ey{9{=_\͟4 {n&`W6kܓ5rN4$MS4OФw-+:CS{^ƞ rIpNy|cWbϮTJh.3r'WrN'T쉔$JyqU N$`FܙyG#LGx=f#=˨휿\س| R 3Dx>"<a?g:Ğo?{>!LB==h5=_`$:G=7(^ ꉁ䭵n*w^ 9#09g'+SO}$ud$(:=sVsJ Ju~~XϏmޭWTu|uqݗ85u,<[/s+ {X]T [=Oro:S,HJgA||S/p^=3Z"kܩz|Uq>+Vvv(Iֵ$gĵl[N\î~]vm։j֩ErWUmªsbɪ*nVju|ZNOV+ENUVm%:BW+^uN}Tx֩Ӷ&֢:tX{5\Qm9yTߗO[u]U_INVqʱ[5>'oJPa[?SnUt_ .==#`W;2T p5B(5Zq ccb.yqnmXVUjgTq訵uX5Nǫ *CM$5NTdҎEM9đCL97H0k&e\&cuUb*Џ8&aPhX-ƊUj*CHw~60-ܓ}؏8:"F>{78&^77Y0^M!CM$>3&c "YV9릫\P3io-稹o#&k>q QuDy;2Oyq@!uq1fӷ5i@.f.fNfnYTL51 A[/r/#ܛÎC8`?a[nM%"JfT܌C7'f܌&Y=)p3ݜ @ww'Շ;ywٵ=~w>$ݑۉ;ypNRnw[+s1)dww+ah\~7v[~[h>{D6پB^ݣ{SwOZWr^cwnݥi]irZ%ۏڽ\`3ýe7vGDY;Ý`]`^HbKKst^.v*~ܕ+#1;{ٝ\ wnG`m>-ܗ1{ܽT*)k;䭵n?-wM%G D}{YܝR;&Dw@v$$jDU͡ 5LHqar.+G9Zݏ>#eF~`:;#v)Nw%H]ȡw*1SZ贻"SvqLtG'2C-fݫZFfGR)~JkڂCڡ=Б:чљ>;gbB/x#ud5Opz.{$}[ϭ؆j)Dv9vGqdoT;G{OtptTTg:1vfvk{1[D;!)=dt`ΌΪ ܦ~OIlZs\_<8&Er<8*s$ꅞE6|oцv|o@8]xƹ*ҺG$77+:m1/+UxE/%<ϝY8Eh$mw~OuÃx]Б8ks{weyEūߦ׿N;A?oߛ&KoC2qXb?87}/^vF&oz6=aWEGA10^7~   vs8CہNҿQ?b-hy~m#D:~W8>m"Q)_N|xݨU'YuQ]aƜ^UoxZIdXдbEDcQdPBEǼȀY\L4 )\3h#hs<M"FFFQb4X5x52DLj "YLt٘u hk!_}D<\ّ7Jc<1 \ꕾg!.a΍b+D TZ" |Zc#橹1Xֻwo?;#g`{c }BqޘgxExOUv?ƿ7cbq|̚u1cˏs?^}MLDdЎ1Gck F/%>d_yc^w6>OiS>3>#ψ3kgψS)s)'|gnjoW(_Jb)VqU/bz]K Xڊ[WiRIX/q#FGT"aՑ*VBT=ŠGX+a#\tr+_JFj m4bn­Wt>)Zpkn!pBBjʭ,؊B|Ձ^*+&A>x^ra޽|y0S ];0!uw3/%ȴgzWszSys6?w繓G>I"Q{B >Ͽ*3Vvj6nm7mYl.dgE36m3 lsL☌rf\86[l36Cf,hf}' ̮.q26sfl:dyN&ͼ//ÆW7:'&j6_js6/AgVLyCIOݴYMɴK0#8;'6X1ܢ'0gJys)sn>0Q.ryr?7.,׷w[̠ l L 3f2c}nf.4|īdĭ+͋yTsx乻\lnl>[[sK}oٿKˌ̹9Y8ͼ\'ͻ<ͭ\Z?+Ll s[9~wb%^O\zJ3џ'{"&~].Q_zxXHW/yT= !qp1s1"8xGh2_<dž3!hT+Ւa.HߨsXݸ=P}{y}b :9_;a:džFws'jcxT/#0RRdʸ+[x{Nw`۰śc VcV`9x2b)m`1m~! +~?x^gq*b+QKJ2a9V`%j<n mm<:wwVxX}ߌ|m}&~_26󻒱ߓרi۸J]P2\opu4&6a%zN|풵'ӎk 퇾)VK9.ZE܁+q5V]wJ$X2q]T)*u%P;.ZץXV07U: obT]vIW+UZ]ku[bzU*+9 O`-a=6`}/jc+[F\e]qTW'e \*&{ocTlqqZ+ԕ*u&j#c ]Gַ7NUOe~* RC`% K+uX"~Ś~Z?w\?*XXVXʸS+pKv8vQwjZHWUU7jWQVx|3[ho ob n!6/$ne ګšzZuv --̩Q9|Wae\LҞ%κ0jtVuPx}}񕢄= [ ۱Cv'3v/#%{E]Uj&j:\{8] UoVWU*X^Tg̹QSblF:j:g0(я1Ghkz==}K%KEm/" ?x"˧zvm =>BCc1 !!8cCgC}0c b- bl<ʸefGJrI\UVTl5%$\x$[YKX[SOܺE)HRWI[[pV5 FXT,W+R;㛨Vq!$n$o!ijFچiuڅ['&F!zCB|M!'T\KHm j"4t*"0N8*ۜ| 'ʵgDs-zk'y;O}i{*ȴW]ode,zOr$Ρ\y'/;o0=*i;yqљl7{fS;\ujʊ26cm3jJuN96l̗d+$_5^ a v6fzWD36k6k36fomflm6к2',f[3AF5jo%ɻ9ܪ? s6?j6Aü:'Y>Ǚ<%rf7L^Y_9J04&0v JLn16k <yS˒ܼ<<ߋ%%繹fw7e¬,^sy2yx6g3weΗK>526\]et%bnm6ՂZwvpa.qflͰY-W4?͙ϓ _6RUlU*Qiqi0^MPb|D$oH5QL&ɘLdlFtG.Ě͈pLpe\nhZFVhi(H<ƋW`l1iCbj5ãbxDK{XCk LLUBtҞ1C<Y flb :kҞ1@L:#G7 bqw"{+|Fs8+238M;hmw~O0N;ܞ`O2'܋SܟSܷӬ38Z:xyy/eo*~_C05#HhXK jɘB\^VqkFM&nkU5JT#.~xW1KEϋ#p#2ψ?x[ P1$]ދ1{PXBƇe}x?{1CwX#(6s"KƝ\SꬴmX7㩶\6آmj3*3؝V'HiUZĞ2, 1V*ZE߫c51&5ļxk6ل؂jXc@)%$j"mulQ&+Rw)<=yq')VgD>|޻O Q{(`*a R,s ˱+J^zkN^m/mTLL [YuFf.S8N2Oۼ'i9 ui>b#fyXGZ/2/2'/27X<_e(R,- N8TnMU,5^lae3 nFf,L N ;v vNvv;v[OK`wsvq ww;dv{Pn;s[cwvWlw+ ]M=i6wϛh[^7>ߵMmk⽫gu{TwQ`Of,`\;;ݪSUn٢d{T?ѭ3v3}erdtϘl wfZxwx.jW4sow=M=(\Eu@h,:^ @wܮUuPETMڮ!oT#&P=1@oGڱ0՜~oSteL]_Wh,dn)z%C}i' `%o?ǜc1_}W kޢ&z2nMG68~YYđE<*~&1Ϸ6j´j-y=ck؍]Oc'v`;a+`316qFl :\Gc1(>݁; i-clM)vnhxN܁:HGM@uTn0vbڮa"\olM7FH+v[ʟ7yg6*jsY2QOӯqL=E Oq1h#+}F\wQ?/xiUHZ5EHiQÿ_JZQJZE=wiF1MД5ii3.b Ϣ 2O|&},2&11 w; hhLFv/-M3pc3k!j;qQuHZ5i?1ƿT~>>tS[A]C}k듈y?}q|q\@#X\&̍q WkԵ.FqbI[kUWrq;.UXE]GqBQ_j:jЦ:źurO+Wju 1UשocUSJ1UK\US\㸚6ԕB]e1j1vWz{1Ju^_kuku=k*thFQ׳MTSڲя՜שk_?K%({fVY*7;e3SH%IgT*'s sMLɣ/V.dL2Lnvfl6)$d٣0sd3E6Cl:$}A|o|vN[f JG\lOEr7'II>4{r9b76okaa<1֟+a?GLPlb LdLQS,^gdјǘ&ρQޚ*)j*C'^cybc(@!P(^o,E)2kcOVS٘Z*i;~+}*f6`6juLwLX9bnT6-*a"5C 98cy3ÚM<Ŋ :JlxuP"7/aJfg%Rz;tj~Ɋ0faXƵ 9Yʬme23[6Fh{lm c>e>WpP5auDLGtOw`8F\Lj/0s1O<8f3/FTƼ-Rr JP<"7SEXL%X"vsnb#W`(#2b1[(%fc)cXJP؊P|,DclL7fОKܟj+r3k]vNI?;o'_}i8mgsN 7NI;%EF9^R/71mtը\wb&faB(X,ͥ20r\!^KE x,47NqI[%g QȜfO|kK=Clg2 "1sxlL7fОK? x^85efc㜇ȓWT_,0s??y[b6Yfx.0cl@"RsΞ'k#|EHh%*_s|]5O|S H cZ( ||E_V;J7Lq)V=A]pWdWAeŢ,IrO=rEvdSV^Ԝ>3SS~݈E22ʞ3}UdBYɀ{|gt9~4'~#RίD9xL;$s:rLc`vcrDYM{&4&LaOXJ0Q )&E1lF/IhlDC2S ?ӊ"M#n郟:l)B QJpk ӿo>ݛO>$/?Ň_1t o>Ogs^wd?obn<ECa ֏n> U`b߂.Zzua3vsLk^Me6Iqf$ՙi,2 {&m"v9b3fZ{bf{R&{0hO҅ ɦ t3afs$ZVrF5幈]3`:,CHGc*aVG&DE{+VkowC4&h m`᳒E 6]mm$I/ѹyՓgWH yyɣJلylh6\MY~j٫57Pi uhQ -fhFhC!CQQ̫rb?ܻ}yZcb؏u.x/(s4>wgwl|W`AbEZ1m`9.:5krЦ]ԯxCF5E>WZsA-Z!0A8yS&z탽xݨU4(kCc=?B[ݿB>kr%|b g9|_W|:E]I{D;Sh?;y<Bch?C|L m`9/QFOQ+v>/ؗF5qh9Oh=O`N`N:i_c\j_a^/1"E\qTZj5Z-ƤA=}v?2y ޣ#_woq ~ۉw+WqZ?w5\Ju޸K2Ͽٗ+ؕN8mag9v.E&?rjP_G{Zo@Fo*xR6[J-Sj|uըS.;ΐ+i;rp).afkףrݜTMBq}vv#=|g#6,׮p]]il 'q:?v.qnÚk8{+{0"1y2sΞY˄il:9oπlfW=Ԑ0a] BX&1,Em&֞6:a$8,:Sa2I!<]DJلlh6̧d qЎ+tA?\xM&3P60h&h|X-G qMõ2!l MFYmra|m=fbnĚOᢽ\ ~EY[–GQF{ b KюDxDX,, XHjb,|Īc@c~\MGr9'YO[F.ϰE)$9g3d<=L (m9^wuH{M?ϓH|x%q^:~UWp}_wοw}=_ k=W;e5wt'7;hKg[#_rSٕmVe;+H*N}ױvuR[C%%G40BqjuZQxTkz6BYjuisϬԊ%bRk=#|RZOv%)Ej#\)U5F]z[U%oWW;UJޣ~&D(9Y](WJUӕ,aN[O?E(LNV:C_GYmfjQjPr:ƫ"MQݮgwVwG~UPr5I:B)$¼|2էJNS/#>PՑ%~/B.5OjzXmPrzM-TD(H5J.Qj*P1UWJ>S%QϪe(?A_%J>k3Pϫ0J+`JP2;B>Η,{"|UJLd*T%To)=#|AuS?>%uzY]:Z%_; 1»ڤ.F(Yyg.xYڋA"~l0??U?Pr*u%WT%ةʶ+l Z"\&|UmթJfu_JQbV#B?߆S',iv2=->q\fZWev9T@u½XkIWR怍)M!dͪ*ʡ JFUŰ/|s!QJԧe,@+p/@V?+Я_>Dߵl%ʅh7썶{ŰA!9,rQV!0Zܣ\m  u= ؍0ƆmFhϕy<2uhCa0DrO@ԡ @|BP %PA9uUN LоkD\7(+2VJ$25&nYwZ?[)eM d"YI&,2ٳš¦tlɲ 6iІ+ǚMr\9F(" VC1R(#11,̻6DEG,sl N,L"kDO@ӜN@_' s"*G 2TTR~2X˄i712V %k1UP~ˇ|"M[kiܡ_[,M2)?^ Yxa>Fak9,Gy\x+!se"JʓMV{rX)| X!EZ!|!܀7V&Bf+<-@}<̙`-og߯{e{IxQ9{AXTa ^*AUFm= Y蓖2V.Tt'b/ }Ϸ~ʭNԥܼބ70v[6&<5x _%zԻC;:{: "('뱦c}rPzhCB{Yh۵ V $ ¸1k9 Fb^XE>އFSyR;rϻAvfGH%{T`|F99JʄRVŠYs' qM>#+$|3b_ N)7O[k͕kA>+BVj(KX)_c~ Z;5:Ӿe +%B*r9=G_GW9V/H%p}EЏ*ID]ߒ u B}Ra5"(y$$[ v} _/x9ʺ0- 0BVDǎy/\dn&o؜:ׂYdnq^d&3<,qjw˽$~P+yLd'Y&~P%Jd*K ILI2ELHC&2LL>"(ّLnܴ&UNW9v:cr?3r/1ً\YKl"Rt'41RĤ&&)1)IHL2'"4D&!4&0I;dH6La ^&;2oF\Cf&09/3 =rxP`!O|@C}IRիP*xwT#BU6 tPGETvy$~ap w&$BqÀIN'󝹳WO|ζof{ %R/!ֽ'l5gΐ[-Kx3>j Y|/Uk!~6X~/+lqhgq^YVߊQK$ZnfeB kX`ebޯڭ}Z鿑8[$q5yC߈[^V>_K"گQdnhQbxP0 q(fy<%^w.W ęC;R߹;zW/gXEkP\38?ch3DSJѦ?0鲲CVTf6%YE+)TMm뜕)ׯg>dD,<~}77yɣܫH};('/pfsB鲺E!qL?ԗN1Lnj5)K=~쐭=gL&&!+Xg#.杨nέBέ3sS+QY΍\Qz9t޸`\}SHqɸEiZ#q`~6h$Íڦ"X <V!9F&9W{\W"q m-*!J QDbQ2UmL6z ԣ{s%1,Lܻ^a=v=ƫkdixaQ(u#Rs^GJa_T-&9dlyV`c{܇sju1 ۽9w \<:y*hkփ8Ӝkp88F.}܇עQ5P |%/F Sq'Xn)EC/BRb榔0R֌ѥU 1q(ǙrBcl8yR8mgzux^䰩eΘN1^}mѫ0"9B+:&8bT*#[YL^UL>zƭ) ޚ_/8g}ຫ z`aY1xUBŀQ L |;s~ujb)s|;~N߿ɿ:jߥ z=Ao=(҃2>}(=:Jo;;DmۿQXBc]w>v˦1hbW=ڿ1!W]2^%.$Iu-Y{-4:sد%ko8@\Fv8#.$IH&-EI%L2co nW!ɵȿbLj=g{2V'c%ߗ@@Ε0<(?y]~qpghw=;G x#~yG>}y\H}L ŭYqRNэ8cQ|LfJ2NB"kBZ8#.b(H"L|M.q0q8erY%-3u4iD/\;*0غq8cF픣Z8P"(D#F&֟j~-L^P9Wa\5qL{@X^_ja\Ov"(#1F,雄db/8g>LKcli3114|ҘmvWjMO~sm.$IyA øj\37h|F_sb}N\[cGbhޏBApc.lYSƐ1H;e@ gJ"hOU{d׼Fs ueA|I֢Fը/5@9J r5JPB yXEd# \XF]̵wce1%X{ˌYaOl(9*!(DQR>@%}WK|$:LW}>re\YrE2K_y-8d]Ca~\T;L;4oJdO幢֢&{j.ejR,^+5t58Fcryx17%Ft7|5ק[mw5:zvws|}1f<m|KF2 &߯||K#_ry~oޡ7x[⏐o#a#gq0΁;1a#o92o8anwasy}89qvUV4 &WL]$9*V!N_fRsLpY[8kz"ۦW11 x@8FWSUYYtT3$&zOZG S?\FY L^Lo [1|BvTފ`t%0U1j;v3wm{WRX{޹9vsܹ ︃aW32<(SɃ`:;rn|?k>x;1;k玺?`A9+Gﱝ գԁ{?j7Iwѓr+UAbf+G[f[>VF+ڈ6YFe$IF&WOfjh>kF(4/O#skdYi` lZ=ke 봹Ǩ|jFQ*>QE2- Z)"F\H4LN4(UZZQk>Jg*M?%8J9x!ch#^ĴU;kj(N6b8&C<8V.$" G50Did=lh6ZV FnDLe39-䴥HҶ1m{<1[, QF$q"p+sɧ?(26[Z5B Չ\(bV糐cy=n,X*` i0VK,ͣesL9J0cgkzl0тV>06o<Vˍe6ƻ|2_c 崀<6-h5Nc#qMĶ-6߶KMӶ\<3/ hA36`=h4оXGC\RXl,|<GY@_@\@n5BG>;IrC @B $7{)4I6^K*VV{ ؀ii $!ꝻBݖɖ)K*VUX֨j֋br(& q6}'ukZJm>b\|zQ:uxyF`8  ȱ28׌fLV|5Va5֨뱁6PF"a&bRwcrh"61ƞiLl:XjV-hf[ a4Pg 󥉱jbܚlb f1c(KXVcZֱ^h5ĝc#׍ 9V:V >jR+ia?r<)/U ﵾ!yvH_/Пy8OsqPcŇbM Sp~RŇgJw;bY ?06e{R~װ M },3CBɡO3p6QUy>apaC,CC T5RUfJۢ ݑٖgxӖO1L|?I;>I<#`6~[x, M kQWƩFcpK"ƭu3i1h26qǷb(Dݭi|0*ndj.Q;p=sr5Ygi\y6j줋--lAhkжEbZ"vP۝l,C犭N'z hC)r}h3ryͳI䰿oEmh= |K6ӧ"llP:,r8bBft982j/rϞg>f/ͳgY;{.rfkl\"3q,\=5fϲkf5{6͞Igт3{,?[ϒEώEό3b,?ՙYflaf bśJt*zʟg虩 F9(ɞk%^)S${il#(z(/ 扂9!o>(QWAF ٳG3GQĜ%gY!F(љϗ_s@91q~y5s' ?3dEŞ h@OO0=әJ|91qv:Ӊ\N#7NFwk?DDt2e4N4>:v;Y[1>GZxd);1 V9"юN;:ΌZw6NG=v;r Ӷ%F+(wʏ3Gq))gj\s$]~m=W*[󯢯{Rv_l-Mn~G#R?D7r\^xrtCwzKޖ+ԕo1F^]RїުIaDQz׍/Wug|~?l﹎>׊A?zQ D8V8V^l=@1ceWg6u+nyfuyz'z75'^tnx)77F\ꎵLTĥ]eSD71Sy~ ,ʛ`.Sen\S;z'z/Kl_Q.}LN^o彷w\LƏCڃmmqq8,~@8x:avW]}h>7Ї>c< cLkkpxy?~ S_Uw<7A}FOR vys{>u1spB!J ]U!. <㢛POK/}z=B곹PwPMtg||=3'z70ckC}nrϳ>k9GuώrV؍a7Xu3ť<6~H]ǥcZ\g>>:p~D=vyA|߷L2.R7ƛhk* "e_|껀=׹}gog;IuXapY oe5|&je3B, ]vXܩFQb3ZXcN$ʜDwݴns7mL{'a3yn"n" Y@]qjіQjdX:};|<\51ELL^,g+"ϙa),Q fH;sD JU*WRvTu,&L6 t4԰gJjJUie(<)A1$;{DǓy`bƪ1nFe ;a.ry_yb8u{ x_"  oԈg9+s}u3cQj$ew*quz*(\%(VE(d;@SF`$7Fі1"_ +(Sq)F JQ1PxVr.w7c`Lcjj&lʙ#ẹnO5GUe(E QBU|7KF˨3sИ"6g~9g7z]qkqY[c[ \g#80m܇{xl^qxG8Ü9Osy@܁~?!5eu/І(Iw\g¼x8\#Vw0ϭ;)BYxLP$u[-SD;5HLŪĝ.JU*WDپFLujS ^A;hSuν]g-Z-}e;$ʻ+|UmT [T[E|Š30AWp=4αXB i⚠ɝc<$b>,sTU J&1P )+{7;QBcPTjB(p[T+瓱RDvkhikiZZZZ:QuW hTMӬZjU^cX)VVFf>yUWu eƪrcTjPh4V"Z鏧Iԫ:rԢըB%*D+cX-q08.FjE~xV`9*ĪNffh3K__}ӪVwOj3 mwܣwdo|srO82 e|)_I}ou<^0$^r7d;Ƿ#y½7ؼ~; p;985,3fbiLqq_VGM` '0ӉD8'1>>d5chLt531K5be)H4Ktx SOy[GuԷs՜UD9_Pb\! <1r)#G<5\Oq=p$Oqf?0V!_8@9EG qGREn@c!/rsxaϸ{rP#xT=WO{98|Os|}~AuHݏpG3_)|\T{7l"v%u١mjڥ [f]зMج6V6a;IZ6jVK56c6bx!٢ڢll0nvݵxfz/lm;mxzF4Ӻ.Džy.OYyr (^c#Uam_G(]{.8Ž@}@?ObM}ǏO<ݭwbݱcߩ#ne5|-ֽ3b/^}0=0ĺ祣{]"s9=.D#bǒ%GNGwĺſž%wwwwww$~J+MyJ=*)})=)ޓNľ$ľwľoľ_$>X  }?Gb#N wb{ N .=|#&^  ^>އ~K/ܙyW?ꎄӽPww N.0.*u7AGwwttA>Nu@bĺ{tJARJ)6û EZw D-%` ?73`+'$vt@Gwwww+[c{xB_*s+{&?X_k_^^[Q݃+ۿfhWدV_^H^BV۫{Z+˃/[JoYU*`u^r;rvl{uֱVWJkUj«c_n9&ωͣW?ϵV=+UΑV49 DV/'ߩh9Xlm^_oUN9~C=rdU"_\b@.8rxzxb8zp"+`EpJQ`o߂ѫ|+V+{JXx݊V+v +r핸µWo#WnնӬU ZQo5_E\9ѪgJMdl^$lYck6tvumb]_ؿafW+jWFWګf:\){:dQXj'[OkfZ#;kb;'Y5&/"vjWv~elCԊؖv`UJ:kkIkbuWͫ5r׷k[5Mc5oVWWZU?JIJSU__ػ;)WpUkϕNk=5Y;5:V{ k֭h^_:3[zR5"֢N֠N_w9MdibM+WګLy+Lu^U4z5i+IUGNz^9z,b^-ZJ^!Zi MdEh3BkBrv+B 3Xi<sU39E/ŗF}>`\iq[_ήLk88UL"k8;Uث=6^Z|Zj3XiҴWg2JV_"V[ګ,w_U^Zw鯷Xk*5ɭX#OejʶU ɿ[+!?zW8ګXɘX2Z>#>jxZLv Mwj%f-cB3,wll1.4G<5_!]-P -(XlYB=be3],,rGHw4<7>ҷT0b Q1H%jn?u6ݽEpo31KDn* X"K(X*n eD&mY56{P_,b?c! T:ҨØy9eQGQomϥݹ\M)c1s 8#E(1JPTrT zB=#&CO8I>'#<0BG e#}:Sa}><00·ÌaكOG9ɔL=7zxx8l N y(9y8цx;1hh5ci1vyixyR5񰱴7(O_JQ*_x\=u0Q'E.S)O9C08K^6PbH~C_SWWimT5>#0}N=ߑu[M "*CÅy6{d;)n5ST5MM\xfZf lPb1]bY ,el\2(?򩻀vЦWH[ i{ah0g.ҟ\^e;4L\ ͤ^O2UZjYbX$YZn ;a[5D2KnEXz֓ݪ2rU*."QV,-e\cJ-%bBQ DGE2d# ?je\`r#O*Z(Q(y\U2{zꭡ B> T>r B&2%XL"QŹeTr(1zJs"|lcmRVh-kjUήZk嚹kZkC+ъ4meU|GDE-R-}-5cTpk85·ΑZΛZΣZΩb e."0R^@iFh_Li;ϧi'~ѿ4F鷱1XX,d\a1cd,R-3R,ac1e(׳rXVcVUmj Q,_R2El,S9EQ Q>(QYʩǨ P)ZT+qZj bAT0F9cSJyesl7^kW#[F>fį:N XzA~/ylT^f7MxM}+ )],IbaX:C,}L,ǻdLd!;.ː\!_mT1JǺLSQ*WE|մRkZ+3Vb@ [d"S6JE}L"UH eIX*\q G,mxO9gXD(f{-g فE3v?J4N;JgH탤N#Ry?w;uQI{tAnA'vnۉtxt>o;LOH;JDO#S vo[dmPDv:VfʫeէS΢c=y3w9 9tdm'v'v sV z܌ϗLy}8Ȏχ#sp/MlevN{X oKu׺[jv6kcg9Ffvۙ䨜Hn#[;}Jhd6Hd$6\+-j6]W\R_J\4:,~ioGd~v~䜋rXxo +V꧟Aڙev$~'X%W{22&L2]~dvhAh vfYafX,023@?:"9_d+߳=?3 [jwA^w:Y].\.:r[mA>g;y7'm?lvZiZ$-Vvى٪IY)Y Ybk?jFX-5%_㎸ z6',1oqmmHߍ৖s/ezF9T^3R0 h?^Ch91 JFgswWŐkz=,Ya9񴽩hyK$VCy"hyrF6,5Rp5B?eq%&5$514;>4++B364#UI(GJQ"yEO6(#K)s SBZ@yICi"=4_,ๅX$\,e ,Vː\QO> P"|9*ٯS~=5RwKȌC«\ƅ"-T%qf_qu'H?nԣ.d|)B1JP*1[c?l`̍z=pXTVσgOJQb<˾9jy3_R3a"(@t'D_^;U⻈Qj{ԈsE }OScqQ1cw1u>S"r(/r3)?z2/z3?vdО ږALڛI۳Cx^W(y{z_#<-JhC*C91*ijxYX%mUv\^ i󜑧rgy~JEWϩg8!r3C*tsayz򇰚NTGR*;cc!u#v<6-Q*kTz ot?gl 0>Җwǻr^.]w9r帿KYDKDEԵ ^.lW{2ޣ)}x>m}@?8?Ӈ9q.Gg|K_ߡo_{/;=,Gm7=RcVşQE5s5I|N_;g W칕A|=9obϓt4G:س$=#c#f;`&#Hf-bX$oƚ8Rp/e86"39 {"yTkn"rŸ{5pys [,?=` 3c? px>~IDcy}tN-{ۙϬ|=:SO|D~X8uHڣSv;];[2u?G3F^v9{ZYw;~3WN{itl'/v6N?'vm'~`uJ鴟Ds4K#ܨ82)Sb?`; ~[m%v맺~'Vr'ARc*+W/aMH^xOǮW?s 2Պpf~>g~䞥f[|+Ȅ3H4O.O($Nǎ}NZ;1*kv#a`"٠ ڙ`y`~B9`tgg/:s>;;|/:Fꏜ4ONb~AڗhҗɞnǛx3<;K4gvѹ\d&gq~oA+oďNr#9;S8?}ĭ-^Zpk~fhAvVu&# ׊ί:KZ+Vr?1Jtb/LrBE$r3,?n 1Y3ij)fxfc˾02SGҩ36Ӟq]@8jJuͣ?x}ͣb.ex>F]jfi 1Ut B=.W]H[;;#||VqΥݞYya3a3EE1$?ܜ ,|r~%әvRg.2R/c(c9D Ơ3d ~ -(/eF%XEXta>\1fQLʟI=3oΠcAfо՘Egчgҿy4XhY-b1`ʠ=6fF5@,hg!"K *>dq K|^7 9;:6mb.1[(ߓ&;7a$c㌥N,g\Lg|D$un1&Ϲ<7'leeBasŸ24ȕ~wv]:od>絮{y.tua+ڰkWcVRF )PO]uԻkr-~d;ͮ עZVXXԷ [xnvnKQ~>(+3KWc3zߌ=ze+xN]\+N|NOy\YuY34LL;'خ3,[,)ǶY-mݞsqyuh:ֲF\p:OϪs,g,UjyVO3U>EϪsy8_}W//V%˗/*qXmYcY֩؂6l6lӲJnf&q

ù;;D[ [9ѶYĎgN9\u:_}.l} \@/Po`jS[f&cMΑoU;VZoV)V_, XkY֋o٨H+{g=^}Ⲱ}| tSCTT+,WR^n ;y~)o7瑩=nں;.6lEɶ`36a#6{]VQV\ya\n;z޸+*؉]؍=؋{p;_J\qA[BOP 2\*ЗO?}b께/|qlAo6ql\ΘTwf@OՋ 3Vѷ-j36a#6`=ZՔg|OOPU7uXM5X+.K껄z/=q(}I۰]a6ޱ[ #1V7&K9ƍ{#@]7P p}~@n7フq͜V1A!lg eaoP^ R~*2~éw8Ƕ9&6F{Vg&vҾ3@ Tj!m6U͌P^ Cg,VS:<1@Wp}Pq3z֩҆f>D΋ jeec.vZv؆X.ZxlS .cmƊ 'v3>3N~]g>81NYt9ߧs s,sLs|ssܧib%Z"ь&4R &3~Ϩ /ZeWGyhpfLʘIY({u̢;gӎٴg6mMg^{l6l6mEf1>839fҷ|O:}߃{*7=vegZ3,gX3*l?̞ě59ͱ+,k.ez܉=g%0cϐ3#?z3 G0^3ilE왊ƚ8Rl/n)咸s5`#zžgMĚ55\5=%t<9$3fـӜ 'ZI}WrtygrpޯL}PTAvWAQ>Jcvxku3<'YOo? Nc'r>lr f׉k(k?Nt::V6)YrIp2l'~l~$ I魟 ȮxɫF'^Q B[#sU;; R?3Q? 3 jeVG'fbɥX *I? uV;a|^+O 2Vv+*/ 2\ԙ?*>J_tי\/:KȎ#C+LOOtNz=?SSw{Az;]vQngvN7;s\d+w6;gkyZӸ 雝I[Oⷤ9Zdvfd% r0?[LZ?-ZoHS8cZ2ĒLKTe$eeeN2rU2"K12EIXeeIX1rI E%yI D.r I-~z21,J0ie@VL5CMgijX$Iq7mx2l,CEU"SQ"8b(-颜vf,3fgLgCB)y*md"#lM L52m}sDxd!ːñEQq,D*%"1qnx2"ةKRk*KeL&划\Q`LPKrXDBdsYtE:38Y56P:S:㬥-*hDի:Y唳j):jzkh{58Tslj8N5a Ǵ㼜ca8O9o4r>5XU*kDCf4F^3}6=ݖ]цhi-Mb;g߉%2Vw\d8GDRA{2Us(IÝhOArMƯWe/E~y3S<=gEsPӔ4e?EOQS{>}wq8cig8NYΥgsx/p~K%ۿ,Зk4cbuB,RdЎLE{ld,]Ts1~M}YTԻt泏1O?C[ѲJSXEj:ųԒT/2ECXVRjIͪEXj ۯ:1S@iFڴmh&g+}>iH,Tr}KǷz=RK3F,,P* 3ĺ0/i לFju=$iGX)Q.w9JUԆ̳BՉabe6m \lQըmvs=\_z/{5^rنhlfMȾ.;N;4۰m|ق؄؀XXUlb-Zγus8׋ꫧzPG[<[x/a+a;v`'va7`/a{E=cPX40.hbf0nnƲm4DYF#zvk^l6lUmlEm ch_-byVb6Vc ֪uX ب6a3lAJv1vPvMmj;v؅b'Iߍ٦2fm"ar}) akWc׷^x+wW{W4:): <6v:{eD8_{r>d]W8L|J}Z9Qg|V4:&4;XVakFlbj y]bN}ho7%ϨOOu+'տʌK'/8S}iC|rmM?<[9ѳ&zZ^[XѪZ(Y|ca|Z46ϙ_ |x&E,B0s`,?;P1`'K?H>#Fj$vB?J姇x?gHԽ *mN=Hd=HգxIzfNgF%OǣSi xd'~QQ'~Hcgʲ;ʱce:^v}:ul:v.mv?sF'rEDJNJ4:2Svsb~g{\92O2 3·ypmi1`;β Ưu:$"덕v_wcg[;Ȍg;>WHr#܎[?Z?[ciɅq W?wV?_}3*C t+o9.F\C,?;3:hf=LzrA4OBsx)gd'%W{ 32sXdUL2"2Lk02; r +l  y9`t?E~3ȼ/Vg|eQ^XY^%YyEr;,.~ggp-nߑwD-;qNۢ6+aӵZtm=e5*=K<985](!>znX-59K쿧Qnvf:|lKT.fgbYXd+:3*S}J4O+2S\-tNL0͊ߣK\.CNZnlLIW.T|w7kNhKiuq_s?rg9n7.q9nwn9xW~/vC{߅v?muO6OVZGB áC*~{1z-at3)gk+u?M[L:wVr8w;/*CBΫVzl6~{y}=rgJ~.XF{*iimK,[TR\n;v&W ^-&:cݛw4FxTOKV^ޯKԱxvmtWMhF VtkyԸEZ:g2]{o[B~/@>9Xl0(/3#C]JKiRڳwuXE Qv@92KPLU$ѪZh_ Qbe(G[T lY͖5eZ^֞2ZXU7I首J*-ZVZx>[FmUԸ(lԻڷSvjFۨӊcj1Pg3xlTz_5ww2$V0gJ2Vc n|NgzmAύr|X#ѱXo3bb^kh),OR^kku)>mZ|vG9~1˰)7u|#'}ewmk7.ǷiIWP~҇>m?s`qH, })SR(b_FeSF{e[FeeeevX ԣm@1׼V 8nc>#>C8S>|G^K{i}C/%W(XGz6Ve} 0 9^+VL}W2c| /j~XӖSz86qvr d|X#zm-aW:~D%"Z{x?W1V;2z0ZO^kI鳵[k>O~+VaBalVoƫbZO0BwXFWP6i+UB!:=TTT!p@-#)f ;vv|wwowzKV_}|m{޽}_OG>c8k׶Ogݽvcww ݡ=ceG؇{>vl8=qb_wp78;چf%wvˌsu3Sv/tv ý}ݝյ>kȬث}yig|^}^{<{;KeEvrurҾ[g{F'{f~}UTϡΰSK{hԷyx+wյuiyiUs잩W}R?}3V$wO >oOK gZu'o?o~?'q'ݸ߯DQ?  ?A~UCE=c꺣f ?+1ݘg"GL1&$c"0q";+OxJ"sTIUI;^Vc 6cܫFl`nu̹V9NJ%FN]\zOcdl6[X0~IBWIEF(X.^blؿjlEIӔdPFq2ūi69lk3/))+QkPZ7_ DWIY4~ߊSȵ(K82rPJ~U^B#sGDJ^d'~ߊoa%z>NI_ߤo7[-P|xx>\h](aLZ)N2N wYl6omD[?sl3WI uiRԿvv.E].s277 smN_DNk+|i_`;>gOcH|D6F6QT ڧ>9uigK|e|-|)ơyb'欄vwNj'z'`w0_WkX9׾ğ/\q.bΫV˜R4w?εr)vSC[{iw/}csh~B8N(U("j֊QBK+)TUq)% kA+ىBqGpp;RC[{hw7/铞}B5<є8@y u2Gp8 )VlU8rQ*3(6]$315q8qD1U+wP.oh^%2=n gulNMj&D23xwN|N{'nmJNIɔ֙v՗RK|Lz0܋sIͷZKJ]0Sl.%=M|I yc`f窩C 1LC,1Dvds<7p?CSӴqzF܉H܅k܇) ^aGs`1(2ЬG̝3?=׸cbfOC\cx~>Dc߸2{3܍00n {mF[h70(g`崙H܅e }u 21r1TCV& VҬ6/!E%9&ڱʱ2 ʦ~4F#2(p7Fd#G4Zc5gnq;ђrƤe#q&CC5s]%Z1VoKQ.Z0ZsqhFQƹ4v>*PɵSjx2>;1N.eޥ(9EcrQĸ3@DŽ:T..KqJ\TaTUFKegEK)L&tq&rDw*׏֓kHEcڗ~C11 `|SSCs(5Jb(x(Sg8F{#{^3!b+E1nӍQ8]9GEϜ#{6a>Lӟ05=)'D O}D L[k+{cgA뿻k~G[3k{ kz׿G2 ]3]׮*[鬬Wպ{uLg Nfڵ!d>8kbk럻7h͋޹k]jqΚVk sׯpʼFE:>TN?VuُbK5knjwj81JvU#QQQrzлF=QF5:F[656Fɡ v5޻[(yݯc|HMV5j7ޣ)]U uAJD](SzsbE PߏQjuVYUU"F[RU Se1JޮJrcK::}:j7Jmwo:"\ru*:TE1JvSTwu(Fjv([}/U=FɁOj[ר!Dy|U ?M(yވQVE Vc֪a%U,F;b5R=]n5?F{TW͈Q~5E=&(V(FQ%c=1J>9yBj#xy%'"~1JN&FJ\A]c.UU% T{5GQrjΝ4FɅ|8qlHDC)?FDBKTy(a*% ImZbE;oqX9~ CYX}?/Fɳsb<ψQ2Q'*|2٬9E|e+Uc,!,۞ =(yD;Q ~Uߩ/=zۡv2Ou^Nu˾j!s;33ve}&,l_9}Os| 8!_e LC/YWB,\ LTL瓑I?y@=OGh'ri7{)>ҟ\Kqy<}&0<5x'c bczFUJE?(?7HYa#ӌӓokY;d8ޚH=Zur,#a"~kpM\zr^ZG_ Qpsy7 ލI㽛y7;n:10c8iӆv90ѻSLB1yyLtL~lz9wyͧeb  BqnvD=֍b9 z~HMQY̥ 1~̣O\"0F}pN;io8po8 cN1Ø"9mƭ q]x|LfS2^#x=tG'QM@xq1O01PFKۮ1xLΔ?̇)yso\pΌSV*w9y9=WG=TRjJ֊& yJD^1&kG9c>sл$QwWrɬצRwQ'U}D?~5I ڟoj^MUp"JpU~Tpf_:j<z9n%B ޳H5yCߨ7{o_Σ"/,VjjRjj]zX3'+sjA^?a οN09'Ì߽|-sNDAwhcGyXhc/xfeFs V }bg9¨N翜&13+R(ҬO"]hd c40Vl% d JtE[3 Y8Wœ˵ /[/E x/wb:ҐYϑHA ͟RD8ĨBv(;*Bdvci=<#c b$AE.vqb ]osb.AN_#3z>Z'˓Iڋ=؍]yw'vkc;{cX1&>;E}"Xtp!YHgg|DW*JAD$x.֊@Dߵ^ṱE{]|b8ǼdivozX<6" Iq :cx8gPXDd@?rE"Ɗo|Vd6ięt <:>Y zqx$N'1C֤<=izCrhoLN,cqgu:>7Ή<1\7VX1c-"w5u Xc!>;_qkE ׹5_TgMT#?zTUXQQJ (R-@> 9F&9{E\#qx6/֕K[c O("nPRUm-VLVYPn]zro1xlZ9VX̽kkfuk[YM7lx}l˱r=kب^9ǿMm#F<5<>{Hgnfw|33lmVS8Izpo=#8Cu܏b~T*Te(E /R)n(q у8pF/8K̳#GG*%*Qjqyb>afՍcq:q~~w.FLb>bqR($W!y]Ǭn8,ZF^*ux\z4u2{2dn >g1HA sb/qݼwv@X\\{2Kk|^טUs}]2}fe|%C#\G~-U|O\ U:/zM*oB\ U&ު[lobWdȒ1_w]sxk1B_ur+o%\ Uc#j_i u1{dOXSZ_C 5N/z }2cTՂRB:"8U>M29bdR8NC'f a'N9!_UG:kOOE|($JEt?'xOS'Ovɺs񜠇NX9QAe3hi9z\:$#~ݧO?H*:Y7D~S`%DN۬IzG❀GX+b79\bNTv4nm؊He}Rbו7s373͌ɬ:(D"B1MT_Oԏ.aQt'p)&i&~/yzK^D$H&B|Wc1Qpv1?>"" qf}>C#NA]8DLuGnICWs!ފC,b(D"7㬯q6q:! io+yDe@?}N<}Q<pb\ 5xL9`N~_2/4+\VeE#C<}|H@"1ȑ0Td14ƛӘGIc^i1U\}HfMOWJo$LdZDcq}JOa|FψC,b(D"7묝q4ZWA2.YwMcF8s2"(DR[t׽Fs 5]U]_ѵX7Tu%*PR.2^|!9F2 ɱ|w.cc 5c/a1}Ld!8FryG Qdeo5V| nfvf;,ւkHFNN\m]nk^=kcO׻ =YEL#džYjׁ>/cY<7jx8DCq1\f_c\cW\e]U|_j|_k.<Ρ⌨\Žp%* ܏J KQB^/@>h!N6,g'|ԟqp i?(rK.Z<晏Qe(A)0Px dT2.yQ?*_97ʬRׯV%u:FubE/L~c\>Ǘ\np]썛&sɚ~gqS'V2Z7/5 9=x5~["-r"m&mqf\mm{6->[=-߁od7|}k#\G^*Č1j_l jUP RIT(êE#*$czَOz7F55FX[jjTwW#CVUFh,x*gQf<7:"6BoM?Z܇[)T%W`*"WW=N;v}?~h ~_9gxNCݞӺs5);}?Q>^\( N:>i{OOSu8>_'z:|l~9Ѧ3Eqf'js"ڝH(VD[1jo+Jkd.R+$>d+JNt kՌ5Vj]]i'+Uux:['ct% {<60u2Nɼ֢}cg'*61Zas쿢ժ\zyb 45\yV[ P,wY 'S:YNd>?W#ZfAJ6kg#^,f]NZ`3ɰYsEc=xgz>hm5ڱ89Әk#<7X io,hcnF+ZXUhB@z Ywc%+ÚgQxb6YĝEYr/yˣqOr1wbR,C (EQJT~5j+X4_G:Ցu_XzֱuQzײu1 =ReUBl`\ƹv2N\:Dq Q@r/!1&>EkЂVY\+urF9*xnTZU7E;siZנ Mh5~JuuUF9ʬR:ZJ?8h5a~VHF6\M]8V?f=Ԇv:G:y@g,1%֯QԣMs}ϱ~ϱYύFN:kt~1:Z~ZkZFt7uGu5g] CK) n$۲nqEe ۘL '4CB{ܙzeoϣ]msw90*U [P(a]xf}zRчspQ"*諂>}e_*xnTJ3n̯}P"@u6*Q />+`>F(B̿@~WZՙXqQhc0jdܨ癶} 6ssd\o S1 ϵf:G= Fq͢dyb6*p$T*B5E(T G#?P'32P U\#O,:kT-c.W+jᘵXǹzZE*Q~\]Ǻ.Xgc}:~[ֈ90 ,2,%j1цv>}zf,fnYŬbs(Em[Μj%Vj kE0JW~zzz:@X˵2p"r۷B-yӷ%K0BUb﵎[~?1g7Q=;} Or؎<_9&*iJ?[o n-c3<63k3\733k¾¾=Vr}7?ٕ03:1N0x 8\otG֪x1<-ГsN['8xEWJG0g7뻟=SCЯ/y<$P"y}P"Z51rQΘ {GOS1uzw_/s^n66mQl|W*qgR/.Py^y{w_+S_ |3|cSGk\>dO|}1c'~>_k|oy;|Fe>yg~HyS$fA RS&>cnƿBT2JYߨoENR`j"FA[̗GyaүK|>W3| ȫ~e{?yO?r ݱTT{9'$/IGB"TӇQBp8+O2bObPq@>dO0k{\.cxcюG#'kR**(S<6Wgd3&#F*sgB8&%_ {{Ǯ8 G++zǩ0qBlxT_j b1A(M&d0)~*qX-fx'1qLl8jiߘ.T&uXġ)_׉1'ҟ(u:u~/ se5Z+Fa}\O(#>;D?9=t*&x fcd>;ΌunQ UU/}F~6JpLY`*XJ1000YMA bZ0f_Eh@_1fު*VEKJ@iEHBbKԋުON/ՊR뛆S0YM8їeK(ч`#Xf$P,ߏ/g.gq󮡍 Ij2FMetoW`QjciǘDۓgdLREd*r=}iϨ^=s)b鬁1MLS5qcqVÄY9|H[7QMRƝ5tMe]Ccch(Qõpb8}g &Z;9fmýb^L]'̱exka\ۇxY >g|݇{ܹGVlf܅Mwv ⯜kB[7ӦqD?OFӍFr#crx}FӍ\6aĵkp3tFP21]|wbSl0!gkw(pdxχaq?_c#=clg8`3Rp'#od.(e-50YMA L4LW5Cͤ:qɸ]40Kmw6u}bÌ?ǏcϱϞczoK¼ֲl/]{uzu{{|u}uϵ'}=C3п9|+|o-'q/=̋y=!H4`>CI)Tvt ̤:n=}4wc0f3ٌk6809{

9ans8C {\;ƻ\wrmھ~{}ϬS1vg`&}їQO 40Fk#cnd ̡40zVz_pLq3utؗ\)dˈ=0k?ik"S:H,9:ƨюQj$~4_LUXriI4&UnV*Ѱ:ԭu@Êhg O[i+:jNӭތVm&Wlt+4L2Vd6_ٴV_ST[F+-meXQTPVMՒJ2TD* |!UъǰڱIckbfwkRhkZF~1Z\br[S웶>1Z$a bЯ9|e쿹iNtm5b+*h:LUqشҰiafiIa5 m-au|4_uX֤V*C[]\Y+ JhaX=H[5^ɤf%?V,m[X |j\ Ve\)V*Հ%3k%U5ழ~0 B[9h<0/T٪>VU{M+;K?d:˜zoe;[w]h}flsn\f.}[+wyP.MM\z8[ \׿VK*lq*2pJh\XH[~և5oջԺ5WI[smյi r"ulհkv-]͚WsklZ޻fgj>mWZI_іuJVlְ~v-TiAME֡3[w֜fd}LuZsiVE+ʳGsiR՜ҩ3K-skDD>,svKQy5_~.8<:Ʃ:2+ +w:,:ʩ|#dLElTr}[.C klSsN:'𤚥5JR;YcѪJ&[V-JnRreR&IGw$J唔IɭBG*ZVu8V lQSEVCDq1֨Щ1E"[Od눒ڡ亡T5CZ!F(]}PfB(DSN1 cHR5qS㓜8q(9PgHF{ps\5103Ngvb}a,8 fm3&059^+3u^5F5 s\50|TGu1.B:sl^F4unrtLi{ &v6T{)SYsq:vS#f}jԣA5bfc0Sik> Bj!_ bI9ЈԣNUic.TuO8\'f3Xcc&mԉk@fcYs9ߘG{hw.s<gO8 ιk8 >Gc\xO'Si8%Y8=\ ujaǙ G;i'O0qv8="Ngv!~,ؿ~Ͻ8xukI.E@u!.P<6N_㏌8Dž;A}'›)dGqu]5n":N.Tpq>m牫08~g\B\\0vY"R肮覺.a]R׌jU*i#-V!.3:bEkuUZ\HW*Y"pA-RŜkb0b _ {+K|US*h(?}FUTrG(c*U0~05~/111q0RUrUqF$hv}J\q.*UI{FPGT2nyբ駘鷸S `փEfݭkDi|V Up5BT8-UE|c,1󌉘ɘ5Uqι *UC8ϸDSժ*20%I1@%s}_80&ߥºq*U)05T]FTU*Q.```GCvpt!چyl A)ύ!+8g/e c9dVUX5jZ֫ L\縞Up_gU:ժD }R\rTuI*C5jVR,UQR\_{MgqqkϓϸdW9AEEE(e\FA) gƓʝ)k5xۛyOnZmmmnznͼfncރ{qs6xa/O^Kx ^U ,whxޥ~v{:11s6{xa!^kxeq/hy{N f0p%rEܬ \;@ 4Ӿ{U^oA-{vߢŕ2\Kx*UI{FWЏu^UeQɸ*aTx~^-oH}Z ϗ泬Hufa&3a.S-m2QFEg;1D7w |a+l>O~LY:' KNi3{;<>;=mfldŒ]fl.Uv̹Y0#g2}jKh<]rn.]^<\[{Kw*Ͷ Y5IYdli͘ʖdlFflfY٭3VrfܬVY3"Y>Ww棞trPn)33F6_dC6悢y0|'  0fr ΅ ɰd>e|JG7Ll$ud`H)rݓrI ps6'ps9c7` nN^:&yN^u^(aٵTCۥ<6sZ4r[9մy0w`5:/e(G7VTzcD7a~P\ ~zoa 1ox QB^O#bͮ5,ˢ,bY'qe1lƙ͘sK;cio펣3xNi2q5s3CԵaj83F8Fr1J3}*DBbN|0h7SCյj/-_~B}aWD9"ߛf\#ySuFFW1'E7 1bZ%Xa9VJ]X7Vu[/z,dszmZFXFR,b,R y}/3Osz,:k˰++J %Q$֋b z*Q}U)Ǖr!c_*>WXe|K/58ClQ+W|6%aϰ-|e(Oc+[fQ݅MN|nm-o_8FQ@7FHFƽk벑kkw\ a܄7[qnp9~ rVڹm~6CSJW22Uθ JCT0V&]omM_"շof]|;E.}ҿ6u+*fПPM-6F~S\E}rģ"[<;PO8xO2'xc{cIKTcPb fΙ^Yb/qsxeTW'WT^%6^ݗvܯh[y7Wk/E>ǿg|6|O1?‡r{ߣ~w0tku`Zǵyk>Ȣ,͢,Ƒx[c_rW󿦝oho[CSW22UΘ JLT0V/86}+鯈E<7 P />gƿE.}ҿ|>y HB_oU[e{mDr"GHd d;~9g'~$D0V+ U*V`=rwޙRwJ+3kegۜN=;ޝgvgy;nNawIg'68rߝ^g}uGR! ]{);d{g|7w׽w&Ŧ{u\s"w]jx3w S܍w+܁wgӽL۴wѻ̅).ݻʬ.r~ -wѻĒȝayp7 ڻ@?/zܝ^~{t-KuV^-zޣ2{/e>ojrVܥERݙ5#+lr'YU{{mw{oe臨7gr DG}z4wE;;tw?w{'{示)Myq]GE?/&IuI;w,MTҏ"iU}?s/bA:}Ds!]I̽)cϷ=ߪz owԻjG.=gn]>=UV9E0￘O>c;.aoM,|5' k}$T.rT#KNwoԛxY$Z|s1}!g_\cw}qoߪ*:'=}X9u|:+QKp" aorǭZwZ<7L۶3Bycֹ/^`_cu[ryPh(F*T (E8}{/E>kۃ6ow`6kbJ֕މwxuX+1[W7qT몈JUQE6nٌQʓK{ ׌S8aTOC盯m]Y }waFg;|u.Du.FGՉBFWMt_,5zNotwp!.:N|q1.Rp!.8sp6YhOƙcA߾rc򕪾|FĮiUYEUS)* `3& AoB1P <˥\ȥa9=kupr\_#^go )D}P(2sQcTfWG鯚~?Y& D T$1U"Q|[Q%2 1YWHPy}Eѯ7zbUqF(`>V> U*nЗ.S# `UjuCk>]10IcJPb aT6=s0~~2{cE~58igXL{˱2]**%ż׍EXH? |\lB#8uo̤;>j髖>kC-P˚ֲq-]551frOuz41y<,E"q2GX}>Uy/p!#(uja<&pDL_)=j跆qLeLSTs:M m}>i˚@x5cchFX};br?OKvsyas_`w=/^p޾b'FcqjS99`gDq{qjFQPomǍ#P01±8pʜ2Ie'Ӈ;5~8|0Z1r5vFQ7gZo 8ǩc+Qb$sF1gk:QbmO 7~'D21Mdl$;kk')Q:XSYcj?sNիok=+pri̡ok>qWX hG#p8Ѿq(}0_= uj&fڌ?[~kG[,1*jxl4aK?'s9/>JQrTRUZcR1B\R['.c]MIG?1Pxjժd4Q1%\Jz *>Fרgqnhk~$5ODoG/$Y|D;h{U(*UU`#Ɖ~bj#EA#WR$D?'0x%gXᬿ^5h@qMa-U9R^ʘQc sl>ϤwL1I跜,>۬in9+EV99ܒlr5*lsMsιN/'qӏl!i6[7n-tgn3MݕVgz3+]nӍqmɏrb&qw7ۛ nc-t10V*>ncn\<]Lm<9=3e;>D{?<򝾗kviUNƺm;oNk1DzݸWG6Fƥ6ܧr+sh4ڍBW:0FsYFEӏx/Ĕ'qf{F3MmytTazT=֦خtp<٦[6Ut*Ke"O<&HNxM}w1(fLŌc{y[O?&^%qGE|8rYb;~! EyGU9+IW9^Wo8.rӇuk:^ ^$%XBo9_4:!cyn癶mC?yާ"57>_K|Vߨowo}bm]yGQP~oH "kE^+Ǘ gM|ѦHP-_~<?wLǏV'QQ*T9TFdF]͸<e<"*<ݚ ̾(>mw(Cwc1#Y#Dw:5=`ub5K%I{מG۾(AoB1/Bos~ҞC9Mp0~#Dsg^FL}[/JQ&eN28@ǡB&Lo1_"U0˧-!`uTE>>"B7Z^Q|߈\-ǹNvN^!Q>;~89'o G*b>F0ssoy,nkĻbmawKmcwS9,4޻Mf151 1sa,mhI#o8ޝwo961Jʹ҆o,mx5i{&c j003PqChw}.K3^}d~{\ƺY #0e^rD'1wxu7^szKEsxglobx55^9f:fpUx5 L9w^T/ ^k\{`Jդ^+'e{B`"s&dLaM&cxs}ųbxN=6^P/%2*^S'L2{+0!bbm:ԣA5bccxGe\lmRәu&j-P˚Բ6/G]71Kh zQ^VWhozG`T3TQKNڿPLPGc^w}g}b'}kdž>u|1ǻ>"&Uj2ssy:-vN+~f|EX{H<G+ZQm. H,Ojcjig6 q߾÷׌o؏_f}%L@-cFMd7&a"m7'[^ڎeLcDКA[1cnXYY9yW P5~vq.?B۶KEVo7k~0Zu-|/0 답mVhڨmďD=꘏13P阆S0IH;6m'֪kWύk|'&a22FM}a(QϽTjj8nƵ?T8@>7<㗴'mI{zy~~~~n{n{f{f{V{d]hw폥7~1e\cX91cs$IGQs:ӫokf2:UxT#ǜWA`xCN9ub/z5YʼCq0s6Ryn}>ļb/Z9y~8[Iߨ_;Ns Y8ѨT=0cc XfLQzGC )&^-\HfI!לlx-)sf* DYS$vY\)wfvs?u2aFmĿ%r'F裑b{s{u7$~p$vna̼%_)N:QhANݍG#"}qx>9cu'>"zFݨ>b~ky:}Ib6ZFmHTڍHGQHĹ։.qsQ0Z<ى_u#Q梻h}9}݉mrTv}Yĵщ̯lWGAZcuN4C_@m3}qis|ٴQLL 6"F!ݨcmliL?ڇdN1/ژb,Glm0qw-|,vYoA糱=k&cxa.W!WX?s#|6yT^Hs"wGFz̺Gx]c;ls۱Rm9qS֢W7{ǚF&#575EK? Nrbf6Vsa?$ĶNj&F(U S=)b?7؛oLتxmضx]xc?cW_0~]F܄[y~'8AyOq<<zǕp|o+")"-SBU۟1Ɍg62KL7reo.]wG\屬x^|5sk._ u,_?{{|c :owŸp!.:6Ϧ?чo],=3}|%V`9a)`1a!p|\ڙٴ=KoFnS=ccu1;: slՓh+[bmfcke<^q<?3_kjԣNdYմYP zוXXXzltiԪcDύzF#m17c-`5Va%V`9ahd}Ygu7BT3PEX%vk裆|+d,x1q!-v"Z,b]i>Go3]1U gr X\XU4s`)cVbVc ֪uğiw? # sZF[]%l3uc25X7TjZXӦ8ڷ iX<7֩olG+5z*iy9Xyb^*_핼B-ں_,?@A}d0XX: :1]~[mU[=u6N߁q_q B7{3XnbLf}nk8w-֩il}:>}wѾ[xnlUws6^C{o VcVbcKnxºqڤ;gF;X=c-"OYOYg2, ZZO>a[Ƈimd ߷Cld~wMaV*uj=o÷C\8|_b7֋iϷkjJr K[ў\ }vw;g͹[[aZ!t?ڊ/Y/3߈EXV,߱\ߋy"*9⪕jjhVc; 8g!񺵐s?IcƾP-bξy~<1Ɖq 8^g4z6$_"HºX7fq DYYQUQu6j#;fV*v+f[NZnDՍQT7z.hh4z nst#a2RIt#6qt#n1*h"5 aF_4gzɑNn](]rt΍̹h4΍ą0.VӸ[kscln\-Sk.>4Ri̍Xq17L#g6bFl1F(XsWWYOY4ƼvqTXꈘHExsF薍ljuf1T7,7:eWĭ2YejUj5j>F]d(rVaj瑪~Y*VvJ i&*7>ƥl<ƢlƟq0ƛXSg1&SrIn,ɍٸ3|Eʊk>ʴItɍ,٨R4y$iIRFlF(!jŇxٸO4wb;n',s4c4q#4LrT&9c#16F^RG]2{G,1ʟ4uw"-neVYYTFThJ(Jʂȉ5q%6Jr|3ёtUkn}SަVr"GlSpuOݯ!uDZMT[i?ds_{J(w3Nc4aƽ>uz8W\2V}P"Y߇Yg!xPя~ܧU|뻛} T"U^2F۟f}f<''gr lň/Wԫ"{MJ8^v$$sH^ 39msYxWEzSyd<׌ۓzwv;v*oEuDyw@'Ĺy ܧJ&OSJ?c~'ulMg-^ϥsbq1E!~:p1 w>O3=YF PhmW9W:d},cEOkSn|Grz^;mhW*(uCA6S@wՍs.YtgeO**O; DG*MHt9ޢYwܝ`=O+` ܍lQ*O@%8ޗ@v_kVz^F!UzV х6}S**㌞A{=h=w?+@՟}c\`meRu jTJέP+B$TwYPdO*ªvS8.eq15=n s=+\].U~]UΚtS]UQNU3.2\AS*9:I7]@.$PTFf{!9ǮTWr\KE.kQ TS(H8 Eu>BKeru2Pܬs @Tʑ5+pwi骖mcfh@#!ƬM4y"Dgթjjt5-Ѕ[]E覺F$:>V'yj{٘j1CDGjTDG11uMEu覺EQDlWc1;ЋZ^fNX=L@e|"&5IS(H8 SE昮j 5SթzQ(DB4G>ka\#kg^zr!*Xrb+++űUX5X֩jCc:u$(n`F'T6r1(@v QDEW^z3ތ7s* 3s27k~r!_p@!mVX`Z֋Bd$Q|k!9Fzs ]9"֋љ|kjJtao,끞;K+?aݬUmam. w;p;nSr_ű[D|GE:rh˕M?DqNId=SOד6fuOuz[wMNu6Cݘѝu馺.9p+e6q1}6YmVuڦc:]bTwC> @*RŎ^Ž^bq0l wnj؂͸Kmb<ƝꎈyIn)D$*НjKmV[@!mPsUU9>~;zsl3l `(( ;.t} `~:CXx*:sH1]6-׻*FM1uGpv톝^XL:! [n͚CQIdd d _K.|5.{͏xtR]=ݎͮ~6{j~VNu21v10ݫZ[lZYlYXW]YVT9GO{R+YIbjTluҕO .GEDeA PþÞc;7ki7Ia[ɿu]SXQXOXMt1[ITɔ[?XkQΚ;::mVN9mY|sV=GyƹeZϪ>,̬/6EW-cV-khh3kκְG4?ϛwf\ٍՄV&9׃o/{Ŗ+-`x+49W8_;Loz90A5F޴Q;䘹SN8L%=ra^9cy0f1Rs,%)ce209 f8LɜyF:L>/daEf^%ɗ%0[PxK{Snv|K6xo-I0l>&?60Y/|(33 ~"Wz Z`!3hM15}韙G %XRhxYpG0L cqVxc9%t Ё0^s66q xi^q7`Uvh:b 3/3+*?deoYe$SymY?woӔm٣~vNOu)moƼmַJGY ;-~&:)=aM˚n}k[t;ʊ=N3|oک;ټb>zӯ-FO)j/xri~ k.zz+ZoͰ*]5cٌ<^|.h(&N8w~Ho y'ղWKVWux?KV7+Ն߱#} _(KA?UaTxt6S%EajQO*3lRռE+}56qBmzWD# Hv<%!-,rx ƯhK~Nܟg"HBp{xk{ioY s 9`E8|h9G8lͲc'w )N}OqN4O[1V+yZJV=me4s:)b'XSqLf#8k#"y{eYfo尷.ŏ]2*{q}q3`qKDt2/G-q^Ç$6 I\#&\g_ipWpqI<ͼxD# ɴR%6f\Gk7DI GMDC< M(#"w\N품F b7[}7k&[baV-jWjT'j9PbȧMrCߵXCXE,d"+ȝ=9 dp?2y%UV#k语Er!PBemcq7k3dB]vky"g*#XidZk۬.c彀L ]b%e2V+rg>9gJټju9LOD5F߾w CT]Dwߍž.<%\g69ڶ5˾|99w95}x*UQ V;*CwŒ8F2\2X+wUsjdU G^]*GAw_{<^wj'3B_r *ѫw5\ V HGcW chu1ze1ɬ[Wkz_GuVbjjz`Zq%*ЪwB A(}dF')m׉~?qЇȳB>y>rwHOE>zVR:I=?_{2G>?~v'6 D=x.NJ/:o ;[ԏхNMOß'ׂ]*Vb8x s٫|.|@_=%Έ5b0E15׈W Du0 XIq@$3f>xwHP.qJDZpLEc*Y>UᘡN:FzJYy}Dv1C]&b^!r\UsHD!1E<ӼhXH"om8:jpgq 'w8ڧ=N;Ncc9ƘшA,!ExOL9o;a^F=FHd=>פ+adg%UXMlZ yX"ڔзĬ!_-^`?k{EkXn,sI겔֠Y!D}liG\PyFAL-5?+|BO *kB^gsmBz _ z}|_KZ/}mt6:q˸u\3 q.(B!ϣ#5jگBx:ցq .tӮ%]<}|G\P 1kCΜ9n..ubClGdnZt1O6s:[ܸi0:h]m!V0=?tӗ:XׯXﯸ =8cRD&2}H#_*^Bż6KJ4,'g_!2!c{rr=2k+/?}O箓t?UOг!gnY}ƾ:W?~<]/uv/rt#{ٞ٢h49 )Z(#ڈXkċg$$/I44d\$6gO3 Ϊcu̧1 !jYlt̴jj.J(7ʌRb("VHNG(`LqkÇQȚ8%b;EQr1kI%I~G+ w/G1c*flX QF$mQ*2ܥ¨tϠHhp}b\x j# \s-EԱZ>rl26 F#fc }BKI6h$Xvƒ8"ƈF"A?mfS%&4 r_7EVYYqMj^Pi/rYL;mR#i2,7駭UvI.Gk騵v: 4>Z3L*uϋm5זiH5K\60y @+܄h@#L[mX8ŌS[b,5Rf,-ۑNG3sk2р؄G6zuזq 4#Xj,bc뙃V˼6uFDBMlgk 1-y֒3-uE(F JQrU~UЪWMא|55_ Xz:L-Fh\w(F QuG\boha[Ќ&֣m>b3Ј&kBLi(2Qb(VA :c6c6zQj#{TH&vqNSݸp?="{AQ kCKu%k ~>q߻wvu*zNm7õ!3WGvvָ~6ύD1>QD=}p8|6rld!gtqJ<}q/Qwԝ\g!h gd" D_kB.yMwӎhKE"m~3YI'lj҈cD#U*D:Rtseu@wdQ(QW'FqR=N< WáCp:ӼB5RFcaDMT+CL&GdoJST3ӼtRE[OL Q)N:4*"X:&юp0}?1)w@|';N#Ncibc81d12}'ĄZ77O[11FG#1>1\3h%so|۸؊-beèo߈ j=Skg!2VSo,a<}`LD5 )\3tTkI,4oQmfUZ[MTnvb o}U{>|~~10N2/>%b|oO|=~?'YB /4<#BHboƘPXxL#I) .4+13c"neOG|x~|+|Ͽb.mKs٨_YL̠*1]ؾ|{y>b2`302fR,TQvuM]fSm6uM]gS}6mM[hSmE;g_ q=ǣ<̣<70/~aaO#s3FQasNScSb~JO(1ُ{䷡y߆CqWGHu!t:F cl 1'}#(5cXxq,}iCC UPnu.SY#/(q4c$6;z `?\Tט.T5%tp"&G<>N$DU/Ǒ(4011ZR#őbq}3aP?%gLV2ni^$46fQ5f, ;ٞn޲;N7fsIN?[36St34egt1t/e^f]ٖAe7'2Ȥll͠͞ &sc2%3$mf͈t!eBfA ijf>6n6nctqtmNcl.ctczL?g16_*Eh\D&gy{VY6;f&Yوg" Dyf4?˰֎ֶN(060 ݜ¢H?hsL4g0^mט,C7fYل{$Ldك6sf k`í#8\%O06/0^>[`C95X-h3mh3mV3ӣ2mg3l֟k(/[_bQeKK Ahm`f%/#f,=f56#^xAz,&/ȿɷv9uA.?ܹ͙ Ε#rblN\l.\ZVt9on#ߙ?ǭ[ܶbr|1ylkr5WQk\~Zi[vZbQKRS.{ylj{SsbslG\C57[-TYjnvZlVZlFXEv@TYtY_5Gb6Gl|0pWb/nuuBLV B'+ȬJḁ̈yTɝ9SѹRnTtTCQrlT}OyOAkKyKP+#L'7l 2,ё%f+-Si/6R=WRH)TYJLT_FRd"YHGA֑4F6,JGI⹹H6AyGA[49Err!;PPb {J$^ސ3 \9BnnPh>-'9>Nx/=tfl:;n';':+Ʃ/'5'Uؾdo?f4ufܬw2mlM5eָY53jl6ͤY42hf4<>(Q+Y3͌7[濑)/K&QF^M954ril͟I4wf_f;/kf̸22Adf˄q3`lKc2][L c%6K%^g87*c|Aisvgrٲ]wF8=Kq<]|kh)¹HΆ)]Ghwhgwnx燯 y87< 1#1JVcX8Ƌ#& FL.rP-U+Վ2hꢈ1(##0\ S7pu=}-7%Z5mczÕ^1<#SLYRUjbc1JMju|1s1kg z&fkh5;ͻJLeOeOeOaOaO.h֪Zr] u.$q2*w q.K=|U`.a>nz&bLޭj\hu W_5wF9(7s0Ufb*ǘiuF'tD?_u).ĹB]I\*U)j+~WQWJn\A[q.%mКBK72V|ʘGs5Uj ]FKBkm{_kg6nXn>q:?|yBqX%A,UՎ] Vëko-a=6`ڄp^0E\hvgR-U uQ :..;֩jZͽ*Zn%ZhG- RqxбD-V #.d|]1V GKJFeQ~ 3SxZ=U9^qx1Dž%qjZvaF+tPEyرliS'j=Fl_ hVh60}ؿwx-w ~G^&kRW \ ¯s8sqW8zUq#hۿ:> ;las/ hO+՚6mhw1p( _J\q}f\p5A[~с{:w"Vgbv&vQסz=@k _{^'T[\#Ro(J}P!am1ӮAqm?/æ.}З .'qWqH}h/Ӗ~/p-z}e(>8F1q}ոJ]+D1]}ƥѾrTJa*a:*13,Ta6EˋY5Qסz|ǜ22|i e \LCP7zC? M1 1vG?/w$ }O'18T5UgYcT>M;{:\=U9P}F qbfjz&sQA_+GOu?ѹe#Ƿz0'>?ywW}؄ͨQj [VM=ka# (g(gg;D9ܞԡ':^K}׆W Ӟ!|,{bbڊmĶ<_N=|*ybȍ*rGQ EYcw|v+we18[D y1Y gO'q] d-o PчOZs=ɼr<-8u<^d.ve eP(^XV/17 x^=74)5vRUH<) S=gE>u=ԋxIV/x(?P( Tr}0P r xyh28¾|סE}/E@Wϩg3QЧ=EcxZ x&bSϫԋ\gM~q^@凛)W57~߆ {!(B1*A),C9zZ\zg>ԣ@D ~#_s+~fZO|QJoD55~h s#<6LKFc3`.,ujgKdY QdRKEbC/y6L\ GB'e-rl~gy 69 id* YNVf64hlAbnvAtf(&A)n@l@l7S !ڿ6 r b s b{nh(/ VV 6=NSǞ'~9>'$>8}=ySv{nOԣOݓsļu'M<מ3sbm9g9maٺg=g֞Wu_]MS5p>gO\7xjOY'`_dGb3׺ڙ{{guU{iɪ=Q'՞'Ωhhs Zr4Ӟb \&[Þ]ڳJ{>Ggcc;aY`õBj}l@{hO)=݋=ճx]pJ{2W\5,5|qYΞ?qxJR?rB̹'ruO:kΞ;u Nܓl$QN{fO׶:'j)=A NbOꞘiY-PZt:ٚ=Wgi{~ٳ-XCb Y{"fObObOWӮ WpeOg8u*Us0'K'J)(ȞD'DtȞ ŞS=)KTgPǞؘqI|4hŞĞ<u9Ş)J&{r{ZbOHiHpQViGsh {bV=( EbO4l"޹LƟE;o!/g YBF™2 yCy6 B8D=M(sѽ#4Yл>+zVԧA7u p(b#:8n-c7]U)7Lt.S'jEOtUU#{c a03Cq=n`܆a8Ftь1FdF<\19|U (cx]%bTTT#e7 7z 50П~KL(fnE7'S=}b_g(L)Ǹr1e٨R31i\kL)ę,BQAY9OޓI$ƨq`+Ɍ1y01bLgUbfb0s0n>n&L{3P]@uF*z OLh16W*3,Tَ9j.XDOl_J*Cs&NcH,_fjZcH]FʠL'k`>-R=K )toDwq~jcZ"`,t{3{A)xkO(}ʍC@x?L;GhzԭWIXOBU@|yFd εFxvO1OOޞݧ')>O1OOvTSl'xO5ֺO 5uϫ9gxϧ곩\y&~ϜϚ3}t%3dmUOOOrDYi2#SdõDjstgY>gB,h<.y᚞.5=8 .xz p鋥k93,>eg*觰觯ا]1O[OZSV՘eRc<_>WQ>/$\fgt9盆<ݿݤLtIWMuWI*)HE#XF&(/G6uʦ~5^=|{'gpb~>icdn#5CE|x?3"_Ư׷"U|G}ɡ$~'EyMdN9"?:~"2T2e\p_5i%ԤiPsa>7ʑF|hlKqEjOMSB|p0Q:SG$pI K*NF1ef#sblQwP12ҙE" # hO*kY~kWn]]]&wuW)QR +զ]e+UrrVuW d~ a우`å.RSY ߾ L|^͋Y]+ڱk=Ƌsu빺븺kĞ[U]UYj̮‚W*+XUe9+DO75+mj!S=jzB=):r<ݬS3xYGsꮒT2RʵiHGqLbgQVegQlMs6u m=|{,dpo1'ԓK%Uꮺq5 Er<љzU;E4T~7mMT*%"7o;Rod>OwI1^kuS?W{__Qv*cCa>7ʑF|SϹsJA_g[|G95k#5Hs;2TR7LG0c;{E:}edLdяȁƟyq菴ߩqVu%bB 5L$љ2:"z|n:(}(T+~m7Fj׎Vc08L$$T`2us07weJH}ׇ^#xn3' ޢo51g%3^WWō<^j7?{ /clq4ab.Q۪Ro&N5jZcL HoaP~~:XLWAd)h9q,Ǚ/3+܈5UjƇNcN97`,u31KU9fqfΪ1L5v}y<{/Bޟ/o."V ҂yۂ9ނނ1MF&qDLx'zhb0R|Np_όg1F{d%$N+"nkhMY)5巡mOֆ:uֆfη[ӿiG+ӊ9В9 =s[L?$MNN:iy9aT=E{r~Zlx+Td %8;g&bH:IcOG쩈= ' o:I=ݰ'ѧ)Ev';ؗ( d$ ;˨=>Hs"28pwAݳ4H99sB v'hh/'g}`OG8v<#oLۇyuw];G:;vǼny;=rwogv`;rNgw5s;_K^ZwǽؙΞV>VbϞɪ ;W~wy"==Ӽ{Õ*l ^ (|i2Zk6Or߳"qveo+zK_2NY$^qK9yWJ})>󨗩_}ͽ̋}k(\=I.65JoHEJVV6zȱ]PGS=DrqK =)ґ!bEI_6r*(zE2.VKcģSWjڮrl>k(["J`syG*":PGSSo*=d# z#id GÌ67×A2U#olss̕DJ /$J=WkuH4xU=1^i8v2K/KeeڜxF_髓ϸ# Ň")z6wG6mux7*>hE|ؼy'qC|&¸@8]}w}g QMwwA;Gww `b )0{Ga=}Q{Dƽ7y?D'u_޾_q^կJ`:3Wbvyc_k}΂ט}}Uzp~- { 5Sv;yi^:*?2G}R/-\⥆p! p>p{8^p24k8HBwt]Б:=b^( ʻr/KxB2.2:#ltUjmU;G]IHA:droz(Tr\ʿkFE(Q(Ue\~6e҈İ:;ZQNT:;ꦺ\iw} cތp21yf c|n!A~˵}Dכ8Dwe\GYʿ|d$;ߛE=RN[k+n -jKRvԹuoH:3킮莤z$G)HUi%]eP'#zY7`5D ȤξDJ 2FFg誺hvCE|HN,ȿUuKxx&^+R! d5EMU0]U:fof|osP*Ge#K> gTb:MTLdTIj"O^c<7Ǹc2W2o222҇\U'11ϘLD1 ocj30YĨ"^ߛ+Л-(&o&T1dT`&bdNvȗϗ$$#E"8颂~eRo 6cJoP3ϗN[4*ʪ*ʯbY,י:;Po`z_'at=r&RD5O~G/wmJ:mȕ}n>/"]O2BZczP-UDXQMYeYD }%X.B< >u/ﺇ1 tw.ΎNўخv~6бH-VKԃjZӨV+(۵:Nbm[)b׸rZEjz #m)Fztえ 1~P-2H+EX%R*͑2TfJ^ lb[9[.rozKb,B>>QϏǼ?ݟOiߧ~ʜ)sS̡ͧOS0>a.so;Uju< ʻQ]/ˉsgXs/( %u}IK m}|F>e\>e\>0ojP]d-rwDe<' ސ ?vD{:wӭIJC]whbwa};/vi vYgDt},Q6bwS.{Rw)ێ I|'zv:m#/;h3c?wwFF`/a}Y$4v,%J{ GA=~ه;¿΃}& dc#f⃡l|;d2<7y;&xM/C%7ي-l&lz竰+Pͽ˱Xb QB{S^܇,ϳ.S,ܛA Rb,rU^UX5XuX-x;e>F݁y^A냾bPP\O{}D@{}KL\OP=vCh`VSj갆^GZm d o#7zi `FD_/Zw^uq'Jv}T_S#VP@Q-E,w,R 38X$g?}P"V6zJJxԪ-L^ ^F%s{FLLF&a"&`<׌X3g41QEY(s$c;qxd G[khhr47c黱8&`"&1S1 ӹ3ϘIYěEYį*ʫb^TQ~6bD=6FR'c M͓Tb L'N6ckXjNiӘJ)j2*$LTxM*1r|kγ3~7911YTނe-VnS;ԝKG,uG@B~{a1A,2b"bRTcJ*v3`cZceŪKcZÈZn3FKykhjmzOw-w1$oeChy-l}^S;P*󹱆}]tTX5XUMWbwLjئ˽.7]ꝀqN)8tgp=g,Mܳ6CyP9Ma6a3jT-ng6ݪ{eQt4u*NQ'$xǽCE-flclMj3jeBVSԩ8MuƟ88ʹmڈ XuX5XuJ7VϨ&TNIDusq|:isfŞK;..vTTk;.z(2QRu(.VmTkZXO}Sb8qXq.XV:VDc8?b ƅ-TKG+Zuby/B\I[|Zq )3FVTKB]emvcU=VG\G RRцqX]Ker^\A\QmWͪ- ^mỌ8Ru }Ū ZVhrq'q}[F^}NFncuutqtVCC3VԪlFwXBʸKQf8jB]ӥ]w{Ychr=B>|U뷐sX(C9zZ\^͵}r/?P@۾5QjwJ]uXKq~ p3no|5q191[UZ-fejzP-QEUEj!q?e;a7{w nmwNuqV߷лWG=N%~|?7xX,wE绝xm71_,bl,q<:ẸϭՔQMyՔWPi%u[I=WRg]ݸWN0`^6ԊƽF|(w73Rw^ [7&܈\?O)èLcuՈo&uI}i/j#qjE jL&blnV* Tsr[y/%z/ދŌbi 㶄q\¸>x?/2rQYXXXuĨ!^ qk_K9W˜mFzlFM g[o5֨ub l ؾbu(`ZVrXF5)˷*R+hvj6H~;sb;c;2X*czB=xJ,≈j <1"(+kZcZKsvsis\mfeQj#^kfI76ww#G|CEx275e}/ |5mއ8xQ{.mx޻ߥ_ߥߣc çc >g_K|k>[b|G񿧜){{ʯب6Qͨ&굅z[s|t|%Pı!o~#`Z%]?hm6T_sT}"Vc%2VՔm:4=/IQ{M2T,hh7b@ ѴϵJfkZNmv'W6vy=xjۯCͶk+u0 [Bh@B[ DI";&5CT@GB V"BCAɄo7gfgFQ&g'؉>e^_l2lȼYg-JTY\I$[ȬʺkrYcA@Wu+~%d?쭒=V=};D@潬A(I,EUM{8{v8h>|/^8Ţ߳vnf=<dZú ߗڰbcP3!3cj876kN#o4feY ߧ cVT@PP%2b4D*!Z>&JQ ?{w9 0 j,%&OZvd OqX?Ըjl Fhi?jVNύY3KVwoqw-핝KVts.涔k;Z8s)\|5wHvؖw}?ƜmV{xj'Yf`!x(@ uE1~"K['jxxYpTWzso xc$@+B"-@XB{k% Ђ$$6 @X 6 Ɔ<%K^Wd0W*{ q_9wι=m(_bmſ0xyO~m)kϜWk=Y-K=ob)Y`J=zHŚO,Y)V_YY/gp5ˊTQVK֯_Z_YoDk1Sx >ϡ]KWIZ}6yo+y:6ox%n%藨jUGT s*eU*#Na&qW|@XG*/g%3D y"tN;|eWWou=UOyueWxgǓd,x_x퇞w,jI͓ik?Vo"~.l+w|~v} sx{W foo 28.s">_nv{{OV6|^FB/I%rKd,!b&zz_?oohiwiJ~>~.ch3GD7qoi-hw$7Y/zZ>]iEOŸ`|Ex" nYWVaV׿/?#󇍛qOM~=Vc=5&Ѵ>͋MV_ xgS-a_vo,"At.n=AcxoFkgW qoc Bu@(+^f\ntщnF h [39[lJ-S*ꈊ@:fvCLq $Ni bh{^Rp8!?Ts%\"%^bu1\b}/1KC!ss,oxڋvc}e2cr) N8wGwGȣ13~Ƥg@'ֈ|K[@\-=e6pF$0N0sqg^q5b(DbnApqV&cY픘͸f3> kEcgŋ[[(krt qo^[@-XB.$s6X ~K Kb~I/A4y9"N Rm|fvӸA{WUکPvbI#<óLd` ґUIJrGwYL";ܓ~܏VڴA="E ޣ+XeFұBmQ@"▒U]r1XEKᵶH6K.I<>Fk4D r` l,sI!ZGJtpQԼ/D Byjl$}N(ƈ6 |oqns{ps;Юk븆\k^+iIxy{y#p.rxe# #WcS+\\v|7qe%R!kd(D&-.3GiWD>cs|OvU3NuI<[pIjq8R r9S|l\HXM^-H}.;Gw/zk}gM9m߷xqܾryy sϡc܇ǯJ xNQ*$PwE=A%2 DW㯈&?|}ݱ`z8uTjW^VmQPE2q5rUW ]uLTqD4|UFp1x2Ǭ)_ !P/w}D5A䕃bU +;AU-W%0*`w̓u@jY v`w{GQwc'ĻТLO85ߥCSx;ѻo;xmwھu`7=3H,;͵{}5h[SOa42%O{7I/1!"O]& QdrOQ**JʨvԮ RG̑]u(0R ‹ kb=y^TQFQ*T(GJ駕K+&~1[D~Gq~1ɷ7zcFɓfOųFlI;hA+h _'1:[d]"OE.ֶw]Qh(#VN\G;BkhNv4a^BDM\od,^-‹Z1J_+#cvh1Z6k诵BX/\ Ȣ_hc}VAG3v;hMd2- OA.dA/k_ؽ">5qkCa~1HO $}N1L2y(B1KPJ21rkG;܎aGq8lr_f5%O/yzy %Jя#Q D)cJ b 6HA ww'XG2s QFC"9hY%_/y{p=s{ 8nz#8l{p{]؍Ntӆb4c'1w ȵn~m~[9hvcvOkF ZaсNrF8ރ#OzA kSC kmM6.[x^Ա>&QoG}7b3!HzQeZkq8g bHFƽYa4^;,vl'fЯCŠ}@W::w;!O8^cfׅMNbk>tc7:Av_ZJ+/Xa>xZ9a1N^yhNcaNܗ?8|2atu&0y7L,c:2n \;;wDmb 7c6fl%67a}ws|{Esq]d.2 <<95 |fgyޜsy:=}x}_)W: Wٸ+@T&PJ\ȊWUGhRo:c][PSZOj jǩ@vUcd1Y.ܕEsPEDhpG\CpFZ :WLod*ZT cW AApe &FTA߮D?~ӟd?eȪOor;y޽s0N}k'>rN;k8Q&ޙeyhەv䏳qG}v={A;rvǸ{l:xoGCs7Ivvjasz^[/QiTLk_5uV1ǘyFeD1F,1|j~#3JB+w)#^@(1FJD$a*f>̭y3g5pyU ~)F5/5rldtֈ"13-9"0syDqb '܎L+Adȱ\h9"Y"~ZXKnG"1Ϙ9x1ۘE_td.ybpI`.q"hpc8Q܊Xp$p}8JY(7*J FHZwS[G8^"Ѣ60<#1yx/ɧ Ƣ=U{lf-_-S+D﷈s*fιpyo۴1-K9K9Z20s(A)ʌrTҨO5jZȣՓkx u"b%ǡs3QJ մ1jXG~ǛxK1Nۢyh5"IO"O9ȝZ%nI_(}Q@K\[M uګ@,"HD'+_gSBbG\ɻqyV*VqMFȱұXLg!9EO|b{e^y%{YG/e]>Fqu22H# lRE=gkj{ QzTR5j*j^cd`c,QRmT9Ve(E ǵb~Zq4/qkYw-kt /tJG+F JǺWDbb%*!o)(yV9*f*QjԢPF7}O؍hdHލmdYFֵuЯ֨#Z=9VzC]Iu>3$rݸ .#@ n{03; $A[F[:LO3tw>35}D\ -y֜rДRohB{i1}hL_'5?Ds@KʶBk.hI=J+홣N諫#NӉ:]_K@s4CS4Nc'S*g=1J[ ZkxւrGiƌ j-wB= ٶ4:2ztD+x^!kJ)^xu4XcMm6ɓML4EKCK#iGi5i IbbQOicyM 'ֈk&ZS 55Pry5eH]xeh8Z+-MИוFh(p\+eG{O?] (̧W#Xk2x?kL>AO08:1ޣT9̵?\؏}؃؅7׶k(R:7Sv6FHql`<Ʒn`bs5u=&ԛlaϽVF*}JwbvcbC8LYu5\F.4Am*Aޯ_ۇԩnNWQd J-Ƥ[io+2zZ}4@C ֜r-Rxkl(۹VSvj[ۃ؇m 5BKMi>=44PŻPH{|S8d a'FkۉP''Q2׼\y9v?en?en?en?ʵ5k3gN>g|_2ޯ5am]Ʒ?៼_ 1h3&hfh!ZZ)_3N2cVN^?h?'FkfO̕ր:NoD}J4`B = -Zt Xk5GT~Gc;oEIi(~MۿOPsg\j|r}{Ý3Y=;={ x~.˙ w |[<ɯٹ5WsjϧrhYəE_ `́ܗ 滮\u䷢i\c`*y~\)s_-V%v+is[v^JN+|VU9*;7e|  +sg"U&SeTv*RIM|夂sLr+5rIvy`>(2={&*LeL';v&22FɬVbז&9jfeMA fNI0[28j$GT\FtCΩʑKs(~$˗V.$H|#+b&3ag8rněوf5g1LVfe"g̚L#sEd^CdYȜ75۶C*y[跡oC;BCxX{ĹETvn彮 (K=DLݕ^s0e J8DixJ:%PJ4Bŝd-EK%2Z9H$-ْbIE2+eT-dK'UX-IUf\%=Ȉ8mRAY}~bS9TMJFV]D-KmQécI^_5Q>hQ 4Q:*QgewD TG5TET}ccGGYJE}E}E|E|E|EUeT rJxL$JҖRvKо(Nӿ8-NK:IC]ppGQi0 ̑:j8EMQ/TKUCuD-j:*hy%Q)5RCTAJUЃ(O x*̯"+Җ:jh5ZGKui.եݺ_kUJ})HuNJmRK<+5JU \ɌGIA*0^?ZA9?;%ԌٌRvZѶњu`%v^뀎Z'Ql"J:]#r<~D7z7N?QJ.WTTRZ%(J~=h_c)'񹞠W R2(̛hɢ}EGՎ6"I${ZѦ+U+AͤL&o( C0F`$FqGkc3No@yc(amdK%eԯR1N$["=hO)ƫfp҆+(e9-|QřgkTvfYfF$fxtbc6bocy(|ic;m~Au+o-((Eӵm=Qk~5^Va%ԥ,_qJ2fJkIHF2(rxP+O xH,(+>JJ'1>U{x۸sQ98K{gi,s{=ܞ嚟ڟe e-c]c}gg\E%6>>?'$}/Ҍ) Ɍ1([yw]EƠ\bwoX p=i#".h Zbv()J$iɞk)T*ӆRFKR,H@{6bJiIQ$1?F2s eP6\~Թ1^'k-Q}y*yS[<%ĭ,s/Q܉{xrv'0,JyB}IZ1'_]w{J'ם]YnİVTmkhܡ݉p7Z>QY<()/**XTw?qORUcKwvn-ԥDʍy#q<{6NPc깾qeM Fi1&b6Nj ւRkڠ-i)L{JBп+ j<}ڑ:2ޑFc@F{Tim6hmicE \Fj#$:wp7MtsXEb,\Eyh.WKZkmߙ/W(^=uZX$طDt|>h\:03iS0(Lq?v1;GӏgEw$IG2g$F1QwG3cz@FHh,&c 2Ӑ٘<yl:.=+xJOY5_Yu6l`M_zLID 0>e5cU^ci,prW ^219܏LZ(.0SV030x~bzg2eWYWa+yXeYIYcx2Ƽ|S:g|y:ʺz>ƺ>>:?zW98A9xv%ӏgqhvMvl؊-LM؈ Գw-m(khs mKY_2װ+:Vc ]+V3CYܬzj7>e#6PNYO=:X%w-kx2uAYx OوMEEƵo`;&vb{WGRL/Wja+J{y:ԫu]_W2t9\O7y=/<'gEKμF9foK8fήϫr>-,YhgN@f:夙9Y&OE;Ed+1sb,bNE aSaDX'bO%[ɕ,Xb朘}>,x.,0<9f^=2چQO{Ow٧̉.4W).֕Nn٧';eObW椕}*dUSU)I*b>!eNF)'⻧ T9d9gKJIyhggr(,TY'ꩣ'SE)G!t9<{7[wv:Ǔ3<vgvytѱD;1q1gp7Ms7wW:u_-䧖اtbײLj8Sgsrv]M9[cJy';uc:icN٘6ObN'T'R*z'KrR$v ωυiςg@3yg:yYs?aHe0n[jSsZg'̙ 6œ>s'xy_2ǝp; >1~f;VV;vJ;FioM:`YGWUU6e'GdM&;`疽6kP].tHmf2& m2~9ufmOM;?=+6h?m5϶r˹c6*2l3ɹex3~Gۙ}^ a 6Y , i4G J<崶 wz8m==Ep/7h}~ ZҩCdɠ_kiei| KT @臾4fL[c4b\O̗I VO<.jiZ6j'Z Sͩ&UCUToU觫71@Htm2OYL_\:>(jSRKSN(jж?ц}x^ӨŸږ:Z.5ZOI/FZC @c:i\c%S4fN\ỸLk*Zh-VZkNd9EAd`Qc6D;oW_AouSԣtÓԯ2F@K 6GiKv5Q#m*ӴJkm7Xk5@LcTLadm&jx]!cSi}%uR?udz>ꅟuBY^D{^{A_^ UX[Eh@O[#Dߏ8z>j ǴM@K6GiKv˵Kk׌hCZ+mWHkHx}=حv򦶃vr5hK-SS\3>ϊsf,K"MMKe\\8}tyHk,0'Z314;/<\L>_IԵP[yџ{%ߝ@2']$^v2L-K!P; 1z=Fh1>c>& J27di1{P pHFc xmM&dm S1~vbM{Cd3lڬmy؄lްlOhۘH SqXŜbn\#10(C0YԥdRu0qmްlm36a#V)9TXZCV,M&z)#-۷w{D;y{k7uC;w|``7܉w;6;.gݵE}1)ۻd{w+6aNmkvf͹Ӎ?Nw׍umog?}}ܫ=/yWpmhL5rjTܑٙ6α Uه{%QWG7;wmݠ o_^~_EEtf/ny<ж]^vsf][= ==ߣ{2{/f`fu!P}S=S|xwMk.gZd핂{$/AUݑ#b2]ԧ?cۀ7g5<Qu5\UTӪz2&c,F[FYFj#0"-Qq:})jgoWlQ3GTsYk )<#_koeeeNl:4li5u5swncc /^i#[GNSQKƜ)y~Vb^VkkXgYO] \Ҵz6G=f#xj{VGx|,+X.j3'FHcjP 6kb=ZRN٣޴#l-h oyTGQ>)x4Ӛ.(DԹM×p_2|Q1gYaNx p'ppGxarPO[is&hn~~֔ruv=0y:cqI[83~xrGH"]KQEc4ASQӧhI\'8e9q|ګWVו44b)$NhǵcO9*0#6jy9=ˇv#t ,jO<ŧ,>|A9KZ||f4uSPHi@k5{d )0+ܻp3Y`zGi^` &*0 X( P `dLd :buC[igO~go^s}W.OS"K@&0C0a8F`ύxM)?f3:2wׄc}ETчq[CCO3 D~Wrͣ\mBYLm1]jSOLbws\`ee$#T4ޘn ,<2 " aeE氞fk~6Ò-2=ө5X ֲb*Xt1z]30S%з5x^-ОY1Ȓ!dZ!1qxLL /LLo$D˄Y!k0`6fi3bȎbgtKNc-x1ޓ-&Lm6[<8hehm6R'?'_`_`}]dWzxgx91@srm'3= ˞L,BXl eLôsemkf.Yؠm&mE*7<ߘMLfOLDmOD׶`36crZ޷)5:kOYź[z[Z[:[:[:[`^k0&O$N[83O9Ks"1e"1 e8 #b)QA10c9̘#Q9*&п uB;i1Nc10*C1Z8-2Oɠ I`"eO)Srz]C҇|>e\>em(X>|}hr&"Lk㴱b >闒ce Zy>ǹ$O-y_~s|=+_sOyL]eee>g֗7 W:bu)яKK_yWe^w}O@?Џ\\1۷/3 _39UeYڒESLH+bgWLF%2Rʞ51'[N7s˯ع?RʥT&&_2ʍʋҳ;rɌY 1f:Lfd2"uى%h;NRK ˈ0 0 su|3yUy֎Y? G^"ͽ(Q=^(=u{K=?1o7bqt;n߲bx^TfPd4ݎQtA#&b-OЛқ;sq7pƼaŶ#vڎWGU0u(uYNf-qصZ;R6i;m"~ڎ<~dD"ǹEGD{_59H#CDr3ȭ5`DiMt֎X;Gu| Լ[#jW8'c&&jb&j>#cvstpfdT32i"~2="Ji"&i"~ю6F2uW+8͋)7b©``nb/ rq*\8{Tplh F_nQ?;◕#g|vώ^dToxF8-G[y]lŎj_hB#;m IT _''vrhͿճa߻bWc'T.M|B^bզÔ(U%_%SfJ֡T|l@F*ٔRUZd{JuW.ꚯ(TJT|O*A|Ja*9RUr&dJMR2oBw2;->yNj@ov( %EK%IX.禄 뜿&lq &lsHJN8#|O9rs9|Ys9s,3wpu/m+) տhǞz2FFLxDl Og }~:Qxa~9ϯo3AݔO=Ph _}_f1R4ېN3kK~_1L_~F_4!ENxNxM Ymo,sky|ǍbsnOy6{7JʽU^5˹GG:ʇR9)Cd1IZNI@qaNC`~% &f"Ct ?ыJO@btSt/藫x>?I]%Rf֒S"]NYk@Ӷ2ȤJPb(μ(%Z)1~($S+6i~>֋=Eiу]%EwN_\xN)A_eF/D:g"@>A@&f|YWqTrhz)tÓGyr+t.݅:fg@gљ>\E l:!2%QBChS޼Y/ۏN?GhՏc.2}csއWzs=^к)*u=AOP8=NjYYˢ|;3XY3Ӯ2~ OCEg16\ttFh#1 Eg X&NbLtq&$9SS^>~H2Ȥ,m0Y{֢2XXhHØaPGœ f@ @?GPї21 D*i5z2^dw%g1} =OI8tXm Fkޯ 2Q0F;ho(ڭ)?c -bOWY G[\mE<)P\̣|,`,Oδtϲv]E"s eB/SeX.s%VukV['9 F)O9ue|O>㞢ep:؇{vcew!s0cB&2AH@G.1 dPOE`ps0}V迒)Q1?F;臾޼_酞:\ߝ~(=Wݢz3.][߅qq\J\ v.Yfnw|!ȓiГ.>c;x[<\.h9Xz[zYzZzxq"=E{.3.Z.Ys{SǖO臯~z|| z-QX\#>>Gc'S1В|eh,ޫ ֆOPF)=]q yrP֛2 FsFd:sj:~p;˷e1L|c34W7X2δ҃J2-Yb>s{rD.Ss|ߕ{~d/ճ#z9y&[/3;;Zgt"tv  %gy&g]F1^9bu8EbKQ^DibELDD쨙%?*'Vǎѳ`,vjf&ffbe&NfbdXo+&fa&fb`v+qȘwq.-V3k8hX(2FLˎt.KT+k ƳXȸUtjcSd\*.,2ѫ_.jTT^"R vLʎE8?q';[)V)2`tɎ,$Q$;z+rˋ萉 shO|}+syMCiF!0>0CFh(Z}ViO#尨E;1 )88G=4Zck yj9XS9[y>ӆuІ{yvi;-oz&l<ۜZIlu:t:FI[A,铱z+?' FnG~GGG1QguQ3FӶ2~?cg&`"cV&a2hSiGe ϛLNgإvf=ث~g}w!qI{ o4PY3)\/eیm6/1b,LjY NN05c1Iʾ8#Sv<} Ӗk@.hE%wRYyyٳyE9 0NeiYV?9 u\8|G;h;w|o|e>W%cW>?)S|s#|H>(Qﻴ.CЇw;I>~P9u}L]'T\r+N$N8v_2̳8@{ >u#q+Ḍ?b~dN8v$$$$j/p+W8'~-ZxsWո x-xB,d;QGaO\AOJ4ϾD*\JFcn\~C{&K<xCkxW‸ZJ+D-PHsq$'! s>I<.'oߊ߉Shgs8/~MEϯ%ҮN|[\H8Z!+ޥ=KՏܯg\멘-&ˍ Ad|-pV;^+ovO+gG17fKbKDC^nxyWŋ#v&Zg"u:;:GHّ`͏-flD"j[y1W+zOx./~fev:Y0;f]1.;uXV|gYd,˕b_^~+g+vOK52Q.;e"[9#Z"Y(O2Ѫx#UF2ۥCZbZųDz~8cWyYoŁHLHEF(Կ6KFO(OĪq*;>sbSvL*z,*qD(;y8h2ѥ葥="=+3-'EƑҡ+č"?FdbCv<ȏqV'g' d S'/Gw"#;&c9vJ+Eo^\)cx9u1q` ǏDĞ2ћ^Dg2v$ƏœJ1$~TďG8H D6 0Q #""W&GAB Bؑ;"G÷wX;hy7;x{ʨ +M>zk?s}?h=b]ϝwI _X}oqC誄 /$L:! Z Růheǩ ׈-Yz^Uw w'K;D;;D۵۴[[7&Q!Fܠ]C](jejIђ=2OJSRn?-h%`;p'N(C1KQK) QvܦݪݢݬDFQD+bZQT+f~B7ōM [qv;r^ڰ' Y [$SR ŵ$$#((gyR^YTx{B)Ƥfv܆[-͖nA7(RXznMrvv(G]wX..2F%iטǹ ^Dօ~Q4BAVVR+% JQ[IZ0JXPD+/UܪݴX jߗϚROdu>d_}ל\ǸvWLB%OYQYUZ5zP]JM6uxЦQ[$S>RMD[I몆\*UQOɄG>bZKaOEQmH,JKUV]jQ^4O!QW֊hE6-_"ihW]UժhEaQ)BQUeQP*AK_WM{-R"RKbdKuYE(/h+UsTCUʨDy֘ kO)ǺTʢ Re*VRƟCORQ_7FOS۝>`'BoaE? D:zx !Y1!;P=vPo(8¼RQe).AUӆkkDI@m~^]ceQ"HJPCF咑Tы2Jo+}K[)8TII{IU&suR2 Rļ*̱2PBꇾZ^Wz"_)xb(.z^ϵ5r#(?FPHI[hw#OqɘӑMeṳ.e΢ٴ3~Ϧٴ?g3D*ʠ,erbHfm(1Lզ`x=D?w_qg<ۃQ)ǘˢ s$#)AhQ2IHF RX((.e&k2OѦ[)8TMٴM{ٴMU6suR3әKeLe)]Dm2NJQƣCq.)P"Rʿy(A:vSuQ.aPߟ!R2T0r{8Nh'qJ{K;^9cW)b_j &\Baeu, Ns-O$Pע :VR($$z R2-+nhux~n[DYwP+q&# Q %QyVE(>׭\ fܤݨ)\G]b(8Kh%eyE k(p?m~BVL+N1b(uD*J_mŴ(JA9=LD9Q02Z*s%B"S㹿~WĿnO''ޫݓ9+㮔\rx)Vl]\]OJ˝f,喕32V-9"g,ɜ1bE#`vdLd 3[-;-{e2W&keU&K3Pv)V*,RW\ݻCNVn%zy"29! @&I;Cm.ZvduL36&[c3~&ϼDfZrϰߏR%v-eH gWLfdTL6dQI@$z&$3 V3 0 00u32 ~,l" 5(er~#v?Ŋڗ&Bo"vD^Ad&۱w;nb&u?xK&nbbv܎qcJ+BܣerDȹ#GʋFDMdDM4܏أ!o}/mǺMێq5̙6~wnQ+EMDnݾRT;v|_66kWĬ㟹2sECEMt;ZTDsf_)m&z\~߹R:Z]ä4V7ȸ`@@I4NUTL'FյVU]20fDQ}_ppؗf4:qD#{{NSO?=V:Rܭ :5Hk)A->HϹR熉s>is3QzȖOٴIwrYZ+WS왩(5Kc7?5vc7-ABRa= V Jo+p@gKωUFa gf7_71WeތWvJvޒ7ճ\d*U9lLcU2Xo]UYUg=i- RX=ۏ{t>owuYY˲c;ڡvc ;rmYt{6svGM}pGzSm]ƞg;1}SW޵3_=doR{ڏ>ޓ(h[QҶ *WsjeJ_ jiגxy d[kGՙ~iPٕ5!?lP#lDC *oǬ[q^ՇTZiA]49A/)~*2|4B!1 ŬTҠ2;FZ#0!TŏN tF~BTL-ʠV>s *{ԗZT4|wtFZOП *{0:ٌ}([~ѼJ7?OAML&[ 5N}hF *P ޝ 򹦬A *%4TMs4ӠJDezT>H34 *Pr_SAoOCIpWcAC *1y7=݃2,0H *C"tAe%h~e)3Π *+ZJP$uJjgPYEmNimP9.9:ˠr4ƐmP<@_%@_Xc/ָFL_L=stʚFt}|Ͼε/4k|K4~g RP/ [_QC@ Q@;hO}?)BE")¸0>?ǘ1v!1!F!%P)kiʡ$#T2ºْO*J-X!Lĸ$/$8J"RWBhGmG _(',q;, bvE/{-2BkͥK5i.LfdҤJu>0 ?&XHHIMeRn6u#zƮzq 1W7%\kuky5t:{txxm;Ve@[Wݶh-i>۠6v9J%(^Bs{Thc \ XR19EuHע ƺD:%̺D.hC謹 :IYt\6hR Jʠ* % ɮ*BGĪп3Ka|s%1G!q"sK]kz=)\ym=VO`X1Y"W'o ;;ўppA,1HPP!!a]a8&xnRO+τޚX5Vz1=1֞kO'1:dY 8*υp;dYsJHq\ˡ Jb0BRm9X~W#P+B[T|Tk{/ΑXփ=i"`WQa~yDCzHQ)&`nB)y}mn!{~YCٓH0|FfbA8EX"GػGcOp@ acpN{1CEx I/+01?%cBsZa5^kBhGW5Nz ^u , aE@Ta%P ex^$Q'T%S_'_^ƳJ6%_eh{)|Kp |K6yRnt.O&e*mmvcYvG;I3n=n}:Vʬ݌ZϤ9ts3dFbo>gXOdXOD؛7WO~Wnҫz&z'nr;U)7Y78jwk*$V*ՓW՛ ɪzxFTԴT%*WC8dTLYifNTFn.*uO=l{M\ɧJ=UکMjzL`M%#Z ;o,4i%wb]0қS|RnҲlcē1ff*?Tz9a~RדB 4PnWiiyܣ=ģܼMem*g3|ւ935ohn~fzVtF|T&0X+QtDKT5d+wMMTbTsD*[&QtMT$7=S#=-ғ"oB&C* HO}T&;a-ɕ鍞8LGx  g^Fff3nLg.*gQ7WS%&͹ǛD%%*!QJDTR7&zM<IJ8T'C*ГW`9dL#[e$ Ce*PyEaFߧz 6gO ^_Zn[H<~ZkETg/6N{M~ *+hmz{5T{A1[ *O]kPeP>T~bOmD>LT~a/_i#f>%}fyp_AygNپo *yfԪ|v+_K |g1}./]hPw}Ae;_Ae_;Aeg_G*ʮk|] *}ݛ5gfbw@u(1`!r n+"0 8NxV]hW~}_ҤIV-5 6hjK-,'.VI^ae(t* fC*S/]x#n@_ =ĭ#`|9<|D#.?6͒<8l=ȿzEj`U]"ZwLSaVV=&я/ _c?`^d%2Jُ' d r-2692L"/s}_ $-&:Puoc.os[km4MT#\Es2p.0iSOpLj;L?y7H޽C"TRuZSGq%maɝe%ma&u[[P [ږe̥-Zm xnϴW1s>G,|a Yy4:ceoL|a)?3-ԟ%|@ٌ_.%ָAVq>k6)\RdJl3JVg*F=nH,!x+zx]fLTE[o&zKL~B29dKC[V8CjNNZ;m#͜oz=quүU R'@|Q8Slo-*,j DsbIGY+R(M?wG*Ofx*~ 죦o*0P3qwyg=ԙYǺw&R7Q9y)c=ҷ^e" ׶ (0   00bCorelDRAW &CorelDraw.Graphic.70CorelDRAW0bCorelDRAW &CorelDraw.Graphic.70CorelDRAW0bCorelDRAW &CorelDraw.Graphic.70CorelDRAW:0bCorelDRAW &CorelDraw.Graphic.70CorelDRAW0 bCorelDRAW &CorelDraw.Graphic.70CorelDRAWr0 bCorelDRAW &CorelDraw.Graphic.70CorelDRAWo0 bCorelDRAW &CorelDraw.Graphic.70CorelDRAW0 bCorelDRAW &CorelDraw.Graphic.70CorelDRAW/ 00DTimes New Roman$b$b0b0TbTb 0DArialNew Roman$b$b0b0TbTb 0" DCourier Newman$b$b0b0TbTb 010DSymbol Newman$b$b0b0TbTb 0 @ @`  @n?" dd@  @@``  ~ p      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTVWXYZ[\]^`abdefilnorstuvwy_dhqrltu  _ghqcjkx{}|~mpzp}|~`2$"xܓ1oTz2$ļ&&s+/Tz2$rp9)`z2$|@C}IRիW z2$v:TEjmz2$M15}韙G %;h+z2$(@ uE1xfcz2$r n+" zS ~1?@8  g4:d:d`b 0Xbf\ Tppp@ g4*d*d`b 0Xb, ppp@  <4!d!d$b$b\ <4BdBd$b$bf\ B?, Printing LISA 98 (c) 1997-1998 Patrick Powell http://www.astart.comO =i ,Managing Network Printers and Print Spoolers--$Patrick Powell papowell@astart.com Astart Technologies, 9475 Chesapeake Dr., Suite D San Diego, CA 92123 619-874-6543 http://www.astart.com ~ZX%Part 1- Printer Hardware and Firmware.Printer Mechanisms Host/Printer Connections Serial, Parallel, Network Configuration and Problems Network Printer Support Print Job Formats for Vintage Printers Print Job Formats for Modern Printers Page Description Languages PostScript and PCL Job Control and Format Languages PostScript, PCL, and PJL ~,Mh!,Mh!Part 2-BSD Print SpoolersPrint Spooler Basics Print Spooler Client-Server Structure BSD, SVR4, Novell, MS RFC1179 BSD Print Spoolers LPRng Printing Process Printcap Files Filters Printcap Examples 6EUEU>m  ,Part 3 - Managing Print Spooler Operations Management Facilities lpc, printcap Adding New Printers checkpc (lprng) Installation replacing print spooling system Diagnostics Load Sharing and Printer Pools Bounce Queues Routing Host Specific Printcap Entries~ ` `b ~ Part 4 - Horrible Problems8Permissions Security and Authentication Accounting SNMP 8-Part 5 - Multi-platform Printing and GatewayskNetwork Print Spooling Drivers and Print Spoolers Printer Gateways Microsoft Print Spooler Windows 95 WslprePart 5 - Cont d zNT LPR Support Novell Print Spooler PCNFS (Sun Microsystems) PCNFSD LPR Support Samba Samba LPR Support Desperate Measures, ReferencesPostScript Tutorial and Cookbook, Adobe Systems, Addison-Wesley 1985 PostScript Language Program Design, Adobe Systems, Addison-Wesley 1985 PostScript Language Reference Manual, 2nd Edition, Adobe Systems, Inc. Addison-Wesley, 1990 Portable Document Format Reference Manual, Adobe Systems, Inc. Addison-Wesley, 1993 Web Site for Adobe and more documents: http://www.adobe.com/supportservice/devrelations/technotes.html d@>y  -SoftwareLPRng ftp site: unless otherwise indicated, all software can be obtained from the ftp://ftp.astart.com/LPRng site. See the README and INDEX file GNU software can be obtained from many mirror sites. Try ftp://ftp.uu.net/pub/gnu and look for MIRRORS PostScript Utilities psutil31.tgz More PostScript Utilities psutilmore2.tgz GhostScript GNU GhostView GNU Adobe Acrobat PDF viewer/tools www.adobe.com LPRng LPRng distribution FILTERS_LPRng collection of filters, patched for LPRng XiB( 1'#T%Part 1 Printer Hardware and Firmware&&.Basic Printer OperationA Printer is a peripheral device, usually attached to a host computer The host computer transfer print files to the printer over the communication channelPrinter Communication ChannelsPrinter must be connected to source of print jobs Channel determines the rate at which text (characters) are delivered to printer Also determines the reliability Also determines the availability of error messages and diagnostics Simple and Cheap is not always best Serial PortSlowest and most error prone Older printers had a very slow transfer speed (9600 bits/second) due to the real time requirements of handling paper Newer ones can go up to 115 Kbps Data transmissions errors VERY common Printer does not have a large buffer to store input so flow control is absolutely required Hardware (RTS/CTS) flow control almost mandatory Software flow control (DCON/DCOFF or CTRL-S/CTRL-Q) can be used over networks Watch out for buffering in network!%Advantages of Serial Port Error and Status messages available from printer Most systems have multiple serial ports, can attach multiple printers Can be put on terminal server (watch out for flow control, enable RTS/CTS) Cables can be up to 50 feet long Cheat and they can be up to 200 feet long Disadvantages of Serial PortVery very slow Did I mention flow control problems? This is a major headache Errors in data transmissions can have interesting effects Note: Software Flow Control Headaches Some software flow control tries to accommodate errors by restarting transmission when ANY character is received from the other end after a time-out period. When you get a printer error, the printer sends CTRL-S to stop job and then later reports status, you lose rest of job. (Headache #27)$%% Parallel Port - AdvantagesTransfers data 8 bits at a time Flow control implicit because it uses a hardware handshake for data transfer. Very low error rate on data transfer Parallel Port - DisadvantagesHas limited bi-directional capability Out of Paper, Error indication Bi-directional support limited on most interfaces May not be able to indicate error condition when flow control enabled Surprisingly low throughput due to interrupt per byte on most PCs and workstations Games played at OS level to improve this Real pain is getting status back using bi-directional mode Real cheap folks can even use print sharing boxes You get what you pay for Don t call me when they lock up& 2FS)m9& 2FS)m9> 7} Network InterfaceUsually supports various protocols IPX (Novell and Microsoft) NETBUI (Microsoft) TCP/IP (LPD + RAW Connection) Printer builders are (or did not use to be) network aware Has changed tremendously over last couple of years Configuration of interface is now usually pretty simple once you understand the various options Front panel configuration is really quite simple HP Jetdirect has BOOTP/DHCP configuration 6#L)#L)o   Network DisadvantagesAnybody can print on the printer Leads to the mysterious print job from nowhere In spite of being on the network, only one person can actively use the printer at a time Yes, yes, I know what the documentation says and I am telling you what REALLY happens Multiple users can/will/have locked up the interface (this is a known problem with HP Jetdirect interfaces) Multiple users trying different protocols can/will/have locked up the interface When the printer dies there is usually no handy way to reset it without powering it downl!/ZV!ZVU !Network AdvantagesVery high throughput, and has built in flow control Very low transfer error rate Ethernet has CRC Higher level protocols also do checking at transport level Can be configured using BOOTP/DHCP Status can be obtained by using SMTP on most systems If DHCP working, can even reboot printer Printer sharing becomes very simple, in principle For shared system resource, may actually be the cheapest interface as it does not require host for support (see LPR/LPD later for details)ZQLX*QLX*"Hybrid Solutions6Print Server Boxes Has network interface, supports parallel port and serial ports for printers and/or modems I have used several different ones with various levels of success Lantronics - works, configuration tricky, good functionality Rose - works, configuration simple, limited functionality Dumb Network Interface (LPserver UNIX/NT/W95) Extremely stupid program that turns your PC into a TCP/IP raw socket connection to the printers serial (bi-directional) or parallel (unidirectional) port This has its place when doing accounting, very tricky printer operationsZw.w.> vy#EHP Jetdirect Configuration Similar in principle to most printer network interfaces Front Panel Configuration Enable basic network protocols IPX/Novell Print Spooler DCP/Microsoft TCP/IP Set IP address, netmask, syslog server Enable BOOTP/DHCP configuration BOOTP/DHCP Configuration BOOTP/DHCP supplies IP configuration information Specifies a TFTP server and file that has detailed printer configuration information~R.' R.' ,$FJetdirect Configuration File # Administration Info name: picasso location: 1st floor, south wall contact: Phil, ext 1234 # Only allow connections from network/netmask or host allow: 10.0.0.0 255.0.0.0 allow: 15.1.2.3 idle-timeout: 120 syslog-facility: local2 # SNMP Configuration get-community-name: blue set-community-name: yellow trap-community-name: red trap-dest: 15.1.2.3 trap-dest: 15.2.3.4 authentication-trap: on` N5Ut5,Ey#%GJetdirect Restrictions The  allow configuration parameter enables you to restrict access to the printer from the specified network/subnetmask addresses This is essential to controlling access to your printer You need to use the BOOTP/DHCP to set the IP address, gateway, and syslog server Note: Setting up the BOOTP/DHCP server can be tricky. You will need to either have a DHCP server on each subnet, run a  forwarder process on a host on the subnet, or have your router forward requests to a server. (Hint: if you have Cisco router, use the  ip helper command to specify the DHCP server address.) bm r-a7&|Direct ConnectionsTCP/IP Port 9100 on the Jetdirect card is a direct connection to the print engine This is a bi-directional connection, and error messages will be written on it Other network support cards have similar facilities; if they do not, then DON T USE THE CARD Usually only one connection at a time can be active; this can cause problems if trying to share the printer among several different hosts, :,'ISNMP Simple Network Management Protocol provides a common interface to obtaining information about the status of network devices. An  agent process resides in the network device, spies on the activities of the device, and provides information when queried. Agents can also generate messages (traps) when a specific activity is detected A  manager process queries agents for status Agents can also  write information to the network device when requested by a manager. This allows configuration management to be done by a manager.(HSNMP To The Rescue (Maybe)6The SNMP standards include a Printer MIB In principle, you can use a simple SNMP manager to query the values of the Printer MIB. These are, to put it mildly, very basic. In practice, most vendors have extended the MIB to provide more detailed information about the error conditions, status, etc..... Unfortunately, most print spoolers do not use the SNMP facilities to query printers The common SNMP managers such as HP Openlook, SunNetManager, etc..... have the common printer MIBs already provided. If you are an administrator, please learn more about managers7Z7> "R)UVPrint Job Formats and Page Description Languages OR What Do You Send To The Printer?WW*Print Job Data FormatsCoherent and organized approach to this subject is impossible due to historical development Will give a rapid, functional, biased, opinionated, subjective, etc.... view of the subject Remember: each manufacturer tries to distinguish their product in the market Remember: THERE ARE NO STANDARDS Actually, this is a lie. There are standards. Nobody follows them :-) Remember: The printer with the largest market share becomes the standard Thus: Every 3 years there is a new standard.@'Hv'HO'+(Vintage Printers (Impact, Daisy, etc...)*Fixed size characters (Fixed width/height fonts) Character set at the whim/market demand of the manufacturers Page dimensions based on paper sizes 8.5 x 11 inches (letter), 11 x 15 (computer listing) some larger size (legal) whacko A4/A3 sizes (Europe) De Facto Standard 132 columns and 66 lines Unless it was 60 lines (margin at top? bottom) Or 80 columns with 66 line??? And don t forget metric sizes...Hjj,Printing Text on AntiquesSend characters, print characters. Simple? Wrong. You forgot about INTERNATIONALIZATION $ are simple, try typesetting French, etc.... How about EBCDIIC? (Don t laugh) Tabs? Support for tabs? Why? Smaller text files, good for limited file systems Harder to change to other manufacturer s printer De Facto: tabs are at 8 positions Market forces demand features Italics, true bolds, Condensed Fonts Need to have escape sequences to enable these THERE ARE NO STANDARDS3V@j3+@ '-Advice on Antiques(There are a lot of them out there - they were built for abuse, they run and run and run Get the manuals, make 3 copies, and save them for the next admin - they will probably still be in use when you retire Most new impact printers are extremely simple to use Very few features Modeled on major (antique) market dominators If you have to print multiple copies on forms, this is your ONLY choice, so make sure you choose wisely Daisy wheels make best multiple copy impressions Dot matrix are faster, wear out Keep a spare in the back room for parts6??.PlottersOK, these are not printers, but they turned out to inspire the next step in Page Description Languages Original plotters were Analog, hooked to instrumentation. Drew nice curves on EXPENSIVE green paper Market developed for plotters which could be attached to  smart instruments or computers which simulated analog plotters Drew backgrounds, labels, etc... HP (and others) developed several Plotter Control Languages Had embedded commands for drawing textl*z!<'*z!<'/Raster Output DevicesOriginally electrostatic plotters, would draw a plot a line at a time Needed to convert Gerber (or HP or IBM& ) plotter stuff to raster format Insight that they could also produce hard copy of text using various fonts TROFF meets VARIAN to produce $$$ of revenue as graduate students burn up 100s of rolls of expensive electrostatic paper0 XerographyXerography works by whacking charges onto a drum The whacking is done by high intensity tightly focused light (laser?) Generated by scanning original mechanically OR BY SHINING A LASER ONTO THE PAPER AND TURNING THE LIGHT ON AND OFF UNDER COMPUTER CONTROL VOILA! The Laser Printer6vv1PostScript OriginsDeveloped originally as part of 1975-1980 research into computer graphics Origins in computer picture generation Text, fonts, etc..., were wedged into the language, trying to import concepts of typography into the programming language Model used was to have dumb programs generate PostScript, and have a smart PostScript converter do rasterization Adobe produced first PostScript Language definition, and the first PostScript printersMX2PostScript Description*PostScript is a Stack Based Programming Language You don t want to know. You REALLY don t want to know. If you want to know, you are warped. Or a Computer Science Whacko. PostScript files are programs. A typesetting program is a Program Generator that produces programs for another computer that runs to produce your output. Are you starting to understand why you have problems with printing PostScript?3PostScript Printer ControlSince PostScript is a program running on the printer, why not give it the ability to control the type of paper, paper trays to be used, duplex printing, etc...? We do this by having the PostScript program set values of various system dictionary variables (I told you, you REALLY don t want to know). After the job finishes, you should really revert to a known state of these system dictionary variables Right? Wrong! You may want to set these to be permanent for all jobs So we have a password needed. Guess what the password is? Right. You guessed it! (Answer: no password)4PostScript DisadvantagesSince it is a programming language, it comes in different versions This is mandatory, and is Bernard s Law: Never trust Version 1. It requires memory to store the program, to hold temporary results, and to do rasterization, font conversions, etc.... Thus we encounter Booth s Law: You never have enough memory for a graphics program. There is always a bug in the compiler/interpreter Even correct PostScript code does not always work correctly when the interpreter has errorslDAyU2\DAyU2\5BPostScript Disadvantages (Cont d)qSince you are running a program, the page generation can be hideously slow if you are doing fancy graphics operations such as scaling, rotation, etc... of large bit mapped graphics and fills When a problem is encountered, you have limited diagnostic capability. Ghostscript Is Your Friend - Use It Watch out for PostScript Interpreter Version/Level/Revision Problems ,jj  _6PostScript Advantages$Incredibly portable across different vendors printers for text/picture generation Not due to the language, but due to Adobe selling the code for the Interpreter at such a low price that everybody used it (Not true any more, so we are seeing some interesting PostScript bugs). Now everybody needs to be Adobe Bug Compatible Remember: THERE ARE NO STANDARDS Previewers can be built that will give you an exact idea of what your PostScript will look like De Facto the standard, most portable way to generate documents for printing6E"E"f 7PostScript Books`PostScript Tutorial and Cookbook The Blue Book Very easy to read Use Ghostscript and learn about PostScript programming PostScript Language Reference Manual 2nd Edition Almost incomprehensible; it IS a standard, after all Appendixes are VERY helpful You can get a copy from Adobe s web site www.adobe.com`!W%!W%D 8Embedded PostScript (EPS) Self contained PostScript files that produce a graphical object when executed See PostScript Reference Manual Appendix H Version 3.0 is most common Almost all graphical object editors import and/or export EPS Some Web browsers even have extensions that display it${{9+PostScript Document Structuring Conventions,,PostScript Reference Manual, Appendix G Version 3 is most generally used Specifies how PostScript should be used for document generation Prologue sets up overall characteristics of document, such as fonts, subroutines, etc... Body consists of set of independent pages Each page can be removed/duplicated/inserted in document without altering printing Standard also provides guidelines for information about documentH(!@(!@: Tools For PostScriptAssumes Document Structure Version 3 PS Utilities Version 3.1 (psutil3.tar.gz) Set of UNIX tools for massaging PostScript file psnup will print N virtual pages per real page psselect will select pages to be printed psrev will reverse page order PS fixer (psmoreutils2.tar.gz) merges pages of two documents, good for putting a background on a document Selectively places/orients individual pages or sets of pages on a document desperation tool made from psutils, cannot live without itPOZZZZOtK1)  4;!:Tools for PostScript (Cont d)Several tools available that allow you to add documentation control to PostScript files For example, you can have the first page fed from a special tray, and then remainder from another tray These are usually commercially available, but freeware/shareware versions have been spotted. Some commercial print spoolers incorporate this functionality into their Print Spooler filters (see later) See the LPRng ftp/web site for pointers6X0(X0(<"Binary Communications Protocol"PostScript language specification states that the program must be in printable ASCII characters or a limited set of control characters However, you can embed inline binary data into a PostScript file using very tricky methods Some control characters normally cause a PostScript Interpreter to end execution, send status, or may actually be ignored. The Binary Communications Protocol escapes these control characters. If you have character C needing escape you send: 0x01 C ^ 0x40 e.g. - 0x01 (^A) -> 0x01  A or 0x01 0x41$,,=#%Tagged Binary Communications ProtocolWarning If you have a file with embedded BCP escapes and you redo the BCP escapes, then you will destroy the escaping This leads to the Tagged BCP protocol We add a ^A M sequence (this is an escaped CR character) to indicate that we are doing BCP and have put in the escapes When we scan the file and detect ^A M we do not add more escapes This is one of the leading causes of problems printing PostScript files with binary images produced by some graphics programsZo&~o&~>9*Postscript Printer Description Files (PPD)7You can use PostScript to manage and control various printer operations What variables/operations/values do you need? Each PostScript printer should have a PostScript Printer Description file that contains the various PostScript manageable options and how to set them Example: HP4MP - setting manual feed *ManualFeed True: "1 dict dup /ManualFeed true put setpagedevice" *ManualFeed False: "1 dict dup /ManualFeed false put setpagedevice" The contents include the PostScript needed to set the required operations Easy to extract from the PPD file and send to printersjHZ.ZZZZH.2        ?: PPD WarningsEach printer has a possibly different set of commands, so check the PPD file for the printers Manufacturers are not required to provide PPD files, so you may have to dig around for them. There are many extensions to the basic PPD capabilities, some of which are very specific to a particular printer. WARNING: I have discovered discrepancies between the PPD, manual, and actual operation. RTFM, and try it out. WARNING: some options interact, and will lock up printers. PPD and documents do not cover this@$HP PCLHewlett Packard developed a line of laser printers and wanted to sell them to the various printing markets They also did not like paying Adobe royalties and licensing fees They invented the Printer Command Language (PCL) Version 1, Version 2, Version 3, Version 4... Currently we have Version 5 and rumors of 6 PCL is NOT a programming language, it is a Printer Command Language It specifies where on a page to draw lines, glyphs, and does it very well.6ZZA;PCL ReferencesPCL 5 Printer Language Technical Reference Surprisingly readable, but BORING, repetitive, and written in a horribly verbose manner. Read and memorize Section 3.8 Resetting the Print Environment \]E and \]%-12345X are your friends, and will help you keep your sanity Note that this sequence, when sent in a PCL file, will terminate job printing and may have some surprising consequences Read Chapter 4 - PCL Job Control Commands This will explain most of the printer control functionsl+Y*8+Y*8B% PCL EvolutionOriginal versions of PCL did not support downloadable fonts. This was supposed to be a feature - you would buy font cards and plug them in. User feedback (flames) convinced HP that they needed to support downloadable fonts Then we had raster graphics support added Then we had page structuring support added It now can make the printer sing, dance, and do just about anything (as long as you know the correct PCL commands)C&PCL DisadvantagesOlder PCL printers do not have downloadable font support You may (again) need lots of memory for fonts, images, etc.... (There s no such thing as a free lunch) It uses control characters (ESC) for many of the commands, making it difficult to fix/mangle/edit PCL files without special editors capable of handling long lines, control characters, etc....D'PCL Advantages0Simple simple to generate Slightly smaller files than PostScript Very much faster page generation, as there is little to do except read the input and copy BitBlits to the graphics memory Even has commands to do the printer mechanism commands such as bin selections, etc...., built into the language now. E>Mystery PCL CommandsSince each printer has a different set of capabilities, you need to have PCL commands to operate the printer There should be a  PCL Printer Description file for each printer, right? ANSWER: no Each printer should have a document providing a complete list of the PCL commands supported, right? ANSWER: ummm& right& but only the development group has that information, the printer is not in development any more, & Situation is getting better, but documentation is still weak point for specialized operationsZ dz^ dz^.F< Quick TestFIf you are using PostScript and TBCP, what is the end TBCP sequence? ANSWER: \]%-12345X If you want to make sure that your PostScript job gets printed, even if the previous job did not end with the EOJ string, what should you put into your file? ANSWER: \]%-12345X before the PostScript If you are trying to decide if a file is PostScript or PJL or text, you might try looking for %!PS as the first characters, right? ANSWER: Yes, No, Maybe? Sigh& It all depends on how smart/stupid/weird the writers of the PostScript generation program are...rE)E)G?&Quick Test (Cont d) $How can you tell if you have PCL or PostScript? Ummm& throw it at the printer and if it works, it was PostScript GhostScript can be modified to disregard the various PCL sequences. This makes life much easier when trying to preview files produced on MS/Apple based programs60A0A,/< H(Portable Document Format (PDF)PDF is basically PostScript s version of PCL It is very simple All the time consuming PostScript operations are disallowed There are some minor HyperText things thrown in to provide some previewer help Concept was to generate your document in PostScript or PCL, run it through a PDF converter, and you get PDF. To print, you expand the PDF into the more verbose PostScript, add the Job Structuring Conventions, and you are done Adobe now sells PDF viewers and translators...6--, ! I@ Printing PDFlVery few (none?) printers will accept PDF files You need to preprocess them into PostScript Ghostscript should be able to do this Whoops its cookies on many PDF files You can extend GhostScript to handle PDF files now with reasonable success, but you will be violating some patents, restrictions on encryption, etc etc. Look at the GhostScript web site for details6\K\K>[ O  J)Portable Job LanguageNow printers have to support PCL, PostScript, TEXT, and who knows what. Documents need to be printed using different papers, formats, orientations, etc.... Need a higher level language to control this type of operation, overriding (perhaps) the operations in the document Portable Job Language was intended to do this Most important feature is ^]-012345XPJL EOF This causes a functional reset of the printer Cannot be ignored, escaped, hidden, etc.... Restores sanity to the printing world$kkK* PJL FeatureslProvides ways to specify the Page Description Language PJL Select Postscript Provides ways to specify the orientation (if the PDL does not override it) Basically, provides a way of overriding the PDL requests And most important: Provides a standard set of error messages to be returned IRREGARDLESS of the PCL This last feature is worth the pain and effort of PJLl7Q67 (6L+PJL DisadvantagesNot all PJL features are supported in all printers Printer vendors are very closed mouthed about what they support. There is no  PJL Printer Document standard for PJL HP does not provide details on all of the error messages, leaving it up to implementers to discover that there are a whole new set of messages concerned with various printer operations Try getting a paper jam in a multi-bin feed printer and see what messages you get Different releases of printer EPROMs support different PJL sets HPXXSi are notoriously different from other HPs And of course - different vendors have different messagesdcPRP@P0P:PcR@0:>%;MA PPD Meets PJLVIf a printer supports PostScript, there is usually a PPD file for the printer. HP has very nicely put in the various PJL and PostScript sequences needed to perform the various printer control functions in their distributed PPD files. This information is not documented of course& but handy to know NVPart 2 Print SpoolersO/Print Spooler BasicsUsers create jobs (print files) They use a print client to send job to a print server or spooler The spooler then transfers jobs to a printer Multiple users (clients) can transfer jobs to a server A server can transfer multiple jobs to printersZP4"Common Print Spooler Architectures+LPR/BSD UNIX variants include PLP, LPRng RFC1179 documents client/server protocol TCP/IP network based LP/SVR4 UNIX Proprietary client/server protocol Novell Netware Semi-proprietary protocol IPX Network based (or IPX over TCP) Microsoft SMB Basics documented, but details are not NetBUI, IPX based Z #>: Z #>:>"ut Q6LPR (BSD/RFC1179) Architecturelpd is the print daemon listens on port TCP port 515 for requests from lpr clients uses printcap for configuration lprm (job removal), lpq (job status) communicate over port 515 jobs stored in spool queue on server host6[i[iZC RR7LP (SVR4) Architecturelpsched is the print daemon listens on /dev/printer (FIFO) uses /etc.../lp/* files for configuration lpstat, lpadmin, accept, enable used to control operation jobs stored in spool queue on server host6IdIdZ!US8 Novell Print Server ArchitectureFile Server is the print daemon files placed on server and requests made for printing from clients uses database for configuration printing done by server process on file server or other host management done using admintool or other facility jobs stored in spool queue on file server< ZcZZ c =TBNT Print Server ArchitectureServer is the print daemon files placed on server and requests made for printing from clients uses registry for configuration printing done by server process on file server or other host management done using control panel jobs stored in spool queue on file server<ZcZZcUC ObservationArchitectures are almost identical Should be easy to understand, right? WRONG You can set up the various pieces easily, but the problems start when you want to do more than just fling files at printers Accounting Restricting access Error logging and recoveryHH}9H}9VWRFC 1179 Printer ProtocolW5RFC1179Documented the original BSD print spooler network protocol Incomplete, inconsistent, and open to abuse& I mean implementation inconsistencies Only common, non-proprietary, open standard available today This situation may change as the IETF has a Internet Printing Protocol (IPP) working group making progress towards a new and sensible standard6o?XXBasic ConceptsLPD server listens on TCP/IP port 515 for connections from client programs (LPR, LPQ, LPRM, LPC) and other LPD servers Connections originate from port 721 - 731 to server (Privileged Port in old TCP/IP network software). Clients send requests, get confirmation and/or status in return Request can be: (LPR) transfer job (LPQ) get queue status (LPRM) remove job (LPC LPRng Extensions) queue control$.c.cpYY Print Job%control file contains information about the job submitter and the way the job is to be processed by the print server names the data files for the job one or more data files control file and data files are transferred in binary form from client to server server must interpret contents of filesH h( h(ZZPrint Job FilesFile names have defined format cf X nnn hostname - control file cfA001patrick cfA002patrick.astart.com X is a letter indicating job priority nnn is a  job sequence number hostname is the name of the host originating the job Data file names should have same format df X nnn hostname dfA001patrick dfB001patrick the X is a sequence identifier Order that files should be sent in is not defined Most network printers ignore the control files and just print data files, treating each as an independent jobP"P)PzP(PPPPP"'z(t8*x[[Control File FormatASCII printable characters, line ending with \n Example: Hastart4.astart.com Host name Proot User name (banner) J(stdin) Job title CA Job class Lroot User name (billing) fdfA458astart4.astart.com Data file N(stdin) Data file name UdfA458astart4.astart.com Unlink data file Lines starting with upper case letters are information Lines starting with lower case letters are data files93 m9    mB(<6/\\Data File FormatEach data file in the control file is identified by a line starting with a lower case letter. This letter indicates the  format of the data file and is a hint to the server on how it should be printed. The U lines in the control file were originally used to indicate that the spooler should remove the data files after printing. By default, most spoolers do this by default. $|{Control File BotchesAs you see, the format of the control files is trivial It is amazing that so many implementations get it wrong& Use non-ASCII characters (UNICODE) Use CR/LF as end of line indication Exceed maximum line lengths Give each job the same control file/data file name Give data files names like dfA371jobs.dat - based on name of file |p(p,]]Job Transfer ProtocolClient sends a line of the form: \002printer\n Server responds with \000 Client sends control file transfer request \002cfXnnnhostname length\n Server responds with \000 Client sends length bytes of control file, then \000 Server responds with \000 Client sends data file transfer request \003dfXnnnhostname length\n Server responds with \000 Client sends length bytes of data file, then \000 Server responds with \000 Repeat sending data files until all done.!  E   L  )! ,1(.)^^Protocol HeadachesSome clients decide to send data files first, then control file Some clients do not send data files in same order as listed in control file Some clients send \n\r or \r\n instead of \n Some clients put non-ASCII characters in the control file Some clients do not use correct names for data files Some clients put in non-present data files Now, nobody would put in a line like: f/etc.../password or U/etc.../password in the control file, would they? Hmm...S&Q &+__Printer Status (LPQ)RFC1179 uses the following protocol to get printer status Client sends \003printername [keys]\n short? format \004printername [keys]\n alternate? \009printername [keys]\n LPRng verbose Server responds with status, then closes the connection There is no definition of what the status format must be. Every LPD server returns a different one Keys are used to refine the status, e.g. - select a job No definition of what information is searched for...pGu G   ``Remove Job (LPRM)\RFC1179 uses the following protocol to remove printer job Client sends \005printername user[keys]\n Server responds with status, then closes the connection There is no definition of what the returned status format must be. Every LPD server returns a different one Keys are used to select a job No definition of what information is searched for...:HHaaStart Printer (LPC)Amazingly, RFC1179 only has one command to control a printer. Client sends \001printername\n Server responds with \000 and starts the printerLK1KbbLPC (Not Defined by RFC1179) In addition to the standard functions defined by RFC1179, there is need for some sort of administration control. This is not part of RFC1179, and is usually implemented by the LPC program. Thus, there is no way to remotely manage a printer using RFC1179, leading to the use of SNMP...ccBSD Print Spoolersdd Why LPD/BSD?kUses RFC1179 All other protocols are proprietary It is trivial to implement over a network, and allows any TCP/IP based protocol to provide print services Other protocols can be gatewayed to RFC1179 based printers/spoolers with very little effort Least common denominator in multiprotocol printing Available on all UNIX, Microsoft, Apple, etc... etc... platforms$l , WLeD Why LPRng?LPRng is a descendant of the LPD/BSD family of spoolers It provides administrative control over printing operations It has incredible flexibility, logging, debugging You pay for this by not having a simple plug and play system for non-trivial setups You need to RTFM quite a bit From the users viewpoint, LPRng strongly resembles the LPR/BSD print spoolers The architecture is similar, but not identical to original BSD<ZZZ$,oLP and LPSTAT EmulationLPRng simulates a large subset of the SVR4 LP and LPSTAT command functionality You can fine tune this emulation to be more vendor specificfeNetwork Based AdministrationAdministration of printers and print queues is a major problem in large system administration is management of print queues On most SVR4 and BSD print systems you must log in as root, execute multiple different commands, and perhaps even delete or edit files by hand LPRng extends RFC1179 and provides a LPC command as well as the LPQ, LPRM, and LPR support There is even a strongly authenticated version using Kerberos, PGP, or SSL available (compile time option).,  /gfLPRng Security LPRng eliminates many of the security loopholes present in the original BSD code and design Many vendors have shipped LPD distributions with various security problems Remember - LPR/BSD clients run SUID root, allowing users to play games with stack overflows, etc LPR/BSD runs filters as root, and some filters are shell scripts with such things as exec $* Exploiting this to gain root permissions is left as an exercise for the student:_P_P$_PhgLPD/BSD Details Spooler Operation}lpd is the print daemon listens on port TCP port 515 for requests from lpr clients uses printcap for configuration jobs stored in spool queue on server host as control file with user information and list of data files to be printed data files containing information to be printed LPD/BSD requires LPD server to run on same host as client LPRng allows server to be on different hostZ[-xf[-xfHC 'ii /etc/printcapDatabase used to control printer operations Based on the termcap format, #parallel attached DUMB printer pr1|dumb:\ :lp=/dev/lp:sh@:sb:mx#1000:\ :sd=/var/spool/lpd:\ :of=/usr/libexec/of:\ :if=/usr/libexec/if The first part of the printcap is the primary (reference) name and the printer aliases. Following entries are either keywords and values, flags (:sb: set sb flag on, :sh@: sets sh flag off), or numerical values (:mx#1000: or :fx#0x13:)J J !  ^8C t " jjImportant keywordsNlp = the local printing device rm=remote host, rp=remote printer used when jobs are to be forwarded to another host using RFC1179 job transfer sd=spool directory where the jobs are stored sh - suppress (no) headers (banners) when printing locally sb - short (1 line) banner instead of long one mx # - maximum job size (0 is unlimited)ZANAN~ ]*8,'klLightweight printcap files LPRng eliminates much of the overhead of the BSD printcap files #simple printer entry lp|pr:lp=pr@host Client programs only need to know printer name and host running LPD server $@'LR+ TSimplified FormatLp2:server :sd=/var/lpd/lp2 :lp=lp2.astart.com%9100 :if=/usr/libexec/hpif :of=/usr/libexec/hpof No \ at ends of lines Tags can be more than 2 characters lp now can specify remote printer and host, as well as port The form host%port opens a connection to a port on the remote device - allowing direct access to printer (for PJL status reporting) server flags entry as used only by lpd serverNb'Zb~ r(  :New Printcap GuidlinesPut connection or other information used by all LPRng programs in global printcap entry Put server only information in printcap entry AFTER the general one lp:lp=lp@lprng.astart.com # lpd only lp:lp=/dev/lp :sd=/usr/local/spool/lp ...0QP0 % ln LPR Client~Takes a list of files, or input from STDIN, and generates a control file, transfers the control file and data files to the LPD server WARNING BSD/LPR used to write control and data files to the spool directory, requiring SUID ROOT permissions LPRng uses a network connection, and takes extreme precautions when reading files; by default, LPRng s LPR runs as a user program The dreaded LPR -r (remove after printing) is present, but has been tamed6ee,ZfFormatsWhen a file is submitted for printing, LPR makes a copy of the file and sends it to the LPD server Before printing the file, additional processing on the file may be needed GIF file may need to be rasterized Different types of files may need different types of processing The processing is specified with a format indicator LPR default format is f (text format?) LPRng allows explicit format specification lpr -F x# #c)3> %Formats and FiltersFilters are used to process files before sending to the printer Filters are specified in the printcap file as xf entries where x is the format if=/usr/local/lib/filter/ifhp vf=/usr/local/lib/filter/ifhp Some printers require some form of initialization to be done at the start and end of a job The of filter is used to do this processing as well as process banners or job separators generated by the lpd server More on filters later L<n<b] 7mo Binary FilesSome files do not require any modification before being sent to the printer (binary files) The l(literal) format is used to indicate such files Too many people confused 1 and l so LPR uses -b (binary) to specify literal format lpr -b /tmp/binaryfile Just to make life miserable, some PC based LPR clients decided to use v format in the control file for binary files& Sigh& The if filter is used to process literal files, but is invoked with a -c option /usr/local/filter/ifhp -c _M3F8@P !Destination Printer Specification$The LPR -Ppr option explicitly specifies the destination printer If not specified, the PRINTER environment variable sets the default printer; if there is no PRINTER environment variable, the first one in the printcap file is used Note that in LPD/BSD that the LPR client always transfers the job to the local LPD server, which stores it in the spool queue This led to the horrible  set symbolic link and  remove after printing options which have been exploited in the past to do horrible things (but not by your users, right?).,  ;nkLightweight ClientsThe standard BSD implementation requires the printing clients to transfer jobs to a LPD server running on the local host. The local LPD server then will transfer jobs to remote hosts LPRng implements lightweight clients, which will simply transfer jobs directly to remote hosts, eliminating the need for a server running on the local host. This also reduces file space requirements on the local host. If the destination is a printer that implements RFC1179, then you never have to store the print files=p~LPRng Printer Name Conventions'lpr -Ppr@host printcap file is not searched, network connection and default values are used lpr -Ppr printcap file searched for entry lpr PRINTER environment variable used as printer name if no PRINTER environment variable, use first entry in printcap if no printcap, use default printer value ~N !N ! E j  Extensions^If the printcap lp entry is lp=pr@host, this corresponds to or :rm=host:rp=pr: use RFC1179 protocol to transfer files For total abuse, you can use lpr -Phost%port/direct This opens a TCP/IP connection to the remote port on the host and transfers the input files directly You really should use netcat if you want to do this: nc -d host -p port filesP'P'  "ILPR Client and FiltersuBy default, LPR simply copies files to the LPD server The lpr_filter option requests LPR to run the filters on the files before sending to server Allows localized processing and system depending hacks to be done to jobs before sending them to the spooler Very handy when you have vintage software whose output needs to be massaged, and uses hardwired paths to executables $v: 2:9qhFilters and Job ProcessingWhen a job is selected for printing, the LPD server examines the control file for data file format information fdfA001astart4 format f The printcap information is checked for a format f filter program The data file is piped into the filter program and the output is then sent to the printer device If the printer is connected via a simple TCP/IP connection to a port, I.e. - HP Jetdirect port 9100, then LPD/BSD requires special filters to open connection LPRng does this using lp=host%port, simplifying operation and filters tremendously@pZZZpP  D;sm$Basic Filters - Text TransformationsdA filter is given a print file on STDIN and produces output for the print device on STDOUT The most basic filter action is to translate LF to CF/LF combinations; most antique (vintage) printers require this Then we need to expand tabs Then we better look for sequences of \b (backspaces) and overstrikes, and replace them with the right control sequencestv$LPRng s lpf filter$ Extremely simple filter that will do LF to CF/LF expansion, tab expansion, and most simple printing operations such as inserting NULLS after page eject NULLS? yes, sometimes you need to do this to pause long enough for the printer to do a form feed& Sigh When used as the OF filter, will expand a short banner string (single line) into a very nice full page banner This type of thing is used less and less these days, but periodically there are requests for this antique.6jjuqPostScript Printer FiltersMany times PostScript printers are used to print text files; the IF filter should detect a non-PostScript file, and invoke a Text to PostScript translator Some printers stack paper in back to front order; the IF filter should try to do page reversal If the destination printer has PJL support, you better insert the various PJL/PCL strings to reset the printer and put it into PostScript mode. Did I mention getting page counts? And accounting? and storing this in an accounting file? And checking that the person has permission to print?vr LPRng s psfilter  This filter tries to handle most common PostScript printer problems it sends reset sequences it gets status information and produces error messages it even logs messages returned during job printing, such as the PostScript emulators error messages it gets the value of the page counter from the printer It is incredibly paranoid about file formats and tries really hard to make sure that the job being sent is PostScript Yes, it supports Tagged Binary Communications Protocol(DZZDws APSFILTERftp://sunsite.unc.edu /pub/Linux/system/printing/aps-491.tgz author Andreas Klemm andreas@knobel.gun.de co-author Thomas Bueschgens sledge@hammer.oche.de Very nice package that valiantly tries to determine the format of the input files (uses UNIX file utility) and then passes them through the appropriate filters. One of the nice features of this package is that it will even use GhostScript to produce output for a non-PostScript printer Strongly recommended for those desperate situations where run time and file space is no object but  User Proofing is 0F(F     (  LPRng APSFILTER Shameless copy of original APSFILTER, but done in Perl Closes some minor security loopholes and deals with error conditions better Available on the LPRng web site,2] xt&LPRng s ifhp Filter$ Designed to handle HP printers (PCL/PJL) Totally shameless rip-off of the very good JetAdmin filter set produced for Solaris/SunOS The wide variety of HP printers makes it difficult to have a single filter automatically handle all situations, but the ifhp filter tries hard Various flags and options allow it to handle all known HP printers that have published PPD files with PJL information (I hope!) Switches between PCL and Postscript, has a text to PostScript converter ,S HP Printer ProblemsDifferent implementations of printer firmware have different bugs Strange (to HP) combinations of duplex, reverse, and landscape can cause catestrophic failure and require power up initialization Power save mode sometimes requires physical intervention when it turns on TCP/IP connections are left open and do not terminate correctly - you cannot connect to printer and need to power up Other manufacturers have equally nasty problems Simple Parallel Port Printer]# parallel port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp lp=/dev/pr if=/usr/libexec/lpf The sh suppresses banners, mx#0 allows unlimited size files. The printer device (/dev/pr) is opened write only by default. The lpf filter will do LF to CF/LF translation, expand tabs, etc.... This is about as simple as you can make a printcap entry<d dR" 6)g %PS, PJL, or PCL Parallel Port Printer# parallel port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp lp=/dev/pr # For PostScript printer use psfilter package if=/usr/libexec/psif -Tstatus=off # For PJL, PCL printer use CTI-ifhp package if=/usr/libexec/ifhp -Tstatus=off The status=off flag suppresses the filter from getting printer status, as the parallel port is write only The psif and ifhp filters will do Text to PostScript or PCL conversion, and will detect PostScript or PCL files See the psfilter and CTI-ifhp documentation for detailsN O.#,#p" $rf  Simple Serial Port Printerd# serial port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp :rw:lp=/dev/ttya :sy=9600 -echo -crmod -raw \ -oddp -evenp pass8 cbreak ixon if=/usr/libexec/lpf The rw flag opens the serial port read/write The sy (stty) option sets the characteristics of the serial line Any error messages from the printer will be passed to the LPD server for action*      *#PS, PJL, or PCL Serial Port Printer# serial port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp :rw:lp=/dev/ttya :sy=9600 -echo -crmod -raw \ -oddp -evenp pass8 cbreak ixon # For PostScript printer use psfilter package if=/usr/libexec/psif # For PJL, PCL printer use CTI-ifhp package if=/usr/libexec/ifhp Since the serial port is Read/Write, the filters can query the printer for status and use this to control various operationsN }.,}      ~$PS, PJL, or PCL Network Port Printer# serial port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp :rw:lp=prname%9100 # For PostScript printer use psfilter package if=/usr/libexec/psif # For PJL, PCL printer use CTI-ifhp package if=/usr/libexec/ifhp The LPD server will open a connection to port 9100 on the printer, and the filters will direct their output to this port This is extremely effective for network based printersN U.,( "  yu)Part 3 Managing Print Spooler Operations**zPrinters, Queues, and Status,All jobs handled by LPD are placed in a print queue, and then sent to a printer Queue State enabled - accepting jobs disabled - not accepting jobs Printer (Destination) State running - actively printing job idle - waiting for job to print stopped - administratively stopped from printingH\9|\9|{ LPQ - StatusYThe LPQ command is used to request status about a printer or print queue status LPD/BSD has two forms of status - short and long LPRng adds verbose (which is REALLY verbose!) When a LPD server gets a status request, it replies with status for the local queue, and then if the queue is forwarded to a remote printer will forward the LPQ request. If the printer is local to the LPD server, the server will also report printer activity You can restrict the status to only selected jobs by adding keys to the request command. These usually are the user, job id, or host from which the jobs originated.ZZZ Short Status  Long Status Verbose Status Status ReportsMajor weakness of print spoolers is lack of diagnostic information and job status LPRng assumed that most users would require information allowing them to fix paper jams, etc LPRng based filters generate status reports which are kept in a file in the spool queue. This information can be viewed using the lpq command The lpd server keeps a log file of status information as well This log file is also viewed using the lpq commandbRW} ]Alternative Status ReportsSeveral CGI scripts have been developed which allow you to get LPQ status via a web browser See the LPRng web site for examples You can write some very simple Perl Scripts that can open a connection to the LPD server and get status information. See the LPRng web site for examples Z\$u$\$u$>d5Y|LPQ and SecurityOne of the major flaws in the RFC1179 protocol is that there is no way to identify the originator of a LPQ request. Thus, there is usually no restriction on the data or information returned. Since LPQ returns the host and user which submitted a job, this is a very good way to find the names of machines and hosts to probe when doing hacking attacks Firewalls should disable port 515 for this reason in both directions, as you do not want your folks hacking other systems, right?}LPRM - Job RemovalPThe LPRM program generates an RFC1179 job removal request lprm -Plp 179 (remove job with ID 179) lprm -Plp john (remove FIRST job with user name john) lprm -Plp all (remove ALL jobs - LPRng only) WARNING most LPD/BSD systems will accept any request from any system to delete a job. The wimpy  requests must originate from port 721-731 restriction can be circumvented with a PC and a simple hacking program. Sigh& $:-~LPC - LPD/BSD Printer ControlThe LPD/BSD system usually provides a LPC program that is used to control the LPD activities. Traditionally it does this by reading and writing files in the spool queue, and changing permissions on directories The details of this are too ugly for public discussion. You really don t want to know. This architecture means that you must log onto the server as ROOT to control the print queues LPC - LPRng VersionLPRng extended the RFC1179 protocol to add additional commands for LPD server administration The LPC program generates the appropriate request and sends it to the server The server will then carry out the command WARNING The observant and suitably paranoid administrator will have noted the horrible security loophole that this has opened Don t fret - we have fixed this$mLPC - Basic Commandsstart - enable queue for printing and start unspooling jobs stop - disable unspooling of jobs enable - allow jobs to be spooled disable - prevent jobs from being spooled status - show print spool queue status This is simply same as LPQ, but different format ,,  LPC - LPRng Additional Commandsabort - kill off the filters doing printing and don t restart printing Used when a job gets hung up, the filter is unable to process it, or there is something very strange Job can then be removed using LPRM up - short for enable + start down - short for disable + abort restart (BSD) or kill (LPRng) - kill off the filter and then restart it:GG',LPC - LPRng Job Control )move - move job to another print queue lpc -Plp move lp2 john move jobs in the lp queue to the lp2 queue which were submitted by user john redirect - redirect all newly spooled jobs to another print queue lpc -Plp redirect lp2 jobs submitted to the lp queue will be placed in the lp2 queue X''A'!|%(LPC - LPRng Server Control&lpc reread the lpd server will reread the printcap and configuration information files lpc -Ppr printcap display the printcap information that the server has for printer pr lpc -Ppr debug 1,database,receive set real time debugging information for printer lpc -Ppr debug off terminates debuggingz LD"X LD"X  %  /I&Print Queue Job Priority and Selection<This is explicitly undefined by RFC1179 Most print queues run on a first come, first serve basis LPRng Extensions lpr -cxray will give job priority X (A is lowest, Z is highest), and put it in the xray class lpc class xray restricts printing to only jobs in class xray lpc class off allows all classes to be printed Brr a I* ,LPC TOPQ CommandThe LPC topq (top of queue) command will put a selected job at the top of the queue lpc -Plp topq john will put the first job of user john at the head of the list $U?>IDAdding A Printer !Adding A Printer - Printer ChecksMake sure printer works You would be surprised at how many problems during installation are traced to non-working printers Check out network connection by using diagnostics or direct connection via lpr lpr -Praw@ipaddr /tmp/log General debugging level is 1, and network operation tracing is enabledDc'Gd&F>dLServer Operation TracingFor all operations except job reception and printing, trace output is sent to STDERR Example: lpd -D1,network -F 2>/tmp/log The -F flag causes the server to stay in the foreground, and allows the server to be easily terminatedD^g_f,]l!Debugging Spooling and Unspooling When a spooling or unspooling operation is carried out by the LPD server, the printcap entry is checked for debugging flags (db) and log file (lf) entries lp:sd=/usr/spool/lp:lf=log :db=1,receive,network:max_log#1000 If the log file exists, log and trace information is appended to it When the log file exceeds the max_log (Kbyte) limit, it is truncated to the min_log size This technique allows tracing of job flows through the system in a simple and easy to follow manner^?~ ? 1 &  Fixing ProblemsLMany of the times you will discover that LPRng balks at accepting a job from some other spooling software due to non-compliance with RFC1179 or what can be considered a security risk You can force LPRng to accept the job, but it will insist on  sanitizing it before using it To do this, set the fix_bad_job value in the /etc/lpd.conf file to true. # fix bad control files and data file names # fix_bad_job@ fix_bad_job (_H_HP)}VInstalling and Setting Up LPRng  Installing LPRng Get the source code from a distribution site ftp://ftp.astart.com/pub/LPRng/ Get the distribution (LPRng-version.tgz) Get the filters as well (LPRng_filters-version.tgz) You will need ANSI C compiler, GNU Make, GNU Zip (gzip) Uncompress and tar the distribution gunzip -c LPRng-*.tgz |tar xf - Configure, compile, and install the code (see documentation for details configure; make clean all install Install the default configuration and permissions files make default -Z}Z\Z ZHZ"Z8Z Z-\ H"8 7  4%LPRng's checkpc Program(  NThe checkpc program reads the printcap files and checks the system spool directories for consistency with the printcap information When invoked by root, checkpc -f will change permissions and create the required files and directories It can also be used to remove old files and truncate log files. See the checkpc man page for details6O b G "Setting Up LPRng on BSD Systems +You must first stop the current LPD ps -axu | grep lp get the LPD PID kill pid Run checkpc to fix the permissions, etc... checkpc -f Edit the rc.local or other rc file to start LPRng lpd if [ -f /etc.../printcap ] ; then echo -n ' lpd' ; /usr/local/bin/lpd; fi; Start lpd and test the system lpd$.+ 6L$+ 6L#    Setting Up LPRng on Solaris/SVR4 The default printing system on Solaris is the lp print spooler. You must first disable this, as well as the various network print services lpshut; nlsadmin -r lpd tcp; nlsadmin -r lp tcp; Check the /etc.../printcap file, then run checkpc to fix the various system files checkpc -f Next, modify the rc files to start lpd instead of lpsched Reboot the system Check the system using lpq, lpr, etc....1R u.\1 8 u-[    ) LP System EmulationDWhen the various LPRng clients are invoked using the LP system names, they will emulate the lp system behavior. This can be done by making symbolic links to the various files: ln -s lpr lp; ln -s lprm remove; ln -s lpq lpstat; This allows programs which require the LP print system to directly use the LPR print facilities:3`3`FR bLoad Sharing and Printer PoolsPrinter Pools and Load Sharing}The LPRng software can do load sharing between a set of printers by having a master spool queue and a set of servers printersuLoad Sharing Details@The jobs in the master queue are sorted by priority When a slave printer is idle, the top priority job in the master queue will be moved to the I dleslave printer queue Example Printcap Entries: master:ss=serv1,serv2 :sd=/var/spool/lpd/master serv1:sv=master :sd=/var/spool/lpd:lp=/dev/pr1:... serv2:sv=master :sd=/var/spool/lpd:lp=/dev/pr2:& Jobs can also be spooled directly to the slave printer queues as well < GGL    N:Load Sharing Details (Cont d)The LPD server tries to use slave printers in round robin order If a slave queue is disabled, no new jobs will be placed in it Slave printers must not perform spooling or load balancing will not work correctly Bounce Queues Bounce Queues and FiltersSometimes it is necessary to perform filtering actions on jobs and then send the job to another print queue This is common when dealing with network printers, or when you want to have special actions performed by a special queue Reasons for BQ Use{#do 2 pages per page up # WRONG Method pr2up:lp=realpr@host:if=ps2up #real printer realpr:lp=pr%9100:sd=/sd:if=ifhp The pr2up printer simply passes 'f' format jobs forwards all job to the real printer, and does not pass the data files through the ps2up filter LPR will look at the pr2up entry and decide to send jobs directly to realpr, so they will never get put into the queue(tt- -Correct BQ Use#do 2 pages per page up # CORRECT Method pr2up:lp=pr2up@host:if=ps2up :sd=/sd/pr2up:bq=realpr@host #real printer realpr:lp=pr%9100:sd=/sd/realpr:if=ifhp The pr2up printer now has an entry that will force the LPR program to send the job to the pr2up queue LPR now look at the pr2up entry, sees the bq entry, and will pass the data files through the ps2up filter The output of the filter will then be sent to the realpr queue(/ oAlternate BQ Printcap #clients see this pr2up:lp=pr2up@host realpr:lp=realpr@host #lpd server adds this pr2up:server:if=ps2up :sd=/sd/pr2up:bq=realpr@host realpr:server:lp=pr%9100:sd=/sd/realpr :if=ifhp (  * Update Data File FormatsAfter the data file has been modified, the original format may be incorrect Example: you want to change the original f format to l so that no further modifications are made The new format entry does this pr2up:server:if=ps2up :sd=/sd/pr2up:bq=realpr@host :new_format=flvl New format entries are pairs of characters; the first is the original format and the second is the new format after processing Note that the control file is changed irregardless if there is a filter for the particular format LFFbEditing Control Files@A bounce queue can also be used to modify a control file. This is commonly needed when either the format of the control file is unsuitable for the destination printer, or when data file formats need to be modified as a result of filtering prgif:lp=realpr@host:sd=/sd:rf=/gif2ps :edit_cf=/usr/lib/cf_editor The cf_editor filter is given the control file and can edit as well. Note that this can include actions such as removing job files. This horrible kludge is needed when dealing with vintage software that produces control files incompatible with newer network printers:D D   Routing Jobs to Spool Queues RoutingISometimes it is necessary to dynamically decide the spool queue to use based on information in either the control file or the format of data files For example: large, medium or small jobs For example: special color processing This is not the same a load sharing, which makes decisions based only on the availability of printers IRouting Filterelp:lp@host lp:server:sd=/var/spool/lp :router=/usr/lib/filter/router The LPD server will put jobs into the spool queue When unspooling them, it will pass the control file through the routing filter The output of the routing filter (on its STDOUT) will be the new printer name You can combine Bounce Queues and Routing, but the results are not predictable(F F ~W Host Specific Printcap Entries  Host Specific Printcap Entry UThe oh (only for this host) entry restricts which host will use a printcap entry Example: lp:oh=*.astart.com,130.191.163.0/24 :lp=lp1@server lp:oh=*.sdsu.edu,130.10.0.0/24 :lp=lp2@server Values are lists of GLOB expressions or IP address and mask values If the host name or address matches, then the printcap entry can be used by the hostLZcTcB   ~ IPart 4 Horrible Problems Permissions Authentication Accounting DefaultsJJ PermissionsyAdministrators may need to restrict access to various printing facilities for policy or financial reasons Most print spooler systems have some sort of mechanism for restricting access Problem with RFC1179 based systems is sparse information available to make decisions You have the endpoint of a connection You have a request type Some requests have a user name, others do not$ m mLPRng Permissions File%Based on Packet Filter concept File contains a list of ACCEPT or REJECT entries Requests are test against entries until a match is found If the result is ACCEPT then the operation is allowed If the result is REJECT then the operation is not allowed You can also put in default ACCEPT or REJECTExample1# Accept LPR requests only from 10 sn ACCEPT SERVICE=R REMOTEIP=10.0.0.0/8 REJECT SERVICE=R # Alternative to the above DEFAULT ACCEPT REJECT SERVICE=R NOT REMOTEIP=10.0.0.0/10 # Example 2O# Let only root and admin on server # have LPC control permissions ACCEPT SERVICE=C SERVER REMOTEUSER=root,admin REJECT SERVICE=C # LPRM Remove requests only from # same host and user as spooled them ACCEPT SERVICE=M SAMEHOST SAMEUSER # Allow test on tester to remove files ACCEPT SERVICE=M REMOTEUSER=test REMOTEHOST=tester.astart.comPPEAuthenticationRFC1179 does not provide any authentication methods Since it is trivial to forge network level packets, etc, this can be a major problem LPRng solution was to provide a general purpose method of adding authentication Currently, PGP and Kerberos authentication is supported,]  AuthenticatorA connection is established, a special AUTH request is sent Part of the AUTH request is the supported authentication methods The reply contains the chosen method to be used Each end of the connection starts an authenticator program which will then perform the various authentication and/or encryption to be done The authenticator programs accept information from the LPRng programs, encapsulate it, and then transfer it to the other endp@ Example: PGPTo use PGP authentication, each LPRng server will require a secret key, and each LPRng user will need the public key of the server Each user will need to provide his public key to the server as well Each RFC1179 request and/or reply is signed with the appropriate key, identifying it as originating from the correct endpoint The use of a Public Key Server to supply user and/or LPRng server keys greatly simplifies this operation If you are really paranoid, you can also encrypt all requests and data file transfers >!,$Forcing AuthenticationThe permissions file is used to specify that some form of authentication must be done ACCEPT SERVICE=R,M,C AUTH=pgp,kerberos REJECT SERVICE=R,M,C NOT AUTH 0VFVE,p  AccountingPDon t spend dollars on counting pennies Levels of accounting Numbers of jobs submitted completed correctly? Incorrectly? Numbers of pages used how do you find this out Z="="Job Level AccountingzPrintcap af entry specifies the accounting file If the af file exists, then a message is written to it at the start and successful conclusion of each job Multiple starts with no conclusion indicates job failure or somebody waited until next to last (blank) page came out and turned off printer& Students& I mean users& become very sophisticated at this type of thing. Less common today given large numbers of printers usually available for use$$ -Page Level AccountingUsually required by some sort of administrative bean-counter who also counts individual paperclips and pencils Also, may be useful when costs need to be allocated on a project or account basis Most Laser based printers usually have a page counter built into them, so that you can determine the number of pages it has printed for servicing purposes If this pagecounter is accessible via the network interface, then you can get the value before and after a job, and determine the exact number of pagesf Accessing Page CountersThere are no standard methods to do this Each model of printer appears to have a different method Even documented methods may not work on printers High throughput printers try to do job buffering, and do not report the correct page count You need to wait for TRUE END OF JOB This really slows down operation Page Counters Lie Usually value is stored in EEPROM on printer You may get the stored EEPROM value, not currentl)j\F^)j\F^Configuration and Defaults The /etc/lpd.conf file can be used to set values of configuration variables Example: # fix bad control file information fix_bad_job The file format is identical to the printcap file, but you do not need the leading colons (:) and each entry must be on a single lineVV/ E/>  YConfiguration VariablesNThere are zillions of configuration variables used by LPRng. Most of these were created in order to configure LPRng operation to be compatible with very strange spooling systems or very nasty hardware Unless you have problems, you can safely ignore them. Really. If you have problems, then you better start reading the LPRng HOWTO.>63,Part 5 Multi-platform Printing and Gateways--Print Job Preparation>When a print job is generated, the information must be in a format suitable for the destination printer. There are two general approaches to the problem: Do the conversion as late as possible in the translation process (late binding) Do the conversion as early as possible in the translation process (early binding) Late binding is favourable to the print generation program, as it does not need to know what specific printer will be used Early binding allows the print generation program to take advantage of any special options that are available on a particular printer <ZZZL LP / LPD Uses Late BindingXThe LP and LPD/BSD print spoolers were designed to use the late binding model The data file format indications were supposed to indicate the type of file and the type of conversion needed The use of PostScript and PCL largely eliminated this need Most UNIX programs cannot take advantage of printer capabilities that are well known to the user YZYLPR -Z OptionsJLPR overcomes some of these problems by allowing users to specify options that are passed to the print filters lpr -Zupperbin,duplex filename The convention is that filters will scan the -Z options for values and use these values to control printing Since these are printer specific, the options can be different for each printer :oo,o  MS Windows/MAC Use Early BindingSystem configuration information records the available printers, I.e. those which have graphic to printer format converters available to the user  Early Binding and Job Generation In order to print, the program needs to select a system configured printer Configuration information includes the format of information to be supplied to a translation program The translation program Additional parameters for the translation program The information to be printed is processed by the translation program The output of the program is then sent either directly to a hardware device via another program or put in a spool file Spool files are then transferred either to the hardware device or a network printer6LLDriversIn the MS Windows environment, Printer drivers are actually several things Graphic to print file conversion programs print file to hardware interface programs This model leads to much confusion, as when errors occur it is difficult to determine if the problem is in the graphic to file conversion part of the driver or in the file to hardware device part of the driver This is even more painful when you do network printing, as now you have to distribute drivers to all printer users6LTGLTGNetwork PrintingIf you plan to print to a non-MS based print spool, choose a print driver which is as vanilla as possible Try to generate PostScript or PCL Try to generate PostScript Level 2 or 3 and the Document Structure Standards$jojo Win95 and LPR/BSD Print SpoolersWhile Win95 does not directly support LPD print spooling, there are several shareware packages that provide this. Recommended: Windows LPR Spooler Version 4.1 Author: Susanne Heil, EDV-Vertieb ftp://ftp.astart.com/LPRng/wlprs41.exe Implements a very good LPR/BSD RFC1179 compliant print server (LPR) and status monitor (LPQ) Uses Winsock interface, and works with Microsoft, FTP, and several other TCP/IP Winsock.dll:sx(b  AlternativesThere are other print spoolers available, as well as some that operate with DOS See the LPRng FTP site ftp://ftp.astart.com/LPRng/WINDOWS Other utilities are there as well:g#"g"#>X+Why Use Wslpr?If you want to have a printer pool, you will be using LPRng or some other UNIX based server (unless you have big bucks) It runs over TCP/IP and can go through firewalls 6pWhy Not JetDirect? Be aware that using different network protocols and the JetDirect software has resulted in locking up most HP printers Most of the software testing was done in situations where there as little if any non-MS network activity, it appears 8  Windows 98Has support for RFC1179 Unfortunately, it appears to have problems when connections time out and periodically jobs just vanished There may be a new version out Real Soon Now Stick with 3rd Party Spoolers!Windows NT Server LPR/BSD GatewayWindows NT supports remote LPR printers. It will translate print jobs spooled to an NT server by creating a control file and sends the data file Unfortunately, there are some minor problems with control file format, missing fields, etc., but these are easily handled by most LPD servers NT also ACCEPTS print jobs for printing This means you can use an NT server for gatewaying to the NT printer environment Beware that there are security holes lurking in all of this q \ LPRng on NTLPRng is being ported to NT Will support the basic LPRng functionality Filters are very messy under NT cannot easily fork processes memory leaks in NT DLLs H+ 7+ 7$-eNovell Printer LPD/BSD Gateways Novell also supports a LPD/BSD gateway facility If your Novell server has TCP/IP support installed and active, you can set up a print queue on a Novell server that will forward jobs to a LPD/BSD server. You can also send jobs to the Novell server and it will print them Samba, SMB, and LPD/BSD GatewaysIf you do not want to install Wslpr on you Win95 system, or do not want to set up an NT Server, the Samba system provides an alternative Samba implements SMB over NetBUI and IPX While it is usually used for file servers, Samba also supports a very nice LPD/BSD gateway facility While not being personally familiar with the details of Samba, reports have indicated that it was trivial to set up and get working "It worked first time, out of the box." Kurt Reynolds<,/ PCNFS and PCNFSD Gateways to LPDPCNFS by Sun Microsystems implements NFS (Network File System) support for PCs. As part of this support, Sun provides source code for the PCNFSD server which is used to authenticate PCs and provide print services via the host that the server runs on. The LPRng distribution has a set of patches for the PCNFSD distribution that interface the PCNFSD server to the LPRng print faciltities. They also close a couple of minor security problems involving unchecked string lengths and stack overflows>f nApple and LPR/BSDThere are several products for Apple NFS support that use the PCNFSD facilities to provide print services. Several people have demonstrated this working very well LP (Solaris) to LPD PrintingSolaris 2.5 System Administration Guide, Vol 2 Chapter 48, Example - Adding Access to a Remote Printer - remote@host # define remote system as BSD, and force connection to be dropped when idle, 1 minute timeout between connections lpsystem -t bsd -T 0 -R 1 host # printer is the lp name for the print queue lpadmin -p printer -s host!remote \ -T unknown -I any accept printer; enable printer lpadmin -p printer -D "remote printer" lpadmin -d printer # make default printervfj p+     (   N##Monitoring Printer Status with SNMP"One of the weak points of distributed print spooling is monitoring printers for error conditions One of the benefits of network printers and the TCP/IP protocol is that you can query them for status from several different locations One of the nasty problems is that most printers do not provide good status indications The good news is that printer vendors are now implementing SNMP agents in most of their printers that allow SNMP managers to easily access printer status The bad news is that each vendor has different extensions and facilities Perl, Tcl/TK to the Rescue?$8I have seen several nice printer monitoring systems developed using Perl and Tcl/TK. Unfortunately, the most elegant ones depended on commercial SNMP managers such as OpenView and SunNetManager. Several interested parties have been working on a simple shareware monitor; watch the LPRng ftp site for detailsbCZ XWhere Do I Get Help?1. If it is a commercial system, try your vendors support group 2. comp.peripherals.printers news group has a large number of discussions about printers and spoolers 3. lprng@iona.ie mail list for LPRng related issues Send mail to lprng-request@iona.ie with subscribe in the body 4. AStArt Technologies provides commercial support for LPRng and offers network consulting and management services. (Shameless plug) Good Luck!4   -VSummaryIf you are going to run printers in a multiplatform environment, you will need to deal with the issues of gateways The LPD/BSD facilities, as defined by RFC1179, provide a common platform for use. While by no stretch of the imagination can this be regarded as an optimal solution, it works well in an environment with a large number of printers which need central mangement and control,%;  Questions and Answers/W  ` ̙33` 3` 3333f` 999MMM` f` f3` 3>?" dd@ z?" dd@  " @ `"  n?" ddV %%KKppPR    @ ` ` p>> (    Zvgֳgֳ ?@ v T Click to edit Master title style! !:  T4 vgֳgֳ ?p v RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S   ` vgֳgֳ ?` v =*   ` vgֳgֳ ?  v ?*   `T!vgֳgֳ ?  v ?*j"  BG 1?|j"  BG 1?44LH  0޽h? ? ̙33  DataTemplate.pot  H@` (     Zʖgֳgֳ ?p  T Click to edit Master title style! !  T˖gֳgֳ ? `    W#Click to edit Master subtitle style$ $   `̖gֳgֳ ?`  =*   `d̖gֳgֳ ?   ?*   `̖gֳgֳ ?   ?*j"  BG 1?|j"  BG 1?44LH  0޽h? ? ̙33 0 @n(    TǖjJjJ ?s%   y* V%%KKpp  TDȖjJjJ ? 0%  {* V%%KKppp  01 ?JD  :  TȖm m  ? K!  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  ZɖjJjJ ?s   y* V%%KKpp  ZdɖjJjJ ? 0  {* V%%KKppH  0jB? ? ̙33 00(  H  0jB ? ̙33t $P(     f$͖gֳgֳ ?      f͖gֳgֳ ? H`   H  0޽h ? ̙33t  $p( =z$Jz@>    fΖgֳgֳ ?@      fϖgֳgֳ ?p  H  0޽h ? ̙33  t(  tl t C Ж@   l t C 4qp  H t 0޽h ? ̙33  ( w l  C Tr@   l  C r   H  0޽h ? ̙33  x( $@ xl x C t@   l x C tp  H x 0޽h ? ̙33t  $$( ֳ $ $  fsgֳgֳ ?@    $  ftsgֳgֳ ?0P  H $ 0޽h ? ̙33t  $((  ( (  fsgֳgֳ ?@    (  f4tgֳgֳ ?p  H ( 0޽h ? ̙33t  $0(  0 0  fTugֳgֳ ?@    0  fugֳgֳ ?p  H 0 0޽h ? ̙33t  $4( ֳ 4 4  ftvgֳgֳ ?@    4  fvgֳgֳ ?p  H 4 0޽h ? ̙33  bZ8(  8 8  fwgֳgֳ ?    H 8 0޽h ? ̙33b   <(  < <  fTxgֳgֳ ?@    <  fxgֳgֳ ?0    <0 NA ? ?moh $ 00 H < 0޽h ? ̙33t  $@(  @ @  fygֳgֳ ?@    @  ftygֳgֳ ?p  H @ 0޽h ? ̙33t  $ D(  D D  fzgֳgֳ ?@    D  fzgֳgֳ ?p  H D 0޽h ? ̙33t  $0H(  H H  f|gֳgֳ ?@    H  ft|gֳgֳ ?p  H H 0޽h ? ̙33t  $@L(  L L  f͖gֳgֳ ?@    L  fgֳgֳ ?p  H L 0޽h ? ̙33t  $PP(  P P  fgֳgֳ ?@    P  fDgֳgֳ ?p  H P 0޽h ? ̙33t  $`T(  T T  fgֳgֳ ?@    T  fgֳgֳ ?p  H T 0޽h ? ̙33t  $pX(  X X  f$gֳgֳ ?@    X  fgֳgֳ ?p  H X 0޽h ? ̙33t  $\(  \ \  fgֳgֳ ?@    \  fgֳgֳ ?p  H \ 0޽h ? ̙33t  $`(  ` `  fdgֳgֳ ?@    `  fgֳgֳ ?p  H ` 0޽h ? ̙33t  $d(  d d  fgֳgֳ ?@    d  fgֳgֳ ?p  H d 0޽h ? ̙33t  $h(  h h  fgֳgֳ ?@    h  f$gֳgֳ ?p  H h 0޽h ? ̙33t  $l(  l l  fgֳgֳ ?@    l  fDgֳgֳ ?p  H l 0޽h ? ̙33t  $p(  p p  fgֳgֳ ?@    p  fqgֳgֳ ?p  H p 0޽h ? ̙33t  $t(  t t  fmgֳgֳ ?@    t  f4ngֳgֳ ?p  H t 0޽h ? ̙33t  $x(  x x  fngֳgֳ ?@    x  fTogֳgֳ ?p  H x 0޽h ? ̙33t  $|(  | |  fogֳgֳ ?@    |  fpgֳgֳ ?p  H | 0޽h ? ̙33  bZ(     fpgֳgֳ ?   H  0޽h ? ̙33t  $ ( zzH4    f4qgֳgֳ ?@      fqgֳgֳ ?p  H  0޽h ? ̙33t  $0(     fsgֳgֳ ?@      ftsgֳgֳ ?p  H  0޽h ? ̙33t  $@(     f4tgֳgֳ ?@      ftgֳgֳ ?p  H  0޽h ? ̙33t  $P(     fTugֳgֳ ?@      fugֳgֳ ?p  H  0޽h ? ̙33t  $`(     fvgֳgֳ ?@      f4wgֳgֳ ?p  H  0޽h ? ̙33t  $p( Og    fgֳgֳ ?@      f$gֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      fDgֳgֳ ?p  H  0޽h ? ̙33t  $( TQg    fdgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $(     fdgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $( w0w00 d    fgֳgֳ ?@      fDgֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      fdgֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      fDgֳgֳ ?p  H  0޽h ? ̙33t  $(     fdgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $( X    fԪgֳgֳ ?@      f4gֳgֳ ?p  H  0޽h ? ̙33t  $ (     f4gֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $0(     fgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $@( ֵg    f4gֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $P(     fgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $`(     fgֳgֳ ?@      fTgֳgֳ ?p  H  0޽h ? ̙33t  $p(     ftgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      ftgֳgֳ ?p  H  0޽h ? ̙33t  $(     f4gֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      ftgֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      fTgֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      f4gֳgֳ ?p  H  0޽h ? ̙33t  $(     fgֳgֳ ?@      ftgֳgֳ ?p  H  0޽h ? ̙33t  $(     flgֳgֳ ?@      f$mgֳgֳ ?p  H  0޽h ? ̙33t  $(     fmgֳgֳ ?@      fDngֳgֳ ?p  H  0޽h ? ̙33t  $(     fdogֳgֳ ?@      fogֳgֳ ?p  H  0޽h ? ̙33t  $ (     fDqgֳgֳ ?@      fqgֳgֳ ?p  H  0޽h ? ̙33t  $0(     frgֳgֳ ?@      f$sgֳgֳ ?p  H  0޽h ? ̙33t  $@ (       fsgֳgֳ ?@       fsgֳgֳ ?p  H   0޽h ? ̙33t  $P(     fdugֳgֳ ?@      fugֳgֳ ?p  H  0޽h ? ̙33  bZ`(     f$vgֳgֳ ?    H  0޽h ? ̙33b   p(     fvgֳgֳ ?@      fvgֳgֳ ?0    0 NA ? ?h $ 00 H  0޽h ? ̙33t  $(     fwgֳgֳ ?@      fxgֳgֳ ?p  H  0޽h ? ̙33b    (       fgֳgֳ ?@       fTgֳgֳ ?@     0 NA ? ?p h $ 00 H   0޽h ? ̙33b   $(  $ $  ftgֳgֳ ?@    $  fgֳgֳ ?@    $0 NA ? ?p  h $ 00 H $ 0޽h ? ̙33b   ((  ( (  fgֳgֳ ?@    (  fTgֳgֳ ? `   (0 NA  ? ?EF h  $ 00 H ( 0޽h ? ̙33b   ,(  , ,  fgֳgֳ ?@    ,  ftgֳgֳ ? `   ,0 NA  ? ?_& h  $ 00 H , 0޽h ? ̙33t  $0(  0 0  f4gֳgֳ ?@    0  fgֳgֳ ?p  H 0 0޽h ? ̙33  bZ4( t 4 4  fgֳgֳ ?p    H 4 0޽h ? ̙33t  $8( g 8 8  fTgֳgֳ ?@    8  fgֳgֳ ?p  H 8 0޽h ? ̙33t  $<(  < <  fgֳgֳ ?@    <  fgֳgֳ ?p  H < 0޽h ? ̙33t  $@(  @ @  fgֳgֳ ?@    @  fgֳgֳ ?p  H @ 0޽h ? ̙33t  $ D(  D D  fgֳgֳ ?@    D  f4gֳgֳ ?p  H D 0޽h ? ̙33t  $0H(  H H  ftgֳgֳ ?@    H  fgֳgֳ ?p  H H 0޽h ? ̙33t  $@L( 8zzz L L  fgֳgֳ ?@    L  fgֳgֳ ?p  H L 0޽h ? ̙33  P( `) l  C t@   l  C p  H  0޽h ? ̙33t  $`P( Tg P P  fgֳgֳ ?@    P  fgֳgֳ ?p  H P 0޽h ? ̙33t  $pT(  T T  ftgֳgֳ ?@    T  fgֳgֳ ?p  H T 0޽h ? ̙33t  $X( X X X  fgֳgֳ ?@    X  ftgֳgֳ ?p  H X 0޽h ? ̙33t  $\( g \ \  fgֳgֳ ?@    \  fTgֳgֳ ?p  H \ 0޽h ? ̙33t  $`(  ` `  fdʰgֳgֳ ?@    `  fʰgֳgֳ ?p  H ` 0޽h ? ̙33t  $d(  d d  f˰gֳgֳ ?@    d  fD̰gֳgֳ ?p  H d 0޽h ? ̙33  bZh(  h h  fdͰgֳgֳ ?0P    H h 0޽h ? ̙33t  $l( X l l  fͰgֳgֳ ?@    l  f$ΰgֳgֳ ?p  H l 0޽h ? ̙33t  $p(  p p  fΰgֳgֳ ?@    p  fDϰgֳgֳ ?p  H p 0޽h ? ̙33  (  l  C ϰ@   l  C аp  H  0޽h ? ̙33t  $t(  t t  fdаgֳgֳ ?@    t  fаgֳgֳ ?p  H t 0޽h ? ̙33t  $x(  x x  fҰgֳgֳ ?@    x  fӰgֳgֳ ?p  H x 0޽h ? ̙33b    |(  | |  f$԰gֳgֳ ?@    |  f԰gֳgֳ ?@    |0 NA ? ?p h $ 00 H | 0޽h ? ̙33  0( TjUk l  C ԰@   l  C Dհp  H  0޽h ? ̙33t  $@(     fgֳgֳ ?@      fDYgֳgֳ ?p  H  0޽h ? ̙33t  $P(     fZgֳgֳ ?@      f$[gֳgֳ ?p  H  0޽h ? ̙33t  $`(     f[gֳgֳ ?@      fD\gֳgֳ ?p  H  0޽h ? ̙33  p(  l  C \@   l  C ]p  H  0޽h ? ̙33  (  l  C d]@   l  C ]p  H  0޽h ? ̙33t  $(     f^gֳgֳ ?@      f^gֳgֳ ?p  H  0޽h ? ̙33  (  l  C `@   l  C d`p  H  0޽h ? ̙33  (  l  C a@   l  C ap  H  0޽h ? ̙33t  $(     fDbgֳgֳ ?@      fbgֳgֳ ?p  H  0޽h ? ̙33  0(( w   # ldcgֳgֳ ?@     # lcgֳgֳ ?p  H  0޽h ? ̙33t  $( X    fdgֳgֳ ?@      fdgֳgֳ ?p  H  0޽h ? ̙33t  $(     f$gֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33  ( r  l  C @   l  C dp  H  0޽h ? ̙33  (  l  C @   l  C p  H  0޽h ? ̙33t  $ (     fDgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $0(     fdgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $@(     fgֳgֳ ?@      fDgֳgֳ ?p  H  0޽h ? ̙33t  $P(     fgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $`(     fgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33t  $p(     fDgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33  ( r  l  C d@   l  C p  H  0޽h ? ̙33t  $(     fdZgֳgֳ ?@      f䏸gֳgֳ ?p  H  0޽h ? ̙33  ( 8t l  C d@   l  C đp  H  0޽h ? ̙33  0(( w   # l䒸gֳgֳ ?@     # lDgֳgֳ ?p  H  0޽h ? ̙33  0(( zd    # lgֳgֳ ?@     # lgֳgֳ ?p  H  0޽h ? ̙33  0(( w   # l$gֳgֳ ?@     # lgֳgֳ ?p  H  0޽h ? ̙33  0(( z#   # lDgֳgֳ ?@     # lgֳgֳ ?p  H  0޽h ? ̙33  0(( zT   # ldgֳgֳ ?@     # lėgֳgֳ ?p  H  0޽h ? ̙33  bZ(     fgֳgֳ ?    H  0޽h ? ̙33t  $( w0w00 d    f䘸gֳgֳ ?@      fDgֳgֳ ?p  H  0޽h ? ̙33t  $ (     fgֳgֳ ?@      fdgֳgֳ ?p  H  0޽h ? ̙33  0(  l  C Ě@   l  C $p  H  0޽h ? ̙33  @$(  r  S @   r  S p  H  0޽h ? ̙33  P$(  r  S D@   r  S Dp  H  0޽h ? ̙33  `( w l  C E@   l  C Fp  H  0޽h ? ̙33  p(  l  C F@   l  C $Gp  H  0޽h ? ̙33t  $(     fGgֳgֳ ?@      fGgֳgֳ ?p  H  0޽h ? ̙33t  $(     fDHgֳgֳ ?@      fHgֳgֳ ?p  H  0޽h ? ̙33t  $(     fJgֳgֳ ?@      fJgֳgֳ ?p  H  0޽h ? ̙33  ( 2 l  C dL@   l  C Lp  H  0޽h ? ̙33t  $( .2     fMgֳgֳ ?@      fDNgֳgֳ ?p  H  0޽h ? ̙33  0(( r    # ldOgֳgֳ ?@     # lOgֳgֳ ?p  H  0޽h ? ̙33  ( x l  C $P@   l  C p  H  0޽h ? ̙33t  $( ĺg    fĹgֳgֳ ?@      fŹgֳgֳ ?p  H  0޽h ? ̙33t  $ (       f4ƹgֳgֳ ?@      fƹgֳgֳ ?p  H  0޽h ? ̙33   (  l  C ȹ@   l  C tȹp  H  0޽h ? ̙33  $( 8 r  S ȹ p  r  S 4ɹ  `    H  0޽h ? ̙33  0  (   l   C ɹ@   l   C ɹp  H   0޽h ? ̙33  @ $(  $l $ C ʹ@   l $ C ˹p  H $ 0޽h ? ̙33 P 0( w x  c $t˹ p  x  c $˹  `    H  0޽h ? ̙33  ` (  l  C 4̹@   l  C ̹p  H  0޽h ? ̙33  p (  l  C ̹@   l  C T͹p  H  0޽h ? ̙33   (  l  C ι@   l  C tιp  H  0޽h ? ̙33    $( /?  r   S 4Ϲ@   r   S Ϲp  H   0޽h ? ̙33   (  l  C ^@   l  C T_p  H  0޽h ? ̙33  P ( }@m@ l  C @   l  C p  H  0޽h ? ̙33  bZ (     ft`gֳgֳ ?|    H  0޽h ? ̙33t  $ ( g    f`gֳgֳ ?@      f4agֳgֳ ?p  H  0޽h ? ̙33t  $ ( 侼g    fbgֳgֳ ?@      fcgֳgֳ ?p  H  0޽h ? ̙33t  $ (     fcgֳgֳ ?@      f4dgֳgֳ ?p  H  0޽h ? ̙33t  $ (     fTegֳgֳ ?@      fegֳgֳ ?p  H  0޽h ? ̙33t  $ (     f4ggֳgֳ ?@      fggֳgֳ ?p  H  0޽h ? ̙33  bZ (     fThgֳgֳ ?    H  0޽h ? ̙33t  $ (     fhgֳgֳ ?@      figֳgֳ ?p  H  0޽h ? ̙33  0 ((  (l ( C `@   l ( C ip  H ( 0޽h ? ̙33  @ ,(  ,l , C 4j@   l , C jp  H , 0޽h ? ̙33  <( w <l < C $2 p  l < C 2  `    H < 0޽h ? ̙33t  $P (     fTĹgֳgֳ ?@      fgֳgֳ ?p  H  0޽h ? ̙33  ` 4(  4l 4 C t@   l 4 C p  H 4 0޽h ? ̙33  p 8(  8l 8 C @   l 8 C p  H 8 0޽h ? ̙33   @$( A< @r @ S d4@   r @ S 4p  H @ 0޽h ? ̙33   D(   Dl D C 8@   l D C 6p  H D 0޽h ? ̙33t  $ (     fƖgֳgֳ ?@      fdƖgֳgֳ ?p  H  0޽h ? ̙33  H(   Hl H C 5 p  l H C 3  `    H H 0޽h ? ̙33t  $  (       fgֳgֳ ?@       fgֳgֳ ?p  H   0޽h ? ̙33   L(  Ll L C @   l L C Tp  H L 0޽h ? ̙33 0 P(  Pl P C  p  l P C 4  `    H P 0޽h ? ̙33  @ T( r  Tl T C @   l T C Ԫp  H T 0޽h ? ̙33  bZ ((  ( (  fgֳgֳ ?P    H ( 0޽h ? ̙33  ` \( _ \l \ C t@   l \ C ԧp  H \ 0޽h ? ̙33  p `(  `l ` C t@   l ` C ԰p  H ` 0޽h ? ̙33   d( (6"4 dl d C 4@   l d C D3p  H d 0޽h ? ̙33   l$(  lr l S @   r l S D p  H l 0޽h ? ̙33   p( r  pl p C "@   l p C d!p  H p 0޽h ? ̙33   t(  tl t C $@   l t C d$p  H t 0޽h ? ̙33   x(  xl x C %@   l x C D&p  H x 0޽h ? ̙33   |(  |l | C (@   l | C $(p  H | 0޽h ? ̙33   h(  hl h C D9@   l h C 4p  H h 0޽h ? ̙33   ( ljPl̻ l  C d'@   l  C D)p  H  0޽h ? ̙33   ( ̙33 l  C *@   l  C d*p  H  0޽h ? ̙33   ( c0** l  C +@   l  C p  H  0޽h ? ̙33   $( 5# r  S @   r  S p  H  0޽h ? ̙33  @ ( 4t l  C @   l  C p  H  0޽h ? ̙33  h`P X( r  X X # ltgֳgֳ ?P    H X 0޽h ? ̙33t  $ ,(  |t4 , ,  fTgֳgֳ ?@    ,  fgֳgֳ ?p  H , 0޽h ? ̙33t  $ 0(  0 0  fgֳgֳ ?@    0  f4gֳgֳ ?p  H 0 0޽h ? ̙33  ` (  l  C @   l  C 4p  H  0޽h ? ̙33b    4( X 4 4  fgֳgֳ ?@    4  fgֳgֳ ?P    40 NA ? ?h $ 00 H 4 0޽h ? ̙33  p (  l  C 4@   l  C  p  H  0޽h ? ̙33t  $ 8(  8 8  fgֳgֳ ?@    8  f gֳgֳ ?p  H 8 0޽h ? ̙33t  $ <(  < <  f gֳgֳ ?@    <  f gֳgֳ ?p  H < 0޽h ? ̙33t  $ @(  @ @  fT gֳgֳ ?@    @  f gֳgֳ ?p  H @ 0޽h ? ̙33   ( @N@ l  C 4@   l  C p  H  0޽h ? ̙33t  $ D(  D D  fğgֳgֳ ?@    D  f$gֳgֳ ?p  H D 0޽h ? ̙33   ( T`< l  C T@   l  C p  H  0޽h ? ̙33   ( , l  C d@   l  C p  H  0޽h ? ̙33t  $ H(  H H  fgֳgֳ ?@    H  fgֳgֳ ?p  H H 0޽h ? ̙33   (  l  C  @   l  C t p  H  0޽h ? ̙33t  $0 L(  L L  fgֳgֳ ?@    L  fgֳgֳ ?p  H L 0޽h ? ̙33t  $@ P(  P P  fdgֳgֳ ?@    P  fĢgֳgֳ ?p  H P 0޽h ? ̙33t  $P T(  T T  fgֳgֳ ?@    T  fDgֳgֳ ?p  H T 0޽h ? ̙33t  $` X(  X X  fĥgֳgֳ ?@    X  f$gֳgֳ ?p  H X 0޽h ? ̙33t  $ p(  p p  f/gֳgֳ ?@    p  f/gֳgֳ ?p  H p 0޽h ? ̙33t  $p \(  \ \  fgֳgֳ ?@    \  fgֳgֳ ?p  H \ 0޽h ? ̙33t  $ `(  ` `  fgֳgֳ ?@    `  fgֳgֳ ?p  H ` 0޽h ? ̙33t  $ d(  d d  fĨgֳgֳ ?@    d  f$gֳgֳ ?p  H d 0޽h ? ̙33t  $ h(  h h  fDgֳgֳ ?@    h  f.gֳgֳ ?p  H h 0޽h ? ̙33  bZ l(  l l  f$/gֳgֳ ?0    H l 0޽h ? ̙33D 0  ( ֳ    H1 ?ID      f$5m m  ? K!    H  0jB ? ̙33Hx |ս3H!$B@kEDB*!F@J" $MD(RM""_ilRQKRD!M{?gfgI6 F>vs~1̜0г[F~щk?bT_a\F E| Cm"ІhĀ. PtHA"z@/p9HW$@o\ }׃n&0A`0nC0m ),p Fv0|?`<&;$p n0 ~}`3,f9`.y`P A(% `X Rxju/?76F^"|n%O̿ø[(׌ xkyڣ]&)P2_ sQ*nxފ/Fh Sγx̂<[>ϩbU/˽ mF-JΫ oq ׯF߹v|_[] **Z wlyDucy":II\?}Lr UKr8Kr|ȱ:I|^*r)vr<VUgQx<AXւ)`X~ 6F k<*"x *o@ ~ ~^?[`;ء'۠W{G>? x}|/Q  pW d?9@=/h hl "q?>/Sܟ/8K"e7ߠ;H=@Op.I Wdp"sp5ׂ~:\o&0A`0nC0E[p}{e͛k`"` > ~Ɓ;x0Lw*r&)`*L{tp"e6 f0s9^<0*r E` x,A)#5kK x>ڦ,\W;P;'TS8˵`֜H+nfmVEK?=%<,O Wa<͍D{yF{$C\peMfN [Aq ksk }wCs 9nZWUq:N筅 d.ϟ.!ǻt=z]՜}Q9]]d' `3ɷ\'v"Cu l#xN^Ći0aPUs OƯ+t^s,}yJQRˈ]}Q}bN%y9.m)wOȲmgŻ˧XaʲkYAFL=qh[P;<>J>JZ~<Z]ULg 'ݑZԳվ.`*-En?[ Pz~"]6h[P=٢zS^-҅U-> q}˳.fQۺeyvj-!.t yuG5wj:NoqP8gԩTfu ~֜3a8=:3t>hH狣N,uӑəj2ɕW.>^'3SٿI'Y'٨c|X悪rm.x}yu y/O O\^cOҪ_Y!_I?Ϸ왤6޿[x qřS[gO{]$U>b+YJ>Mdħ4zҺGmWziM_,'6[=ٛG16]WuKgt #'t ]#w;ב{^W77 K1E2\Ir~yh3ʐ&=?ޟr~U *U +A9hx5J~voښk[s|@'E]c5xƿ채\ZUԞjV~3@Oc8 ueljkjKw&7qqؽR[ÚזJvWmP^΢ٳ]+{^﹪|#7Efp wۤ|E@z]ȅ%9Y@S/hL7QI_(S6VS3'K72a).2UXC(]r*w|iY*=h݁ouLa6«/>QTk_ӂ[U5[m֨?kyq֖=c3[tQ\+G4B㈶>PD6@xt 3t~%XzŢu-PO'J۞b*V+w Q1Xz3{'ؚ6 qzͺԋۅ0Ⳃ ~j ag]C>9`hqCC>MJ۞1*w|GOL'|="V(BљYΪ{Ίiub3梻ʷ0›Nqь.14ZN4_Q+Du~11X7x2oqߪChkjѐ2 CC>]۞Q*8]/EG^A Hy#eĸOUb`_˯@;uQڑcz\utuYd C]~{=n{nT UshJIpj7ԋ[>Ub:Я<-,j?QBK;;e(^s4iT1WlhЬ>TT1ae8R<-1%\ v uۥK"bEnB,¾X ׼_V)>^LcG6+V g%!ԍ՝lQj C]>yX3KTyEO;eoo ^vfs*Z,!ı_xDaßm~yB b4>pN˱iODryזe2Ts!ZYS|zwQ2Uzoc@i^tO^&acEYG⬬Tڂw^0e|#B]-Ӟ|= zsY|b&Q}S((;'r4j=~_O"vI+.ad{arq uMf9ߵoG6[j7axRC}ɹ^TiXlO:n#В|b١t١}i5 ࠃgbj&РOuq›?W*K Ŗ6JŬʬ}Qb[@xtkE)ֶb=tŖL.iO1.FqSlWC9nL6QM-nEPBu?uΜ ʯ /pR] b?dgb!S4dfw] ?⤊&56;|Nڟ$#fÿw?I{+"4fxr_v!صA'3|WW/v;^;A!gܝvWyEi;m.-=fGȮŶvWT>cJ^鲓{=Kb8;vt3|64L1^QdKj^>--$׽dӥ}F3|}5H`HFeI{~@e{0+u8ps3ґfz427'qz>M/<_yżhjY^E-):ݮٲ[A^mfC+rXNuبQ}zZiT91|xYyL{:/ER=n{:?^zЬ{:Zom}Vڪv}O'Ze/GځR;c${Lښ23|''mYvmB$]Z 6݃#h͹Nw/Щfr'="?ߩҺ/H;Lqxi+Tolq$=evx@I(2>6K3|_ vH766NKޔvfx<Ul5*lr^FxN V+r۴ؾ .V/Vsr7F-]J_LmvS(6JrQm#?A>(R MbH/6Fn͎Ϙ飳Wu7OիxcN[{/ȣhm>Xڞci*]%Z}@cYҝ5|>ҽ!OwEtc}t'^ZψophR-XWZ?V-S+''g8'OrQS+\E%(%oha-o'5rcP#+VlRƞ;k{mkg%};Y(.~<;}ީ1w텼sh6SSdQ?AK"*?'=9aV7?wYژ^Q  (V *o{___|ufㄚlC4-nG]WN(┲8axUGK{%z$u^/Sywa#ٮ+8U~A`21B|Bٮk]MC-GNJxJ(ut"N YlMW`NAٮ+xE={'7Ǒ]WNw(tc.sbz(vqח o8f9T)#q\oP:W7)Tf}k,>o"bvIjeɥw9W |^_b+~|rTk>/=ޒmh"*aGwXÖ/ފEn$b uG&=JS/(j WUDE):ƒر98cP1/qP̃ ]۱SD,y+oGyyֱHO\Iv>/>'b:P*DȵG&;חX_E4&Bc$vAHv>/$E1ޫ+]x5riJ"bkDgɒ +"0,ŒyO)PkȢ^^v4ykq{8% IÉlוE>Eb].1p):oוS"NȻ%+^PvpqER$N Q|KD㍱v]9MTĩ$֏xKcpbkOE+yG3(lb")tt?. EO։K;R#]'뷊,qz8ss&|2I5@s9*]|^_bO*"1wÆ E*KSb-GĸN}rl)>Տ}PʠʴOu~dO&Gpc%qJ}ؙ u}Ȅڇ]WNY85C%i]WNSqڗG'S1vK7lוTErtfv]9MSihY5 x(u唭S(ℹ5|lu8](ړ0&ORʿ3ÓJbX0/?N9 5%6K! WlKl"bwH 2aPC%6GA1tlԀ+ۡX' EX~;u~1M观+WDH_"1VV("Vs˾!(֎]gl"bщ1)(H]]ۈ|KWYcOoVF,9ro^qpU&|-DZKm_$Ʊm,9%ue޹jKn~e?;Pln*rkfY2bK4|8ƧPSri/3%Yc2]u\VMܲqjj(2]"o7WĊ,yS CklRߤϜ 8]ȧ)>v~%:$k4o}[ոyet;VѫHӲ,Y%)Xw%oYI씖xs~VhmNܧnqڨq)K?w|-[;^_70ġk){ȧO'/Gλ,)YrE{Sbd!{ z|eVSC+/Ҭq]ogC@] |o(ȧ4~ٕp[r^C$?L Î&'ILSʒ["P nxO<)҇Vbcyi%g8zE>=I>--4g {<=Yi {"ی 4i! Jnjdza|o*iWO {|b=аs {<ɷgfJw8MQ=y(S(r~ܰm=}SnPӥɧv rnQ.iEq㸧um[]ըg&;Ԉ@3=О{Z1~6{°s1g8h=)Ds77tM;CmI|!{6|>ְPg֝8{,֛JAQ 1z4)r~Fd8;3DO{|:!"[fC4X@^fI|3`8yawBC):*szbC%](|`BCyv_iՋ ߢfawP>)NRӼߐOtYȉ-C4*x+\7wꝧ>ZMGVb"iC[ZδdG <۹pRE>=aOW+]D>f!V߮I7l^[ `MMסVJy5Ѽzy>)NVDOzj.1PG ߢ9y{r {%uY`)]GVR"RT[ {3t"S!gh^G|dq8aiMLvS5׶6CŁZZjS,q3E>=A>mwC̰$+za^Z)u!-U@EDV {ywR74렇VzkVB)@NqIO|<݃%; ےp-/^ҔAo zj6]W=eIN5+"774q3]E>]"b=?+PWϊZ E_5B)oRiHA3Ѵ*Z3gfv"Y&ôUp͊|j _)ѴwW—Eq +7b4a@G5̝%Gj)UL:kghj馽k3=E>Mʊ\91:bQYu엖O|)[2QS9OuX))vu@ ʂ՜b=6L{g8i".-mb Y|i!j FjuqzO]mq @-iaAG ނZh+M_g8|zC>s VԻ1/Ĝc-w+3ĸ}\YC?1Pk{;kO{}Zz{=%*',cRc-~j:YST:qO>Br80@k tM1UO[tiN@,MF>\q_m-s4}TO?_!quzdptp>x{kuW[t4mi4Žl)˸/y$ 林s8e܋YoBl͟+<$ǁOq_ӏ\{wm9ɧktFoT7yiodYS{+F9RjQ]{)TFN(ÜxY2aa<24~LÃrO鱓ƧMeoyE2x}(-Ƨ RiQVvnеpx0ǚ_#M_OR?O3|m|(Жq?=#}y3O`~'O~tR8rJOOi˙N>]sIO1VaL Q[,1'Aߌ\o)|L5W:)>}]Fi˙N> Hӂi t|]_@[cY6<ߓeRs"{ߗ ײU?#"O}-g:t}@v0O5:YԮ% "_}tFTϟ'~۾`]FaI4]h20vLqyp0 άgL9ɧҴѴ&-Xf.{5tͺ9V/Ür<3`E9)`? "}-g:tk@nA4>yB.>hS-~-ó{o}ҪœrAD;Y;XOƜ~1yMߖ3|4a4Z,c^,!`T}!w]F1+¼ak`a?.uB"|_0;cEmi:hZ0簌xxxMDM1|6!ƥ;˜f׹1|\s~˸vp_fܗL'~ۿM)׿ea'4QbN?OP03xʟ7(#|0OMO1L'nHӺFӃ/-8>[f&~&.7O B|MXsG{x̕p>90;?F^Ob[tGi:hz,$P˸dž-w8w񞐪S*^8 q,Kז˘x0@`}m9ɧDMdh. k+8+1?6qሦ-oqn˵z5M16 <3i˙N>$ MM$mc9j/ܷR/q>#od:s֝BGp8*3W.׾/<`˙N>xbyg_ qرO!; Pܬ'fy{);҃1Ob>-o[ti[tam[--⼼xpRJx9sEHMTw1OF80H`%C1W[_OwNiG늡UtS>JG?}?Vnƞe {M\婙4GmCqt}TX{&_C .7x/=ߟ{V|?etZ.\ָWcߴsRT?2X9(T.CDe3( 6ҽ:Tj 60TƝܧTWswQF^ֶ\zV+<=UToYrGg3|y.w*u`칍:c_ڡoLy@4~)rrÊsjmx/^+?x,x/1Y}9}T׶#aTR(-4hZ0,>q |9#bbێ!yA~$ |bxs)̕O\%?F_:'9K=ihiZas=8g},L}2r~]FEn®Isg#a=`a0uGkL'~s[*Ω\f81z_=K>8_̏o\%Nj]%ǃ1#7e0 9ӽiZtr#-o>_} v^ :0f35rh_8{_Hegh;:rOsiwys3D=71{++ms\}4U1TX=MM9ɧt^ѴZ%ZC)+ݶj=Z&^G.uY~}o.I\L'~?k'fji˴Xi[wƞ.X5|kaï7:h\F_W/SsR1똶ӯҴ˗iǴF^VwhxVi u5#>xPkrC^<9#?]Ƶx5-g:4]G4ֈOݦ5ޑfO{9]k>v[{7wֈ`g-}#n|EkS[t4-g4VI bܖ>kPxc}]^ n5n2m?]Ƶx:+?^4i tgEO%ӺE۪Gb1|y0ӉM$~9xڳ`O{(5xj˙N>=9Eө+c,r鎩1n믟v)1 8Nn[rx05x ;gӖ3|]@V4XdcOLq<=4>ts1.$}סv؏.^#>x Frbqn+-gY܅D̆mcG;&\vX=ǵp ~1i14[Mִ1O%:ALcυ%4Ә{Oo-ܬGYc?]>8A#x&ӏOqYa)2Oe!~[77:qxl+jK_F<]vS0|֑x\ihor˕(FE3r~QQ{# eZ`F?trv-g:ǀ4-S4=81rOr/I-g:h@MGdZuST#F>Hj}<ƽihZjdTAcD^;G5Mn-mz4~,LzJxtmI9r>eM\?ďl*+?d˙N>9 MM=2|ܯvwȜkǨ3ИC~UF5I;yQg\O[x6w8S)^4鉀4#}ݣ{SoP6r0||18j[ηye<|3cUB??Ƴ~+ArO HӃDFi}ߓT<\-~3.#{کx4C_8r|0> q-g:d@/xA^/5K4xe<_ W x~Xa'>>`Ϗ?-U-g:4sM<%Ӗ<܆3-C0fqOW =yZ9s`Z,ӂ4UȵF|\MçK[ǔ#%~1㚪 wm'~tIw9)㽸+h@v(.)2OOdH<-<. K߼S<l#uHx0#rO?FGEӾEuZ-5+i X+Z#V=5ȧqO.A<|DƖ3|Ҵc ;my&oֈf951|9&Gkyn|zr> ψ5I-g:_H<"ֿOkeh#Vyk4 馡i{F|ܿBa->.Jk6K^ZK%~Yn ]Ei-rx">;.IWkMp~xRiZuh37mgӒGFƸ G8~\ǭcGWY|rx0) S0˸Ol?m9ɧi'˱Ws4AkO=.}3]"qG<#L|?F<S[ti4]h:+ȽzMNM*13ԈNs/ } sexymI]FV?L'M=#-d1j1Nn"}) zK2r)O{{'qՖ3|Z& MM|ո?iy(ǫa^5Q3G5wIb=# MˌM[Gr-(yIؔ,vLnTcsǭܖF5~T2T`˜Gʊ?m9ɧettcu-})r͠%rStJӼ$/q`/)t94)rNS[ti:mhq[Z}w@ۊ+_BzSq[ם;)tmQk%ɖ3|Z. MMM}LG#sMYm2qUJm=Ymv(q~/;٧=VZב(wB^iɢ)r,ΖV(y;-~GߓܴcgFu/9xo| `x0$kg$m9ɧf{ayFGF?cbwyW0ލƻ- 61mtw[rO^McOo}H9&xwXo9C@c,jCL'VH/SJn=W"wO$)A|2Fqlt"'"Go2#T:x?8Gr>k`.ooUQi˙N>{{mb,J&6>wz# "῞wqܬXs\Ƶp OiA1i!1rO/ HE.8NYL+$h;O? q1Qre͎xqS[tiՀ4U̽QSW+r(؏`_NOwL-rV`׍2k2It-g:Z@nZ.~Wr:-o{YެX#({Jh cN{!^"/2sq<};0(.@E׏d/;[ti4k72^F'ȯ8Տ? >O_]Ƶq 1c܋}Om9ɧiLCr-A D5ƽ[HZaHE5{&ÇK~u/Gx F<c2#aoӖ3|Z# MfJ|{(9sà}y zK lx|Og6ז3|Z+ MMuN2?>x{g=yT|ܟ.[cl[ `Y4ן;v)ge?-g:4+}#ï-Ж}ж^~x/48G>{-r<v+睰siC{ ϝWxeo~M D|lB*o;pTx"Qti4ݺ<2v~#rY_M\FLX my-tc_Gp<sY@o^`˙N>4 M', ^#_>[n c"oy//R})>8 _؟b?[ti݀4.db9R^.o"S0qQ?Z;T(g:i/,}n*C7Gtin'|a/'\dU'ΔX `O?,SpԖ3|Z? MoM+Dxg`^nO0]vFx)r>hŘ048U銺2&o. e~j˙N>< M[mMq_F8Fv}1ˆ1qgOqJO\"S0˸͖3| M+lMK& Ϛ}u1]ß]ƥ5 ~x'rn$s?Ƙ9brO;>2k r"޶#?`*cU?F~(oe\S]^ty={ydϏOӦ7|0 Mg}bT^uF8G=y箺$\Q'Sz^ʓ`<:or ]\./tm9ɧH^"2:O9<ceո]OX{>W-yE]d,q#r?t;F-g:/izbhzlbDk<*u? {.H$J=;f/}[.OY#O^)'FKȼԖ3|8 MswgF43FFxQˏď175k[g CC]ǚy]xTC[Km9ɧW=˲g۟5\*#>_|0Y@7g|x7-GceM{L'6 Hv{EӬ7#< m08lK#Nb>c?#cs"|d[9.cc{1>?=h{r+Ҵ>4wY><)>1AJI{$.}.x+I.w!ǁq맲>6}<{yӦi+tZٞic#~ǾF.}1s.?jGYSpϏd2(p<qk c%楶ӿo;m]g_ k~胑;J]1$rFxމ0_u^9g5Hu1"ն6/BfF*`8 ͱ|ۚ0~x> wGuؽf U**3r*#h!'̱| VktLfpW"ڧi,OOp|]1z蘫ͱ|g켋,ΤNx wՍ*\8" 7"v^t^}J+̽or`o\^6WCzJmn}{4B}Q*_ʛs{"{U xI(w U'^5a<;2/ RȨ]rOeLe|`4?C5|JE" '{VjT^T[x|g >0V2/e0}7^7f/x;.m'FuVA/N//= ;{]ⷢrkx<<\Qq ue`0{E2T2\oD*A:Q{ Cr'k92 +^Tb.> /{˓"^^rx; û.W85ԭtL9Dy-H?g5`5vx9xvr#le۳{=1wؘ=JT.;\w].('QaekRyϢ2BZ2]kx;Bwح52/e]Gr:"ͻt'ekYZx67,^x-wzyڀT􋨌wcOhMx*+m?C=x<Qj]f_j /w۪5 U]2P9Dy-[rܷiy5ZwT_Ukκ\Z`x;û~ /x;V_ﺌn1ՖzDy-He\h`1Uij3HvP^˃ּc *Fߊw]PnmRyhXT:=ƣ(;  cbx{ex ^P`[\1V.cGel~xyeReX a c_ix1ԃXdžP 1{ϖ{yi2} ;6 ˕G/Xp:}ųg:6^5ErlxVww]R<ڂ;|c@*o?]Tw1/wU\A,(e ;_icc/l̇ ic_MЫojcux-wzy]@*8CTƎer ».50-}x*`[<1uqmm@?YZrQ^Į2vlro Hg&T:e Cexx9e e0 3!?]&^x{#N\{e /N//H庿9OcCT[o>;cj㧩ݒq,]F18Tژ3w˝^^9D)WgEV֬(;SP.=)jB}į]n]T F[-<ꬄX (=9kxe?02m_gܓ?qOQ^Itr1r?W^zm"\(3Mr̻WڭTh>43旔œo;](__t/J.\P%2"-C'2+XsiMAT`͢hVƀ. ĐMEmdzrHTί**#jY\ٶxJ?#Ż.[8/e06]:U|)rGǧ~nr6ʟPj}_T2.x6^BW[ܡllxrﴆ7Oţ/Ϯ'uz /~ /Ϭ/^xyr9R<\adzS2ȨijOTOl"}[rTnz{2zĎkպ҉.92q`@ ~ Ce2^[) q*C WJ_;|O@*+6jYnu\6V//D22T㚊]*^|2w]FxEuob|4Տ&k93 ,CǣL,qx5]z8L.0ԀP*x"u*(߈S<$^|px9gxyBN ox0 e0r}1[w0^' ߊw]F8?Q|dx-wzyW@*wihǞq.ψ扗ǭ*Ze2j@Mx׏e /CexO.Ced@e}x\Lܛ(}\&u`x*>,@/W"^n[r\.On"No$Wn˽R_L3,sx=ePǃe0ԀPɏe /xe /Ce=x-wzyT^v Ev,IQ{w]p'P^û.x9}/c WPb/N// HW/m?7q^*&».C=Pj3> /Cex*snLr\2TڸB7R_Eeda"Kac~ ox0 /4N#4_ F)kd@];j]лWۡmPS:d3;S$^W-|Lm2OlFs;b܃BsaպkLOp[LѪ-oXi;V-z4 mva{!@EEAEm%}o2=;ʝ\.2TRE kߓ>>Gl݊[1Ӻ=D1F^cO`j?džR#rRjocRkyzR3/EtJ\ssD/~';~uMzFVDzR\R{΋7?0ZlDx0QB܋327W>P/4pZ mXEЀZaDwPk0} UnP{(- +9V]Is| kdpOѻpS4#{ 0z-2ZRMfZ~k51f=SU ;xF|קRֽߏhQ|ĨT=v(ݚ Yv(#}E=߄eG7J^4Ã2Ԃ ŋi*0[v; iߞx㵎2qOSzI)>__RQr{:jh,U)wPCJMJa5e1Lz)KHa5wAXMZˣW{hwanz2Fѫ5δr]pUOWSze|$-Q Yp+Pk:ܱKqu)nRJ{R腇%gNRj j+2ۖ,g4PN&%*J̚/7M(BF^O߁S)Hu{ʧU NxS8Yq/7q]]5J?:rԏ3w'ݝ\["4i4$D?_Q%Ǟټ¿hbw{4-BQFJu^^ ǼJc=3u=OqY\q+_ WRx`mز6|ʴaUO./)F. ,2Ǟrj2/_ 2,jѡ`v*Kv۲=YFܶt(ݶ'mvR/nT}=Ԋ?LkURN?RWW[U u]g7%PHJrLC o6‡턏>! |JI9_$%k7o '"zR?~"'L8Ap!AByq{9Pp4tB3 !'P@~uܹ? آM~MgF_q|i!د^FBNIQpTu/y52R,[@hcp8F>1#O K+fz|)U&F[M3X[gK:VqVתl"+{.9\3z]7%ĵT2; n0hkpv SЎ\nnZZK['J/fHi;ܚϞpi&Fn7&"G8Pp7oLwTUG k ~ !L( BgB娜ߩ2JxD$iQOp7t *(Fp MFMU#AuXgUYuQ|uղ7`DYIMODMЃp7.BWB:3,;qф'nwPZ\ol_e˖x_]*AAWѷ \dPPUA-x'.j>!g ل ; _$5a?{>󠺘 zcFc?wߙv>mo&2«M GEIANv#AGuV'_%R k]8V(\FeJ4.p 6bB-B E c(9@$ ㌋O&bBmBt\] }IJ]JJ]>IW@P@W@A' K ~>ToٖܲUSJ,wW_1mFU -W VbBP$EQuBkԥut{~} ss8O5 } HI]Y5 :.'PPA;ЏЂ_[™g'38l *Kq([hΥ9c%QWyjؗӈ}9j9–wPj0Q/ K=1a oSD-^y1 sV%%Nm"ZFx'zZ|Bi;h"w*&9 ELLY{jTG—MEg  c̦п͡cбs9t9x0x2HY搪oOMǽF},KJsWݦ~OxO{KӘ5+fue.s/*Ow50)~dʵ?MEc0}:zlgVަ,VPЧ}kzCaꭎP/tfGȭG7;BQݎRԓ(G<Po#KНpA7zp]%m%o y[ >Bo>>xqddxa<`Їp?7E%80z12%߁{ r$/Jm5o+-@R+d{jZ+[[[D rRJZVѓCЋp7~>/c^ W}~zg=9LnfJK'5vkv5J)iq L "'QCo"9),oQ6$ xП0a>xԃA Jjȡ d\M/xؠ 1r5WFx+VHV֯V{jZRdzѹѹT ' #GlT,A9 tS 'L6x`g &dGAANXL\  ^r0ET l?a:|Te[FnV/ '^zxj׀ ^"L'LV0^LwW3tn22 g $2 dǑI" ۃouٌ5t `  K!16Hs}k[Ji,O͓k O %N)eq|.}j2V2,' үr|MGYıU O_2=d?yJ8Jfzs˶ k!HhRJR¢jh60n$55=x?~ZqK7K$^6jޠ5\''AnZ n `o 9>\uy A賤ev)umX_-Jfɥ,ioawH`55C{|_h޽*DZWu>gg367hm|ZA%ٖ*ڥƚorjw&+Ėf:?8lV-&y͠n }`Az  AgrpV>ŠfB>CܐG?9u^_(l[ <5OέUBJy7Ց@"#9EdM!{'Y~wa|׵v΄TAGt0HߑoW+\bBn*_XM;zj-yq|{; wX eAO,:<>ȏF݌n7/]qzϕ$W_֬EVo:O $jWK[+okZXGWr~kl{ :ۓw+z<݄wtspAW; *۾em%ۖr[e-vw{jSԒM)iqܺ8$[> OCxA_ c AƆ8ҕ <@cp?]&I(Jm1ZޖRrk@^85+)%.EzV7x0ay:<`CJ% $ QU=/ d(Hx`G:<`cc#}`8 a;j00 A%mKBO:OSj8S}kA=ؑWuW+aT?`8 0}0`HM]la:mZɤVXV>Sw\StZ4a a8>eEI`` #_x8>H\ٵ@uOug00i 2Ű >%k]:Z4.5-P[Z.d,}$s8^{tZ@W30dL2x`"c;G޹u.ضB{ZƶDr5s^ mba SC0l }4‹ = U. %mZhfR+Wū3 0dSŶDTcy)(]DRr -|a5uk-}q<@kl\<| 8rB:< -|<6xO\Q]QX[D^jo 'F9k6`E`A-ńڄK \ꃺIЃ2GEc:.KE~{Z# ]ZN-QQηJզϸ؃Z52 ](jq"\lPBK2ƿ=fa!؞s?:_ƬomO͒k-^ʢJVoRQӠc3NO $0iP\M .1T/>5gE`WuR+ֈ;/"ɭkxIJM>R_3IΤ >)3lZPW%u\Dң}bÃO NW:^Zp[xMkzjXSH~G &]DVQ 1i׬k9LNFTqf'tt^y~=Ω~oUF;A08{k[MچlMZ-V^޲5lے`{(aߕiRdJ!Z6K>[۲nNt**(ېVx_h,8lKdG߱=eGdؑşarꎘNXz;v,ՎVf\O[{=VdKMH'Ўc}[aؖlGw؁+DcْܚutJLKab+8[3[-̴P[O+&d;aF#|LGN_DgmXGʻѮnHKcR *ξy02ThHduٕV #ii)Sfw^Mş-vqv#úNkY:rUeXuq.FJiF&P2 v!\jH-SZ*NXB'2)juQk\ %Cx 4hԆ0 vdhMkb$'ٲ+2Jْn]h L* +VUdžxn( тf!90 #ȮF"ݕrU2[Ykxҡ,p$hFUgo s2,⽜R")8,+s(]pfD/cHu_40p?lgJe0W22V*}07 jS ՆFѰ7ޑ! WKt S~>INI)SZ3Va}עQd$ ϣ2MeFjM{z#cHY h.s"ONLDN'_U14&IΪUa=qB4GRV2(iUˍ:VXU~d p %F#ibr÷?=:cΌtIL:ƙњŰ*xTFR+S׬%oIFh+k#c*HRdJZq1%=9 :*Jd*]s{c a4EF^x _pVZBg֑d\>r}a?.a9|XZH)(Z1/:bQ`ST&m${IXUBt2!q1Fh}a13`\_'ca edaG%c%*uUou8c${1|fV:B8douf;@jcIG3K]Kf䕉ݑ`'Tb4rLY3{Qo` r /<2fj1N-ƬcgFd wԧLJNdtzWCY:"**>;c3al@)Ml25;`8 %F-AF'$z6\ֆ+v'xjd&=cj쩱xEČ fJHrjKx@&:LRd 8֘c}>>:a: r$)L2WEq8!%G#1bφYGZj,GXY8ĀIZ 2qIG03:I%?c`<IJ$֬Ug_Y>,CׄɒZ 3uNGKw,Ld Rv"0N'H T/sӍNϓҘM)8Xr4?ښ%5#f?Uv,Ǒa Z )L d*LIԌMa)DN{L V\Xeq)XA$c+lmur9itrSw%M2L} ϖx %IëNpj3jC$r2BN%a՝N(SS:u:فYix 3ka_c( ߰|lmGutBr\z/K?yI SϖŬv:a0˒Y[c "rj3jC+Br.!߱XjvTKtg+LOz/DNtBֈ1lw=̺aR=nUѕEUg_=qCA)#YՖyP#(y wxyReH:DTq|ɟaQ0]0i $|1)EUgo=YV&O'vUGº:{-i^F{&R3 ݉LYJy+ U,{<1\ʖ|?d3StY*S}NU(~ZUd$Äu,-[@"x^%ڛx<_}@ K#-=" +e0kV4ܮ,XU} Y,$ =3|}:-ju771QG:R{WXGf']HKcO[ZCt0R3ɑl@AX9!p(#GjMQ,1Z0ԟnt򰔇[xU8{PK9+ƀAU\z(+{WEcFegH"U2k1hiy`BWo*uUg>A{S/'5KS0/+59:pW+uW:&5y[$4: u+‰]`gxGT'Tao'x2Uʡ_ 549L5"qT8hd\df48NLԻ1hIF$4iY ,^YV"gĬ\3ЄW1,O\Q_Y$0:e 8_k.в$\|E:LhM t4,yeirU8{l#L#g )KLFC(qmkWAgk6]rwKttI) ϳ4Z3VYE̅7rVY?R:e:7.r)+&2r)Hs2)q2c ;V`8xM5koRp 5FPW5`ـ}w}L\kd\a2deKzwMVZ42+컫1UJAWFXײ&J"k:O\)a\oin`n$4Gh%?[Y: ӅN1)rVak`jr\I4Fh$WO\U/RW]pGQSW 51ffo1/]݉F*Iaf/8{V̴r ܄ u]-p+p'ט%7yw3`L#G#HwkygK>kn. U*$.^ [p 8w Ju_;NrWi"2w#]/kXGL7v`»40>+^ZPXVt/+'jG՚ǘ1/4z *J~@7NQ)U*$ .>{c<{ϯ1BvgH׹<J qEр=Z#ib!>&5cf1qw$uTL3{QoOcȓ x+§ֳLX粲'ȓ< y^j$ȋZɑ-yʗ|f1hfNiTY"8{isYGn4ǔ%jf/xoK ; %R e隰CpG# RdJ5Bt9şўgottä_UdE$xrj /(Yʇh|{-j(q_08#s=NʓSP3}gdn؝뤫JSDڰJRK"GJ=^7tiGz:0dNW.t4V&Șx 2,$]Cq-E`ڝ82&D&x[q͢?GdWɌu뎘Nt&M5kachIXqkU3R2s0&d8c0ixHJLqR4LJ+Iev$ K91IJV 8~3&`laT$jvLK 8OId2 ¾}/O L1B cDoj&:b;a' R(o`XqI‰2@8^jekթe*W'p JNs8c"S"ڴ4ʗ,yHy':iXӬ4EVyxeqIC9S1bJ^ji@ĕ'p 9VWm3<)0%=K~䟛IJx*Kf(XU7ig4r9cJʜ1Nc1v;΅0HJLw!7Kt^sDI'_UU 8^9LYRpjVd:yD\cJܿBEP˓S g^~κQ Ӂi!)$2I JWuqۥ8 " c+bSED\}{ \ +rquWhJȔHk6 r9K. H+DxˬToHk{QrgKv{v':T&EkdqCJ%ԥ٬CXnv6νW򯶽O˓Sʗ|HuNLS4f*¬ Ĭgy NKC0<g LmK~|ut*cei췇0 yc߯g(ϴ࿻ŕW>FWW)HOJyC}nNt*ISU3ڵS$VՉ'xWpg9Ͽ2ŀT$%5B(Ϛ@7L:RD&Mɪ4x?Uz< OI%ԧChO8Yxu+JkL_Եȋ/sܳ)NI)y*bXql̶2$3"uwiF6̂0悸Rw>YP-dIERbZCI vgK>sY7.Q y"+0Ξqd 38#X,M\O\cm_,L)0PjŸ~ssXGL7v`V5{QoxKGC@!t>>5VdHw@O.|A ݍn݁_UUg}1Ggi/!1|sajvN ]e֐O]Oΐu# ktU =}͂dVݤ+B'1f,:\G3 Ni!P Q@%?Cw¤ K92Iua{^q,If1|]>ΎLz>Wv\y0,(.EZdB](`1;9;a' L3QUFk11Hޱx\_7鑦Y|'™p\ wc%tF谈wG/;+89>k3;ݬ#:PS'HR}~53ަMu_1kEl|ߔn8 o o o ;0|F#þ[=Oc5z)_%3^Ӊ4O8ϫxRobb~/Wc}o,w{̇Rd P>K@GL'2VRWX"$+ ,s;Cy"=CuLbFz ކwxރ>`>j Qc Ȗ5,LpY Ѭ}(HP3~Y++VPU*>{K;]Ѭ5zM%]x<}$5F![CԮک#v'f\W9+_MoU4&,Z O ER±F=4hҊP/ʱN4Q VzVqxUqUc(Y"њ'>#iKVgi"YsLZ R (UJ Sh*ző tt$&T"cU,* Z%fU:τRn#, ҒICFKf)2,l?{FNriYz]0X]}։1mUg;EPՆ|:[%TGL&DK.,|g3ig`ʥeiҺڰ0·5װZϼ3aิ | /aF&Մ|ώ߱؝)XU^Y}Q%,_[j1[GSZ&z'>?Q컲nԳ.I)`4i]yXu Z;iV<*%<,˅j3F ] =di,WR43-8ַTUfwt!iLf°=HH+gH~njH;tNn4Jk"Y&R UfwDNP%2)EUoBԆ%Zô*m ] =d×RQJ*1L[/RJU^k]qwLV]x{M c_| yKig{X.4K-/#SdJ!Y,Df:V։NpiY5sak86x$Kj:#tuvr'tA7_jȦt1LӗRILtMh)5+a0N,UNuUouK@F{6X]]4j^#/kg:Hg@W/;NӉN'ttX3VYlڷ5ϧS 7-E~O?_")mZ;Ut#@X%]aTeqG|Kemgp-8-|G#3g3T*32D#E;+V3{a]O!VQ">B$Ȕ,EbzukH*t%6,eJSd9|fCF0-RBAPbפujػ$DKvߑ`҆,D&AU.[GU~#2Tk L&r/|+`%xUiժ2L=R-5a\?[Y.gmCӉ|yHU},8{k%[XA~#Io«VWU,SmC..d"f/cV&QJ֑lTbK%gUQ3,&XY V@_XIrXےICFcEDY}XGLYRw5$zS8Pz^duЗkꐋK3gKn.u:l NEUg_^3,'5a_kǪVFwXO6plz!B#56\AfJuFuDutp}Tn*sUgO1Џ5jς/~XUBX @fCcL3+L 35:lvTdꌮUI4lL6"JjQ26&`0l6g2>!B#mFْA:F!6dXK1 fcȚBml `6%1l1sgss28^RwJmffUMPy7I-үxGin/y?[ ^,^])99DV1-'K+P]) $YMzZpF˘wʽHoր5ZB;]+=d\(>kQg>e0yJP%du⽟kI?Vd#Bw#]X'8 d6Fib(1-Zut!ӹm`UӕEUg_ 82I?R>+MeԻbGև juĄ͜K3 H֑~lTjp@ Ğ5WEq`̮0lL6 HOfU6a MȦZ-%?_؝YI)7eL0x﫚Adc׶!͂J?LM`S،l [jM$"g39edL7T6dy:lsTe6jq 1٨JP(13V&) 6w؂ڊ cDU؝(4UQ8{j! &ZpFN- 26!fruڒJʓB@1-(_׀w$)yBNR*`uIҏ+CAuaoϿ+!nV6MH$W,8ut*JdRtul%1n?=#WZd]@փa2ЁV{϶1Wfu l vHo'Z Ve}fѦ&RسR^7􁾰Y6ER@kQeK>S}X7T'ɒ%]x[ZzC/Z{'On-8Y ~:3sgsmXr%?QdS S *od&-Z_+F(HoVW嫂TjF`ĴFhñF V$\dRUjSxZ~dT6|R jU PSPT?*?W%n,cJU4&징^3~#2trī@Ԫd0Vt2]LwLo%DNLh3L.]xvK+od9RLg XI<*:g)e5fud6:]֬VDG\h:bw$ yj+AU8/fz1c%H3ezި%kZ{:IW@wՃ{do# :%OI:YUW}1҇^ZpVZUƼWҾd X^^Qs0;vt ڔ-}˺;aGYOjEV $O6 cL zXG;ѮS $2՛ ]2nE](3 MPd3؜lmedH[va ʕ|onNtdvN]qXEq֦C؄ &$?YL l D[Yڽ)8[M+[w¤H'0U*3^YYY H7/dF\V?jOSYq C4Bd!LZȧi'dsn'6$UЏ43U#} y_HK5w뫃4@=4@#4l@NBj3iO1e̚I+u vRWlYϬs*vVbxހU %R,W^cy]x>c )|X HJLk(7w}9{[θb:RL8Ҥ+ŪT?>+#&e!VQt9{?zc'}Gc'v1&Hq;|IDNwDN>wDN:2<YVAː_o~c/+RZ5%L~`-L~`/1e1N,`ǯXOt-9jz_+>~%п z}$?~"hD2yX_I`ݎ;F/-'++X+ga9YY^\^ Ɋ z"a9YQiΫ+n'hiYQޫ ފIǨ:Z"v1&KUDN>$ǘ(Uq;$z:^򈸝|qGc<"n'=שʄsxK'X{lhgI^XKחs&R{K*cy8_%cy [f~%yePY^Uǫ>*ɏdIz|;'YxWTbgo#1KڑI7 v$~1H;q;styaױ{q?y qK c DZ;I ċy0it!8f(Y/'c?7c456 BV03"͑1{u8_CȈ ð..,@%ǫ#fP9.U0볒u'oOԽ*o'?*͖㎑wkpt=+qܮ\y?]~1vùh7cܴntn.o'?u{ROI#aOit??{J uq?̋8Oy~1ZscL{R 8~/?Hc9,y??WϦ^It2ϱկWIfqWܗN 3yxwk[]''.X B)s|Pc̗~/cە@m9NI?w$ZHMuDoKmHخщʷrQoaeSRYTK{jQDT$*ΡE3(H<%IEb\';*} )ou:SޞXYagUAudv#^(/D_NxSgzNO彐:;kn{D~#fwڽ+5QOޝd+ yVUsu@_1ڤs}Ũr@-AxGq.{p{=W98u'LJ z;=Rގ7m`;vN01X5Tn Y:Gw5Cd(yVEܯx} f?S{xv77_~jg^ޫ`wԾrT1Zk1ƫZx]Zc&E5G*뒚Uա/~ 'xWO$oz8#M&)0Q15N~&_3oR~kX8딎`ג: 5aI U܇sOb<,N罓:NN/$y?Pwu(GqBQ\|L'ŵ6ZMGq䣸VlQ\k<(]|UxI k&ŵړGq䣸`Q\6(}|U⿣Qӏ>қWcS_j4^'ƨO6 >^^y}ibM}RYoTT 3Uz릞Z ?#.{&[Yu)^M9OT57qs3n/ZLyCR{SSMkۤC?6ӓ*z/H;FS[W~K棆&g[R5S&J~X-ɏ9JH~X?ɻT(z@ר=RWynH.6J]m[2y?0%Sy{J]pW8u |o[+?ߺ!yUH6!kDZϩkm[1u~;Sk{ԫXy{vJ"M4mq?vdG_zU/zU=K=ܪF[g"pY\aծ)~]jE2/5}Fjo6;uާN]fޔp38Niŝ;. Vuz%q'üޡ5} j%^|\UwcG;C~%?y)8ǬF?)tB<މY-rw n1^KCj*"o}уTUv4MQo׾Ӧ;O>N=1wذcYۋwΚV%n?zX km#U_{5l] 8xkpTg|7d2 EP*G$WEI(ns7aesCev?Q)()cG;ƮUtTp8ciT ͮ~{͆<*9ܳ9;/\[`xƘHX<EI݇xt Eň%A,!K"V V"V!V<.sR@;OB P#xQ=p{Kϟrgs/Lly~r5eL3uW@;4¾,W|ktϯIn+ }"YɯI2it0ފ{~/?_w-οbqg F9PcNڟr:VckEr*}x ^|x>Es\d|0_`<Ìxlcb-jni >H_k.Ԛݻ::ۑvue?Zop5 Wfc]#ߍ"-,iDU Bŷ9n82_BKqqN:qXcOPU{BAF?&EyAnλp|~!19C}}`S S#ڼ^E:|UkHo;3^GRҲXûoƋshM*9JT8ݍ(!=$*aBA_zYڦ0]G]S9$ VSxv<ǐCH ~50cWWIgw%E h2|:Ҕ0lLGӺNNX N g"wNqH0Z:Q{A!qrvu<ɮ(?Fy?iZ'm75:y_j#%Z1\# $ͥU+依,W[SSi Z ѵ yGn{M{sE=Oףu r"^f*֬F7I77s~Z/u;Ϝ_ ։)̜ b_ۦ)wLhg^|G6sC57T=sέ&f_cTip6fAEǛ7r,t8;33yh8ڋhϡ4%t ymc5挼nf^-#yqZē6禴<)o'z-o@uPn'~&,LQݮN߀iBՠ7&ZKKWlhAtbAZGGZ?"z=z\Gi| *OҪ1qqR ${"Wn +im126#z"* /EB]٤=QgѠ82i}{6:t!eѡ|:t*KH-A5aZ:AfwtUVA=S\5.T$G "l1N`'~.b"niʴtNS]LinY,ӭ@&vZțDk]+gDp[ciB.X=қo?_GmVi^T]: s[c!MAt)r^>[oor>w'oɺ(nH8(^쬳BΨ:*4 h+xtKPk XvC me]{l6٦m :{@^3GmScPnghSAէ*>sVO)ψѢ:wֹrZXx\}pToAȇ$䓘#惀Tl @`btf&ٲ}I'[JuҊPGjiֱh:Nvu:8ƦSq(69ᄏ۷~X9yw~o虼\Q}$tY'@3~Uo]} i 3so^DC/.....^\ |3pp9R[ˀ+o x9 Ѧq&0]Aǃ/6;]d+Ф"& ݷ{(1m5sy\ Ka}JKT:It~"@0о/k+~Իx{wTphoXf%gqt3ߝFYʕz?泎OhS昲^_#|0v ' GsyYܬh~\XmxѼwrtc/@_AێsLaغ[[>Dw !ȤY#>7 O"\P˩F4Pe 9\G[ɯA#NQ)9gc;8|x΀rSuHM.Fi:Nǥot;l6 ᬱ> 9&;2[v7tQri #eAad77HqŴ?Rp,WPr--wqjqVL2YtE0K uLRfC,f5C ;xUU ϮdhqVUZu"`61ƾ66y *s3$~6EB̦o֥u_ȥIsKĺ J ^l)=?v0_%D,gi_R>DÉ)υj,|we&ڣdU&"m>"7, Mx-F$K=E/f'k9ڌNo(Oڪ iK0"g Bd1 s"^^H7.!`}6H "ȶ#y0"pij-"46CdKq^FWJ1~MqD1f,Q3IL\.TW$--#ͱ3vU4aӞ{ŀc>ݘE('j~>?.ni}oN~BOtqQ'[?K'y ~}jUtD'[(?i S>}R#VT3hrո].%!|~I_@mn +[JO4G1KB\KOϳd D@=Mu}7S꾼$Ǘ+Kq%5a9V||iVrPc{ ئ!!G;xll&ĎUPt)Zٟ-[afMxB֚}N57Y}[ e"SDB edy=\|2jHV+{ w\~\dcNc~7>ŕN8tnK:{_p*Z,O:C& PO DΊ$:R_cNkl!5Щљ:\1:;g&}wwqST{7JbR$L.>_L T19*<&+V8aϨia*I\pvjaҔ$L/&myt&'  QƉַkIrEv YUstX|eG8΃a͙td`)NvlcSksPע>(Fإ?òwlg%]y ?=St}Zx \UU瀈( x4 *6`69LG 8MTTfm Wiq35+{L\MMٔs]oRs>/y!pf^{ڏy}q00yHpL$u'1Y?oZY`"^ T|8 B|> a cD` `bĂ80ă`@2H E霢dlrA\ ` \`&oیBPfbP怹`( *P "P k\ ~O TԂ:@=)jA4` gnA'׽bZ rƣŨmIO6m EnfU3 GN[^h)ԉc,iXe؞}lQfo5,h4Ru|-4kZ>;@ @_@I%N}OPFðILO[? bR(FpJYfwW6)ُj$G: 01~<|42QDLD̑D̗\*Z)J*I&I.?w4E% 54>-Wǻs(__Ti+ s" P ̾jDvsʡ[)e_qC V0\1paAr;.s[j+Y`hls$wT^/j63:obbGdIWnlj6YZx:Z51V`W\[g}iv(T77[MR<{qY㨯yikA|u}T#9]Tz9"^jiZc%n+MjH/h|ԣS &Y*3'P-:-fKc|?fU~ܜT_ T'^'NѓMrrKPu:jS}8ېN9mN{a'row: NU)R,<:ѸЈѢ(&1XU&4PI>U'OU$GiL1)q7{?\ȯ^;ҕU QBq^y>收$G=UqSˢKWܾؠйz2FMm.mj~߸-_Ø ٥MAц [7yg:ao] }</=lmU=#l#ml]]xO[)k\=7Űb[w߫֗9 '{Нa7SIc&˼svdm6ɻ<wi}en4yƁnyMИ*O+P}+cFsI-ϩ|LsO49uK=!syF9F?RMrd|)%~rInܩ&5N-ͥ47ҼDs|F;zT r'+ϫ#. ne]UQVYIXTWk6c]i % I?7yeRqI&28$9.YRl1knZU_h-E$Jms鋚--Se]kB+*ZJEՄjҤT)1R*WRɞPRS+DJE8uD"59h H3ܴkzqze q !u(_ٸꛛ4qLD̍teژG9JpKcS%Io߫Ūz^s}иEPEZ  ¼hěu-:h@ϕOgj9=f{֖Ե`il'wF[:JImYuͦ\\9Ŭ˵3n1zMR&0´[ =+WҺV>FZfej eNq.Pi t=dA545Rd[ e!- 答3]'}9ld&%/V;sF[̮+ 3jyXm`+`҃Y`)PKPg 4(B7Yv-CHt plX;8=E; CDRlo9RO. T6r|}-76Xͦ:6kڤ4 %'ckWyZTN=.v(}}"Gq)a}v\R` )M[u_ӳD7h/Sd]c~ҡk?7:y@wOZ;? =CO6K&hf[El3=@-iOD6mr͝b^j|כmB\O%k0{G:b2z]f*x3SN_QCp;Wz7S-i#ޜhXTV^VtN_\8mң@7swW{Իo0K'Fq!GgVV7di{ݍx <}t=W|)rk{z篧xS9i1;Ս]@xz,K=:^cvO{*gUGk ޥNNo2_z?ܽS|L:C-/r$\d&io4ҿ򆕫,bs}]VeQ%6E%ϩ hv~N'n!I!Y#xOc?[d`Etca <Ӎ[.tsO8|Ïk|W6.ϤRYھ<2Vۗ@r?{d\@|IK VNw+R?1}[ӡ+)oI uM/gh^':S:cbY'zu(9[H޳XG3}%tb`9f4G]^m |66A/Ҵɑm tLZk-*O6 36'&R\nI׾|CU'L M68Wۉ'X`\ >tׇ6dCcwb \V00wꕽ@#~um6*Y9[z/پ&9uxnJE Z,o^_#{wv|VI|C. ւ{ ցu C`#x<flcqOm˓#ES`7xπasyzi+7Uݢ!@'dbg6=z_|w> c⭲1 o} nq@oO9/p74| ZN7~$8gy=~J+=`#%QVM`4"@$c%]qcĂ80ă`@2H@: KrF0Ah`}utc7bu~?e2O@9tR}F# )s"Yv,FSY,?~\9:EC;#ۿ&lhJťVH [~[ƠDuCˍE4&ed6Uc9t+Ķ8!R_|_9 #iAyۊ[1J[߈8_t>r1fh"V}1XEbc 0zBbh>8tHoD,AN䍁0HrF`/lAlO⨎olVOiRvu>wV7,*>9X>+CtaX]ty.AD,e,]\Lx)Η#B_|!Sy+ o@9Q^|PnwMflap#|F%_/_*_'OiB(˱r'ā $ڞrPq]nf??f:#v,emTbհ\ *P|)\J k6(BSf|}+0烙gq:iEHKŠ9`.G}Q] t`m7ɲ,W{/rS;n^0K M}3̜]#~i;2gwgsFBkmѕm;1҈ۃzQ~Cо+kwL*Zb4zL5Q=sD#KC|WUy*_(EA|K%7JʋzҔF +C癹*bP4SєߍT=hl}JRAcܣOx11>8zZ5]wޯbv)`m6ol&(R>N{NBW3:ڣzfVh-\l⽱[軭؆؁x}7^тD+fm!F26N.bD{ʹ"Q76l)F=;-ϵx=0e㧫-ڈݴJ-k,lW۰Uma;ch%6цr]?sytϥc㌍m;AOp,N圠LGkbۖhh&qx؏&X3;y1lsmOI?E>M)4e3 u:CP33 448E{N1OҶ|'9Nsq>˿#WYu+Jguu3; ƾZ/JՉeb_W$\T \=#nF3{x0ƚr3*r"x ^^I⫑R*$ Ŀ:]q^Jýʈ({e"qˇIkǽ'k @u{_/ A/uMz?õ+jUB+1W{+^$nlic5@Ek#=v_Ǽ3~L?ϱ2g>N\{72QrQvId,=̼ٷ{{]ٶ{QwQ[yw1uv M/qV?~<, :lCANHKH%mμg.g~*($#8C8{rvvhQFK~ohvM=LjhL9)1(hD}S71gwRܗZgb3r,?~,+2Qrs`39#;: x3eά3#1gtsPWrΫϩcϧ˞K[3:vϤϢx>*S do ߪn÷;ԝKTw{T-u/1\y{Z2Dz=,=W=Ppg(ӶtڙN4QCWBō"Eu IVIΪUb:n5B-U~qTw&Vܫ'c=z>*}UxOLce)q_hpL}S0L{mĹYD|F3nq=usd|FAh[зBX<,y1q}\KQKUP!F[HM8M8c8v @O GeO_d~P1r L}Swǣgu|=bQ2їmT?-PQ_F.#}=t;q:r<:QU}]|8}SÔ0eWf)6%FSb5#n37ۂzVh͘j5ڣ:uFte$$2S(#P^ P~ uOS5udO?՟8)хYuBGƑmцZH?,E&æZ^>dhCjG:YFm2ч6F/Dd𼑎4ѝ8F qwګvh+R5H}@ճRc+?XM'~eePnS${7c2G}~k`CsQ0>SpN џa#1HAc i0usE&ZoՋzz722(/rөC:uINz^>웉"O!b}4:8ԯ?uu b?c0qӑI7z'z C ӏOc}k OTL^z#iH衂-wFk4}<<||);M! a =hR"y|\!Ř"زݒjIS*(P*MZ{zRĂ󩓫XB^7 TN?*KGӷz<*heP˰:z1\lPImV[VwmCv1!6}Im:Y5Z=J +x ^KWiH88jfIX Wc#6ak[ o;qv.1bx>v`Hb;rhlflRkX0V1UCfok\C/׊"я ب6aڢMdʤm}=t^7Ґ*q+cFyMب6X~Z8h_@iZlFDD;~H{~H~@@{_1NW9eK+qp<γϳ8G ,18M9)垢S$9I;NҞ$;I[O擴$}q9=Ÿ<=5i`,l=u0Qvԭul~q "*^l ^e_5b.:7Йꂮ]'] loľUux/˸x׌qAthљ6]9;GdM;RUґz_or,9>s+/.E\U, /cdfVk"gqq-~Mo $~7YTp8_?)3|#?=}}>O߾O߾O߾1c>cg|x G|O 7Bn'i_*ҐN3=+?L.Fm3L;Ǵ//>S"K )3t9}HU݉a) >VN{Tb;ҥ|_  %HA𿅓_I]zܠnT7͖-QoXoZT 02TJS-V v&\nN?⫔UUӷ嘴=!3<_'ԊqOx`w{~R}-|Hс!xlEV~ r`ApV$3\^GC䚣IMljjzJ Mnϔ^ϴb!V0[<9bO(yG!S[@ 8?4L{Js9؎xJc\a7qdI|ӈaٮj)s1[ʮPL`ٿY?{Ϟsgܙ=6Ϟųg왺虹Zl\8{.z͞uKigٵxj=fϤٳh=s̝-sgbgbg17vUd3[٬Lo+UY+wʝrgbgp׍IsP=3KsK?d'sID3D̐=#;&ٳ?3?OlOEZ#2x7;S=_zwkٟf}bg|gzʟgxܙwVǞqgrTko2Q{Wtǟgx{'՚IfgwŝmqgYΰس+gV>˚WQ{d5WΑ#s"eCbB*6;bE{\;aqTn~#znÞne0y g΢Cpg7ܙ wFlF wÞpg.Y "-,EV*Wxy)*3GaOsyDe#y{!vZCrx ;+s \Bv?|o<G.Іs<_Ή֑8C)$N8a^?8>~b-#Oc/R^C{(7M}v3fv3vv3v3v3v3v3vϻy/>qm|rCߡoC8#oRoRoF8N$N4ۜYmm;ws] zdɘy ` _3~wxxOqՋRlKS:O_E=U>3!1m]j[Fn5uhyhaiyr=M<~">~\=5Ïԝ&ƖF6R_ճ{xnSeiK-ܫSzP=D9o:zx6>(?.eԡNZ-ꊚD]A9zjqG½cm܏hB_!y\xT54W-TKusIƃі:{U-܃Qb߸n|GylpMJtc#ynbX o0b j$2"P132KV}TꫲЏȾ0)I1%4: >CP; =9ўA>$1),d>ɴ5I-,801(١1BQ"Obl@8QjZbldZ)2:Reeee$4,RkZ,P/B,|I1P(ݑ'?Ɓ1O sEOeE戾*Se,8z^0zFȠlG>U"UXj%XFA9Q 귂:"T}iKD/t,"BQ"U3U1|}hZD(cH-RURLEqyc̥lƠ1l<ω-5;_C(wmH";y-wc]󯡛B*/u<#<68>g:NQwG18*TE9'1`!I 5 Sb ˱+*ZZY3 0QE6QOc3L=-u u1±±*JߗcVUXgZ'6֫ kl&^lZ69VUjZA,WwcZVXcY+֋uub=qhcVXe(E b cXOu`*QH ic9aXo+v2F 2NzsZ>`5 yyQ[KJy?_UJWy<㫡O OVo0maCG2yiˑhcz Tt HrND$q GHW^s)х}MοM]s2U/ I/>_:U^xX 2 #1ynbdc01W~h%> ^2."^d`!a1`)ۖgh3Q8F :6y|9.cw,G)(;E(u8m0N$3NᴘG̣o:p\Tp_TW}Uq||2uqr T1XEj1.QKa(R+e"ح)=_ g|X82xl9,̶W񂺨.Q+z1zz:=lP')ugp+_%|U?[jgvw!jxO>uCq@Ahğ<şq`D}>_ qH8`(9 U^GTNjU6ӶSR-{,{Ň(/}[޳˶w<{۞=j؉m]jw=QB[}/"/_-Y>Ux1lO3Fl{Gױ[R;6pO7[wc~irUk]G⏑ߊxl-̶e(GCۮq/}}O ?*zO?]>wԳމwǎ}Nr;pnm*rM*=ߺǦwM{ޙNqqw/>_{_R޽.\[bkqi%ec ~$3H~'Tޝ/xqvr%-]-,],+]+XIgqYGž7Ž/ž'%^kb{{IM{LI{GFEwH>~>s\wrwowmwhԷƈa+;*;)(*rDh#=p_k{%{${"{!Z~{bKH\;/CL߼+ouGBeF8sBe8ˠ; ܻ MPޝ]A`ZDI|A({$J Z?xAٻ=k뮁ػܻ; /w{߀{π}{@{쯖w@ywwww+YoZ^̏^_c޻k5-uO\|NYt]^ZnfW7V7V+cWjr%j.ku"] ]Wwܱ۫+WkǮ̶W[]aou]MnjWKVG[h5 _]vsWtsly^r^ZќgsAV/owj[lu8k3uZD+Gz+Udw%ryaUѫ#UUAV۫Uؕ_o|ŬW+z핼V+xջYW+tFȵW▷ ^뮾^y믺WێV+lǖvi̊Diݕ*ZlV&5=XuY5<6[{}mRյ 7յZwEmJY{rWVfl՗vpZEY1kd^cMl1dElwkh孚]UJVȺc+2vŮueV+`կ^W[+]WX+\+N]Zk}u׼k]׸^{}]Ӻuְ_ZV˭\kj(KʯV V5xoHB_zUKIfs*2kZY+5:V{ kb֭(^]::ʭO=wu+QkQZkPGY{;uלYkl>^e[azܕI$WQ{oŨZ0fBt24Ȋ#|Z~5K v5^_z3vզZ^iWe+2하Ǭ GWY>]JwUe3:]ֺKw_SiMH[Y)wGWH~a[pW51Xf$Z`_v5ck]ᑑ^L1*גDyƊqj<&j&)je1+f}T(3hn!Z`r$CLDLӦtږN;c"icH#"=#)&Uꪺ:bT1-ukK=1$L5}ALc,,fSّ~FWՅxFg11ɘDDLxyc,x:NWgmttUIduucX8LXMdLT4LW38LN8f1>=#z>*,Տ";2@̌ 30=2HLT5%2ގc1F(#1psce|.#Vc%VXA9+(o^&KŠp b cb>yHOOF?d^b@9%ZJߗE*3JWi*}b)5`17XQבJی4.AYv|5 c,xl)$fcڮvSj'vPG YZ̾R-M [CǴc0ტR!;a3@cFL׉:eQkWŀ+b`e1( ^3x<'Yb#9bwrІ3;CߞgssgOGω$'QNuܮKq%U85N)u{r_瘾N9/z2G_E}~O79^TWxuӏzWeRn?]*M]\H˸.xx^]`_9b9y2埯gO ?xHA"s^s*޲BRJ$Q/) [1ތsJmi*]e& I֑pȤp{8!sc.fbFb2)і1)b*Ɖijal5 ey!K<ʣ|O_u-,aSˡ=9vI\(q\lRjeۻban!9{m89R9XW 8/5zfFybg՜Ȓ\5O\ys^(PbH,,5Rl)b;[P/ErU1Nbfc'[9ck.ƄcV3 5rM c2e:f"1 żDL=h$GLLwLΘy1]LlQD[Lb3t(ϑ'Ri*usVͶL1]3LKe>l1 13\[Q rhCrs̍"~0BƑPqlXBH,`y_8RQB%QgRC.r<,dc&304e,fPLX>'~e'}c/we즬]b K9W]yv %Wr>]9t)̥r\ހXXö}W%\-m1qͶPRn)҆RBJ8F%] DZZ±/a<0FJ7R21127PŘD&QIsD'QcD&ѾIsL)b*2 #cfoټ> lk 7˘F\V[YmFlzmת50V˘I,̦U\!_}PsZH9"]Duj=qڈMj3`+۰],/5>+FQ،àc׽ c 1sWcF)<^3̶ϛ2^eW;1-C1/[ccqma ^w?`(|W9P*pXEPQUL WW Kl5 1'Ubr<)TE(_2 B1ŔZB\K#"JDXv~gT# >g\}a Q'#e!eP'|Q6VBU@{r6G,bdcF`4\U}O (S ͡>,?s`,;;0-j&2~6'kg }RTVƻ2vθOɴf캟Y~Fͤ2Ys;c5&;^xl&l~Ylv3djm7.>Kߒr[YՉrՕSECܳoߖps *#3v840'E+Ž sn~)o?s~GӼo|oe3v7DYĥRSrߒˍӺ蜬{rTn FglLe+Cff ^fR{agn^ͥ+`k:fCG"ʅyP7i>|cfqV ,3n\:.9=U&2yH?g~9|+VNpzL.0:___\_<_t/^~y=7fZ;?_W\]r9EVlͿٹDy77(ٮ/뙶lvv-6fϦˤˢf旛93fdϒ! vȂedK /7Gܘ V>΅Wl+:.'>PϸwfjeBe2^~rfb3[Y-7eg>J֞RuPxJնyQZDp/:xT:z:.I*\VMAw3RF4HGefP~uA{PԿGx04K=ivl(Pwp,d.$ <)ǗgE"+E(D*}穹s38N?<3rUms%'1~~klk*WEʯp}>c];m<%XcZa12&#zsxl,,XsMK<^9W|F?1uv|q1cˏ9s|?Xq$fcc '(k*p]>Y|glSbJRgF=>NQϨg>=c3)m> c>?cm3Oq/˟=&GQf%v ά;=9fo7k|Nͳ+J5bϡDϛ$͑[ğgDęg>fßg0ҭY3fDI<Ñ88RRss=oVvus~Nu3un~͉yP?9\g?!5L3:g4,t3nD،cĵ}]j;(&׸'ڹ<;s~~0Hn 9@y[b}vU6fQn(6f }A3}9Q>;f*K⧤I]f.q.6/ssqnͿyx6'|W@P\NTFĹY87fޢ3nI I-/ܜGsgKbdɑ-ra~^+6ֳ֏C2X2WY+T-yap("'CTu˿T"U jjFM85}'`"1'R$La2BP)J/Ռi_M gO` QM'+ƨji!ᢚgX"*RmԵ3UЍb\&3Z Vmvuw<7sV-QSXMb&)j*rA^!\R|`49{ !/1cCߤƷxSWlz3&T'P(P=D5IMFe1IMLnq1G]\[o-xɘ 8&c r+:[ԢPK3Zf Q+ch"XfcPC1Pz1Fe} s<hG8*3Z}f0;N,#1R/;}!zn( ]y:۷G;7 PFkjMtLL$Ld ~,o qG4匢Q;GQQgEFSWc CҞqO&`"&ɘiq13U6%:64:.b.uK>,1.ԏ2cB=C VOZ1T~qA1xƋQ&xIj"G]W;W;c [ S0ޮvC{Oaa+`3oFl :%JZA)4,!߳Aj ֲ:QmflVl؁b$a}R!h߹+CaeՌen8$i~Η+9Orܢj۸YݤnT7z\g?k4M>Oj-,;c{:<۩&܌۪oObm-fIH\-nV7Fuz]Gl٢6cwA|]ש뫯7Fu5-UݦnWwN]m)6Y6[jva7`/>r tu3ZX{)qv jfܤnT7P/q\'vDZckiqzAݨnR7>仍)׷GVN韊~OOyHl`<8և#ʺ/7շԷwzmƔ[/?<=[,[6ꐴ;h_+~#Q]j9jliB|auk :<};HurPGp]&3{&ۅx ;]4u7=r?6BRhc&6H:N:=1vulUۤ MKK?e9,b}il xlXG<6ZO _ƀ8L?*z}9'1a|63q}4X#iHHHHHHHHHH>Blzë&J V_\/R/e췂x+*4}Gc4{ e;Rg,uK^{l,l,uC?c8ƣ i(>G?`8NM?ݵLLK$ KukFŝMqgRٓD&1 >.oŞ_UXs)#N9*GaƟ!gFwÝg<Fßg.&Yg*7OQ(g6G"QI8o^Ý0b-칊 Dy1s\1 \BƐ; 3OgfWr`ofe+^^=˯w*'C~<pW/'^^vUMk,C͝V^Ήrno9 V3gf6slpEs5v3n:6Cfc~6z}6Y2goo2vFY`7gzz^7fu݌uvܺ[7[ghf+(jg[c3NF5Qu =AͷFUܩ/usnNͅ9P?qo[lYL7sig,t3n;۫H^/6fʑ?7f,ݳ3{z3zn6╗V.qkKkݕssvU6WW*=w캺VXUW]{ۺJ $&*-+IMXt-`[PS%<ΜL&}ϳx=[obH"^‹b*Jo$Ld!2G=X~m4y&piYtE;%]Zhi$g.}jըFQ+6(S)|Σ<ˣR(a<@E IHu>9>r>|Z5Kkߏ > oXuWl^/#دHe?ӐQ1j1A?2,MOD>ߌul}4~迖id(}FJmaHOHóLԕfc1cES<-I"Se%ebBRQaTUFQsQG=Z=7Vmϣ<7Χ!bʤ!0G;FQiTXW&Fh(#HQ׆S2-KjKf$- 92 +9Fk!?h92OQ$%1|-, ζ HF'g"df#8f3D&22jrNxJ(7^+/q xiC+M f!ۘ9Fr|(b|bW¼N+e`UbX+K+7ʨ_+=O(/%y`6Yl7Ә!tQnT*K5eBfr Yl c|(k Z'9< ̕Eb,umLqk\iG[I+郶o|!F6fa&fJe#m疶M[b }B=}J[G/pޤܛ&AoX6/3W}yJ+Wb>9*̫bYXX1 bіck6m)k%XEibcP:E ٶ b.\γ:ι:zQB{Ŵ]Lg!",,2, X߱+1(f,JR1FZ9*JcYɶZ)QVJE Юgb n: B5ՠs:ԣX@Xd,%RіѮ~,O%R,3c^컶Ж26KŌ",0s̏aM _D-sWZidwvR1i <ז;bloGMN/rmrsA88T9?QT:G2;G JTըqI\ԡ 3 F=0jQjTQGQA0v(oq+;:.}s¿0.B;w %;Rw|;(ψڇz;f/x?gFIň=2iPn'T=2MgK|hDRt<2oI'~%~q|<;ZQ-_ʮɭgsi;sΞ3p, KhtF'v .}c~g+\9. e~C%Ǒ!axv CYahYFfh_x= e}v7+" e{V튬BErˬ,.vggp-b_gośN"ӶȤmZT-2QLw-HO:Nby=kMT:YYrX-L,2 r#.?GcY z]vYULd8Ӭ{ <M*hW22[=ѹms"kY1\ܱXُ=a rpwOr_pw:7ݽt'Sl䠀KxٮSnWQ+n&NpשjྫR/1Tޟv>r)J=/RckZn{kǯJMv-5yWMw>U*N:Uu6z,^x5=rSχ3lj|yq{ܽz{^꿟viw0ҏgK]| ܋q).sW+g9۞n?$rOq-7ܛGiw6utmo[ܻ݋Ǫ溥n[rTpTskD[u5םnY; 31íګw%~S1~&buhYԗIݙ!*QᎧc<;-F Q|!9l7MYI30641^MW)N}/acfb1- l˖yg|.`k,zEsx-ɦ6KLi%Eӳ)d&QJH jZ.|E(6Jؾe(9$$6S8fTQCjg30D5=gZ*VAQsPw%op9%[,gq)XʾeRnex=Wkԣ0YEԱO>c(B1}L鵆#1XVY>4>o=Qk1*9lkhEd'-ZQCꋭ::5x؇"9:1ǘ~aRd}eYo1?h"| NG(0 ٟ"(Gg7P6o÷;{L}݈E [ ۱DfPG uyn+N+n+rm^=jPVK&y}al6c+w-Me;|K7 ~C{Q2FujԯЖg3ZRC<ۍl5R^k>O2(BG˥^-v<[،MƏlmx ؿBŲ[u1m̴T@??K:?O9OD6ϵ H1ݘ%qx1h1Uckgt7z?/ӂzDn9rl0LjLK6i9}ؾ/Q\M}ZO;i?p\(PN?*JT'>y.e_pqc]s;>軯Rt!>F}f^v%0.eƥ"~{.'} ByuvtiRJ ;;&TD Z`vC+VV|{u#W>|YZ[};ZG{u^g=gGV+hDW_+c`Z?[ka11˧mZ"4MAcL;ߓn!i0R(cNf1L0.Z3FƷC 7LlOJF*Ҍt2Fc1VlAEFKMfK{ц}p;CdIduを-IA޵pn6F!iHHc%%p0!,)ƈ$EOZ1M=1B}>7؋=2>]} K;4 6wz lc ͺy/deeFAMADs秧}gK13e.|쒟Tp 9v)`N3c1X`,|8XX b;h@=8aljKc#|-fa8Om՜g^Zzc!i7d$hKE3emMbh /vyFQo?kԊƠQDU+vΨj b},%bORί6>wP%|h\c1 F=01)_%?kQAC_ZPN?g{h`%+b ޴ebGOԩvpxh1v_?n^^ڰN@ cD3I I$?nwm-M רH<4 }}B?_WGQVsO ІM-mxG_S6.b'cb4c5rgcXG +_O;io=zq=㹞qJ8oKK\['k7->5>Xx:*h=zvߥw˻Ibcm'}H#kK[OOp鷦u1V87m-cƸj3g)>1>6`hXjMW}Zhew'rn}M)5u}Mm}CЇo9?/?#6a3@݆wy$vPc#5kMh迻{m'Z9Z(;3یbl&߳w:owml 5M_Oz|{mz4%~~46؊mvvPO>F { izh7#[dhldDUkQwi.0{d4s@`? xj?JÞ)v''muO6N1N5N3Nƙ99uzvgFd4rexv؃F #" ~Hgř[ nfS,''YN℠@ =q܃h> x5WD?SpqqqkgR^;<6el`7vu+vhx43wӌSSN;Q4?F h.WW.|y].K^ܕzsOlr|#~0wA}oƏ$pq}ѮuƯl6ӶSn7;^.g+M~l7__{}FK5пeEwb:Kc/RO;#scVZ6,)r?4$<<SPJCI^G&uK0LOCrGr(MLNO8۩7Ǒ"R^;ܮĂFf~纡VYɆX?W?s g{T5IRP;lH9'}o3v-ذ3p'~'~Xz)NFIBc(qSDqG05B?@?ӿPg|^(%:2W_͜)ϙbK~ȕ'd.p:JNĩOtN&EO HR(?ryuu?bv*i" R(975"?)(! Cѓ7eCY:_-Ck)\% O4+:="8i)OOv"S;99" Ol&y@F|'fe8&ܦ9לne4XLx&3 ,](WXӧ{+{3%2k3Jl%yD'vnb%$~`G%QRc1N-ƋD%3NeL0&b1)*V//цg&jx #x ~K[ړ홒Ii`d)7d|ГsCxxmcb<2觖idQ6(Ogf_o ~x~>K91&5v=YFH?=)}xƃ]ٌlΓ\1T[䋻 TbDܥJ2lRd)Dȧl{>~ydNwPAܡŝΘinUcT3ZU;q6픹򷉺[E}-!f1/&F@ߏґw yMV&ڝ;}7$];H;DŽ(w;D!ϱdw%h{B^} d4֝ W~QiHb?p`c&Nd,Od\Od|ODO^;^yzqh{v4x`/NgYY'V\_fq^&|_f"b\>xZ& %~f87hh3:W9 7P0]yTtqhshWphWrih7}}я}kkZh6FckE:=VUb%;WpF% Υls)_JVr\mfLiomo&~nϞkWw=uk7 w@Nq=tC^hWG?u5qrpܴ8Eq]?\Kwa6F>z?9Oc#>)OQ>:D? O?N~g\- 9{}GG{D㛫E](w9tG>ߺw]vug~W'#Zнӿgʮ'CfB>y .:>bv%t_U{T|1:;wjQݿ*<ٍm}=M霩Nj s{(y T=\JdoW=@qW A=ܤIjs@ɻ=jH%WÜUJ%V#GUj%PoU-+e bRyׯ TOuYW%8u:&W#UouD%! VSܽCuS7@%oUJݮ8R{5ܦJZm<ښ@G&q1U9Oopյ6D}B;yک.Q TmU(yN]NdoJMTSk(_}Q&PW?:Ly[z=7ߩՊJޢJޮԝ6wJ5@&Pr*TJާjz%դJ>2jl%U15"OJ>QOS%C |c'/(9Ou}%GpGHU}(a3. Թ*C@LuR'%Pr:+{%GUԁ lhr(Lhڕ,!G5;jG% ̤E%si[yPeB#ܞpGs{:=*G({@$rDfŎ0ۛٳmKFEmKd33ƄۙnU(Y٤LF߫(kR>Wo9k:}yyDӏٷIMal ?C7~6}IaF`$R4cF[DզC@&Ѳb\#`$1F71AgE}_0n:4#7ztcd$)PV{REE{MrXі&#LLp~L#ÝPkh opkF%lE= =^qwn98|Αv}>~sss˟,L3p:NSq NfۓDD@]'PoOI;};QHGۤ#1Z S$Qdv NC9g,81ΥԩG;ўg$vl1HΐC;rN7N)s uh'S'J31 1c1.Ȥ|VЩvNis@1Fs?~g4`,6F&d{8vMIe˸SLSmAO-wh)cz#}H_o7ϛv3>j ML6yY3zP6@Hi c68jnB};9mƭ<#6R~dzN??$~p]])yi>b3 |5i[{!Y 29g 5Ap`}Ipcxm_myqhùF3C!AiWb<>'Fg{mAӶmϳGٌ::`208g.96?7G؟p4{1E̔g8rV fy{nhnke#]fIyf2vߓ?6gҞMf3Hmh٢?K ١=+ ٟ= Regw3;{VEu(wp,.v-ä:Ånjnk^EyX9X5j?6߲Y*4R2"v8g^=gZͲ:a3ͦbͤϢ;:GŮ%Cjs&~5kgKgJfIgHYQQ m9ѣpƹu@6{[;.Qjl7K:o(~NڼV97&y%?:L$pgv8?yW9O|pt\'ctt},r$_(x4ŦJsfzw=Nxؐ}&v<t;*%Z}|7{=}?zMfqi*}T{x \UU!G$ "<ʞYeiY9eĮ&6Mm&ޚƹL9u~1ޏsc^{o9Q sKәu5(Ink&R@0A  T `Q`(1 āxAHf0L%]2@&FQ`4c80LWD0 LS`*xl3 r@.@> ,Pfk` @P  ,bpX~ nK2` P*@%X nUf XjP j@- p hkO` 5g/fB i("F%?iV%eIX6-[+'m`PL$)g)>-):o e>Q@jO΄lЂ?)́lTO_j"G 11~|pys1HETEqY WK1W/S|}"}"F.(؂(/xjMam9KJ!fyʕ1(Hk3Z<7̹jD:KUMgt2.GU\rg)P9L;Ƌ\%X]i~6*Rjf{9$wPJ/bet լ^]S=j|rb g6RW^alO:sޮ]m9,>eeY{W۰8'UV+@y*kRngA{,)#RWF](wYf0 ;56f݈kGCTU"Ԟ钇]G=9a:Quz?Dש]JIN;EEHDBr=HC5iqHvݘ$Q{J1)btE~_(ε=LׯQq:X<\Ro8wӫ̓r;u@i=I-c k{ G}:e~þi8q/x߂v ;iDm!㨡~~_?; 8liwNDžGfYq㾁权ǻCmCjˆ8rst9e~4\{֘$\ }:Ӥ>ڻ>fw:I,Ic;t\~B ['/kpS'46O3J^E?k1s}tiQ=mK=rv F?rf;ۦAgd&0u86{|ޤ98hΡiKj@u&t+먛,^!nz]HOJj+V`fַF24߭ ]ʤ~.xGw2R7=:q.qhD 8;Ay+*- V9VUoZa.hi)DZhUꤶ^JNJβR{Sb[i- bnjJ:Z@I[j߇tA|NYx n2*OK4TYt<%k-++*+^AiftLo2uZ8lŊL֚r !Ș weO bsbfaJGX=Ϫ*w>Ek$5(i@4F4h*7!@zMNP}UZC(uÀY i)cY[Qgu,5b G;Έ2)Io yғfGY2'?eF1:(&<8͵i<ש=d5;.6ԗW1K<ޕ'gĜ1G{"MS τn9oRˠ¢(/nлXҀ`P^$k!3c@v康9T?:wae_,Ac' -1NZBo52o+W$YU;dO^74yJs[ ]|,e>>Nr%->Z|FY=;K8=SO,aVg_{D}mu9Ye OӬB*40B1>M?HJ3O6YTʉ/&5RiʟUqEo\kk_]^/6(з&?ZVVk?tD}vyEVhS\#!?8Jd ?f U&h~1=I;|sEcVqϽ_1ֽn֣vrt/HebKPc}EyƜV!YnmҒ/d9y=a$1; *9z;{۶{F==1вEj`[d4:_Cߍ:9LD{G8_369ʹF^Kѽa٭"oÂtÙpw(aE7zN.st։=17?YcD)w> oz8 yӔL1Em7?|e 4]=:;RbdigNg;LO>r)}MNʧ4B}YgF=:?bhs |mWgƨccO{g1̷gƨQd;p7ꪪmu!69?@cOSZ>ӵgO¯KO|4z\F(ν%uk⒙ f o(cW*}U~ޟνo8p0߼O?*TY+cJ͟G#ǟo!n8?ӿO1@fO3mOꕫхC,ѕ+%KWOɬlR6pR%U"W8TjD^!Wf٬q}xȣ W_E%l(o@vKP?Mo7꧰݀ޓ M~?Ml[#Q<}xO3`'x<vvKeF_3 Weltx^ny w: =+&F_z/L߀(Woc =? +$//p|w_1\Mp5cc1ROi"p~KP T¤įQJy'R8RE\9yz"yRQ"6Ք(Gxc  k,+Q,TeJKVRXF*eLfiy![KP΂sY!zQ 6vΫq݂8Y(7cl&cf B q>G~ bQ> r" /r!i @}ן_X9f-a]1L&rrb3p%,"Q> r!o @QQCvگowz>WVşI=`D?;a'z/N~j2D**q1N1%+=&""NYCşֵ@.EʓSDroY0oJ&)0x&<~?G*@ތ:6f K3t"<2) ADl\b;xB$ɀQxrhp" $D|8<ʼn| ؟x\[9qhO$$$;؊UjwsBpLDs^AlA{>1t@rPҊ!ɫbg-8̉v%Ήs@@Id0#o*HtsUhEL>W8#n"ۤ-u%HC~" "2!7$A+8W!C }0` $D:h-hp+ك+8 $ɶ'{O|qo9`[~ʖF5bv [5lJ1A9Z0y ,P3A>dz4ԙbL8 Lx<y! y <1Y[( ׂ9`.%Ȼ,ŐcԵ/vvs`n!pLJr$ْLӑIqɃ:r0Qǃnl ٨ϝI<% pL,zdb[< 9{CZ%ۋ ^?#.N2 |åQ1y`.kl/P8s04cH/cb6tXؾ](* ,, ,wTE+FM؍ MsgfgYM^y_[{f"q 76bc[۰6^;I;cI;}uE}wQ] ~l?Fflͷ[6]긍rijvPهFoKN|=mq՝z}[lV(zrՋzުO?^|.fan{^t/㾗{{g/u~_O膮b7z7y/.VQWϠ]|~=n}GOqPA>H[Ҧ m<8H{r?rpЏg?~}ߗߛ=y7vw8õnUV{g V:ԨZi %vuLU"`%RY=>"3dD.Mk5Z#:㇮1"sbV%W$J$v>ܕGUG Ұ ^Y$^U$)z"v-awǬ56hz v-: ޗH`pUZ++VV;UV|?3%#&Ső' ?x9|j|rBlv`Fi\4 BsD+1Qn-•1DU-TSũhfhZXLbQX(ڊ*,j mY0f*<:gP 16>&|\x-օ!c6b6c bsAAԳvRNfhu-TK"њxF3>6lě-ج6a#6`=qZjʯ&*b-тqh85lg8ML5'N (ob&lV[U;OL5ũhh8'sq[kc 6Mب6XZN_)hFh,?.n.q|>q\~f{q@T:H!R|e9. g =<=Np ?Oxr7z'z; b^.LNH=<63wF^:BǸR\Fz7rbQ_&ug85;0OsE7:CD% \[UͷH-VՎ%jZ&_G,qTXXD\ #::: х|oHIoe(,'rڽZtg#E~kv`e6s0'a``ygyx"}{^u]N!wy wxwz.Gtq"]߅zP_g.nbr Ϯ聞Z}hhџ6h1 }]hGv ]e\o]Jbv^Aݣu.u'e;*vRߨ#|yKsq8}{1}{np).ŸHuAgb]:#a9}8>A'$"SuCv=h!x9p~<Žz~9ۺ=H~7j_kk-ƵEV PHqW #vQsJî0Ĭ,E]V{|kq v 5A5@{jV J!*!vu`W ] wD=?χg_g?wt/p⃧Ӻy_ĝSvr;񞱏&JaG?YO}pg~#wmms}{D>MG?I?E'磶~W_S)^CGPhĩ)檅jZB(m#y^\pV 1x֡VȦ}h,E߲g} ) q:).Ni*;A Q)1~4RPP5 }&8MU34G КrFՖF;2N1;] T V6 ъ8FKՂL5ũhƼn4R )oB ;5F˩hfܫhh}lڨv4q::aUy*t滯F1uچJDQJ{Ji[)m#h1>Rm0%y;ND8O}a$q. :tk9"5wf+R ^u@G1.C""ES_w1ϗl䨡UyW($QDFq$Jij=@\U̘Yf

K|1@ zc(/*q8a(rT&2(gH#?nC_E]N9'q|/Ke#G4s+r"NqM]ԛC;2?a̗Es((DQR^7FP \I+u1Dw ^C0~0W3W3W3"5JW|1JPO*y.E )_(C.233T pR6b8eSEUD"~6Q" iU@_Up P Ynd"rF(ab1F*@\5r cd"~ȑ5u=|=j7 }i3d5(`~6Jdc#M4iHf1_y6`.|UXuFc!q\-M,fLQJ=F6T#ÑQ)"GI_ 5Wi\3NFdT6r`6{V?y?S_bEgl` c5Hc!q%Kܫׄ-f|&aa7J1RhN|O?y^X"?[ W)yO1220Pp?`|\9!s#̗;Sż_K| =!/!e Y;9'!c8riO QLik~g};Qa櫕L^72"e|iM#z}_ tcdO˒>+~ ~"Ҽr?~ ~Ʊq:QN:딈!^(^(i*]4LQJF6T#ÑN\i'xq:댟G3NF)u3ɿW=:3NSmmTkG(%^E Q(DGT {u`d򽑯 I(mhWb57+󯄽Cxmq㝩c/C"~ jk1IML5c_YLI3i,3v_}> 1G+ U`w6}= vWA|chCl&Z+2FY 3|-#F˨VS1NSS5YMgj1~mX%=Ϛ{3. tF8ErЅODFa8Uyg#_ x1"Ʈ,S00ej1s\TØR-JFE70xςGMy΃;؏}؋=؍q½e{u71I̧;hڴy>d>dvܯ;Owp=aŽ{p7tKci26B|'4vh3~x C11/Ǩqv-oӘO硂cfb0T;o"q ak hs S|RbSLߓ1q!s4%?񪽟xx D7F4W-%jŜlŜMTdLT5 )g˘Alc&uͤޙamarqj\k}3s}Ğ:\;_4wFc^e 9 :EGIQfy'8 3|-#V}TcDĹbZD3111YMrLT(;g4T#4ısIr3=s*w[(in4=EFcOSPD{ 48{3 O{Ӟ Ns'9ӛ6OlsJ=tOfĬyӞ'/[9m{Ҟ NTDNP''=5鞖$ÜIx' k;CN=ƞx N;8̹oױG{=_=X۹Ysy 'ƞMt$g33ɏK=J~18{О:wIÚ Vɜ1=_X׳ɞ+ ?Oh&{03u+:,qО4 蓅G:UXB$a)`fS͕d ?+X{6t&0Q"'cOړO IA{2О i%ݑ&%i`r'A{Z08Lp/3rϞsOٓ{'2xR/qǜӻ9=wgbٳuG.t=?gιb%>/瞕:r>nk3qٳpgouUs=%gO;8{.$\ [fo{RVtsyYι%sƭmkw-86$[mg؂kZ3k{V͞SK|FmQ9 ;v4QhKeDI<=fϰٵέ;9fϢŞCg칳Yp,~'ND=fOŞ@sO%ߚ+5&sOw=mjuf)GҩSMmLRpj=P>̉ĭk.grr~I4{ ɞ>wnbOŞ69edOŞ*"rO'T3CY,猑=_49SdsDܳC=+Jt>(g#J< l@&9O{=ٞ3=<=35N친 wO9ҙș9}{S7}s7ki$+YqOO7iz&S6?M]N;U㞨i${=ALEԩxeĜqOĞIt*&:Eo$zDr*DLi$̑N$f]<7YDdL+#xa'dfΉS0|{=ny%8fqOs2%4J#^FI=(Ι{V%829A={IoC_s7{SB g`x\Dn+9uQo>*TXŨ%|u~xJ= G`V0nbX(AUcq(E,BTa*| 5s1zfSo؟/b\KqcQ)zP "\g-xK뻔>^q3PuBGc'ocl,TUX*yݘ/:~ n}E{Wo ',Ib3" oulcխ6ܮv\o!w "z7G%.܇[ᵽj8?_\ڇ0f/_'NCݢ}#.9v{θ'4:w!: z1~ƅ:::w6qUmW"s[D͢D;|E]3!<Ľ{LǹO)!~`\QRU*T_U/u'eD}_}%1" # D3/.W[A_O51XFJ(EChcQF+p-H\0J)"Mی79n k55 #(8wу>FToGU(@Sתkd|i~JRPxE(*yU1Lr(kdYbng1R]Zu URd22c7_ qUB3 7n WS@:D};PŒhZ\7c2FW(TE\gD J뻎5WJ~FRʕbE _\5\n~"9ԓC}9ԛSf#(Q$nd|wfnQcX5NWD[D* OvLwSy}S( ,٢uo.e}EU J1)g\FRU8bV"11#Fi7R1vLM+1q31|%XEcucfQ,n(7RuEG1F1F<}TÅaXk{c4-?u2+)F2/u̓7b6-jڦq6E+b]g;JjB&q%P#68(E!f&zQ,։(U#px%]stݎ]{#nf}E1J݀1E;E>C#({z q%~8uT}'qqsss?poүx><8xi3{YygY&>Fu5ƍiqi<'h0ãx!&w#}5Fp=F2⚰5a$1q1Q=L<< 1qx{:i}4uq;J)W"d|'kqUa(F 0J1WJ\%?%_W?G=Q"^bWԫxoxS۔}ƻ{zS{8a$ 1Fw' -&.Fx "M@Eokkf|^Z\Gّz@Lc}/z 7w37qߢŵW*\+x}*\*&QD"W+e$iQB?R/P Pe?>`?ca,em\k63df0X2ˉr6_(cc;\; rA0֞'L<Ge ݬ`EgL_#e0gw6sCvA.fl.^v̹Y #g㒿yr7]l<]tn.Q^<\[{wK/m67f3j6fhuɞYͬ1-Ɏٌ̀٬vfg:9,^Y+ TbR3R})'zAy :%%ull>恂P]٬ٝ dpe[$#aIOKb)AOl$6gbs%$ɋy'/1 *Q9 77as97s9[ps 6l :_PJ{~wv#e @Og?ݿٽvݙwwwG:;5wFE#{_wo=z_$~G{v!͙մv1e?w۴u,u/c&h22GڽL_eT#"|ok>5xÉ/F)Q*?u綔2ļJ`5)M 狩ț"ɢěaLxo nϼ͸ <{Dw'I#:.d#3H|*qps8R7ShG I])o0LɔB)ěJܩğF=ӨoNFE&f-Cj3;&B1QI3ufBH0҈GǪ1V7sqH7˗IFo$>{̫bܪjjj-HT5D,=H 5׍?1~:W,}۷ 1V`ZXb֫ ۨ6ۢRVmT SHQ01SoXXj/Wi G,e]cZ}YUXͽZX ب6L%11 #[l9j] pT>B!c(^F>7X|k߯r K)DUX,cb!m##W>#WB uORo/ݸ܇]{p7߅;)(v{'u젮Ի;;/;G;g;;;wp`. w3oKb؍=>ߏ?@;H<@}Pםb8mEʧ=vEw/vb_V^[l}×>{诱[Rg*v{F}wS֗A}Fʒ߰uQ#܏Eu'`TD8x'z2Ɵ z?9vTt+Z*Ke5?W+c("eLË̷o/q}@_^Rz_sK}gçGp?ʿ/u{>f3Ìa0=ܳO`E uPo ЎړBRh`%)5q!7RϷ-~KaqC G.S@&v>'6>E [_ӗ/F2UB/JD}@Y_*KQ|Fzz" 1b,'"EO)cKG'(%Vm2UV9j(Lk'k_7ѯ>(WE9Z=oNROfBݕg]qF6J3v"]UDVbLZ Vܘaad5*]ֶsW~+Vz]m5]slqj4wfev->缾jˈbWhVf5WdY5Vbɝ `vuYgC5L)Y_%ncVB+D;'X$ZuΉɏ]k^k9W@PM$ʥ%J%qzJZ'\u]Y5ֈ^W,gݐ(_g$f-~W{S;]u^_z_^1@ >T iC??x~ƻx70L~I2y=|0q"x4!j#E 5P@woԛxIdy}}6}!X/E:7ow{?${갾s|uDF/E#Ke/G;WW~a7F`0?#dc3iq8~*x'D~N)h9&\o55Hwd82Y*9A|#*Ke"#Fh!NqNR'tw<18e#Ca6{b/{/g3g9/mŪH@y`7SG_ MF0KNqę8+_:ꚇPYˌ^=UtG7teT]q.L\B1:QH|*ψ\8S!1JQBPO(hQHV#ad# \tiK%n*uRBۇ!܋!ܗ!ܣ!ܯTe*H㾧3ҙdd!yEy\oQ8F 1K_)R-hkCȤBT$E1m 05\:T> a᫑xT"~y"zҨ7 CU:#Kd+:Tʩ3U̇/׉tTo",nprܨnR7!b|M7ĸ>Jm)Y*[娡䟩lzeFӟq||zSD~5 T剙ęiĝTkRQmn Ya) Qŵ PIyc>wuTPWuVЇ ơ1`l+ ƻ{0{b~U2*K PXE{1K ˱WTڝJOXK̵_]G}wG^<cҦ"H6_ZejZA@!m a᫑xT5҉[Fߍj b댅"XԙU?#616q_touRbHĭb-jcrƝ5v8nw('V&mTQC1 ɿ'[|D}>S}ėbJLP&jiue!7=ʩv̦Mil<?K:䵙 >U2bYӉmLSS11YMZkLLT}B]zG̬i..T /~c q:QT8Yco jHLd5S4(?C\8,EF9m)M"PΘK B\hB_O+|SݚXXs#fSQ?vfu1}Ǫ_Dm 1Z"NSSd5댉'pߌx/fyߠc*bњ{[ ڈ*VPNWgLug;~K}Jqs~1}R崷ӏr3͢賯 j-Eh!i^s1UMQ$5Q~'Z7Z1a io u&/+1>eP;5~O;|1IK}S(gM&$5QrƯxgLuNiڊ њHIjFLmtbO7z˨Ѧ26vΠ;oqŘ匃5q0樹;O|~6*UEwES1u ~+g3qNih\FF+-oN9m-3R_*eXDLbZb&;c(JQ,Sx "v=>^c뱌8߷@Ua7> <8HܱuUA oYKe/r7aYGI?-*guv3A0*GgMNLo"?s͜skv9wqmĭXZ7ܜ ssu9AN^.\l܂\[c+ʫZm37wffAɓϑ%8273Vd~h6fjςt.7e3[6eXYGȣ\n+#n^l.+:r{0~*\ٌR̔J) MAf)*e1rHQQrHLQY;Cge3?n OtV'r?ѹd: c96{c36 0,'R{%qKϨ5Sqs)6bs(Ad3+9{~IӻDg/>v~b}wwoO۽'?w{޸/hO}q;߉kYjp߻{v;ߞi%[}jGKGC=-'?2]ddbw]bg9uvw`g9vW9юrV%<1r^r|AN_4i0Ӡz 'ԓ}!tD?Ogx5P !HExA:2I,ԕM9#6оy(m?#2y-drIAy!.^_*q"?qzDEyHGHUC ^qxMxC ޠukWcx9"#⥈LGx{QC1 G/ff{c1B~N6MRC"ҼOEc/|J}Qߪ>" JHwd82Y*9A|#*Ke+#F:mHB}.g4>RٌcŒmE/)~A?c?wLǏ)?$F*R(Pi^1iF*Q񳄊p"ioD-׹qN^1;OKs1tdlc䨡?fX]`j?4X= {w7X] ػ"TawGJCb61gb0S1X1c<ۍc}~Ž)Ęij:ʈ=31 嘍9yXu QM]Nߌi{c<Oz`w5Q32ԋoxA=W7"{+?3&*,Py*"[#s'V]. }ߌo[.+|/V1>OQOW 1ǬX?,SKKT5E\o,&bV0{| {o[k7ǯ_3 XUb>s1Qfa&3PF cd|0c>߫1ShdF=w pJҷij kcKu2+O[ǬcVcֈ! !|y5W미Xe011 ªcďTc>s1U9fa&3PF_ccV?!=NLeB-?ubKV,`-UZ$Zqߍ9sT4Ac4BC5'$'b@Tz1~1~1~1~1n3n3f3f'0V'0'2.'ĝJ)3PdL;&Ӟ)k B;橴}hM6kC6oK=m--'VA<̧jR i}nSUSL, ,F8嘥fjN?fhNel4BCu e|31SD=riC]|Ρ_0anq7׎_jKYbqELPUtt13Sh1J,pTű0$pv-~ÌW]חy.3>ݞq@##s#ﳎÎˎӎߎs7S0Y\p$LTxαC121ND w!q;SOgL B{Ю. .33mxw^}>uoӑ~vN洗~8Ď]>iiyɰʡlJ=dL3%YdHI4 ˩KΡ vr&9'|HmN'%ΆDg@^un 'jTTd9ڳɝ8(\+Qίsk'w]\p Ck\G?H;H|i:Y: `w]v ]`>v'>~m}x{׾7Kown̓=״/;YήznzSgA9cܧa=`g??>'f_;ˎݿ}:qJ/ؽv]u;EF{։>'QGnSmw_ٕvwcww+cv+`7g縶]`xڝ_w7zݲnɵ;K1;9v6zWvzׅ.k`75;OlIڽ=Jg4r >;";v\߱ v)d :;5w1im/=P>b}g`}# ~`{v}#ioyd} ܽ=`.W$wP;~v;{վ fsvjߵc-ӵ<뽹#w[g;5Z^ZC5wfFvښ쮹ji%nݥG;3{ec~m]Urϑ]`*؝ٙ2##~È曡PdbRCfpEᅡ^z/1Ї[Cw.ϻ>^C{%{!3y,K.Q."^6qs?zrzc&YLL[&27zw/ܱupZx6S[5<$ Ã÷S0(|nĀpC_ =Е/Sqkbb_D.ۅ;ӎδsxcb VcVbSfb q؋%ԹDڴUJZI+ý}vDb Ũf%X˸X%3XK,z^=уk&K蟱%%o%VXXj6b7-6R6Ml-ÞrR}U?H\cu Aԝ"6('_6c0\9'YP*({s1׼?GQq#mnbq c5FEhXqc kMqܬFu7c1>^MP֤)b /EmU۹޸UFLvM;ho1[07ԍ(o\O\c$u=n$plH ]* .cjyxcsΚ++|TK[$X_cXJkl&[~چ3n64n *XJ57 ~gUs"ng\񼗯[mN\iTy1棒덅mol&l:]8U@|5jXI{UX-ʉ[N[/Oo˙+(++Vw+.eԴ+՘Xʨ,e1Zr .ӫ[V߆v"n?m)Em֨ԶZwЗiqV݊pb ތMa3>kFlfl!Vvro#6،-llU۸خ6kɍy֪5XM9cWEZo{^_QXKVz̭(w&DP=q/|c7shڋ8bY좌q/q{{uM}wSm6Wl&llUۈil'q+uJ7a??A@lϷm&l:uc VSX%2~؇j(g"o OcK$$O }ݟ徽HW7 sz[,D, '>zC񌏩Ƿ2X%>e?e}kl&[U|<9c|2>bn2ڶ6;iA嘆⭈ěŒ|݀؄5[6o[wXF;|??volϷ&l:~kjʭR+x_]oSxX5o-֩d=%c%s+ߊ;{TY?`;㟫 KqOyyvr|YL;: ق؟9?_ _sy>>r櫘0b$~ := El![@[bn'5.#m ]֥-~݁hs'> w,:`1;]X"|~w1.AR繄]9Z>z잆_i]fN짟4$7Maup5q ֻ꤬ᄵ2]ɪ4UTIP{KOg촑^ꧭz-o' uDUAtTp]N:VN02H)tRIDJY8Q'A(i0HOR>=I*Tj`2ɜNiN.Hߢ%ZgnA֦363ZyZ̤$jv33$ӹ+Q3ItR& Y_1IiNj%`יWUϢU7}Fs -뒜ʸ~NŪ'bI& X|zNZ)WnIU=ժUG˴Y,KX3,ɯVQ36vmrNtNM$N*qz˪[ZU먗>#Υ$,Jr(ɟ¹S9IgMA$dK2%',IG(2>#]ɒJD)z/ $GIZD:!:3C: HrpWَqfig4NitBNf*S4FI`z-wM˕5کBeHӔ)JeyErSHJrQtO}]ubHfN8Nlc zbϐ|YR sYJ `$ba ơaMV7yD`l۪l!d ~cQ0X`Vg==k,6Q0: %)$AdzgVR|=SĚJPfIkھAR<9NbGB*ϳ؋=Er4rKU(bokށH'!k`gc`:> F]fPP2߉P ̆มl G[k4C4a&ۄ0x d .p|'`qCԻ;/Ҕ?eM {TBEp5yA;kV%eЇFI"&I k6h,k Km%gdw{e[CYAq;PBL0t.ڳ [GbVjg9gpY{rI}1N1n㗱geWe_%W {U$I)` VX;VgeIi,JzwAkL65MZS6M&kv<~=e3\VPq@;k8&`/D2MR&c﬩0M0{k][U4K$雁ӚΦT6MfD$$囀<IXG@33הfqY`2S4fZ2\\O}G!I2߭f9C\(BYIt|>{І5yfΦTI{& U!ED}e&)l*ƦJX(b%ג˳k=zw{C&FI: 2+",a s c]1'+疫CJ܄9Tni~`Ek![}yl.a n%ck3\VPJmEFnUn}ZRf+s\ܷy0BXqT"M~HE$= |69l/Y{&?=IfvYl6ek |X"-!#O0VYZ!R!ia-<YSfJe}PІ5y[ |sI2BVPRTJYLf+s\6g BR"H,&R^XycGQ5*CgAf%I@Ys2 {fabF| 0I~˓f8]_څywa ^V8k%ڭ@{'+0 xP`.PB%U& [MJU, CBZ 4J$1s?Kg[+Ji,Jo׮XVjmbb[ZGٯ)_`?#$/ %1e#Y#5e, [[kTf)nb3^Ok6zekH N+}IKboWţέ2czֱmMl3¶f8im'yB,Z y( E(2P:_T:Vb666F:Zք`!R"I1U !yt0g?샽Xv.҆uxg}Y򌯅eRJa]h$)%]C׶Wkkp#UyȑHY [eQAv}n vsYi=qӘӘΣ}@\>z}Za ]g&]4op N x^Wqqa^A?/y cacccx9^p^seC+8?Ux pN)xބ4ށw]$ @+U^8A01'yYḙyN7؛-4Yo"s^#82,c9uZoI8^'I_&+Mcϓ|I!:>ǘ#'87zك=kу{0N=G i0X`((> XMpUC#??{pq3 HIA2VhvC\[2t.7F0Øڇ? ?Y2VVԭ,~Uh _'J-Qaopݰ%T/LuBJ]PjR 5z5 E*W*(@+UjU+}TjWt't|E]OyRǓn'5:ׯI-N&56]W5~ImLbRu0UֽRԷ%,eIKWv%5VkS_{ԛ+"%ըZ꤫L_Aҕ#I(BYs=$5H}G9AGoR)5D㺮HE'R5p$TuxHC*A"W(tuBR*A">dTAW* R]U(H5AWʁTE^5봿J&P:w_{%^y\^sh7KSwII{gBotG߉ɴr|ݼ]쿭|=Kv^LH%9\:! RqO2[zveSjI%$ZhI͕)4YȒ KrScIX')p97Hw: ywPvdJ633s+0Wɫ맭:etURUI[tT'R4T'v&+MI4%RRJNJ*)idBQ')6 $(VAB[~>ɞN * ;I$\8ӉNjpjdoW&s j^4$?̂,p9 ҵT-I&)ZegArÌ$rY쳘E+ol*zX#wݘ8ߏ1_n}߀@˳-g[-sΎZp284Ksϝ] g_wKC 9byh9h9y w72fZ lwNyi3yLA-8ef86z{ 1?pb -9NZvΉwmbRZ|8b8@ˇ pZ^ rטŖ96yNh2Y3MoyʴFn&ǹxl\wٷo5c׊1uIy Di|,f?xכ)oifۯ\g|jj⦯ b>nsGx\G.9qlڗ ~n:G]7{̤tvp)֎7~>rY]6fx|akcrg ?9]ݔۙsCxx |T՝ϽHB1yPG^< RM DLL "J"ԂF X|ֵ+k˺I]>-Ee?ܙ;L~8|?s#ދ:I209P;E;t `τAlï ͇P0a D`pHbA $Q T/鑅lrA ƀ`\ .`<.W+D0 LW5` }"P J 020 \ 0`>X*@%X` X zp`X j P nkuM  4f~nNn m1rmE9q͗ȦM{/= jt}ڍN~(AS`I3uBS?/FVoF/7,4Ru-|V>;me ׇ2N_.7 b-XKsv*;q3cޚȗZB>~櫃Q&.cq&SLŧ菔d"e"f"Ee諕1_QDWĜ f͜yƢ[HՆu뒽9/gϪ,J㺕V' kcοQ5dU#™/W4u<%@U\RvOc;8d3ɘ.w9. [\׮i)KBUu6*K-A^+ BT Aj3F&Vpt=XUT%$8$$زnl6xL&VuB9lhROjnb-Jxm(zJJX;O:k_=Qۢ,6 yõei{og~N:4 j6JPC+&Uvv(E S]> £TM̼2k<ɌİcmFy+M.Z{Uu{zS^*[==SMD>׉ NzvA yp:ڤs[i]6>]H NJՉƅ%0.31/&W>q.:ukFiqSޔq2ןfWUQ!jisg.i)t9ȫݽj>Z.S6nJeCY[8{SgٷtSV*=m_3-hzҳ+SwF8qu{~<&JGTh]Kv' x1goh7户6G8G8xXGX.a y״̗|:nCVFz;|ø]oyc˜j &Ic+J0Q'eRqYҫ},qӓcO)1n4یV[mvҴ%JV)$f^JNJyz~o1 uFD$T:ѥ$v%E-zdjy|<l.jv$-Nm /iOXk6R| RW62n{Gjˊ)NO2շX4ILI ̖jzCx*4̽p&(zS.ӟBcXTP2]{5X=ZkkwI jt3n4h15x!ԃiQ=4paG,Q7hMaRQtzaH8;M65o1YDz\=rrzyJt &=iv1$n](\@PO覆Kϥ1t3gld-=}xz]ǽmYm2!nߋ[aIE6̦3}x㲠B*/n>fg^އ}tIJÛ}Y`>L E֓ r!x>Z[g3Y#*M69~^Z tKs7+Fsn>o,MҲqi! MYv{;siOݶ\mG{nh',v#ZKʼn(.DSzlDfu&XWyzn0< K򀰔Kw=wffBEb[m,6ךl fZ0roF/A o|L O|^6pzَ7w6z _ZˊUfhmn綤,KC[~^>!ZNe$}CGiaqB~Cm7nEP Oyhڛur:\RX7<Άv,9Qf ?sbIBoq?џqD,&&&yWsɂd ٤&wD{;/zI $̅ɢ?8l;! G7zAID]_w{'ۻ.nw{!_|f &e@lo^6?]W ,W4\T[7k_YA?|]~*P*}_+lhQ_~w+|\)oЕOJ+{=)lM>p?҃! 40Q O'.x<vgO^X+x^~ }r{?eW5:9]SG%xГo~ ٿ %c}!+=q | ?SI@Ϯ; b1XW58m p~KO3xaPB g(RZ_Dyt*Q>|3'Og/QķgUGe([!h!hn8b#Y͂X6BIdJ*KS2X(إLb㕩-q [ˑMBn߄rP 6FFv;p++E)7cl.Φa\Abh>p<z.e }*b 9ѐ7r!i(Ay!(7_X9f-a]1Lr|b<Ⱦh]^͖<{7lUQԏ0q~n5DN UC jalfqdrC:ِ^cN3T|)AH!LoD9f-N=ZV8؂p׫g+i2uHR竩5Q-Uc"u:UV'w<|#]2o$򏀜p 71kWz j=o8?6:UJ0#Ry{./!x=q[ZE4ѡDد7ifHSDQ DyכNS !(כ4RB*OBKo5fFAș ! y[A+YZ~Z匲W(^6h[,o&bwr%9\]%ؤ^76C+YɒdJ2$ "dLI9ؙ@څ` d,P nm 1KL-D1D@2]2+S0w9i=4/"y@Uǃqx-:wa:s@GrK=+h els㥠R~lm=yvB.R~ oעo;8諕`!!􍃠>Em( ρHbËBÕ0` Y R 938{7v"x AHODCCÐ߁~ԁ:PwprUNH* 7[$#ndqoll Z,k !wmT<9sNfz}3G%wP~0cU×F5":uA踉gB|)sjhqDY(wڊk5\g\-k(Q1\h܃x?m?mgll;htg;(geNݶS<<[czx/);C~oý}яC;o'1vowSnM{(uCP=qc`Mvv1w1wҶ~Ng>*kN;Ȫ'X,pV8V1؃RPՉ2qW%F 1+{eʙ v_{4\wxkv|UHϝ2I*qW#+`hlѮî6Jî0WW[]%>)®)bvqgZ!X'Y$&]|-&liyFVɭՂ])4\!$:*pWɬ^_$!s$XY2gF™ۙ*g=#;qkyws$'`sQ(cgv1;o7umwՙą&Ic"sxskwNp.;ф,gѱ3sSӂ^N^XQ֪u1׵:9:=ZAuD'tV]›EWuLx861QzquE`5?[Vr qLVtEr1l9ۆ/Ak$|$_>/CW2UZluz܀&qXfbB[} e>mщ"nMq#}b Qn7mŵq UWr8ƥĽ2.K(bp1u:\C{t@Gt"]kt廚5VmשEotF'dtDG;EVG(?RApתkpJN=8R\Nˉ9HsZp/|hW1a٦3vv`'v9v=\c<" ?,#ԑQ;ZVmT[CtN.JLj;Ю=j7v1vb6/c5l^ʹrKYRх{m'TDW]mZHuqÉE;q8BG^K{)F]\ry/ g!34^NGZxqx,FG!#1"0<C113П{OG_b!no׃rO;)'|'NF/՛{G_3?qa0`FrM*A13)/sæzZYGkD_>7z:ѓKVǩ lj? ) Egclvl:Gz4abl+Cioޗ 1}+_7*[<ivn1)^SN^^v6u?e݇{q w5[,R=!A| L??qN'^?q;v]^܇cE]MݔnM U pqv&g)FQ7ݸGO6"7BJlg 3Ӹ6{pKݩzvq&2m%uh8W}s/ٽ~Gy}zR^S(;5r_D/OzOPwrPq:nmxg|?c?m{/=>h^hWeأUOڱj&XtrV'V&]ĮF i#6u^wFu]cl}qE6QzPsV#*d?pWѫ1D+UFFr{獭/od]a"vt ^k 道CW"zh]5Dv9B+;z] k{,Ez츃0gv; {0;L<xDIhELHQ2oFJyO0JP}"ݍ:#$W<EJNHNvt:ǩzK>H~NY<;_.T> PP1JQ&W跾Ro{^qTu:YT"*ʼn?'(B1JPʵF8zݩq:U@Ou(޾+m%E(D\ ,ы~7N=Uu:\ˢ F6QC9'o @b$Ysecci(1bFc ׍E ^q3I9I3)?ˤ3O_ JLts721X1F!U`$F`8a(p1w(e(E QB`Q"R('o8RFrX%6GE,15F `jCE0C\!_ߜ}9ܟK\b?r(3:0>BJ;%(EQJTZy5}g8x;)gN~|̡fc0F|l커~١%ܳkEҽXɸ]| VSjX#&E#ۑrj1rT#+zpkujZVLƷlwF.ӷ?+h5G[Bَs".ߪ+CUkԵı8UW WɽF_EYՔ-UԵWyr%k\b^[xoE/~NjOc }>e#{LdH'2ƞqKRߕ Wkp-mu"e`w@%Pލ7 kLa+s?Zu M+[w.eRDLxn=3VKKKKG22ָ~6ύߊ ]5zrqq|%(mF Q|!ldqI<5q5RWߪ+θ\d#9Eɾֆy﷡%x6H^/Y<óOŸyQM #2GRH0B P}E%26ʩG9u=s4qO((eQJbs͘[{07onGx_ύjkZnN&ηWⅽRD޷!_S?3ןSa<|¸)>c|Ƹ3c/6|/7\H Ȥ}YFE> (QbURcQ'zw|t|%ʩsbJyFJyy|4rU?7U+|I_o"B _6e9UyM~ǫ/2ҽ^1a8\TGEyG;Z6tdym#9*y #*Ge;đGDd9ŏՏq}[Ea6%LF3W99U8.Q*#: UPdxX>7R(kR'#ύRGYQq8>FS_C45:;Ǣ'Y,E0p|{[̦a6umpUϸwSqa1R,SQX5ZA֪uaL:mS۱C.{ݾ0q}k:30>z"8*Ϛz0١wwww? > < f|o;/%? _s7[b9'zao7`wK+@ykk8zF`7V_?_ 7/3>6o郍/zh_uX#پx{q.bVb5֠k2QzSv=u@]6P mu@]7P }m@[iS=m[O;׉o-qCO g!.Da)`ѷGa~ hs(Kmtmf Hv_N$ڳYz6;kjF^^x^z:&/ȿɷv8uA.?wܹDysrsȹqܸؼ8 /.䟪 fl9%f873.ȈK6a&g3ߚ՝dE?'rynsm{2&g/w-^ZlZAs5oe%%^nZs$fKլ\bs<4ӷ?Dڄ3l SfiYiP#bI/툨ܳ| )KGb6G|08+::6&fq[LVdV%_R> slNٜ\)7O*:G*Q~T\(XStSdlRlR=GzC(6rr3&7iA$kf,JT:Fj*%.e3nR\fR2l B> l0EnfQ=2Fz'!7!9H6(1rsV5!hAT.Q?ds %7_8XPr'ܜ!7_ 5rsd< `9?AY,rt{T顶!7f6q3v:9Y9n6Nc8ɽ8ɭšߐ󿕅f$ʺq3ns2mlM2kܬ56f,x4AFfe,7=o&qԛ$j$k?1f'2ee$5?W8&:&^.͡34'o&Ʋflƌ-)dȸ1AVLl6LL7f4%%:d 2VbT%sZl>K;'%UYD磴K"%ubn9,<6p6BgL5 \ΊR|ԙR5j3A 'aBdN)oXGhwhӸgZ{xS)9yjc1ZKĩKEGψeToG /:-be111sluZ׋~3zL&Lªp]h^N^mP&lv/RDPp WP Q8 v걞aB{p q112>uiI X2wZѝS_=6؄8pq!1."E|1C00#_~^c4|13|Pj֢{5XM<_*6R0#x "12|b0MbD]1p&ΠF~7z xV<+c3}klRԫjk׋v}~R`wW|=ԩk#N oU׉zuQ݄-ֈS·9n'Cwsn>܏mj;vS;.@nqz7qGVi1zm .sܫQw׺^>/FF/iY79nT7EN[FGM0<3|L}xgOSizZϋS ==ŋ4G/[Q(>N c=MS'jI׋~3zL&L߁xw-Ǜp1$0#o(WN}|n tǠFQq#EIu>-4=C09#4SçSBC3'8 / TsqF XCl+t.ۅPԧsqA5P smJQBbP*@>Svu0rO.ʥ9%~_78'$;ݹ8X~*B1JR~q2'qq"'W%~Y@}B;xq7Q^7rUJTj`9ݍ~F,|𬌟g6̤- 56N0OdL?&bBO10B̩bq,bR1DLac Shd5 i98QjTqQI!1Y(*L3 `:[@:}8lf8jWqlicG./fz0'?> /Cqm؎ةvݼo{As_a/QQTqx(Q(C9?@x>{>{XP8GQl~v.a3|Ϸ[Ķ<_xzJU 7EQGݎ]jځKT' а+we1#z/sbk}3i<ϞTqMc-oLUS011 OZs`[O:g8sx/0^T/e Q^B^dl/zV=#*o)bēkURU?F8 ē=gD u= xQ^5^@2F*UjL$LL451#Mơj5;ix{/yzV=2>ISSSbZ)zN=^:EKij^doMRیwE1.?QOgώ9e|ժFL1ƩUӈOb|LԇQAQ5gmIy1EЛi33wf8a! k1-cKؗ/W_2`<}k %v}I_郯ox" a$}{WFhG9*hW%hg5j0g5Q߄ H=&ɘB}ɘF|-t7>Rgw?0$GժJ|OT^;hEPa~nx*Ľ*fT)h<^Nha>o8V8A2>n$fX، 9Y Es(l͙ADO'w^Q63<Ԝ4X2lz'+FBpdDg45 7 :ffLxYM H51/[g$T_9ѹy s?`l'`$껤ql&pO~c'ɟvNO퉼=NcO;u?-ݞSt=1IyrǞq{&nƒ3pܻsW,۞Y3س馞I'n i}ȩ=ٞ0=I>9>Mև_ ,;9osxcw\_}y=˵g'Ɯ&sfkjsڲ8 fsY{&kb9=ks]US딄'qš|VIjLvJ,==mxϝg{\5LSOV퉪=I'48)rNEcODkSJ38մ=Ltro {vi*dpAgM=o+ggk=Pj%i=~ϞŞS<.8=kD.qWH<=O3;ݒ2BMй's\ÓDpO[S=ikxʖ_-q4Ӹltms枢,ԬYsO˒oQOiQ]q칚=K ̞v%RP쉘= ==^ O8'\=rONp:RԩTuiSp,Ş(蓣#{ZŞ!{2{"dO:S{bcKOsDx EXD|1F,|2_>!1Z"Jy"P曉ij*S(1YVccU#{Sy4L L¹86s0Wd|, E.}`Ō#_*Kb.Q{rׅ \)懫<57\M|q,T300SϘI4& ƖQx3P{QbU$9O?8[Dw/B5.m6a#6^Za Vs{Wg(j)j)s9u_N,\jyn|9絻UНsmw2dJD*C~,{Uۈ &}xxϋR9zrg3ƍy?%'qO`?>OS~CQE(PGh(mS/UP7jzBPOr(S(?O\ONȠ,~<1WdR+vax|Mx uҽ7"Ҽ7#Ɗ{zGwh9ފf,v_GL&mJ vogvog ټ;wg3twf~;`̺vYaOYΪcg̤t3Ysslٝ%31Ό87ukg`[3ÍYll٫&?km8cMBԩqvho~MygN=sع;ǴJw.iVE8g3L;\(&s"צԦSyd1+ڹuʧ~5x Ӟ>ړs1WYetƪ1ObtbxnD*ADNϩE{_DIkV:+⛈L |-rU;WLkv:[_CFy-si|mƶXdz&ҽ8GhVmmUt\)'v\jo#іeEG;RG#k&šEQӷ?j!/9~~8^TEtT\^WF*eDu22(sG4"i?kR<"_Sz^v!E^߈bUq:m 4T0PE=Aj0 oc.ň212Q(v9 ň|6@ `\3_~">^oij,ƨj!){q:N}ga!|(b$}32R*Ro7JQc&FЖq#s1":c@5g 1N'o'ƪөO CWg,Tx>qcn(<jȥO| cc%P(RŪDLb*eTޗ{1\ m(0p:tՏx}E%cכr{SuDFDsˉS*bVߨJʭU^P*j(@>59,Qe3CKtNym6 PTDTPg[e<##[.+h/;v%(F*DWy"rˡL#WI:>1qdTb2Ț"":9jc1f҆"SLsLSbL1rT*PϩyE;`cm!cW"GLzE*jK q#.%oqe\Ay*RQ]p!.،M5P}EkEWGYuYG;xZ_:g籖gg^d/O4K4Oi'zQ4..˸rE\ڝ&P$E*A)ʨQN Lq"*U..ey_XdȤ ߅6M"6×CFʓ:4=5^j|X#kRg}&LL\-RjF`2+W*/ os̪J.X]ڤ׎=]5^]5\5\%7OnlgWmvfWe1 V^ѫ`U笤=޲rW=}q_=ޓZD<-R3-G9F{ϊ1jJS@&f!91rGYyG=S>˧Խ-L{jrYm:~bO$Up5: 1Jw<J=|-~*m|z*2kۗ.^Ho8t~z[y-ʴތ?^o rTxWʴyq05HkFn' Ydz鳿P_̎Pv\jo#ad_Ea  ?_\dWFEm[Ux?֏?t@Z|/w[UŨtT\^KF*eD22(sQA=(GQ~+ޕ6']TxRq }dt.LvBGmКkUQ88G8SyXA6g!3Atњ~oh耎u]q Ǣ8G9Qq{7H%U (EhM6h+*=:3[]cu%T*FrU+XF&3)U;VzȦ]Fʥl#Os?gLg+)~sDy'8q:Yuw"r\@-"bKQXVa5b=mfb\H-y ><;Z{GGNq˼0?;?n{/+$z]&.`{/ًxA=O9b62w66zwsω:b^]/F>Wkx[=jܱ{-&cxԫx%b)u DrgԊrL-%/0"b^V0_UuTo߉E@і:?VPuXuXzlFɱqz;f{IjڴF7x:W+OzQc}zdžr&^S7zSE9v/_߸c鯔c}1>X&>QKݍjZVô9e_<_?ŷPKhQ-[],Z9j"ƅ j36a#ofl&A{ax[^k_M6&ۈ 걞:E`5VXj~ZFj qŔ`|+RF wZ-m,bbl& p!"lQ.3.a=f\*+.#el@@Bq6\F{Kiq m6.u珗X:: } }l|KVFU Z Vj=Y֢k+T-/Wˈc,%hT߶4Qc15cY'vhq,;KۏXY{lfq脎Xhvh6|5Q8{#p8'aqeFwwoog_GG2&G50vۢڣ:?.\U,-Ki2,G-]XjMuXuXzclim&k:}z[ eQJ>Z+Ps8Rb:~=ک ?oQRB7s"m;`W_:~WM?ԫXD,sc圇EXzUpůM#Nawv)'=ӈՋbbbV˹nb IO^O=[- 1ĩ99Q8{fc.y7qqRF_K})G}Q~Ա~Է/c/}ߗK;О>޼}hi96L~~H>cm $1eSiIӳ❯:SqSҝ3Ğ9#It6ߕǞS{bO@rN;ܓ{aO2O-rSFO&1w.ќ(O2We4vsvYDOd9g s/s{~{`19'@p 7g?շvw>v7>Fx?swՃ=uwyGޔSۆ w;8;vǼny;=rwoDgdxc×:QxkO÷N~ @rh3kz6ߟϫ_2P>'xy'~!S^Nԣl^~5^2.Z(˻dmo5JoDFV"{zX=^tql'YQ>jҗH\oXFϊxUתZ<&j_ u=VpGT09(B1JPʸ\<@E%VGWTPoe%E(D\p,b G#o񡏹Ob ƊEz6Tw۴71xh^QVORFއX4;kϸ@8]}w}g QMww #;#λ}gABB,_<{D7y?xy~7O W}⼪_ol_+6xu8F_}ƾ޻-x1k)q+ NN :{@E ܻ >F߅ov* e+B2%(BcÅ ! g"i1|R71XC9(c 3)?3$P_M,~n Rgaj$RQ14d krE,rʮ~hoBP?"r1TTĨtTjUqQCjGUbX#й阆ɘĵE~hqƋ9qe-q&ґw*RߛOMz8wRP*nt̐{(JRayuIRJ{Ga4"E2UuV9ȥ^FuMt5CT"r_6m1))r)UϳZϳZϳr_X˳ VJP\KFXFeQi5oo;z /gׅF|l/7RΙJ|nd;rb63<cM^=#G+1n>b }Șq!c7{aBj΢!')}JR3u:~gROiç?Ǵ#G<i<?oh|jP/1rwܝ.QrO !7d={<݌it&x5v]/v;-.KQ=ؽb\[`eLjԦ*bwVnEqwO;%EH]ݐwB]oyw8ܝ]h$D:f#p<~oDm$Hu3 a/b-g۱hN{A<Ȏհ;v^؝ c;q`wNBk`w ;vVgݕ}JdoWvUyVJ]EgjV̙8Y Gm77H&Ț׮s֮ebCuedrp5" Ү*Ѯ0X +`4Kޮ-Xk1wrT*SfjF Dɷu+"w54r9-ʼKpsCCf*t niG>=?xɯ|K.-=M/xuC=|ج;?_uw^n]n37;k֝GqgfyzWքxwa<E>EmrZ ex {CY- ex2Z<B-`7vZv܏p/]N܁qފun$qmŵ}u-<.W r7q nUvb߁;q=avrn$LVS"n΁i61=V-bY7ø^LUSx$LDdbgh}]jwhKc-QFoVa%V˱ Kkc |ϧ9g;:9g8ؚXO{З 迅XD-c }˰XXXuuX}:b'z'~=S^=㢞wX$cv]M|hrUVjM}kIv32Q:q7Rw5ZM;;8$؉A*J /T\O#!VqU)E.Ψ{zG#$$Y9 6hGb!{޹ny#H9vx{.!ǚV?շ?p/Śxq|YCsvts&LVV7Ľ5j-XzAm&{[[Hmގ|}Dz 1U"%H E id0}FGZB]^գvom/ͺ"A"J9쵕zαֱ]H gȪjPRw~7^S+O<q ̣܊<϶,b^UPvc{,r><ǽ~A9x ?_%QèSo/Og=0[ p]%-:묱f PFٟ(*S5jQcV#j٨2"Qw}EЏ:~3rG@g/5TUe$1d$xmQqTۨ <ơ6)'k8͜O3GN1v{'p\ zpGpe?皗"LԽRQk18C!d33y3O۟>ũ~qbcǘGĘWŘk9}$d})aYAA(2*Ǩ2'Ƽ|/fuGQ157TUr|6ȈŗERcGu/Ϲx4c9D=g{|a[.[ ,_3sY]! E])$%]}ޥ]qqYW̻WJLUq >k#Χw=us7tQPEVBUޚ=n]\&*5W \uRSbj_$2(\" (r_IQQQc x JM3>}ƵY[IQ@?! ץU$}q+r7.~R2Ȳg˦bod*- U1[SDݛjf:fq1IUGl5KL5CMga*~}D^츉} dnd_ir$M"77Ť[xYST45]L5KVsm*2@RZ|iR &` 5]MSS5I5RmikcyٜcU q[CQğkFQsy?7ql5}L54LL-\oL2nGyԘ8];w9>+vCy6;j Hx&b6v0VĘQFQm\sw1O9gwsY~/"뺗|w?X,£\%5c2uLŌ3bbζהQQU:j.R܍P=x~^Qg5lTك ( s/z>6ԩ*ucuƫ3!,TGX}ƣYWIQ@?! ץU$} CX~7~_udC^lWp*O|a=_w}ݱ M[yu| Ƴ8$ɘ;&R!imdTVT^ ʺ#ǚ1KyO5UI*bjgXVa{kZ__ؠ6Msmf@YjJe<ixR$"]W'v26-gr+漅`-a=_76`Dvx[V汕9z6漍vQE(v2o=uX5j5VaZb'kzXإbx2Z.N0Fd$sI2sK1smnV܍-">X9ȫ~3s+m]_Uol=`f~flRVjJr_S3d 4|-eKpN,HUD+3Qb.F38O}X}Dy5$>n]-RϕV1;r*eQ~X~^>޽Dn5TPD?! H! 8b1v=6vuv۰[nn~{ϧGq33x<3ml&-CּhfP,ȍ٬͈:eXy/ \n+7l~<9hɭpjkĖԲ)#}6Y.7)dl^flNg&,Ȳ ,)DչtM={N83f:lnflN9璢?ioI1M.ԒV) &ZSIgr璢[~QSII$.N"URk&l&c7(O$KyH#=#7 rF3FW}VVwN(HE6IdSDArM @3#$l'HddO* ;6c96plM؄MsƦiMشLsB&HtMIbq+6UܔP5Ql ŦOl]&N&)h͙\͒ Iq! 2 6mDF8Qm԰) 7~$3F=5Q1a65s3n62i]b!v:_M;ܰγzܳܯM՚]1כ|/ƌy\䎿^y~9Qg{gW\G{f{ǼeE?Gym~e׋:ԚF;~7^3e?F;ɷI>j1r?<'vO<=[pŽיsrn}/ wO0˙kuu;Q(1,DKcp89`(p\H,Ȗ1C0M1a}A@QX4 @XWp- T+P jZP 4;XAXn7p+Xu#S!YT)5FKAӺ{O{'̒R>q>a(ԏXLbOY[ gϝ-#?߆AmtV?f1,ӝn*AYeWG=> ~O`#]ڟ1ҹ6ؙǛwZ69"|oN%p͂]-5Թݴse{_ΖHvksacxv!]H=vr{-ѼeR91>e{Ir^Rp'&D4١1]+Z\f74k5沪&;WM"DSqFT3MJNJiECŒjb R΀,D֌t>iS#v-Q:[5|ZGsG/PbIbےFPZh_RgMwsl+?Ou]Jv*r8+j2^3qkunLq%)}ݾw׭>~tGuȓ{L].qkgv́#{6uWZ?qX7F:ޕ^i'$F#=C ]z(::&K zY6\zkhN/blkwX`q"-NsD]rW46rKJ0%bGĜ퍘ACֱ]WX--1/1-}ut"U..U]h7Ʊg{#kP,: =Xs>zrY]ˠsPU(ǹ>JBFܫ];F26*>Ak]9c /x'|%'LYO|0 o07Z6>6>2zi56{U_3ȹU PDl7#X1R,R,HIZ9_ aŒ|X_dYdi#_&'!3U8c S&m++m? /W8VM0ow{@??|7@?ӣߓ@! >xS_@sH@@4ݍ^*{.1wmLj}5oTW;<0)aVJy}[fRTEE`O[[;R:;&.(rce FA Ek샖`jw,jn"WRYΆ(l2]fyx6J)^p|.G(WUS y6ȭл \n:2䛎(7 cl6aNQ4z6 w1,'s<8|ȟDr# B_bΤyKuz ?O8ܱ\.?͗׌kyS4Q}4I}dQ_7o6STT:L kJ_PTFWa!{@6{ r'I{ zRo6RB0 -8>?Q>r :zF=Rg^8~--@2+E)[}7_{0w{|*U`F*ǣib҈oϷ*MeJI >spRBQDyOZ=aJR{'LDyOo)a\G-ۙyfP2Uى:YMq› QJrqZ,\{AV%4if nPr.ޢ nu2*I͹MZr5:Npgֲz2%t`u.1 )&%9XC9wqANp%Xnf nJ] 7s 2?ZQ oBf  )X'D80zq\!06cPc:>X㰎'ⱖZ>$b=O@*Hf0 C$Y(-ɁoQ)qX2, <'XψoJsmB1h/e }SDZ_yB$NS)g$:\V4ZXI\E3*MVh˱L[qxxԫZ>:~FM\f1̸o\l&fLxc)Cb#z#MľO/pz:'כxol-BFmԱQvN[Ӧm;m5n|ll|m[V-m _6D7g#6W?"֬'tt ͘=[9Jěس{F2&L35{~D]{o,fQ9FECF!3ȳJk:f#Ҍ*3 3aTYDUDy?ys {>a%buȼ=O}9A󁚟+-T%D?Cx>dVʚ tcC9@Mk!#vsOޓd?z/ zzK<Sw֛pܵ)=(WzNIxJ od^qmI<]{Okp~/gֳwK;!ugV5hMoDi{? 9\!4ct)HDt2. !3X%.RdAHB2R^׋2tt=I!jYZd"NS҉?Ҩ7]d $:c iXg`L;uŴqǴCbZ9C1,3\l`$F!c0+ F E;ESD}E[DEm/bl+ Q:#qNuf\<2V(ra! & $@@]w-i" HA*4S@|#uF [HmJM\W }LFxޏC{-rD.㫌mǕlmk8N*%x$Hk1(e'R)(P*0kf6S4mh̰$QIlc}sfXx-#yd"@܎b& e:}ɘZ9Lt5&SJ=SyVʨ\S:CH<$L֦`6MtMJAUfRLI3&Ig23W,imʘ*SɘM*8N)zJzKkp=Jy3t'%f3Sɘ$TI)E 10E(D1yHb #? Ck;2` ὡ0@6(b)h䣀 Q1_2Uk2R t84cdQwgkekô!tc bD/KoW Cb-#C,%׊y~G Z~W&5 pbu1$b E Ec&2Ř1c1rE($N!1 SW~87y("H$~P_fS6Ȧ=9+6*#iH>>()c> P"Wc`1} c/c2>*E9+}T+9֨b(ъIR_?B+ѢBOɥW)JXҾ\'2Z!@+6>2C30Y@[H܅ԳQ"_D;ӞŴk1m\5.|,8O 9 Bm>_yߝ{fW?;#;z3{cf6Lƛ3+PҭID@GYGGths<#Þ[bN|"Q%v63!33i\i]3Emg><žCLs3G:' uv_l)%L  ̬3ؠԐ?~ta+GڭWxf={O ~rI$vt+ឳk%ytQl] ɼrD^'O);uDm?E{Osg.9?U}ί<_>[>W{U5'i) :R@7n:OWu_i@Wϴn_hZ:zF&b7do V:[:Y:s nnЮp-џ4F?賒)Ǿd#%kqZ{j(_kqhEZ%s]_Z\p#enn'׭ԣFݮv_X=%)ĉ+nrhKݮqu\]_j35"%N$D3眓 \k9Wz܀97i7Tʘ(i\Qu2LtѲ/]݈tun7F z^E?z|s ?ծ"O_)?͕ G(ѮlܩW}~5v{Ήqwj8]Q_k4Ki"$q/^Σr>Ν+Q2)YZWuӺS҃z]Zыz=ez\j<:#CDҺGFlW=ѝ]wF;] EWdmLӘ:Swcƪ1֘k8R9>EK&D\W}·rvVwrH'r;qo'u;uNݪ>H "CަH?\S-R[5ڠ-~,#@b%3IԑDۓ/z?'1Ig(UF;qjC[# ZZ5#AnJ߳G:4Ȥ|dUZGi"vk ڊn+~%t2A;:y_IC*R($GI"-㮴AkZ$jN9R_AXk+rO#VqӈN]ہvt N5LtZBWtCwZ/>CG~я۟3~~g?Ƶʢ\WqUzP'׊E/ԋ |YD@MtK4ڐF[Ri:#,b)]EqLtMt}h'^ELW&@gtBGt@b{1JOV8+эqWjYey֙r"~eY< uOmų(b Zx~Wz^#KX$$K^KQ{IdmJ@62$"ْbIҴt%]KRbJ@bH ϔ2T$3NJإ!]5џ~The/m墯X!XzkOZtG7>Nb-<=G8f!Pfw~|]9|}|"E|(9W5e^b<<DZD[g˰+(8OxӢz'z7h}O~I5@ $kπR,cx 9VYQՏZ-~1\X.]EL+]'1q,іj8NY.EˤoNHG+H9W2ΕT$Rq<=*hk唅qҿ4-~ZQ }/ӟ)x'Nc8?8upnme^Nb(;6F}[w+o[hl_[>o[-ѭ\[v1Ɯz;̹w0߉}iҊmhcK^~AaQ;UNhشC,cq]<'p\<ОJ8*C8HLcv}Pb^줾J߉Z" 耎Z'uFxs"DQvs=xavq#9* d"qS:O`Nd-r}\]u-d\$ƻBVz"ߕ{mv~w>wʟO7|W#>ç2?0111R퇌퇌퇜9r |ĵG\:cO) /G| _8^O_ RF)O|Jgd ]h%>oSBQJZth]şEօ>(t~iό+EK&D\׌WHD2QR'vIJMa?=DڏxO,W$$$K)T-MKGOPҵ4-UK cbK~H="qRR{{jlϗsw_RNrW-͢&ˍ!nnZWdi]FZiC]O{$^+]k݂aFcC*|91?A*W+srm6O)h FffLBcģ QB=%[JJiO)m,e9S 7\s0WGg iB* h'?`>}32G& 5;[N?sN`-6`#F٤m[8?<)ZF_wW2(&QL}]BJhO rR)XJqU&VJęM$R!֊5ĵχ\g-)ƾ3ϵN{R6K_mc,E(9|m41<^:Ϋk_:>CWsFH98lg팲$ 5^fgo2d{LopƇdsL.{kgn^ІΚlh6ĆfaM˸&ZjuԪYNV431)6C5Q5,hQ!4i&i5MN2C&/ܥs]*M24G&tsя1g+LepPf'C3e%Sf#M>c=/?o̊g49F_kAW9R6d!ch1|eLch.fk &9oO̊G.;I034Va .g(DE4D;sh5]{\atQe k%rn1r/|j]^6+3L2^Uټ#pPFv&_gX9q9[n97;ߖg35;fjvN4/V]-4w.ofrf27OVQM2k&fi&V5}d쌙ɖٙ2/C13?^IT윘ɇ-rajh{{6sb-䞷r EKgee6732;Hs1+K30B}gkkԣ]J}^+aK ]j,c%16nE^ߍ#{nھv"ދNف6le`36aXՔQ's,!3 UԿv=+fVrZɵkj%JJɕ|V1Aߋgy;-u#pb^z߯h󯜍؄؂۱Cq-;:vSC{hNjg'?wN!~OvbR^٢m&b+mRNYC,eݩ]YhFZc4=iS<(VsN5e-JY'Ѯfѵ9&l-Vl]<̘(1Fj0v;:5n^G)1^]i!Gw Ǐ|x}wC| Z8=ym7˸Dp8w>wR>5@C8PdSmD/2q5]J3z~+^{4Z#x>*z1x[{K{^ eѐFh56 /8_ F㇣huj" ;_E}Kaw,DkAJҐ PͱJ}'р12fJ#4F܃{ƶ.W9?W'k?Pp~?xLk=P7QoרGVÖhя0 %._~F?kEӀk\/qnnM-s6p/ @[q~q#nVj=&碱R_\pw/ۮ '\g{rFܤݬ±ʭm//qwFO>&?]7M\7j7zQ_\gV4ѐ\+Uquոshܠ݈p3Z6q/c/q,ji[j(<_w_rORnn-icKI7z\qR&s9v<{7MYl'˗CBu,4(bX+J2_(*DG1Yt:3W2LuL$V/1כ>߇6}}ik_-Tٓzҟ|ޓ\(=at'Me%Ss@$J-%Z6AѢgտiI?gr^,Ֆa9Vpn''E穀ӢXI]Z&hYniՃ8=œ'X=E߀eIo sl~fs`w֟101&F_X}GC,ce6Ggbm̲2VtO,K-S+Dg,ӖbH:Ύh3g\MWs-mvycw ;}CE{2eӜ"9(:~6w/{/-sJ1[zoYe+#LTj0[i} ErKט2QMž阁U*9:96̡=sh;ީ,g%UҟJ>J̤ku(tm6S,I7*PNݞYZ%fb^3_R}9[|;[gݷյݷVrٌM|Q,_ Xgk<óxRK'.^{1|~.=]wu.`6f30ϧa*PNIě SRFe_J;JiO *J1-Ŵ~ӟbULJg -ߥ(:ԷzQ6ڱ]L4Lglg0[gs1_Eb+㲕"s9\1k8f-Sc+y6qfnԵzІ-e fڵmM&$)(rZxY|S:w߫|N}:uy)S\ϧOr}:??8ߏbԻюego%n‹؉Nm؊-ٌMH@JUxY<kcnz`ldl6a3cE8Nي-S6G$SVy@xY>W*>(鏲)[M<ɘ<ظvEvc^^Sj}X(Qzs0Mr_]Uwػ]ALGGnaI߯r^. 9{Wrv}WsяY˳Kr+eسlE_^ytϝɗyȣD%>#eZps5s5\)+ C2vlGjGnIiaϰ9arX)iՁqP:jcEg-C.Z֕J7QtNNO\mӋݮlp  (1JsuҺp_P2!%]Q$\b%2zPl?KWa6S0 B+LJQJbSG1So1m@'p&pn9OŜba1約\ʹ/z()G׍2&c a:f2? )?8s7s?zR\06DR&:#vdE{IF\Ewם1rMӦ1CIyOWhԝO#MKR($Wi_Mdm+ ʺR蛒IJYO EDD, / \[=!OjO Jr2 ɴ!T jiZxk߶o5eT?Va5ך+ӿFtѲb-]]L:)눻Gw'C9A'^c?8v/="1vo'wPAvwmgl3;NNۋ\OvxSO3.ĉ,"^Ne\bd<,UKW#TN]EN%!9byEW[l&m)i˵b$(SQ+܀UN6Z@_&pkOyדcbCjf,NFسQ8"e8Nu6%ZV&˵ ĺIZ)u[jZTіOdu@HuhCIɴ7'sʍZ#\Z;XZkQ&ZRKX5^IgҦ٢vm6b~"m1Gg{,,̷ 1*6 ZƓ6ԕ笨>8?5\J%GGӔVĊ3e5Z zmQ,eB|O'^K$" Yԡ$!QK-qbC@AbgeE{Ĉcx-AKD6sbfRN9^ "v %2Ou;j mhk)D@N]h%{&2c9T9Wq4^) =cWqPa:L# )๛k0a#\SQc17qIb_i3xgq+)qKļDK\2^`UiHG#Q:ѦȠm+8j9qxAQ%SI\(g*}Whv㔓"ԙ%jI5;[wE{{j_Z>A Og{M{"AKԒ@9^ՃuםVw*C;N1?nQcc,Ơ_|#9A]éwD!1ԟ]wdusE9%yM,%(D`,xL@ c"kgP,WuFGu<6Ÿ+<)곩QǼq;}-|Eb2JYSyrfkP M#2:\U0nRLcn3-hg6s1s,Ģ c"( -b <~ͲTvic"/ߘlulmEFN|,}eH[11ڒ/(jE1b &beITڦLLL߅ b{b6[%JDe3JA_*Tp11RLm6O/&(FT+ъe|jw EX τxViZ[ϋ|Y3bUB22FKi5p36w52SlloEۊmvmS/ߘMLeNLdmOdv`;c rmFۀ[5מn:\gkre2kub BhSF_ɣ.& e3h[~aȥݹ?~'e4G.se&c bcx1tU2'Sfb6f[C=؎mVlflF1̦_,Tb&Wf`_]/ ncȘʉY!6ڪmv E]sҷcc6ǠH+|)ڎmU.fQ@]xo _yy(GH/2dwLg*׀r4^) 9c;#9BVQ!<b1~h!s~a|18¸185y2i3*))wAӧ"X0!bqTe8}9NQ9)&ѾIuZ{E;ʱYQ!Ήr^Oe,RxJ>u^iAyYӾ|:! qb(Lj6tCÇ\-iZޡv ZV2_VFPP.%J-L -5_~c|=3sOqX_҇/nzٗ/9_rN~ɹ%}kÕ\"29Vŧߧ#?e> 19/K#e"W_S ~CЎoh7 ߵoh7oh׌לׯ9_ѧI?M~߉/",/dZ ]1LJ +{R]$|$lI91<.bVJ;+:71R+7)/eIn&3eEL6d?L#4a2&HPND_ MٌQzI;3L.#\/L+LnED?$ &`UCDDẃ 꿽_NaV#x8k{MkmZ{҃5t{Ukg­ɝ7o]s կ҅_3+srfE[ UHn Z3nYklfM[G-μu?uW"j3hE#俏QihJoɼV1]kciPhJW=.GzĬ/cu2M)gq8~-垥JzQ TylelzzUYl+|/.+}o/_O~_|#m=O9Jciټߏϻr\GO\ 哉Ld?z:R_WGٴcFTjz hL̓N]|' ^ b;ߏYնKcWX\cb;7@ME=οń3[JGFu9qN~]gsN^sn~':c߈"עPNC.Fi#lmc啡7u`D@2vhKόZ1H4 ,=B8\Q2(J!PqQiwiw"j@9!q\9ZC.Fa$r7\FB|]b0-;xOv;e\pmoFJ]aÌ@ ZKoT hƹ0 4Zh-VZkK>Z!y~H\e5|wZS.v@O^g!k"V'p:#8zӹiGqE'5/"`Pmg }oҋkPo7Zoӛ߇zPҗ<+@mkC8wCEOg6\eS^HG^W?K\0P<ڞGK};GN1>y|'NtF> [(Fw]^dsFhùӆbcb()}ӗ}݇zSgo޴7mROdc$r)'V @(C0 se(&^6qsC=9ԗC9ԟx0v9acf3| |(0T m+P^OO~ӏQmBR]HBb롐zz1c m+zq\oEOgVNyThI,z;S8SE_3M`3] ` P p@6r0G9e4Q@BzLj\{$Ee"*>r%(1Ǹe|1YW|t4r1 9"2# PH\z\%UJ2k|L])@>3) ck7u@ڤ ᵒKa5U_M1~r\6v/t/tJ{^語Wu5ϬUgV:Jn.n2Bjg:Gf7Z]:Y ^&ݿԈ*7 gV7ofV*j歒E*ݿOfM,濾y^A zrJEff̬u2F>6Z3af-̬k_5_ ^2]:Yn}&k[яWѬ[WWmW̊epխjE2}״B׳Bײ[ǪY ^׬ZUQ`^kKJY2WU~*{ZɊTt{M^2Pf^wל[ky ]eWBW%dVU${(ѰJY2+CfEȬ ogW{'z:Oxv̚NZN6@F._ꏽcV|jOUWxNڬD: Yӱrvclk5|k[{ ]wlk,ޚpkdHY 1koXf#t}ìg5 o[0koY0k`#fo^~~mKЙ3zo?֚Yza`mfWacSKysN<.8c.1KN"EKyIB"=qhϱhGY- POklMݭc2N$NprDۘ8B<0]c8-> mq%" HRqJ::CH\Qv'88N9X@*)H֒D-ĉc_9.b'1p8Wp,qrg-OҒEJ @_S9ګ5uE_3A^+}^K]cXvnZKm x߃Kd/ugOUZQcqVbPn8 .B>` |HFrI91D6ͦO~1FpĪ΂bbbb]B{JYB)RVhG){ ۙMdLTLӦk38FU=ά{9bߙ+vyup'p /4^3xgq wQ;Tr?Tfr.^Oӿ2}\f<.rʗy N3ާ5Nʾ8'&Rv"m$.Rkx6F[5C\ypN;K)q⸃8WOK|4Ώ2Sb/tMk?}98D?(Kks."/\/""b.:XDEԳSbTKcb,RmrmОԞ☧-+gUK3{g>mqAڮ?ppqMwż8omP6&m8lrxv+[釲)۹F\]΋"sfWaqq8ISe+8s΅#Eqr ǵ8&.G9ЎSrL;J3W^Nk/[N<vR;~]1opA7uI}oR[-6e,>c>G>'?Q Ɨǝ+~E_W|߿{G@Y93|JߕOEGxRM-IoRmxAwh;pܻ<.>x6F[@]3}.U+8q '\|ʸ*0>‡xϕ1گNeMw~uui:b\ խ|GWWk?8o9l|uΈ_PuB\sZ,a?3vΟs9j9""͞:Z]˿;ڿj>0)_uf]drd0JĴ d Pu/(*(YXruߺI"5=յz^|~NLXⶱ q}꺐-3!Yetz?!;G/蓭t.5n'9N$Idq ٣kıgA"'Dru.s܇Cg(/ǵK,Wpq)OA>MoKӓyypl?l1O%q[Z6ކ蓴쀣ء#HbާDWQH4$/r.IJTR霛IJ͛[liJ. jDmo $:Ci:Lc3?etr yʪ9O'ٔIϢbϡ}}&Pz<&N*mR).OzYfl)\͓Bs$=CAn͋܌HeCzf@zCzܻyN^߽_2wOާޏ|}y[{/-%9j}㶼7Ȥ:zROL+lBˇ*dE+gy N@n!V5* 6ZX֏Ɛ>@JЋCꎺmiB&9cBBVN^lǕhVh`0beFIgid0Iu ")6~/PFMX:'e$T̏i%^$f $&~П l̆4T3 mN')TMu#],  XSMR21!׾K>r0&i8 hQF KP~KJ۝R!!% Y%h j l Γt/^̥tUs,ER^ ڵ-EK, Φ:ax۱yV1Fut6^F/+zz~dۀv.lKA9ΰL6%ZGHn'C 4M ԙ62r솝k:8.#ivmRX2Kbl$;ӱcRdff7;a I}znQ`|q~se% G}ߒӭ1+{E:q$#n$$B%H2@*A:d@&dlȁQĈ˅OIq'+nuRP' 7Mat')֍ғ$^7UX0K ' F;M[5:kԖ Ym #90 sYCWEdp\1WBƍ&H)f}ߖ@J1>W/֓v %;9_s`B~eH/R6l ~?)BB21<ȅQِyK4RQ΅ԗ֛qROz.[dbY,k9s;k&ZIhӖL~G"IդiYD) 20 #k4)ɨ#T:`ŲY1=~'h,ʔ$ZE$`YI!D1gx[aR7uKg-t2:nj%^=TK{x]Q={u[M- SҩݹHrjGN\hjL;fXz.vԎrw-wg+tGK {vԮڭRT;Rmǩ$dwI*]$gw!F}'SmoK*pR{A> wrbX]}'GxwlnڝqwbܝН;,ȎXr.]wwEvQܝBI.r;;NF΅ڥP;jGBDvp; v.Apw ҝH)tM?_K틜^%*:h]U֮rvofnfzgn2t\|\z&VYI1"s=9W71$*WJ\OۧGF[-{˼[zkE)WIJUHwGJUMUQ)^~<[eik]\)VvT[%ڑ쎒lbڛ\u:|RNGYZ:JҍjWGm*vzzRӒah7}:OG~!R>gn&#Y{l9ZS졩(!EVJcOM%*`כ hzN2b L84 w_7כn\cd-ys]=Un'Uyi|VeenXzWogzΪU=[?Wlv)O\ۧ< JVDUOS'>>KMֲS7+MײQ=M2P7sL- eFmoHd&*ZFJ+~@)Y4~XF'mA<x=qxKOPmضdy:/ݰGA8DVȊ#ɓ'?&X_ɣ0~<$eD?u/pC0@"GІ!a{ rc:b`?샽v.\ A9ilG}8cQx=q҃(+=zl;aƸǺS s k%]mڶV{5?2j'#} dn9}U2}nc3f[(ğv\Ga*֍֎:֏kh &}} ~cxaL0d;yʶ -l3DލXcĿGfoZ&~.֠m.mf[`+31M6`{8NZz֣hc[סПu:s=l{e6F!mB}PlF{Ѯm+'0od#ֶKЖJ{Џ^k<@= +WG~%WWp{6zu^?~?/\۽n>F=(۽R+ WWmUҮᯜ{z}vtzz\N]ۛ!4zG0u vmuWڤIzC=b:&ZL\ۮ$zugt3'EsCiM-Sb{_%G%%xi92#OLPP\a#6(9^\gL"fįPhL(y0.UJNƕ6@kDqhhW2#A,4fc|#%MoGu-rE%iPt PDT'Ng.JN$a(9Eq>:@|g\$PgK7?B|j\-;@k_6ck 8+-(#)F('*EBqPX^)bE'f/q=@n%'Nf%N4*6L8ǰzK~-_(^i xmOaOŁ%?X)k^Lo9UOۙ͘833t?l䝕+: 8l2N1f Bqdž-0 I ̛xf 0X@;chVh&`.4@=_P㫡 +QOQ9)C{eh 2 )Cпr}@ߥJ 㪆x`fnX i4B!5C #y30i#YG+R3kBA-J5ꑪP/CIoq̿|"ۗ3`MH ޚ^c9-|Mš84̂rMmhZ;ІG;0|co&F*H*-)W2꒒07ID6sy&`=Na?`;75GN?m3PcjY TT6Qi0΁42 }a;FD:d)g8$լ uFi 8 #UmN[-U\Є㚡 *C108G Fc5^[&k"לi@n~?Sl.rT1%d8aaHʍI0)hVeL%ZP#mhv6~4&V2`Lͬ 1y0@ujPU. i<;fgq8Neꠞ5G 0aTA RA.!KIer6@ 1LG;4\q {eu5`lXHb؏xwy4%7PBy1efʸ s_P*V#F=kpT9J2QŪ55yO[hC:V!uڣ UC*IU '2gIPz6X%p/܃w]dq'܁%mbԻ/B;"E&ꠖ,ƚZeB=R6rWmq( K`)e)Ǹ SĘ*\H5PcjqTF=RQ\K݃㤻I5/`,R-Աz\ܟЂrR+QPwڱ-KK}t?[FZ5cM5 u6Uy9,{kIz~&= OdV1͚&Li#')@VhVjf ^`/ԲMeD;Y U<<Ϣϰ5+ GvO:=ZOa6Bfϰgs cp"B^$͚&1ud5ƫF*뤜ao`)o-xpІkVml$5P؄km̅y~#kfss'\K뱦uXg;mx Ii-{)k452JӜ~~>ZP!mh&~G6iE5a0hzϥZjPm -do58Nzem5T ug=k{cǿQ2=jd<<\N/V9olʹeM1T:=ΓxzMTM`'Vʬ݌ZϤ9ttKHbo>zBz2?\"M'*ɯMzWOwDWOqMnk}'*&z:릲41ne~؛ĪV%zWzV7auU7YSUoU%*5%*!UɨJD4l'r~.73SoVvyAS>~%ZROvtS4S%*tSZ-@[ DO,ע~,Hf)U>rI7ֲHc'c U~rC7/fsB'*TiJܔ5PynMܢv?v'ss6B57[y.Gs3=7ӳ3X17STf`agy/-R)3a詖7S,7RRHiD: 7QRiJHOHO THOT =QihINGOoNfIt:9N f<\T΢o9JobD"*QiJAÛ|詇7h I:T¡ =X*PiT4QvF<#4h3 ]BsO a3Žӟ>-H[-ӂ|^l6WV% {?+J2WfJk.k<`ͷ\'(Q|ln Ps?%f;G ;QQP_GėJ~cU|k~1o{A>mKA>n}./l}#XA~#{qu<@ɓ-<ŊߦV%O:ݬ.JfhvN PSuj}̾V%[VB~`CA0kpía%GZg%d3J_ Wρx̳F[Lyh?4cq1s}O08?'vǔʾ/?;mNCɸ=OaRꏟ2qLG{l7(3jkp[~¸i~<O[їp6|펯wk|]}\.8&?{o3*ʮrV:3eڸIc]l/Jzo,8zUիݸҡ?}lPWƌ=Vx%'Lx pTWܻo7ɲ% I6 j?c6Ohf&d JTZKֆ*"lvhCkQaFkMmk3-T"}vrwN}{={罗CGvhϘw " L ,^ItanlZI)vaT#4iW!#B@DB0FO! Cp!"!q.\^uߥß x ]ϔ#i)x_kټz쪛x~,mwʘPOsgfym_2X %P tIx]#߹ЌhL7ƜEץc((L@0 a2F ZG(@0at"܀0$B, hn ,F(A(qӦsRc?q.'AegF+H:DKa-m]sWYuǭ/癐+ftmW<0F.9쑙wBԎvuv1Vgp j389McK5Zc/$/UiE2ZԈz;R?A –^}vvPS]'ΧzU_Du3a͆tWQO}4"_>tHLOmk_V="xeS_~O"FwRԯ.%5oy4F{{rR\Wvjur?Phc"Jy~4;pdz<OC]Bt2Zel~xJG@eCOJ\+;Dݭ ?Uz~y# ćφsZS j*ϣ<ռ82[Lz:_p(cړ|#жaFR|{#bz:QuO(#*Ʉ+JDޝ~p~sax$P:%xHqo./dϳFdD"MFZ3ā]Dk򾁲A R4Wt^x-ucN MutO*SeqFӛLT ?.Q:-p6_֌>aJ D'eEkj #hfĢ5_Z"h툠Ek5un+Yi\D/;eB,?}N#&ѣ4SԺp \5ͪX2,e- hꥡBH.G.EffsƖGuFVJNķZs ^b+’ȒAAI@kTee-$NTuQ~/WzW6*Z/XRXu8cR<*G$?ړ@;饓z]'P|lg\}ykUelώ0qKS1:(|dD4iSCߏ{jW>T>1TLMb]5f BO~B,aЙ5cQ_u HFk#Aqًn6pf8b&х^tMUj7xc7pvHnj4P?~I:?;*gxu|O@hBn. 0r6r>M5)ɨE;,,xA1|G*’V_5I)QB9>yd3L[|. 0*C2}>oM H]U[p˿[޵j˧\;oδňڈ=Y(0ˏў Aw.՗<_ޭ ~#lh=Gp G},O8 y-Q>a5U-޷27|wRtXCis:3ڳ㹃n[_ȋ+&olNzK8(;Uw;zfnz;Mh}Kp6疧\!Ĺ}5qjDhbؚy4QMLDGa_j4qn̷q ʿGbqbk"M&O+"4bhbE? ڇ@O;pΐ{EȉFTx߶oLQ{&;9r;.(5%*s^eg~C _8},w&\ړ&؏I>iO~?}lZ9 ,+'S.i?e9i W݄".̗ò3[ EGeȕ)Ap,%Ozn%w_? `, 7h -p܃uXͰ "C$.QзC,d%~i ,q*h ABe#RB7ZBe=e#H㋬PIT87jIRYxV;ޢ J;@yIGs b/Vl'{!ѣHgl+Kl.-qvFD8YΦYqZCY{sw03DI;&{-yMhFS>D& fw_J%m+pCWrשvTBg 5`MH L19Yxstq(Q r𚊋v +oYXO'K,NBʓti/GYAҿdžI?x& 9o^4Z>al._ J'S0B$|Q,{Bq&`b8Dc;fM Y-QHK_pN,Xmm%ޱ npHR KɀXLKkveT)V)U\SWx˿w"^-c;ߍtZ޽H={ "-؏'?OBaXxPC~/[ ^*s^ ?w³K/gxB9b_sf!4lw t\Ho,@ig8| awWZ>5[\dy.nQSpZ^9ɩ숛䒪Le_L;c)m6gbLIQvx*1NqY_[("pyQr6JR"{l~F=Pǽ?<%> Q2Tdk0\h;htDZ<J'hg0ݠx=*`;L d;bKXŴ?nKSN91,g£z;h9rjzux9K]\Ro oN7j,ȯ d!4@ TB5-(z/Z)Q)ѷ&^WQث¼>WDⲈttqr1 9\$+;JB F+9`<> |DFtIKlN&PS VX[]_xbdpgihln`qsXvxP{ }~vnf^ښVҟNʤF©>6.&z4X>tld<4 , b:2|"$t'-38p l;As`$DFIKNpRtc.egsvx|RփXԡP̦Hī@~hb v nf^V "BZ)+? ,0 2P@&jlmoq{nΈVTY[d^`h6=TR2ޙZzڱֻ½zZ:,t`@ `L.p&bC)(0   80bCorelDRAW &CorelDraw.Graphic.70CorelDRAW0bCorelDRAW Oh+'0` px   ( 4 @LT(Data Networking-Concepts and Technologyece!C:\My Documents\DataTemplate.potnollap1 Do501Microsoft PowerPointemp@_G@ ݽ@p/i =@b2G oM  yl& &&#TNPPp0D v & TNPP &&TNPP    - "-- !-- "-&Gy& - Times New Roman- .l2 CPrinting LISA 98 (c) 1997-1998 Patrick Powell http://www.astart.com                 .&y&  . 2 e0 .& "--L$$ZH7((7HZv(7HZfxvZH7(xf--&& "--L$$` O >/##/> O ` p #/>O``rp`O>/#r ` --&--yPH-- "Arial- .2 wManaging( . .<2 c#Network Printers and Print Spoolers#"        .--q1 -- "ArialT- .2 5kPatrick . .2 5 Powell  ."Arial- .2 ^`papowell. . 2 ^@. .2 ^astart . . 2 ^'.com. .2 Astart  . .H2 + Technologies, 9475 Chesapeake Dr., Suite D   . .$2 _San Diego, CA 92123. .+2  619-874-6543 http://www. . .2 ;astart  . . 2 ~.com .--"Systemn-&TNPP &՜.+,0l   On-screen Show[ j Times New RomanArial Courier NewSymbolDataTemplate.pot-Managing Network Printers and Print Spoolers&Part 1- Printer Hardware and FirmwarePart 2-BSD Print Spoolers-Part 3 - Managing Print Spooler Operations Part 4 - Horrible Problems.Part 5 - Multi-platform Printing and GatewaysPart 5 - Contd References Software&Part 1 Printer Hardware and FirmwareBasic Printer OperationPrinter Communication Channels Serial PortAdvantages of Serial PortDisadvantages of Serial PortParallel Port - AdvantagesParallel Port - DisadvantagesNetwork InterfaceNetwork DisadvantagesNetwork AdvantagesHybrid SolutionsHP Jetdirect ConfigurationJetdirect Configuration FileJetdirect RestrictionsDirect ConnectionsSNMPSNMP To The Rescue (Maybe)WPrint Job Formats and Page Description Languages OR What Do You Send To The Printer?Print Job Data Formats)Vintage Printers (Impact, Daisy, etc...)Printing Text on AntiquesAdvice on Antiques PlottersRaster Output Devices XerographyPostScript OriginsPostScript DescriptionPostScript Printer ControlPostScript Disadvantages"PostScript Disadvantages (Contd)PostScript AdvantagesPostScript BooksEmbedded PostScript (EPS),PostScript Document Structuring ConventionsTools For PostScriptTools for PostScript (Contd)Binary Communications Protocol&Tagged Binary Communications Protocol+Postscript Printer Description Files (PPD) PPD WarningsHP PCLPCL ReferencesPCL EvolutionPCL DisadvantagesPCL AdvantagesMystery PCL Commands Quick TestQuick Test (Contd)Portable Document Format (PDF) Printing PDFPortable Job Language PJL FeaturesPJL DisadvantagesPPD Meets PJLPart 2 Print SpoolersPrint Spooler Basics#Common Print Spooler ArchitecturesLPR (BSD/RFC1179) ArchitectureLP (SVR4) Architecture!Novell Print Server ArchitectureNT Print Server Architecture ObservationRFC 1179 Printer ProtocolRFC1179Basic Concepts Print JobPrint Job FilesControl File FormatData File FormatControl File BotchesJob Transfer ProtocolProtocol HeadachesPrinter Status (LPQ)Remove Job (LPRM)Start Printer (LPC)LPC (Not Defined by RFC1179)BSD Print Spoolers Why LPD/BSD? Why LPRng?LP and LPSTAT EmulationNetwork Based AdministrationLPRng SecurityLPD/BSD DetailsSpooler Operation/etc/printcapImportant keywordsLightweight printcap filesSimplified FormatNew Printcap Guidlines LPR ClientFormatsFormats and Filters Binary Files"Destination Printer SpecificationLightweight ClientsLPRng Printer Name Conventions ExtensionsLPR Client and FiltersFilters and Job Processing%Basic Filters - Text TransformationsLPRngs lpf filterPostScript Printer FiltersLPRngs psfilter APSFILTERLPRng APSFILTERLPRngs ifhp FilterHP Printer ProblemsSimple Parallel Port Printer&PS, PJL, or PCL Parallel Port PrinterSimple Serial Port Printer$PS, PJL, or PCL Serial Port Printer%PS, PJL, or PCL Network Port Printer*Part 3 Managing Print Spooler OperationsPrinters, Queues, and Status LPQ - Status Short Status Long StatusVerbose StatusNo Slide TitleStatus ReportsAlternative Status ReportsLPQ and SecurityLPRM - Job RemovalLPC - LPD/BSD Printer ControlLPC - LPRng VersionLPC - Basic Commands LPC - LPRng Additional CommandsLPC - LPRng Job ControlLPC - LPRng Server Control'Print Queue Job Priority and SelectionLPC TOPQ CommandAdding A Printer"Adding A Printer - Printer Checks"Adding A Printer - Printcap EntryDiagnostics and Debugging DiagnosticsLPRng DiagnosticsClient Operation TracingServer Operation Tracing"Debugging Spooling and UnspoolingFixing Problems Installing and Setting Up LPRngInstalling LPRngLPRng's checkpc Program Setting Up LPRng on BSD Systems!Setting Up LPRng on Solaris/SVR4LP System EmulationLoad Sharing and Printer PoolsPrinter Pools and Load SharingLoad Sharing DetailsLoad Sharing Details (Contd)Bounce QueuesBounce Queues and FiltersReasons for BQ UseCorrect BQ UseAlternate BQ PrintcapUpdate Data File FormatsEditing Control FilesRouting Jobs to Spool QueuesRoutingRouting FilterHost Specific Printcap EntriesHost Specific Printcap EntryJPart 4 Horrible Problems Permissions Authentication Accounting Defaults PermissionsLPRng Permissions File Example1 Example 2AuthenticationAuthenticator Example: PGPForcing Authentication AccountingJob Level AccountingPage Level AccountingAccessing Page CountersConfiguration and DefaultsConfiguration Variables-Part 5 Multi-platform Printing and GatewaysPrint Job PreparationLP / LPD Uses Late BindingLPR -Z Options!MS Windows/MAC Use Early Binding!Early Binding and Job GenerationDriversNetwork Printing!Win95 and LPR/BSD Print Spoolers AlternativesWhy Use Wslpr?Why Not JetDirect? Windows 98"Windows NT Server LPR/BSD Gateway LPRng on NT Novell Printer LPD/BSD Gateways!Samba, SMB, and LPD/BSD Gateways!PCNFS and PCNFSD Gateways to LPDApple and LPR/BSDLP (Solaris) to LPD Printing$Monitoring Printer Status with SNMPPerl, Tcl/TK to the Rescue?Where Do I Get Help?SummaryQuestions and Answers  Fonts UsedDesign TemplateEmbedded OLE Servers Slide Titles&CorelDraw.Graphic.70CorelDRAW0bCorelDRAW &CorelDraw.Graphic.70CorelDRAW:0bCorelDRAW &CorelDraw.Graphic.70CorelDRAW0 bCorelDRAW &CorelDraw.Graphic.70CorelDRAWr0 bCorelDRAW &CorelDraw.Graphic.70CorelDRAWo0 bCorelDRAW &CorelDraw.Graphic.70CorelDRAW0 bCorelDRAW &CorelDraw.Graphic.70CorelDRAW/ 00DTimes New Roman$b$b0b0TbTb 0DArialNew Roman$b$b0b0TbTb 0" DCourier Newman$b$b0b0TbTb 010DSymbol Newman$b$b0b0TbTb 0 @ @`  @n?" dd@  @@``   x      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTVWXYZ[\]^`abdefilnorstuvwy_dhqrltu  _ghqcjkx{}|~mpzp}|~`2$"xܓ1oTz2$ļ&&s+/Tz2$rp9)`z2$|@C}IRիW z2$v:TEjmz2$M15}韙G %;h+z2$(@ uE1xfcz2$r n+" zS ~1?@8  g4$d  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoprstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~$d`b 0XbLppp@ g4*d*d`b 0Xb, ppp@  <4!d!d$b$b\ <4BdBd$b$bf\ l?, Printing LISA 98 (c) 1997-1998 Patrick Powell http://www.astart.comO =,Managing Network Printers and Print Spoolers--$Patrick Powell papowell@astart.com Astart Technologies, 9475 Chesapeake Dr., Suite D San Diego, CA 92123 619-874-6543 http://www.astart.com ~ZX%Part 1- PrinterPowerPoint Document(q[ DocumentSummaryInformation8Root EntrydO)74PicturesCurrent User$SummaryInformation( !"#./50E6789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;_[ blap1Oh+'0` px   ( 4 @LT(Data Networking-Concepts and Technologyece!C:\My Documents\DataTemplate.potnollap1 Do501Microsoft PowerPointemp@_G@ ݽ@p/i =@b2G oM  yl& Hardware and Firmware.Printer Mechanisms Host/Printer Connections Serial, Parallel, Network Configuration and Problems Network Printer Support Print Job Formats for Vintage Printers Print Job Formats for Modern Printers Page Description Languages PostScript and PCL Job Control and Format Languages PostScript, PCL, and PJL ~,Mh!,Mh!Part 2-BSD Print SpoolersPrint Spooler Basics Print Spooler Client-Server Structure BSD, SVR4, Novell, MS RFC1179 BSD Print Spoolers LPRng Printing Process Printcap Files Filters Printcap Examples 6EUEU>m  ,Part 3 - Managing Print Spooler Operations Management Facilities lpc, printcap Adding New Printers checkpc (lprng) Installation replacing print spooling system Diagnostics Load Sharing and Printer Pools Bounce Queues Routing Host Specific Printcap Entries~ ` `b ~ Part 4 - Horrible Problems8Permissions Security and Authentication Accounting SNMP 8-Part 5 - Multi-platform Printing and GatewayskNetwork Print Spooling Drivers and Print Spoolers Printer Gateways Microsoft Print Spooler Windows 95 WslprePart 5 - Cont d zNT LPR Support Novell Print Spooler PCNFS (Sun Microsystems) PCNFSD LPR Support Samba Samba LPR Support Desperate Measures, ReferencesPostScript Tutorial and Cookbook, Adobe Systems, Addison-Wesley 1985 PostScript Language Program Design, Adobe Systems, Addison-Wesley 1985 PostScript Language Reference Manual, 2nd Edition, Adobe Systems, Inc. Addison-Wesley, 1990 Portable Document Format Reference Manual, Adobe Systems, Inc. Addison-Wesley, 1993 Web Site for Adobe and more documents: http://www.adobe.com/supportservice/devrelations/technotes.html d@>y  -SoftwareLPRng ftp site: unless otherwise indicated, all software can be obtained from the ftp://ftp.astart.com/LPRng site. See the README and INDEX file GNU software can be obtained from many mirror sites. Try ftp://ftp.uu.net/pub/gnu and look for MIRRORS PostScript Utilities psutil31.tgz More PostScript Utilities psutilmore2.tgz GhostScript GNU GhostView GNU Adobe Acrobat PDF viewer/tools www.adobe.com LPRng LPRng distribution FILTERS_LPRng collection of filters, patched for LPRng XiB( 1'#T%Part 1 Printer Hardware and Firmware&&.Basic Printer OperationA Printer is a peripheral device, usually attached to a host computer The host computer transfer print files to the printer over the communication channelPrinter Communication ChannelsPrinter must be connected to source of print jobs Channel determines the rate at which text (characters) are delivered to printer Also determines the reliability Also determines the availability of error messages and diagnostics Simple and Cheap is not always best Serial PortSlowest and most error prone Older printers had a very slow transfer speed (9600 bits/second) due to the real time requirements of handling paper Newer ones can go up to 115 Kbps Data transmissions errors VERY common Printer does not have a large buffer to store input so flow control is absolutely required Hardware (RTS/CTS) flow control almost mandatory Software flow control (DCON/DCOFF or CTRL-S/CTRL-Q) can be used over networks Watch out for buffering in network!%Advantages of Serial Port Error and Status messages available from printer Most systems have multiple serial ports, can attach multiple printers Can be put on terminal server (watch out for flow control, enable RTS/CTS) Cables can be up to 50 feet long Cheat and they can be up to 200 feet long Disadvantages of Serial PortVery very slow Did I mention flow control problems? This is a major headache Errors in data transmissions can have interesting effects Note: Software Flow Control Headaches Some software flow control tries to accommodate errors by restarting transmission when ANY character is received from the other end after a time-out period. When you get a printer error, the printer sends CTRL-S to stop job and then later reports status, you lose rest of job. (Headache #27)$%% Parallel Port - AdvantagesTransfers data 8 bits at a time Flow control implicit because it uses a hardware handshake for data transfer. Very low error rate on data transfer Parallel Port - DisadvantagesHas limited bi-directional capability Out of Paper, Error indication Bi-directional support limited on most interfaces May not be able to indicate error condition when flow control enabled Surprisingly low throughput due to interrupt per byte on most PCs and workstations Games played at OS level to improve this Real pain is getting status back using bi-directional mode Real cheap folks can even use print sharing boxes You get what you pay for Don t call me when they lock up& 2FS)m9& 2FS)m9> 7} Network InterfaceUsually supports various protocols IPX (Novell and Microsoft) NETBUI (Microsoft) TCP/IP (LPD + RAW Connection) Printer builders are (or did not use to be) network aware Has changed tremendously over last couple of years Configuration of interface is now usually pretty simple once you understand the various options Front panel configuration is really quite simple HP Jetdirect has BOOTP/DHCP configuration 6#L)#L)o   Network DisadvantagesAnybody can print on the printer Leads to the mysterious print job from nowhere In spite of being on the network, only one person can actively use the printer at a time Yes, yes, I know what the documentation says and I am telling you what REALLY happens Multiple users can/will/have locked up the interface (this is a known problem with HP Jetdirect interfaces) Multiple users trying different protocols can/will/have locked up the interface When the printer dies there is usually no handy way to reset it without powering it downl!/ZV!ZVU !Network AdvantagesVery high throughput, and has built in flow control Very low transfer error rate Ethernet has CRC Higher level protocols also do checking at transport level Can be configured using BOOTP/DHCP Status can be obtained by using SMTP on most systems If DHCP working, can even reboot printer Printer sharing becomes very simple, in principle For shared system resource, may actually be the cheapest interface as it does not require host for support (see LPR/LPD later for details)ZQLX*QLX*"Hybrid Solutions6Print Server Boxes Has network interface, supports parallel port and serial ports for printers and/or modems I have used several different ones with various levels of success Lantronics - works, configuration tricky, good functionality Rose - works, configuration simple, limited functionality Dumb Network Interface (LPserver UNIX/NT/W95) Extremely stupid program that turns your PC into a TCP/IP raw socket connection to the printers serial (bi-directional) or parallel (unidirectional) port This has its place when doing accounting, very tricky printer operationsZw.w.> vy#EHP Jetdirect Configuration Similar in principle to most printer network interfaces Front Panel Configuration Enable basic network protocols IPX/Novell Print Spooler DCP/Microsoft TCP/IP Set IP address, netmask, syslog server Enable BOOTP/DHCP configuration BOOTP/DHCP Configuration BOOTP/DHCP supplies IP configuration information Specifies a TFTP server and file that has detailed printer configuration information~R.' R.' ,$FJetdirect Configuration File # Administration Info name: picasso location: 1st floor, south wall contact: Phil, ext 1234 # Only allow connections from network/netmask or host allow: 10.0.0.0 255.0.0.0 allow: 15.1.2.3 idle-timeout: 120 syslog-facility: local2 # SNMP Configuration get-community-name: blue set-community-name: yellow trap-community-name: red trap-dest: 15.1.2.3 trap-dest: 15.2.3.4 authentication-trap: on` N5Ut5,Ey#%GJetdirect Restrictions The  allow configuration parameter enables you to restrict access to the printer from the specified network/subnetmask addresses This is essential to controlling access to your printer You need to use the BOOTP/DHCP to set the IP address, gateway, and syslog server Note: Setting up the BOOTP/DHCP server can be tricky. You will need to either have a DHCP server on each subnet, run a  forwarder process on a host on the subnet, or have your router forward requests to a server. (Hint: if you have Cisco router, use the  ip helper command to specify the DHCP server address.) bm r-a7&|Direct ConnectionsTCP/IP Port 9100 on the Jetdirect card is a direct connection to the print engine This is a bi-directional connection, and error messages will be written on it Other network support cards have similar facilities; if they do not, then DON T USE THE CARD Usually only one connection at a time can be active; this can cause problems if trying to share the printer among several different hosts, :,'ISNMP Simple Network Management Protocol provides a common interface to obtaining information about the status of network devices. An  agent process resides in the network device, spies on the activities of the device, and provides information when queried. Agents can also generate messages (traps) when a specific activity is detected A  manager process queries agents for status Agents can also  write information to the network device when requested by a manager. This allows configuration management to be done by a manager.(HSNMP To The Rescue (Maybe)6The SNMP standards include a Printer MIB In principle, you can use a simple SNMP manager to query the values of the Printer MIB. These are, to put it mildly, very basic. In practice, most vendors have extended the MIB to provide more detailed information about the error conditions, status, etc..... Unfortunately, most print spoolers do not use the SNMP facilities to query printers The common SNMP managers such as HP Openlook, SunNetManager, etc..... have the common printer MIBs already provided. If you are an administrator, please learn more about managers7Z7> "R)UVPrint Job Formats and Page Description Languages OR What Do You Send To The Printer?WW*Print Job Data FormatsCoherent and organized approach to this subject is impossible due to historical development Will give a rapid, functional, biased, opinionated, subjective, etc.... view of the subject Remember: each manufacturer tries to distinguish their product in the market Remember: THERE ARE NO STANDARDS Actually, this is a lie. There are standards. Nobody follows them :-) Remember: The printer with the largest market share becomes the standard Thus: Every 3 years there is a new standard.@'Hv'HO'+(Vintage Printers (Impact, Daisy, etc...)*Fixed size characters (Fixed width/height fonts) Character set at the whim/market demand of the manufacturers Page dimensions based on paper sizes 8.5 x 11 inches (letter), 11 x 15 (computer listing) some larger size (legal) whacko A4/A3 sizes (Europe) De Facto Standard 132 columns and 66 lines Unless it was 60 lines (margin at top? bottom) Or 80 columns with 66 line??? And don t forget metric sizes...Hjj,Printing Text on AntiquesSend characters, print characters. Simple? Wrong. You forgot about INTERNATIONALIZATION $ are simple, try typesetting French, etc.... How about EBCDIIC? (Don t laugh) Tabs? Support for tabs? Why? Smaller text files, good for limited file systems Harder to change to other manufacturer s printer De Facto: tabs are at 8 positions Market forces demand features Italics, true bolds, Condensed Fonts Need to have escape sequences to enable these THERE ARE NO STANDARDS3V@j3+@ '-Advice on Antiques(There are a lot of them out there - they were built for abuse, they run and run and run Get the manuals, make 3 copies, and save them for the next admin - they will probably still be in use when you retire Most new impact printers are extremely simple to use Very few features Modeled on major (antique) market dominators If you have to print multiple copies on forms, this is your ONLY choice, so make sure you choose wisely Daisy wheels make best multiple copy impressions Dot matrix are faster, wear out Keep a spare in the back room for parts6??.PlottersOK, these are not printers, but they turned out to inspire the next step in Page Description Languages Original plotters were Analog, hooked to instrumentation. Drew nice curves on EXPENSIVE green paper Market developed for plotters which could be attached to  smart instruments or computers which simulated analog plotters Drew backgrounds, labels, etc... HP (and others) developed several Plotter Control Languages Had embedded commands for drawing textl*z!<'*z!<'/Raster Output DevicesOriginally electrostatic plotters, would draw a plot a line at a time Needed to convert Gerber (or HP or IBM& ) plotter stuff to raster format Insight that they could also produce hard copy of text using various fonts TROFF meets VARIAN to produce $$$ of revenue as graduate students burn up 100s of rolls of expensive electrostatic paper0 XerographyXerography works by whacking charges onto a drum The whacking is done by high intensity tightly focused light (laser?) Generated by scanning original mechanically OR BY SHINING A LASER ONTO THE PAPER AND TURNING THE LIGHT ON AND OFF UNDER COMPUTER CONTROL VOILA! The Laser Printer6vv1PostScript OriginsDeveloped originally as part of 1975-1980 research into computer graphics Origins in computer picture generation Text, fonts, etc..., were wedged into the language, trying to import concepts of typography into the programming language Model used was to have dumb programs generate PostScript, and have a smart PostScript converter do rasterization Adobe produced first PostScript Language definition, and the first PostScript printersMX2PostScript Description*PostScript is a Stack Based Programming Language You don t want to know. You REALLY don t want to know. If you want to know, you are warped. Or a Computer Science Whacko. PostScript files are programs. A typesetting program is a Program Generator that produces programs for another computer that runs to produce your output. Are you starting to understand why you have problems with printing PostScript?3PostScript Printer ControlSince PostScript is a program running on the printer, why not give it the ability to control the type of paper, paper trays to be used, duplex printing, etc...? We do this by having the PostScript program set values of various system dictionary variables (I told you, you REALLY don t want to know). After the job finishes, you should really revert to a known state of these system dictionary variables Right? Wrong! You may want to set these to be permanent for all jobs So we have a password needed. Guess what the password is? Right. You guessed it! (Answer: no password)4PostScript DisadvantagesSince it is a programming language, it comes in different versions This is mandatory, and is Bernard s Law: Never trust Version 1. It requires memory to store the program, to hold temporary results, and to do rasterization, font conversions, etc.... Thus we encounter Booth s Law: You never have enough memory for a graphics program. There is always a bug in the compiler/interpreter Even correct PostScript code does not always work correctly when the interpreter has errorslDAyU2\DAyU2\5BPostScript Disadvantages (Cont d)qSince you are running a program, the page generation can be hideously slow if you are doing fancy graphics operations such as scaling, rotation, etc... of large bit mapped graphics and fills When a problem is encountered, you have limited diagnostic capability. Ghostscript Is Your Friend - Use It Watch out for PostScript Interpreter Version/Level/Revision Problems ,jj  _6PostScript Advantages$Incredibly portable across different vendors printers for text/picture generation Not due to the language, but due to Adobe selling the code for the Interpreter at such a low price that everybody used it (Not true any more, so we are seeing some interesting PostScript bugs). Now everybody needs to be Adobe Bug Compatible Remember: THERE ARE NO STANDARDS Previewers can be built that will give you an exact idea of what your PostScript will look like De Facto the standard, most portable way to generate documents for printing6E"E"f 7PostScript Books`PostScript Tutorial and Cookbook The Blue Book Very easy to read Use Ghostscript and learn about PostScript programming PostScript Language Reference Manual 2nd Edition Almost incomprehensible; it IS a standard, after all Appendixes are VERY helpful You can get a copy from Adobe s web site www.adobe.com`!W%!W%D 8Embedded PostScript (EPS) Self contained PostScript files that produce a graphical object when executed See PostScript Reference Manual Appendix H Version 3.0 is most common Almost all graphical object editors import and/or export EPS Some Web browsers even have extensions that display it${{9+PostScript Document Structuring Conventions,,PostScript Reference Manual, Appendix G Version 3 is most generally used Specifies how PostScript should be used for document generation Prologue sets up overall characteristics of document, such as fonts, subroutines, etc... Body consists of set of independent pages Each page can be removed/duplicated/inserted in document without altering printing Standard also provides guidelines for information about documentH(!@(!@: Tools For PostScriptAssumes Document Structure Version 3 PS Utilities Version 3.1 (psutil3.tar.gz) Set of UNIX tools for massaging PostScript file psnup will print N virtual pages per real page psselect will select pages to be printed psrev will reverse page order PS fixer (psmoreutils2.tar.gz) merges pages of two documents, good for putting a background on a document Selectively places/orients individual pages or sets of pages on a document desperation tool made from psutils, cannot live without itPOZZZZOtK1)  4;!:Tools for PostScript (Cont d)Several tools available that allow you to add documentation control to PostScript files For example, you can have the first page fed from a special tray, and then remainder from another tray These are usually commercially available, but freeware/shareware versions have been spotted. Some commercial print spoolers incorporate this functionality into their Print Spooler filters (see later) See the LPRng ftp/web site for pointers6X0(X0(<"Binary Communications Protocol"PostScript language specification states that the program must be in printable ASCII characters or a limited set of control characters However, you can embed inline binary data into a PostScript file using very tricky methods Some control characters normally cause a PostScript Interpreter to end execution, send status, or may actually be ignored. The Binary Communications Protocol escapes these control characters. If you have character C needing escape you send: 0x01 C ^ 0x40 e.g. - 0x01 (^A) -> 0x01  A or 0x01 0x41$,,=#%Tagged Binary Communications ProtocolWarning If you have a file with embedded BCP escapes and you redo the BCP escapes, then you will destroy the escaping This leads to the Tagged BCP protocol We add a ^A M sequence (this is an escaped CR character) to indicate that we are doing BCP and have put in the escapes When we scan the file and detect ^A M we do not add more escapes This is one of the leading causes of problems printing PostScript files with binary images produced by some graphics programsZo&~o&~>9*Postscript Printer Description Files (PPD)7You can use PostScript to manage and control various printer operations What variables/operations/values do you need? Each PostScript printer should have a PostScript Printer Description file that contains the various PostScript manageable options and how to set them Example: HP4MP - setting manual feed *ManualFeed True: "1 dict dup /ManualFeed true put setpagedevice" *ManualFeed False: "1 dict dup /ManualFeed false put setpagedevice" The contents include the PostScript needed to set the required operations Easy to extract from the PPD file and send to printersjHZ.ZZZZH.2        ?: PPD WarningsEach printer has a possibly different set of commands, so check the PPD file for the printers Manufacturers are not required to provide PPD files, so you may have to dig around for them. There are many extensions to the basic PPD capabilities, some of which are very specific to a particular printer. WARNING: I have discovered discrepancies between the PPD, manual, and actual operation. RTFM, and try it out. WARNING: some options interact, and will lock up printers. PPD and documents do not cover this@$HP PCLHewlett Packard developed a line of laser printers and wanted to sell them to the various printing markets They also did not like paying Adobe royalties and licensing fees They invented the Printer Command Language (PCL) Version 1, Version 2, Version 3, Version 4... Currently we have Version 5 and rumors of 6 PCL is NOT a programming language, it is a Printer Command Language It specifies where on a page to draw lines, glyphs, and does it very well.6ZZA;PCL ReferencesPCL 5 Printer Language Technical Reference Surprisingly readable, but BORING, repetitive, and written in a horribly verbose manner. Read and memorize Section 3.8 Resetting the Print Environment \]E and \]%-12345X are your friends, and will help you keep your sanity Note that this sequence, when sent in a PCL file, will terminate job printing and may have some surprising consequences Read Chapter 4 - PCL Job Control Commands This will explain most of the printer control functionsl+Y*8+Y*8B% PCL EvolutionOriginal versions of PCL did not support downloadable fonts. This was supposed to be a feature - you would buy font cards and plug them in. User feedback (flames) convinced HP that they needed to support downloadable fonts Then we had raster graphics support added Then we had page structuring support added It now can make the printer sing, dance, and do just about anything (as long as you know the correct PCL commands)C&PCL DisadvantagesOlder PCL printers do not have downloadable font support You may (again) need lots of memory for fonts, images, etc.... (There s no such thing as a free lunch) It uses control characters (ESC) for many of the commands, making it difficult to fix/mangle/edit PCL files without special editors capable of handling long lines, control characters, etc....D'PCL Advantages0Simple simple to generate Slightly smaller files than PostScript Very much faster page generation, as there is little to do except read the input and copy BitBlits to the graphics memory Even has commands to do the printer mechanism commands such as bin selections, etc...., built into the language now. E>Mystery PCL CommandsSince each printer has a different set of capabilities, you need to have PCL commands to operate the printer There should be a  PCL Printer Description file for each printer, right? ANSWER: no Each printer should have a document providing a complete list of the PCL commands supported, right? ANSWER: ummm& right& but only the development group has that information, the printer is not in development any more, & Situation is getting better, but documentation is still weak point for specialized operationsZ dz^ dz^.F< Quick TestFIf you are using PostScript and TBCP, what is the end TBCP sequence? ANSWER: \]%-12345X If you want to make sure that your PostScript job gets printed, even if the previous job did not end with the EOJ string, what should you put into your file? ANSWER: \]%-12345X before the PostScript If you are trying to decide if a file is PostScript or PJL or text, you might try looking for %!PS as the first characters, right? ANSWER: Yes, No, Maybe? Sigh& It all depends on how smart/stupid/weird the writers of the PostScript generation program are...rE)E)G?&Quick Test (Cont d) $How can you tell if you have PCL or PostScript? Ummm& throw it at the printer and if it works, it was PostScript GhostScript can be modified to disregard the various PCL sequences. This makes life much easier when trying to preview files produced on MS/Apple based programs60A0A,/< H(Portable Document Format (PDF)PDF is basically PostScript s version of PCL It is very simple All the time consuming PostScript operations are disallowed There are some minor HyperText things thrown in to provide some previewer help Concept was to generate your document in PostScript or PCL, run it through a PDF converter, and you get PDF. To print, you expand the PDF into the more verbose PostScript, add the Job Structuring Conventions, and you are done Adobe now sells PDF viewers and translators...6--, ! I@ Printing PDFlVery few (none?) printers will accept PDF files You need to preprocess them into PostScript Ghostscript should be able to do this Whoops its cookies on many PDF files You can extend GhostScript to handle PDF files now with reasonable success, but you will be violating some patents, restrictions on encryption, etc etc. Look at the GhostScript web site for details6\K\K>[ O  J)Portable Job LanguageNow printers have to support PCL, PostScript, TEXT, and who knows what. Documents need to be printed using different papers, formats, orientations, etc.... Need a higher level language to control this type of operation, overriding (perhaps) the operations in the document Portable Job Language was intended to do this Most important feature is ^]-012345XPJL EOF This causes a functional reset of the printer Cannot be ignored, escaped, hidden, etc.... Restores sanity to the printing world$kkK* PJL FeatureslProvides ways to specify the Page Description Language PJL Select Postscript Provides ways to specify the orientation (if the PDL does not override it) Basically, provides a way of overriding the PDL requests And most important: Provides a standard set of error messages to be returned IRREGARDLESS of the PCL This last feature is worth the pain and effort of PJLl7Q67 (6L+PJL DisadvantagesNot all PJL features are supported in all printers Printer vendors are very closed mouthed about what they support. There is no  PJL Printer Document standard for PJL HP does not provide details on all of the error messages, leaving it up to implementers to discover that there are a whole new set of messages concerned with various printer operations Try getting a paper jam in a multi-bin feed printer and see what messages you get Different releases of printer EPROMs support different PJL sets HPXXSi are notoriously different from other HPs And of course - different vendors have different messagesdcPRP@P0P:PcR@0:>%;MA PPD Meets PJLVIf a printer supports PostScript, there is usually a PPD file for the printer. HP has very nicely put in the various PJL and PostScript sequences needed to perform the various printer control functions in their distributed PPD files. This information is not documented of course& but handy to know NVPart 2 Print SpoolersO/Print Spooler BasicsUsers create jobs (print files) They use a print client to send job to a print server or spooler The spooler then transfers jobs to a printer Multiple users (clients) can transfer jobs to a server A server can transfer multiple jobs to printersZP4"Common Print Spooler Architectures+LPR/BSD UNIX variants include PLP, LPRng RFC1179 documents client/server protocol TCP/IP network based LP/SVR4 UNIX Proprietary client/server protocol Novell Netware Semi-proprietary protocol IPX Network based (or IPX over TCP) Microsoft SMB Basics documented, but details are not NetBUI, IPX based Z #>: Z #>:>"ut Q6LPR (BSD/RFC1179) Architecturelpd is the print daemon listens on port TCP port 515 for requests from lpr clients uses printcap for configuration lprm (job removal), lpq (job status) communicate over port 515 jobs stored in spool queue on server host6[i[iZC RR7LP (SVR4) Architecturelpsched is the print daemon listens on /dev/printer (FIFO) uses /etc.../lp/* files for configuration lpstat, lpadmin, accept, enable used to control operation jobs stored in spool queue on server host6IdIdZ!US8 Novell Print Server ArchitectureFile Server is the print daemon files placed on server and requests made for printing from clients uses database for configuration printing done by server process on file server or other host management done using admintool or other facility jobs stored in spool queue on file server< ZcZZ c =TBNT Print Server ArchitectureServer is the print daemon files placed on server and requests made for printing from clients uses registry for configuration printing done by server process on file server or other host management done using control panel jobs stored in spool queue on file server<ZcZZcUC ObservationArchitectures are almost identical Should be easy to understand, right? WRONG You can set up the various pieces easily, but the problems start when you want to do more than just fling files at printers Accounting Restricting access Error logging and recoveryHH}9H}9VWRFC 1179 Printer ProtocolW5RFC1179Documented the original BSD print spooler network protocol Incomplete, inconsistent, and open to abuse& I mean implementation inconsistencies Only common, non-proprietary, open standard available today This situation may change as the IETF has a Internet Printing Protocol (IPP) working group making progress towards a new and sensible standard6o?XXBasic ConceptsLPD server listens on TCP/IP port 515 for connections from client programs (LPR, LPQ, LPRM, LPC) and other LPD servers Connections originate from port 721 - 731 to server (Privileged Port in old TCP/IP network software). Clients send requests, get confirmation and/or status in return Request can be: (LPR) transfer job (LPQ) get queue status (LPRM) remove job (LPC LPRng Extensions) queue control$.c.cpYY Print Job%control file contains information about the job submitter and the way the job is to be processed by the print server names the data files for the job one or more data files control file and data files are transferred in binary form from client to server server must interpret contents of filesH h( h(ZZPrint Job FilesFile names have defined format cf X nnn hostname - control file cfA001patrick cfA002patrick.astart.com X is a letter indicating job priority nnn is a  job sequence number hostname is the name of the host originating the job Data file names should have same format df X nnn hostname dfA001patrick dfB001patrick the X is a sequence identifier Order that files should be sent in is not defined Most network printers ignore the control files and just print data files, treating each as an independent jobP"P)PzP(PPPPP"'z(t8*x[[Control File FormatASCII printable characters, line ending with \n Example: Hastart4.astart.com Host name Proot User name (banner) J(stdin) Job title CA Job class Lroot User name (billing) fdfA458astart4.astart.com Data file N(stdin) Data file name UdfA458astart4.astart.com Unlink data file Lines starting with upper case letters are information Lines starting with lower case letters are data files93 m9    mB(<6/\\Data File FormatEach data file in the control file is identified by a line starting with a lower case letter. This letter indicates the  format of the data file and is a hint to the server on how it should be printed. The U lines in the control file were originally used to indicate that the spooler should remove the data files after printing. By default, most spoolers do this by default. $|{Control File BotchesAs you see, the format of the control files is trivial It is amazing that so many implementations get it wrong& Use non-ASCII characters (UNICODE) Use CR/LF as end of line indication Exceed maximum line lengths Give each job the same control file/data file name Give data files names like dfA371jobs.dat - based on name of file |p(p,]]Job Transfer ProtocolClient sends a line of the form: \002printer\n Server responds with \000 Client sends control file transfer request \002cfXnnnhostname length\n Server responds with \000 Client sends length bytes of control file, then \000 Server responds with \000 Client sends data file transfer request \003dfXnnnhostname length\n Server responds with \000 Client sends length bytes of data file, then \000 Server responds with \000 Repeat sending data files until all done.!  E   L  )! ,1(.)^^Protocol HeadachesSome clients decide to send data files first, then control file Some clients do not send data files in same order as listed in control file Some clients send \n\r or \r\n instead of \n Some clients put non-ASCII characters in the control file Some clients do not use correct names for data files Some clients put in non-present data files Now, nobody would put in a line like: f/etc.../password or U/etc.../password in the control file, would they? Hmm...S&Q &+__Printer Status (LPQ)RFC1179 uses the following protocol to get printer status Client sends \003printername [keys]\n short? format \004printername [keys]\n alternate? \009printername [keys]\n LPRng verbose Server responds with status, then closes the connection There is no definition of what the status format must be. Every LPD server returns a different one Keys are used to refine the status, e.g. - select a job No definition of what information is searched for...pGu G   ``Remove Job (LPRM)\RFC1179 uses the following protocol to remove printer job Client sends \005printername user[keys]\n Server responds with status, then closes the connection There is no definition of what the returned status format must be. Every LPD server returns a different one Keys are used to select a job No definition of what information is searched for...:HHaaStart Printer (LPC)Amazingly, RFC1179 only has one command to control a printer. Client sends \001printername\n Server responds with \000 and starts the printerLK1KbbLPC (Not Defined by RFC1179) In addition to the standard functions defined by RFC1179, there is need for some sort of administration control. This is not part of RFC1179, and is usually implemented by the LPC program. Thus, there is no way to remotely manage a printer using RFC1179, leading to the use of SNMP...ccBSD Print Spoolersdd Why LPD/BSD?kUses RFC1179 All other protocols are proprietary It is trivial to implement over a network, and allows any TCP/IP based protocol to provide print services Other protocols can be gatewayed to RFC1179 based printers/spoolers with very little effort Least common denominator in multiprotocol printing Available on all UNIX, Microsoft, Apple, etc... etc... platforms$l , WLeD Why LPRng?LPRng is a descendant of the LPD/BSD family of spoolers It provides administrative control over printing operations It has incredible flexibility, logging, debugging You pay for this by not having a simple plug and play system for non-trivial setups You need to RTFM quite a bit From the users viewpoint, LPRng strongly resembles the LPR/BSD print spoolers The architecture is similar, but not identical to original BSD<ZZZ$,oLP and LPSTAT EmulationLPRng simulates a large subset of the SVR4 LP and LPSTAT command functionality You can fine tune this emulation to be more vendor specificfeNetwork Based AdministrationAdministration of printers and print queues is a major problem in large system administration is management of print queues On most SVR4 and BSD print systems you must log in as root, execute multiple different commands, and perhaps even delete or edit files by hand LPRng extends RFC1179 and provides a LPC command as well as the LPQ, LPRM, and LPR support There is even a strongly authenticated version using Kerberos, PGP, or SSL available (compile time option).,  /gfLPRng Security LPRng eliminates many of the security loopholes present in the original BSD code and design Many vendors have shipped LPD distributions with various security problems Remember - LPR/BSD clients run SUID root, allowing users to play games with stack overflows, etc LPR/BSD runs filters as root, and some filters are shell scripts with such things as exec $* Exploiting this to gain root permissions is left as an exercise for the student:_P_P$_PhgLPD/BSD Details Spooler Operation}lpd is the print daemon listens on port TCP port 515 for requests from lpr clients uses printcap for configuration jobs stored in spool queue on server host as control file with user information and list of data files to be printed data files containing information to be printed LPD/BSD requires LPD server to run on same host as client LPRng allows server to be on different hostZ[-xf[-xfHC 'ii /etc/printcapDatabase used to control printer operations Based on the termcap format, #parallel attached DUMB printer pr1|dumb:\ :lp=/dev/lp:sh@:sb:mx#1000:\ :sd=/var/spool/lpd:\ :of=/usr/libexec/of:\ :if=/usr/libexec/if The first part of the printcap is the primary (reference) name and the printer aliases. Following entries are either keywords and values, flags (:sb: set sb flag on, :sh@: sets sh flag off), or numerical values (:mx#1000: or :fx#0x13:)J J !  ^8C t " jjImportant keywordsNlp = the local printing device rm=remote host, rp=remote printer used when jobs are to be forwarded to another host using RFC1179 job transfer sd=spool directory where the jobs are stored sh - suppress (no) headers (banners) when printing locally sb - short (1 line) banner instead of long one mx # - maximum job size (0 is unlimited)ZANAN~ ]*8,'klLightweight printcap files LPRng eliminates much of the overhead of the BSD printcap files #simple printer entry lp|pr:lp=pr@host Client programs only need to know printer name and host running LPD server $@'LR+ TSimplified FormatLp2:server :sd=/var/lpd/lp2 :lp=lp2.astart.com%9100 :if=/usr/libexec/hpif :of=/usr/libexec/hpof No \ at ends of lines Tags can be more than 2 characters lp now can specify remote printer and host, as well as port The form host%port opens a connection to a port on the remote device - allowing direct access to printer (for PJL status reporting) server flags entry as used only by lpd serverNb'Zb~ r(  :New Printcap GuidlinesPut connection or other information used by all LPRng programs in global printcap entry Put server only information in printcap entry AFTER the general one lp:lp=lp@lprng.astart.com # lpd only lp:lp=/dev/lp :sd=/usr/local/spool/lp ...0QP0 % ln LPR Client~Takes a list of files, or input from STDIN, and generates a control file, transfers the control file and data files to the LPD server WARNING BSD/LPR used to write control and data files to the spool directory, requiring SUID ROOT permissions LPRng uses a network connection, and takes extreme precautions when reading files; by default, LPRng s LPR runs as a user program The dreaded LPR -r (remove after printing) is present, but has been tamed6ee,ZfFormatsWhen a file is submitted for printing, LPR makes a copy of the file and sends it to the LPD server Before printing the file, additional processing on the file may be needed GIF file may need to be rasterized Different types of files may need different types of processing The processing is specified with a format indicator LPR default format is f (text format?) LPRng allows explicit format specification lpr -F x# #c)3> %Formats and FiltersFilters are used to process files before sending to the printer Filters are specified in the printcap file as xf entries where x is the format if=/usr/local/lib/filter/ifhp vf=/usr/local/lib/filter/ifhp Some printers require some form of initialization to be done at the start and end of a job The of filter is used to do this processing as well as process banners or job separators generated by the lpd server More on filters later L<n<b] 7mo Binary FilesSome files do not require any modification before being sent to the printer (binary files) The l(literal) format is used to indicate such files Too many people confused 1 and l so LPR uses -b (binary) to specify literal format lpr -b /tmp/binaryfile Just to make life miserable, some PC based LPR clients decided to use v format in the control file for binary files& Sigh& The if filter is used to process literal files, but is invoked with a -c option /usr/local/filter/ifhp -c _M3F8@P !Destination Printer Specification$The LPR -Ppr option explicitly specifies the destination printer If not specified, the PRINTER environment variable sets the default printer; if there is no PRINTER environment variable, the first one in the printcap file is used Note that in LPD/BSD that the LPR client always transfers the job to the local LPD server, which stores it in the spool queue This led to the horrible  set symbolic link and  remove after printing options which have been exploited in the past to do horrible things (but not by your users, right?).,  ;nkLightweight ClientsThe standard BSD implementation requires the printing clients to transfer jobs to a LPD server running on the local host. The local LPD server then will transfer jobs to remote hosts LPRng implements lightweight clients, which will simply transfer jobs directly to remote hosts, eliminating the need for a server running on the local host. This also reduces file space requirements on the local host. If the destination is a printer that implements RFC1179, then you never have to store the print files=p~LPRng Printer Name Conventions'lpr -Ppr@host printcap file is not searched, network connection and default values are used lpr -Ppr printcap file searched for entry lpr PRINTER environment variable used as printer name if no PRINTER environment variable, use first entry in printcap if no printcap, use default printer value ~N !N ! E j  Extensions^If the printcap lp entry is lp=pr@host, this corresponds to or :rm=host:rp=pr: use RFC1179 protocol to transfer files For total abuse, you can use lpr -Phost%port/direct This opens a TCP/IP connection to the remote port on the host and transfers the input files directly You really should use netcat if you want to do this: nc -d host -p port filesP'P'  "ILPR Client and FiltersuBy default, LPR simply copies files to the LPD server The lpr_filter option requests LPR to run the filters on the files before sending to server Allows localized processing and system depending hacks to be done to jobs before sending them to the spooler Very handy when you have vintage software whose output needs to be massaged, and uses hardwired paths to executables $v: 2:9qhFilters and Job ProcessingWhen a job is selected for printing, the LPD server examines the control file for data file format information fdfA001astart4 format f The printcap information is checked for a format f filter program The data file is piped into the filter program and the output is then sent to the printer device If the printer is connected via a simple TCP/IP connection to a port, I.e. - HP Jetdirect port 9100, then LPD/BSD requires special filters to open connection LPRng does this using lp=host%port, simplifying operation and filters tremendously@pZZZpP  D;sm$Basic Filters - Text TransformationsdA filter is given a print file on STDIN and produces output for the print device on STDOUT The most basic filter action is to translate LF to CF/LF combinations; most antique (vintage) printers require this Then we need to expand tabs Then we better look for sequences of \b (backspaces) and overstrikes, and replace them with the right control sequencestv$LPRng s lpf filter$ Extremely simple filter that will do LF to CF/LF expansion, tab expansion, and most simple printing operations such as inserting NULLS after page eject NULLS? yes, sometimes you need to do this to pause long enough for the printer to do a form feed& Sigh When used as the OF filter, will expand a short banner string (single line) into a very nice full page banner This type of thing is used less and less these days, but periodically there are requests for this antique.6jjuqPostScript Printer FiltersMany times PostScript printers are used to print text files; the IF filter should detect a non-PostScript file, and invoke a Text to PostScript translator Some printers stack paper in back to front order; the IF filter should try to do page reversal If the destination printer has PJL support, you better insert the various PJL/PCL strings to reset the printer and put it into PostScript mode. Did I mention getting page counts? And accounting? and storing this in an accounting file? And checking that the person has permission to print?vr LPRng s psfilter  This filter tries to handle most common PostScript printer problems it sends reset sequences it gets status information and produces error messages it even logs messages returned during job printing, such as the PostScript emulators error messages it gets the value of the page counter from the printer It is incredibly paranoid about file formats and tries really hard to make sure that the job being sent is PostScript Yes, it supports Tagged Binary Communications Protocol(DZZDws APSFILTERftp://sunsite.unc.edu /pub/Linux/system/printing/aps-491.tgz author Andreas Klemm andreas@knobel.gun.de co-author Thomas Bueschgens sledge@hammer.oche.de Very nice package that valiantly tries to determine the format of the input files (uses UNIX file utility) and then passes them through the appropriate filters. One of the nice features of this package is that it will even use GhostScript to produce output for a non-PostScript printer Strongly recommended for those desperate situations where run time and file space is no object but  User Proofing is 0F(F     (  LPRng APSFILTER Shameless copy of original APSFILTER, but done in Perl Closes some minor security loopholes and deals with error conditions better Available on the LPRng web site,2] xt&LPRng s ifhp Filter$ Designed to handle HP printers (PCL/PJL) Totally shameless rip-off of the very good JetAdmin filter set produced for Solaris/SunOS The wide variety of HP printers makes it difficult to have a single filter automatically handle all situations, but the ifhp filter tries hard Various flags and options allow it to handle all known HP printers that have published PPD files with PJL information (I hope!) Switches between PCL and Postscript, has a text to PostScript converter ,S HP Printer ProblemsDifferent implementations of printer firmware have different bugs Strange (to HP) combinations of duplex, reverse, and landscape can cause catestrophic failure and require power up initialization Power save mode sometimes requires physical intervention when it turns on TCP/IP connections are left open and do not terminate correctly - you cannot connect to printer and need to power up Other manufacturers have equally nasty problems Simple Parallel Port Printer]# parallel port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp lp=/dev/pr if=/usr/libexec/lpf The sh suppresses banners, mx#0 allows unlimited size files. The printer device (/dev/pr) is opened write only by default. The lpf filter will do LF to CF/LF translation, expand tabs, etc.... This is about as simple as you can make a printcap entry<d dR" 6)g %PS, PJL, or PCL Parallel Port Printer# parallel port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp lp=/dev/pr # For PostScript printer use psfilter package if=/usr/libexec/psif -Tstatus=off # For PJL, PCL printer use CTI-ifhp package if=/usr/libexec/ifhp -Tstatus=off The status=off flag suppresses the filter from getting printer status, as the parallel port is write only The psif and ifhp filters will do Text to PostScript or PCL conversion, and will detect PostScript or PCL files See the psfilter and CTI-ifhp documentation for detailsN O.#,#p" $rf  Simple Serial Port Printerd# serial port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp :rw:lp=/dev/ttya :sy=9600 -echo -crmod -raw \ -oddp -evenp pass8 cbreak ixon if=/usr/libexec/lpf The rw flag opens the serial port read/write The sy (stty) option sets the characteristics of the serial line Any error messages from the printer will be passed to the LPD server for action*      *#PS, PJL, or PCL Serial Port Printer# serial port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp :rw:lp=/dev/ttya :sy=9600 -echo -crmod -raw \ -oddp -evenp pass8 cbreak ixon # For PostScript printer use psfilter package if=/usr/libexec/psif # For PJL, PCL printer use CTI-ifhp package if=/usr/libexec/ifhp Since the serial port is Read/Write, the filters can query the printer for status and use this to control various operationsN }.,}      ~$PS, PJL, or PCL Network Port Printer# serial port printer, no banner lp:sh:mx#0:sd=/var/spool/lpd/lp :rw:lp=prname%9100 # For PostScript printer use psfilter package if=/usr/libexec/psif # For PJL, PCL printer use CTI-ifhp package if=/usr/libexec/ifhp The LPD server will open a connection to port 9100 on the printer, and the filters will direct their output to this port This is extremely effective for network based printersN U.,( "  yu)Part 3 Managing Print Spooler Operations**zPrinters, Queues, and Status,All jobs handled by LPD are placed in a print queue, and then sent to a printer Queue State enabled - accepting jobs disabled - not accepting jobs Printer (Destination) State running - actively printing job idle - waiting for job to print stopped - administratively stopped from printingH\9|\9|{ LPQ - StatusYThe LPQ command is used to request status about a printer or print queue status LPD/BSD has two forms of status - short and long LPRng adds verbose (which is REALLY verbose!) When a LPD server gets a status request, it replies with status for the local queue, and then if the queue is forwarded to a remote printer will forward the LPQ request. If the printer is local to the LPD server, the server will also report printer activity You can restrict the status to only selected jobs by adding keys to the request command. These usually are the user, job id, or host from which the jobs originated.ZZZ Short Statuslw4@astart4 0 jobs  Long StatusPrinter: lw4@astart4 'Hp Laserwriter' Queue: no printable jobs in queue Status: server finished at 07:32:46 Filter_status: ifhp Initial page count 60744, final 60746, Total pages = 2, elapsed time 73 secs at Oct 29 07:32:46 Rank Owner/ID Class Job Files Size Time error papowell@astart4+425 A 425 ERROR: IO error 'Broken pipe', at 10:18:48 P XHj JVerbose StatusCPrinter: lw4@astart4 Comment: Hp Laserwriter Printing: yes Spooling: yes Queue: no printable jobs in queue Status: printing 'papowell@astart4+576', start, attempt 1 at 11:28:18 Status: opening 'astart14.astart.com' at 11:28:18, attempt 1, timeout 10, grace 0 at 11:28:18 Status: accounting at start 'papowell@astart4+576' at 11:28:18 Filter_status: ifhp Initial page count 60744, final 60746, Total pages = 2, elapsed time 73 secs at Oct 29 07:32:46 Filter_status: ifhp Initial page count 60744, final 60746, Total pages = 2, elapsed time 73 secs at Oct 29 07:32:46 $DPC" S  )H$H Job: papowell@astart4+425 status= error Job: papowell@astart4+425 size= 4124 Job: papowell@astart4+425 time= 05:58:45 Job: papowell@astart4+425 error= IO error 'Broken pipe', at 10:18:48 Job: papowell@astart4+425 CONTROL= - Hastart4.astart.com - Ppapowell - J/tmp/a - CA - Lpapowell - N/tmp/a - fdfA425astart4.astart.com - UdfA425astart4.astart.com Job: papowell@astart4+425 HOLDFILE= - active_time 0 - attempt 1 bP$<P#   ! = /  B 6Status ReportsMajor weakness of print spoolers is lack of diagnostic information and job status LPRng assumed that most users would require information allowing them to fix paper jams, etc LPRng based filters generate status reports which are kept in a file in the spool queue. This information can be viewed using the lpq command The lpd server keeps a log file of status information as well This log file is also viewed using the lpq commandbRW} ]Alternative Status ReportsSeveral CGI scripts have been developed which allow you to get LPQ status via a web browser See the LPRng web site for examples You can write some very simple Perl Scripts that can open a connection to the LPD server and get status information. See the LPRng web site for examples Z\$u$\$u$>d5Y|LPQ and SecurityOne of the major flaws in the RFC1179 protocol is that there is no way to identify the originator of a LPQ request. Thus, there is usually no restriction on the data or information returned. Since LPQ returns the host and user which submitted a job, this is a very good way to find the names of machines and hosts to probe when doing hacking attacks Firewalls should disable port 515 for this reason in both directions, as you do not want your folks hacking other systems, right?}LPRM - Job RemovalPThe LPRM program generates an RFC1179 job removal request lprm -Plp 179 (remove job with ID 179) lprm -Plp john (remove FIRST job with user name john) lprm -Plp all (remove ALL jobs - LPRng only) WARNING most LPD/BSD systems will accept any request from any system to delete a job. The wimpy  requests must originate from port 721-731 restriction can be circumvented with a PC and a simple hacking program. Sigh& $:-~LPC - LPD/BSD Printer ControlThe LPD/BSD system usually provides a LPC program that is used to control the LPD activities. Traditionally it does this by reading and writing files in the spool queue, and changing permissions on directories The details of this are too ugly for public discussion. You really don t want to know. This architecture means that you must log onto the server as ROOT to control the print queues LPC - LPRng VersionLPRng extended the RFC1179 protocol to add additional commands for LPD server administration The LPC program generates the appropriate request and sends it to the server The server will then carry out the command WARNING The observant and suitably paranoid administrator will have noted the horrible security loophole that this has opened Don t fret - we have fixed this$mLPC - Basic Commandsstart - enable queue for printing and start unspooling jobs stop - disable unspooling of jobs enable - allow jobs to be spooled disable - prevent jobs from being spooled status - show print spool queue status This is simply same as LPQ, but different format ,,  LPC - LPRng Additional Commandsabort - kill off the filters doing printing and don t restart printing Used when a job gets hung up, the filter is unable to process it, or there is something very strange Job can then be removed using LPRM up - short for enable + start down - short for disable + abort restart (BSD) or kill (LPRng) - kill off the filter and then restart it:GG',LPC - LPRng Job Control )move - move job to another print queue lpc -Plp move lp2 john move jobs in the lp queue to the lp2 queue which were submitted by user john redirect - redirect all newly spooled jobs to another print queue lpc -Plp redirect lp2 jobs submitted to the lp queue will be placed in the lp2 queue X''A'!|%(LPC - LPRng Server Control&lpc reread the lpd server will reread the printcap and configuration information files lpc -Ppr printcap display the printcap information that the server has for printer pr lpc -Ppr debug 1,database,receive set real time debugging information for printer lpc -Ppr debug off terminates debuggingz LD"X LD"X  %  /I&Print Queue Job Priority and Selection<This is explicitly undefined by RFC1179 Most print queues run on a first come, first serve basis LPRng Extensions lpr -cxray will give job priority X (A is lowest, Z is highest), and put it in the xray class lpc class xray restricts printing to only jobs in class xray lpc class off allows all classes to be printed Brr a I* ,LPC TOPQ CommandThe LPC topq (top of queue) command will put a selected job at the top of the queue lpc -Plp topq john will put the first job of user john at the head of the list $U?>IDAdding A Printer !Adding A Printer - Printer ChecksMake sure printer works You would be surprised at how many problems during installation are traced to non-working printers Check out network connection by using diagnostics or direct connection via lpr lpr -Praw@ipaddr /tmp/log General debugging level is 1, and network operation tracing is enabledDc'Gd&F>dLServer Operation TracingFor all operations except job reception and printing, trace output is sent to STDERR Example: lpd -D1,network -F 2>/tmp/log The -F flag causes the server to stay in the foreground, and allows the server to be easily terminatedD^g_f,]l!Debugging Spooling and Unspooling When a spooling or unspooling operation is carried out by the LPD server, the printcap entry is checked for debugging flags (db) and log file (lf) entries lp:sd=/usr/spool/lp:lf=log :db=1,receive,network:max_log#1000 If the log file exists, log and trace information is appended to it When the log file exceeds the max_log (Kbyte) limit, it is truncated to the min_log size This technique allows tracing of job flows through the system in a simple and easy to follow manner^?~ ? 1 &  Fixing ProblemsLMany of the times you will discover that LPRng balks at accepting a job from some other spooling software due to non-compliance with RFC1179 or what can be considered a security risk You can force LPRng to accept the job, but it will insist on  sanitizing it before using it To do this, set the fix_bad_job value in the /etc/lpd.conf file to true. # fix bad control files and data file names # fix_bad_job@ fix_bad_job (_H_HP)}VInstalling and Setting Up LPRng  Insta      !"#$%&'()*+,-./0123456789:;<=>?@ABCDFGHIJKlling LPRng Get the source code from a distribution site ftp://ftp.astart.com/pub/LPRng/ Get the distribution (LPRng-version.tgz) Get the filters as well (LPRng_filters-version.tgz) You will need ANSI C compiler, GNU Make, GNU Zip (gzip) Uncompress and tar the distribution gunzip -c LPRng-*.tgz |tar xf - Configure, compile, and install the code (see documentation for details configure; make clean all install Install the default configuration and permissions files make default -Z}Z\Z ZHZ"Z8Z Z-\ H"8 7  4%LPRng's checkpc Program(  NThe checkpc program reads the printcap files and checks the system spool directories for consistency with the printcap information When invoked by root, checkpc -f will change permissions and create the required files and directories It can also be used to remove old files and truncate log files. See the checkpc man page for details6O b G "Setting Up LPRng on BSD Systems +You must first stop the current LPD ps -axu | grep lp get the LPD PID kill pid Run checkpc to fix the permissions, etc... checkpc -f Edit the rc.local or other rc file to start LPRng lpd if [ -f /etc.../printcap ] ; then echo -n ' lpd' ; /usr/local/bin/lpd; fi; Start lpd and test the system lpd$.+ 6L$+ 6L#    Setting Up LPRng on Solaris/SVR4 The default printing system on Solaris is the lp print spooler. You must first disable this, as well as the various network print services lpshut; nlsadmin -r lpd tcp; nlsadmin -r lp tcp; Check the /etc.../printcap file, then run checkpc to fix the various system files checkpc -f Next, modify the rc files to start lpd instead of lpsched Reboot the system Check the system using lpq, lpr, etc....1R u.\1 8 u-[    ) LP System EmulationDWhen the various LPRng clients are invoked using the LP system names, they will emulate the lp system behavior. This can be done by making symbolic links to the various files: ln -s lpr lp; ln -s lprm remove; ln -s lpq lpstat; This allows programs which require the LP print system to directly use the LPR print facilities:3`3`FR bLoad Sharing and Printer PoolsPrinter Pools and Load Sharing}The LPRng software can do load sharing between a set of printers by having a master spool queue and a set of servers printersuLoad Sharing Details@The jobs in the master queue are sorted by priority When a slave printer is idle, the top priority job in the master queue will be moved to the I dleslave printer queue Example Printcap Entries: master:ss=serv1,serv2 :sd=/var/spool/lpd/master serv1:sv=master :sd=/var/spool/lpd:lp=/dev/pr1:... serv2:sv=master :sd=/var/spool/lpd:lp=/dev/pr2:& Jobs can also be spooled directly to the slave printer queues as well < GGL    N:Load Sharing Details (Cont d)The LPD server tries to use slave printers in round robin order If a slave queue is disabled, no new jobs will be placed in it Slave printers must not perform spooling or load balancing will not work correctly Bounce Queues Bounce Queues and FiltersSometimes it is necessary to perform filtering actions on jobs and then send the job to another print queue This is common when dealing with network printers, or when you want to have special actions performed by a special queue Reasons for BQ Use{#do 2 pages per page up # WRONG Method pr2up:lp=realpr@host:if=ps2up #real printer realpr:lp=pr%9100:sd=/sd:if=ifhp The pr2up printer simply passes 'f' format jobs forwards all job to the real printer, and does not pass the data files through the ps2up filter LPR will look at the pr2up entry and decide to send jobs directly to realpr, so they will never get put into the queue(tt- -Correct BQ Use#do 2 pages per page up # CORRECT Method pr2up:lp=pr2up@host:if=ps2up :sd=/sd/pr2up:bq=realpr@host #real printer realpr:lp=pr%9100:sd=/sd/realpr:if=ifhp The pr2up printer now has an entry that will force the LPR program to send the job to the pr2up queue LPR now look at the pr2up entry, sees the bq entry, and will pass the data files through the ps2up filter The output of the filter will then be sent to the realpr queue(/ oAlternate BQ Printcap #clients see this pr2up:lp=pr2up@host realpr:lp=realpr@host #lpd server adds this pr2up:server:if=ps2up :sd=/sd/pr2up:bq=realpr@host realpr:server:lp=pr%9100:sd=/sd/realpr :if=ifhp (  * Update Data File FormatsAfter the data file has been modified, the original format may be incorrect Example: you want to change the original f format to l so that no further modifications are made The new format entry does this pr2up:server:if=ps2up :sd=/sd/pr2up:bq=realpr@host :new_format=flvl New format entries are pairs of characters; the first is the original format and the second is the new format after processing Note that the control file is changed irregardless if there is a filter for the particular format LFFbEditing Control Files@A bounce queue can also be used to modify a control file. This is commonly needed when either the format of the control file is unsuitable for the destination printer, or when data file formats need to be modified as a result of filtering prgif:lp=realpr@host:sd=/sd:rf=/gif2ps :edit_cf=/usr/lib/cf_editor The cf_editor filter is given the control file and can edit as well. Note that this can include actions such as removing job files. This horrible kludge is needed when dealing with vintage software that produces control files incompatible with newer network printers:D D   Routing Jobs to Spool Queues RoutingISometimes it is necessary to dynamically decide the spool queue to use based on information in either the control file or the format of data files For example: large, medium or small jobs For example: special color processing This is not the same a load sharing, which makes decisions based only on the availability of printers IRouting Filterelp:lp@host lp:server:sd=/var/spool/lp :router=/usr/lib/filter/router The LPD server will put jobs into the spool queue When unspooling them, it will pass the control file through the routing filter The output of the routing filter (on its STDOUT) will be the new printer name You can combine Bounce Queues and Routing, but the results are not predictable(F F ~W Host Specific Printcap Entries  Host Specific Printcap Entry UThe oh (only for this host) entry restricts which host will use a printcap entry Example: lp:oh=*.astart.com,130.191.163.0/24 :lp=lp1@server lp:oh=*.sdsu.edu,130.10.0.0/24 :lp=lp2@server Values are lists of GLOB expressions or IP address and mask values If the host name or address matches, then the printcap entry can be used by the hostLZcTcB   ~ IPart 4 Horrible Problems Permissions Authentication Accounting DefaultsJJ PermissionsyAdministrators may need to restrict access to various printing facilities for policy or financial reasons Most print spooler systems have some sort of mechanism for restricting access Problem with RFC1179 based systems is sparse information available to make decisions You have the endpoint of a connection You have a request type Some requests have a user name, others do not$ m mLPRng Permissions File%Based on Packet Filter concept File contains a list of ACCEPT or REJECT entries Requests are test against entries until a match is found If the result is ACCEPT then the operation is allowed If the result is REJECT then the operation is not allowed You can also put in default ACCEPT or REJECTExample1# Accept LPR requests only from 10 sn ACCEPT SERVICE=R REMOTEIP=10.0.0.0/8 REJECT SERVICE=R # Alternative to the above DEFAULT ACCEPT REJECT SERVICE=R NOT REMOTEIP=10.0.0.0/10 # Example 2O# Let only root and admin on server # have LPC control permissions ACCEPT SERVICE=C SERVER REMOTEUSER=root,admin REJECT SERVICE=C # LPRM Remove requests only from # same host and user as spooled them ACCEPT SERVICE=M SAMEHOST SAMEUSER # Allow test on tester to remove files ACCEPT SERVICE=M REMOTEUSER=test REMOTEHOST=tester.astart.comPPEAuthenticationRFC1179 does not provide any authentication methods Since it is trivial to forge network level packets, etc, this can be a major problem LPRng solution was to provide a general purpose method of adding authentication Currently, PGP and Kerberos authentication is supported,]  AuthenticatorA connection is established, a special AUTH request is sent Part of the AUTH request is the supported authentication methods The reply contains the chosen method to be used Each end of the connection starts an authenticator program which will then perform the various authentication and/or encryption to be done The authenticator programs accept information from the LPRng programs, encapsulate it, and then transfer it to the other endp@ Example: PGPTo use PGP authentication, each LPRng server will require a secret key, and each LPRng user will need the public key of the server Each user will need to provide his public key to the server as well Each RFC1179 request and/or reply is signed with the appropriate key, identifying it as originating from the correct endpoint The use of a Public Key Server to supply user and/or LPRng server keys greatly simplifies this operation If you are really paranoid, you can also encrypt all requests and data file transfers >!,$Forcing AuthenticationThe permissions file is used to specify that some form of authentication must be done ACCEPT SERVICE=R,M,C AUTH=pgp,kerberos REJECT SERVICE=R,M,C NOT AUTH 0VFVE,p  AccountingPDon t spend dollars on counting pennies Levels of accounting Numbers of jobs submitted completed correctly? Incorrectly? Numbers of pages used how do you find this out Z="="Job Level AccountingzPrintcap af entry specifies the accounting file If the af file exists, then a message is written to it at the start and successful conclusion of each job Multiple starts with no conclusion indicates job failure or somebody waited until next to last (blank) page came out and turned off printer& Students& I mean users& become very sophisticated at this type of thing. Less common today given large numbers of printers usually available for use$$ -Page Level AccountingUsually required by some sort of administrative bean-counter who also counts individual paperclips and pencils Also, may be useful when costs need to be allocated on a project or account basis Most Laser based printers usually have a page counter built into them, so that you can determine the number of pages it has printed for servicing purposes If this pagecounter is accessible via the network interface, then you can get the value before and after a job, and determine the exact number of pagesf Accessing Page CountersThere are no standard methods to do this Each model of printer appears to have a different method Even documented methods may not work on printers High throughput printers try to do job buffering, and do not report the correct page count You need to wait for TRUE END OF JOB This really slows down operation Page Counters Lie Usually value is stored in EEPROM on printer You may get the stored EEPROM value, not currentl)j\F^)j\F^Configuration and Defaults The /etc/lpd.conf file can be used to set values of configuration variables Example: # fix bad control file information fix_bad_job The file format is identical to the printcap file, but you do not need the leading colons (:) and each entry must be on a single lineVV/ E/>  YConfiguration VariablesNThere are zillions of configuration variables used by LPRng. Most of these were created in order to configure LPRng operation to be compatible with very strange spooling systems or very nasty hardware Unless you have problems, you can safely ignore them. Really. If you have problems, then you better start reading the LPRng HOWTO.>63,Part 5 Multi-platform Printing and Gateways--Print Job Preparation>When a print job is generated, the information must be in a format suitable for the destination printer. There are two general approaches to the problem: Do the conversion as late as possible in the translation process (late binding) Do the conversion as early as possible in the translation process (early binding) Late binding is favourable to the print generation program, as it does not need to know what specific printer will be used Early binding allows the print generation program to take advantage of any special options that are available on a particular printer <ZZZL LP / LPD Uses Late BindingXThe LP and LPD/BSD print spoolers were designed to use the late binding model The data file format indications were supposed to indicate the type of file and the type of conversion needed The use of PostScript and PCL largely eliminated this need Most UNIX programs cannot take advantage of printer capabilities that are well known to the user YZYLPR -Z OptionsJLPR overcomes some of these problems by allowing users to specify options that are passed to the print filters lpr -Zupperbin,duplex filename The convention is that filters will scan the -Z options for values and use these values to control printing Since these are printer specific, the options can be different for each printer :oo,o  MS Windows/MAC Use Early BindingSystem configuration information records the available printers, I.e. those which have graphic to printer format converters available to the user  Early Binding and Job Generation In order to print, the program needs to select a system configured printer Configuration information includes the format of information to be supplied to a translation program The translation program Additional parameters for the translation program The information to be printed is processed by the translation program The output of the program is then sent either directly to a hardware device via another program or put in a spool file Spool files are then transferred either to the hardware device or a network printer6LLDriversIn the MS Windows environment, Printer drivers are actually several things Graphic to print file conversion programs print file to hardware interface programs This model leads to much confusion, as when errors occur it is difficult to determine if the problem is in the graphic to file conversion part of the driver or in the file to hardware device part of the driver This is even more painful when you do network printing, as now you have to distribute drivers to all printer users6LTGLTGNetwork PrintingIf you plan to print to a non-MS based print spool, choose a print driver which is as vanilla as possible Try to generate PostScript or PCL Try to generate PostScript Level 2 or 3 and the Document Structure Standards$jojo Win95 and LPR/BSD Print SpoolersWhile Win95 does not directly support LPD print spooling, there are several shareware packages that provide this. Recommended: Windows LPR Spooler Version 4.1 Author: Susanne Heil, EDV-Vertieb ftp://ftp.astart.com/LPRng/wlprs41.exe Implements a very good LPR/BSD RFC1179 compliant print server (LPR) and status monitor (LPQ) Uses Winsock interface, and works with Microsoft, FTP, and several other TCP/IP Winsock.dll:sx(b  AlternativesThere are other print spoolers available, as well as some that operate with DOS See the LPRng FTP site ftp://ftp.astart.com/LPRng/WINDOWS Other utilities are there as well:g#"g"#>X+Why Use Wslpr?If you want to have a printer pool, you will be using LPRng or some other UNIX based server (unless you have big bucks) It runs over TCP/IP and can go through firewalls 6pWhy Not JetDirect? Be aware that using different network protocols and the JetDirect software has resulted in locking up most HP printers Most of the software testing was done in situations where there as little if any non-MS network activity, it appears 8  Windows 98Has support for RFC1179 Unfortunately, it appears to have problems when connections time out and periodically jobs just vanished There may be a new version out Real Soon Now Stick with 3rd Party Spoolers!Windows NT Server LPR/BSD GatewayWindows NT supports remote LPR printers. It will translate print jobs spooled to an NT server by creating a control file and sends the data file Unfortunately, there are some minor problems with control file format, missing fields, etc., but these are easily handled by most LPD servers NT also ACCEPTS print jobs for printing This means you can use an NT server for gatewaying to the NT printer environment Beware that there are security holes lurking in all of this q \ LPRng on NTLPRng is being ported to NT Will support the basic LPRng functionality Filters are very messy under NT cannot easily fork processes memory leaks in NT DLLs H+ 7+ 7$-eNovell Printer LPD/BSD Gateways Novell also supports a LPD/BSD gateway facility If your Novell server has TCP/IP support installed and active, you can set up a print queue on a Novell server that will forward jobs to a LPD/BSD server. You can also send jobs to the Novell server and it will print them Samba, SMB, and LPD/BSD GatewaysIf you do not want to install Wslpr on you Win95 system, or do not want to set up an NT Server, the Samba system provides an alternative Samba implements SMB over NetBUI and IPX While it is usually used for file servers, Samba also supports a very nice LPD/BSD gateway facility While not being personally familiar with the details of Samba, reports have indicated that it was trivial to set up and get working "It worked first time, out of the box." Kurt Reynolds<,/ PCNFS and PCNFSD Gateways to LPDPCNFS by Sun Microsystems implements NFS (Network File System) support for PCs. As part of this support, Sun provides source code for the PCNFSD server which is used to authenticate PCs and provide print services via the host that the server runs on. The LPRng distribution has a set of patches for the PCNFSD distribution that interface the PCNFSD server to the LPRng print faciltities. They also close a couple of minor security problems involving unchecked string lengths and stack overflows>f nApple and LPR/BSDThere are several products for Apple NFS support that use the PCNFSD facilities to provide print services. Several people have demonstrated this working very well LP (Solaris) to LPD PrintingSolaris 2.5 System Administration Guide, Vol 2 Chapter 48, Example - Adding Access to a Remote Printer - remote@host # define remote system as BSD, and force connection to be dropped when idle, 1 minute timeout between connections lpsystem -t bsd -T 0 -R 1 host # printer is the lp name for the print queue lpadmin -p printer -s host!remote \ -T unknown -I any accept printer; enable printer lpadmin -p printer -D "remote printer" lpadmin -d printer # make default printervfj p+     (   N##Monitoring Printer Status with SNMP"One of the weak points of distributed print spooling is monitoring printers for error conditions One of the benefits of network printers and the TCP/IP protocol is that you can query them for status from several different locations One of the nasty problems is that most printers do not provide good status indications The good news is that printer vendors are now implementing SNMP agents in most of their printers that allow SNMP managers to easily access printer status The bad news is that each vendor has different extensions and facilities Perl, Tcl/TK to the Rescue?$8I have seen several nice printer monitoring systems developed using Perl and Tcl/TK. Unfortunately, the most elegant ones depended on commercial SNMP managers such as OpenView and SunNetManager. Several interested parties have been working on a simple shareware monitor; watch the LPRng ftp site for detailsbCZ XWhere Do I Get Help?1. If it is a commercial system, try your vendors support group 2. comp.peripherals.printers news group has a large number of discussions about printers and spoolers 3. lprng@iona.ie mail list for LPRng related issues Send mail to lprng-request@iona.ie with subscribe in the body 4. AStArt Technologies provides commercial support for LPRng and offers network consulting and management services. (Shameless plug) Good Luck!4   -VSummaryIf you are going to run printers in a multiplatform environment, you will need to deal with the issues of gateways The LPD/BSD facilities, as defined by RFC1179, provide a common platform for use. While by no stretch of the imagination can this be regarded as an optimal solution, it works well in an environment with a large number of printers which need central mangement and control,%;  Questions and Answers/  0(  l  C D^@   l  C ^p  H  0޽h ? ̙33  @$(  r  S _@   r  S d_p  H  0޽h ? ̙33  P$(  r  S _@   r  S $`p  H  0޽h ? ̙33   ( ` l  C DV@   l  C Vp  H  0޽h ? ̙33r *0T U W Y p*[ b &&#TNPPp0D v & TNPP &&TNPP    - "-- !-- "-&Gy& - Times New Roman- .l2 CPrinting LISA 98 (c) 1997-1998 Patrick Powell http://www.astart.com                 .&y&  . 2 e0 .& "--L$$ZH7((7HZv(7HZfxvZH7(xf--&& "--L$$` O >/##/> O ` p #/>O``rp`O>/#r ` --&--yPH-- "Arial- .2 wManaging( . .<2 c#Network Printers and Print Spoolers#"        .--q1 -- "ArialT- .2 5kPatrick . .2 5 Powell  ."Arial- .2 ^`papowell. . 2 ^@. .2 ^astart . . 2 ^'.com. .2 Astart  . .H2 + Technologies, 9475 Chesapeake Dr., Suite D   . .$2 _San Diego, CA 92123. .+2  619-874-6543 http://www. . .2 ;astart  . . 2 ~.com .--"Systemn-&TNPP &