JFIFC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((" ,.Fh Ch@ 10D``DBB h4 @dX bD iD ІI$TBB'$"`I)Eb`(m9@0hb&!1114  b` Dh "lTH)TAiN  A" hf%n£!aY4hcC"5J2#Tզ@ #(a`QI+JHB8h@!!!hSMNhC4$11SB!`&2Dc(p*`"XE b!IJ&0C41 b `hL0JHLi1L -XX`ݚb% )*Cp& ! $40)!b䜢hC@D 6JJቨ4B!`b `0@ b`&ё^IÆ LO7dX h@)A "I`6H !L'@ DQ B!Bj4  L@ @hb&%$ D LQ~7ҜtZ&pӘ b `&)F؆` 7DBB&qI:LVF2B1 5iL4$ mj4 @ @ b`0b iS` 14V1l˦I7 @` L&ȒB[lC!FlIY +@!"!%$  HX J00CبDE18! L r2ϳ>Tس:=8Ӓb  & !`) "0$EMSIAL6D$B`&BBX&1C CT4h! @@4 0Yf |,tCE\T}nn` b$1AN&$ &IS`0118` 4  9_^8B14yꞿ3wlK 7 &@ 0@ @ `Ȓ b( +$2DR:]Z3cqcAȴNb11@#@18b`!upyt|z8lZ+]}3:zKcwA9SUU5AJ   2LUp*HR+EUEvF2qIW8)-JYDUQ  b `16!B& n$I9y~yntpX"QE,m[&C44 b ``@  BQ0&:Qud J7*"S-5(J7U@`  b1n.2/| ZrJY]3~ڕyצ1Ͳʬ3}[9NΨWVun}Tc~g6g=Mq6}GKsx b``L!nu"6ڬQ}_4 4IMtSҫ(610 b`],k4r:\_GOn骻q[,C*ͳԖzhUݐ9w L01 L& hQm(4d]nNiF wfG&ܱx*uθIbBʤSnܢaFj(@`8箄Ꝿ&IltgxgɻM%Mږ{z)]vSqUټ& b`0CT 8&`% '** -L/(4$cךRjp.h @1b!  0n7ʮB Kt}UF˞tr\7Jϖ~%Ҹ[!hUqp!&7Č1] *O4צN.Ǽt0!J%S101CC&1 Lh b bey ?fW7Ƨ,ʒ2t}֚m[PzvvF@ʀ  hb @%(#!!bBâM4BF=x Pցdd'YS̷ͬ 118h`bSv\>}Ux/ޝ7UI5h,pܞ^[U9=&v8@I!(XjaS,S3]av(KWP4j` -#ݒ7Jն&W"1t!^0 ! &X2y=yomNz.zVwfKݚж26ϗMa5L0C]q$8EQTl;yj]\U:znT62U f%uLb!  o7Q/{jyϣCJgS[oޮOO>_W6O~oC,2T`44\3zc(B A\cuݛU4컗AK2B6vǷ\n9WXQ,y:Bz` `4 @C&r_'RdxyNu <SQUM+#S⎬7v㦩K]Jy:KX5b`!!)*d 1RYn+έӚKUJX7U3˟EA}lŪe6@@  b b4x2\>|z^WvB{3^S׺Np^kέ㜅VզhW6rw{xz=)@h+ !daYZC.~mQniڲ7|0Qgj_J}l;8Po)Ά>4 @dtsNqОgͷ>ǻ \T`ыfNf7(pu9|]͙c{#(h1 @ @}6yn;*SHI*Bj"9̻&{y]4գ7>Wf~םZ0niMRsTH/NL` @ `/9ywVY-tkZJ~sGCz|z[cV-KX+csSTWu6kK2"2QiM b6y֝^]k׍ʻK=U**MVK2R.ZE9}v6{i1m]jZҌRUJ)De%dR*K~eS>-у$eͮsuκh%lGNl8#~:n5Yߎqf?L'@ @ojȲ*d.ܴn3q$ngլNKbS%{ߓ\qM(zOk=R͕zX_~=hE'J]\YA&]ƣLk4>5tdUFm8ʋ+7T+K-%3oU]kRKV=cNjkCiGY)s󝧂뫟CX=na\^ RgOA5F|-P_ew9jWM;暜Q}rUh;p_>|+ng<%̙uӧ>phss.SE67FH[W+8sc<=3Z_FJ^Mz('.Rǖ=<}<=hr7Z6v"pV-:jS٩}vf2UeYN\K JN*|y.!~O{ k#;1rt݃:>8sVL]*gs*-dY*Wdnb b&@?=1Ms*|ZW3VY.+ӋcSZg EWfgvZNDeSBWʋ$ӟLu?CԎvܚ/\hُR]zu3&UWZRvj^l[֢3u[ةZ2=Ox]wԥΛbyu͝p뚫3UsaVX;I>7~xgpa;_կM5yĔ1dD׳<K}*D&P&@18{N]n)E=Mg_811YGE) "J cMQ]e3>_Q=:f]IzTQS US-izΛ$Iv3Q]]JM$[VT *N5-eBHJO<侴euRVzseOv--m(JƬi`jKڹW+n}1Z^.sLyq9}4/sw@ZH!]M&y،l-nq沯Ets'mi9E: Q"Z 5ֽC^mkV[ʝ>]3n2,#\B `T(U6-N,gF~&[bB^w*<=UÎ+mBePW:IPڪ7䫲anm J0 Pg=iQpڎz\~-kRqXl9]O.w}Ku&kSuHS $BRee:̢r fnYmSE9Hr3PQuVE 6AM "vty|yU.Y!nm4kqB.N4UdF鶫,qLں[e ⒅kYknpwBϓU>^Ѳ+214E8,:"=YվٛG\N{UǭJ1؆( -Rd [ۏͣ1f^6%fF$sB̠YUӲs]0 &\Z\_dL)f{!f7}6_w5SYŵUUYe]=73uԌybv#3]ё+fXx?ί'jĪZ'KZCOmVg ٚ5![omjbїxue ؒuU̔g5ziW:7':]Uˎ:ur;ês솅Dq#$BGVQ}cWQd.ŋZ5yrhgg^1ʎxGo|u?=%[V63fH41ӿFBwwnlӯǵ*vp$FJdi::qӏ^|{sF5skb+b;+ɳǽy9mIAJ1ɚz9j]<+htU!lNZ`tafcʍ4⁳G/LJ|TZ5%TͲBLSd-.ط%ؓ5ˡæRdĉV bc@$::v֋oV\fwtr~.V:2.8n.YX͎hk1.Jvտ}ڸm볧-%\s^Lݾ}fƥ<;9 o-^,/B9T,ųXҬ o,4 hxiӛfR-zlFfR&oSG/G=fl"#o %$4W٫#1e;Y(62+W4:lt#:;1[G3YfzseN8dًI8Oy@ԉ``&!#8Hs3_OFRثRulvth;Ì:dl @TqVR* ˣnsuX4%y:f2h]KƣVi%:f'w?LkU?,iÑIg]B%6aUiUg&>zuƧM_5^^Z役:stNg\Y+6ٞEֹgZγV5vkD-d=y55(&: F%`Ȏ-@ 9}l|dNPGDWmp%܍=mbZFlӺ23jqъuپY|| FxiP+$'*싶M+oEșPBf x8O;)3:!319t5!K kϥ:o 鞖3;=QY٣ܘ0JCM`I5f|֭sb)[b6xe8Ne!Bq2c8&(Nv񺭁TmdB6AI"^OOA(D#4o,i󶞼 ^ϯɽEz{κչ  J2# J0lewn~̚!)N(џLbU9:x}qҲ6m~/LmҘ>F蛖޿q]V FbRF|qV]ب5ltO՜&e\u5N\&\تP ʕ^dKN}!F'3ԌIT-!Ќ\%||&zcy].:yٿ,n㨍vL1I"5I4ЇJ+y_4t[Aݦ>f:i2\2eP۱kqED1g۟NxǫOMJ4uH\EūB ]I!["IHl>GW t0peEN]2_g:nm#7S{qR7.ŲAVL,qhJ A$n,iօ7>]0g3MiKkK^#PJ8@LjVD,kU yz̪|NKυI@.v}5wy}~cLIWw!o )E(JT1RjґW{!#4}g(CD%bJ+WKO+ &3doFtr걤Zabb!ͫ7%ѯךU-Ăj*ÿУTҷ=|<=X[q6*iC"(d'"$- yyTnh-|z]fSn'dZ1Ky} />u_3\8 Nz8~GLP;iHvL@`SM"1`8x`q/mAI}E9qOןơ^r2U`JP,cBkW!$I)d+bܩir+уXJ-)~tc>&ĂVB-K_?z$. h0R)F@9"ʑe>\z\;5P:M9u9ɮsaOz{qҬsq6ȦN@gm ;\$8' #R#%M_28ІU[j,#"˟P=++| g!4n^䪶 i5P$ϮYCc`Wr^010#Њr3$H ۀ29# ?ӯ ,q=ی;G0O,, 4A@83s3o !<5-׼ 1?430D$a ;8cO4 ̲9G&o4 1ͫ?8<3w>9? 6 8E Ǡ~ߙs,< ,/1\O8<:Հn:,ӽDb.4'8+Jr<<9]+rˑ0 <8"CP/ < s c?2<O;x7}000 Á(N5M0ϯFo<Q!w0 # L4Ҏ +1`=LѨAuM 8 @h  Ϊg0[8d_o|n00 8 whhtS/-ŸsC8 0 07o8$ڍ"ʘq{ T2ѱa0sFsrљu[ ?Nz2"8fɒ{Oc1+3vzM|"D:I}KYaLω` 0 G+(+f?)ŖR+}0q@{1'7#:w4VO0 $βէFS4LBer JeN*/ =A1=$l\Ӯ@j.檄kz%eqe^PU콹4x=3` X?Rʺn.Z׍x)y"ř?21l6oW5O䐘eނ͠@{B2y^%kZ*ogxBVW`h9mh]zXX,нP,ۍ44&}=fJ4E6~JC 06}+n'Ui1᠗$ClLE՝)[T@Ub̶&R3[gXPB =J(B41|xs}Px蒲@[5"J۲syo#$;X#L z\,;tEfwҸ,=ěeӽ'O (7=u~*"x(Q$I0Nm5ͬz hEb0?%0+l2ͻXl RH#rA/TmXb̪?>޻|P:}f}Sb*QnW4{5\@9I{;MWjMxs1;1dY~>r[WRlW2 UսKzrIv6G'1gglOrm"(zLfo`Tx0fbhmNW= [c3 $'4jy32`$^vԩWW|[|{TFg4CPaڝ {X6]0[Ö4W`'LqϊJ.,3U[1[v Q!!FuZe$ eQw?ieg]TL-N @X-nqBٸGV'd H- 47O3y=Q ,swwF%"wXMhO{5! p:;K(o;1O6`.9I~hŶͱ]Yqưpmaƾk^'y; S!",`8t侑5qGZw)Ayw/<^?Oz1tӪ($S]n91#T2yJφ |R|3sJ(]U+G{a&Pd>i6ClR|2Ռ7Cgخurڛgs.3uo=p,!5bh-?KM)UzUk81ְ` ZIy6 qJN-ե5ymχ7cl,iX .CR oz⯫y/R褻kPp20%˄c`6HapC[q7C(Dz0DG ϴu{m[˯Ac" i;?vGms$יg,h?(sc}^?Z׼s8&IGhDm?Kosy[r)| Cq{د}4} /{ePE4]s։* -?ۉ붻]:+m'Wum}njj(l*J }mKVT~ 5o|YYLPK,"jC*6i<}}mg*ޏ<2cs|㐓bI/v}Hvw gM$YQm<}}}}ڡ, 5`na%mv}]}UhQۼu,0<2}5uSU[-3lMUQ }d[a-9qLԻƥŻIu<<}g}mD#͓[}3qԗq[\^|+ (ŵP }qqe5=߷ (Bt597=#a*8^ȁ 2y`Åqi}<887w]Գ=xQD\}Dr)XI 1ϻ( cK<u6YqJ|4tu<o0[$-| 4&'=M}R&ʨLs.Uij M\_҂B!wh,o3g]o4Q7u ?o.\o(iˣ&CpLTz7ʙqoyv1 ԄajAĕ]ȘYB1/&aжiv1$J]I1ڂ#y ہ+-AiVmmRYY̺}S*_އ #׭qrBv YR̿XB=kqYH8Dvq%=j1 PUjץ0,#>!Tף,8Ns|i,:$BWpہ0NNʼTrJkY?4@K_oYa @1沩(SgaA4Q6HwF!J`7pVhָe"֬jO>$,JdLTf9BV;(L\ h7 6: /[)+R1.?`2UM|r*Mѫ/-?H@l!M*"% d͖<HbģHo몯H^nTG[-9#%9I"9MԾtd%yhGN Z`˿LJܘ1 3Zޥ0ږ[z hfɎ$X览N7a./m ՖG]8_:)]`9xw(F.&n$6NJ?[^F GYdn΄΋9>z nf`~@lֽL&".qj'1q8hWݎ's@;B ;fdBy|q=S$`RD>]F ig ^%"MHt4SIK+fe Tnf/޳tdy%[1!Jdx'@^PMoxMS{TPfB|^*}'sUC-JA!AFx(i؟.C` \nx<졆|nxYPd(n`/fL#2t>#DũE^?кq OmNkoȚ6Y?7*&-BA0QRj`鋘LϡL61O{˗&T܊TΛ7 q5tfԯ09mKxt\6j0"4x/\ҙ UL}%jXƄ QYgк87d]G#aPJHrCN\xKg 3]Jy1`\` Ә![MͅX\ΖABn %̃rd@fL*tf]>]x*G~|ˀ`1|>;;_`GEqIؔ嚜 o3TrUsqǣĭ`FC1No}~`?52%f o5P  B楩I<$̙G.4v|ͬa,U+)7v1yP&_6WcBa1g$љWx5G!TxHRbL>}UȈ26KNV_OAk-eT~0 ""3›O1Pg(>L<^F,hF㘘ټËlauVGW5$Švչ6b.3N?/4Ow!~& <~0"1rvb Qf0U5Ax=Fo3S1z9f|1/&E(q3dq1&F #(Ua<DM@Af.gI똏fnD$;2?05(B A) >0Kp|~ED6EFZFv癩>Pڥ0 ӛf. Tk3mGVc0Qf;,ƥT`B"ߖ7*s iN*3("U FbqBbZ - ma_\X5 3.(drb;R`@58q@T&bfj\|{Tӹ$4AهB9itbĪہ̮D{ud\%jc5Ɍw,Le"m̠\xꙮkC ʔLD鷕x*D1(~?P& f&3Y1[c`J LzARspa\|t(TWJlKT"z 3 +ɨ80&]>Mg;0Ll&Ll61Z { MRSn(-=:fP& 8]!ryI'U,ynX\ n?sB9$̈́ u6`6/Y3Sd%1)w< 54QO8nYSMd&@k&<[DkcQ>&\ [%N:VA g08AyG淟R4qډswD:AOyDm<*\Mg3zA0c"țDɄf. ,jH#U6;U}1M 83y|kcBk889?Lچpd4L\W 2g&SLue~2-2!¦"Ӗ]:)&m;4bA?0k8d?)}AkV,&E(hڅ۸2S5Aq0F"UbYө䉗JF:6ry.6CMw> b&'5M{P|]T}8_3P,X Bc{A(7g9кӅr(55HDRiS~I:M_Ǐ  ZÕZ-k54ZV3Mg2/̹ڢiYԊD͐c]#6чu>Lv"pAFaJh]Q,MFfܢ&)>@CG(X%ߒhF(m.U?i.q.مw2c('kXIcbZkXD&#lGu g\)KlP#B`P[y}sR(UpAn%MW>fqԳM/|5FOm?ٷbx*ٚ-X9BP16ճ0ԲPP^cuyLF*e Ù­ -Ar8ybf&l$>!WQHQ.TIL ,?y"zmճ65Vq|L_"Sgϸ 72Ϸ#5Rܾb{["R>#9&e0Nf|6s5 ]?3:`"Γm@'gfLyybXq #=7VsE2%ĠG,y,n~"T~ _eXt^Q70ٝA7%ÑAf%3Vr(ij7@{_a_}od橶bdgGGɈlw˜' u.fYRh96i[9!>2p@*1&ELf`B~TM3F᱂\N`J AAH |e0sPJ|1>'L1L t nLQ cqsLUIQu4^a )u; о`vNbJP!1&Œ,.Rݳe(Gb}ޠ06mŒ`Q5ܙ#[`hP 6 cu 36`־& :3>SmxuxNMFdԐ9$G 4;++!>L(bdGRG pgʟ)3cܻ ~e3Hdiѷ)"T??ŋU"aENbw .SP@@_&l*1<8arcj/POܰ!48v ˊ|w3PrՄmCju594"~Q:LA[&-ϊc:f#YQ)="T{ajW><>D8[ǃz ExF6IOb"/"e֜965 &x&c̍h ~X9|K`01gm; 0md<Ӏ*3 >%]%Ӷ>4\AC85LY|@(vu{]:d5c::VzjzF]g.1dM3]bQn* "'6Vӯ28 e? Lu3IcaZ|T؉fm5:gyd9Rq:nǗ0:6ZvsB`G˘Lh8Oèf^Jk깠kMԸ~"nCop&. mS̹p{3b\ML;1|op܍l~_~&7<+\4g a+2 k_ߙ[ S7"ĚU@ѬGP&=7]=(!>cdːa,:~\r?i>ij28̵=<vm<)pc `1CهX õ{0t91 _`'cQf(\ehP" #YA>Q>yzS7Jy 1X Bp8s,v|G";_1+ks7#LZpڐ ?81|+fB\OB8<aMf*ȃϻo~5yֻ$ïb91LA1{xU5") E`+byg<\_lZ3aE c`;O0f,KNDd0XHN3tW3 OlHCaoUܒ&"Pه[2 FZW0'KWOt/ A δ 㹇E5L,JJ6DmZcdtRf w'1h_bc|ith\h/{XWfg`r#v=s<\ĻlkRkaٚţO:[鿿ogʡ<|h1TqNau3.,Y`c! Di3qۙaVh~ˆE<4бWf A{g2rL>8ljocMCAMO ';Q|Tv8&h5nqW IUdO\9P6y<fG&OT|8А&-22fp\tl~4zllCq] L9wB tiX\Fܠo~h?y/~AP*~ OãR(q` SfKN gfE]4hɈ6c Bkܮ3p=; DBAg0? =ˁS|Kt2ci4F3gJpee˪*~qwՐۏa4b1}S55 Cs EbE˸Q#4yCv{L^%XЈN6 ǭª&H*qsWv+gFuAƢy)MfhB2@PC '%}k"Lϑ9"z]BUΝ5@9&5';\>%H;u tۄ8V`zo3{@>'_l6dG+f:;A]BM;@D87"u@r2}t[ ¥4ll&>r!\O6&}n0!=`8'pftؾ=k1Yf(|uOrZn4(cuQɞ /L - T؊ۅ<ZEb*~&vߐ%+Fa*YSFM7/n&d5&i\>0@c"h#h n` `8 >=Ȍ(u`RǑ46`4{&R(H``7 abo"`ݻ5,('7j =5f\ '``g1|L˜"Vi[3HbT1g>`|č米?5_r~IjY 2p=kX0L4jLP-!Pr/gQm37}魻N}Ri`C4ŋ6,]R=ӷL#)(eF'%i&0L| 2UOULjliIP|b:}Bd_]vjvSCWe5$Q0>6!1A "0Q2@a#PqBR$%3?l/;?(g=T3iMm#D =>J~¿h,%_\rB>Q_qSMi3*:t(h{TR|aYR[oϧESFZ5`ܿ07a_8")&])5cbzԯF7KGz(JHP(F3X>?T6ʄJJޞJ dͰp&a)x]R~7NɘY18hHRĝL|2~#갢Sn<ً1ѓr]ٴq'>[\LoQ`צeBTf[ٌxmcgr`_ؾ!ݐ660-EQ  Ɂg@SC^&\z'Q8B= a?)?P:U?N@*>4}BrgX:;\N7jМ QK&ZNܯT6a6oa㸍練0d8E+`rVuhhhD3q=x멯oݙQfg<x?ӦÉV2?=`͟H$DXt`?TEeS'5g !{Aw~O2k'%8?6 1bmxls48>Hx55T[|G"0~{L`KPT4oU1c6|OF. >"De? FasQ^ʬrMne@3`d4tDDn8?2VC+VxHLeV748M* qU?M7& r g.Ѵ'o&\̀]` MqF*D,hA14l"\"@&T.f<r.2)&}0i#Qdƃ&nD3L@|@r"&#ɍs Eړ:cHfvd"G*fA\YB@S\X Fngt&,Yr*E!CDf mbiwd49Аc2uPr%&PCLlw\EP?1BSO(7#(☎B V0h@0SQrfn!kv?uw5LT!E "+2%}eAv`@Wc͒30+26Tc>fn<RT(9ֱO+n&W˦?UDZJAdQ`ZBAq0e*`"㈊Ld0X36fR@, #aJ?a 00GQ B% jfe WώE7iF ӏ(2}1:&e3A:%E]DPT A(DF=YTUm%d EPy<@ k mF^ft *Gs\DmšmAK列N2?gI8.0#%0 Fb. .f(FqV&P:vhtCwb-& ˇ#Lώ&#E!Rp'Og( xXX%,[V`Y LX!65mG],|Y*> i )4wdDs\f44M5Al|J8 f 3ןfyeSl"3]1X̸O+s"saWqR)yTccLCP, ;qh 4}y!IɴEv{9T2EXٚlG&@&W,j 3ǽ@j&zG&bLTno'cƘ<OLx=?(ؙȵʴRZ/R<֝Mq, nTյ$Yk] e`.u'V-w!h cOc4Y61&Rǁ1)4bG ,Cs 3'B@+1bg[Q4‰'˽&, o'"T5=`UvOj?BrC 8C XP ɤ:kȌMԻ1&ogG[@@aQp34_B QP_ hVbb C:c-h.!A ω 81J[ل'&)(ۣ,'X)\A 8D=Bo]7[{1QCP3&#Ez/gܻc~]q`QRf,eT ͤL=5#MC:.1\PT-8w Gan|c"%Y0LMٛ&L rsSd8u+W/Rè@E\\٦զ}1zQ,b~;"k6)F:YWc2TLnjb6ۓ9.><~1,NEn '74o_(*lD+u wӜٕDƼ@G3(e&lQзd@l. ȪjÓlUٔHn!:l"fL9v5hIu ǍL-o7:7EK.crmը௙ u3c]XGȘS2}#XZ?dO)f!ɐAbfG8T3OfpiNrfX)4cN2"F4!ʕL֠]ZŇLɷ%~e3܄E؈a/D>zzc=5V>L[i'b 'C>R#I( eR@9修euaFt`ŊSN]#bqk 3 j75lU*n}jOMWfUT0nf"!%zːc&gڥJ*i؜BV n|@7:0}bf\7M@9@gPМ`i 4j&p1m5?Qfk!ְcd luR>L'м̄&*}?툊怇J 0MfM) NՎs;)rlT=" (?9ɅZul@;%R&}: ^yVԛ# g-@@PRLg94^C>`&\.G7gйUL1 *: QDsAjqDl2-4u7Eox`܌c˼/*'fd*9㱆 D ;da:K2gbeh4{FҡgL |v3 }P ?tz`Ț&&o"{preLB$5fl L6وAn &3za)ϑŴ(ϩɄMQ\ޣ 3>=v~n ԐVPTWLĹnt̛3W=ØuqyYؿp}:O?g'ŷY(vf ,gQ9AL^?1!+n$֢&*`հ3$Ծ &5)\\@:&0E!iS3y7/URA<~"1e0YFNioIB;?Lpl=1V1w0`Nd`$C#O-ϙp!vkZ˹.fn|NɁOBdԽ(݇_-l3i0FԢ7+fLe9*D h;Ob`F1<"ڑح(E`Owֻc(VUlY{slc5UGESowѹ oy0Q{v剷 lsI6 FƖ8cimJIΓ 7TQsQ9F $h1"U/]Ps2+7s73YO|U|ΠS vcB=Tǘ>aۧjN3(côRƣ){Z;_@\P#؜gK=2͸1-qs:"1+*~`Ρ r"6b&mη$j 6>aTPŚ#1`R FD֔My$fI`ʻC3. >aӱ*1%g'i1lJfxjPðvېnk_%8 Q)RY4SLoɧ>lhđ&*&"ϑWj 8f_Xv3#B:;116&@caS0?`1sR37-b!q7Fa+4cE;S&Z3t;rq34)jQAJ!}c]@>`E3w]ҳ/8pÌe\I›, "1!cjTfb[if_i~ߨ4=ndY(L5cGQ ̣!5l=S2w,π-Fk6&wľ͆,UCJgP9cswbPݍ&ǰq0o*`C ȕ cF+/@B˩5fU #62‰(h۩2b`m4xm1V/lZo}VjiT/n 05w2Ʃ7b`<> 5٠%z"wv.n,LYWjfJ3wBm(w@\D|)d=Yqs?=f} s}&W4&Ĵ Cj}34s\m 0 &, &Lm3 % LTʶ.<x>FTLP"u-8 x (@QJy̨ʂT7?1}?n (6u^#>eh@Nnf*I<)aaԛ{}֊c]f{ UGT;,ͦʠyӌr1#nZE标80a+`DT\˘O(ٔa7`N[#6H#[YIU>'͙(M:.e/ONfRk޿> aٿ`G?~!^a£SP)cPD"l& 6ȇ)1t&zn|0dAc#'Calumb 4 ֩L=fݸ2oy.2I$\@=%?.$γc.U' &6yhc4~DžYz<fc@X~è81]K n DRk Ž &QbƣP pэZ:ljX3ʕ?ݎѲ(G` (z(PԅB~`kS6xM,bmwQ_ 6rMp{CdСG՝K cmؓG'ӲTnTM4k#Q{1O\GeN(QbsDO{h:Kihc'\?3(PBgmA)g 9aTq%#8N0m^T\cXQ%…^(/au9羳:o=3 =n-~Q~މs>0f' dΟ?n:cW=vKCiREd]|E9=(faݹ[9d* 8۳ݣeJ0}BKtLdIPGcGTıa+6M/" e'af[:^ 03~z?7*TqG Px{e`Q+yh'*94omJ(1W/Ɠ^+LJӓNJy-_$^kS h&fn!fusB'j9pV!8 0(蹦*9U4Xgc{ZUVӧw=Wf8TXңe\we7D ;>@SZ;VjgqHjP9 z#"bȯpcv)(et+w4gQ ,{ Ži$5EX:m/\ntXG\Frv~,Ԩp5! cL%O*Lx yŦqdGh 7cnSz L mgZl0G\dSݼ.UiVm FVcNH9dעlUe^,.I&Q&] mѝL/賀A5aS4s|CQqpoIH;|e_ -!Rb}/2tu #r@Uy6Tܻ0Phu]Ļٹ_@lrLдt#T1OS76~uwliΧ[L}LLiM9!7_O? IuZuNv,/!P25䷴CrwhcVI *U5ϢDiYLtaUvp}:'{?]fmst' LzMVrMMʮ0uFS naW7Ԃe Fk;B>Ƕ5D7w2&dK~ُƂڴ,;2Z{CX S5Mh?-$JfID£&x,-q#DQO2tj@GI @!Sv.2JvY*d &V`~#=27Z,TrdBCdFW K Tz;x5qTæʙ`;*kHQ&\JyݳKBt fL :|zt^c;`3 +ɀ-V;t)>au?7Xw`GRwAWHSnNeII*pU)ai0i8i9ͧPѥfcXUV6zy4Hg]NJ<-=֪xbS3fYOC. Py֩+kYZylg 9j:D3d\އoipwa6@nbq#\A}#R5Bl p2U]& %QΓ~3TLG]BbIU MӒcl*T&t9c=eC'~:;6x5@M4 [BnդM0I>򫅨VOt525j=wS1 0b L{mkEUm O *c T̸AiD? N;Ӛ`s^ǀ檓N|sPL:6HI?Eޙ'sf2M}'TjhhwL)? 煨 J Nu'䎉 ԅB4NU|)Tm<8B0k{2`i &KCe~Mޚx!%OA!Wk|!;T$S%L;kiTxG ײ4AL&ТJ.#4hmGhZ$4LtUeˡK*r{:s^D\TwPnQ[t\5ee=UG7˞je0GC,T8|P}(lsjhvwdOWgUtr;\DM)eEOHM >Rxs|BM:M}6aFbD eQ1[߽?P 9ke6N|hyD:9jpj6?ڎ-Kz*sDKay %^цAoyK)4nj]ˮ78uXjz5"汲!QQI=75iͳu}Ձ;V*}!TKC8nys]0etPmaS`CT*Tvb:ױ9*g<L0ʧU|!&eaL'϶DM$g53ZLk)#-S'wDcwE{0G;Ii#6?CrnC +Ϟp$puC=2oY4t 4FC9/Q:~'ET\t?T󯺰u8{C3B+'^XdamZZM<:}imް׎D+rKanUi*e"ςZs2潤CsS]sNRζqFHh4asۍaxJG9 ̕"ks7u)ѽLOE>>.suU?&hTUy}T!@& ?%̣| K]yoU#p#ZUDdNl9!R hNNg0[[o&O@p/ݯC3ȦRf+9إM)džA:J7@ˌqOK y]^3cNDѠqkXX~Z*AW,&קk*qglamFtqJ-'B|m>hwk!6!S)yBcW NmUZUIˈ.Ϫj܌~vFG$Ba;fVm:k x]^GN 1t /Tۓ@h+¼rW2gOݗ.Jxl"y%MzE1[uy,s-p,MTo8xʯ k $1Y:ȉ&̨;ÃVߧi dˠ "9BOȧ訸; i]c-{p ԉZ°1gif2nv2ZCW5[Pup|i ԜRʨX}I4w@Mny'K):\全9O%KxA Fn_٪*&i {%.*È*m &gR$Le" .$8OTT\*H:~F_ 5BF1ͱNrk Und*.|sޓ=Ld*6x2 v@)I/S5=%_ACFTثZ.xÒכxfd']%J܈#Ul4:({.|uꦵ'j{a~0r9#U4!apAd@ȣ190&hM_Ē)UUmsM%d 3o8ɵ=k:T*qLwu]h]chʓK9:_ө41{y.n|-@Wgl(:\D4cm:d Ow<_T8biS{d.ڃ(!UߴUMo7LԨ}mp:O: ^5*|MSK~`zSm\T ]& Mq+HTK YQR`s3΋ "'NߚܷunKv2/o㖍`vl&iA:VmE,9zg`̞>G^IwyTШzOM%4&@*O4; ˾*=}Bk?BaoA6 Csns M`Yy,"=S3{qn*'ڵrrՊ||LUHnJC) ve1/-ѣ@U[Uȵb*omx`n.Ӵ>*SLUZ *Ea6L\UR\w{g6Dhk[g)LdeW02BV5U6U,— cG `LOU8}~ K op|4q9(\~_=m7CdxH9eMl*ᕉ1Թa2D(܏TaBTUՄf EPC ?Obu'5Hk8G$y*cCrՅrM9Nyk>GTXdnoh4Xj;]9#YM­2ڲ3*joEARzeh@rküOWwZoU^69)'Xی;kߒcN ]< s'{lp Vi3R[ T`LE^ GS: P L}} (႘Ӫ}AlwEZzev#޳)Ȯq}C{bSֻ;IT}6s]:y)\ֻ{`L;%{zFKO}Uv-oHhQ2һK Y~LeڻPrDMwbby'rcTL$Z\2ǸT+*8Qt8]R)cAsdxDz6CDagXܩvk̦uQsdPqa|2ۏ`V w u6Fzho]m&wtX|>!<]Q1Z\ӡ݀ aȄ[qasUM>XrN ~LJ 0H}&ɨj=ʿı ^_> us{39+Z~%iv#03uO_תUeq| f}eR:,E ۗ.{`U\@ dgM04c6cj R3Xl@{n5X1-fࠉïNg~~wsDR:(rJ"\yŻ_o=ʼnZ*ѻ.4a*1uaouُ$I,)c[F@^ TGR&Mbnc\wMw*vVS6yL8džjvU ԅ@Mvy{D3=rYSkC@V@3QbP!q|Vڎ#Pf2{F2}!pT{M7T{F\L_0[5ZtTgi]97Y.ըfJf,s'D:6Yt}U4q-4cB>+ cmƲpvmh:ZGf32'k#o<'' _Bcd'CM#fp5k,;OV=G3Muj\eԕA-e1 ʬ4l9l)hÏUITk- y޻PŹ}ڸ50yQ'U2O@!T<SF6/H z7?XN3 BS)0-9s!SiTUw.HҚL~)\eT{Fly*.,Qp:gy. h-O`]}1ZPkP t:rXϧ^⏉8CM2c-&,y9MvXމCp8fmJuY,tHS]k:&x`!ۊ`r)lKS».R~~J9iuuވK{лO]W ?"Nh(uBJm췍܀sToKM.Cyho6{`CCvYpv9be0U??D *X~ӡ_4T'"ԤX㪥JjtđIu)w犏aT @{6X|Ml.rGf!V3+UȔ %Z|Ujze0ֹ^1OT>0 %2HX'vN+Ҝ!7'hp8+v.,R=Qѻjxѧ'dMH?HnX\=3AuĻ>^G_m 8\K@XAAk" +YsUt5vi?cLhI_5 <)JC /Ak\6,0;&)s h&q9SKU@^5_,ͱ$&nȷOݷڧ 7u^G89y m _,Rg/pjǘҫu0\?J]#\w"b=G%γX7l8a-[QU}r=B$h MUJLƦGS3@*\"B4E /VnͩNw,**Z[V.p9gpXgյ̧kc)ou7Bh 5U@FJ&,~t7)%37 S@sns)YMtn w4'xisWXa>o%kV}G'TU0vg J~lp*D$&vgkTwU%Yi^!b\xF+' ! 3\:G5iDWhGO*iЫwMwD|qvc*5C-aDjp^k V5 (7kKi7ywYoTʨ,B9rriL]60QR *`mVaY.e1R뾩Yn5c/k{xuﵤhCFjپ冤Vh zPab4^eRbgB 4]+_񓪜SC9[QG:Q`Y+Qw̬ v@ R,^,. 짖W _yDu๲-b>.$ )'}^'. {jWR9hb(6IVh ӬxI6Z1U Nm.ޣ4E@f>Ues-)*3 u=UJna 8:~K M-ܰm̧wd+I*imw Ri&Uh>VysnԳ>"2yNv%Pb:T.a5T=\S({*G^EhZ>G5هع өrU 4XC_Ul8 o5 Vو|uDasuDO%-0n5XgUpK+#2UiR6N 3G uBײa5u9gIN+*7O$H0Tn{qla_4O@RÅkXItEGqpyjihOͭ'>IUQu6,vg)Qc~ùh=Ή*}Wq ~ձ|UEYTqW.-y&Sxl_%in&v_y{oTG#%xy,E==ځ}C -oRHxuk L%昦A(qf|N7%Li-+ j#柕O4a_n!'(o9wK{ UOV絽:wbsAbUq5˟$r uL '*75n MB- /u:܈Xj&QNMyNH0TOUJ U0u[$o__ 9hqftY'J8; ?A2F2\dYtWh^ke*ƅp^j +|+Z>DmH B]Ty,#<=s ֛MٔZHsPF\8TiK˹NӅ:h(H\Jc&tJ}jnlo}CI!::<5\wBQK"3Qp51:eZ=Ät*# [)ܺ֙Jߴ?6hӒTkZ*zu|8GSktN|62f'3FOڵҝSH0ZKnj=ڰr֕!U|`1è?-ph >Jr: ~M`ۼwC%(Nn{ h ht]\0tL|~Knhø.q7D G  jANt#EO.`89跜1isCUkATiSkq#O^L@y2E x',(3 JpM9,Q蟲aC1L dWg{x|;vbkd杈uVaT׫knK ˭h,q&VEPf3RygbP2rjS]G>I"AG&$.ϧ$Yk/r{s4ւO c&5 h[(u!7x*5&89?>wu$2CR5F_[>u*=QΥiH=f.4l@-}#54@ ΉO0 l2?ҝ#0iO̩>. L ~X[`L_iAAx[XbuY8GЪT&gp9X٦:&yh 5%pRG%8&jS&LTXvjyn`{<5x4Â\9kچ4Laa^֜X.M4íf%;`G2~s ƛ;aRWm7 y"b0,hSmggԬ\>X:~kVGftRGyoᕼc|װezER4GUFPě.WX he< Z>NO85L5Uꖵx9amٻE$9 PH7~JmLtJӣZUS*FEauV.9+hȧze&73#^yg 4ˮh"7k {af ?ȉ[tZ<-XTʹ q,YXurr=L#iӺj~fL--jkRDwGkRѧUFe+w/E+ O_ XXQ|韆Dh Uw S=2 X[IRL1a.V"lxXZFWQZ] Ht9:uGV5U1oJ0Ktb:2~v:ջ6;Իv4O5 pfts\78S)fD+y놚A' (դ$2YC*9Tu*bXG \/<P hWejgiemmf<5@u 2Uud4i# dm;03 y/SA@L1-Uh0sGDse:CYV͵̭p;Rqꁹ->#Ś)wn(X!^UfL.ȧxx*7Cx,%?*|T Ҥ zͻFJM5?򫦣ˀp>{aЅyzMZbmn4 QʂZV; pKNTr@*bJgFDd7Soxuf>eb 9`\ZM;; 1.NCCs>KXiLW=G1g-q Ku[<|a'U9fF){DU*ݝg+HeJdazDiZu1P /GCD=ե{G%"oCJm*!B."J D>J"ᜅO8ےy͟{@~C R\rS=!0ѧK#yT!(tE"hF$y J.*X\1{ySjATZAy*7,I-p/ ȱkH^U 0<5?6g.7,'{]?!°檃!c/uLko#]"3թSi{8F)u6{QRrjh^e`mQ.k nBZ.Сu wcoVm4+ԫj}793 wz|,;3!'a\4+}X OC:V: v&ʐܚj2$ƫ 75Nmi"K}eLC |fD?LZ DHQ-YLA t2tj81br`yp٢d*9pNLɎmAeUUmFSk9D,Vm+vMN +߽hsC~jMu f^7%xSkO|K`&[%G 25 pH*:xOUP 2ElЎרּ`AzAne%By&O2N~JfsЧ*urJk*}"O>ES9,8;zhUs-$Z*\ ᒢw"3Nmi.D[*jUBրT8wM#Q‹]}HzK]rWf^v4:j[}\5ge7M; ʁN\f2|YaZLĪJ5y$E9 a);҅[kKwFs|tXO>"%od.wXi TV+Y= YI瓳w*.اR=5V u DHIMl&G޽s3~S XpZ,N3.+NCϢ6)TkUCK/y[~ɞhb*Y!֓:}\;OTЈUܟe?Hȷ3AS0 OHd8c^e/+zK]N*0}BDDfh ҷ7u0Ч!5i9gT}hUˋTeg)T?#x,h$xD4MHj]hBT M~ z7Jm':[96K ;o-Ӝa-)BfM'5W(;iWR4*Zs\YեUeGR9*g!y5DqNx}{MZS{IM7G$Ԟ8Vlߛ5V#JSPĿLp22X?mLx7fsM&%vJMߝVq3&"u+i<\$'^cg-@緸<x[:5 i>iЧa̔Ǵ) ei.:+U:cȦ֋DѪh>iL}8N}\ BVΑ$!s44^hwW>:xpY[gPp:*ױ||y[we4d4ٜ±sM9@Jz$cPee>nMSԂn\Lڊ/S57ky-s ADn 57}`.7-J^x)eArW,۫mVHUi,EKDTWf;ܘ@b< @ve`m';Xu:02޷{[PTe@$$4[jqGhy'g@QRx,> O&BgdӦ$U,)؆9 f(*f?־\ڔTMʡZ|0V0]:A5 ǻNjnaSΙi'h26Vo5I3dpH' 쎬*K^ZǫM!6e 2FɏU(Xch'-e`0SшżDesFt \52䫋*} >)o\Wm)0ŷyD41akUK'MVّs'!S\tE[F\&b2Lg iJ{p橐Y颖FSFDt 0N!>yPi) j0P (TELW%  OB{u<0oJ״Nf+#%a⒨Pm4¹M0aC۟А_wUUgaw, 4wE q g$BV;eӪҗi晢J*)t'876x`8uL1˄B$nOC^ Ѱ` ^5.)o/erlRۏtn3oBegTc̷{1ZdWg*WԈ FTo?!Ҭ]0px*,j2SCT+E0%9‡bwaSӼCrsm0sG<UҘB9ܴ6ho!&!UC/e[=*UamVEa`p۷zEIM֞+TtpX8yLaJQr]\OT0 peCDw-k{߂Ԇ* fn0حŶePi{h9L&؀ByVSlpJq98[19*!Uwӵf,R mv3 AY -%i)UTCa4dcc{ydZ8\UnU>O9?v7k!kw]!aiT{ƖP[K|]TYXxzsLT2=.e=Z\;v9 Oc]rW^ ΩR;PLIsX^*-k2Ui1%R@˪uWI]PڦRH'1>OӚCȏ /rQq,cSjwIғbpQ$[O9se; ӣ[ao^hP%Fj'?%/|*FnwWt=>LZ(妨TyVLNl>.ᕏ;CMZTAkcf]QQn傘3 ohdKO|rXJ]Iܴ 8Z+\Vl/a, ³bIWɐ\3GhEmrU|DuԢiRBmUtmrjԫW1H](˻q.s_{ɓ0u4Tj?OfA:a&_&\<=Pi0{5*Lx^4oq: xUuwM@I\Fқ1iz%Ps olUsbӏSM9AT/ʂq%RDStt鳆 ]} }ZdIaM"JaW`gtF3$Ð9x+̆Ɠ@ˉJp,6Qu>]Sh#Lp  UTS#7yP&zǗX9.VsG4LTmHnAE0HP̭knp6p*w901qE5Bvlvj3Q2\z8L!'9+F߳ly'CQwݪ'޺X;iOS\l v-Yn!uXhiϚb|d%bu'2x&ccyJ-aOjwU ;)9BJ*fLseP4fn/U-dG ƈlysR_=*¹5o$8jT#^J{x5CڲJ *MDD:SD+Sp W{U3s'䯜<x!59[7ИCEVRᓪ[ӢX3> 9o)/]/" M`qچqopS\hQwo,Ȫnm~JSdnNtHY57_|Sʬ{rΪH1$+ʛYCFaSi/rMw77NeuFF\uR 1QO-9!9ʧLn'5S: uTE&G&T%ZR9yu'HPiקCZC ȂE;6-_s-ks `Q)6!KZ\yM8-b 4fߺw,Zv؍&Gka WFBteb[Ҍ@sXb7`~(" qqOڌ{@sWw=[k XSsia^O-7:}REĽ%֋bMXGT N\wqf_lh ~zdW 35cNH^- m~^J%Li U*=h*99 dNי m'4 =^ . gU,})H-2=\qvQBiܲ-TNSk槌5jA`v] ƔSl\nƗD Dp˞cU:&Gsfc0ċ[2+[ leUstO0+Mw,M9җOY~Ik,|k UAg*ė.W,M  ]jaҜrȭNU= W$2FP8H,8L;J" M~92~RhoO"2P a0Y!b ơӉt*FNe[48Sʁ#00!„uN!B%JjNS` fm<[L X]u6=murq ) HCŒuV?wݴz*2tM*Tis=ѥ1HSܖDo(yOsH*o1O(CLӜ-v{ˍ̢skU:z+`G$O g/?Z5Maf^0o v̑™d1Ls I|,[%ZrWDJ*خ.>ISME6sT%V͍ UIU5c龠]nssa eisne9w'D 璥y!N;NkF\]uE"lY%1!;@Fn赘9jNV$"5:c)d+FY&gT~#%Vg+[ {<ˉ4JB6ۡe0 #67'i"sa$oz-vy8ndYRyT4 ?ֹ/oSV>U8e &2s޷-p,NAnV ՍCy2skþisx ϼSZ2o S\`<t9"I俁Nvd֟MJFن>*R Sj Zŧz@]Y^wPYZO9ALr~MYsT(Ѷe5. X~*8+-CSih]#H,*=֪n-R4PsGBTE=i'(Md2Sv:mҟ{@DCT`ys*d3*38JwB9'l/v* WpƥS~jwCvVzQEPlrofyFI5<&Qu٫S\Ot#j"'gJZfUzuTkK}+_^ jnq7wS:bGIW&O%yuBC( ؎!U(L vRӞQSgRK%We4ܮlQ'V3r` M,SN5`^ MpR'`*TJ\RXzTMVΪ-<{ȈJim뾉棄{f曊#\kǂJ%BoEwR匩;Uk|r@iV ''Z-'#0eIg;U'dNÇ!hPUFj])Nb&TOlL> V]᧽,8mVĹT8+XִHh:'2m uAµRT*WRz&419tKP8dUVXF7yhGvy/]R(aB eU"ntLl:k}a4Ʃ97~ =IWtF\NM+To$é7@T$ocZ eW]Nn5淘iXBo&HE{JJEك\i,>6uH) ND&} r^S_&*Gk訷wE,gz 7xEu "M*Y OIr*`yU5r^TAQP*+Xp 몴oBuѣOMU570莫z,嘒\5 _CA8g$3PcJ!90V"s`}|2M[f p9YUpYF\Z/ԫ{9J;UYCZ9v7gOk9ͤ*oI̪o:j}1u^L]MډT=}ٜh~r͒ʬUJu@2{MIw sn*,IW0vxO+HtUM:cD2s䍆hr4ө5\"~ix鰦SW!9R)ٷg&)T{LL*$#;lz|Ka{KQ{Y=Rxie}Bc n2X иsrVku1~j)\w! 8rꯦ3sHTa>IvF״r5wODi <&4 S[̑MBtԩb+:QȕBduqU ^o//lt+zL;,ް=NY"%E)FHx&rN 2U M-m2fJLBf LtswŎ ijUo;MÒ0zQĨ;;D^rr_(duty-}Ӓjb~ٽZfa uE2=9F>J/en|?p$Z69;ܿ5%O}Jgx9qpRz]a>jCi>ͪKG;+°&ꆫZQ@dUVdi)Akp{ ENо.l`)W) %hMb~ xvU٧~k E$^NlIth1NkɸTs6RՍD4*nžpN&DHPEc*7xE1D(vFS*Ԩ[żAAJO)>2d?OOvz6~jj2Y rw\RG{!ba-=OagQy"XSs#+v?6rN ouT5c4V7*'s)ﵤԞM9s0uIR$~0LFY}U;iGXU:#2:"DTd*dR{8\Ce \Z b~yަ~mGxћ] ufb}nG%@ BNNl#]5S+D禊Ri><>f\^zrMhh:(VR$ǂ'6jaVUDGUwltU;E7x-6E4Vtk#6SHjR.DgR}:&Ϣ;Ng%15n7\(maiញԞM@t7{ \;C^HB2kS97 fBe+5G2WխRi.{Qh=G0 ,‘vAN$:W35W7U#z쪔Lw__:d*] O%~Sp5^[bhlQs2/)z;5iBq.Ъ}Xݐ7؆7VT, Io8}GnTZ> hXpXv统2TF4hiS{-tX|S4ƆC%jЂ湠>J@@X;6 _4>US6YFY咎0Sja$O##$ /4W4\Nj)r@N e8l+Mkipo~d'5{ajw^9m&M♘3bknYN/x,FWv޺WeaSRc0%7uXLs[L%f|4!n)wFeTQֶe'G u(ӧ<ƪu3LjKIbZp 0oi>ebnT(!4 U*m8 K2Dv%:Xz6.rprn'z.h-JɍXی9> LZ%awj# m26l'DFK٢Uz4m> Ana ھ|+轌&g.i'[ ^Is# LjeW3B&Ys'ՍO N i-2GEA tR⃏vSpd+<G=CSi6*r]6V|%Xs)-M7`l] a&e;CkOC#AYiXk 89љ j NB;=.yTR,7{\rv(U#019?-$NS0=ػ{f::AkI 0|D61.:}3rM|D˺ǒrBU|"}DڜUZ+u3+w=C -Dvnlޙ*e$4ݪ4(lg,NY >8y.-mrjpvbvJC$*gCaC(Or2`Ach&.U{xf6X;a,Bu?X7$O8Uq>ʙ u`Ԯs .7. $stnvpgM<􅀾7{+}]֗d2uh_Vv%E&Lu32lXaMsT7o{IwlߖʂXSgx0Ϻ83PܜUkR~G J\iʣ"|s>AT3=>JȊtۉ [FϚ̔GM}(rA \sC]-eaj8Sk^-QB%5 fsu%]"NjRITxl9,}FcWg׃roŰ_.iuNU{&-N?못OF3F&i4UټMdHtU sȬ%}rjmQ%B*(PBjjZVHżOD:W8s{Wd2EUnL)%6Ub,Y==9'ɐtld\!P֖˓qL!hAdN nmV2= ִ 3 Vnג Dq#T{aꂵ BÚ3eSWxM祖תv 3d-B. Xa;CmXSaUa*yM I=Zݮns|FjDfs@?UfYP^mSLU;mpӲ %5?Ui!a9Z׺ R֑~G)X"ThwsR=Ld7K@]a:g%b(U^915 A'xm$|kZ^i } sN{r懚U reZd4 tZl(hOU0O"4Ҫwµ̔@s|Tҏ{: koV!3r&ZnU}Wd}u.qz#Q !4!s@~~UЧv}Ou#;_"֛ޑ桽Uܙ|kN¯sT #Ԉ]J%=vTe S&9f,Pky1Z r6$?6)%Fi=Rw& L1؆C'4.h0>h_dSB&sxjNܼhahC[5T\Cs|M'-|wfL/7UPjI?W4*HwQĵǝ:UZoHt41 } wB%ak4`v T4f9ʕa9}wBZ2V:$5EbL>tO>˧jkʕAQw?%<_3"LB=#Ȧ,{f]$;kxО\:Cs#=`?]NkHeyhi҃2VB r\i<7FIĺteZhRXU.ͱ)aMa=&ӱ^շ=ӏZJqZWx&TU4DTЪjMKWiWsD(ŚIUAȝ=L..cs/Ɨ݀g'e&:>9oX4.n;pcSt-DHF[7 VW\Z4^X& m h@JWS(_4{6%bnCÚzrXVRa{X*"X=1 d^2(ves̯֗&}j=א⪁.>U80IgHT]}6A٠Z e;ӕZE:O8TϮ;FliCϼZgW mrźOS-ہn碝]TyܧLWqƆ3h>j/ 'bg,=[LǠޛBz)D<5G0}j̀B{H>\JjQUhTTi~ .mQ]u<7;Oo3)w\-FJ g`ZoD)x)9#s.i$w^a9X߆oHj6v\:Ueg7LFp/n\6g}jRCi#ԕ x,3s(ViNf*Ҡ*E혒R%FkLֹn nR):]ҪDCQM-yJ!qCp#CITm[!ScZchvjv75O;WeN|әMIn'{jpdHdQ.YAavlz Wn:'8#>ΛUJ֍tySCfnW6T#)we@(-i@V_ ?6P7 | ķyftx {FJv,sbp? #.5 R/5%4Gf8wBKxMzmNצT.oߪkq M8OZ_)~OK?/~[R⭯_U?]OS<U[E7˹t*r }\= xk+Ѷd VNhZNIxfۂk- sc< jՇKG4h:Tzʺ]tD>aO5lMk/!T3ƎMD0uw5ID*uYXCr(3iSwy9pQ_JNFEnb&2u]>jKFlgihEcYלx.h=Pc]*uNWJH+{L9/9*X~j`溵7̥N:vs)4O3_ُ5]ի'+O%rQLsWeL9'"B| 4 jA @6y*[ʏ n+qWe)c\k9gaSAѸj` <̗@3UO<; N qDCG4uz5/ShQPTSOQL`J>HY:\VEd tVΪ DL(CvMkG=Sapzc C mV6&zKsMt8N})i§!P:sDv^V'kwZgMT}'3HJ7QnP" zJTY2O%Ul @ ,c:mZT fB##`ZuPŴQt0BR:Xw @,fQć8>< f"Y49&fgeU~5^]:e`7':u,S\Y[1ⷕ(5j? |G#.|gzefx8ukB?i|X:#A([:FY;1 j-ϒ,{-O'-P3£e'Q06-ZG%IkTꝘ[[S[w3fٵ)B jhh@#cJM*T䝢MJi~i |3& תcZ4().ˬ*iS>P4ʡ2<¤׹+| .m@AM2ܑ;2Pa -Lw.+0!krK[iڴd}L vТgEKMU vasyƂ:ibiu\C1qUjƊW8{IO ݖQµ=:/@:Eu'f#U DʬᄤrzØ_uW[!zUPQ2m%vχ[cZτB2[ݟig4l[MZ [Fgލ ˸Jϓ^#{?U$1RŗU+L E%4{QŞuV=h{E5 EBSD>aǪ:.ĶTve4vB湁j4RUèR:UxWh>^4k @<9JFD#/0 rThv@)Z<iDɘPB2nav=3z_U|0U.l6Mit}5yoT;2?D;63{;ٍX:Peʥ0Z֋O*0>;]Й__CtE>s`\@N*q2F6hJK ^\ײ59(kNcz*"sr~ Ɩ "Tq[>}"|!n? ^Z]2|jW^+FJ(^ժߺj|@~[Y nqG^_ .+?g:Q؃zwRvD3qP~mLj+UDi4ieg:ފ"ȡ =QԔ@lm0S"v#Ѩ]Tc G*g'?S5s,4 C pOuMaΌ;\c]6MNwBJզXNuЅu,{90@>6㩕O Q[aT ->K?(#jM+z}nޡNm-<|dJ)^2\uL'*:Ҏ)ky(wTtxX_ItOJ8*cʂu+N-{rPA6i $CBn`p2U,F\\^2sAŎu>aqշ8wxTj ԘVsYEvM[t(EQ71Qy-E^S02Oe}ۺ5k=l%3ۢk5脑Fa= qtQ&;HC~%wGl>Hf5*3n~'r#[S#p02ۊl{@'(!f:#gʔwBO0SXV[fRZ%> L;NSfZW~ZJq4pqO5Zl+ Zk:m#qʻJ9BsI1FX snXogU!JvA(ӞIB+w6=T:XG=y\; R(s1f<=2@Ts](/P 6l;P5rR,LYV״ N4[4tN:X29UUN.}E,7>V1f%We,óy^:'CD a9>IτriK HFYl-uԴǩ 6J' Mͣc!=[̑Aˎy,vy#vR$Ss^L(ex{>6TSo)nYڭvu <[ .K~uG[y4%Ti܋2VG S堟 MG{sx;Y+kD OԢ2)ۄxڏQ.UZg,1('8eVX`KNzme[gS3MWyPUKtWgϥJ~ 17T^`d 'xRbI(=:nrpmo/Wdjk 7ef՝S]|DmV4R O4V)T/K9B5hѩikgO5%Nxy]Xcc*K4E܁i"-/$7lȢ@Q(#]|zq,daQ]Zg&ʻƏNXmPzT Q\HBm>(*7_, niGTiyx#De@MdO܁sO"@UO n#YAVoS^oǺy=dmi=q;SLWhewO|dn7mi*$ !5vJ^OiVh> lfuLIkD\xZ#6Hٸiin B^:L8OĆtFѭMq23T+==Jcԩ[ﻗU|p^J޿L/ɡ2{xA{gf@EG0\>9a˪K:Y#FӔs+-kE>\â8rz#D̦Sr\6́Xwq H-czϨTi>Jn\*j%sTܱ}E>J!Jķgc4Rö=IOe\JOY *?YXe?Sm ŸQ#O8o uHBwOG;=p SE6ZV'Z7ڿ̫r[*frD5+:ֹ*6l:x'9O;yu ?VUJUjS1nV5۷wg?lj0NDѬ#pU=Gj٨FBZrMAuC4Ji$D\Ni}z-T65ZV2*2+a麩68QiVgQ>"sRk"AL&*Ew֤s@:V xF$3 lA. hԮѪk /SMJG)O3(z)_$S7JJvO%g\@lڻLN}oq޳z}~~TfSNKS8"&ssP`cIB\G23Nhx!E[ta ,~6ia֕ڮ`jğl=iPlt~OɅ)J gfkS䫙x~}'dZ ݵnPbwڬKNGW0Sƒp,5Kvb^@BgogvӓSmw5jZUxty*bicXV_SCZ^~kxOwz%ժa&qmG谴i vchS mJv> -Leτlے_iĠe:簎FY N~W1q2VWa^#I޷?'o=m]vdB#ll$aooX'=<^ݟ߳ǧ/Oُ,jL=[ڟ)TK/\Q=/M]9 'UN&閫g JۿمʋUTuW0拭nj~A>V>ϟT)%4jUnr@,q2LftB 2d45'SkA5:ըiG)P>^)nwU  >4r $ ٔYk {Y8 sd7.J؟5E ]z#P8z!fT _4l)ԣj+jVJNBJrMRRj:tg/#%%wTP*V$P੘jWsF[v*3Uqg5T2ghpp*t5 WFU].m60]9O%ӻ8&sXvW8eĪ6ʎoC4V AD%T' ȢP7.kPw6Wl ܲV({a䩙` gَ~y>K5_F}@'ŧ}Kyo-?]OG'/Ysf>c|eLϑ> !7~  q脲\isSu> 0_B}E.[9gD.)Á̎$KLiR۞qJd^hV'*o$2%`"S Vj:ݍQCdeqdV;5jX[oSs΍`_Gn7hG캎s 7FĈapwL6AiT3!xI˒kČh OǾ|SqfPs DӁb!kD<q4؉k>W"F7_tQ0Q i꣢ᖪG"@o!o|ܚ#5],"Lpea>zɥj|ef4֎gԍ(F']MOoK]d inmȐ &юMyq@Ore_P, wzY&NtOUjS(CC"ouF\ Ag?(>4V z"SG4LS fs觢>/V%ًXnN+ RkT!W͖Q1]>O F(XoKmi~JFl:l"u m-k:h4Ph`6yf 2uD-LDSIaez.ਚtYhAKg%9ׯD5ѦFڬwB pGX_e//o;4^}܂VKEMRM,~v5=JƉ)}V^t2sӮjeTL.`,5Bg4doa*l}Gg2-:Ӓ&T8ŭ*t)Nt\ch戹nNJ '0z-lوL}.tG⩹|&dBu OA [q=%bg5 2!S{s69Ǫi%FQM}` *a c<pz S l:eRC$jUkEk8^܎[FpCVWihϚi FO{5s_ZZr7K\~m01K/`6EW@ EHwq;zpS2PKt(憋aX'~QQ%S9&Fg%sA4ӈUrnPV'V˧E!s]vL6BqP T6YQmkd=3i{X@Я{=eTeBr0+~Ti> d>m9I^!-?4j1úQ"mKX[mvk6 Dw3g }"~p&h6WqfU!i1: ǩnp[t`ٟrhsn-AZ*:´R.k]uIXnZUk3P{k6C:,V-ӺQH:tҦA7waaXvqqT60 Tk~4#":S,jù~F]7KXnqs`&"KXJ)ucg/P(Cdz`z`/͞MT1~s]/@r *-xcF'w% 5kC1;E@_Z@p!YW.yT:>a,U">%aulp8jqyu$Th~9*ȯLwEڎ=#[B~c jsV25C5$I/FK9xXa_ C搏Y2YHk k񚅏yL!QbX ;)TɹZNPĹjZr̦3ؓwąs:N9@Bn9Ŭs.M=o ]e\h4+=U3P(N e"MFl:,ڀO9 =76QPB!Fzt^=G jiw=!s|=NK IvxRcVKꏪ*Ylkn#6Pe&9uVs{܏Dw ̂{.XOrtw%OxSۙ'w^{NcT67˞9,!zӛKb|SiXB32Ng5V/cɸ]5iZvv/l'Nw M㫑mџuW4Ѹ'H@TWkv7R<KLKxHXw5ָ"i .]ƦsO5Ru_5GT0{1憐-vl(*Ttb)0xpiNPwPThiC|s)=f765x'8O-\ A9ce4xf)aȻX*)9SCEsRI$a'`^ݽj*1GcrUmqZrbiT47gjxl#UVT0C8Ӣ5 Ou{9rٮ4r*6I樄Ջz#IYQR ҡz=C9h门=q9 KaVeMt$ꛃ5#!apo5*ln5nchx˸}+K .szeU?86!cs^C K|psnnm*2eȾ26xFkgT hAiU1vIyק*x%# c(SvB1)j+EFWyW{g/dvBW*Y^iվ[)eT*;aoGs.qxqm-nz.4o:?xZsEUs5nOS^hQ tO*i0N(cIy'c@ آS<W#SPMny#5}ymw~Y*Ns.q19Q b|"dJZ=Hl5(}AN=HGc̹(u9M%*LiRDs cJ@{]@Wg*T)CM3G9&ϦMᎰ993:Pv"Bu0Ak9d`Y iR1ڂ}Ȋ̔D;1⭈s/oUw@ڔ\eBF8UB'ZySk|O Kď }IO]cdm:-T"9&^?Tlq0JnAv)g+m3ncU7|>ypmpSS+JohmkG Y5=Z14x("bUJUh+]T6x-dHkd4%Z.r)Xu2S h)7UzSsog7vzmHTm,> `4zXc5; lxNȠ!"%ǒrUS Xr%,%?[ 2~}-Cռ붅Vs`94N~g۱,6Pj4l.)9aRR(Z@Ca|@U<{"v 182*x8;w~yKOXSd\GQ)6VjԼc\s1RF}sAUw2+X37ѫU5hOd| uR`-3/F7 | Zb*ꅃ,iQBpU W yUl ;lzNUoe%¦q0n2h'\A iq^=BaG v=9k@U:' (b\cR'l+VKU!BQɡVw ~+TӤ7sUDt' Qq4.\1cZp194v"'N֟%OsV6:䱔ǫNg0<,}cy^is`8qb0Ŕ!#%P\ ṖRQf[7㘔ݐdl!T 8u`PB}z/7ʄju9l5ͧV p!qƣ" A&faL$&ytB'eM!"}HQjJ%\٪D"!{dj)5ֺ+vPg-[SuA n6g$pޅvk!ȃ$ϬK6{ksY(QȊm^s;ޘXjK\Rܲ@`1M4)]HAI$=*WYRC+c~}Uz>u_lмz4=c'g_~T._ @!ڷa@"U<^z_~~/@*0G~iF\n_?K_Ex$ ZUY>緈w~X\~z+^6#7~z5z]M0dܭhOAՍ_櫽K/1A .JT^z'Hѷ~VЊGp\Ki>?Uz\"EJIRz1as~'Mz>3юo ryBw6?1 >"[NE_/KYCRJ~?/1;r߸&ehk1;r)*ܗа oWԌ}.\r=JE~RT}ULFW[lsbp&low._EJr+֥~ z?c0{.RV&*[^(Korn>w kftbʑ??g2J5^*TQ%z+ֽ.z GzxQzo_ 4a*fg8éf2#wT|Ns>m!GЊٷϪ*GV R>Wj쎫Uo7/>WtQ]4??rEܹr2C>RpޜD:Bݦfrs2J5ϭJ^%7j.nja$8QF; +fh #>cLEޅ6鸍a ?螧JeIHM+ٔj`b*tB`gHpZ <²MvE87ԇii7gңY8cb2d+Xß iGv} 53m@Cu~/YhXq;???bjU?NvVyG3N& mVsTJ2u>gѝNNs؈<,U1(*yNDU8NI\.j3 OF&my+oqڑݛ@|5;F6mmχգf=JYcxiP.+,E+vlWE:qU3<>*e.Gac/߻ .^ڥC͌?'藔T"yϜN2m֝Oah6W^"9!Ҫ{2y%L"c/@ s JqnqҪ8.Pi)J.eB%qiҖ2=lXoy!Jvmy4\?O?Lyf_&+i9gn!T ,]$ZXtw 4vN_RU<`q63TT*@ͭ2>=?賘YrKhGC yC;D"ݮ3\4Yt!kEt4D*Ǣmlf!H2ҾOmW3Lh7+;z=L:̱حFf}fplhHW(Rp=L`Oa2vوe(  >|eN9)%Snoq}״"=&]0*ovK;Lg̳rwmԽ[]]"hT[Sa|%{bDlıF!)vy/>6t32j#+LmZ=c&F.[9vR&p`U [x8579;s1Q)q803cb.7n|SfmyBHIv?0PusNjq8bQC/2Q<\7=sn[+5ۙrQ:tvE2}c=೩Z_/IkYQ0ޥ⧺tY,c5<J4jzjp0į< 6oLx,E\;\y0#U3Xf2:/?ybs"@W5 -BPȘ$;P)pep+-@E ۱h ]616_,*s0}MojDbKTP/RlN!8rNEXS }}u,u7^w/>#a-x0z DG&_hX`AaP+؋|G!gh;AWAn&sKPҍq*%q:ypzvs@Ydv b\S?8Gt,ra g#TBcؼkOc˯HrIGf#LLJd,N<gTBsWCA0ےqX_?y1|\3PZg?f9\yGtCL6q:',& -ܼ{pmy{\ARk<^Sľ(HK-qRg107R> IЋ^[+\שjHkIot@-⧴7V,*9 R\UyTVuaBbƿ1 dQ`v= @WX3RSٙAkXZ~IZ*4a.iC6T,wlJnGDKu.j+FRlg3r;.mSyx{WgQ*Yt{1op0/b3M>YMj:-ffA3 p#_qa!-kCSLxyByn#Ek~. ⏴ ֈ RnOyxM w͌0ΰ[ܭB%ׂ__B&x..lDJDZh[l +5F:x;K+ʲ\yW_@?ISo[i<ՀܤWvFe? جck-وj([ݿf06]I/]dUT&8/4/_3+2GRj*AM O9bur*),% o}L20~5L}(~xِ!8l܋ßxfʍbt5ůKK=ԼjnmdDϢT3ݧDmLΑlMu2W*0Dqc%a" iEi¸Ut0A/vcEyx@} *ΪQ^ﳬWsbdNC=EFf5xmoȔCWib(4ЧZ[փ0)FA+t>ʽyN1lƯ>0x8gAl+lA2FI=C(3G1S48?쳵 1!g-j7wnT,rlN u㙀#_ beĪ`e-?t;xoq^[7y*srnR13kOeG ەKsDG0TgIm&"*.|x]y{҅즾"&X :F Z;/ZVrusx/%zwV[{5^E0PTo]{]|LLM  חS  6(~g1*ҹpmE _SpZ{և-5 ¿ܯ; d9Έk$i TR&~ȣCL;1u ݹv`! \c~%{u}1^2͐5VƢKuMJ)PցcE bX_%3^<ŠeQniGyJW_ΊbcgCg'Ɇ8\UJpz,C/ ;ڊe*p}eԷ s̭l0*Rw (J2V7dSY,\^D,YcS^^cP@n@ l?(ljivþ[RTcm,x C qz^ h5)okѴL@lk^pi03sfR!W{ruE0޽P7WF*pFS' qa#kɰ }u'T 2rxѾV /5i7Ra"ԦkSn DS @ߺjNf >=̅vfeԍƱ(]g/i\Ӌz@}ӦXiP&N 3Gr7v-h;AA08Het;@TldM7Ѯ8Vhׇ"t-_.#e PglqAvR~IV|_JU)wmF"rU*B(ڷ v `j)?Kf:+R˗P*>ڞX & iӨyzAn?L*vʺq:g!ZbF+Jx9eLьF``R\',xҜ% k^ 4,j8L3r8(b(d̥]UgT/E.AX7X< L¹8z] >&Өyc/u?h5SD#x.+y`tvB4 %{,”fǥC} ܣG ԏo X$wgYeCPa)D!pP=H !P_(w:x״Vf%F_/(J> 0 X0Aw {17drn򍣱8N58or=C\eTs\F*.iZ/""NCƠ6b=Y fFp'_1Fa,~^ѹvL%NZ;Ҹj6^Y]NKQ9jZy .[;i euʸf0S߿IN{KCg\(-~ fA`9ka.`:]bRl~nMw^ n)*,/@rA^rGJ"SwXT&Qi?X9d\zeDzE@濾 ™)uɴ=_i\;]>k#~7,b75tStpyMn%OG3⢪y~hLcah3veÈnV꾦0/y}fwf h{`r{ΜRq&HMɸ?|i4(, saky4 =LX`10̂^|GBM;(3O,Mnd,C|)4VD3l@v!`(')il"++(cXcJۓ,z@ Mw!RَCh9J- ϓlP|[.lxD(XcP!Z A* -;G1*̳Es+̶yS=:"ʻLjoe(#b[ ϼn:Nx(cWeK^)=9v 阱YU{͙;R=it%İw1&˃L+e nkcɺ5W_{]X73E)cNO[?׬~y3]pP9v')@P܍+y:L}v_ R9iCغ1l&MP9 3.ؖO0ipo;u12ͣ-l4W4Dte_aX#>ޱQ!YW{JþiN7eȩ2 \P]XI\ y[Z#s{KmM)%<ܬumf:Fߙ7uh&(RPlr8͜)rۆe&<`Ru6cY@]piX`!RH֎ =P;n=\3" AH\5'M GP*pF"_Dv8ʑ 59w6Cv uc`N,eBݢlS>`-zSG0+US_`INk(O#[X5n58|T[2蘜)> Rl*FI>:]zinwOMu_-R՘8 LZ4S(̞|J^eC8ԶMj80 kb:#䍥t?x Mijz"y4)RKHŦ\T2X4#ڱ݄۳n,'vY"mx5 ;+(}k ˿lJpo#/(lUQp8S5NC/-76j%+Lps0iS i:<@h}UӞbĠ~߃aQ7#*v}}7GGGQ$X֥reۥuqC1ʧk/X7pJuVo3Ji%FפZ:VR 8Vdeu-o=k@-.E~D~9j 2ccT2+fR-*myqnLeTEn9˔,5b] N(Q 2ݞXmxNqf/-WT3,LQa|.:-Ws&1BJKUUQu/ Xqc̰ K(uf UkHL~ "YYƷaSa3jÒn3908#_X4@5α}pt; q *m\AZ8r2ƫEهR> pza=75{Ģ2W*:@Z KoX%k~􉉧P@5RI 6UET_vN{7dfk_!N9%PY7ۤu!PSTBUroA%-H"2XVGIsIQP|п rB5.p}`!riC&n tKzL˘DF55+;O러DYElA -grl= 91Q+.%JSS2ӯՌ/^1!􂥀ٞ+hc^Ng>pdu9:M37+5g,EEkAy*lFQnZ~C}!WpwU7*k f6fQQjȝ扺:ڟȧ l kmAp@fC#ˡLqs/$;uu; ^S7+M:Cдۊ ;&ic.CgMU}'\!{%z5X:55\CQTW8fk>0  w,yB9<v1{ܪb6ǴW\thP c|z |6|qqgM9V:B ?FT9ה(7G N8 iw rx! jϡ(ݙxX2ʶcK5}i=u5Cs+Eqhj׈EU_)!_mK xb珙@r̍l2{9C,T(r\rCb\S'J[';K#؊!*UŠ jcuD5)ia*c̷muoAd`@k Kb1קoN`DR¸ , zb%骻AϤtλ4Q,|acEyuYֹ-|A9/iV^jTF/LOvpOc9C=?빉Pfrzw Ɋ<Z.˗>ފfM;Fh3V% P',-+a] KgDZZVq9D+f=f RK|7 1eQGwt9T'i˓ԏ ^O9Qt0 Jĕkkc:>[~q Dh<=&`{dJΠ BxWPt%T~{i(vnPF 5KC"H2\Wi'ٹ|8P 3 ĸ1$t} P3g.%{n{ -*k$OA<@k^{VF rŴo=wίhT 2v)itsrK)0RQ&̩[tg\k YmZ "gdIPљiӣ=}fgl8l}c.ǘ4*`fj\/ъAg̤pO35B_2G7QsʨhRၥI{푱at\{h![LJhcu>D׵L@3([|Fq<ĺq4#L^jA8}9#ѷA% 1K_V`菊j`JsZ, n5|DX t.}%ٜK^ p7+2TPjffn&b..`HԏJ6kI*hVSe+j>ePɖW (prCo8W"8"eXΐYMaˮE5\0QX#q1A/!~ϛ"BfAyc]!N ^ٍve(YA3CvьMҔ\4 i8HNPeLk^1,a. =!'V2r^XK֫`!*AǼ!u# -:@׹ Z_׏JE%1S-naNefdK;ezd 4')6;Wr˅)Sw٨ w {JuxB/fL=Jd2ڰဿq*1ײj0lX:jMޥ59=a_~%x/`=vf]VWY`VHhkTy?ݽo +,D6Kޘ:Bڕ ‚S$93k7WU|fiD5|2ߔGRӻvw !2'<WEo{lK!hvz[e1}fo~¥3 _1S_蓏*mR:Vp8qvo@ 8CVK@;$ eBs̛\AC #K䎉fU>&p*X/tpD\"X Jd,2e h-W0ֹW0-!;%.D!uԱo Geѭӓ MRPe/*%̴u89Umt'U*avC]ʼn6}JB GKU+xtu_tE,Wԕ_N1Tq1T}?NOw0  WlPKtK!*]He|ͽGl)cMÓ")KŐzEas>*O:h4Bg+/ DhlٰykY̺f.HJAH9rDWq2tb6Se۪K*,gC@%U0tWȻAD|Gg˒0qbY VZ0:V]Z")}Y4ltNyqQM13D 9ZΦbG&nҠÉg\$p3&%UI}J8ޓ( N}ҙfIc26w@z+S2sc,?Xg^c$FIqUl {_&Tͷ̺z۪_އ+D1b^gCpA\m>]+1`R_T ;sa IZ|[9s1"n 5CJ(auqݭP:O4.s+=rgЎ2v< HPn/O8sbA|0<%8^FtA9԰Zw4*s,r8@ hpgBU+o7NEq @w ѾoNd\W2oa0sI"'Ml)S30f5o,nQLBk84:i)LxodPkg\ L/wK./t k}BV%7kC7eÇ$h! xGZ6 &z?+LcgrԩUӴLgC1sӦmdh:N'W~-LLsT|z%-X9h[|%%Ur)Q:l+͗|CQC qRx; tJ 4_Y͘|fep;@ KcL '|z852w& 0&QڽY(EI#7ˈ[K Կ|c?R4ωe3)G Y2q) ?XVx|L`QMavMҀ YQX%mpg3M`x J+oˊ-0_k?_n:1-# n*vjs/jxO[U :_R{C|S5IpV E[ tDxALZ22FAܹ§KPv,B FNVp?E}f$;L; K_\w۲sS>n:^W3DsMʲ/OB$Zt=|L"~Yrkl@BO p1R¾H0M ڨA+mħ荆qJPz8PJ@59" C QIT6yn.v#\φmmQj ^s/Ky#*"!6C |J&֘2%ӈeK%0y[x5ᙅK"!^b2Z2i˙˟ e)Eݯeqȥ5j,3]lVN2ƫ5bo11u)~gz~"r_I{( =sɃT{˼u~)9g%.XE)Lf |XI~R3/WI!=#)):J^.Zqܑ[@aGfiޏUYvNndE䧳LTTJ^qPY%'A8b㼩WM?1%V^.Q%{mpSC;#0$ƈWmTˑ5.ԡ7QU~R,\6R!:]A V @x=}fơLy#=pSW A&h>LQ,VY"u9[v)̣j2xf'a'Zy23#v} ݡs"l=m9(&%q*VT N%x[~&%~Sx%x X[^#ӹz̫S4dv:CGPy마NYНۀ.VVD`r }%z~ ahr1b ~GRSvJݵs2>t2q՗z9ˎ𣈬ll_(JzrӨ>!R2z03gY>Ъ]61.5Xeݩ(/ӈZΦK7q,Ctu3 hQn}2)eJTfp)Й+x#3_fMƷeU{%T;·B!$3bkhr{w+'94d]NAx=j S+* m9-`u8Ҿ%Er|D5 O̓){]0T8@<[F?5@r⯷]"-X!O \`b5Y6lZc`&rbanK?@FrE a[D6_M4 JLq3+yQy=">龡+'%G70j*eHs=X2Y]~ muYH}‹28^Sb8QT՟hL#x9Zxk~!¨|\6$p }%7tK' ̎YU3rzO6Jۙ3P ү@f YY޸] a2uC,hs ;,wcmcP}cNC A0[qK?(bYiy 8G8{xѴ+ߙ*@k6^N\cqEB0 ![4švKWvPR\b-WB}Eܶu<ǰO*O7ַ+fvؖ0 FkSb^ }n͋ףFN5dPNY(/-VT#oըfImn6Ʀd@B_ISў+:Ni]Z2^.`Kex?)J2uM%b yFXf%D g)k1!jwGO*usn7S2wI@ʢ1fs 2RJ6R 7)?Mbfzn'L"&E 1'z!R^FK!}Iӊ ]bZ@Jt$6^.v3+ PIJ)2FsYi+OUVMyDK_dǰˡq9Кa va-de`ģ|Z:=yo`Xw1緘δJqYr^4|t乱G,X)X,S \PGb_I`cv&H9%V `&6ʼ so꒩ 1CAo,))>,Ez-OA g0] aK֞GШ1yd[T6&؏q ,t`G_&s19Pg!'7 9 fwg3I.eDc>F)ΉLWY Y4xL &,m2weN!ĽgTh仪LqZMd&Xad\1243+q 0H)}QJE* Fk"G>m>ӓa!"{ѝ}i  pLXQ\< /o߿݈L 1 !y 6`dӻ2nX)^,ZU2F'2q}rTAaVUNжYje\=]fFYږ\/3$}.Yr.kCNh ;Z~k%-.;!Ny"}W&#y.s(=/wؘ>VO#jiЇ 6kTE ETu4,}AGXo/uܕ9+r8+ a!eM1$p0>"Pe F\g_5QQN;C [m3 ee_pg‡SZ|[?dfVl8-mJ{2G\־g'mSM;1M%ҹz' Omkn`/ӆ?D:ԡCyͺd -f/Qx_aZuJi.WlDR=/*EcnTL}!=WXoC|-v3u9k5"y&|X,\;8`<,GCkDܨ)v@XfEL-"\*s([߫}gC2E%:*3iPX9ݶf27ԗ6@4*c!ŘOɣa _s+8秆i<6|\(y_)a{,'78;[ O{\4.(BQ<!/oio.ml)2b!q d˿MbfT0j[he]hyD`/3w~I\^(&,ےÇ'C QLЩӿĻe<& `1/ PwQp=YY|ŝa1nZa~sh혠IkԻW YYu\J.uqa).A+sS)Z"7u.!ʤ y{Lyt˭}Z>k)2:21yu7K;83Ծrena4zz1s/G$̻Q#AX%te}"Ef51s3[T/j n6n*g5*+iNP.Q" ʳGf;Fgf6Z7*ӯM!y6d37K0JƠVvgkk kgK5\R]w2_s,}Ha5V(ԀYyS%_ MIB=XP,p'#l%QuSN}FTZ`A\p}s*TɆdٿYf<ޮekΆ$AϼQa)_R`~ܰ5gl0 0=_V(^@|Po3,s}HfWf}|Yf!~ l#"eHg蜲AkѦ98B2D+R et3p2IbSal˼04#7qljۼ@}%,m^rÔ5 ^&pkњFJ0@ -_/_#Gt=ߥ&*z&~Wa\תvj[3|g'̹,a73ƜC:u3b[q&P;3n٤~f4l#h0;eN$.\׭Ds_nI[L($S#jG1:e[[a :Mߍ9sKG1fJ"T/H?TJeB:lqIbgpWl>pd9VѿD 0FZ\8L_iOyuTՇٍ̽`c6#ӬxhT~s-Yؕq3n2J`M3*?b }#GeVyFof<.0˩YcÈ0[N"Id9뼭urK.˲[)A=Rs9Mq2#|ͿO7~ʂh1_mk#~o05 D6Q+_8h0TA8~!In߹+sWJt:mg}љ=xVfe{9N_Z0a!b2uO/CzMl+c*Xbά>@ĥ ÝJ+ҏ~p[s 5pY͉OɹQƊ 1fj|Ҍ bz<.;:Cp8<ǡQCmjqL ܱKG J/B+W2x3e uw5'ZY@;ObGAylz˸oG,_+MarV|E f\}e}B,tg>'򏥱{YC@;OCs&q(Yٹlʬ@]IONv2^j , ^tF%/JO-6F]JD!n5۔5̱ooS,_ghe;ןJN zX%t/֏T$+g/zCP5V xP/5wpVj㯩o512]-#\6u0BqWXegEom|EuS"J-Z&k/gLp2ZMYNs,F: r/w}6l[xunU6D62#]R-n+"bS۷SϠg៊4CJl_ Ŷ*=SV#|33"9pva7U&,-JjncG\5GflXruE 0[ \<^~YSe-qybX5/\?tI*o\X*efؿB[]#dOywNgR#Srňs%0?(, M3W_i|c]H;} PsSj$|ɣm+ y>ψSs(:z;j=G5yFTZ^ 0WxYL@PTIR3#oWaGy'b.\\cޅMS\0S1pŸ~?lLfX/?eMw ߂ozhu#g`z.,0ј NB 0f<0S~+@nj癖J'i+9en1:fjcё0Sƥ-L{Dys. vzJW̪Z2M2hG&68F,hseCGej]89V]X[2E~_> 2؜dr]B ۼx)܃Ŷ:ܲ ecĢi{\G<aIȕ/+q.q*N!O"V$1}Y7>VܚeGcuocBV0jwcmh,By16Uvv< 5BXLy)ĽVx' Fr0XwaN.20vgcQc4H>&ǙytKH/_2,]#-ݼ̉g)Ei71w4Gn)_ $J޻MGNf-SamڋE3NqU>鈀PƥF-i=EvVF9-U<7*~Ia-ku21O ڐs#Z5qc1B+9n1@=tӆqʩAyw,ZÍ`+os)"/%@ Jή%^L6/yA,iT&rSrwܥGgICבLOgfg&0E d4;Sg2@5fSAD:Wyn zX#y~U7f̸X1G\U{k7=$vCATDw7q1ü;1 T'RX0;S>^.' %pZ>aH:i*q?}=Q J.:J(OCܔf#I 0TKHY۩-e; ިL՗A7.We20tv:ٝ~g0*ߖZ1!LqiC.gb+70p`UjGh9G[ q:yr,d|Զ 㙞 ?=sq&Y=>O-n0JaADj~uMIk.vDsS&Еq閇0Ic^f)q^f9B\fu q 1+܉TvJ{&r`擴^U~s0Bf nTEEwԵ2;/~p:]~Rƻ"#:OKq^%s Tc{ʰ~띟SЇiv G9obvche\3;@-n=#_g̹Ri)}=ƍP_!uNn{[KW|JHXv1)fC]MGw ޠ]ǫ|1С\,xX]cu /9Q; v2qb^%Sat);3Me|Cr9*a`3^nwz.g̥qԮӡLG? LRcge8άܢVxR/y%<}Q==Z6c楛8L<@ k=c9 %)%Ǧ'3~ g>˧4coO9"s7ـvXwgt#ɡFJҳF0І2C9d¬wjAϏI2B.(+)Ybbnc+3G0X;ͣN"`]7ܞݝLЅ(>DžʶQ{NjS]S]B:4x%,U0:Ϣ>=KVF}陔X+ai3a7yvZ4 )ڃ[NDwO^~#ѣP2:Kc-k.Ȋ^k%2\˄szjLL1&qqʻ3dt;MADP+c{jh ^&Z^ +%{âh-bծe~#5[PFcB2-0%n2{LѼb,~aSqȫU6ī6ʋQϻO>'N% '1y}<¼L!bopsb\?hz4WzQb{ b'<]#kUQz9+-+Q! :1MOE\el_&wYMGImOV?812zƹ'ȷgg3LՓ` 5R"7틤.`NS%ʆ=9 wrzns9ۜ_[/iVcF-oXm0MR <>Dqǎ=Ftxϙ]5s^~gs4+7RmPV~jq (P+<1#0Q vD܎J`ZV{5I5h/9$sQ6(;kSdeivJQbssmi~c8Ks~==" L32cxr-LLgN`2Ѭ0)JDt}*d.Rs0q]%T-hJ tjLtOi nvo:6A/Z8Snڥ=xiޱ7,F 8gZICلmKY܍PܳWȈM!ꌚ/1q^;9h= SQ̒R,NW~T6޾ed1~]x: +]438=Ǡw cQTucqb2[zIk˰B.D37(wvy*3g/K9xeJ; zY{J[*.)^%~Ck8ZW%刱m3!0CX/LOĻ,>J}(J%Td~H}ѱCf/a'S vm GInw bs-ǟS!d۝RG>5Īnc!vaX xYUJu\o-;17K{x/ea}NJLf lN*4#| ]f_uwswĿ 3Vlpg΃!B4%,Of}7 Ny%ܓwR/ѯ^/5 jsң屪˞ۨ$+2f]RN/9~+PN*@sLĠ~Bʀʥ ݾƥYUoZ5,6TgUBW jU[۟H*Ú0 &.1p#ڠWAiB]~0}+db ]vEgh):͈I(`|?tcQXDLwgNɨzae>S718w h}Y3T W:?Ƭ{況}0lpao$t6C6}fW_9DIg^LgP S!h?skZ `{|5P{ m!g:"MLC= Y}q+SF22R(Ļōyo"&Ne|+-7a5 48ӿ_ގe GH˸+q`'Bgz6{~=XY 'tD=1OdN7AeTR'3^YdNDy&} z-S Д3{eG {"[.o;QxkT#fMf+g0|*KXās^Cܖ3~bm { ]=u8z)ܠh+1]]ݏGc(ؚ51@iLx0f\RseHɁ͞bX㈻"Z;$X(:89O;b/>}'髠> $-%TuY#MXbep pFpƝb")<^.eq ON\)}!3p {:VX Por=4Q؎=As X(^3<̪L,}ĵ% `勸<@z^2Ma(-lG׫X'BVu/XqT[IQ0&UNV#/f$kxzzkIe724yzo2Wa4@ vt c$hY9ε7%w% Aٞ`H8'()%u3.~4py;.Sxk՗fSobѤ̡ 萯 (gs˙YzC lp@daLYnk{f1vnK\YL:K) *K&,ρ~gmR/KdQ=WчCT\Ks238vp#Ib-c>P@a&h%Fos~"s"Am1L#,D𘾒`do&fqQA4I{ē$*@Uڍ8qK[-j z mtq+0flHg9pL )݄v`c>#<х}@p%ncџi"T1+u.+d^*P1n}y#SL9G_eu=݋1}aD>X6:[;YzOОIwl;AHxرQ-r ӇYi3Lt^20E3znsL0i[rvwNc}7\Tj|ٽ ǥ?2S!2ƙ]#fK^BO1,KJ}-W傰xJ1 秴/i 0Y-}3-(h-N_.W!ZU0UҎ(s,50u3(ryl k? ; {,AؤyW_>wij .k hNҜe8/ܞDvҷ/ C6 e1h/T2n!0_ޑj"*ܗ*-Tfx+`-7D.w*_Ϫߤ12ޥ9ͶOy 89yv &&q4b"wR%Lm_7U(2  2F̺AvT8ZT`)92ֶ̠w 7r].XPm79A3"~浘 }(<#['M X-̙U3Q^дP Sh9>m|])5JhTuIPY-& s49ΦLŲ yi/c%C}fZzz2_K=cu7Eyֽ1Ms;&,[UQl-o%T؆ ;J`'0pԾ:Jke{TJ;s`5(<] J ߈^wV%<{\ʧG \2|Jo%f(c~&r,W5Oiǘ`M Ûo%h !pA(`1 (CEch,_i5Lc8O*Q`M B 2BW(Uz$0&w˳` 8 k3EH\u1̫W FڎT蟑ƫ76Bf~4kq5ƿmX4jR`)rU&Kd5_hMlalLD&~pr$zj8g%z Me\eFFiӏFopz03]3ǥF %PJi/^s|"4Q.bb.1V1j1rCzЍ5g)}a'I1ݧ[L0 `T,};jf#; *uC*5`ORܑuҥ, 5X(s(1}Kg@QPSL/\Muxj%fbtnKჸktXQaW `)!_ 'e@%#6pfd,'w-"* uIpaMv*rf.9"eB5ǰu! _J+9^&FS̽4>/?J>Y|jjcY(pMosuj˴"<: }BzMO1ǯ2#؏} <z&Sy(VJ踄N%WWĪg!JMs9y#pplЕ¿4dǙm۴\Kc)xU@(F>C\xZjc2AcW-t3aќG.9EW 5 3bi2rܻTeeЗJXBU60"Kݱ`?/7>҈"1sZu{nb wipt{ʑ1Nc*Ѡ/rfE=b^950 ]Y* pq@}e${"QI4cw#~ص~7rfQeoDNefjԫ~!cN.fp_F%W9fs*gʢ@:Mn Ö9>!Zi_AwsQJ3̊Cz0Lquwc$ aԮ '%̹ ֮Q` XLjJ?;1)rzX_2^&&aRu#hwacΌD,%Ĭ-aB;-L Ś#E"d^gmeu"Ըe[M'0uVBb& (Oe|&ԮRW-~7%M,;8`:pJgH:8\ L5u Hu5ƒGJ+vk{RbQK{eCw@^(Ꙧ9D}e&ۇg9ɂ:!G0)f}.{C tq.4@0g zF0f;.C`Qn7:FRʲl ` ΄]Mb--2Hx"NyaUѬq3pwCi~!fsG63E{ť="[~AzNO5D 8*ݟ cKs=<Hi L_ڗ >`Z\ 90Q.C<AN8 4@rcw_lu,>{?M"򹒍x ͬJ2a3̵,Û,S"YmJQ+3SҽN`9ԋ1hz*i2fxf(&ebpT?V X>f/<]j1^#JFGBmn1`.U #k *?Pmx<gH7C ʷj26_#3D_KF8f#cҨ'hdI^TJb1 v&&Z͕ ip5;tPTXqslFi#9jg̨w&& d{N!sewk~_$ Ji#YrPUb;f"/Kc9i z5Z=<55ʢl @|,3*>铄,9L$! ϡkѿ]>5˛Hϣ~YjQ1T?uۊdڹ2^͗bc"S''dNMxA͹ _hP|qEcPlT jϰe!.-;yҭi ]r\Acۜ 5g&Suh>uc3}jvBb`.zi G702gP̪bY/=QLh0 d:KkY|3cI!\j+2,GXvc$!8^J:A^3:B5DrK<2=BPXJC8RрIoG'P eep]y _#9=C߬2F 6i J.g/Emr>:=(ff,tZ,C3ZoE)I@~4@fHĢOX8|DBɾrDe_X9 7! CC}>"TR@ Yߢ\KĪ7d73}bw>YFRS*(=sa}a8lje}XR`7M9/Ҩ_yd..k d֘ W^0,%J :_XY`C/A+Sp34#Bimeqś*醥0yk:53b* ǘ=Jv2GieR$\QS}c(ێ,`)ŸH<@nJV(.sA4u7٣B\oLs*THzWTR\3} Lښh|]hk,4*k>hNg EKzi~Ie@W@/Ó@`gcѴJL ~\lZmm[򩢧91;s;u(-re^]18"WA,oi%·lF+zv\T,J0I>JNJc9%WZ=22*ehZE=AUxQɿi}Y\E!$վT'DycmpVly3( FKt40bS<:* 535 ]~[:8=>2Lec^ԩY|76^)1u/ "WT*.UI% o3 rɛ9f~Rnl6̪-;N{6&-Q>%t59 =SD} =35aAy5*Bh+mX7q/.:S8 n[9oPw+טp)`]_3c7)'9әUܰWŌh!f&G"^L2ZhДMZD:y!:?4Z[{gK~9 v>O%7|K_XGYYLCO}X=e*!1AQaq 0@P?/TR ҿ}B.\ ./B.\r.\HAGqcYKH:8Z- ^ r˗/+.\peƢtr/~\aU@˗t(0Eȸ.C \(HL :?rѹr˗`˗\ yʉ 8?ĹqK?}<=1[3=P@:J333a!/_\r_K.__a6 uG=02/aHtFTRt*S:$r˗*ErTJ+ tW򨒥tN+RJRQb躃^eAX._*T}oYR W&[`UiQCfU|dNL#Ѓܹ}.\}_}/*J\qbqܸ *U[]ZS]@5T*TAper˃.?Q%tu ~@6&B1s_n\Yrˋ/(zBTI_en-q!c ҄_*T\/*TR}n\}n\Yrآ+miHrM%JTQ%u*.qt#lhtCۡab=0ƒK#$u\2չrοJ+/qa O)D8f՟~~%uRu.\} _CsGAp /u]rUꌾ K.\Zҥtj$a0^J`Dfaf#% ;ch[$]#|oM*!P%J/lJJ+e1_ٔʘrԯ}.\r\}*T+ + l|B涞 2#ԓ.5io_edͶYr˗JRq ˗._\QǢ e"G>BQ(*$p`˗.}C*;.\r\}jWa:nΠbi{x* +u/K -(,wF* ވLڮMsX[n\r.\rR'f/6XvkLJ< n㺪eOF A* M\a2X\uV+d4U!"`w2yFXZLPr .CGt%n;]*B `[ekIܴ(䟿撿rӹ0z;T0Q8HTAi,splXUo+L`Bj|ےpӎ^vAUTUr@ ݩxF- ҉6X`JVt*422tr˗_r J*_NB|gh6 fc ANs%$5& 2]FE\`awt$K.`=//]W{rXIPHͰ]/l h4גBlHƱ#߿ig~0)#Q^B}~/1~isX(ϘK? O)׼ǩœ| F":_*W0e9꧜ف!NsSUKB:0 !JoRv00B#< dSxKY/d`y Ц^‹c^/ e88)Ef!PӃ{0I9!npHW .,y贝0rǟ5r` P{ioPw8B4)ōj*k+LvS2riʆT =o3#Vf ;+ODA, B!n=Ņxq9MBϓ=cf%n7-o%[*ϙV Ru}@+E?\rѹUnTJDK1V9F$yQ! ՕbdaR8+V-)9KHHW>yuhw$%5˗._r.\W*\+}vEzd(l0(LZ>_T0A r|m,%Zd:Jk#s{|22%baizIf; R[*r9>0m5V򚔆C~f YuӮ 7 BhrԿ.\rɨof);`S# " X' 1.Xq ]S!qr#?SdHrX^ ̏:5QtuS&Gi/v/99IsXr?/B082Y_Әjg?Ws[O*j]460T/:=e4XX-yJIv쵨<̮r I<1K˿}wLx)P!osAոm;:QPJ)^׵6OD*& $NJ_E4^ ljRҹr$RPG"DzcUn W]JRU[J*7 q!k~JU7.ԫFv)ح@%괡_.;3yY7CՓ.J pS~KCβJݝ[ Bo_*TIRWST\z,<Ϳ;#i}=o+o"L*Y\ޞC-eeuIyW*j& cvsA-koG ZP&>.(14ODVwwwzV>+ @ ү?#P ZDHqV2ŔN!S-_C8xn$_w.\_wy`堨5SP=[]Uhߨ+%Iʺ!^d"-r׹R=Ve}t#TWM} Ǚj'kLPY1P1 #c{j0{B|l2s0e?Tf4ypwFoʵ 65D"_ '%. C@mcǍy~&mR{ 7J/H N_rr%J#/^zmm^4Lny%Q3''=8MAoklJFNפx-e˭+R[Ÿ.Uq 7.\"UmIP`̺֋UAZ&K8! |sr'ĻN**WG~0UxCoAMrR)Q 1ejleϭTZ\ L RԡV( %r7(򐥗FJk&ْ+l;nT "^6Al? QEB7i3NU z Jkk0ч㔙f}X=+E| =Cf⮾kC?5JӰnJM$q 77)RV9Db;g{3jø ^ M!{J&ST8b0|}n\KrkM ᙪg`N%fi)nX\Bh*~An?79^,雔? 2˵`f+ 5Pmu;[26aB[*z2,!MI2p9WBmc,tzWr˗/L[)+ZvsCڊٓ:EXJcjnݔCrw _L܌ؽH)ݧ=@;pU/%QvS98㜭q?wrSO8L]aY#;wѥKiK)c7)c@L"/[1JXP`h[y!EboeZqO{C#\_._/(4rRJ3ʸ"9b5De]l"I))?v2ª#bu+'E`⇵k{ݒ)ǿ`BW9\%V, ݕajk*O*WQ̹D׶:G{D|Lcx| |Z u;yϠQ)2❘V0Z%>' ¥={9 J^rl!,!߸2, JN-`!b`D[QYvcf`2`)q77gSjB6>!ݼk˗/r%]*k#rf7ӈ4$57,`B4#*e)G?,1̺"ިʇSk-tTݨX hEs%%==u<8c;y$Iڢ_O37`|& *u}HTj;?bielU<dHcC,sD$&651ah-`ERJjXh` 2_D}Zu> Ha# ʸƔ6?}ʘG$KKK< r,1 r^2 1â!:^qm̗zi~!ME{=OVHv2Y._}oQ2T66R^}H?~lEk9S }eƕ=O If¢0bXb7sv<.\zy"C5olLD\!6 Kr}o\r+øj&ʣbxZr66.0h#M`킣UNQ,9 7ZEZhri-,QU-_!b_r~LEN% Y8Vˢ\˗/w-eD dv>'iዀ6"C=/SP3Co?ք׾n6'{A*ntf.ܼfg[h4ݧ?n豎!}X4Z!)J7fdg3pc+}ށTN8M{d0n䲂csΧm>"[Sߊ.ϧw r˗._J7/tPiI_ ɦxc d5c0O5Jk$BVe!M[FwׄX1 bCzeӫ@څa pd瑗y.pT>Q9H˓u}ru/jW}.\˗/_[k r ÿc3d0EoUKh0֯f*|b:neоY ʚQMN#ZbJ||b#1!b#IYb8a&£0Uo!J^7zG+"+B1vP/Sʌ_JVRY~S+vy!TiBɸ|[2%Ɏ^ kJ;[C;pTX:ZWbam4ps}53c2g[xh0(bP+g>f~#j3m Y2BT1Wous<L4~Xu *~be˗/\"i&)㝻9_k'e3l-a8/ A._^,&wRHϘ+ z3b@LTz&^G{jig鸎ځM/o+3 ԳRrd4BM :nI++Њ+~(D,)\Gn<:e1w8~f7\2}La_bm5 U8#22OUM=хJ*A.U{\+-ێ5L?.L9mJ0TJw?WՍ]^UM^Xy{6(w," Ev ;QB|`X7 ֘|{JzW|2W.\r ev~ }?|:Vb<8}~*)q Rӽivj $2pTh @}e0w~=Ȥso!SyvCq~? ," v{':#&jr Q}3c6 6'j-MرSJR&tt<^RT>gץ -GDqKƭЪqUqy !pʏ"ݱk{Q5,?f~茗U]߃xbݯ!T U?uL7LI!n$ϯw/u@sɳFpb:(ٜ&v<-!Ji5]ahj|NpqG7īf-gzWXp.FX}TD嵍/\< lwA-R]ц7NX- i>%tB!rls%;.rRJ޵*_|U$WoJ])yM3cOi8BG &)t"J6K* ^pk$%+Px}Pp+ T&IQpς ئ$c+i v0Ơ.܌bW!Zq4y!YrC"b6VHJsv\?BG3v<6b ؀g!|0GXɹ&\  C?8drSl͓fGo$e)cZ5'ҩO M[RRw3ȳ+x7e8EsaqUeFEApJE$Ko }o$z*hsk|gs(J.f!E ὏ `,yC}J"ӤKxNA.=]мɦTӲv34=(+ T1k)L`XR* (+[_c3%UJ][%s+?ځ t(4MɬnMe=̻@a@Ƽt T's>F½ɞ?L.U}FE[%y8T NrDB QH @m$ +xȕZ3@f"3 &11T31&tX#ζ4d 5/C"i UKɖ/0P_{k _o,8y^1nx˲1f,u+VDt5߀)C@<:g`pBVicАѷ]ku._lwe[""mƛȝcpg[}(S`ԯn&N3ɃFgusf#0eqY 0 NnuƬ^Y9 P( lL@N Өy8M<8pJMn 036S4\9u-g CWkU˗._KЮ͙0mCE %ak+>M]1~bs,vCΎ dx=8LZ00ො^o |=تUDϴ^)7V\^Sұm (> bjŽ3 1k'#Y2'FNQP9P'?&zԩ_.=YkіU#s_H&L(szf3ty5`'Qs4$4ld|cU+w F1Qq3ev0KȌn y ZjF>X{ X5EuƠ/wHnͷK7%$U33U|f6cPaM{ƹn)7Vþ+/m`3N tݚs~ N`?*`rU'(Y.Ԥ1#،aYGm) X%,j*v~ێNQ{[W(!| Ǭ Co5W1Q3HsX<]AgT6?K*OOWm!23ow=NB/CR[%L_ aB˖K",Dl4oX}Ec{+NC_ <}#цH22ҊPB EW )X 1b X- XD p3v"adv%j ¹ca-Kޣl;Wg/ F/Y&Wj+8lßlq2N*YN0_7‚lՙ> ͋!&צ,[L R>Pq%I/P'ǤXc0I?셞*/aXA PŶ im>J4PdZŔpOP[,߄Y@+UeeIYbSukQ3`e#Cp4ªddcMU2VKa.Wc Ԧg]7Byxo>=h~6~|j#W%.15Uo_㾗/꿃SWt=_/10)tx ˥e?T ^~FE b ž'.lT<69հVDhoL4nk_-Id`66s^t+ )Z4i 5`[dޠ~Ț[jA1uNTSBhƫs1/&cSMiLpKxqV>+aRp!/?bA6ʬh [1gNDZg?_V5N4jpq;|E=WR F_'/g_1 Vo\Ꮏ&W7J '-UhTAC/"FemyBdMe®3p/Zb?Qn6a@$2Nl8#@9le#.!9pzPXIS +q*z4kjs?8.Rv0.Pa]438gI@8 mfh<4T$݈^/A(/mmyTXmeI{KfnԗUf%aܐ[-N*YK c'x녮gljbqw`wr *C[cpɗ7lӫy X0̉oR^U]2 k8[aOTk./ByBllNDǢ zr힇_ORkǘY,J;MQ*˗6S 4nɥbR0K];*y<b,WQ36 ]=t|v `ÃMxC Ac@J3{UԢStcU 9=gT9S 2I?C2]ciiBhFfnb[bml65rexLULY>8(j.l\1UZDsue ,MkEBƞU_%kbvqQ&j^,y82ZFh"-d N`0;lmr wREE0k`, b8:Z%ĻPklN;c+8e_[wc8ߗe;AsGvW඲_dG¿~12[ǨZudҥ}]+p؏@ 0j_cVgٙc:W}XF6W JSpߎ*[Tp*RKr܊%xnʐ,N3_b| D4 Xp C" \iż FypMd&Yj` q4t%*ʇp_`j9Xv-FQlee~ tlbCXZL)DҳErj-<8\N&9cx`51F\YcWGtn_5ÕL+JB;aB hdI|vJHgjbQDG9ya`pfzFԿt 5Zu,4Ŭ5z׹Ah!Bj)V4h$vn+%L2grI(Ҷcɗ& 9sPagI{@T)(xuZj'8 uݩ{@XBȮh9HX ^E k0,- `J?-R#1FU<{U'h4@ x@̢ͫ>(s {Q= Ѻ qIW`RgRPR эoe4GMQ«k:iݟ0A@!\mB/ٍEaEFy&]}7 fMxaBw/9_-ƗOy mf*gB'Nj#/rղ&e0`*#bz^K Ib}(ow rH y\RІfҲ0m KTFRx‡vfPw}60he Wn IJaE1Klp*6?K@ݷ4'Bt )DNOnvBrPxizI WEoq3_;edx旒3Yj^NVvޛ:Ra34鴅Ijͮ$M[WX{"7堂W;Ɓ`8X@+eBPbOk֪hKuhYWʦX[0X+u)\ؼ*˭AbRႋ78#~ H19r\jk_eheB[4LD9F(KYnuĽC燹Eu`m?ilpt_vT`L_ ewXAXq$ե>X*v=H ,HU5pXRW\]2SD#BXt)صr*3Gyc_/e]z^a_)A>)1MATi&*-ʋdٞ[< ׅѦ0 3^EIP21|\ Mבw2xܸm j~EcwKu8D \&<%.-2z4(F^ ^"ʽT@Rv!!m9~g;n-YQq+ U:ז&ZY#T;1KE3ZOoGیO,C~~;_^o4D'LJ%ƈ@C1EH_^C߃hN܁i}.b_P5DEKϙA8DYMiZ̪ruX@CIZzKds X.Ȳ1峼m1L-n YE(k+P\Ns` g5* whYfa}Rռ9,  o^m|,CTc4B*۫?@ qC^~+pbA1X[ "98z6w u ט[39:{wB<,_>ŦNx8}3F{oL}:φʳ)| .HA/*%)[Q^gWjZ(Ⳙd6^9dEٶx ?8Pq~nYH54n!7Z/,%O J:vZkl]=einRVJ%^V5I, f)I! [  Y.aC"cuF%+ڥUi4NDcsPG{9*YAv9p"` ~3)$L~tB֒kno0缩-Ear =t Ҹgh n g 2:*Urb#IG'r ,b_;JSP"#PET`5ⸯ)2,/cYc/L3h@P _r3z>5b]XXW֢ڣ`g#RF@Xp ԡanԘ!U@b--Ӧ̀A򈣹c0ѷ@p9WBAF!k)"Få۟rK.K$jŀvVJ#] n"3sD*̠74Ns) 蔭SWd$o <Կ vJn{1Er_Ob 2vCcp{V".yb_[`j0ૂ9fOӦ7h+ǔ{Lr dlu˵>l|&<1;Sa2`+54qBn|XmVë;QjsX @LSVDolJ5}a\=x͐x?.ގa.ʍ^fIR-E* gf`uD0B` ."Oz(K֭P#$雄R.+W>e7]-O-*PY)36\(\J:=(sr*"3p."rTw)6`F1r /Oirso=ATډ)wOhP_ aevPN`՛ٍXچÑ S^, i@j ;ucgDV ,3 Qp=Owq`,s$.42? G"vƍRryʖS]$DWQ0ȞA`Bn{z$Xza[Ь), L{q XE/3F2c ^'g_$շL(fjw nf)lD b#~e}U lgdm2W Eh\ybB[VD.KeoK(X ̝)/hb6Xskx_1Uu&4TbXUwtx&\Lr o9 jɄ"zk j2 4AAZr鵹!#'S08mM׉)ŵUǡ!)nO1-n\5(ܟTG>TZ\czTv 0@W1 @0mRvRtdJܼR@F2"54BA6(gLkBiNfRQݼ*0<,805 g>=2R/m/5Ev7;"79n 32 %5Щ3Qƻ ȿ "WյGU QSN-·.{ʞm.WjN'Ԍ,(ڰ`Q%,.@|B O[igOx,(cQs*8!A@!Z\"ɲd vvM(hM#$=Stϑ׷8cZvF#SOLِb!: U|P*VZb֡O+SK/cPx r {/"ٽc30a,KTBf{|Ӵ3Cee\[a0ivQ0PZl3\ҳFc Pg VJ.`Uyq=xu+46\h+ m{]xϰf@>#v㰖)^V.1I퀘 [XٖuZ)`&l{٪9kGA(Uut@]T+y_*\p=fZS*X~p܅m9m* u3oԷ+m!Ig7L_buRXj}Pϸ's7 b ObK#~b-(b\sLD, dҏtfR/;ui%^qb to!PggkXAScNC}ojHb1:fKF qN?.e? qPi|v" &bKq tf"0b]>#V.QpswMcz,@[~b~Q骸U&6 [!+/}azHe2f-K8q1N֪UNSe.,7pDh>z%w497a*Ulmh"sb k75{bP]Q'Ee5wO+uUDwfljE0[w!,чɘY+[؊A}/~]hj?eAgQ<35V' ;o/,lEe. Q6pY2 X 7*S;.+־ɚAՌO.YV\3^<#;(F奱O~Q򧐝vX׳*1v0# M)FhFfDfY~߷NGi'AKq 8Ɛl}V;B&񕯍"D(Ͳ|BEN އ/t$e[CvdCL MYmƎ.TWp =xүew@c%h̨UJ5@Ҧ)pneYJ0P-"aq`7oi,!bZ+q( y9Y̻q8R e8I46eY"[RsHhز4A…o^p^7ܢrg2ݟ\;.ị% l%B`QyG\F[[\% Ơ ^8DUzUl*D5'1EW y;p56b( :7v~(MmSVn`:VB+l"o-;̸ՋL:D, fw~rF#: ߴbΘ%&ILdJq \4m.qv*ٵcDW,3,ᭅFBh@f y7Vr1-qU@!yWn-ET%hY6S2ĭR(Kl.8n4 'l#ԸF.c>cVhj#( 9v>nS(ޮ+ L>B,6:Uj,LS^@fP֕ y,he*5dȇvQbr#SAu0Z{̿ĭLV(6/zeо%r8r4#-%Rsi̳<_/CY2 >ks28{K"\1l^Ɲ&b|i!X\H`j+,B >a* l׻.pJr@-¥Uo-SXR7[d3b5CXams2}43اDF2𜟨KwEƍ/Z1Nd2n'޻NTd|Mx)?fm][~ɗv% Hߒ Ar‡1iмX4X&ʓA~.Z.GI^v|BUɘ_4Kڲ,!A;( (`Sd+GuWtq rZSW5UCMRPXL1m8|@g8̡tlm,]ʪe.4M1}v2rITĭ9~PH߆qdhFܙ7M@yUanEE1lZZ0Pq@uK^W gWA1gx-S%n}Y" "3;'0h[Co-("@}b_mANvNo࿹_wCINvGL슕h?/v|~ S~?a-XҲ+?0TZFfN/E?r1Jⱏ*{ؽ1.U.0s*xw|ᘤ$~I&]C=K0]'ܴ 9}x2i4Xd<&Ƞ6)|d3c .&N{\UԶ6]V aшPA]&ͭZsSg򷃛2*M%^M&u 7bV@/rQMfDQÇV1q8"Emw+_{&$J+;@4gO̲ ˳߁>D/ &Z;GVV^m)|R5H&6=`~ѨnYdzR`M".Eb]R}EBoo`Z&Jx ߙfj5=E" | !Y3&p ι"$g;˪$D4,5M]HJ&X`6,FTE ]+CYV]7Y]a .lͱE 4#1b3 h],tby bpX%%su[f Qnh&Q|D \HoA;`4؇!7AnKa3guBpL(o}K'Wq F \PK$̬qIN},?07)-iܳq5 m2Y (#k|gXR'?#QBo Հ!m}@.˚Arr%-]Y<ȋz&L&{[ÿ2zLc : 3-:4/}iwPch#|Vh|ƹ5rGwmf:w2RL+QqnY4شuD Vv Wj1򺶧kAR+egb*ཏK÷7@4%1M]%T%VX@$l{fvsօ ^W9~V{%S$<"; #6_=΄w}RAbV*bGSR\c4;Lf%DqKswᘀKsMF;BGt뗣 2*qVfh6_lr+$GDwv_'<{)cy9qpV\Uj=ʙlRZA"Φs_;#Hbe&!%> Pԡ!4xҔ”_DTÚnT E]7W%"휆Tv.ͿE€8)e*]{FexĶedTƝFH[Lbv @tTC|Z\pJaAVjZ;cT*)n_!%ў26Θow&f,o `,Z8+ g S78n+$.L/"k}{ Jah*Q~q7|ef+ł1Ʉ2[$c,eAiZhU}$s,G/ TYj"AbweCB̓=ux]Cl&l|4ZrPX45ah  y5`=;9e 4A ئ`yk&XQc C5M0ԳA!o*!0e68GLb` –/(\U˥%b'f bVDI>*)|2C5q!/4=[LH6%i!abEVjU2D~X/UQz>Pܾs6*bes XF ኹJ>lb8鋯A:'"xS!MT%(WB {DAn7oy\GGZ!d}Bh %A*(QG{j:d n -,$f [Bqm)"Lh UP5X[. ~+ 3׮ oaߕhTL,E"c@U]h,נcKpro2t[&y3gzK}F^$mUj1}#wcU1˿1Ífo'VdzIH[tL)ipN9Z*dآiZeQxã'fgyO] jRq To(Xٖ`2)⩑1cx< ٘z0A H򙋖g*C_A,(7!@0@[0I&уTVtNnWN ٘,.'m_*un֠q-%j6f)R ^{K+UF6T/q>6QVeUq3-D%VW[weoUM7ž#f@UZ 5(/$ei+loqi Ւ֮i5J;a3VŸW*[ZUPH8&;$4%a|lq@&oD8@oo/.R.^,?WIBgeЗ< 򦒺NT=2c!ڲ@?XcK xaV]> Lb}SjI4q9LRan}(:Ȍdy1Q0)뙈c7yn*FQ[``mf5{ &hes3=j]RYwjR)4QT*WiVhSl9bʁXj! fkLJ0;wKnT,hyBk>heWK)7=<Wjp*9 eXj7r|aPzv5vq{tS<@*!E2P ^pA6QIGgYvHKxgf!nw+LDVdWzdw ֗=HK0W^ yYww P1߷UKGmoiYNe-=n9sEJxǖ`97'NG EU8ݙƕe C 1J-pDIh%Z x?'a97}O64@tLR|G&theԔ B("d&a.Hee.q~h [0>FV/x -mt@4Z)dEY[fc?2LSASM )6ALU#$sNPZx9qnŸ4#c 4@wt0_JؓU;18#[ SFVXcyNM;*)*̷KGvA "0Kҭ,J"xӏ(jaYŘ7+\ ɔLQa2ih ;TstTD丘 Gf@{Љ?r zVفQ9n_׆v)wڋXaS|۽],q|E0!:RS= Zd/89^+kb uDWl)v8 Af{4(Yyn̰䯍{ {Z6DkRQ@  C^&jD!6q~ _@zH|FZ ՗0Qq{I|"Pz-AC6L-D)4spq`b0^c Kv,(U|EAnp6xށ\.c ^#(1TeLO%bR >JS 0eAH6ʄiWQ4;eTw}xD7 3;'%s~Ҟhܫx};&2}יnnљP+, qe)O0C men6Zl çDRT2|nʎg~ s~`/QUa_{Nߘ3 ADD] 5w `N AV(Ķi5NۻBO'~mt1(\BPM7uF!md ,rlآ^WF'v52PZ܈~'0ZV6P3,K">6[?b/s;vr^QK ZU;xT^LKg,n4/Ҋ(I9 V wC֠*Zp #O5zn@[`)w*K5͙nBK0k9̍5ey.~>b zqZC|Oٖg[3h |3n|Jpnr>ʝ?+*7VPLMb[Qݍ2,e ^ 7:$Di-I:{ڢRS`ʭݞd?]U/ Y8G+}٪Ke ɮPGI"ɭ `4Ɇn8`wlH3% l=V]$0B#N_c/aDĠS4J3z`WeCEwTb9|o1E/bw"v=q7:i.CCheEŰ('sMr֮4"`d{ogԣj7b kR@b/u0(f&ں7ĺ3wQ4y%,4_I[MKS#' K;#;a(:ebJs~WCIxVa]O7o8 Id +/۰'`nMO1I\> 79{Nu7@IPttn,4qW@UZ" v@{>c)u|MȽWI [N"#V>"AKS!vfzK8Cؗɦ[xBRaa5ŹLs`˖!PÝQK'AwCݧs&j)[Y}ٖ2O1jA%:*eKP^}sƎ* + =Rh(}"!>l Zw>e#Er+,Os|^RF A/-=$g,ݡ~1l40Bd)m'Aߚ1J,.kL>E' c~o o0\d{_$טd'\N f@U@{$X 8{'5?hcn5чJ>e/D{6U;fW9XG}[!q13a@,6W3whdy!fQiw*XEx_XfM A`̢\Y,qzc,}{&vndv˫ۂTļbŃ._E˗J2~^b8e203E@EA@.Y'&_]i< qy|a8z#6HRŜc#4/xPJyy7`1t=UCkaϸZpfDpG?A2$h(A5v67 NUocEUy{m%Mȗg0^<%"Ҹķ0UhUe;ZqqF$n}s9J(tV(a9\;I 7p:1vkYFmf:+w)N٥v/V+Lʿ3ATo&>IH&f誶*\sY;k[Yг1"& `Y{pK|EWe;%V4Z*Tۇ1b/"pA AKja q͌.j9U1[BG8#,d- sZLpt`oiU> )&Y9!.,RwRYPXC"FXlxln9۩3Y< je,e+6"v]۸6V>p#q7M|Z& M'i4xѭExq1PѵʉQ6hN&OeӦA"hd0ea1 mҎZk %j=Wt RR? G"b*Km~hW1/e9|sNnOZy UQV8_ʃQ['y$1,A98`rUX~܍@A,AAsYVjߘ7.i\L˩+e"HBhQh*{֫{/Yj*SM!dQzc:0ˌ9`~^ 56e&HVaX*uor;M*, hYi̻*0^a#ܫDފN: 8!x+k Xc*8>S0{\ Zô6.XP. B`sCZ?(ca K0K 1:ZE[.1,^;&:x*2{%; robTohV+g>zCNbmeawU+K0b8|=g*d4=ĨTRG~bj*) oAi0\EK 6"Tþ"l 4- vN>LA*{%ADXPDwao0Y}r0GȏZfw?Mܰ.iw.( S& 9UPo.sٜKo/><$UFx%071>F6KHq Dz\pC厭w% .*%`x8nұ,݌tTBext.rE.1vS UdA z4\k*LA.h{?IGDt)4XnBlĺvg},UܼKn̽^tgLnxJ9^3l"$aȁ LM/h;ʦz+%l5 ۫( ӵ8 z[.1uW8^ZoKswXKLb/ q"D= xD\b^}VWYL+dV̦h /p/,BDwTzo{!՝o苓f#kf࠱>ABl](ɨ' CfjhYi5aB A/1q )E(o2?Ɗ`{>6"Vdlt֮*x:Q`6dіZĿDW3z]#`4q*O䕝:i@Pr4xw-^+\9yA̴Y9&܉t +U_XPhq J dœ[_:Lo|!գ)kO4/2z0?!wO8o [>(jbT7/GcdGEc Md75!v BF<1,!*"3LtJK%NzBu OYG1bH{Kpeo%o a ʼney06&Lp5 hP^cXU{?1qLeÊ#}0[͑XWT<#+%K\SH0_I$UMҷAt#5<߆t >J=%SG#A>Jt*#m/D0O ހ~п ,W_P#H`.%-ۿL _+%7/*dZgYA~N|,H+3ƩO7~na0aWZZӱ>.6w@ TVm }BGDx%)dV4&0 f,4Khulpb\ӱ 3*Q0iUO([FO;NIED BII0_r1%l%o1v"09.!pkj4XRXpѝ|+6prŘn] n^R# U<!#(8Hiem - [N`J.T҉S" ROhk %8 u >)geQx`.q,qZ"i/e0>UqNJ\x @+rհnahG7yB!(D(̳-X'4f9[6;YP̦t35<]*%[ɇ]@nOD6#Nҽ^0yE^oh0`e;&-@yd(tx)1p'`R^E-5{Ga[_-9TեxL+m8ipV\rXqxE.ձwNupܶ9ycu)فR9:ҨMވj1Yj*!u]$\-l /£y\1i撬=Ls>Qiw`fT0dШimiX&e8TUv"( Eȯ#cpN,z0n2ZwYZP*A oga`@ Q/i -@蝪FZDM©_0 :\ΦuM\ E6V8ք GB@l|ah+Ȱ*Q'lE^fop] sYsnarX" CR%8h 䔥neIp3F0?0 hyv!^fji4eNK[x8Gj f%af/?c/ZK mW?K9A]!fvq-{h4(Q @+ZG嗟v\*,fEl^&8q[LP"rlj4 XZ;B"US l>).&. \P{)pfx2>/¬r/xx/F%Q_L|?!Fc|U_ n](N|B#P86Y蛁#agAEA18A)QxJGr.0T3W*̣]땊)*W IV]w"]Y .VS.9yT(հe3[ķc wTQ!|Nڌ\ZKxE :'v"ۊkUE3F\ g'uk,Q{45JᎾp*4J7rCe./5.a–-OlNF#+Ǹ*Ih+4{ 1%zhS<˛--,[9=S1q12˷`Hsc0S\ U}Y>X.Q)(7+5)Jw3eRkAv`s[@8weg\@5 -L@ o /1pV{Vrhde &Z b{.uu(Ec 72ؖdHg&4S-Ūyfd܊hhrܸw !ouZюoU2;`ٕX+rJRZ=Մُh6\@vąMψ:C0qIP"X9 5~.YT#DS_4\ :|8"OEs; Z*ٰ(G6gBPKߐ|{FdP3JI^ OxfeMܮG@oQ?vnR (cH ؐXm@~@Ǡ¶!EL7=VPUwx `/~1ZsL+F^* (t$SDKXwQ!aPM zŗvpj%=!h8%2FfzEiYBzO &bt hUñ#\+*d/+?nPap!N@F.ɖ{ a(%Ǚ B\b&t}gii[lG&6h<D;~.LӔ|dQ,;X4^kQl̉@5sXv0\#c!(mjYJB<76ŵ1U|. ZKffx3HD9) Icc.#H1e) ֡ܬ$]|O!x3r6c.m&88Hܗ+Dj@о&{0EQJiT8E QM/&g[oFO.[(jX$w$ݰ9:XMҸ!n%U-A@ ƒ6@~ |1H06T^ҎKGh ʦx~ݡ(]Z-Vbfod0'ZWlsC*4)8ahP#I%D\m=4 +>VM'ZHUFKwy](BQk - .2ϔT axUvz.YWX9ʨsacnC@385)_#ꇡNB0]Aġ,=&40 `'qolø ~+ R-]Q*OG4)!⢓B`= JwSU}پ,Xbcn\Me7'VL)bōm!>,ߊ_TA99P)Uce\STF=KpA FB,Xk[.qfgҟqݸjj: >b2m& [;z,0a;b D?3xhX7bʗ%p4{;#._15߷.T;oQq"'kaP^HװE#]F]V=t[)l=%e 3qnz/4; Uh JtFĺS[fV*,XF3Z@Rk4!ayr?˨9.ha a Jހb7<_اH ,uQ2y ;֭C\wz!106,F{y!ώP7D*w+bzIrOܵqK}6dDLO %,Sz')a SK2+%Ĥ7 *%5AЇ k EP8hdR[8-5Ƃ#d:dإJ卛{:[s{O":(d+ R]d] %Up7(EGs]#dǁ%7B›Hdp/w_ kjnY N1򂶷xH׶0 ɿy.W^y px{>!֤mmzT.wuM©!r xw^ݒKUT.5V0Ʌ aq w%Fyfj 7mK Kt'3UL.5,ɿ~mbĜMͳNp=1+f5Chbw\LȆ%$RRM#..9R炇?E!Db(;ɛٹ+x~ѱ&f#׉IND40JD[|/ /N V5T>%4k&]YcnR\,2p+QcK2<nW,̡RȬI6ylu$ |DmfK)-МSeA_æi;?iq&Vjterxc]q,YP\K`'Ld"&l~N +9uCaRmލR&oFpTFW١Z`]۟$uen"e~MYu}@{PmB\:B5( SDgR..)soc`"fy)^P!P:f3%`^J1jwHQ@*a _snpl>eCT S+'{.V U(1PXl@2AZ-|9yiW #O %w3k6afjJ;cM0yJ>FlQAPVS-賠86ja@$Z7eKf:?!k * xB cs̽UJ%+d|M,@ 8{scmÈW-65 KufrԸ K"(!^y?FeW@`lf~zYSg[T3f7@nez]C.0@]r,vX*w2 fj+tUC1^x{Ǹb;OB qG,ޣDEzj-`&lwءy ?gAĴ Cp゠#l 7g1{XU0.m7;0U\.RβUU0 [[Fp\"9@QqAlLveL兘-a+X ~O$Kdǖ:n!WhL؈-֏ܻ/\qR͌ÌZ8}I-jƘ`eK07!% /UɚnT",o(p~P-г&.~cJ#"@&_, ̂°ަe FT 9L o2p 2P+d`hg{vo_1-~cO1TOw K,L栂ޕ&D@u.٬ƊU.}ȚV4dU[pJ|ҖU dX¨̧Yȷ-UhDvѳaR0Y%obQT^pGȈ-K(Jdv -` ûw+D^ NϕR!M_IWGRЂ{ M%jNkFR[;G3 PwZ +/aEu>E#dyVf xXov7$%)ڹG)0zj#AjY mxFū D.2#"vp/p6=s(ܮQ悆X`m7XJȇgq`Ӄmka ̶M)RB`[ &-%kTӪ10q6 0z+#+f#A|$o%C?؏TWLXx؎TY6|Ԫa0@HH0Td ZVeArQ|m"4 >me,5; +DB(lR[̯$ P )BCD\`Mwa97b(&3h[tԁeQx(\$b#Bs 095BEуnWS8)|D=tЕPKh]-MXP2f#Rp:V's0vx<&=uiو# mm  s7M16` KdV(`ef<^ҸL[\"]1ޠ|0<^UycG$9?bˈXrbjhx @RsWKޭ6ЃW,pWf|j KU;\Y^a! M(.Xc*86 er+U'F_<]=q\30C Ҍ9.,Bs 2R͌J4 ǵHÃFYPGÌ3^̗`z3n l I4m̃v7Ohdr5* E& 5`_Mie3%hɉp1Z(k@*E'^<+uɉ]pCL[Y%TlDUt ;V']kp0]& \D(:&iu瘿Hmy/%^& ei-V,))> Z?e[4!ݓb)" W{+eӕ5y2,w,W9zK/B{f­|6 F&p+z{P鵗Rl<3{z*Ux+qa|"ysBu@zYD,9^K5K}P-艔K>f躋y/#2Gdqn` ^ )Kaǔ) \WB-90 ys2[Lfc|H*̭@IK95!t'4L2EM!21 kj92 @L̕ͅv0ӄ11|UpQ79En`1,g'yx (K k!0ґ:ROҞ{Ѐ0md=jEdۮ1 B%j Utn]^cmԤL5,‹cl5Z muzZ wK7uX 1mBO+k0q6L7V` sNa=HC:a4BÁCݿeͿ)y-4F@ H9Y,ړ!|  ,ض\j`(Ja}NNQ t,@q]EBPF.ES-ҡFF4{1-GSIjfuQz|3#3j.Fc8z1hGst옩(.UU 3xc v%,&UxC +B6=ܾOd802›KnnAo}XgF͢cϽ/N?1R>-+u^ ȍxUnC`UQvCw;_pT-0|~ 85[r>V7Jm{>(Ÿ%DSfŨ~ Dq$@ ˂pG8eU&6 xcbC6Y%%%0p!mh+G@a-P2-=ڵ+Mvek,H!*gy3ʀ2r% 3^B6(wP= 4)G4TZEH3V<[A@#!@>)vxa'/cmJ(Pa8^c7}" ʯ+9[/P\@@#PV]QmObC)`ܡ'}PŏiQ'6;h4kY%̳1"![18eq`áYi.D>yFg.Z?aIu`}B_yeVA 7UKA9ؠΎuN.a! *iAM-*F LiĬvܵ~vm>NH`KeSFY3B*cN2F#sw˖䬹AeYZ R\KX{׬v$.k ʿ3Ef֦'W=0T_Kck^n-ZB0\RJ ReA%u5P ɫ ߃ kɹ_l m p,edgS{m{s ,hzki͡y-7͑ m+=)xSp{gG`XJcU9fhbL@4. ng\fgţl~&,&6E-n,&B LejQ Fy4TZ6_RR`t^5 4i棣}9鰘"O,f?LYA˜y]) ]+0gQBI FqU/]ыx0zL)%P3Ig̼.) 12W%\j~JٚK mZal٧a @jWC/71 L+eU,<L5dR,69ơ+Zn? rȌ.+)2CAR#;25< @;=1O67:Y"~5I%]8UċBk0ǥv&Wj8PXJ,68HY;U~SGJ~dꩤyEL֒T/yd ŰǴh18\Rf$Ӝ~V 4l֌*6é<}"u(c xavf ۹:%% %؏sf1#1!oZ_8\`T֮Xg&lC`ULP9MLFt}lk\@+Mʈ1x(K3b-&Ҕj6@`!QV.Xl4>Ax啇6URLD6r7KkԲM/u TDA/k6@Q5QY a*6Xg +nԠ">pK3Q.8qMl.*/G0O`jyߋF[W.<\Tqh8MHY#7]ŀi4"a;qG Nw;%F6FXSWuf1_ht+X9IzJNjS`H+meyb7 1^I_ Zns/ ;-2 Jlo.30.w=_5R(Wph袹L:/1_k6h-# &4@s?PF0R(s'"8NLq5TSHMʱV ᴄ Zv%8jxQ*E,(9EjhةH m7x'.L@lpZ`\Qa,Y,65k6g^ˤe`K>'.Vrfq LJ М6isV*}0Q;Eo)W̒jзm wJ-0%w?A tj7S$q^if.LF  Ma!0ۺOИtèXZ$)g v}m? *>e\Ee>3V>PU߂)v0]ַ0#L9WٌTBq[m_|{㢚Jȵ T[e 8VܬjR^ TF4 hdlcdp b[j^^%L7pzfQ>udAc~tPc3TA¯n{Q2q~ 9VK:T@aL/pL0,L:eo!* Jh.jR󽌤n@>%%%TA.23<Ŏ Vn?fHm1dSLüe^Ⱥ+p2(cظ4myaaZh^:CI䀛unr4$6֌;FXuBzc?3FǵyHr=6?*=Vd'## =1 JeB[oJ(Pji&ܥ[dFTyDP!:S:[Hp@t!?drߕJnʌÍ1=Qh'Q>VXj":ˇTXd@HfX Q7+!~:'J1Fd̞` )hӥ%* )fO  ,%j\-~Fzad3/KYEky'.˦4%\/.<U*4)enlX..>hip&Y@ɔ+TUƌqTńܭm xauyn8ͽ՚fƽRiO7cN <N\O*R\W剪6S^;p+G33FEb{YXU|ehG<" v(T¥1J]!w"81FjUN#-;́?U 2Ytw&#)` $I.@4\JhʔpVXN&Ռ!~ C MC}+
Linux 4gvps.4gvps.com 3.10.0-1127.18.2.vz7.163.46 #1 SMP Fri Nov 20 21:47:55 MSK 2020 x86_64
  SOFT : Apache PHP : 7.4.33
/scripts/
38.135.39.45

 
[ NAME ] [ SIZE ] [ PERM ] [ DATE ] [ ACT ]
+FILE +DIR
cpan_sandbox dir drwxr-xr-x 2016-07-29 13:50 R D
php_sandbox dir drwxr-xr-x 2019-11-27 01:18 R D
MirrorSearch_pingtest 2.38 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
activesync-invite-reply 1.693 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
add_dns 2.361 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
adddns 2.361 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
addpop 6.082 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
addsystemuser 3.267 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
adduser 0.09 KB -rwxr-xr-x 2016-07-29 13:50 R E G D
apachelimits 4.307 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
archive_sync_zones 3.023 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
auto-adjust-mysql-limits 1.811 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
autorepair 1.244 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
backups_clean_metadata_for_missing_backups 1.574 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
backups_create_metadata 15.748 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
backups_list_user_files 4.562 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
balance_linked_node_quotas 2.581 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
biglogcheck 1.688 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
build_bandwidthdb_root_cache_in_background 1.524 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
build_cpnat 3.412 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
build_mail_sni 3.873 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
build_maxemails_config 1.142 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
builddovecotconf 6.76 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
buildeximconf 6.999 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
buildhttpdconf 2.602 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
buildnsdconf 1.007 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
buildpureftproot 0.526 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ccs-check 4.913 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
check_cpanel_pkgs 10.749 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
check_cpanel_rpms 0.213 KB -rwxr-xr-x 2021-11-09 01:17 R E G D
check_domain_tls_service_domains.pl 6.681 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
check_immutable_files 5.489 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
check_mail_spamassassin_compiledregexps_body_0 0.183 KB -rwxr-xr-x 2016-07-29 13:50 R E G D
check_maxmem_against_domains_count 3.566 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
check_mount_procfs 2.023 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
check_mysql 5.551 KB -rwxr-xr-x 2022-09-20 01:15 R E G D
check_security_advice_changes 8.278 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
check_unmonitored_enabled_services 4.557 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
check_unreliable_resolvers 3.586 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
check_users_my_cnf 6.046 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
check_valid_server_hostname 7.656 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
checkalldomainsmxs 2.404 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
checkbashshell 1.177 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
checkccompiler 1.224 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
checkexim.pl 3.098 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
checklink 1.292 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
checknsddirs 0.99 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
checkusers 0.836 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
chkmydns 0.548 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
chkpaths 0.138 KB -rwxr-xr-x 2016-07-29 13:50 R E G D
chpass 0.406 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ckillall 1.112 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
clean_dead_mailman_locks 2.091 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
clean_up_temp_wheel_users 2.439 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
clean_user_php_sessions 4.761 KB -rwxr-xr-x 2022-08-25 01:16 R E G D
cleandns 13.094 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
cleandns8 0.407 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cleanmsglog 0.718 KB -rwxr-xr-x 2016-07-29 13:50 R E G D
cleanphpsessions 0.91 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cleanphpsessions.php 0.643 KB -rw-r--r-- 2022-08-16 01:16 R E G D
cleanquotas 1.612 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cleansessions 5.908 KB -rwxr-xr-x 2023-04-13 01:15 R E G D
cleanupinterchange 2.643 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cleanupmysqlprivs 0.521 KB -rwxr-xr-x 2021-11-09 01:17 R E G D
clear_cpaddon_ui_caches 1.271 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
clear_orphaned_virtfs_mounts 3.56 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
comparecdb 1.524 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
compilers 2.863 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
compilerscheck 0.976 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
configure_firewall_for_cpanel 0.508 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
configure_rh_firewall_for_cpanel 0.508 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
configure_rh_ipv6_firewall_for_cpanel 0.508 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
convert2dovecot 0.666 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
convert_accesshash_to_token 4.073 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
convert_and_migrate_from_legacy_backup 1.97 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
convert_maildir_to_mdbox 1.663 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
convert_mdbox_to_maildir 1.658 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
convert_roundcube_mysql2sqlite 25.282 KB -rwxr-xr-x 2024-11-05 01:15 R E G D
convert_to_dovecot_delivery 4.334 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
convert_whmxfer_to_sqlite 1.464 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
copy_user_mail_as_root 1.251 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
copy_user_mail_as_user 1.343 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpaddonsup 3.246 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpan_config 2.803 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpanel_initial_install 67.363 KB -rwxr-xr-x 2024-04-16 01:15 R E G D
cpanelsync 28.312 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpanelsync_postprocessor 1.618 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpanpingtest 0.942 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpbackup 44.767 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
cpbackup_transport_file 5.646 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
cpdig 1.81 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpfetch 1.229 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cphulkdblacklist 0.423 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cphulkdwhitelist 1.305 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpservice 2.865 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpuser_port_authority 19.292 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
cpuser_service_manager 10.853 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
createacct 24.57 MB -rwx------ 2024-08-07 01:15 R E G D
custom_backup_destination.pl.sample 5.061 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
custom_backup_destination.pl.skeleton 2.838 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dav_change_hostname 3.566 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dcpumon-wrapper 0.83 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
delpop 6.201 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
detect_env_capabilities 0.496 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
disable_prelink 2.774 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
disable_sqloptimizer 1.488 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
disablefileprotect 2.087 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
distro_changed_hook 1.157 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dnscluster 4.439 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dnsqueuecron 1.285 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dnssec-cluster-keys 3.75 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dovecot_maintenance 7.933 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dovecot_set_defaults.pl 0.961 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dumpcdb 0.846 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dumpinodes 0.671 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dumpquotas 0.602 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
dumpstor 0.892 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ea4_fresh_install 2.636 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
edit_cpanelsync_exclude_list 2.579 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
editquota 3.436 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
elevate-cpanel 377.866 KB -rwx------ 2025-06-12 01:25 R E G D
email_archive_maintenance 6.152 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
email_hold_maintenance 1.46 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
enable_spf_dkim_globally 8.827 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
enable_sqloptimizer 1.571 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
enablefileprotect 2.099 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ensure_autoenabled_features 2.5 MB -rwx------ 2024-06-12 01:15 R E G D
ensure_conf_dir_crt_key 4.824 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ensure_cpuser_file_ip 2.549 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ensure_crontab_permissions 1.075 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ensure_dovecot_memory_limits_meet_minimum 3.133 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ensure_hostname_resolves 2.566 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
ensure_includes 0.587 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ensure_vhost_includes 13.526 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
exim_tidydb 2.965 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
eximconfgen 1.318 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
eximstats_spam_check 0.847 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
export_horde_calendars_to_ics 15.069 KB -rwxr-xr-x 2023-08-01 01:15 R E G D
export_horde_contacts_to_vcf 13.944 KB -rwxr-xr-x 2023-05-02 01:15 R E G D
exportmydnsdb 3.469 KB -rwxr-xr-x 2022-04-12 01:15 R E G D
expunge_expired_certificates_from_sslstorage 3.563 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
expunge_expired_pkgacct_sessions 0.832 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
expunge_expired_transfer_sessions 1.063 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fastmail 5.157 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
featuremod 1.924 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fetchfile 0.412 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
find_and_fix_rpm_issues 6.988 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
find_outdated_services 5.408 KB -rwxr-xr-x 2023-05-31 01:15 R E G D
find_pids_with_inotify_watch_on_path 3.657 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fix-cpanel-perl 28.824 KB -rwxr-xr-x 2023-04-13 01:16 R E G D
fix-listen-on-localhost 3.52 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fix-web-vhost-configuration 6.148 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fix_addon_permissions 7.68 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fix_dns_zone_ttls 1.337 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fix_innodb_tables 4.052 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fix_pear_registry 4.073 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fix_reseller_acls 10.883 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixetchosts 4.32 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixheaders 0.559 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixmailinglistperms 0.984 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixmailman 2.094 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixnamedviews 1.218 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixndc 0.403 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixquotas 17.454 KB -rwxr-xr-x 2023-04-13 01:15 R E G D
fixrelayd 1.742 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixrndc 16.481 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixtar 0.491 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixtlsversions 4.703 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixvaliases 1.999 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
fixwebalizer 0.943 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
forcelocaldomain 0.874 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ftpfetch 2.198 KB -rwxr-xr-x 2019-11-27 01:18 R E G D
ftpquotacheck 8.312 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ftpsfetch 2.359 KB -rwxr-xr-x 2019-11-27 01:18 R E G D
ftpupdate 0.255 KB -rwxr-xr-x 2020-06-15 01:16 R E G D
gather_update_log_stats 4.252 KB -rwx------ 2025-06-10 14:31 R E G D
gather_update_logs_setupcrontab 5.451 KB -rwx------ 2025-06-10 14:31 R E G D
gemwrapper 1.741 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
gencrt 6.26 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
generate_account_suspension_include 5.703 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
generate_google_drive_credentials 1.108 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
generate_google_drive_oauth_uri 0.961 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
generate_maildirsize 13.938 KB -rwxr-xr-x 2023-02-20 01:15 R E G D
gensysinfo 1.157 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
get_locale_from_legacy_name_info 1.993 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
getremotecpmove 12.674 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
grpck 1.189 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
hackcheck 3.02 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
hook 1.452 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
httpspamdetect 2.66 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
hulk-unban-ip 3.93 MB -rwx------ 2024-07-02 01:15 R E G D
import_exim_data 8.392 KB -rwxr-xr-x 2022-09-20 01:15 R E G D
importmydnsdb 11.338 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
increase_filesystem_limits 0.87 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
initacls 4.987 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
initfpsuexec 0.434 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
initquotas 19.475 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
initsuexec 4.026 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
install_cpanel_analytics 1.927 KB -rwxr-xr-x 2023-04-13 01:16 R E G D
install_dovecot_fts 1.567 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
install_plugin 2.802 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
installpkg 0.562 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
installpostgres 6.557 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
installsqlite3 1.822 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ipcheck 3.926 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ipusage 7.445 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
isdedicatedip 0.588 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
jetbackup-check 3.688 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
killdns 0.412 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
killdns-dnsadmin 1.152 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
killmysqluserprivs 0.423 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
killmysqlwildcard 1.152 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
killpvhost 0.833 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
killspamkeys 0.915 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
link_3rdparty_binaries 1.241 KB -rwxr-xr-x 2022-06-28 01:17 R E G D
linksubemailtomainacct 3.172 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
listcheck 0.525 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
listsubdomains 1.049 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
litespeed-check 3.859 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
locale_export 4.819 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
locale_import 4.349 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
locale_info 3.99 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
logo.dat 0.2 KB -rw-r--r-- 2016-07-29 13:50 R E G D
magicloader 1.938 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
maildir_converter 6.076 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
mailperm 16.575 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
mailscannerupdate 2.42 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
mainipcheck 9.996 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
maintenance 46.618 KB -rwxr-xr-x 2024-07-02 01:15 R E G D
make_config 0.397 KB -rw-r--r-- 2016-07-29 13:50 R E G D
make_hostname_unowned 1.161 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
manage_extra_marketing 12.414 KB -rwx------ 2025-05-28 19:42 R E G D
manage_greylisting 16.188 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
manage_mysql_profiles 20.018 KB -rwxr-xr-x 2023-04-13 01:16 R E G D
migrate-pdns-conf 9.826 KB -rwxr-xr-x 2024-09-19 01:15 R E G D
migrate_legacy_wordpress_to_modern_wordpress 12.985 KB -rwx------ 2021-02-08 01:09 R E G D
migrate_local_ini_to_php_ini 7.409 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
migrate_whmtheme_file_to_userdata 2.954 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
mkwwwacctconf 2.329 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
modify_accounts 4.086 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
modify_featurelist 9.199 KB -rwx------ 2025-05-28 19:42 R E G D
modify_packages 3.647 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
modsec_vendor 15.633 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
mysqlconnectioncheck 6.547 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
mysqlpasswd 4.092 KB -rwxr-xr-x 2022-04-12 01:15 R E G D
named.ca 1.565 KB -rw-r--r-- 2016-07-29 13:50 R E G D
named.rfc1912.zones 0.756 KB -rw-r--r-- 2017-11-07 01:18 R E G D
nixstatsagent.sh 58.675 KB -rwx------ 2022-07-06 14:06 R E G D
notify_expiring_certificates 9.367 KB -rwxr-xr-x 2022-06-28 01:17 R E G D
notify_expiring_certificates_on_linked_nodes 1.329 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
oopscheck 1.115 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
optimize_eximstats 3.882 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
patch_mail_spamassassin_compiledregexps_body_0 2.395 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
patchfdsetsize 2.719 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
pedquota 2.256 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
perform_sqlite_auto_rebuild_db_maintenance 2.199 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
perlinstaller 0.516 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
perlmods 1.176 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
php_fpm_config 9.734 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
phpini_tidy 0.671 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
pkgacct 87.819 KB -rwxr-xr-x 2023-04-13 01:15 R E G D
post_snapshot 3.156 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
post_sync_cleanup 6.091 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
primary_virtual_host_migration 2.443 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
process_pending_cpanel_php_pear_registration 3.491 KB -rwxr-xr-x 2022-04-12 01:15 R E G D
process_site_templates 7.271 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
proxydomains 9.344 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ptycheck 0.707 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
purge_modsec_log 1.526 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
purge_old_config_caches 2.075 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
pwck 0.691 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
quickdnslookup 1.132 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
quickwhoisips 2.293 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
quota_auto_fix 1.406 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
quotacheck 22.363 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
rawchpass 0.449 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rdate 4.798 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
realadduser 5.608 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
realchpass 3.258 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
realperlinstaller 5.669 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
realrawchpass 0.415 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuild_available_addons_packages_cache 1.271 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuild_available_rpm_addons_cache 1.271 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuild_bandwidthdb_root_cache 1.452 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuild_dbmap 5.798 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuild_provider_openid_connect_links_db 1.015 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuild_whm_chrome 2.224 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuilddnsconfig 26.213 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuildhttpdconf 2.602 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuildinstalledssldb 2.849 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuildippool 0.497 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuildnsdzones 1.137 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rebuilduserssldb 0.926 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
refresh-dkim-validity-cache 5.967 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
regenerate_tokens 2.176 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
reloadnsd 0.802 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
remote_log_transfer 11.597 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
remove_dovecot_index_files 5.887 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
removeacct 20.91 MB -rwx------ 2024-10-25 01:15 R E G D
rescan_user_dovecot_fts 2.977 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
reset_mail_quotas_to_sane_values 6.818 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
resetmailmanurls 2.028 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
resetquotas 4.677 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv 3.232 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_apache 0.412 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_apache_php_fpm 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_base 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_bind 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_chkservd 0.417 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_clamd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_cpanalyticsd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_cpanel_dovecot_solr 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_cpanel_php_fpm 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_cpanellogd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_cpdavd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_cpgreylistd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_cphulkd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_cpipv6 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_cpsrvd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_crond 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_dnsadmin 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_dovecot 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_exim 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_eximstats 0.492 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_ftpd 0.416 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_ftpserver 0.89 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_httpd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_imap 0.427 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_inetd 2.466 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
restartsrv_ipaliases 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_lmtp 0.427 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_mailman 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_mydns 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_mysql 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_named 0.759 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_nscd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_nsd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_p0f 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_pdns 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_pop3 0.427 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_postgres 0.417 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_postgresql 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_powerdns 0.432 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_proftpd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_pureftpd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_queueprocd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_rsyslog 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_rsyslogd 0.427 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restartsrv_spamd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_sshd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_syslogd 2.4 KB -rwxr-xr-x 2022-06-28 01:17 R E G D
restartsrv_tailwatchd 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_unknown 9.9 MB -rwxr-xr-x 2024-08-07 01:15 R E G D
restartsrv_xinetd 0.412 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restorecpuserfromcache 1.961 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
restorepkg 36.49 MB -rwx------ 2024-10-03 01:15 R E G D
rfc1912_zones.tar 10 KB -rw-r--r-- 2016-07-29 13:50 R E G D
rpmup 4.773 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
rsync-user-homedir.pl 5.765 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
run_if_exists 0.5 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
run_plugin_lifecycle 3.531 KB -rwx------ 2025-05-28 19:42 R E G D
runstatsonce 0.43 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
runweblogs 1.021 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
sa-update_wrapper 3.338 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
safetybits.pl 0.824 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
secureit 4.721 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
securemysql 4.542 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
securerailsapps 3.575 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
securetmp 15.987 KB -rwxr-xr-x 2023-08-01 01:15 R E G D
sendicq 0.463 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
servicedomains 9.344 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
set_mailman_archive_perms 1.754 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
set_php_memory_limits 3.67 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
setpostgresconfig 6.036 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
setup_greylist_db 16.188 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
setup_modsec_db 1.304 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
setup_systemd_timer_for_plugins 3.921 KB -rwx------ 2025-05-28 19:42 R E G D
setupftpserver 10.475 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
setupmailserver 9.547 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
setupnameserver 13.748 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
shrink_modsec_ip_database 12.974 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
simpleps 3.051 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
slurp_exim_mainlog 5.775 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
smartcheck 15.129 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
smtpmailgidonly 8.15 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
snapshot_prep 5.876 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
spamassassin_dbm_cleaner 5.853 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
spamassassindisable 3.74 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
spamboxdisable 2.27 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
sshcontrol 14.377 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
ssl_crt_status 3.836 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
suspendacct 18.006 KB -rwxr-xr-x 2023-04-13 01:16 R E G D
suspendmysqlusers 4.422 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
swapip 3.822 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
sync-mysql-users-from-grants 1.196 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
sync_child_accounts 1.771 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
sync_contact_emails_to_cpanel_users_files 1.136 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
synccpaddonswithsqlhost 6.595 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
synctransfers 1.925 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
syslog_check 1.358 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
sysup 0.63 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
test_sa_compiled 1.067 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
transfer_account_as_user 2.342 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
transfer_accounts_as_root 4.756 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
transfer_in_progress 3.082 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
transfer_in_progress.pod 0.305 KB -rw-r--r-- 2017-04-01 05:43 R E G D
transfermysqlusers 9.53 MB -rwx------ 2024-07-02 01:15 R E G D
try-later 7.949 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
unblockip 0.651 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
uninstall_cpanel_analytics 1.201 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
uninstall_dovecot_fts 0.549 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
uninstall_plugin 2.839 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
unlink_service_account 2.619 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
unpkgacct 4.603 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
unslavenamedconf 0.843 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
unsuspendacct 17.803 KB -rwxr-xr-x 2023-04-13 01:16 R E G D
unsuspendmysqlusers 6.712 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
upcp 31.558 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
upcp-running 2.703 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
upcp.static 708.597 KB -rwxr-xr-x 2024-12-11 01:15 R E G D
update-packages 4.773 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_apachectl 0.469 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_db_cache 0.42 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_dkim_keys 1.45 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_exim_rejects 1.213 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_existing_mail_quotas_for_account 4.776 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_known_proxy_ips 0.979 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_local_rpm_versions 4.56 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
update_mailman_cache 8.345 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_mysql_systemd_config 1.25 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_neighbor_netblocks 0.476 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_sa_config 2.145 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_spamassassin_config 10.73 KB -rwxr-xr-x 2023-02-20 01:16 R E G D
update_users_jail 0.675 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
update_users_vhosts 0.782 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
updatedomainips 0.591 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
updatenameserverips 1.656 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
updatenow 5.178 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
updatenow.static 1.91 MB -rwxr-xr-x 2024-12-11 01:15 R E G D
updatesigningkey 1.949 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
updatessldomains 1.813 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
updatesupportauthorizations 2.492 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
updateuserdatacache 2.47 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
updateuserdomains 0.756 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
upgrade_bandwidth_dbs 2.219 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
upgrade_subaccount_databases 2.731 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
userdata_wildcard_cleanup 5.739 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
userdirctl 5.014 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
validate_sshkey_passphrase 1.215 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
verify_api_spec_files 0.739 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
verify_pidfile 1.961 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
verify_vhost_includes 7.341 KB -rwxr-xr-x 2022-09-20 01:16 R E G D
vps_optimizer 7.819 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
vzzo-fixer 0.708 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
whmlogin 2.334 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
whoowns 1.128 KB -rwxr-xr-x 2017-04-01 05:30 R E G D
wpt_license 6.27 MB -rwx------ 2024-08-07 01:15 R E G D
wwwacct 24.57 MB -rwx------ 2024-08-07 01:15 R E G D
wwwacct2 0.086 KB -rwxr-xr-x 2016-07-29 13:50 R E G D
xfer_rcube_schema_migrate.pl 2.402 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
xfer_rcube_uid_resolver.pl 1.803 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
xferpoint 3.126 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
xfertool 16.141 KB -rwxr-xr-x 2023-04-13 01:16 R E G D
zoneexists 0.781 KB -rwxr-xr-x 2022-04-12 01:16 R E G D
REQUEST EXIT
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/cpanel_initial_install Copyright 2022 cPanel, L.L.C. # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited package scripts::cpanel_initial_install; use cPstrict; use Cpanel::ChildErrorStringifier (); use Cpanel::Chkservd::Manage (); use Cpanel::Chkservd::Tiny (); use Cpanel::Config::LoadConfig (); use Cpanel::Config::ConfigObj (); use Cpanel::Config::CpConfGuard (); use Cpanel::Config::FlushConfig (); use Cpanel::Config::LoadCpConf (); use Cpanel::ConfigFiles (); use Cpanel::DnsUtils::Add (); use Cpanel::DIp::Update (); use Cpanel::Timezones (); use Cpanel::RPM::Versions::File (); use Proc::FastSpawn (); use Cpanel::FeatureShowcase (); use Cpanel::Finally (); use Cpanel::Carp (); use Cpanel::LoadModule (); use Cpanel::FileUtils::TouchFile (); use Cpanel::FileUtils::Write (); use Cpanel::Kernel (); use Cpanel::Kernel::GetDefault (); use Cpanel::NSCD::Log (); use Cpanel::Quota::Utils (); use Cpanel::Pkgr (); use Cpanel::Usage (); use Cpanel::NAT (); use Cpanel::Init::Simple (); use Cpanel::TimeHiRes (); use Cpanel::Server::Type (); use Cpanel::Sys::Hostname::Modify (); use Cpanel::TimeHiRes (); use Cwd (); use File::Path (); use File::Copy (); use Cpanel::MariaDB (); use Cpanel::SafeRun::Object (); use Cpanel::Services::Running (); use Cpanel::Yum::Vars (); use Cpanel::MysqlUtils::ServiceName (); use Cpanel::MysqlUtils::MyCnf::Adjust (); use Whostmgr::Services (); use Whostmgr::TweakSettings (); use Cpanel::ForkAsync (); use Cpanel::Wait::Constants (); use Cpanel::ServerTasks (); # a sub is overridden later in code so let's load it for safety. use Cpanel::Daemonizer::Tiny (); use Cpanel::Install::EA4 (); use Cpanel::Install::Utils::Packaged (); use Cpanel::Install::Utils::Logger (); use Cpanel::Install::Utils::Command (); use Cpanel::Install::LetsEncrypt (); use Cpanel::Install::MySQL (); use Cpanel::Install::JobRunner (); use Cpanel::NameServer::Utils::Enabled (); use Cpanel::OS (); use Cpanel::OSSys::Env (); # These start off as 0 and once they have been deferred they will # be set to 1 my %targets_to_defer_to_after_first_upcp = ( 'sitepublisher' => 0, 'mailman' => 0 ); my %module_by_type = ( 'MySQL' => 'Cpanel::Mysql::Install', 'MariaDB' => 'Cpanel::MariaDB::Install', ); # We only use this file in the installer and we delete it when # we are done. my $mysql_rpm_download_complete_file = '/var/cpanel/mysql_rpm_download_completed'; my %background_pids; my $run_tasks_in_main_process = 0; Cpanel::Carp::enable(); #make sure fatal results in a backtrace my $MAIN_PROCESS_PID; exit __PACKAGE__->script(@ARGV) unless caller(); # loggers helper sub INFO ($msg) { return Cpanel::Install::Utils::Logger::INFO($msg); } sub DEBUG ($msg) { return Cpanel::Install::Utils::Logger::DEBUG($msg); } sub WARN ($msg) { return Cpanel::Install::Utils::Logger::WARN($msg); } sub FATAL ($msg) { return Cpanel::Install::Utils::Logger::FATAL($msg); } sub script (@ARGS) { if ( !$ENV{'CPANEL_BASE_INSTALL'} ) { die("This program is designed to be run from the cpanel installer. It is probably destructive to run but if you insist, you'll need to set the environment variable CPANEL_BASE_INSTALL=1 before you run it\n"); } # ensure locale are set local @ENV{qw{LANG LANGUAGE LC_ALL LC_MESSAGES LC_CTYPE}} = qw{C C C C C}; my $skip_apache = 0; my $skip_repo_setup = 0; my $installstart = time(); my %opts = ( 'skipapache' => \$skip_apache, 'installstart' => \$installstart, 'skipreposetup' => \$skip_repo_setup, ); Cpanel::Usage::wrap_options( \@ARGS, \&usage, \%opts ); #Set this because we also run during sysup which is done as a result of a deferred task #also done during upcp so this is a forever thing that has to be tracked by touchfile touch($Cpanel::ConfigFiles::SKIP_REPO_SETUP_FLAG) if $skip_repo_setup; my $lock_file = $Cpanel::ConfigFiles::BASE_INSTALL_IN_PROGRESS_FILE; $| = 1; ## no critic qw(Variables::RequireLocalizedPunctuationVars) umask 022; ## no critic qw(ProhibitStringyEval) # Don't create the END block until run time. $MAIN_PROCESS_PID = $$; eval q{ # Cleanup the lock file on exit. END { return unless $MAIN_PROCESS_PID && $$ == $MAIN_PROCESS_PID; if ( $lock_file and open(my $fh, '<', $lock_file ) ) { my $pid = <$fh>; close $fh; chomp $pid if ($pid); if ( !$pid or $pid == $$ ) { print "Removing $lock_file\n"; unlink $lock_file; } } } }; ## use critic qw(ProhibitStringyEval) # Create the lock file. touch( $lock_file, $$ ); # Open the install logs for append. open_logs(); # case CPANEL-28892: # securetmp cannot run in the background because it has a window of broken-ness for # /tmp where the files are being moved around. INFO('Securing the /tmp and /var/tmp directories.'); Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/scripts/securetmp', '--auto', '--install' ); # Determine local distro and version. Fail if unsupported distro. die q[Unuspported distribution: ] . Cpanel::OS::display_name() unless Cpanel::OS::is_supported(); # setup /etc/yum/vars/cp_centos_major_version as soon as possible Cpanel::Yum::Vars::install(); # if you suspect an error from racing tasks, then you can try setting this to 1 to force tasks to run serially. $run_tasks_in_main_process = $ENV{'RUN_TASKS_IN_MAIN_PROCESS'} // 0; INFO("run_tasks_in_main_process=$run_tasks_in_main_process"); _run_in_background( \&set_up_swap_if_needed, 'Setting up SWAP' ); # Disable fs.protected_regular if it is enabled by default disable_fs_protected_regular_if_needed(); # Store the initial install version. File::Copy::copy( '/usr/local/cpanel/version', '/var/cpanel/install_version' ); # Upgrade to cloud linux if licensed via cpanel. Change distro if it updates. upgrade_to_cloud_linux(); # /var/cpanel/cpanel.config probably already exists from updatenow.static, but updatenow and *.static files # are considered daemons and CpConfGuard does not compute dynamic values for daemons. Cpanel::Config::CpConfGuard->new(); # Import the MySQL key before going to install to avoid conflicts later INFO("Attempting to pre-import the mysql gpg key"); Cpanel::Install::MySQL::install_mysql_keys(); my $mysql_download_pid = _run_in_background( sub { INFO("Downloading MySQL/MariaDB packages"); eval { download_mariadb_or_mysql($skip_apache) }; if ($@) { WARN("Errors seen pre-caching the database server packages. A second attempt will be made to download it for install"); } else { INFO("Completed downloading MySQL/MariaDB packages"); } return 0; }, 'MySQL/MariaDB package Download' ); if ( !$skip_repo_setup ) { Cpanel::Install::EA4::install_apache_repo(); } my $ea4_or_universal_hooks_install_pid; if ( Cpanel::Server::Type::is_dnsonly() ) { $ea4_or_universal_hooks_install_pid = _install_yum_universal_hooks_in_background(); } elsif ($skip_apache) { WARN("Skipping Apache installation due to command line request"); } else { $ea4_or_universal_hooks_install_pid = _install_ea4_in_background(); } # Setup databases my $dbsetup_pid = _setup_databases_and_dependent_apps($skip_apache); my $installer_dir = Cwd::getcwd(); # Now software is installed, call rdate in case it couldn't be called earlier. $installstart = update_system_clock($installstart); { # Save the /var/cpanel/cpanel.config and cache file we've been avoiding up to this point. INFO("Setting up /var/cpanel/cpanel.config"); local $ENV{CPANEL_BASE_INSTALL} = 0; Cpanel::Config::CpConfGuard::clearcache(); Cpanel::Config::LoadCpConf::loadcpconf(); } # Lowercase the host name if necessary (no need to fork anymore, this is now run by cpanel perl) Cpanel::Sys::Hostname::Modify::make_hostname_lowercase_fqdn(); # NAT auto-detection/configuration Cpanel::Install::Utils::Command::ssystem('/usr/local/cpanel/scripts/build_cpnat'); # Check if the hostname resolves - this *must* be done after build_cpnat # so that the resolution checks are performed properly on NAT environments Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/scripts/ensure_hostname_resolves', '-y' ); # Created /etc/domainips after build_cpnat and hostname Cpanel::DIp::Update::update_dedicated_ips_and_dependencies_or_die(); # Stop and possibly remove some services disable_and_remove_init_services(); # Reduce memory pressure as soon as we can Cpanel::Install::Utils::Command::ssystem('/usr/local/cpanel/scripts/vps_optimizer'); # Make cpanel.pem right away require Cpanel::SSLCerts; Cpanel::SSLCerts::checkForExpiredServiceCrts(); # Init the package management system, update installed, then run sysup ensure_rpms_installed(); # Setup default cPanel users; do_taskrun(); # Update license information ASAP so code can get at it. INFO("Updating license information"); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/cpkeyclt}); # Make touch files corresponding to cpanel.config settings. do_cpanel_config_touch_files(); if ( -e '/usr/sbin/pwconv' ) { INFO("making sure we are shadowed"); Cpanel::Install::Utils::Command::ssystem('/usr/sbin/pwconv'); } _shutdown_cpanel_services(); INFO("Making sure the firewall (if present) is setup for cPanel."); Cpanel::Install::Utils::Command::ssystem('/usr/local/cpanel/scripts/configure_firewall_for_cpanel'); # HB-5927 - enable the cl-ea4-testing repo on CL8 so EA4 can install if ( my $ea_testing_repo = Cpanel::OS::ea4_testing_yum_repo() ) { Cpanel::Install::Utils::Command::ssystem( qw{yum-config-manager --enable}, $ea_testing_repo ); } _run_modular_jobs(); setup_misc_cpanel_config_files(); setup_exim_config_defaults(); INFO("Setting up the local name server."); setup_nameserver(); # make sure dnsadmin is up so we can do dns dcv # mkdir '/var/cpanel/dnsadmin', 0700; Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/3rdparty/bin/perl', "/usr/local/cpanel/install/CpanelService.pm" ); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/restartsrv_dnsadmin}); # warn on failure: do not abort the installation if it fails _run_and_wait_in_background( \&_setup_dns_and_dkim, 'Setup DNS and DKIM', stop_on_failure => 0 ); _run_tasks_that_can_be_done_after_updatenow_in_the_background(); _defer_targets(); INFO("Downloading deferred packages"); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/check_cpanel_pkgs --fix --no-broken --no-digest --download-only}); if ($ea4_or_universal_hooks_install_pid) { # Apache needs to be installed before upcp _wait_for_background_tasks_to_finish($ea4_or_universal_hooks_install_pid); } _run_webserver_post_install_and_ssl_cert_check_in_background(); INFO("Installing deferred packages"); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/check_cpanel_pkgs --fix --no-broken --no-digest}); _run_in_background( \&_setup_horde_if_needed, 'Horde Setup' ); setup_ftpserver(); INFO("Waiting for MySQL/MariaDB installation to complete"); _wait_for_background_tasks_to_finish($dbsetup_pid); INFO("Finished waiting for MySQL/MariaDB installation to complete"); _run_tasks_that_must_wait_until_deferred_are_installed(); Cpanel::Install::Utils::Command::ssystem('/usr/local/cpanel/scripts/ensure_crontab_permissions'); # Run upcp for the first time. # NOTE: This will start cpanellogd. INFO(" "); INFO(" "); INFO("Running upcp for the first time."); INFO(" "); INFO(" "); # upcp will link 3rdparty binaries Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/upcp manual}); # --force should not be needed _install_deferred_targets(); if ( !Cpanel::Server::Type::is_dnsonly() ) { # Fix for broken mailman installer ( still needed ) Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/scripts/set_mailman_archive_perms', '--background' ); } schdir($installer_dir); # Restore any staged cpanel accounts cpanel_account_restore(); my $howto = get_howto(); my $boot_kernel = eval { Cpanel::Kernel::GetDefault::get() }; $boot_kernel = '' unless defined $boot_kernel; WARN($@) if $@; # Tailwatchd should be started from the queue # to avoid a race condition where its already in the queue # and we try to start it. # # Previously we would start tailwatchd after # flushing the task queue which lead to a race # condition where the task queue might start it # and then restartsrv would try as well. The one # that lost the race would error. By putting it # in the queue we ensure we only do it once. # CPANEL-26289: Ensure locales are the first thing we do in the background # after the install finshes to preserve legacy behavior _schedule_task( 'LocaleTasks' => "build_locale_databases", 20 ); _schedule_task( 'TailwatchTasks' => 'reloadtailwatch', 200 ); _schedule_task( 'SpamassassinTasks' => 'update_spamassassin_rules', 3000 ); INFO("Queuing system package update"); _schedule_task( 'API' => "verify_api_spec_files", 2000 ); _schedule_task( 'MaintenanceTasks' => 'run_system_package_update', 1000 ); #rpmup # ensure_rpms_installed will only install the most critical # rpms because sysup limits the number of rpms that # are installed during CPANEL_BASE_INSTALL=1 to ensure we can # move on as fast as possible. # Since users have come to expect some rpms will # be preinstalled on cPanel systems we do these in the # background. _schedule_task( 'MaintenanceTasks' => 'run_base_package_update', 700 ); #sysup _schedule_task( 'TemplateTasks' => "rebuild_templates", 500 ); _schedule_task( 'cPAddons' => "install_cpaddons", 100 ); _schedule_task( 'ScriptTasks' => "run_script /usr/local/cpanel/scripts/mailperm", 3500 ); # Do this last as its of low importance since we won't have enough accounts on the system # soon enough for it to matter _schedule_task( 'ScriptTasks' => 'run_script /usr/local/cpanel/scripts/find_outdated_services --auto', 3600 ); # Remove any unneeded rpms that could not be removed during this install # in order to prevent a condition where we see : Error: Rpmdb changed underneath us _schedule_task( 'ScriptTasks' => 'run_script /usr/local/cpanel/scripts/check_cpanel_pkgs --fix --no-digest --no-broken', 2000 ); # CPANEL-26871: ensure httpd.conf is rebuilt once splitlogs has been installed # in the upcp warn if !eval { Cpanel::ServerTasks::queue_task( ['ApacheTasks'], 'build_apache_conf', 'apache_restart' ); 1 }; # Do not defer this. We need this in place before the first login. Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/install_cpanel_analytics}); # CPANEL-27822: defer checks of spamd for 30 minutes since the latest rules # will be installed in the background Cpanel::Chkservd::Tiny::suspend_service( 'spamd', 60 * 30 ); _schedule_task( 'CpServicesTasks' => "restartsrv spamd", 1 ); # Install ImunifyAV if it's available for this platform _schedule_task( 'ImunifyTasks' => 'install_imunifyav', 900 ); # Install WordPress Toolkit _schedule_task( 'WPTK' => 'install_wptk', 1200 ); # Install Monitoring Package _schedule_task( 'MaintenanceTasks' => 'install_cpanel_monitoring_packages' ); _wait_for_background_tasks_to_finish( keys %background_pids ); # This will attempt to clear the task queue prior to system shutdown. if ( -e '/usr/bin/systemctl' ) { INFO("Enabling one-time shutdown hook"); Cpanel::Install::Utils::Command::ssystem( '/usr/bin/systemctl', 'start', 'cpcleartaskqueue' ); } INFO("Flushing the task queue"); # Queueprocd will start tailwatchd run_final_tasks_in_background_that_can_be_done_later_if_shutdown_now(); my $finishtime = time(); my $installtime = $finishtime - $installstart; my $installfinishtime = localtime($finishtime); INFO( sprintf( "cPanel install finished in %d minutes and %d seconds!", int( $installtime / 60 ), $installtime % 60 ) ); display_howto($howto); # Check if the kernel set for boot matches what's currently running (uname -r) notify_if_boot_kernel_changed($boot_kernel); save_system_config_at_install_for_analytics(); if ( -x '/root/cpanel_profile/postinstallhook' ) { INFO("Running /root/cpanel_profile/postinstallhook"); Cpanel::Install::Utils::Command::ssystem('/root/cpanel_profile/postinstallhook'); } return 0; } sub _schedule_task ( $plugin, $task, $delay = 120 ) { die q[Invalid plugin name] if ref $plugin; die qq[invalid task name $task] if $task =~ m{^\d+$}a; die qq[invalid delay '$delay' for task $task] unless $delay =~ m{^\d+$}a; INFO("schedule_task: [ $plugin ], $task in $delay seconds."); warn unless eval { Cpanel::ServerTasks::schedule_task( [$plugin], $delay, $task ); 1 }; return; } ### ---- END sub script ---- #### sub schdir { my $dir = shift; my $cwd = Cwd::getcwd(); chdir($dir) || die "Cannot chdir to ${dir} ($!), cwd was: $cwd"; return; } sub _run_modular_jobs { my $runner = Cpanel::Install::JobRunner->new(); $runner->dispatch_next() while $runner->get_pending_jobs(); return; } # NOTE : This code is duplicated in build-tools/bootstrap_sandbox . If you change this, you probably need to change it there as well. sub disable_fs_protected_regular_if_needed { return unless Cpanel::OS::kernel_supports_fs_protected_regular(); my $current_value = Cpanel::SafeRun::Object->new( 'program' => "/usr/sbin/sysctl", 'args' => [ '-b', 'fs.protected_regular' ] )->stdout(); # Assume that fs.regular_fifos could also be enabled, so disable them now.. unless ( length $current_value && $current_value eq 0 ) { Cpanel::Install::Utils::Command::ssystem( '/usr/sbin/sysctl', 'fs.protected_regular=0' ); Cpanel::Install::Utils::Command::ssystem( '/usr/sbin/sysctl', 'fs.protected_fifos=0' ); } # .. and ensure they stay disabled on reboot my $sysctl_conf_path = '/usr/lib/sysctl.d/protect-links.conf'; if ( open( my $sysctl_conf_rd_fh, '<', $sysctl_conf_path ) ) { my @file_contents = (<$sysctl_conf_rd_fh>); close($sysctl_conf_rd_fh); if ( open( my $sysctl_conf_wr_fh, '>', $sysctl_conf_path ) ) { foreach my $line (@file_contents) { chomp $line; if ( $line =~ m/^fs\.protected_regular/ ) { print $sysctl_conf_wr_fh "fs.protected_regular = 0\n"; } elsif ( $line =~ m/^fs\.protected_fifos/ ) { print $sysctl_conf_wr_fh "fs.protected_fifos = 0\n"; } else { print $sysctl_conf_wr_fh "$line\n"; } } close($sysctl_conf_wr_fh); } } return; } sub ensure_rpms_installed { unlink '/var/cpanel/useyum'; # No longer used by cPanel. # Assure yum exclusions are reinstated unlink '/etc/checkyumdisable'; # We do not need to run sysup since its run as part of Cpanel::Update::Now return; } sub update_system_clock { my $installstart = shift; # Set the clock my $was = time(); Cpanel::Install::Utils::Command::ssystem('/usr/local/cpanel/scripts/rdate'); my $now = time(); INFO( "Clock set to: " . localtime($now) ); my $change = $now - $was; # Adjust the start time if it shifted more than 10 seconds. if ( abs($change) > 10 ) { WARN("Clock changed by $change seconds."); $installstart += $change; WARN( "Starting time adjusted to " . localtime($installstart) ); } else { INFO("Clock changed by $change seconds"); } return $installstart; } sub set_up_swap_if_needed { INFO('Checking for sufficient memory or swap.'); return if Cpanel::OSSys::Env::get_envtype() eq 'virtuozzo'; Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/bin/create-swap --if-needed --verbose}); return; } sub _early_install_tasks { return qw{ Repos FixPamConf MailMan DefaultFeatureFiles Users Conf ExternalAuth CPanelPost ResellersInit FixLogPermissions Perm SecurityCheck }; } sub do_taskrun { INFO('Setting up early taskrun items.'); foreach my $task ( _early_install_tasks() ) { Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/3rdparty/bin/perl', "/usr/local/cpanel/install/$task.pm" ); } Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/restartsrv_dnsadmin --stop --notconfigured-ok}); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/restartsrv_dnsadmin --start}); return; } sub download_mariadb_or_mysql { my ($skip_apache) = @_; # If download_mariadb_or_mysql dies this is ok as it will only slow # down the install since we retry the download during the install my $finally = Cpanel::Finally->new( sub { Cpanel::FileUtils::TouchFile::touchfile($mysql_rpm_download_complete_file); } ); local $ENV{CPANEL_BASE_INSTALL} = 0; # build_mysql_conf will exit if this is 1 to prevent double rebuilds my $set_version = _get_mysql_set_version(); # We don't need to do this for MySQL 5.6 and below return 1 if ( $set_version < 5.7 ); my $install_obj = _create_mysqldb_install_obj($set_version); INFO("Preparing to download MySQL/MariaDB packages"); # Work around race condition where the mysql download starts before ea4 install # by waiting for ea4 to have profiles in place in order to avoid # the state where the mysql download blocks ea4 from installing via yum lock _wait_for_ea4_profiles_to_be_installed() if !$skip_apache && !Cpanel::Server::Type::is_dnsonly(); INFO("Starting MySQL/MariaDB package download"); $install_obj->download_pkgs($set_version); return 1; } sub install_mariadb_or_mysql { my ($skip_apache) = @_; local $ENV{CPANEL_BASE_INSTALL} = 0; # build_mysql_conf will exit if this is 1 to prevent double rebuilds my $set_version = _get_mysql_set_version(); INFO("The 'mysql-version' key is set to: $set_version."); my $type = _get_mysql_type($set_version); my $install_obj = _create_mysqldb_install_obj($set_version); if ( Cpanel::OS::is_apt_based() ) { my $preseed_path = $install_obj->write_preseed_file($set_version); $install_obj->preseed_configuration($preseed_path); } return _do_mysqlbase_db_install( $type, $set_version, $install_obj, $skip_apache ); } sub _do_mysqlbase_db_install { my ( $type, $set_version, $install_obj, $skip_apache ) = @_; if ($set_version) { INFO("Installing $type"); INFO("Installing $type dependencies"); if ( $set_version < 5.7 ) { # Deps will be installed automatically if # we are using yum repos so there is no need # to do a separate yum transaction which only # slows things down $install_obj->install_known_deps($set_version); } else { INFO("Installing $type packages"); _wait_for_mysql_to_be_downloaded(); _wait_for_ea4_to_be_installed() if !$skip_apache && !Cpanel::Server::Type::is_dnsonly(); # A dry-run is pointless since we have not installed # $type before $install_obj->install_pkgs_without_dry_run($set_version); # Needs the file /etc/apparmor.d/usr.sbin.mysqld in place (by installing mysql package), so this must be done after installing the packages if ( Cpanel::OS::security_service() eq 'apparmor' ) { $install_obj->configure_apparmor(); } } } if ( -e '/var/run/mysqld/mysqld.sock' && !-e '/var/lib/mysql/mysql.sock' ) { symlink( '/var/run/mysqld/mysqld.sock', '/var/lib/mysql/mysql.sock' ); } INFO("Installing $type Upgrade Hooks"); $install_obj->install_upgrade_hook(); return; } sub _get_mysql_set_version { my $config = scalar Cpanel::Config::LoadCpConf::loadcpconf_not_copy(); return $config->{'mysql-version'}; } sub _get_mysql_type { my ($set_version) = @_; return Cpanel::MariaDB::version_is_mariadb($set_version) ? 'MariaDB' : 'MySQL'; } sub _create_mysqldb_install_obj { my ($set_version) = @_; INFO("The 'mysql-version' key is set to: $set_version."); my $type = _get_mysql_type($set_version); my $pass_version = $set_version >= 5.7 ? $set_version : undef; my $module = $module_by_type{$type} or die "Failed to determine module from type: “$type”"; Cpanel::LoadModule::load_perl_module($module); return "$module"->new( 'output_obj' => Cpanel::Install::Utils::Logger::get_output_obj(), 'skip_build_mysql_conf' => 1, # For 5.7+ we no longer have any targets in etc/rpm.versions # so lets not block rpm to do nothing as it slows down the # whole install ( $set_version >= 5.7 ? ( 'skip_ensure_rpms' => 1 ) : () ) ); } sub run_roundcube_ifnecessary { return unless my $v = Cpanel::Pkgr::get_package_version('cpanel-roundcubemail'); local $ENV{'CPANEL_ROUNDCUBE_INSTALL_VERSION'} = $v; INFO('Running /usr/local/cpanel/bin/update-roundcube-db'); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/bin/update-roundcube-db}); INFO('/usr/local/cpanel/bin/update-roundcube-db Done'); return; } sub setup_openidconnect_for_cpanelid() { INFO("Setup cPanelID"); # In CPANEL-28178 we fixed cPanelID.pm to observe the SUPER's return of # undef when the underlying configuration was missing. This now makes # is_configured return the correct result which allows us to fix the # missing config. require Cpanel::Security::Authn::OpenIdConnect; my $provider = Cpanel::Security::Authn::OpenIdConnect::get_openid_provider( 'cpaneld', 'cpanelid' ); if ( !$provider->is_configured() ) { $provider->set_client_configuration( { 'client_id' => 'auto', 'client_secret' => 'auto' } ); } return; } sub _setup_databases_and_dependent_apps { my ($skip_apache) = @_; return _run_in_background( sub { my $finally; # Defer this use warnings qw(once redefine); my $restoreconpath = '/usr/sbin/restorecon'; if ( -l $restoreconpath ) { my $target = readlink($restoreconpath); # This is a hack to avoid modifing the mysql rpms # which is only safe since we are doing a base cPanel install # and require selinux to be disabled anyways. # # Prevent the installer from calling restorecon # during mysql install since we have selinux disabled # and this causes a stall. We put restorecon back # after the mysql parts are done unlink($restoreconpath); $finally = Cpanel::Finally->new( sub { symlink( $target, $restoreconpath ) or die "Failed to restore $restoreconpath link to $target: $!"; } ); } # Install MariaDB or a version of Mysql 5.7+ if necessary. install_mariadb_or_mysql($skip_apache); # Do this before starting mysql { # Avoid doing anything that requires mysql to be running Cpanel::MysqlUtils::MyCnf::Adjust::auto_adjust( { 'force' => 1, 'debug' => 0, 'verbose' => 1, 'no-restart' => 1, } ); } Cpanel::Install::Utils::Command::ssystem('/usr/local/cpanel/scripts/update_mysql_systemd_config'); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/bin/build_mysql_conf --no-upgrade --no-selinux}); # Run scripts/securemysql is no longer needed # since all yum based installed call build_mysql_conf # which will do this Cpanel::Init::Simple::call_cpservice_with( Cpanel::MysqlUtils::ServiceName::get_installed_version_service_name() => qw/enable/ ); undef $finally; Cpanel::Chkservd::Manage::enable('mysql'); return 0; }, 'SQL Databases and dependent apps' ); } sub upgrade_to_cloud_linux { DEBUG("Detecting if Cloud Linux is licensed through cpanel"); # Assure local::lib to /usr/bin/perl so perl modules can be installed to home directories. # upcp now does this my $license_options = `/usr/local/cpanel/cpanel -F`; ## no critic qw(Cpanel::ProhibitQxAndBackticks) return if $license_options !~ m/cloudlinux/ms; my $cloud_installer = '/usr/local/cpanel/bin/cloudlinux_update'; INFO("Upgrading your distro to Cloud Linux"); if ( !-x $cloud_installer ) { WARN("Cannot convert your system to Cloud Linux without $cloud_installer"); } else { Cpanel::Install::Utils::Command::ssystem($cloud_installer); Cpanel::OS::clear_cache_after_cloudlinux_update(); # die q[Unuspported distribution: ] . Cpanel::OS::display_name() unless Cpanel::OS::is_supported(); # make sure the new version is supported } # Re-check system to make sure we haven't moved to cloud linux return; } sub setup_ftpserver { my $config = scalar Cpanel::Config::LoadCpConf::loadcpconf(); # Setup the FTP server. Default to disabled my $target = $config->{'ftpserver'} || 'disabled'; $target = 'disabled' if ( Cpanel::Server::Type::is_dnsonly() ); # DNSONLY installs cannot set a custom ftp server. Cpanel::Install::Utils::Logger::INFO("Setting up FTP server to '$target'"); if ( $target !~ m/^(disabled|proftpd|pure-ftpd)$/ ) { Cpanel::Install::Utils::Logger::WARN("$target is an unsupported ftpserver. Will default to 'disabled' instead"); $target = 'disabled'; } my $no_anon_ftp = '/var/cpanel/noanonftp'; if ( !-e $no_anon_ftp && $target ne 'disabled' ) { Cpanel::Install::Utils::Logger::INFO('Defaulting Anonymous FTP off'); Cpanel::FileUtils::TouchFile::touchfile('/var/cpanel/noanonftp'); # Default } Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/scripts/setupftpserver', $target ); return; } sub setup_nameserver { my $config = scalar Cpanel::Config::LoadCpConf::loadcpconf(); # Setup the name server. Default to PowerDNS { # powerdns should be the default everywhere unless another choice was set my $default_nameserver = Cpanel::OS::list_contains_value( 'dns_supported', 'powerdns' ) ? 'powerdns' # : Cpanel::OS::list_contains_value( 'dns_supported', 'bind' ) ? 'bind' : 'disabled' # ; my $target = $config->{'local_nameserver_type'} || $default_nameserver; INFO("Setting up name server to '$target'"); # Make sure the nameserver can be installed on the system my ( $valid, $reason ) = Cpanel::NameServer::Utils::Enabled::valid_nameserver_type($target); if ( !$valid ) { my $fallback = $target ne $default_nameserver ? $default_nameserver : 'disabled'; WARN("$target cannot be setup on your system (will default to '$fallback' instead): $reason"); $target = $fallback; ( $valid, $reason ) = Cpanel::NameServer::Utils::Enabled::valid_nameserver_type($target); FATAL("$target is an unsupported name server: $reason.") unless $valid; } # The name server must be set up before attempting to reset it to cPanel defaults. Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/scripts/setupnameserver', '--force', $target ); if ( $target =~ m/^(bind|powerdns)$/ ) { if ( -e '/etc/named.conf' ) { INFO("Saving /etc/named.conf, and rebuild with cPanel defaults"); if ( rename '/etc/named.conf', '/etc/named.conf.precpanelinstall' ) { Cpanel::Install::Utils::Command::ssystem('/usr/local/cpanel/scripts/rebuilddnsconfig'); } else { WARN("Unable to rebuild /etc/named.conf file"); } } } } # Setup the mail server. { my $target = $config->{'mailserver'}; $target = 'disabled' if ( Cpanel::Server::Type::is_dnsonly() ); # DNSONLY installs cannot set a custom mail server. INFO("Setting up mail server to '$target'"); if ( $target !~ m/^(disabled|dovecot)$/ ) { WARN("$target is an unsupported mail server. Will default to 'dovecot' instead"); $target = 'dovecot'; } Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/scripts/setupmailserver', $target ); } return; } sub setup_misc_cpanel_config_files { INFO('Setting up misc cPanel config files.'); # FB Case about running this out of maintenance and into the install script DEBUG(' Running scripts/secureit'); Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/scripts/secureit', '--fast' ); # rc.local is not run with systemd. if ( Cpanel::OS::service_manager() eq 'initd' ) { # sync time on reboot. my $rc_local = '/etc/rc.d/rc.local'; DEBUG(' Configuring rdate to run on reboot'); if ( open my $rc_fh, '>>', $rc_local ) { print {$rc_fh} "/usr/local/cpanel/scripts/rdate &\n"; close $rc_fh; } } DEBUG(' Setting WHM theme to x'); Cpanel::FileUtils::Write::overwrite( '/var/cpanel/whmtheme', 'x', 0644 ); # can be missing on some systems Cpanel::FileUtils::TouchFile::touchfile('/etc/fstab'); DEBUG("Setup /var/cpanel/user_notifications/"); mkdir '/var/cpanel/user_notifications/', 0751; return; } sub setup_exim_config_defaults { INFO('Setting up exim default configuration options.'); # Load the initial config, if the config file exists, # if it does not exist, start with an empty hash. my $initial_config = Cpanel::Config::LoadConfig::loadConfig( '/etc/exim.conf.localopts', undef, "=", undef, undef, 1 ); $initial_config ||= {}; # Get all the initial config values that are not undefs my %config = map { $_ => $initial_config->{$_} } grep { defined $initial_config->{$_} } keys %{$initial_config}; # Fill the config with default values for any we don't already have # We don't want to step on any values already setup in the config file Whostmgr::TweakSettings::load_module('Mail'); my $mail_conf; { no warnings 'once'; $mail_conf = Whostmgr::TweakSettings::Mail::get_conf(); # PPI NO PARSE - loaded with load_module } # Once Whostmgr::TweakSettings::Configure::Mail implements a save # function we can get rid of this and just use the save via # Whostmgr::TweakSettings::apply_module_settings foreach my $key ( sort keys %{$mail_conf} ) { # Don't overwrite initial values next if exists $config{$key}; my $section; { no warnings 'once'; $section = $Whostmgr::TweakSettings::Mail::Conf{$key}; } next unless exists $section->{'default'}; # Start with the default value my $value = $section->{'default'}; # Execute if it is a code ref rather than an actual value $value = $value->() if ref $value eq 'CODE'; $config{$key} = $value; # Some of these have actions to trigger creation of touch-files or symlinks # See that the action gets run if ( exists $section->{'action'} and ref $section->{'action'} eq 'CODE' ) { # Pass the value as both the new value and the old value since this is to # be the initial value and we don't want to trigger running updateuserdomains multiple times $section->{'action'}->( $value, $value ); } } # Write out all settings my $rc = Cpanel::Config::FlushConfig::flushConfig( '/etc/exim.conf.localopts', \%config, undef, undef, { 'sort' => 1 } ); WARN('Error writing exim default configuration options to: /etc/exim.conf.localopts') unless $rc; return; } sub os_service_restart { my $service = shift or die; DEBUG("Restarting service $service"); Cpanel::Init::Simple::call_cpservice_with( $service => qw/restart/ ); return; } sub cpanel_account_restore { my $acct_restore_file = '/etc/cpanelacctrestore'; return if ( !-e $acct_restore_file ); INFO("Restoring Accounts."); sleep(2); if ( open( my $fh, '<', $acct_restore_file ) ) { while (<$fh>) { s/\n//g; DEBUG("Restoring $_"); Cpanel::Install::Utils::Command::ssystem( "/usr/local/cpanel/scripts/restorepkg", "$_" ); } close($fh); } else { WARN("Failed to open $acct_restore_file: $!"); } return unlink($acct_restore_file); } sub enable_cphulkd { my $conf_dir = '/var/cpanel/hulkd'; INFO("Enabling cphulkd ..."); mkdir "$conf_dir", 0755 unless -e "$conf_dir"; if ( Whostmgr::Services::enable('cphulkd') ) { # Set up monitoring by default. Cpanel::Chkservd::Manage::enable('cphulkd'); INFO("Done"); } else { WARN("Unable to enable cphulkd"); } return; } sub enable_quotas { INFO("Enabling quotas ..."); my $old_umask = umask(0077); # Case 92381: Logs should not be world-readable. open( my $fh, ">", _enable_quotas_log() ) || WARN("Unable to open log file for enabling quotas."); umask($old_umask); my $quotas_run = Cpanel::SafeRun::Object->new( program => "/usr/local/cpanel/scripts/fixquotas", stdout => $fh, stderr => $fh, ); my $needs_reboot = Cpanel::Quota::Utils::reboot_required(); WARN( $quotas_run->autopsy() ) if !$needs_reboot && $quotas_run->CHILD_ERROR(); if ($needs_reboot) { WARN("You must reboot the server after you enable quotas."); } INFO("Done"); return; } sub hide_feature_showcase { INFO("Disabling feature showcase ..."); my $drivers = Cpanel::Config::ConfigObj::get_available_drivers( 1, 1 ); my $showcase = Cpanel::FeatureShowcase->new(); my @features = $showcase->get_feature_showcase_names(); push @features, keys %{$drivers}; return unless scalar @features; $showcase->mark_features_as_viewed( $Cpanel::FeatureShowcase::SOURCE_GUI, @features ); INFO("Done"); return; } sub _enable_quotas_log { return "/var/log/quota_enable.log"; } sub notify_if_boot_kernel_changed { my $boot_kernel = shift; my $current_kernel = Cpanel::Kernel::get_running_version(); $current_kernel = '' unless defined $current_kernel; return if $current_kernel eq $boot_kernel; WARN("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); WARN("Your system kernel may have been updated."); WARN("Current kernel ($current_kernel) has been changed to: $boot_kernel"); WARN("Before rebooting the system, please ensure that the installed kernel version is compatible with your deployment."); if ( Cpanel::OS::is_cloudlinux() ) { WARN(" "); WARN(" ************************************************************************************************************"); WARN(" "); WARN(" NOTE: Because this is a Cloud Linux install, cPanel WILL NOT BE FULLY FUNCTIONAL until you reboot. "); WARN(" "); WARN(" ************************************************************************************************************"); WARN(" "); } WARN("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); return; } sub open_logs { my $log_file = '/var/log/cpanel-install.log'; $ENV{'TZ'} = Cpanel::Timezones::calculate_TZ_env(); Cpanel::Install::Utils::Logger::init($log_file); return; } sub os_service_stop { my $service = shift or die; DEBUG("Ensuring service $service is not running"); local $@; # Do not warn since many of these may not be installed eval { local $SIG{'__WARN__'} = sub { return; }; Cpanel::Init::Simple::call_cpservice_with( $service => qw/stop/ ); }; # Even if the init script doesn't exist, try to kill the service. if ( Cpanel::Install::Utils::Command::ssystem( 'killall', '-q', $service ) == 0 ) { Cpanel::Install::Utils::Command::ssystem( 'killall', '-q', '-9', $service ); DEBUG("Killed $service"); } return; } sub touch { ## no critic qw(RequireArgUnpacking) my $file = shift; open( my $fh, ">>", $file ) or return; print {$fh} ''; # Must send something to the file or it doesn't save foreach my $line (@_) { # concat anything passed into the subroutine. print {$fh} $line; } close $fh; return; } sub usage { my $prog = $0; $prog =~ s{^.+/(.+)$}{$1}; print "This script should not be called manually.\n"; exit; ## no critic qw(Cpanel::NoExitsFromSubroutines) -- pre-existing code; protects against manual invocation } sub disable_and_remove_init_services { INFO("Disabling unneeded services..."); my @service_shutdown = qw(named); push @service_shutdown, qw(smail sendmail postfix master httpd apache wu-ftpd inetd) if ( !Cpanel::Server::Type::is_dnsonly() ); Cpanel::NSCD::Log::disable_logging(); INFO("Stopping services:"); foreach my $service (@service_shutdown) { os_service_stop($service); } # p0f should be disabled on new installs Whostmgr::Services::disable('p0f'); return; } sub get_howto { my $version = ''; if ( open( my $fh, "<", "/usr/local/cpanel/version" ) ) { $version = <$fh>; $version =~ s/^(\d+\.\d+).*/$1/gs; } my $map = { version => $version, ip => _get_public_ip(), }; return _howto_message($map); } sub display_howto { my ($howto) = @_; foreach my $line ( split( "\n", $howto ) ) { INFO($line); } return; } sub save_system_config_at_install_for_analytics { my $data = { 'hostname' => '', ## Add more data here }; eval { require Cpanel::JSON; require Cpanel::Analytics; require Cpanel::Sys::Hostname; require Cpanel::Analytics::Config; $data->{'hostname'} = Cpanel::Sys::Hostname::gethostname(1); Cpanel::Analytics::prerequisites(); Cpanel::JSON::DumpFile( Cpanel::Analytics::Config::ANALYTICS_DATA_DIR() . '/system_config_at_install.json', $data ); }; return; } sub _howto_message { my $map = shift; my $login_url = Cpanel::SafeRun::Object->new( 'program' => "/usr/local/cpanel/scripts/whmlogin" )->stdout(); chomp $login_url; return <{version} is now complete. The next step is to configure your server. \e[0m Before you configure your server, ensure that your firewall allows access on port 2087. After ensuring that your firewall allows access on port 2087, you can configure your server. 1. Open your preferred browser 2. Navigate to the following url using the address bar and enter this one-time autologin url: $login_url After the login url expires you generate a new one using the 'whmlogin' command or manually login at: https://$map->{ip}:2087 Visit https://go.cpanel.net/whminit for more information about first-time configuration of your server. Visit http://support.cpanel.net or https://go.cpanel.net/allfaq for additional support Thank you for installing cPanel & WHM $map->{version}! EOM } sub _get_public_ip { require Cpanel::DIp::MainIP; require Cpanel::NAT; return Cpanel::NAT::get_public_ip( Cpanel::DIp::MainIP::getmainip() ); } sub cpanel_config_actions { return qw/ allow_login_autocomplete apache_port dormant_services email_send_limits_count_mailman email_send_limits_defer_cutoff emailsperdaynotify enablecompileroptimizations eximmailtrap jailmountbinsuid jailmountusrbinsuid jailprocmode maxemailsperhour nobodyspam popbeforesmtpsenders signature_validation skipbwlimitcheck skipparentcheck userdirprotect /; } sub cpanel_config_post_actions { return qw/ allow_deprecated_accesshash api_shell conserve_memory domainowner_mail_pass email_send_limits_min_defer_fail_to_trigger_protection enablefileprotect exim-retrytime invite_sub phploader popbeforesmtp resetpass resetpass_sub skipanalog skipawstats skipwebalizer ssl_default_key_type smtpmailgidonly usemysqloldpass /; } # This subroutine helps document what action and post_action subs need to be run during a fresh install. # A unit test will go off if you add a new one and don't update one of these subs sub cpanel_config_ignored_actions { # Post actions my @ignore = qw/ apache_ssl_port allow_login_autocomplete autodiscover_proxy_subdomains ipv6_listen proxysubdomains autoupdate_certificate_on_hostname_mismatch /; # Actions push @ignore, qw/allow_server_info_status_from autodiscover_host chkservd_check_interval jailapache skipdiskusage system_diskusage_critical_percent system_diskusage_warn_percent tcp_check_failure_threshold/; # build_global_cache run by cpkeyclt push @ignore, qw/allowcpsslinstall display_cpanel_doclinks/; # rebuild httpd.conf not required push @ignore, qw/enable_piped_logs/; # MySQL restart is not required push @ignore, qw/ mycnf_auto_adjust_innodb_buffer_pool_size mycnf_auto_adjust_maxallowedpacket mycnf_auto_adjust_openfiles_limit /; # phpini and php_fpm already handled push @ignore, qw/ php_max_execution_time php_memory_limit php_post_max_size php_upload_max_filesize /; push @ignore, qw/ debughooks disable_cphttpd disk_usage_include_mailman disk_usage_include_sqldbs emailarchive pma_disableis requiressl server_locale skipboxtrapper skipmailman skipspamassassin skipspambox ssh_host_key_checking usemailformailmanurl xframecpsrvd /; return @ignore; } sub do_cpanel_config_touch_files { my $cp_config = scalar Cpanel::Config::LoadCpConf::loadcpconf(); Whostmgr::TweakSettings::load_module('Main'); my $tweak_conf; { no warnings 'once'; $tweak_conf = \%Whostmgr::TweakSettings::Main::Conf; } # Block task queueing during a fresh install. no warnings 'redefine'; local *Cpanel::ServerTasks::schedule_task = sub { }; # These actions expect a hash not a string to be passed in. $cp_config->{'dormant_services'} = { map { $_ => 1 } split /\s*,\s*/, $cp_config->{'dormant_services'} }; $tweak_conf->{'dormant_services'}{'value'} = sub { {} }; $cp_config->{'phploader'} = { map { $_ => 1 } split( /,/, $cp_config->{'phploader'} ) }; # Walk all the actions. foreach my $key ( cpanel_config_actions() ) { next if ( !exists $cp_config->{$key} ); next if ( !$tweak_conf->{$key} ); next if ( ref $tweak_conf->{$key}->{'action'} ne 'CODE' ); DEBUG("Running defined action for cpanel.config key $key"); $tweak_conf->{$key}->{'action'}->( $cp_config->{$key} ); } # Walk all the post actions. foreach my $key ( cpanel_config_post_actions() ) { next if ( !exists $cp_config->{$key} ); next if ( !$tweak_conf->{$key} ); next if ( ref $tweak_conf->{$key}->{'post_action'} ne 'CODE' ); DEBUG("Running defined post_action for cpanel.config key $key"); $tweak_conf->{$key}->{'post_action'}->( $cp_config->{$key}, undef, 1 ); } return; } sub _run_in_background ( $code, $desc = '' ) { if ($run_tasks_in_main_process) { # fork and wait for the job: do not leak anything to the main processs... return _run_and_wait_in_background( $code, $desc ); } return __fork_and_run( $code, $desc ); } sub _run_and_wait_in_background ( $code, $desc = '', %opts ) { my $pid = __fork_and_run( $code, $desc ) or return; return _wait_for_background_pids( { $pid => 1 }, %opts ); } sub __fork_and_run ( $code, $desc = '' ) { my $pid = Cpanel::ForkAsync::do_in_child( sub { local $0 = "cpanel_initial_install - $desc"; my $status = $code->() // 0; return $status; } ); $background_pids{$pid} = $desc; return $pid; } sub _wait_for_background_tasks_to_finish (@pids) { return 1 unless scalar @pids; my %pids_to_check = map { $_ => 1 } @pids; while (1) { last unless _wait_for_background_pids( \%pids_to_check ); my $total_pids = scalar keys %pids_to_check; last unless $total_pids; _show_wait_for("$total_pids background tasks"); Cpanel::TimeHiRes::sleep(0.25); } return 1; } sub _wait_for_background_pids ( $pids_to_check_hr, %opts ) { return 1 if $run_tasks_in_main_process; my @pids = sort keys %$pids_to_check_hr; return unless scalar @pids; # nothing to wait for DEBUG("_wait_for_background_pids: @pids"); $opts{stop_on_failure} //= 1; # default my $stop_on_failure = delete $opts{stop_on_failure}; FATAL( "Unknown arguments: " . join( ', ', sort keys %opts ) ) if scalar keys %opts; foreach my $pid (@pids) { my $waitpid_result = waitpid( $pid, $Cpanel::Wait::Constants::WNOHANG ); if ( $waitpid_result != 0 ) { if ( $waitpid_result > 0 ) { # -1 means its already dead and $? is not set my $exit_code = $?; if ( $exit_code != 0 ) { my $child_error_msg = Cpanel::ChildErrorStringifier->new($?)->autopsy(); my $error_type = $stop_on_failure ? 'a fatal error' : 'a warning'; my $msg = "The background process “$background_pids{$pid}” failed with $error_type: $child_error_msg"; if ($stop_on_failure) { kill 'TERM', keys %background_pids; FATAL($msg); } else { WARN($msg); } } } DEBUG("Process: $pid - $background_pids{$pid} has finished."); delete $background_pids{$pid}; delete $pids_to_check_hr->{$pid}; } } return 1; } # taken from actual installer, supports argv[0] being a path to a custom file (for testing) sub _get_total_memory { # MemTotal: Total usable ram (i.e. physical ram minus a few reserved # bits and the kernel binary code) my $meminfo = $_[0] || '/proc/meminfo'; if ( open( my $fh, "<", $meminfo ) ) { while ( my $line = readline $fh ) { if ( $line =~ m{^MemTotal:\s+([0-9]+)\s*kB}i ) { return int( $1 / 1_024 ); } } } return 0; # something is wrong } # If a server has 2GB+ ram, we now enable PHP-FPM by default for new accounts sub set_up_php_fpm_by_default { if ( _get_total_memory() >= 2_048 ) { mkdir '/var/cpanel', 0755; chmod 0755, '/var/cpanel'; # safety mkdir '/var/cpanel/ApachePHPFPM', 0755; chmod 0755, '/var/cpanel/ApachePHPFPM'; # safety require Cpanel::PHPFPM::Config; my $touchfile = $Cpanel::PHPFPM::Config::touch_file_default_accounts_to_fpm || $Cpanel::PHPFPM::Config::touch_file_default_accounts_to_fpm or die; # no warnings Cpanel::FileUtils::TouchFile::touchfile($touchfile); } { # enforce the creation of /var/cpanel/php-fpm.d require Cpanel::Server::FPM::Manager; local $@; eval { Cpanel::Server::FPM::Manager::sync_config_files(); } or warn $@; } # customer decides in feature showcase Cpanel::Chkservd::Manage::disable('cpanel_php_fpm'); Whostmgr::Services::disable('cpanel_php_fpm'); return; } sub _setup_dns_and_dkim { { require Whostmgr::ACLS; require Whostmgr::Hostname::DNS; local $ENV{'REMOTE_USER'} = 'root'; Whostmgr::ACLS::init_acls(); my ( $status, $statusmsg, $statuscode ) = Whostmgr::Hostname::DNS::ensure_dns_for_hostname(); Whostmgr::ACLS::clear_acls(); if ( !$status && $statuscode && $statuscode == Cpanel::DnsUtils::Add::STATUS_NO_NSS_CONFD() ) { # If there are no nameservers setup this will fail # and that is expected. In this case the hostname # change will triger the A entry and DKIM # add via Whostmgr::Hostname return; } warn $statusmsg if !$status && length $statusmsg; } { require Cpanel::DKIM; require Cpanel::Hostname; my $hostname = Cpanel::Hostname::gethostname(1); if ( !Cpanel::DKIM::get_domain_private_key($hostname) ) { require Cpanel::DKIM::Transaction; my $dkim = Cpanel::DKIM::Transaction->new(); # We do not care about failures here since # we expect they won't control DNS most of # the time for the hostname. $dkim->set_up_user_domains( 'root', [$hostname] ); $dkim->commit(); } } return; } sub run_final_tasks_in_background_that_can_be_done_later_if_shutdown_now { return Cpanel::Daemonizer::Tiny::run_as_daemon( sub { local $ENV{CPANEL_BASE_INSTALL} = 0; open( STDERR, '>>', '/usr/local/cpanel/logs/error_log' ) or die "Could not redirect STDERR to /usr/local/cpanel/logs/error_log: $!"; open( STDOUT, '>&=', \*STDERR ); ## no critic(InputOutput::RequireCheckedOpen) Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/restartsrv_cpsrvd}); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/restartsrv_queueprocd}); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/restartsrv_apache_php_fpm}); say "[$$] Flushing task queue."; system(qw{/usr/local/cpanel/bin/servers_queue run}); say "[$$] Completed flushing task queue."; # This will keep the “cpcleartaskqueue” pseudo-service # “active”, which means it’ll still cause a clear of task queue # on the next (first) system shutdown, but subsequent shutdowns # won’t be affected. Cpanel::Install::Utils::Command::ssystem( '/usr/bin/systemctl', 'disable', 'cpcleartaskqueue' ); say "[$$] Done."; return; } ); } sub _run_tasks_that_must_wait_until_deferred_are_installed { return _run_in_background( sub { # Enable services for startup. # TODO: Add chkconfig to RPM spec entries and remove this code. my @services = qw/cpanel sshd nscd/; INFO('Adding services to startup.'); foreach my $service (@services) { INFO(" - Enabling $service"); Cpanel::Init::Simple::call_cpservice_with( $service => qw/enable/ ); } # enable cphulkd by default enable_cphulkd(); # enable quotas by default except on DNSONLY systems enable_quotas() unless Cpanel::Server::Type::is_dnsonly(); INFO("Automatically enabling features"); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/ensure_autoenabled_features --run}); # mark features as shown, so no feature showcase is # seen on new installs hide_feature_showcase(); # This does not need MySQL to be installed yet INFO("Update phpMyAdmin configuration"); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/bin/update_phpmyadmin_config --force}); # do roundcube finishing touches # run_roundcube_ifnecessary(); # deferred Exim RPM installation overwrote changes to /etc/sysconfig/exim, so restore those: require Whostmgr::Exim::Sysconfig; my $cp_config = scalar Cpanel::Config::LoadCpConf::loadcpconf(); Whostmgr::Exim::Sysconfig::update_sysconfig( $cp_config->{'exim-retrytime'} ) if defined $cp_config->{'exim-retrytime'}; # Setup cPanelID setup_openidconnect_for_cpanelid(); return 0; }, "Apps that require deferred packages" ); } sub _run_webserver_post_install_and_ssl_cert_check_in_background { return _run_in_background( sub { # We Start cpsrvd and httpd because there may be a license type change in the middle # of the install # # If the WebServer is disabled then checkallsslcerts will be doing HTTP DCV with cpsrvd Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/restartsrv_cpsrvd --force}); # If the WebServer is not disabled then checkallsslcerts will be doing HTTP DCV with httpd Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/restartsrv_httpd --force}); # Since we wait for the apache install to finish # we do this after _wait_for_background_tasks_to_finish on $ea4_or_universal_hooks_install_pid # Enable PHP-FPM by default for new accounts on systems with 2GB+ ram set_up_php_fpm_by_default(); # Now that apache is up we can try to get an ssl certificate Cpanel::Install::LetsEncrypt::install_and_activate(); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/bin/checkallsslcerts --allow-retry --verbose}); # Try again to get an ssl certificate to decrease the chances that # their first WHM login is to an insecure page. warn if !eval { Cpanel::ServerTasks::schedule_task( ['ScriptTasks'], 1, 'run_script /usr/local/cpanel/bin/checkallsslcerts --allow-retry --verbose' ); 1 }; # sanity fix existing zones on the server warn if !eval { Cpanel::ServerTasks::schedule_task( ['ScriptTasks'], 1, 'run_script /usr/local/cpanel/scripts/fix_dns_zone_ttls --fix' ); 1 }; return 0; }, 'WebServer post install and SSL certificate check' ); } sub _run_tasks_that_can_be_done_after_updatenow_in_the_background { return _run_in_background( sub { DEBUG("Starting tasks_that_can_be_done_after_updatenow_in_the_background"); # We do these in a background on initial install # while we are waiting for upcp my @pre_maint = ( # CPANEL-26289: ensure en is available right away after install finishes ['/usr/local/cpanel/bin/hulkdsetup'], [ '/usr/local/cpanel/bin/build_locale_databases', '--locale=en' ], [ '/usr/local/cpanel/scripts/autorepair', 'autorepair' ], [ '/usr/local/cpanel/scripts/manage_greylisting', '--init', '--update_common_mail_providers' ], ['/usr/local/cpanel/bin/setupdbmap'], [ '/usr/local/cpanel/scripts/check_maxmem_against_domains_count', '--always-fix' ], ['/usr/local/cpanel/scripts/fixetchosts'], [ '/usr/local/cpanel/scripts/litespeed-check', '--run' ], [qw{/usr/local/cpanel/bin/install-login-profile --install cpanel-user-commands}], ); foreach my $cmd (@pre_maint) { DEBUG("Task after updatenow: @$cmd"); Cpanel::Install::Utils::Command::ssystem(@$cmd); } for my $cmd ( 'migrate_tweak_settings', 'legacy_cfg_installer', 'register_hooks', 'build_userdata_cache', ) { DEBUG("Task after updatenow: $cmd"); Cpanel::Install::Utils::Command::ssystem("/usr/local/cpanel/bin/$cmd"); } my $eximdb_run = Cpanel::SafeRun::Object->new( program => $^X, args => [ '-MCpanel::EximStats::ConnectDB', '-e' => 'Cpanel::EximStats::ConnectDB::dbconnect()', ], stdout => \*STDOUT, stderr => \*STDERR, ); warn $eximdb_run->autopsy() if $eximdb_run->CHILD_ERROR(); return 0; }, 'Background install tasks', ); } sub _setup_horde_if_needed { # nothing to do for a dnsonly server return if Cpanel::Server::Type::is_dnsonly(); # If the Horde RPMs are not installed, then update_horde_config serves no purpose and will fail my $horde_settings = Cpanel::RPM::Versions::File->new()->target_settings("horde") || ''; return if $horde_settings eq 'uninstalled'; # Make sure conf.php is updated for SQLite and that every cPanel user on the system has a Horde database. Cpanel::Install::Utils::Command::ssystem('/usr/local/cpanel/bin/update_horde_config'); return 0; } # We do not want to start the yum install of MySQL until cPanel has # started installing RPMs because as soon as yum gets the lock it will # block the rpm install which will defeat the performance improvement of # downloading rpms via yum while rpm is installing the cPanel provided rpms # # We also do not want to start the yum install until the background download # has finished in order to ensure we do not end up downloading the rpms 2x # because the background download was not yet finished sub _wait_for_mysql_to_be_downloaded { while (1) { if ( -e $mysql_rpm_download_complete_file ) { unlink $mysql_rpm_download_complete_file; return; } _show_wait_for("MySQL package download to begin installing packages"); last unless _wait_for_background_pids( {%background_pids} ); Cpanel::TimeHiRes::sleep(0.25); } return; } sub _wait_for_ea4_profiles_to_be_installed { while (1) { _show_wait_for("EA4 profiles to be installed"); last unless _wait_for_background_pids( {%background_pids} ); return if -s "/usr/local/bin/ea_install_profile"; Cpanel::TimeHiRes::sleep(0.25); } return 1; } sub _wait_for_ea4_to_be_installed { while (1) { return if -s "/usr/sbin/httpd"; _show_wait_for("EA4 to be installed"); last unless _wait_for_background_pids( {%background_pids} ); Cpanel::TimeHiRes::sleep(0.25); } return 1; } sub _show_wait_for ( $blocking_proc_text = undef ) { state $last_message; state $last_time; if ( $blocking_proc_text && $last_message && $last_message eq $blocking_proc_text ) { return if time() - $last_time < 30; # only display every 30 sec the same message... } $last_message = $blocking_proc_text; $last_time = time(); INFO( "Waiting for (" . join( ', ', ( $blocking_proc_text ? "[$blocking_proc_text]" : () ), sort values %background_pids ) . ")." ); return; } sub _shutdown_cpanel_services { INFO("Making sure cPanel processes are not running"); # If the cpsrvd binary isn't in place we haven't installed # binaries yet so there is no need to proceed. return if !-e '/usr/local/cpanel/cpsrvd'; foreach my $app (qw(cpsrvd cpdavd cphulkd)) { if ( Cpanel::Services::Running::is_online($app) ) { Cpanel::Install::Utils::Command::ssystem( '/usr/local/cpanel/etc/init/stop' . $app ); } } return; } sub _install_yum_universal_hooks_in_background { #On DNSONLY we need EA4's yum-universal-plugins package to fix mysql, etc. # return _run_in_background( sub { # XXX TODO following short circuit will be removed later once we have EA4 sorted for ubuntu return 0 unless Cpanel::OS::is_yum_based(); INFO("Installing YUM universal hooks..."); if ( !Cpanel::Install::Utils::Packaged::install_needed_packages('yum-plugin-universal-hooks') ) { FATAL("Failed to install “yum-plugin-universal-hooks”"); } return 0; }, 'Install YUM universal hooks' ); } sub _install_ea4_in_background { return _run_in_background( sub { INFO("Installing EA4"); Cpanel::Install::EA4::setup_config_and_fs_for_ea4(); if ( !Cpanel::Install::EA4::install_apache() ) { FATAL("Failed to install EA4"); } return 0; }, 'EA4 Install', ); } sub _defer_targets { my $rpm_file = Cpanel::RPM::Versions::File->new(); foreach my $target ( keys %targets_to_defer_to_after_first_upcp ) { my $value = $rpm_file->target_settings($target) || ''; if ( $value ne 'uninstalled' ) { $targets_to_defer_to_after_first_upcp{$target} = 1; INFO("Marking $target to be uninstalled"); $rpm_file->set_target_settings( { 'key' => [$target], 'value' => 'uninstalled' } ); } else { INFO("$target is already set to uninstalled ($value)"); } } $rpm_file->save(); return; } sub _install_deferred_targets { my $rpm_file = Cpanel::RPM::Versions::File->new(); my $has_targets_to_install = 0; foreach my $target ( keys %targets_to_defer_to_after_first_upcp ) { if ( $targets_to_defer_to_after_first_upcp{$target} ) { $has_targets_to_install = 1; $rpm_file->delete_target_settings( { 'key' => [$target], 'value' => 'uninstalled' } ); } } if ($has_targets_to_install) { $rpm_file->save(); undef $rpm_file; INFO("Installing deferred targets"); Cpanel::Install::Utils::Command::ssystem(qw{/usr/local/cpanel/scripts/check_cpanel_pkgs --fix --no-broken --no-digest}); } return; } 1;