PK1\;0WWWscreenshot-2.pngnuW+APNG  IHDR Ԧ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx 0@AW|y.cP8TCo7a:  `*؅zPǖ ;D*EJ]Tswo yE&S =gmTȐ!=Lm*RIg$ ~Jj:˚)m P۰k?@ѷ2L<EQZ,5r`o*5a Krv`2c j< W*\RS!`hqcd*XS5]A8D֨5YU(5b (EBQ(ݪF$M$*\օ?+#[_-w~w,E)7Jց{o73B՞T]bS%>3wґL=!qMvOnGgj7`N`ةL0 SYlH`vrb=0t SL0TPkҘ·8yb2*ğ`*hTk25e.Lm8kn*)0gTYɮ̘aJLl&s􉬇=j7 SKYxjG\O0>A//7'MuS/`3"Gir3 J0\ XM絚d&?-~@jQ\275zƇo;okԴ#Sjb .k hu0О7ܨS9'STp0mr @8swfiR#Qst5N0p; Q[y5]?F.3~z1vi̽]O'\a.$nm2Hyi5r΄)z898` `ZwjSm,a'mTȨQuty;Kj;Pm$UUjd2* <\uI}[r>|Ekq%ˀV_5|iMh mՂsǙ\6y$=`UVxh]mp:NcG+4rjQk~c*H=Sgf]BX|Q kmr5l U|҈n}~H pF`TQ`T=`xrN까M^K_m$ `QS,*}B|{ R@s1h4UdϨ @FٌNToGLL{hdT@F]4z,gdo[X&\ڨVm\Du--m9ñ`TQˌ֫L%k8 ^}|y}'|z/Ϩ  me ;붲nmY.۬ovZ{%f3*P 0jkF+~3O4FQ3fjgϤc <#q Q,3* `Qk}8-v=j7 0* Q|ʨ]M8i~;F^ۿ|7λS0*/2Ϣ+^^ޯOǗcɧ8Nu.^ݓ&-oF!%1CkߐQFmfJvH`T{2jV)Nl9dT0*o1*FWV} j;PmT `Q!gc?$jZHqU1~'^%'Ԧa]E!ϫG2*FmmTQϨcmtFͨH[納}^r=W鐿蜵06g|^M8A6*F=`+ir:F( t'(MO9r tЧ7* Qe24}hT4*QШH\{tSԖt+K;\$h:sJ>YYuQ7lxn"QɵRK+Q 2zW7ҫ@ߢ(\7ŧ^P`y_ *]*LSmy+nܳG 8UD{ev{rTs<2̸σs=d5Zf;#%K%z:vmU]տ <ZZ=7:E1q$On o ֨@FGjTwP 6a!149\{f42`7F}[{FP* hol/kkhT杏AѬMK>9Ѫ|FS=W1;~&ۜCҨ?c0*kpi"e[7m;^[c]+UGAs )/:wauۋ9 5ZG站_'uZu GjTgQK)Ğ Vꎩn^jrOaOר#t;&䎅vGQ_7m{@>o냕:Qm6G4QZw jNvdҚ߸f>Hyv+=ӾlJ1NdpT7K2߫_*zFq\IG⩸e(۔Ql<=ɣGIժش!{[ +<эwVekmȖf+{yT}-*Ǩmg9l2w0Cl jW->* p2M_{iU$3{3jzvը&QbI`8v/GiPYGT[^ШFzmsn}Ln*ܣ>y#nA}Οkcm3rަi60IS3oՌ9˙ѣc&ΎN(-Yrʮ2Wz9>${|w^]#gLN̞uG7[yv;Dzw9#CA<#5pUygd{3ҙ@ggDŹD-RmH}[amQ\*VےL┕~\7<ʊ_"WMhT*0T4XV=Ύ}q@l#rja[(/IHj\.XF7V=V~2AڒxUG G+JZR( փD~FrcR?r`|$%>`zPsuytϕ FRy[or4FF_~ШQLRm~4*A Q(*noio}􋉟[fW )X=Kw$%)lK2b~llQegR{[E>6d-zs.&ot䝎Q Z[Y'ID9}F֣w[ ^UE1ɳUe~_ 80`UYF}g%dWӗzFxju+jT4*< a6-"U;Fֵ_nL9Kr`0;E"m3x=gҨKz#ωAp FGjTAQ d5ӨJ[F]r:@aQ5;o&7j`w-wʿJUO/W PM`: Lȡp*8$֡ ^ƌ#heV?hkOo2efxq@ި8\@<ѨX)C\, Zq ݦnDVxrﴄ=ZnMp(B)+|]_o Csײ9m;j,f'lo~-1iZc_G|~:-_[USKMdin 9Ω3w[`>f6iɬm싦v6xfyN爴x+hΈFt>zLp.o,l,Wϟ#q޶d9lGH{ _e9ԯύݽBjڕ+o˝m|$9T^p#QP| N3L TG]5oo7_ɖ̬o,4e }H(5VK79~k@dr&5A:.8  ހJ *_1uguxӧ9o$Xٰ]UԿ 1=9 OMw l+[2.svx%lKP}4z۹U8ezTm7;qC O Zff}򅥧 iya>i׋m+__kśr~,]7W2G{]}T䲌lֿ2eVYfsl׫نgepTar[wN~ȡp*P{ ހDP+9TBcicʮ2ןU>?UJʔF5?hzi>˧KSݙ럪+9j~.kp P*Ty%=gZ4mmӢPd񘮙rJb a/j&5,$ i-tІpqpn#eAIjl |,ke/c}H%k2U=p޶u=>^9^Y-sj< d>89T̤eC-WUo5Kߴ&vm5ͺMvv^)G nʵluhKV~uHf:躭նM[e{Sg>HSg ]Ns%:ONkwuXi>?mReZ`?{O x1wLr~ /ϡp)DӯP*s,My.P֨͡Y{ }L^<\9TNB?]K2SsswYLPJWӠq'+-eyp:aG7V73Lhq"7hbݨo/%uvsXlz6UQ׹_۶e66e>;2^S~{?>:w24e7ۘYse265|~K ƪmI<dڵN6w49N7j]?VoEw>M, 39ֱ7g3v0s޶dƕmBB0j.δyzo#{66۫.7h.Ӵ꘺G/4bNjfxAO& ~P8=1~w=5̮=M&˷o 2]̏yO9q>w~Tx٥9ԝ+*7O WV0 ˈU*r|  Ǎw辛*\VW/SfnT/|iNW/za B4M ao[tk%fzkfiOu }M[m9 y%l;9f]KȬ?6}̛I>~^4L-Sx[V9_ >k^svfCV(r_c~k׿涼W|G%0J.@! ~ix9!6?>]Ypn[#ٲu`̓:r WHr g t{̏ .is H]L؄&H6{0RQ_1u`[ڌO*CCP'PuToո~~bWG?32SKB|'!x6aWxYm~5 8i,:fVY~ʙzxoee=nxX_ެ=u7mش۶ ! P8>C\ȳil^&^[7q~ivQεz9%LyO7?Yl=*]9yVkvpRySLL-VQ"s5QjN/M;l}$gn`n;d_GsZՍ\2/-G曭Om^{LZ9_t5pЗ7n kӫ{O,oC]nSǩ`œe7i.VqVU6Bv>l}X-7}ӶFAuf>psF8s?`G! P8>9-_ru֙cf_j6a6j$חߖ*lhTr! أsɳnɡ~||D]7TŇ9Fn+gSg y^^~[FO{[bf̯o3-W^0c/%C.6yrnO.6.&n;#p+T HژCMQOߔF'^k\Ҳ5󯙱31yy% >{\z9Ե3rU k_ڙڊYf{_Wa.~Ll.J{jGguCM;?oS*$C&E~WPzV\ U>ZRvVyffnZ,?ki.LtsFBI=4֛M״w_&|x2hyŖ9ʌ(/^r lGPq}O><-IB_#|=CKfΑ9et插Vq[1S[P*.*\p[P  P# W`c@mgvBmk A]j`@Λ{hj>yi-ygY7eWF2s=~oSC,Ro3ʚpҥ9T# ˡ>r[rIAȡpp@=9*z t_O jsgXs"L{&۶k{T69>P?>>t7O[.}L_u5?ܞ~R}໵yeϒ_]YOl/"65R<YMorx{{=S/浉ȡWM±|36{<7\*z%Su5^@HY\5r| Ը*O=oˣ,[wۃ%#{l˗k`^ ~-Ӳ\ƜoYK1sMÛO9;L:nn]CV:.}C`|ys{~5̏M[V培/_ .!:n`Lx" W`|@mCҨј5!Zoޚ9`G- L' kNQG$X|fU9s,ie|\R/'Yaȡp-_0 C+T?rp {T=~Cl }1nBif#bu)_! yWJ?T*9TNBtͻcuTL12+z|ozWk=r]-oMӿe64žu2ݢ~w nPeqb>M%/^畖i Qamfvف:~.vo2Ǖyl6vZu|[Qv;vN1~w4MBC*μJRm2xMN$rcR*j'.jx \ 9-PPxws6+,kzm-Skjf,_ka.)ޕo>M_1\R^'sK; 0I\`H={Ke;W&lNve?S~V)<w횃yݶ88=K_4ÿtnX^Kze:'Y{e]7{N7W 7h jf6jqt{1ywnq-]mGヘGmyw] zC+TOk)u\9=K=ZQyy)nL"A-6S/XM_X-Ȓ7|s[ ʟZz]eKWs4h*+h 57T cJZԍ)sS UG˯UVcUb/C{_ۗ@P ;֔rPv7ԏk * pqA |UU+~ %D)**İA@P/q<5!u]9/4gjYJ/P=M=5wV5L۶RsZ׿G5s7aGψGzi{n>^]}`OI^ݗ#(O3Lϳ`ӫ=~g'j0s&_MR仾 9m[UPYKUsM91'8vwc=<)>0C&_$8I,D> o5I>1PRxkw0 {(l R֤PQu Mo/[f^ձ^]ڡtesV6J2߻_RNQ27VL'buh=y\뺼{?~7ǒIW6\\P=*Q,{.t!'NA |g 1@PT 3};B^$puAبGL N=tV %4sa8s<5[ u_ԃqIk)lDJYP(©B8 UГ,XpQA94#`﹠* Te?βFd#4ʇrv'yάM;+#̧Sqg=s>9σ8Cix;K{+{hΙ}ňXNoL][_qJDkMm\J6zs[]y6egIN!+ؿy۶s^ݽ*Fnݛ`[Y5[αckcmbSWzn`#[ͫK\G=m6 ,w2ûUjWj'}Gݹ]@ݽ^Y FMm+O{U>^]4-ۍ7b#K߶kj^Pq{--аw'xD.3.C>HQ;IE̶yiS8_2= `lNoT":^}izP~ffXM yۼgXKSt3yo۸.\/yM{2[3bށ㌇U)K<“ihc?p]`g@PmA^և p5:Ck} V3T`UP`8s * p'A|'QÍMo@P4N׉@Mk@`tY1mLݯc& W* *5u@Xqg\yۧ^d/EYdLKf2:r;޾:4;moxrK.meo]V4:Q2`RSptL"%+w"FѦ2(l[<,VN*μ{}US'M#Qs;e:VwYYs-6 ]?ʹ.̽+;v@Dԫ~zl+?,+}igZw۶۞r6 C}VO"U=5UKO=mPMO_+ڰY''˘w__1.k_ g }+]ӊbf^H64rjUiy&ͷ1L.T}mu/̜.kt(3 Hdﭯ lkPf2}Z+r3f"p!A-^4PT C]~e v@Ab~y|60V *5@VP*/vP`{|ṘU* pAN/c}LI㱮c9+60GP,Mmj@QM6)BSQm?zg68eW&Ջf}*.E*4N/brCJkyN1F_X; UJN 嶩ibcJ#E/B sw]h`OU炚 \DP7l *`:џ:Y:N;7Odyʂ|dO.TٚmV-2cE4T.qyuMlan?TQ_nuJ;5`ɻ4;$ێ/'hM7w)1hGqwiaEU2W;OabyvDN}Kjzvw]xu-Oxo>C="x3ݻ;;~9y; p}AmP6,ֵ2E· @JPc*H9CA@P+W/cϬ<ZÉ/ ɬ˝jԋ4026g/T΂ZJl(O8SIu;rec?G*@IVP43 37X=%SOe>Apc\|C.R*jjŲ_>_//cѳQ%3ݺ]ձ{ #=~\CAx6PT q*GPahZQTU* pA|G"ПІCI|e*5Z[8jQS!dտ˄ީ~٫lk CwkËm-eȇB-#1P尾m[Un~s-;wށAAx^mRxjQ*rv{ԛVT$UiM6=I%- ʨ]sL d2U (g9ëxC3>S{dA!]fftjp&4)p.mvWՎuOf(=&iS459ʡk6Z+*}$[*ҜjMhn#iRoQ*}6jP?ǚRM&6kHh1SNyeO3 @vWB8TO pw6ta;]PC-tgWyR=>jz׿F uo\~aC>mQR*j.W׆6c>GQMi+ 84˧{/~::F@wjG*ϱk~^֟zN_[- %{d}d!Gc&䏍Sv}rkL;pN_?A<ԗP텯Pjj|UT{ږx{Jmӫgϒ*zmOhxKHUnV-K޵;bFǪVr vه޷%~k-_El_#xѭ1c}v"/ \r>WH~ C-NY{Wcl<,dGvvͮygX5.zȰu4M~~ǠPˤmyvƫmͻ6G=C} nѾ OYJPA2O[sJԥt ^«bvEUfx8]CѾ7MxpVUn'9C-Z~]MU]_/")kf:U ^e~.AH1nkϫnYSzP3QDnqWp=v\5A4CMN^9UNjKU Ǫ;*%z=,?fǖ!.'nP$d*1. ܪavTY+f^C9kT//g378q>T  pC W  0~aF77^۔j( `\r5%UƭƕeWDDI Qul^&T.N 0.yBqN 3V8i]oDd3ԢW=?}ZoHdzliMmb+ƙZLyi". _PCz>T"at*A@P/ʁj7/ʇʲ^=8>T\"*A@P>BPw]׺Xjc u l3RD򨦚G8KDZsCi)"Z>]7,۶Cl_*"N% US}mp_n|4Vgsy^~OՁeg r3Z\‡aA&mAzB C%3Wb5* 3T@PT; 3} }:Ux[fi whby'qJ<NjRJq*cOMoʯrMJPKTVʡvs9?%6)z+ p TNjv{\yRgnۣ>%RVѫ%';I.ﺻMd?dM%:k ,?uҨb+T(zSnϥPnS{jIsut)ԶUNJv2y0],kG,N&xv;ځ;~&f6* ;$>Z_wj>(/>k&nk|<=1:s3&};h.4~rx2Û UZnsի<$-wz+ڟ4)LT?GM'8df/Xfx71 l3*zyzjzxKA-y^" }z6Kض(4[ j.^^j[I <^>uP*l5  MVMm듺nyDD0۝MV^>l3rZ*_S^7}o+qcҭ*JM)Zm-\NP AAm.H'L+]z^d/Y+Ԧmo턱Ri-~^aIEgԓ )Aˆxr[y*i m'R5LnxoP>TYzԸ0Hf0 =>Caċ7iV76XC9Tq *AAl3*$*]` /u`8s * VTCxUu";ҫBgJTDpȼAbݶFT+UY1ȂyKZ56QO$n(U@ (kXVU|S}o(A)HC32z7pS֮۟mGߋ]] @Y4zA]P:CFͷ~;W{|F)C*\M1tlC}G~2+m=vmr_g~*})3ɞT:}^k>5o]l.՘m?2WJՓ:WPԌfA/YumbEfA5F>kOvkΰmwm϶ }+C u^ wqO5{q j:*jZw> _$Wj.\߫et .7p@I&`Ce>g jT+*>Ԡ,Rx3A|ʓz}uʇ !M6}|i>T&PG|f `O$wsmԛ̿皂eyv}?ak8>8^sqߍ uCmVҎi򑦚I7sxoHi۸elY!slo5]ۆq]|mso{f3ھ@3Qins'*sK^wo2q N괥[K-2;;?H+\R%dn-tpG'Qw}=p_q㾛OP+<5$rJf=Ӟk~.l9m<۱h\2wmySC}5O2OQC>T9ȳ~6w|? .F1T>w7fl3⹱]1}w~L E5UҍYFxKkh q{Mv 2 uc$Z僱Bm/c WaPZ 8ß4EqzTP3V*4Tp'>̓:ʃ @ݑyPKNA`O|BM^i]&*)P@ \u}O׏cO!3Zl|/|vzy5߫j6; 0.mZׅiZ_|4Fa,z-<-9,j}o,|>HWsVz{/UnUS|s3@IZgpaz9y3 8KQk%݌Ҁ06_GEm.__W-*ZS`>{T_yP͕jw}@siS˟jFFlwmv *߉I/)=)P@ x KorS|]>:9w} ׍=Emqcqlyvy縿^Gc7 ρroQ7>$)LSI3J3Di 9v">hX^/oEd~0}+z7,^EaL ψg`<,ey{}*}Nk84m#ZZƟiZNwG[DQ7f= "qQ˒1+LV+go-/.WyAP7hcY jD"R6I3-x/Tp+A7-]gYxDosqi<wzn vh/t 6zʈQ#>p|KO]_ouܶ*Ftgs~N9*p7j-? @= !tl'#j,O/0rlۋ '˟SjWoo9Fiae"8>{F<^G3t?7:6krlPC!iwsF;>p͏gzH=/jg@ \5}eyPxA-}WApX:Ut @43܂ @*rEeV󼾾/~>y2ߢIyP"b'*X4 j_x>86Z%lS]KdG u-?\9.*VgV%L[g.lֿnUyPo@<%>\(pLR9[l4jFX)EQPHöeah9/?-3 n(7dkv } F~} Q$7<@4ff咽O[wAӦH{nw&+7Eu=KF+AQ<+__ޞ @@ v?8_K[7?Otߗ$&Y7sgWeۧ[T?Ƈô![zwԹg4K{x.e|9jq%p}tdn9niggXWH5Lca)R[,aħ~&isru]3Y[ִŇ.]};Ko}GƎ{{eOkWOKW\-vK@i18J攛5ճT~}J+[q?7;@K-gys׸u05^ {=Cה46OJח]|sf۰}ٍ[&Ogi)zz!:ingFǚh)|>2L-LHQoȑ IzfԝȿlD~avPztzelv=0GZ6zk,(]E5\-y5ֳ7w=ޣvqlrً룎=[1Pt#4zwlEG-ic@ WxљxEz%<)ݬH0F7 J_~[u[w#3MfzTYO*pz  @T6@[<pi: EUSpJ _ @< `t3\\lMέ_^׳TN=wixu ߿5lX4 Y[([uݺsϖ+eG Ͷgа"U8:@>=]#H1 ?|>wK˻:?6_q |>[~:miO]n:@̓ZYǘ>h~Zʿ$65>̩;./m7jJ-=#Uw|jݯG joԁq̖0zD<xyoUi9aiÒK/g/'|pa¥uZUȲF#h [iVljҥ.OŲl^@D-VзeCr\v`ԧZSBW;onwS;@aT9kKTBo?#]loϱZ[Ʊ=i|͋L~ RuE;>@9gn{vm=v* C?/ʃ]; dLxӛTs:]]:Kd3wY;K|cܞkuzyd|Ѹ;+jv&cG<]Mޜ{8>o%oIWcϚ lp~^ ۩[ƐSIvl;KX5Z*E7?KHKyYgwoˢO+ߘ$ H+˧icyW{6+R~e[i)!YolQPYQ[niFdﶅ+_'^|[O~t*wI~y;uY?炚mR^'a(}RNJi1G-=]3 WuӞ oy|iNiw9^Zw?qL?C[9%+ޡ_bmֿ={竛SoJ@*|eci63~-L' ~RN)EH_x 6Fn@wDD韎NRs8be w4qw 0@TnajGs6׿³iZ'UMƷ|PM4LZzje幻OMN>wg&aR>kz.KJÏDŦ[٬Ov;y`95 ߿wPokOheIx{s 'Jel 7FBbmEV5 |<@͆Q5(Vp@ڒw9Tifx=O@ Tn<٧5JTA)uWAm _nߠ.Qdb.NTnS|[(jS3ǞB?>fx\_ܹӯjW3sHWs&o:,R,xhh. /V+l|.ly]/7qlnFPpuTue٢%a9fӸGU<''>D @*T.x/=}kOݮujrsT=i{<1۸2"|kqgD nr!nޢJIo|xlM&kϳyfsvv_z..k3Mu^2{X˟W+3RԖF7uݺοV% yJ[l9-^=?jZ֏ڏorڏ{e߹RmQR.ƭ6|O9-aOeQWڻ4uw*;n;d>3nt]ƺt|OO)v]7{ǫd[^TRֳT~}Jǫ:R]vu]#~}]W^k/qfjnFfEӅ{.WAtVZ>0=gg?^~.piitOVV.zvH8{9;.Fw=lx+Qzad :k`kn +ig){˻_GN/WxV QF7ZV3@]'ar^mLo7cxED Kw’ү[*'[T ^l^n?gg'}|Q\gii:9^6fʖEny3^3\:nhƙAmU?^qilHץydo *˳.Kvnv;+ճR~fo79| mW6J;o^z>2jzfλ$/UU|ޡ0>'ۺ[u= x-yPxUTwQ @ѕ5c<*YAuT8 @*2EÐH<׳?4M욋w|Jla`UnKKZj6*? p.ihnjiyj%:mGޘ](܋0E-Kbƨf0Y)g;^w/} T3~^OǻA:*O|x5.BnO|[(3yes}qVSwNsvx5򝆳'z|wn^Ug)-OKZ_,}Ng:5_W RO~U il.vHfgNl;:[pklx>4,OcX8KQA&wZ\s\BeyZ=Xl+[~Xk~e[b%VCG+ln[wσ;{[#( t,th}흁,u_ȋخJK;qVA~;6tGے[{Ww8T43PT4iO4f_;c)s凛`8fsԛQϘp"> ZOuGsR*(dL2`c3t\Um̫}](tjZmv] qgZN<Mrz4jc& ´n7hvy)oP$olnv+L7Q)?Ls!?gw^(R]29Eϛ0,ҹ.$ܯJ3_/W})ݞS7޻Gjzc#%SQ V5] Gy8Ji9ZuV} oF3F#uK!S)W;QzXNqw[G2Uz{U @ Gf*! ds̏Z1Xi(G}a>_Tiܗ'Tcx?V@ev;ue.)MyFIVSN͖^ԣK*J+AR*wQh55||Ai;MŇH7T?\ߗSg^'];Ks8ϯ=сOs:.vuscog#߷|?=%.ͦg(#]֧AtNd/x|5u>a5{N|~藆l7K^Q^ϔO0NI}aأz\?\ٗv+T{8+~py;7q~S9?|!8pW7lG,#Oz{ G oPA }yyݝn#C^[z!7]^?ȼ[~J{Z3f+Wh 6zzex|GPY>~yFM<{@ct+}qu~CcʯW%]ǥ~܇w? e}upmEy!/kuyY$O7˚./kx;nfi.oꊟ.7Niy*c P:S.CW֘OJ-~ﴱnRRZ~q6ֳt)`帔gS6~*aבWɷ;.;'{,e/zn @]@ \5zrkSI~^5[OWߥҞ`WǟÇ۟cS[\f5j6i%XPzRJ b)Kc>^I;_M/=Ͽl*j"WR_-ϩᡠ]>W#-Kv>Dw gfncL֛ƾkv<;_boaɩ4dX%S\uSfg|eYo^1Ҥ 6F!>jʿ*ef]T|/qiY9~;0[^O@/q,d2ZXY"#fsҨ^NL=*/p‰cK2SnN[ 3Z؛aj]ۭO5<_a!H<0jqio]ǷWqʿ:v9^;˞N['/ Jpۛ1{JǍv͑(/1'dۭl[Q<95/*GkWs^]WɿzhSO$?w /" T/. ` ~ۛu挸=[/=\m}-#̝"(( `i9 @I33P [zYZOcjpnUϩ?~ęe5:m'ťQ,E?ϒ&}J֗e#0­g>fQٕ|؞s9""UqۡV֮Ón(`ADp)yUyO jdһYZ~(tJNFO>w _K[ c6DJMQ}mVA;& 5[[lXN5.i\EahFa T6u9Q0geZ45K= iTϣʙ2T2܄ۭSۏKջ3F4T7-1j6ͽ  6-$(.RH6>-Tr*MU=e *N)T>43PyPpWAwxR#u 'H3-x/Tp+A]m̏ RR4+*u~ yPNTnO|Y#G7PçFO#E쨟g9;MÿQQ9oY߿1:|+ZR_~4Et Jiof#0V¿gׄv=,qϝwsTY*L{~ĜrtRHZGqSztVe掔/5 Oo9g|pQEdcyP׸4/ū뻥 J]h: GRDtvFGQPZ V;vir${>cR8 @cy/TjoHjfǛG/VYɃz$w _ @˃:gyT9{v*ܯ*mzy !-XC=]5Uʶp+>>7z$o屽w43{@cP|4-gsY3 qa%]3cg"jv6Ɯl,lN7č1,a-^Jmj `cq ρǷ C:p[Ufy |+VֿE"7ӿ7EG PK!Д:v|-Dw?6ou.|>y=@h'+Qh0:(M4J-onw֧K':kϓ'ٵp7{C#\L\ dI3yP5olǮ\(U> 6-#qE+ˤyVܧ4ͤt_<{?80߿ܧLjQ[yfo=%iJ#+:S^Gx?M7Kofo)RT<6-#w _ @Rzl ;״3|GwP ~aS}Ns`ޢJc{ks<lcܛw߾4_|}vtwDZT櫎Z<2C W$eoU+ o*}%l%:Zz'=mlTh/JZ{Cl9Gl+nB}ԧ7Un|?)u?WlZ+e6s{aʷss|s6>_ׯO.qfVV.p2΁vN*TqK +uYݬUc-+ +Uj=yw;OUUV jJ{;w{ۧs<. 7=)eZo5;JZwKJN䮥rZn!D۳I"Ji[NViٿ_;Xԥv?GoC4ɞwV+6P4֧/)*v\5j_~ٞn|o mĞ}vN@T^ OK@Tnaj!I뻥O}c sͳ MVr >p7m6վ-.-=1N(4|,a(Mt|KuˣJ.˳/}t3*?d{U[x}A]Ƅ{˒(LٌaЕ x@4xiCٕ3BDF z;g`7F;eRtF5fc~`)&l ;btQ8W *Qfܻ͖sYzs;H\P9ifnyvv_碴~ cl&GRN{w KionާYHK%;@.O5̋bgfr?%(M%JrR@Uí͢v[~eLWE|_ß\ T_ &k.̾U c'JxiZH{н>['5x)-xlnpF?M߽a4{sw<|ksh(: ξ}FMQPZ V;-_Rܯ-,(@ _ @˃ ?$i3OM74K\5ZPEyPA)P@ >ŷݳs_?ˋ- ak޷$ @>43"~6llSyڬseR=iȲt+l7~_n][i,)J^tH 9:xUy 㴴|xT¼eX#Ev|#KrTBrV4PD0Su+ze'@;}=6a*MV²d/l'ɖR>Sp-EĞ;.ٜ׳^~Whx8KE)K-ݰÃe|n xizoԧ^~-Ӗ/ףxO}#scS]˻itzy oHTVBƨtJ8:H4dCtj)}օ٨# 6Go@28LnJQGEܨdg-Sib7\|{#X?e{ghٯ+7QgfRɥ>Y/g -Őrҏw:.Cbqo~wjm_cMO߆t7Jc@x5<3:UU~{y`v)qN-wޯ{wܿ7=wUU;{?Yn7/֘<6@ \%A=g<NO331;SԱYt FSwGt P43PtTq>[5=IG=vܮ|{wsa~Wq\wo}|/O.ʃufRQkiFgXS?nTNu{-i6}roKǫK~#Cp~-}[y+hzfJ?r5FpG'cǷtg|=cۿkOSiSwC[W@~xq1`Zcm\\\vxr|]}j&Ե#|3Q 'F׀Udwd{Pcڣ߬xmq[͉ž>(DZ ^~}ոqiUv|hlriOb:X}˝:q?a O(Ϙ޹޹zwd'ԺیG ]WƑwdfJpφ[f {ΨF:Q~ؾ~'UΉd(p˷aCƇ=ɕFʛx5gJ}ᵳ>\w6o5ԏ{g5獇~u8qJ{:޹޹]px" o)ڧԸ;zF4;\@ \5zo{*ԖT>$@ I3(j˻]w?4Mz7σ:؛FKZ#u#p崄hF|< >(\cz3Z-r>8O@:CӁܧ-]嗽K3D76Yl@>U/Nif^_?4-zvIENDB`PK1\Dt˟assets/images/warning.pngnuW+APNG  IHDRH@ι pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxڄ @ E 7 ( قREb &!AS\O|ɒdnlT+B nޅ*p\~L# ($sβ lf)@ Db'&w v?P2_ IWxo'#"@ق1 g\p @D8!8'X BB6}?p)@"XHȐ .–N1~bx#!G,6#I-!-n . L !IMz 21,j/Cd @!UA 0j >ƾAOB!K`&u pR{{`I_ 9B7$| ZT2x P{>I|AS2sSY^@jG~\mjӻO=ΊoJ=܇LCձߖ;eA_sgrq;~ ̠csH:5za o̗; @g$ Vl=Ech-&l, $H ~iafᆮp3Ls/i֨ʣboƅ3p .NWi"6-psVn($Tr4/Bc ݼ]шZ5kh9RyT?!VJ2SPW$,263n)6qXPMX2&J;B1i. E-#YNPNk ` Lqp1ƁQ7Wy^70& : 1NFsiQh{{ I:|sTP?2sZ6(|PK _G[BV8ݲ[Z(b@@-.euV" 㼆 S6V2@kd@mP#U>Πok1=<k^i0Í |h\ ʀx-D C4~{$>w[uSHG4ϠfdEUUwLyD3ICp5e$W M9g9ˏW4/3 RFNd A0%Vk"o1%ϛ3}2by"6wH*o82 $x%D yWР UP"d pZqXD '7 {/u4݀:t3[J;ՙ4؎ڿkd"28{B]-c9<IENDB`PK1\&&assets/images/computer.pngnuW+APNG  IHDR/P pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F>IDATxZ]lޝp/ }kK-r#䉗>)y Q $SCEZKa+iRbT)?8>vgvw볍FM@usH\Zɽ#/*}O޵캦`ՊhjjP@c'O#F8Y!ĕ^ZRT ^w)ޭ "FWt:li* xd25#? xd2oDsss%q~aaaAUӧH$GGGz{{> !oƚ9ιIݍup8T*O)=bX?_9s\.qcvv N1V𣣣'&&H=tКv?j|y?y4[91 ?|: LNNdB`˷nf(EF466vQUslxr-8=xhmmmBUqsey?K@q99G0`_?w zbH{ UU}o`@km]cL!G$ 2肂7_x'@NMiΫh\ؖPԭ8 OUTUb8.de#SY6 ӂaR|3`glXi4`lXV,3q$kCYTJKAq`CisBt%D߁Mw)ׇf=W _<<\d_wa<^R[#o:;}>^dWj?zwп@޽X-sUUAch28ygx1/t;اOF<_b_N8F&*%xW0ܶm0`۶^3Ƽ{1G͛4qA)8E-hϟ?+H\6k( cEb'8.#XZ Ν;EcqMTc\~rEr|={ (eY޹X0]8@\K(yeɹz*>\А7кJuX] V?R'osi'}}FWW 9-. evpYpӲ,?~*SC)nb a YrtvuxZA '̍}&tiرcvTE{F"]===-XO4WHl4 Ν;+Pc~|i(N11+EӴB3g&*R%&ΞY^&'DW'd2y2,իWs/PEP"Ry d2rܪet̙ |:+D\cS7PPP?ۊx@QRGv̐7K-N 7w,JDaȑ#Ccc-(8~t____spK!3zm"Ώ~7gggavꜜ;whVWWqm Ν[Z__|ɗxfE)*U|l%s(e۠AQdݻ׳\0]qtUUJ*cqF<΃!gϞX^^F 022rD$9NUⴗVua8P% 򅉪u޼naaX ,#M|ϑg)$''ql&˹i4 Ѝ`A[t\e<|to]RÏ=ť=.]ŭ[^ _fZ!޽kM"n sG𮐈AHk*j6۲0m3%E;W~U +Z ҒMN `qqQJK,{^e0jD#ue)>>>zzzNԄ`0qAH$˲( @ c طolƃKqB!8`0~ܿ;e4J!HllDc}};ݩ!iՀ?}e20E"J?<9f @4B!/- eYRea׮]رcF E_~g5 ^FǍ xQ5][lBl@(V2 pC⚐6M Q%RJ XMPHRDQҠ$$H(jC8@b%Nx]:;Ӈ3ڬwĿdywv;'>T`oIA?XѶ\7i;b7{X紨6,cժUtRMV𱋜;vO,':[7kF94 ===|jX]KѼiz8 (d̶33A=2t=H5} BpqBg^5}qA////u;bh4ZE2(ysQ!Ź^SS#_̼bb5~NZ?ޘucٟTU.T4͂d.z)4 z˗6l؀'Ob޽Xt2\lA`8=Fq}}}4 `---شixY~?<\HaYxG^Z QSS͛76j@.3eD"1#_.xbk$IUB>#ʍ{<lܸ ,S#4efR޽((d;Zj9Ѳ'bXeY zF 'P(d_YGe^I1@g)PdF2Ώֱt~ \y.Ha{^躮|}P1L Q$5MxS^@(I(ϋ 'ER"JcI%IJK>() f@6D0! >XF !2 LX]+Ԑ%$*@|P%D!J#5|Q1CA' J"(27%ëːR<)o8 [@vx&ԖQ{} |x`@'Hee_CE%E0HS\P~0 PP@!RR Z>#Ƌ—>&*W3e iMYcaOtQ;]wp'CK u0u7'"9p745$vE=?O8kd?l8;ױv`~P{4>},\r߾} ;sIϬ2&ݳrl'_ڄ옓8ORY=/L?ӧ122sճgd/bիSnowa&BX*BMk4mNIeȬ5y%6k91ZG`B6Ƃk~+O缇YH$ݻwOh3 얖O@<̛X:8w=gdyj%`ݐo߾}\_Cߖ Q!i X4 DuiDR‹/ >?|=( yW%d31|npV(#*&4g~JF5$IhmmmwnY"K6#22L9S0& Ff::P(d2iyEQ 8:4&}; ˗@]]]ĢE2åQ "`'ptc/nbKAA瀇üD21䕽DQaDQDQW QqYCQ[$ϴ\El۶ RP(R;ڿu`YjkkaÆE*#;A6"R\|y񞞞1ARCC{$oY2F4qb1;):n:-[QQׯ^/{l) Y ˲W_roK4q5f5޴hzOj8IٹZ40FG?xwy͍ nعs'4H$'vܵ%2q 7E|~ᆏ˜9{``^`Rpq ,.Ys}R(~V?yP h;q^p1nIfHSyRa2}m `LzF!I?1>uAFKPeahhUUU ŋN0ՙ 6:% IR `ObK7aTUUn4443gΠ ttt`;w3\O&Lƍ?>t]G__;wk׮bժU`TQQa b H^aBpy466^իWC\|uuuH> JAQ>ô@vRW_Qp xIX"T0Ӹ,=<"+@iۧ(tvv0 Ȳ{O@e躎u)e˖e"e}Mpǃ zuʕ+, k֬B5<S BxG<*B00dY$I ܒ%KLm;::x2::/Jn(Wʊg^GKHɼ2~v%?pWo\#+ V2M7KhM#qɤgfB6rkV#]qSӹc8 ^LdsVU{f23!y% DX= #A"><*=EaE݄($(H I2$aꪻt횞$tz2;NwWW[uߑpѫ!.Xgv "Mp zU2cmCYU7TM_;.׃OW HX¬ BiH4a-dKK.hQrӐ=xйx%,S=LC>B@ɉ̛7_~yէJ|XN}jYSs|ߟs+}M#̵IsNH_5<è}>eob<ݘb+%O$ST'^+^fw.G>opϺuRn}C꫼tttrJ}Q.r6l0qiè)u'ޫʒRKիWO\0e^۶c\uˏjyRrs è)uGiqӏ"N}^xO>_|) 2,X[R(hjj :J&N28Sw' E sE*HJR~.ȎZLRE$_:\_RE\w^B/ᙗ0(%INJGɠ:$ wá.0O|h4:Ż$õ{ I1I lT9 A6HI[ 9̛!Q$&mA\nl6>x<ѵ|K#7ޛ%&1iiZbQ1R(E:!NK\fKs&Tx:J1J!F"kmHkKh4w,o_@ך"7^?K)}_{eJQſXD+)/T"*$ QP&yã[/<6{~dĀ8\KRUߓ\ȗwPpG` ܼ{Zk?Ywv+>})nj` H##He--\< {,D+^=eΕ"ҢWf%de8tr]~{9UqͿttpZ:W^+,?+_SzP~iGy#G9 m"ĐTD).$Y~ި}0}XӦѽt)3ǒU-T` i`Qm-2&&Ą *BÜ?0 _/|awKҏ1^p3\ҥt/]us ʠ~{=ST A>>M?}ؐtm>c 1EcNiF}mm4oW;B k`a2K)O50Ey+d_Ĥ#9}~uB=zxs8NO$iѧ Mevܵ]gx<2B^DETp(n~Kp:V x孭}xRѳKG}ϳq YtܨO5.9eLA7l 0stۙ.i& i?4Znsp\?nrD21-+ʺ`ѠW"]VN'%rDWߧTT9ۑU}HC]_B d2|rQqhhJ[͞=Κ}k‚QoX*Y6ȪΥd\YשNjfp^F֟Cu|)%iy^<]t>[GX>5cμݴERbW]u\rIH5U)}?h(uX,50Zq@xWpGW{oX,3\owQ>?򜷮]曫I-9K!w@p㩆֥j0xaD@uqbU?p5V:Ki:Vx4yA51K(5՚JB'?9G0}K?u(l@0u]5CL]oW(>,=gRVrhEt#TQlfyA߽{TG m&)ahxJ0aJ׿aѬ_ܜp5MH$\yGyCRI3\~N=At<v 뮻.x.00 +\rܥeUui@eÄ3TDCt8` R-ѥj4%uH$_u~r ܺYӟJ.cڴiKkhh°0Ν; r I(7,IHYGzS8Km&r. |!ryr ;a6LI%x"/L>R0Dȼp(_W,b8EH)15?0C=NMqطw־c,8_d2<䓼kU#p:[eY)ҥK$>.gqƬU&9Q5tb;vH"dޱtB]vttK/mܱu1q(.mmmn޼\.ky7صkk׮ ,sL{UYxe˖F<.OMMm/~hܚ[+ud*ŞnΝΝ]tuuDf85W_͛4.ڳ4%dccl6[P\-YնM&ˣ K?wą[ZZyٍ455 p |_'/|K70NIiG~:N_ݭ-t]'nް;opPOy{byOn}aUAS M8E=޵80kVL6oV~6ñrf߽,C]aR}pI:Y8[( qaBœ> T9~HZU8]DztBqCrueU|88)::Rm!D+*b.Qy.oY wjH}=V- )w]WΘ1C/g4#C<ݻwK!DbȻzW3(1MbDt`Aj zu8ҧA75 9^dd9$O.FauڵKF"gB ߔ{ΝY$D˯¸ARLjb$q_ Ӛׯg…!xWX`B,izU;fH)yꩧ8Xn~:RJ{9#vhG`Tm޽!dӦMtI1_|;"WPqضŋq^ZZZB/qFw g^׻GrӐNdxs;g=x^o= yL.RT0dHRb1ǩxx%^ܵ_LfPݤ+p lڴ%K`7ofXݻikkò,lfEl2MD"ض`vڴia6,\B$Qb1 \:N9Rԕ~y/{@1̛3X,;eJ\Z= LC<|0Hi&-ZiK,\(MUIlt:@5*~UbԶ`e۶m̟?!i<#؈mbE[l)57/ڪ5d!{!1u],Btb}iڵiӦH$@ccc d {7xߜyټغuOaxFP`TjW6]]]ݻbݚn)tP-H[V6З)0xq*8`UUխ^qUr\*Fmys 3gΤ۵Q" rph:3 FuY^T=ϖ?P58EP h`k=k]cQ>a7}Ûc Z|x;\tOAõ`(1Oћa@@ޗGqnm-u[klY-I,l/0/dp$9!$3 1  b9@B ,^ؒ#YK-uWWս[uZ-RsjWWU{~8] (_|f#|7d)~ NL~ m$y~8aKəd%'{iF{Hy{m~jtd(P X6`pDQ<?ڼy?t1i52hp)3 Q(:$B B:AXW* Ð)P(++mo{(@ul,{Ν[~cFȡ7(BE!Ԕ!e`A a0 Vr@,F'߅Ax.R+9Σe^wV*|L&嗀f-~&HǴӳ@mff-)Œɵ5=%H$X@IuN$=Y d͙1|0u4۩AiO;A2Ҳ54%>x9R}s6z@Xz3STf=ǡ@Pg25֗|J˃.)]c:f,M,knhlJ~oW]v"5t|wKMfgFO$ȷo~>~x063 ĢTnGڱ#g3<#G8 `ƍ m+:ww^sMj9@z^.s 6[o~tww#6nq;v ~\wu`a׿;T +WDWWzzz/O>$كo1/5MCAAd?Ι`UU6m{M4c=۷k۱}v8p◿%N> UUQ__(,,DQQC= *t]|zvRa4u6l'>ںaY<Ƙ[ 7 $7|"@QZ}R|Z["^a,t>E6*k3N"^Eu7 ҼADm6x^:~8JJJ088h5"[% Vʿ`䜱fkE %\Jkq]#mGsiy䷎ ۇΜ9YSR[Pweey^{cD1 ˲ܥԃ٠kG'۶D`& @4E8Ƒ#Giϟ˲҂j?aPJ!J)LD$  \𵐼zC|ٮ$kR˗gݷpB.|e9BS oFqj5s-nR/?8, R5nYV#dרheahhTk۶];wML)E4c }}}BDee%̙{`nYg馛J(kê QPPH$:YX\;D1y_85C}WB$ Ø@+-‘#G( PZZx<Ǐcɒ%mH$0MRb1w---D"HRPU,B$t]m8{,VZUUMa .@ײ%ac X: C4ECC=oig,sFII Ѩv Hit?[lYBB5nƉ_8BzPw,)H=\2E9:\SF1ktsMI-ľOg>x1q>]]](,,IJep !~BQPP,Y ^D⦖#0T΀/-]4Kz%@XdInQTu۶N(p8 UUJQ> 18=l9&\˲`p<>LI?)%,}~JAPFA)LzϮF)̞889ソi ~э/wC QP͠9C!GꤠY4m@netGnT&S*t@OaAta Ph #@G`8 M*4YF4@tA h (P,V!'g9ЈaR}}xU_'QX3"}1J^=if@/cZg87 #Ͱ$eDCZ"3~.-;i 4(ƉC:MTT M W i,MNf>PikFʻ:zFHw0wChOgo:V<|mw tPJL&QQQQ@7Yo+PP0| jr f?Ka4 䇙=1aIl$Y&$0͊ du,[dsfE 0(6,Jz4Թw|Yc_e;x?֮ŷϜwZ[1-{߸.^sgNݝ _~y+f;4Pu`39EەsfB ۸tOp E0 Ľ`P)HW†j KKk@PA҂ܡP10y& vdgx,a  \! L8??|ޜ_]6|= 篻1Itg``#%:2,wјRBR05t8xGd Xg"ug:]3ᚽ6.\B0(M!P@2wlrQ߉w<ہr@ђ|AڍCG}K.^VV.>pBaˋ/EoHy9V?pomJ&0Msas9'dz9SUؼ2_dAӄL"c:"Ј/טEB].֙,m"pp&\/E rI~}_,?NRǟsM_?qI{=KIMٮjog8$ρV_goAȆ^ukA]B![:mmxwd2clM0]:W;B~JKQ=3Cbm0UU^_MݤM7ɧ8Sx@e0u5|kO/] 'gD'xiO}sy7W \h{/}St¹ g|~%jAzl2Ѓ,E[䭴7I9bWݽg{"D"P(0й@Ѐ$yzܰb<{W}Sr `KV3 tvvnj@Cۧ=_w/JtC`-0A&N| 4'deUYZw&H%yC@lL,A~}4ރ댣 ]{ hv]^)(--O~?<q3:"3 0;7g]RY/_m󂌌18/,$kwž˯c@)-g߿eYSJO?_dB8y=裨F(j73Ķm)m"xkEdYVhW8 9hDI,^+O`N?&$UyPI?Kd ⵶m{2Dpcľ}mhlv#3<Gr-kq]wyy|kp'<qaXp8lgOv!NXqp`@+rw>Q8h5\źOqRq@qض ۶"Jem26;˲`YoLJ+Dя_Y(E]猀G˲gR)w<9Dž9sx:l~V;O5/-[ >Q1#LcSL.{8ad /} -JIN{&,d)*/#K>q*N1 IndZn~[ovn9Qw7z j4bƏKX1p`rǏ]g?_eo8lMeue SO=Ѫ21%q*@w(ŗ'b-iYMNT|jHREd%~XD&2Q/֜ _ 7a2Sc&"jE2eF|_"klb?d>;۶mӧI -r=c׾WKhXG%eLOՓd'8aD)*;e',Df$K~%&(}%ȼoC=,@*{.)e"d+,DJxq0ϋz۶mشiSt_& <]KJS^^-[ fEޏ޼R~lҹ3rU',E &:D .CVE :p]Ve$84-k@^ұ cLӴ:;;q1_{PtD6"!吤m&?)TMuhBP+;'(A(e-aYH) 6N80AQ".Q::mm=Q߁kJ\#%pi@QU؎UQ@Ks}Ea G1GWIS!00=x _ O־!K/ɈH֎\D;Xs}_ қH>c2\>w%Ko~|{~Ϲ}Bls ;=1=u0YC7~讣ǎHkiQt|}Ѣ=䢓K'eS Kx|`yN| l'7= .B-[fK~!oS>RsM^{ϖeh42`6nb1q W=I9]T8Y'x{qocϓA/(;wVM2syځ# |, j uK x<+ޢs{A"@"@oo/݋,N79 /M ,d~#q/Ö-[9zL Nacȡ3MgUyIq"h%~GjlY1M6ֳe<.%C0 ꫯBQqh4cpp5%8:::cņ0D<D)C5Y{G"۶szG3L``ԫ>ix&~.J\F+F=8)y8wDR[tqSK~!d oSGGzz ֬YX,M088nvX÷ȑ#+D֭[(dLsWQ {fGg+/+w'籣GkW4w޹I\L&J`'P ۲qc?MwrIR[[JiB,4 X Z[[QSS˲ގ~ªU{y|}?@XC}dW7q;mp4=\ mmmI --))@ZzLسgЀ,]Ǐc8y-Zgby}ڡhYmovaaaaۺuiiܹn,_x ׮}13 g1M@zz{ۋgn/RA*+H&L MM-Բ,6IDH"qIg+*VXum~u8$hQf~~~}8~}m3`ym:&sN\k >2( Kr|bhQc !~A3o( ~.^"D̥t >>Z YI CF(dH:2q}l,1@u>^cJFPkGsMۂqHJ.GcM g^TxcϵmbD80ZWu6 (//w(hnnFQQ =9y9w8pp8ͽϜJJJF=ܜUHRֺjjjP VWĪU~>書ꪫDOof!8quuuiPF0#$] ?O?<7OEcs`ѢŨEUe,X 492\+LG,SMjUQssgK tuua4!{EYYxhhڵkv}q"`ѢEYWsS#eZumg>|m/Jȁkaʕ(--ͪ9ֆ'Nn}ULq]MUE3gގ5kxĿ[(..ƒ%K Ҍ2Gf=mFWWv SȯƘ&fq'A2ȥꩋ\r-8dƅ1(!DK~q(5WWQ5_O*-n۞_*QUp4MKIV\bp8t$y4qTUH'\5 CD hgf+7LKے ~b{@AZB5̹߽O"" 9bHNjTkCҝtWyjWi{~Li&Hy%]S]RHr2| -u / ii!ϬT:gfUe/UK:Tx!TC@wQZ O>_We7 @G>-V v}tjoeK,y6N,h?JEҰ"P(ADhBA 4o]Q]]ZjoL^­[J*Z^Q_pK < tM*Buf%M@p1;`w`ʂePo^(Nwz/*UJ GiӦjeL/L=GZPv,|aÇw63A0ʎ7SWGCTv{j B%.vrN9u*!t:wv۶01Rm뇘vEH!744TR'SC4yH! SuX==KtJJBTmvlLu=zH!VTe)QT)'CRD ]=JHr=FRBRq=_uBRDw RHg=\} g RHSFŗ=$:I{H!Mu R96FO!tb6z=B>V?w||tb4b3v zY7ԑ3F.>4Trb1ųWz9Q8 |OSe⩔'o{{@/[YB8.05dZ}ݺu3@̝uwwwϛQ /8z9wΩoci}{֮]'|rڏռm t:z̡CFGӱ,E2,AWfRI͛с}[lr9<裸꫽m?Oi>O; fY4M~} ^vrovZZF]POuuuk).;H$1kX~=_:.B\ve0 d\r "lƍg5IҜR U-sO}%:|R1xqwOSKXv-r À8H$x'A֭[Ci>I`WU5zHcjaxWǏ~#s=Xr%Z[[?[=?=@Zl6n8,X}^t).]}+׿uX/83W]u/z@( TU(!C*M-¢ENxZ}B떭'x*R;joou7TH$M<]H {/ٶ ۶fު;3{Yvmڲe z{{100J)r4MC<G&$s98sAR3jjj*G]lwBQ8*D" appmDပˑ|@؈E/ `^hHItM- wu|^&Iс8v؁L&I#J٬q4Mo۶/ל{0E/an(dNH)z{{aYJ)LݻA)K.[oh4L&s`w|].2 t]!!q^,YLiIfƍAWTT`…Pٳgöm̙3Xf rbPWW]בN Z[[aYS-Ju8t]afYcN](m1PEE***<B'iyxD"o(AyJ$ z(g3+Hjqc0XGGfDmXt)g$9gC9srrMǁeY 0yH36/Wq!T uaYP@7M3)S1Ϛ8ѣu8*++fa&Ӄy!J)g]ׅeCD_~9EUusFm/nx j,Ē0M<$:3.LfG^^m2e^3 #̘ e7D:>jztjA^@-.]]]mXl7@]](0 H\z Ghii ,Vq˲@)0Mӫ>gΜ!}b:JS<MZTWW tRضٳgcux@QD"܆at s] Āڊt:-%ŋg2TUU6?묳Aש?rxpfMUUo]8!(cTqvWc}*3Y}UDu1c^߱ ([۶gC=TgC*4TLVTvb7_Ǽyax5Lً >uigX4qQ,[ ht?Wr7-zzzpq`ܹCEEb T*jضT*9+**`Y"D6=4zxK/KI$u .DEEpEAUUhI*{= cpppZՊ;0O E e!|yA5dyD :4 ghPb KtJH.%1'Z̟a䨝2w-}Nz 4^~0^1`mlĢ+ A_g%ߛHr)u@Od[r}}6LjJ)TU-0cXvD0M(@ Oa)"pG ?.-HSapAwAuB-3 VMQj:2!0G\.@ \=e I) P0#_q LC g(`socs ȟ1Bn+81)X?_͵mt"Z z03,I-ieKbP&ˠXC4@ "Z j(nQDR.4"-& D,It@ThI_BN~&b+nZ] @X/@aF 4(r~ ?pm} :{9擄 3ִ|~{=zK 2P@àPˠR&P) MP@WTPMX.4B]%P-*%: @MT bC|ݦPmEY à8 t@qM@g..f.0h RԥTb}{1MGe$)ǍpG1)c5!o6t!*; n$`oyբR?o{Y^F/T}gd 1mFa]ϧιgUi E:V;3g|sż[aHI_uw/~~T} YW A5 ,2"Qd+c#ԱG:>O%֡pwPB-2Ç1M:#} fT(3ѻuwF KJnُksɪ`.)PB9Ȅ%%[ߗ^ #7 Z8>e3*/ [}DŽ?5W`㳏1>܌77#{`c2Yw=?@7h@'3]/7Y\''by8c_]]7w ;Åۭɱccո.2 8)lٲW}`ckusOR? - '~+'3Hߋx okɞ|iYE]v8:g={Vy'fV׬Y3dF0у4iU*/ׇڏtoϚՈ/||$ Vw#^kLʹ =N?.ee0 мblZM/(C i>ZT7 aՐF5 TKmr T Op64.zWM1I*wM-gAq{HB?}l %\v@O$ADҟ5^N(J= 6m:J&Ǿ[}gϞ]@k!C,맟2+V_C0 ;9Pd#lI]-Etl~59ߋaEq|CI>v1{)um9K=/uc?!rCdcL؉_}nhh@wtr{R4{_Whc%_/h (n /mϯU|u]xZ"EqFdf*A4n23+Źo_Y?uIO\c"w7 K=U<UUqu׵4^RIc8u=jvI@ 7aDȓ?hA 3 p, \^>$^?2x $EFt"XdH"S .ר(ouڜ8<y}_ŷa;8!HdJHA[VFWV6:F)8D'9(&edܠ㋠Ag۶>Au۶cuc_PdF-2{ UA_8Xr%*+.|)3\UU{3˪`9A)@~/N|~L"Xe)2e57?d_G7ǖM69EF?m{D-W~A7#jG2+v~q|7qZR1dRREQJA)(j'm1D3Y{"3Q &%kAVxD-%SAq`66l؀ 4;Vd3@|vu{cöm8Ed @4?ﺶAEGO܋``̺u렪7^fq͸O'h|ˎ.Ē=2ZARw4Qt A \I'j)5-&\Ş={.8yā='*;DPY6E^QsJEGljwM6wSE/2+9c$T6D{kf^ Z?ߏ뮻wW_E'VDxۮ*vwƴ\I|ҍ@*lc` `=̥\rh0)#;тB\|)sR%2#SUӶF&^qBlq+,}"eAŅTov& vo?qD Q9\@oP<ޕUS6'f\AI"Aq᠈ J^SY{ }yDWlB˲" ÑVtd́,KSic>+|t|ȑI[, WUUzqYcR 4"e<rŠ8eu:~Qv-We{[ #h%'< rBJ>7>$H{)߃Ekʒ\v%{Eqp p.-}hpB.j3XbvzJÔU H2y2NM9A^,' F$\kJX ]׋~|&kcA CA!H9V.jF&$2 i(2{キx :']Q7XrD&U:&9W\TDl)!jI&bxOVe_"ߏ1~lA(n㓞':VUo|@/`fQ/?(CLZ gp22d'3 S1!>XἝ;O ȿ/ E{#MrM"D'NM~r~HA^ 8A 勗bPA\VDt/5~LH$4 B>|D\[U*Cwuv> ML5 ./O'^ˊ\+W DkV@$ݸWJ9>.Mx9(nvQtɼ#k 1]QSSL&X,Kpi*\ 2=8񉮚.zx"KSJB@]v9ΖR;(;1;(!Fr'F +Rfb"EO61'*>_'FBąG|nb!W^y%/_^۷l9)u=WSIuۿ[`PJFǠ3=}˖-KXjx.E.jE\7!y@yOޒ⤖%XfA~rEF¾$qUfAq?Y}\jʙuAAfDB3|gCZȈ؅*E [nAss?n:!6я~{^"g8{UqttvvXbDKn;>_@@\VXFJ` (L:,\Dϯ(yG4( B$t(ē\pv! r1(LV*VfFA َUPEM3ytɒ~^4Jk3M~8C O@de DP]ij\PB a)͝$.\ƠBs#K`¹?3 y`t'ofmvPJyf.#.TMUCw; \CZ.xJ 5E Ur655=`a#.sA!u]*a1R8Xak`#l v%>Up>W/ucpA5'pϯI.HeY5rn>'0O׫%l ࢓$,O9AM >nF~0l59/(4M . *$!zР+A%K,'O7`7\wv) 5wG( 3LPn|&>3|fJ]]C3:owKsN<#-JoY?ѓ/Ws\x<cTWUɢ9y$Xd4Ed# I>%AmsT9@'w޽_fgў4M|3Akk+R|a11&AZ//QU dILM6^~I9JH OYtS 82!2ؗ.[_ey\uU3g,˂eY%"^荗=b qNSth@n w }AҜMCj,j+ Pxi%hK3%\0`&2 6oތH$\1-UN苋\me!IOڊz2'yx}%9F|V\xN'裙A`Yyt@W1`n&˲p!#qREϾb]|AI#yO_ ` = 6:TUA@n 'y} !gb1PJ5$fW_}5Lӄif֭[a6t]Tw96.:,AU|?O]v/' + jI7;2)v{LIJ*/va@;~}CCCǏطo_ݻ[)Kx(_v{@}4rm{y=(To3K/۶m;瞽tϼG~߸`$x)d̗O-aOy@Gk$ H\.8'$ty ڵG=N0!c l6L&!ݻ;v(*L!OqhG ω ;G( >J466 U+f9lt#6g99cLSS|qq-mE!lRk*,,r͛7_>g'b'/} a bppӟ\oN\a&&27E؈ 6"͢(,F*?gK0?'%Ʀ8Ç}(@|{d__}5 h "0`Fa`}f0MKӸ`Y @2D__~ix*8wqo2ԫN\?"?O`֬Y0MxJ)8@(f)t:ӘZ]3۲R NuN.;,/^H$!iض~455!y*?c }4#?~骫@qJ3kTxq]Pxӿ<2\V0<Žls0ۦMPUUyG"_#K#hI !˗/G"d2muuufMfс*d&+AһBX<6I\97\Mlzς MӊK`sN4?go{000:oŜ(D"Zqm{` 5jkkpwyA˘i))TCOD'eʮ]SJ;r`rC{*:;;="Br+zy\_d:bC 0 DQX)wǏGCCC#^mr9TVVBU6l0_ Jc.Bp@4>&uq֬岴""Eo냮 ϛ!+'WFpWUU%t:m#Hx+do~4E6$y]]r4 +G֐F^=$#1HdTSJ}Vb**c'8N&7=U|KSc1ZsRL&J)000yۓ$;1x<^{ +.P蓨7y*dRf55otym;ۆixsϞw 5W7^ohiiRoo/һwgH$4egQ]]Yfaa;wOo ><_Tмw%{bMA/6RKv2a hwc^d]wlz1=z=W?: iرs'ZZZqQoKEe%vڵa=]'`T'j. {n(UvӴ`9R)P7xMcH' d劕?\~h4Ow}CQ(:|,^| Bٳg[/י}7. n3nҜqΛA֭'\FR N184T2'?2F؄=s9'288H#i:9ClA*t: \.+ qD?ʃ(?_j^q.tm{eښuir]۷nM:::qTTdT;wF$~31 /w(Y2 hz$uSAϰ(UV/J1$8Riy#U=AFkB%z(Gr9Q@_g] GwQQ@ůڎ|AN0n}=HDQT_m>' 3"ș9eaX;}##h,*{Km*y>$)ŸB@-})i8r6OFHxcB >: J`$DH=g0Gk5Z6">vbdXױt993֞z'!}Rwٱv$^*댵qx R)$@FzuDe4@FzM_*Ն16ɨjbg|e(]w}&2|(  ^ƫ8|DžW|! x`7V1]8t-nNƨTUO,W=NqJb!*p]'Di uL Wb%^ Smmm۟@ kH$8^R=O$u'w K =6)2>?~d#a53fsP&(!&_~KpDa?וobOb EQ~'0VC6^r[ww7eN1 _*y<':ȑ#[; Pصೄ0#,+KvE 2]0BEUPx>8"9Gt+JqH[=o\ȷ„(]y>Z%yg^<1u]r9oT*Z`g T RTū$ilFOO={6sj&Ο?5_N)E.C"lkkg2gpp@SSzL&E4MkUTT\io]m?ǥH$#j$GɶN./5k֬rMvQJ)c ˗/o楥۷{-bOmYf5oΟ?,^7zl8|ƀX4YeZp/,fp DQr0veY`RUTy\UwzOȁ{n>|a x{衇lX~4zzzg۶( 4MÖ-[5l֫bqF{}x]vyܽ{7Qbx$+8ϟ7pH&رc88)x7L&QUU477+۾PUuuu5UUU7oF4EKKKCuuV48 87ͮ?GH[{‹IfU^gWUUǑL&[MlmbHR-ܶE&b6s1\.69rAAcc#ɤE($< ;bg+k11JCSS'޶u훘txmCcC,㽽<hw7yqeO=,|k/4MBh^PBjHī~+VULX/$ONA7ؼy3/_IKQM(rFK (w"@]]cS޷o-Z:݋EyUF{{wTUUkʠ*^}U\uW^y睏۶mիkVUrhnnT۷oҥK=ѣ^Tu=_L& po7d2Fr9_9k˲P]]I xiAASS7`ǎuc\pq[lg EQ:S'xܢ.nW_!u5ՈFc"kxXj%HAJP{e3)z:R9N>?!1!O6 D"0 Ó̉DP*IA?"EA":Q*B4aFBEEEAgg'87۷p ~wRSSvG,CUU~;﷜AF"$ _cH4RU}?>P[[FOs CZ:0(EuuI)+e( !;DR+h$Y̟۾O|s)R3;H$P]] ѱ5vԶmycɯYd"g8n… gCUU^~e\y啾SMM QQQ+MStʭ"~;[0OT*^{ڿ_g9+Vu6{l=܉[wRTUTp]~y-j(DG,^n >NrE dYd z)\y0MRxs=K/1,Z[ q)g ,n;EQZĹ---|2̙3Ƚ6ת(  cr3FmG8P\㒴ޓ@b{``1&$FF0M(,bR_H3dO>>p0 .aK.|A`7i9t]/T5E;/~\< * $g狿ጁo544㨬dh4$+%/\@wg(Kp3H t ɕ`7 ,XqFgj[-T> -wVH'd3 `v( V-mx9=ts].4G)U^q̲,͝;E#ȟ+**fP_ R=>pY,2N %.8R]u - ۿ@/)"!񂔫).LLJspqtil^ 3+M\ h6)!$Wax hO;}H4cvBX ?@++TiA\@0N <V jɂ_z ' jQ.x aB*RB )zH!=B RH!@)&r '3?6qgRRS$s]c]`!r'mVEɚ؍>= {b70€G漎'Ka4cDU1HtfمrL!DT"eQBwycD^\*HNm9 !(Xd 9t:իW;vڵk R0<5t #"Ǡ]DJuE4N2T/''A SVp].}`v,Lg2~mll\L)rE_E9|My4ilj^>JiN|1n&ryu]s&|!6<<űX m[h4}c vݻw˗g2L.\V.Y( ԶmF\Ը8yVJi8,J@ @ @궞Wqm~8 @fmȁ}(C򐶉w777wqˑHM7oc`l`>B皉z" <-ÅuX_bR|vAz9\< r HRIEA6Qeax{{e]v$Zt|2I# 2ԧ>'^cy %dum6NB&zp;E(l|S8#c2!?BWI=!H Lbٲek_WO4i9"B{22߸q%]t!s9Nᔒ)#и h8[VQ8s.Aoz8q@w@`f 8"9@Oܲe >|)@&2BKs$ ۷iLq֘m|;1o 0T N bgyz\6h```0Osan,sΉe`:DR 1QP K.X!)v*Zf`~jRP\Ygq`}5tqL2wyJCCCCD4Ō l4000d^A1&;sM/sr<-F6#rǕW^eYXn {O<.1Ϗ\'rG)Zg0(w P*`6\םt<GQ8o^u{m6I!sY;15&(nf{&! N~_+ko?Sn-o'>Ph<Ɩ-[Nݍ38T Rr9lݺ+H$p,Y˖-;XN<EOO4!X MMMIa|o[\tE8q7oݻW ø(V\oX Їp饗/C=n zֳO|+V0k0'H]YH$"Mޙ[NqKR s/_.l[Db|%Cx[ߊ 6ӟ a߾}8묳pu!JahhO<X X RE,X}sҗk֬>~i3s),+$t۶8 X{h`0[qNlM)Ess3"~?9,X}swo~F׾~сSO=qbH$ Ҳ- |9lF4iA00ڹ0GQض ۶#0;c| NlXr9njju]/@po~aJ`˖-7=== qL&qy{^(4y晸@c ֭íZћ9NAF&d tgppUWMiΪ,]X!Xv-n&l۶ ۶m7 6lEBk`0ݲ_A]BR^2ZЦpgϞ } N_@)ts׮]K<3q JqHsk"78?ُ.8S0=4G nh?aɠJ9B=CCC$b:͂d2H$qP.FD"J)2 .\xرDX,²,PJDdX:,r9x\.}O{pW,33*Lإ s=ϣ13UaY:,lذ"LNê`KK Tc0y7]p2L}Yn0)(S&ZK`Đ\>U6s΍fdyT`h(!%tS>ՠ^2R}.bCM\BqS>q3uM(FtyNVbvk;5tSm`JdߏTdGB>ytuu!P(\.BP*CwwwA ?em͈bHd2H&c |Hr9 P( "H{sl߾===hkk FhllD"@SS}Q"¶mXbyX ۷oG.Coo/2!!q$^(000[gallLd RRrQq8Ԅxt3TCM%7ى䂠t$A$R_'>OL*N<\؍2q9|\&tcr7 t0 ԗ\M6! NTD7scD./{>a.kf ԉM---hii12O`~Wh1X,u̳5b0 柆yǁpd%tq3A]}5Ӭ_c N, R/JHæf/jK1dm`u@D6c4`$cv;6*eLƍڊDQy0ƐL&CM2D>׳X,"Lbdds444 ?|,\DW 9Y < uQ*L׹Lk֬1z$/)k"JaϞ= 8D"G_`A]-"ˡ]]]rCSSMkQ*5(NhcccYks7nXdF, K. qGuUVN50./[sw^i>9stnJ9JDԃl6b*i }޹8fD"xꩧ`6rXi-N.] ˲0<<|>BH4.ˡx(Ja|>~뺈b, |D 0ºH$ՅdҬ18vIK7>W <ݠ.$I >9X &r۶ى СCK,A\QJNЀJ%0P*./^h4x<Z򸎎bPCFwJi(lkB"9rvnpRh蓑xAsss9J&A]n;;;YBH2ưvZʕ++J SŋrMtQ L}nVX1ᜓA^]M%Ofprتgd'LJdOLNDdK!E c MMM(k@; 0Ɛ53\eYH$F!W[ 氆nTSR!pń3c;5tJ)٬!J&(Π `)#DO盯xg"#X$04>4t^bzmzT"FC7086yصkz)4449,j \&'իى;w!?OD@)E{{{9J\1]d`pl`YǦ3m@[[N91wuui72gO|}pނ/|iWDnYVy1HduUBFFC7 Cob9F$3֎""H׶6O~IkMa [~ ExKgfN)e!"Lbddď%tL\p#=?ŎD>ەSǢ(߼kj184? ŊߟGp9yfyOFBKb|\&tLFc\7< 'v8`L-[D! Gy O`pB&]+^<)~p;v$E5Wp¹넌nic]wcMߨ}n.x#t񛬡۶X,={Lqs:t=C/ !u.9k)ihǓt^N ą{BN8M'ω, r#xIP{ Z^q c m2 P~dt}wޅ‘#8zVN)Ekkk9Jekj%'@c,p(ŠouPPtD_ (9aaa e!8`1zYr36ߏ02 8a1q  'qX1m Y#D[xNܷh I!xS>Bb,!(O1`3?' cpr B4Le_݁mS:}#.7`%'TMykFzи}pu~h?v[ ,N@{G`y>i \q2x>'^p_ƙo- 'ȣ4Ri@% p-8\bMb2?ٳ:84߽8F%PWKDt:m2B'WZ{(3KE|`A!W P}b ! @@a_ &>E@A)N EJ}ar48@-J|AA;1~._vz?`pN=p#a#BΙ-N|-90ڹPaB}A< cQJ|3cp0A'eBX6 ^V9Eb-H=aQ7V#oar_~rǤ^y;,TǾt#vV{`%~OQc(5S窆ywzN8I"ãxa@<J}#B@-աL*"i`{ iUE$ }pJ8Aİb va#eY6(s"aG`(d֖e()vYp61 %A4%{2Mox5!+ qOx F8Q<\A\[-| ä&Ig?F*x _Wkj{˱ay5tcGggg玆Njyg.2=. h/koƣ~-EbK,b0 _MP#j`.!fp1A(.ce?/J\pDh1BHHēd;`18peȂBY (CZ|C:I*?7}}wޅ}wޅeKO} }ڹ(8!B|3={\jh9W#]ϊH_[gw a, ,0-"w "|l,;-SNϷ ݔ0x|xcš0 N1`Q%-ďQ(`y~9pʘf,qhoQ=WO9 {@M<A>Ot~d /L"N%O6_?Ʈo|>޺ww7ݍO8o 7g/MQ3>Vgr+rCBwB!kfMF'h_z/vu h? _[gp=fxSWq_:ͅ.Ƶr/q dhu/\~%׏twegSXs*"كqQpٙŹ /Jhp)i$MDQv\׀0r_'‚<Ϗ\-`"ˉb2ET;&=|ca߹=-N(Ry zP Bw?tO|uӏUܰhnX;xqP}r[ml\Uy%=DC."N1GFFH& ƧG.}&ɚ6㨰RpN|ZזN01 Me5D$f//lGNOJUrW Jl8u=? #Gݷ{1y3I 4pM7u|Fa40XrS5H XU!T~wyߊd>6fo҄ mPt-^sB&r8}XD>yĂi=CՉ͛7/ًw܉M!_sZ [S>6o?`x?_gLn+b1|jC{)84sWmn)'%t)f;N!Po0ڿ<vZb7) Ɍ3ȥA*j}!PE>;ת%) 'jEvY e _dzd}{[P840fz = 7x̭}aqݣAܓNO 2/(f^g`p p7LʻmxODRO΄0<[BYk9}mBq)[ZP]Pek)xjϪ*2*rS|GPL̏~3pk^WEhHQfҖ9FFp4co8̨'HC;?eCxMGm9eQoN==TtJQXW~ç`:i?'忎;]B?nq'Dm `&#\u~qQ?|x]~`z:?&J`S]f4tp?/f1~52p'!S'HCmn z.`BNq??/MGR?iޛM/@Bgi{!tzpRs{?qIƶB.Hf.`4tcֵ nࣟ7Q l^:F͍_l}t,-G`_TkL茱ͺ " Xk7_o:j`}&hL*gz8BIqښF_w5zr˯|5W '2꺌y p9fX&r=,d?O<|e Jk!tX`:Xc~rvK.W.sVjiO|εS] Epk$:!|fT$k nh+}1ۂLMiw݃o}fWZEU|>Q"z`|Eg~5yמ=Y,:(\wLӫǑ#HD&zژ ]睃/{I}q6Z|k} ybg_R(!¼.O]Ucc|6i9^y~l%sp[k 'qvj\+ BWC70008^,EO>i:b_'L0q=8d, PJ ܟ۷!wp}.»l45}dd~BHQ- lŸ3hG[\sm }ٛLo BK.yض ˲ f```0[`6Km31My=xkkM$hllt9뺿cRJ%,{ܾf 0k&Y˲tf oxu5yֳRض.x㍆9g9K6BE"$ɊWbr'KRe5B'zmd,/_CަNH^T5¯NHEtj;TR-5^*ٶ]qh4:kVe",D) buc Z~DP0^m,`4վ+r_WUQܟxv=?wVloll=ǡC;W>$>ۋw.\8k&Z׊̪+7~Tz*\p^׆dN)*Yզ0CTxg:cjyucj~98sQ~u]-'mҊ1WIw*xN,gpۤjrw\>V~S>j)YZq} ~͉U;v^7]e]bLcp'czpiry @s] _f%V'7jjiV]xe^gWzdIE܏Nڊ -L5%$j䨶A5ڨ3IfWMV/C5RUSD5mQUceV6;D'W_}5.Š%- Db^CL&S̫*4Ys5j^Mә uU"'vړ5HW ]ׅypgj):UCիǨN֙u}ZJ}tV)[j*pj$?kfrv ŷ-\zx{˲& e_2eAH/UP8΄{BlPUVǮTY\ +V wɍ'/~q!C P._tg-t5W#e_ Y dj*ҫu: WTMrpZAX_1 [ɠV NԵZt.RmlZIB066[n_.(֭[N; svm/ 5\s="PNu%X5Z"Y~7tϽ,ܨ}/l{,{uq!B@Sۯu ?~_WNv%-[ :Ѷ.YT^7|ɤ]tECkn89CsHC319Tͯ+ՈZ~@]dZ*9V=WEHTڳ!mӟ׿±)x>hŽE,]X,1n)u)(}>זmls5]LD%fFT ]x'y-Yg~DǡCXq#86vNy&%s۶я~~gFDAX-}&=@lMتNu~EݲY˓5;)AɓU'<5@K^!Yt`I^'~MYKtcKgW}[U^&\RMMEF]8u O^Ūq T._zJ/п˿`(J.s~W]P:AScS3jYZT"\j!ͣ.ω:'RNԕL&/} o{^c^S'Մ_܆T|{+[_ױx HpMV{191TTL2j~'=ݾZ&nUPȓ&٬U2 /LdSl퓓˨]ם`WMزi[Gy25*Մ[mz5!BGZĪjuQCg9Pjf$H:A̲,L;ⅅUedTr?ʄQ7uN} MS*K6dy؆j^5AQ矏XjU7񭁁9={ BOu]믿BPט˱H3L&6g?s兣9SgVV!r2ȩSbPZ,鸖Y/OL:ZuZ:U YvҢ]V i:n.H5^}Ťյֺeej@*W&ylբuDG)+^IeE]hTXguըsUˊn`ՈUת/[~.\,eՂ&uA5@'VO~>ߑгq#f$/߄p)k׮7 [Nl9M|VFZ.= R]%*n|Kt*L4 RjrU@S uM f>TyBAuY5 [^XE<Ú5k|fJ/~'.WXePRTS Ȳ[U>1:2C )m1UV[ns'~sZSb1|_>׺%úyMp . m1{\j>֙cE>jڥ.I%F9nݪ|jR:٫h5DE &dtZBUS]I5xZ675yfBU&EYձŘ UնYsT'.8s(hkk??MozJ²,Z _w LF;&u:aFbKt ':,,;Yse +?䶨 hTAvU[[}#ߣ,D]s577I})wo} tMg ^Lzg2 |auvv>rAryY Z-5Ȯ+OzVyɓnyYPǦ.]SyM.F@3=$F+\9 U kު keS%V+.Ts6~( $Ojx]~uϬ|OI?{ _淗˖ӞdUKє?W!'YaٲexއH$2aV\]n{`T,"Ys;3lSsS N !N2`:ZTY]j"&F]SF>բ3bg"ܟ 1aKZv&g_HP>tO:5*>uugjL^WpDЙc%:^JŢV-r"= dH$ S#Ы.E>V.,[-sbWϥR R rr9J2q$TmP#~zr- '$ߵgz6nݣ'dEK \+'%F+>򑏄L*gC $,d2zsC3 Xu޽{1<<\EA6Qʹj gZO+@S4H1+0@kD@01.:\,HLa:mP%Qu8uIkt1:?|_B'j:@-3-#:6jPW55RU ꆩ_U+G{TmV 0#[Ye=W3A@È=<4TM]Rn^Q- Mu]o]vM:a(N9gOTiP5τ+Pu"t[D!yJ^PG%P!_Nd38(!INcbjVٮ;Z.@~ ePDX ]J!c W5̵L2IR̻kI3_Y-~;Tʅ,1N03>?'fO- xC]x4??cZHHfեav8/_ _|צ*{C5}~x$!\C\ș3i ߉/@N4Wb ӟF`kS9B{I𝀀1LvjR+p L#KJ B<+MckbTAUt ERSJ1L6O - pW'q]jYUP-KLQW1uZxxFmR<$xQ jijI-:A0#+|Bnw PNo׍L\aNJ~@8kΧ+u}OR׬܊`$>&T*=Xj6ťhj?(Z]˲-K&D"^{:tț9 B?~5 > /uv .S\*oUsjPMZGLP$UnMNWjQV{Cu^ ]TP_;? h?&Ыz-$.W^:vi(JprR bXOˏ+YKY,ߧUte+0ڳ:+Cab#|S9~ u7_#]Xih7d> B A(վ46E&]'aD" bExˉPT \Y.8Xv-^җRr9۷v 3fZyD"ɨue1VdR3L]ru8".lC=1$s^6>*5  rsx:IǠ*2AH!ZzSpuӭжugZw$ ]a b\uUXnrd^(0::;wb֭T<VhúZeA@OduXS]~' oy<ϵ/Z3My{Nr~"pJ6x z<^O2^m t5rC3K NSYE9:Ǘp 3CWK&N5gTBkk+^B+E2 O`xxTj,DȚzJej]2ũ*pC+EqjK9َhmk}_gL; |6N{ o ~+N^WTƟQKͬjmFgIΨ{~vʕWc y\ytӦ^}O_D<#M-#+W#EYgs9T8(C__vQQ[պ吗 Z9d6>{5LE ,ho̒%Kg /m.(/~:4~ ׿uvz:S" Lc&#Wfz272c fF3 u Vud{yÂ-Y~BreYE'sۭ}Zq|r9xgqԄ+uŹ<`طo0GNY '̧Ok t #ZI_ы/8nYYй ?3\hc"X @{rb9.ǁmΎ;^k^'uO3Q5E՟.Z!\|ذaC\hb|t=tFQ,=9hOS+iar-{W^s+---عs'~azꩈF-;vF)E4E{{;FGG188rN8P,k%/sSоJ3Ig?8BY%:O7cp =2<6 iYmF$.„ h46raP7 ^hՂdLme|>dzl< 5z!8B\.BCᡇBT˚J)0#W;~zH+͟wy 1N,Yb|T}6m얖KGGFBNSj-DP5Mw֌wR444`8|pZU6$-ke]1ɿT*P(X,bxG'$hQ땫8dsF Y٤./UbB.2[m>wJV\RXf```ŐL&CR/(󠖅\.g(JGGGs=~08Ez*D>Ÿn0l$t5ZV-j,[/?K\d" uI ,JӮ[xw1bоbgB75(\uX b}sb, lb~pY ╃ -\C6g !|v¶m2e &wY[hj+Kp"mEp嗇Kd---p]7VhrhE\ 2L^'qŰd S .L}ȑ#U#z MU5n``6zL~+xꩋ:;;lYL&RjK&7d3Z|D9[%Bq={`ΝIY.p"'#W?Sk|6/!2 }&TX \r $yxd(5Rl#e^ ¶,+ kkkP`xx82={BRJT*.chkknu]H AR~NZGtb'#v> O Ǎ]]_D"Q]rA2)˄$Nc6,KRHrAݻ Uۄ/RUH'jtF,AXw!ض]\]6 V\Cu]tuum !qJ%b.Y>r! 9ON-+[_Ĺ!hiiCP.'߲,`D X !}{VSHCFK70n0H}*>D.H>]7ɚZ[`Vh}\Gw +w`|:q>\U&zٟ- AXb)եmrŹ,XuJ(rr!PVm\bhhhp9da#8af:S ZVgPkP>p````f0JA@>\NjhSF,XfQJ{iڲAT8FZk\5vhhl,qZk[e- 7]mlXHjQr-dxxh:(Ah.DطrYdw/@ݻk.8D"806l@[[000ŋKhn\77 u<,]BGG s. ! ؇GLį#ULrWN*\ZO HQ ox Y1{~/R.8rlFEV 6XM6addl@gg'/^ BH#frfmk֬eYH&سw/<!<@~}l!K>u rYV%td``T껔R㫘Պk_.f\+p]|_X :o>ittt`…, b1t:TTMMMhhhyW_X* !tCЏ93E{{-[6ʙE[_.?-zD.4m s<8Vms]cpqfJnxk4|g6rG?gsO=7?[P?֬^e˗ ---صk4  quVd2?> *mMs#CC+W,^W555~hh_͟+Q.kh B? ]!Zoﺫ3Bbd"v#܅:pbH.{r@ieهo*ALFS-g{%5 xOCcꙿ g̃eIb' s],[ sЫj>wYp8.uo8(JpeKeJEK%JEeKV*sqrlއ|<kx=7gN~g.8^ ƩV.wn1!KN"-*k^suc=$oWٱabQWmd[K뫦 C곁'+KB8C=Ty>mzT  B78韉7 h5*yU^M( ^ZLTMЫi | H0e ti $"OF굮;d^oiNLg*Ux~, jmtvtC!4S&O6 cl4{4zn*VCZSU**?b;k}0 w^/Or4ۧ ad RO=^fXQ^/)`B ]|~0ߧr1:`^L9F8LhSbV`l"e=XܖMP BSlBT3m⭇Jl#嘡ek''#n.eFC75LkgH&#dDOqATz̍n`xLTH|xiϤ>]WQ d'9}cvXAM.& y Kc{b뺔RM455bMyؾ};\իJBb7?|=bŊ*ȚRN"!NcX|yXMj~Bc…hiic Tr\.b˲H$҂R [2 < 9L"L\.Chl\7Hh4*&_8aXf @* brbttlmmmb(J"iюR~b1tvvl˲IEAytuu!qP. @CC+*ƿbṄ@dmS؋j=[n /lƚ5k*$l˗/GwwwlY9۷#H`Æ plm۶9,ui 1& !رcrJtuuϕDak.b1qN9ǓO>^]]]xf###سg䁕+W~жR֣%rBʥһ -[?144F<y8CĎ ކŋzJ46~)Q:mYa*9#jblՉضm$ `pp===FضRL&[aۖJpȑXJ)<;,BSSO-0"mxxŋ+-߇eYhooۇ V͈F<㮮 ݄MսR䎝Ê+b sBAضH$h'7Rd2ر)?xB OYէD*@qV!QA eQ hD!@yvt=z__ o}1ڜ>Obg68pthnnbB.\˗#L׿X,BLbAsssxJ)yٳhjj Ԅ ڞeYƃ>:;;+&6Thf=466###xGFI,CGG*m۶hjjBcccG---hjj (rصkcv<GcccHBFhjj %AH$^X(aX,D"Z9rX,d2RBHS(JeYhhhc, {"{aO:;l$#4ƲIcdt#4FGf (((hH5{!/]֦FGE Z!/E=&  ~!h~#JCOt7dYhYF83pHYYi10&cbr7oK.eY4Z~t'&͛7cttׯMBо ׯ80ʂM044SO=$%&{}mmmXv-l"17n /_SN9e¹e\.D$iP(C޽{ŋj*8Sa*u]<#D"Xl:::$122z ---XzuH+=rXp!,Yjz-R,OR5k WܧL"R `hh---XxuSO-Z折J)e,^xFS>5_}- ="w.صkz{{qi5DC=qrJ,[ bQV۷P(sA4pmٷo:T*Пn۶Т)/Z +S.; (">::ݟ'?)ڊ֖6446d2d*DӟP[U'Y޶m:;;rJ)tL(_c۶mũ֊I[6 >_>ܦ#(˲{nڵ ˖-CAmԅu`ڵhjj .HVeY͛сO1 M6att+Wŋ+|Cmy晈. mcرcpWh9W\GE6ŪUL46mڄx<3<,d2,R\)HZ\mۡ`' qv0Ӄ Tp/A7o-ut핣o"F˗/IW$sڵ ƚ5kBM$(4m۶>Pq}܌ 6TX:ر#c۶Jsdg<+< @’W޽O=;/ٽ{Olpp!H ]]Xt)/Z$ bdw#X|֝~*,Zh$-.뗹U3\!B$wlF, Џ)i<vL&+֔¥#`޽hooGOOOH#zv܉L&5kքfU:Y&۶ׇ]vaѢEXl%)/U_j|2ɚcsO%_>[U;pqꩧVk&2v?۶CcÆ hkk *ղ,Gmxֳ : TmصkFGG'(XjUE|}vڅFZ,EZXm۶all"Ne2LhW|!ߏcٲeXhQR ۷oG?> X{Ν;Cccc(H~#mMl_[AbQw -̊3眯(Jw3۱kc10؄T2d2;E&0(%hkkAkkۚކƆ\ypb\L|Assz.EhokCKkk.J=FɶT*eXta^qq8N466"MU3KB>d2P;M`+4{bhhhu8RNۯԯEUj"WoyW[j [5漢 Y@9ݻwd766a9c``---rp]lb?ybapp0wލl6r q`Y"(bٞ\.4:;;']@h^s___ض~UJ%3Y8Q*:J cccgd2urg۶M)!28YX36 BеO΂W8W tx5 j_.~L&J؈h4{lm?lzP  <hr?B9>W  $&,/H9###! SJ' Uv=-OhHRubM*٪ڪ3|jԀ(y^7ABX!V3YƩڄ[w,1@= r^'`!^,Ji2Q"IM9!K!ss&H9OBtO|8F!KÁv?/H BlBHYBH>G9oG!sbs ŕ}3˲&BHeY} !EeV@H$D8qJ6mr;!q˲ ! S9+qkb}L12[ u/ '^u27dJM2\VÈ^G yͷ~!{m !4^pFkEM^8du?U)8 0 ltwx3=e8>E|(| <Xy!tC,0[洺@x`9+`*+ab-|( 7rho><cSmD צ B70000000n```````?Tګ IENDB`PK1\A;&;&assets/js/jquery.tipsy.jsnuW+A// tipsy, facebook style tooltips for jquery // version 1.0.0a // (c) 2008-2010 jason frame [jason@onehackoranother.com] // released under the MIT license (function($) { function maybeCall(thing, ctx) { return (typeof thing == 'function') ? (thing.call(ctx)) : thing; }; function isElementInDOM(ele) { while (ele = ele.parentNode) { if (ele == document) return true; } return false; }; function Tipsy(element, options) { this.$element = $(element); this.options = options; this.enabled = true; this.fixTitle(); }; Tipsy.prototype = { show: function() { var title = this.getTitle(); if (title && this.enabled) { var $tip = this.tip(); $tip.find('.tipsy-inner')[this.options.html ? 'html' : 'text'](title); $tip[0].className = 'tipsy'; // reset classname in case of dynamic gravity $tip.remove().css({top: 0, left: 0, visibility: 'hidden', display: 'block'}).prependTo(document.body); var pos = $.extend({}, this.$element.offset(), { width: this.$element[0].offsetWidth, height: this.$element[0].offsetHeight }); var actualWidth = $tip[0].offsetWidth, actualHeight = $tip[0].offsetHeight, gravity = maybeCall(this.options.gravity, this.$element[0]); var tp; switch (gravity.charAt(0)) { case 'n': tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; break; case 's': tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}; break; case 'e': tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}; break; case 'w': tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}; break; } if (gravity.length == 2) { if (gravity.charAt(1) == 'w') { tp.left = pos.left + pos.width / 2 - 15; } else { tp.left = pos.left + pos.width / 2 - actualWidth + 15; } } $tip.css(tp).addClass('tipsy-' + gravity); $tip.find('.tipsy-arrow')[0].className = 'tipsy-arrow tipsy-arrow-' + gravity.charAt(0); if (this.options.className) { $tip.addClass(maybeCall(this.options.className, this.$element[0])); } if (this.options.fade) { $tip.stop().css({opacity: 0, display: 'block', visibility: 'visible'}).animate({opacity: this.options.opacity}); } else { $tip.css({visibility: 'visible', opacity: this.options.opacity}); } } }, hide: function() { if (this.options.fade) { this.tip().stop().fadeOut(function() { $(this).remove(); }); } else { this.tip().remove(); } }, fixTitle: function() { var $e = this.$element; if ($e.attr('title') || typeof($e.attr('original-title')) != 'string') { $e.attr('original-title', $e.attr('title') || '').removeAttr('title'); } }, getTitle: function() { var title, $e = this.$element, o = this.options; this.fixTitle(); var title, o = this.options; if (typeof o.title == 'string') { title = $e.attr(o.title == 'title' ? 'original-title' : o.title); } else if (typeof o.title == 'function') { title = o.title.call($e[0]); } title = ('' + title).replace(/(^\s*|\s*$)/, ""); return title || o.fallback; }, tip: function() { if (!this.$tip) { this.$tip = $('
').html('
'); this.$tip.data('tipsy-pointee', this.$element[0]); } return this.$tip; }, validate: function() { if (!this.$element[0].parentNode) { this.hide(); this.$element = null; this.options = null; } }, enable: function() { this.enabled = true; }, disable: function() { this.enabled = false; }, toggleEnabled: function() { this.enabled = !this.enabled; } }; $.fn.tipsy = function(options) { if (options === true) { return this.data('tipsy'); } else if (typeof options == 'string') { var tipsy = this.data('tipsy'); if (tipsy) tipsy[options](); return this; } options = $.extend({}, $.fn.tipsy.defaults, options); function get(ele) { var tipsy = $.data(ele, 'tipsy'); if (!tipsy) { tipsy = new Tipsy(ele, $.fn.tipsy.elementOptions(ele, options)); $.data(ele, 'tipsy', tipsy); } return tipsy; } function enter() { var tipsy = get(this); tipsy.hoverState = 'in'; if (options.delayIn == 0) { tipsy.show(); } else { tipsy.fixTitle(); setTimeout(function() { if (tipsy.hoverState == 'in') tipsy.show(); }, options.delayIn); } }; function leave() { var tipsy = get(this); tipsy.hoverState = 'out'; if (options.delayOut == 0) { tipsy.hide(); } else { setTimeout(function() { if (tipsy.hoverState == 'out') tipsy.hide(); }, options.delayOut); } }; if (!options.live) this.each(function() { get(this); }); if (options.trigger != 'manual') { var binder = options.live ? 'live' : 'bind', eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus', eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'; this[binder](eventIn, enter)[binder](eventOut, leave); } return this; }; $.fn.tipsy.defaults = { className: null, delayIn: 0, delayOut: 0, fade: false, fallback: '', gravity: 'n', html: false, live: false, offset: 0, opacity: 0.8, title: 'title', trigger: 'hover' }; $.fn.tipsy.revalidate = function() { $('.tipsy').each(function() { var pointee = $.data(this, 'tipsy-pointee'); if (!pointee || !isElementInDOM(pointee)) { $(this).remove(); } }); }; // Overwrite this method to provide options on a per-element basis. // For example, you could store the gravity in a 'tipsy-gravity' attribute: // return $.extend({}, options, {gravity: $(ele).attr('tipsy-gravity') || 'n' }); // (remember - do not modify 'options' in place!) $.fn.tipsy.elementOptions = function(ele, options) { return $.metadata ? $.extend({}, options, $(ele).metadata()) : options; }; $.fn.tipsy.autoNS = function() { return $(this).offset().top > ($(document).scrollTop() + $(window).height() / 2) ? 's' : 'n'; }; $.fn.tipsy.autoWE = function() { return $(this).offset().left > ($(document).scrollLeft() + $(window).width() / 2) ? 'e' : 'w'; }; /** * yields a closure of the supplied parameters, producing a function that takes * no arguments and is suitable for use as an autogravity function like so: * * @param margin (int) - distance from the viewable region edge that an * element should be before setting its tooltip's gravity to be away * from that edge. * @param prefer (string, e.g. 'n', 'sw', 'w') - the direction to prefer * if there are no viewable region edges effecting the tooltip's * gravity. It will try to vary from this minimally, for example, * if 'sw' is preferred and an element is near the right viewable * region edge, but not the top edge, it will set the gravity for * that element's tooltip to be 'se', preserving the southern * component. */ $.fn.tipsy.autoBounds = function(margin, prefer) { return function() { var dir = {ns: prefer[0], ew: (prefer.length > 1 ? prefer[1] : false)}, boundTop = $(document).scrollTop() + margin, boundLeft = $(document).scrollLeft() + margin, $this = $(this); if ($this.offset().top < boundTop) dir.ns = 'n'; if ($this.offset().left < boundLeft) dir.ew = 'w'; if ($(window).width() + $(document).scrollLeft() - $this.offset().left < margin) dir.ew = 'e'; if ($(window).height() + $(document).scrollTop() - $this.offset().top < margin) dir.ns = 's'; return dir.ns + (dir.ew ? dir.ew : ''); } }; })(jQuery); PK1\H8 8 assets/js/wph.jsnuW+A class WPH_Class { selectText(node) { node = document.getElementById(node); if (document.body.createTextRange) { const range = document.body.createTextRange(); range.moveToElementText(node); range.select(); } else if (window.getSelection) { const selection = window.getSelection(); const range = document.createRange(); range.selectNodeContents(node); selection.removeAllRanges(); selection.addRange(range); } else { console.warn("Could not select text in node: Unsupported browser."); } } showAdvanced( element ) { jQuery( element ).closest('.wph_input').find('tr.advanced').show('fast'); jQuery( element ).closest('.advanced_notice').slideUp('fast', function() { jQuery(this).hide() }); } randomWord( element, extension ) { var length = 7; var consonants = 'bcdfghjlmnpqrstv', vowels = 'aeiou', rand = function(limit) { return Math.floor(Math.random()*limit); }, i, word='', length = parseInt(length,10), consonants = consonants.split(''), vowels = vowels.split(''); for (i=0;iFull plugin documentation available at WordPress Hide and Security Enhancer Documentation When testing with WordPress theme and plugins detector services/sites, any setting change may not reflect right away on their reports, since they use cache. So you may want to check again later, or try a different inner url, homepage url usage is not mandatory. Being the best content management system, widely used, WordPress is susceptible to a large range of hacking attacks including brute-force, SQL injections, XSS, XSRF etc. Despite the fact the WordPress core is a very secure code maintained by a team of professional enthusiast, the additional plugins and themes makes the vulnerable spot of every website. In many cases, those are created by pseudo-developers who do not follow the best coding practices or simply do not own the experience to create a secure plugin. Statistics reveal that every day new vulnerabilities are discovered, many affecting hundreds of thousands of WordPress websites. Over 99,9% of hacked WordPress websites are target of automated malware scripts, who search for certain WordPress fingerprints. This plugin hide or replace those traces, making the hacking boots attacks useless. Works fine with custom WordPress directory structures e.g. custom plugins, themes, uplaods folder. Once configured, you need to **clear server cache data and/or any cache plugins** (e.g. W3 Cache), for a new html data to be created. If use CDN this should be cache clear as well. **Sample usage** [vimeo https://vimeo.com/192011678] **Main plugin functionality:** * Custom Admin Url * Block default admin Url * Block any direct folder access to completely hide the structure * Custom wp-login.php filename * Block default wp-login.php * Block default wp-signup.php * Block XML-RPC API * New XML-RPC path * Adjustable theme url * New child Theme url * Change theme style file name * Clean any headers for theme style file * Custom wp-include * Block default wp-include paths * Block defalt wp-content * Custom plugins urls * Individual plugin url change * Block default plugins paths * New upload url * Block default upload urls * Remove wordpress version * Meta Generator block * Disble the emoji and required javascript code * Remove pingback tag * Remove wlwmanifest Meta * Remove rsd_link Meta * Remove wpemoji * Minify Html, Css, JavaScript and many more. **No other plugins functionality is being blocked or interfered in any way, everything will function the same** This plugin allow to change default Admin Url's from **wp-login.php** and **wp-admin** to something else. All original links return default theme 404 Not Found page, like nothing exists there. Beside the huge security advantage, this save lots of server processing time by reducing php code and MySQL usage since brute-force attacks trigger wrong urls. **Important:** Compared to all other similar plugins which mainly use redirects, this plugin return a default theme 404 error page for all **block url** functionality, so is not revealing at all the link existence. Since version 1.2 Change individual plugin urls which make them unrecognizable, for example change default WooCommerce plugin urls and dependencies from domain.com/wp-content/plugins/woocommerce/ to domain.com/ecommerce/cdn/ or anything customized. = Plugin Sections = **Rewrite > Theme** * New Theme Path - Change default theme path * New Style File Path - Change default style file name and path * Remove description header from Style file - Replace any WordPress metadata informations (like theme name, version etc) from style file * Child - New Theme Path - Change default child theme path * Child - New Style File Path - Change child theme stylesheed file path and name * Child - Remove description header from Style file - Replace any WordPress metadata informations (like theme name, version etc) from style file **Rewrite > WP includes** * New Includes Path - Change default wp-includes path / url * Block wp-includes URL - Block default wp-includes url **Rewrite > WP content** * New Content Path - Change default wp-content path / url * Block wp-content URL - Block default content url **Rewrite > Plugins** * New Plugins Path - Change default wp-content/plugins path / url * Block plugins URL - Block default wp-content/plugins url * New path / url for Every Active Plugin * Custom path and name for any active plugins **Rewrite > Uploads** * New Uploads Path - Change default media files path / url * Block uploads URL - Block default media files url **Rewrite > Comments** * New wp-comments-post.php Path * Block wp-comments-post.php **Rewrite > Author** * New Author Path * Block default path **Rewrite > Search** * New Search Path * Block default path **Rewrite > XML-RPC** * New XML-RPC Path - Change default XML-RPC path / url * Block default xmlrpc.php - Block default XML-RPC url * Disable XML-RPC authentication - Filter whether XML-RPC methods requiring authentication * Remove pingback - Remove pingback link tag from theme **Rewrite > JSON REST** * Disable JSON REST V1 service - Disable an API service for WordPress which is active by default. * Disable JSON REST V2 service - Disable an API service for WordPress which is active by default. * Block any JSON REST calls - Any call for JSON REST API service will be blocked. * Disable output the REST API link tag into page header * Disable JSON REST WP RSD endpoint from XML-RPC responses * Disable Sends a Link header for the REST API **Rewrite > Root Files** * Block license.txt - Block access to license.txt root file * Block readme.html - Block access to readme.html root file * Block wp-activate.php - Block access to wp-activate.php file * Block wp-cron.php - Block access to wp-cron.php file * Block wp-signup.php - Block default wp-signup.php file * Block other wp-*.php files - Block other wp-*.php files within WordPress Root **Rewrite > URL Slash** * URL's add Slash - Add a slash to any links without. This disguise any existing for a file, folder or a wrong url, they all be all slashed. **General / Html > Meta** * Remove WordPress Generator Meta * Remove Other Generator Meta * Remove Shortlink Meta * Remove DNS Prefetch * Remove Resource Hints * Remove wlwmanifest Meta * Remove feed_links Meta * Disable output the REST API link tag into page header * Remove rsd_link Meta * Remove adjacent_posts_rel Meta * Remove profile link * Remove canonical link **General / Html > Admin Bar** * Remove WordPress Admin Bar for specified urser roles **General / Feed** * Remove feed|rdf|rss|rss2|atom links **General / Robots.txt** * Disable admin url within Robots.txt **General / Html > Emoji** * Disable Emoji * Disable TinyMC Emoji **General / Html > Styles** * Remove Version * Remove ID from link tags **General / Html > Scripts** * Remove Version **General / Html > Oembed** * Remove Oembed **General / Html > Headers** * Remove Link Header * Remove X-Powered-By Header * Remove X-Pingback Header **General / Html > HTML** * Remove HTML Comments * Minify Html, Css, JavaScript * Remove general classes from body tag * Remove ID from Menu items * Remove class from Menu items * Remove general classes from post * Remove general classes from images **Admin > wp-login.php** * New wp-login.php - Map a new wp-login.php instead default * Block default wp-login.php - Block default wp-login.php file from being accesible **Admin > Admin URL** * New Admin Url - Create a new admin url instead default /wp-admin. This also apply for admin-ajax.php calls * Block default Admin Url - Block default admin url and files from being accesible **CDN** * CDN Url - Set-up CDN if apply, some providers replace site assets with custom urls.
This free version works with Apache and IIS server types.
Something is wrong with this plugin on your site? Just use the forum or get in touch with us at Contact and we'll check it out.
A website example can be found at https://demo.wp-hide.com/ or our website WP Hide and Security Enhancer
Plugin homepage at WordPress Hide and Security Enhancer

This plugin is developed by Nsp-Code == Installation == 1. Install the plugin through the WordPress plugins screen directly or upload the pacckage to `/wp-content/plugins/wp-hide-security-enhancer` directory. 2. Activate the plugin through the 'Plugins' screen in WordPress. 3. Use the WP Hide menu screen to configure the plugin. == Frequently Asked Questions == Feel free to contact us at contact@wp-hide.com for fast support. = Does the plugin change anything on my server = Absolute None! No files and directories are being changed on your server, everything is processed virtually! The plugin code use URL rewrite techniques and WordPress filters to apply all internal functionality and features. = I have no PHP knowledge at all, is this plugin for me? = There's no requirements on php knowledge. All plugin features and functionality are applied automatically, controlled through a descriptive admin interface. = Can I still update WordPress, my plugins and themes? = Everything works as before, no functionality is being broken. You can run updates at any time. = What servers this plugin can work with = This free code can with Apache, IIS server types and any other set-up which rely on .htaccess usage. For all other checks the PRO version at WP Hide PRO = Is there any demo I can check? = A demo instance can be found at https://demo.wp-hide.com/ or our own website WP Hide and Security Enhancer = How to make it work with my OpenLiteSpeed server = There are few things to consider when run on litespeed servers: * Ensure the liteserver actually process the .htaccess file where the rewrite data is being saved. Check with the following topic regarding this issue Post * If you use Litespeed Cache plugin, in the Optimization Settings area, disable the CSS / JS Minify * If your litespeed server requires to place the rewrite lines in a different file e.g. config file or interface, consider upgrading to PRO version which includes a Setup page where you can get the rewrite code WP Hide PRO. = How to use on my Bitnami setup = As default, on Bitnami LAMP set-ups, the system will not process the .htaccess file, so none of the rewrites will work. You can change this behavior by updating the main config file located at /opt/bitnami/apps/APPNAME/conf/httpd-app.conf , update the line
AllowOverride None
to
AllowOverride All
Restart the Apache service through ssh
sudo /opt/bitnami/ctlscript.sh restart
More details can be found at Bitnami Default .Htaccess You can still keep the configuration as is using the WP Hide PRO, more details at Setup the plugin on Bitnami WordPress LAMP stack = .htaccess file writing error - Unable to write custom rules to your .htaccess. Is this file writable? = I'm seeing this error "Unable to write custom rules to your .htaccess. Is this file writable" what does it mean? The error appear when the plugin is not able to write to .htaccess file located in your WordPress root. You can try the followings to make a fix: * Check if your .htaccess file is writable. This can be different from server to server, but usually require rw-rw-r– / 0664 Also ensure the file owner is the same group as php * Sometimes the other codes wrongly use the flush_rules() which hijack the default filters for rewrite. Try to disable the other plugins and theme to figure out which ones produce the issue. * De-activate and RE-activate the plugin, apparently worked for some users. * Create a backup of .htaccess, then delete it from the server. Go to Settings > Permalinks > update once, this should create the file again on the WordPress root. If so, try to change any WP Hide options which will update the .htaccess content accordingly. = Something is wrong, what can I do? How can I recover my site? = * First, stay calm. There will be no harm, guaranteed :) * Go to admin and change some of the plugin options to see which one causes the problem. Then report it to the forum or get in touch with us to fix it. * If you can't log in to admin, use the Recovery Link which has been sent to your e-mail. This will reset the login to default. * If you can't find the recovery link or none of the above worked, delete the plugin from your wp-content/plugins directory. Then remove any lines in your .htaccess file between BEGIN WP Hide & Security Enhancer .. END WP Hide & Security Enhancer * At this point, the site should run as before. If for some reason still not working, you missed something, please get in touch with us at contact@wp-hide.com and we'll fix it for you in no time! = I can't find a functionality that i'am looking for = Please get in touch with us and we'll do our best to include it for a next version. == Screenshots == 1. Admin Interface. 2. Sample front html code. == Changelog == = 1.5.9.9 = * Updated procedure for server type identification * Add new type text/plain for filterable content * Add server_nginx_config to main class, to be used within other modules * Updated rewrite quantifier for IIS from .+ to .* * Ignore wp-content block if agent is LiteSpeed-Image = 1.5.9.5 = * Updated is_filterable_content_type method, return TRUE if no Content-Type header found = 1.5.9.4 = * Fix readme demo site protocol = 1.5.9.4 = * Fix "undefined method WPH_functions::get_site_module_saved_value()" when content type is text/xml = 1.5.9.3 = * Check for filterable buffer content type, before doing replacements, to prevent erroneously changes * Update only URLs on XML content type * Updated plugin demo site URL on readme file * Compatibility update for ShortPixel Image Optimizer plugin * Notice possible issue for Cron block on certain servers = 1.5.9 = * New admin interfaces skin. * Relocated plugin assets within a different folder for better organisator. * Updated mu-loader module * Add help and hints for each options for easier understanding. * Allow same base slug to be used for individual plugins * Updated language file * Check if environment file is not available and outputs admin messages * Environment class with relocated environment json, to avoid security scanners false reports. * Cache Enabler plugin compatibility module * WoodMart theme compatibility * Compatibility module for WP Smush and WP Smush PRO plugins * Add the new filter available for WP Rocket to change css content * WebARX compatibility module update * W3 Cache module update = 1.5.8.2 = * Ensure base slug (e.g. base_slug/slug ) is not being used for another option to prevent rewrite conflicts * Return correct home path when using own directory for WordPress and hosting account use the same slug in the path. * Relocated get_default_variables() function on a higher priority execution level, to get default system details. * Switched Yes / No options selection, to outputs first No then Yes ( more logical ) = 1.5.8 = * Add reserved option names to avoid conflicts e.g. wp * Always clear any code plugin cache when plugin update * Easy Digital Downloads compatibility * Elementor plugin compatibility * Fusion Builder plugin compatibility * Divi theme compatibility updates * WP Fastest Cache plugin compatibility updates * Check if ob_gzhandler and zlib.output_compression before using 'ob_gzhandler' output buffering handler = 1.5.7 = * Autoptimize css/js cache and minify compatibility * Wp Hummingbird and WP Hummingbird PRO assets cache compatibility = 1.5.6.9 = * New functionality: Remove Link Header = 1.5.6.8 = * Fix: Call for invalid method WP_Error::has_errors() * Fix: Attempt to clear Opcache if API not being restricted = 1.5.6.7 = * Allow internal cron jobs to run even if wp-cron.php is blocked. * Check with wp_filesystem for any errors and output the messages, before attempt to write any content * Trigger site cache clear on settings changed or code update * Slight css updates * Mark block option in red text for better visibility and user awareness = 1.5.6.4 = * Fix: Keep double quote at the start of the replacements when doing JSON matches to avoid replacing strings for other domains * Fix: Run compatibility pachage for "ShortPixel Adaptive Images" only when plugin is active = 1.5.6.3 = * Fix: remove javascript comments produce worng replacements on specific format. = 1.5.6.2 = * Use curent site prefix when retreiving 'user_roles' = 1.5.6 = * Fix BBPress menus by calling directly the wp_user_roles option ratter get_roles() * Replace comments within inline JavaScript code when Remove Comments active * Possible login conflict notices when using WebArx, WPS Hide Login * New action wp-hide/admin_notices when plugin admin notices * Return updated url when calling admin_url instead replaced when buffer outputs to ensure compatibility with specific plugins = 1.5.5.9 = * Compatibility module for ShortPixel Adaptive Image plugin * Add support for texarea fields within plugin options interface * Fixed urls for minified files when using WP Rocket cache plugin = 1.5.5.7 = * Filter remove fix = 1.5.5.6 = * Fix log-in page when using Wp Rocket cache = 1.5.5.5 = * Fix admin dashboard replacements when using Wp Rocket cache = 1.5.5.4 = * Fix Wp Rocket cache when using Minify and Concatenation * New functionality - Remove Admin Bar for specified roles * Module block structure extend to support 'callback_arguments' to passThrough additional data to processing function * Redirect the default non-pretty-url search url to customized one = 1.5.5 = * New component: Rewrite Author * New component: Rewrite Search * Show recovery link on top of page to ensure everyone can save the link to use if something goe wrong. * Send recovery code to site admin e-mail * Minor Code adjustments * Send new login url to site admin e-mail, to ensure user can recover access to dashboard if forget new slug * Removed unused methods within WPH_module_rewrite_new_include_path component = 1.5.4.2 = * Fix: Undefined method for WooCommerce compatibility module = 1.5.4.1 = * Allow rewrite for images within admin, as being reversed to default when saving the post = 1.5.4 = * Compatibility re-structure, use a general module * Compatibility fix for Shield Security wp-simple-firewall * Removed the upload_dir filtering as produce some issues on specific environment, possible incompatibilities will be post-processed within General compatibility module * Filter the post content on save_post action, to reverse any custom slugs like media urls, to preserve backward compatibility, in case plugin disable * Ensure wp-simple-firewall run once when called from multiple components * Update for Rewrite Slash component, use a rewrite conditional to ensure the code is not trigger for POST method = 1.5.3.1 = * Fix JSON encoded urls when using SSL = 1.5.3 = * Remove _relative_domain_url_replacements_ssl_sq and _relative_domain_url_replacements_ssl_dq replacements for buffer as being integrated to other variables * Relocated upload_dir() to general functions.php to catch new content and uploads slugs. * Use full domain url for new wp-admin slug, instead relative to avoid wrong replacements for 3rd urls * Use full domain url for new wp-login.php, instead relative to avoid wrong replacements for 3rd urls * Typos fix for CDN texts * Additional description for "Block any JSON REST calls" option to prevent Gutenberg block * Updated rewrite for URL Slash to include a second conditional, to not trigger on POST calls = 1.5.2.2 = * Add trailingslashit to plugins slug to be used for replacements to avoid wrong (partial) slug changes = 1.5.2.1 = * Fixed upload rewrite by using default_variables['upload_url'] * WordPrss 5.0 compatibility check = 1.5.2 = * Updated po language file * CDN support when using custom urls * Moved the action replacement for wp_redirect_admin_locations at _init_admin_url() * Trigger the action replacement for wp_redirect_admin_locations only if new admin slug exists * Preserve absolute paths when doing relative replacements * Populate upload_dir() data with new url if apply * When doing reset, empty all options before fill in existing with default to ensure deprecated data is not being held anymore = 1.5.1.2 = * Do not redirect to new admin url unless rewrite_rules_applied() * Generate no rewrite rules if there's no options / reset * Removed any passed through variables when calling the do_action('wph/settings_changed') as the function can take no argument. * Re-generate a new write_check_string on settings change to ensure if no .htacccess / web.config file is writable, it trigger correct error and flag the disable_filters variable. * Use inline JS code confirmation for Reset Settings, in case the separate JavaScript file is not loaded caused by an rewrite issue. * Reset confirmation message update to better inform the admin upon the procedure to follow. * WPEngine environment check, as they do not support Apache rewrite out of the box * Strip off protocol and any www prefix for site_url and home_url to ensure accurate comparing * Fixed redirect url when saving the options and WordPress deployed in subfolder * Fixed redirect url when reset all options and WordPress deployed in subfolder * Improved compatibility for WordPress subfolder install * Fixed some rewrite lines when WordPress installed in a path and subfolder * Replaced the internal variable permalinks_not_applied to more intuitive custom_permalinks_applied * Restart the buffering if flushed out, mainly used for footer when updating plugins and themes * Add textdomain for multiple untranslated texts * Updated PO language file * Fixed textdomain for couple texts * Add text to textdomain = 1.4.9.1 = * Updated MU Loader, if there's no plugin active avoid to receive any notice. * Allow new wp-login.php * PRO version available * Check if there's a 'message' key for arguments set through wp_mail filter * Updated po language file = 1.4.8.2 = * WPML compatibility when use different domains for each language * Replaced google social as it produced some JavaScript errors. * Do not apply the admin/login replacements if permalinks where not applied. * Language Po file update * Minify replaces 'Remove new line carriage' * Minify Html, Css, JavaScript * Options for Minify to compress different components * Fixed conflict with Shield Security = 1.4.7.6 = * PHP 7.2 compatibility * Replaced trilingslashit from the end of template url to improve compatibility with urls (e.g. JavaScript variables) which does not include an ending slash. = 1.4.7.4 = * WooCommerce downloadables fix when using custom slug for uploads * Include support for admin_url() along with admin-ajax.php * Fixed redirect link after user register. * Use get_rewrite_base and get_rewrite_to_base for all modules to apply correct site path and any WordPress subdirectory install * WordPress subdirectory install compatibility fix * Improved router file processor for WordPress subdirectory installs = 1.4.7 = * Rewrite changes for many components * Rewrite update for admin and login url * Typos fix * Compatibility for diferent environments, when WordPress deployed in a domain root, a subdirectory, or it's own folder https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory = 1.4.6.6 = * Fixed rewrite ens slashes for wp-login.php and wp-admin components = 1.4.6.5 = * Fixed hardcoded wp-register.php within rewrite - root files component * Updated components to rewrite_base / rewrite_to system * Improved components: Rewrite - WP Includes, Rewrite - WP Content, Rewrite - Plugins, Rewrite - Uploads, Rewrite - Comments, Rewrite - Root Files, Admin - wp-login.php, Admin - Admin Url * Typo fix environemnt to environment * New Component - Remove Shortlink Meta * New Component - Remove new line carriage * Apply relative paths change on styles only if main theme / child theme rewrite slug is not empty * Improved interface errors and warnings transient structure * Use ABSPATH and Environemnt data to create file path for file processing, instead just ABSPATH, for better compatibility = 1.4.5.6 = * Prevent the wp-register.php redirect to new login page when using block * Prepare plugin for Composer package * URL Slash description update * xml_rpc_path add php_extension_required validation * File processor use ABSPATH instead DOCUMENT_ROOT environment variable to avoid different paths on certain systems * Allow path structure to be used for New Theme Path and Child - New Theme Path = 1.4.5.1 = * Media Galery src images fix * Use separate variables for holding replacements to avoid key overwrite = 1.4.5 = * Add replacements for urls which does not contain explicit protocol e.g. http: or https: * Avada cache URLs replacements support * Fix processing_order for specific root files * Ignore wp-register.php when blocking other wp-* files * Fixed wp-register.php block * Check for replacements on url encoded links * Show message notices on General/HTML -> Html for options which may interfere with themes. * sanitize_file_path_name fix when slug include a file type extension * Prevent redirect to new url when accessing links through www * New component Feeds * Windows - Global file process rewrite rules update = 1.4.4.4 = * If no server type identification possible, try to check for .htaccess file * Improved .htaccess search mod, Use preg_grep for identify the begin and end of WordPress rules * Output notice when no supported server was found * Use separate block of rules for .htaccess file, outside of WordPress lines * Improved server htaccess support check * Moved WPH_CACHE_PATH constant declaration from mu loader to wph class * Use shutdown hock instead wp_loaded when plugin inline updated * Use FS_CHMOD_FILE for $wp_filesystem->put_contents = 1.4.4.2 = * Fixed default wp-content block * Updated compatibility with WP Fastest Cache * Fixed wp-content replacement = 1.4.4.1 = * Replace the file-process file remove update = 1.4.4 = * New component : Robots.txt to control the outputed data * Check if any environment variable has changed before Update static environment file * Improved Default constants map * File-processing check WordPress wp-load.php down the path, for custom install directory. * Templates style clean * Use cache for cleaned styles files * Set HTTP_MOD_REWRITE environment variable through mod_rewrite * Separate rewrite rules from Wordpress and use distinct block with specific marker * Add relative .htaccess file manipulation to avoid accessing permissions when WordPress installed within a subfolder. * Updated .po language file = 1.4.3 = * Tags update = 1.4.2 = * Replaced "Remove description header from Style file" and "Child - Remove description header from Style file" functionality = 1.4.1 = * Security improvments = 1.4 = * Fix: Allow only css files to be processed through the router to prevent other types from being displayed arbitrary. * Mu-loader updated version * Environment allowed path to limit css files processing * Include _get_plugin_data_markup_translate ratter WordPress method * Fix: replacement_exists returned wrong response since not using priority keys * Fix: Add media replacement, use correct replacement_exists function call * Router check for client HTTP_ACCEPT_ENCODING type to start ob_start using ob_gzhandler or not. * Update urls dynamically within stylesheets files e.g. include '../theme-name' * Use trailingslashit for theme / child new urls to make sure it match full url instead partial theme name (e.g. main-theme and main-theme-child) * Block wp-register.php * get_home_path rely on DIRECTORY_SEPARATOR for better compatibility * Check if plugin slug actually exists within all plugins list on re_plugin_path component = 1.3.9.2 = * Fix: Use of undefined constant WPH_VERSION = 1.3.9.1 = * Fix: Child theme settings not showing up * Use register_theme_directory if empty $wp_theme_directories * Plugin Options validation improvements for unique slug = 1.3.9 = * General / Html > Meta -> new option Remove DNS Prefetch * New component - Comments * Fix: Updated admin urls on plugin / theme / core update page * fix: WP Rocket url replacements for non cached pages * Regex patterns updates for better performance and compatibility * Fix: WP Rocket - support HTML Optimization, including Inline CSS and Inline JS = 1.3.8.1 = * Fix - Create mu-plugins folder if not exists = 1.3.8 = * WP Rocket plugin compatibility module * Plugin loader component through mu-plugins for earlier processing and environment manage * Fix: Plugins Update iframe styles src * Fix: WordPress Core Update redirect url * WP Fastest Cache plug in compatibility improvements = 1.3.7 = * Sanitize Admin Url for not using extension (e.g. .php) as it confuse the server upon the headers to sent * Fix: replacements links when using custom directory for WordPress core files * Fix: child theme path fix when changing style filename * New Theme Path - help resource link fix * Changed from DOMDocument to preg_replace for better compatibility with themes and plugins * Improved execution speed = 1.3.6.3 = * Fixed PHP Notice: Undefined variable: dom = 1.3.6.2 = * W3 Total Cache - Page Cache compatibility fix * Canonical tag replacement improvements * Pingback tag replacement improvements * Fix custom Background Images for body on themes which support that feature = 1.3.6 = * Post-process on options interface save for unique slugs on any text inputs to prevent conflicts. * Processing Order change for new_theme_child_path to occur before new_theme_path * New COmponent General -> Oembed * Remove Oembed tags from header * Remove Remove Resource Hints tags from header * rewrite rules update to match only non base, from (.*) to (.+) * wph-throw-404 improvements * BuddyPress conflict handle for uploaded gravatars * Admin Style changes * BuddyPress Conflict Class handler * Separate WordPress meta Generator and Other Meta Generator * Process Location value within sent Headers list if exists * Replacements for https and http urls relative to domain * Add replacements for relative paths to cover WordPress installs within a folder. * Use untralingslashit when creating theme and child theme url replacements * Fix for Call to a member function is_404() on a non-object within wp_redirect See full list of changelogs at https://www.wp-hide.com/plugin-changelogs/ == Upgrade Notice == Always keep plugin up to date. == Localization == Please help and translate this plugin to your language at https://translate.wordpress.org/projects/wp-plugins/wp-hide-security-enhancer Please help by promoting this plugin with an article on your site or any other place. If you liked this code or helped with your project, consider to leave a 5 star review on this board.PK1\ncmu-loader/wp-hide-loader.phpnuW+Ainit(); /** * Early Turn ON buffering to allow a callback * */ ob_start(array($wph, 'ob_start_callback')); ?>PK1\O=22&languages/wp-hide-security-enhancer.ponuW+Amsgid "" msgstr "" "Project-Id-Version: WP Hide & Security Enhancer\n" "POT-Creation-Date: 2019-12-10 17:26+0200\n" "PO-Revision-Date: 2019-12-10 17:28+0200\n" "Last-Translator: NspCode \n" "Language-Team: Nsp Code\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2.1\n" "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n" "X-Poedit-Basepath: ..\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-SearchPath-0: .\n" #: compatibility/webarx.php:41 compatibility/wps-hide-login.php:38 msgid "WP Hide Conflict Notice." msgstr "" #: compatibility/webarx.php:41 compatibility/wps-hide-login.php:38 msgid "" "You use another plugin (WebARX) to change the default wp-login.php. To avoid " "conflicts, activate the option within a single code." msgstr "" #: compatibility/wp-simple-firewall.php:100 msgid "" "Conflict notice: The Security Firewall - Login Protection use the " "Rename WP Login Page functionality which is the same as WP Hide - Admin " "Login Url change. " msgstr "" #: include/admin-interface.class.php:110 msgid "Save" msgstr "" #: include/admin-interface.class.php:297 msgid "" "Copy the following link to a safe place. You can use later to reset all " "plugin options, if something go wrong." msgstr "" #: include/class.environment.php:144 msgid "" "WP Hide - Unable to create environment static file. The system " "returned the following error: " msgstr "" #: include/class.environment.php:159 include/class.environment.php:175 msgid "" "Some of plugin options will not work correctly so where turned off: " "Remove description header from Style file, Child - Remove " "description header from Style file" msgstr "" #: include/class.environment.php:170 msgid "Unable to create environment data at " msgstr "" #: include/class.environment.php:170 msgid "Is file writable" msgstr "" #: include/class.environment.php:170 msgid "Check with folder/file permission or contact server administrator." msgstr "" #: include/functions.class.php:272 include/functions.class.php:294 #: include/functions.class.php:309 msgid "Value" msgstr "" #: include/functions.class.php:272 include/functions.class.php:294 #: include/functions.class.php:309 msgid "set for" msgstr "" #: include/functions.class.php:272 msgid "already in use for another option." msgstr "" #: include/functions.class.php:294 msgid "use the same base slug " msgstr "" #: include/functions.class.php:294 msgid "used for another option." msgstr "" #: include/functions.class.php:309 msgid "is a system reserved." msgstr "" #: include/functions.class.php:412 msgid "" "W3 Total Cache Plugin is active, make sure you clear the cache for new " "changes to apply" msgstr "" #: include/functions.class.php:416 msgid "" "WP Super Cache Plugin is active, make sure you clear the cache for new " "changes to apply" msgstr "" #: include/functions.class.php:421 msgid "" "WP Fastest Cache Plugin is active, make sure you clear the cache for new " "changes to apply" msgstr "" #: include/functions.class.php:1661 #: modules/components/admin-new_wp_login_php.php:114 msgid "Hello" msgstr "" #: include/functions.class.php:1662 msgid "" "This is an automated message to inform that you can always use a recovery " "link if something go wrong" msgstr "" #: include/functions.class.php:1663 #: modules/components/admin-new_wp_login_php.php:118 msgid "Please keep this url to a safe place." msgstr "" #: include/functions.class.php:2257 #, php-format msgid "The %1$s plugin header is deprecated. Use %2$s instead." msgstr "" #: include/functions.class.php:2342 #, php-format msgid "By %s." msgstr "" #: include/functions.class.php:2649 msgid "" "Help us to maintain this plugin by sending improvements, suggestions and " "reporting any issues at " msgstr "" #: include/functions.class.php:2651 msgid "Did you know there is a" msgstr "" #: include/functions.class.php:2651 msgid "version of this plug-in?" msgstr "" #: include/functions.class.php:2653 msgid "" "Did you find this plugin useful? Please support our work by submitting a " "review, spread the word about the code, or write an article about the plugin " "in your blog with a link to development site" msgstr "" #: include/wph.class.php:338 msgid "" "Are you sure to reset all settings? All options will be removed. Manual " "remove of rewrite lines is required if no access from php" msgstr "" #: include/wph.class.php:376 msgid "" "Your server run on WPEngine which works on Nginx rewrite rules, please check " "with WP Hide PRO version at" msgstr "" #: include/wph.class.php:381 msgid "" "This plugin version can't handle MultiSite environment, please check with WP " "Hide PRO version at" msgstr "" #: include/wph.class.php:386 msgid "" "Unable to launch WP Hide through mu-plugins/wp-hide-loader.php
Please " "make sure this location is writable so the plugin create the required file." msgstr "" #: include/wph.class.php:392 msgid "" "Unable to update the /mu-plugins/wp-hide-loader.php
Please make sure " "the file is writable so the plugin create the required file." msgstr "" #: include/wph.class.php:401 msgid "" "Unable to update the mu-plugins/wp-hide-loader.php
Please " "manually copy the file from" msgstr "" #: include/wph.class.php:401 msgid "to" msgstr "" #: include/wph.class.php:407 msgid "" "Permalink is required to be turned ON for WP Hide & Security Enhancer to work" msgstr "" #: include/wph.class.php:412 msgid "" "WP Hide This plugin version can't handle this server type, please " "check with PRO version at" msgstr "" #: include/wph.class.php:423 msgid "" "Unable to write custom rules to your .htaccess. Is this file writable?
No changes are being applied." msgstr "" #: include/wph.class.php:426 msgid "" "Unable to write custom rules to your web.config. Is this file writable?
No changes are being applied." msgstr "" #: include/wph.class.php:434 msgid "" "Unable to create cache folder. Is the wp-content writable?
No cache " "data will be available." msgstr "" #: include/wph.class.php:439 msgid "All Settings where restored to default" msgstr "" #: include/wph.class.php:468 msgid "Settings saved" msgstr "" #: include/wph.class.php:468 msgid "Remember, site cache clear is required." msgstr "" #: include/wph.class.php:510 msgid "Cache cleared" msgstr "" #: modules/components/admin-admin_url.php:16 #: modules/components/admin-admin_url.php:22 msgid "New Admin Url" msgstr "" #: modules/components/admin-admin_url.php:18 msgid "Create a new admin url instead default /wp-admin and /login." msgstr "" #: modules/components/admin-admin_url.php:22 #: modules/components/admin-admin_url.php:44 #: modules/components/admin-new_wp_login_php.php:22 #: modules/components/admin-new_wp_login_php.php:51 #: modules/components/cdn-setup.php:20 #: modules/components/general-admin-bar.php:50 #: modules/components/general-feed.php:20 #: modules/components/general-headers.php:21 #: modules/components/general-headers.php:46 #: modules/components/general-headers.php:69 #: modules/components/general-html.php:25 #: modules/components/general-html.php:47 #: modules/components/general-html.php:79 #: modules/components/general-html.php:102 #: modules/components/general-html.php:125 #: modules/components/general-html.php:148 #: modules/components/general-html.php:171 #: modules/components/general-meta.php:21 #: modules/components/general-meta.php:45 #: modules/components/general-meta.php:85 #: modules/components/general-meta.php:107 #: modules/components/general-meta.php:129 #: modules/components/general-meta.php:154 #: modules/components/general-meta.php:181 #: modules/components/general-meta.php:207 #: modules/components/general-meta.php:231 #: modules/components/general-meta.php:255 #: modules/components/general-oembed.php:20 #: modules/components/general-robots-txt.php:20 #: modules/components/general-scripts.php:20 #: modules/components/general-styles.php:20 #: modules/components/general-styles.php:43 #: modules/components/general-wpemoji.php:20 #: modules/components/general-wpemoji.php:42 #: modules/components/rewrite-author.php:21 #: modules/components/rewrite-author.php:42 #: modules/components/rewrite-comments.php:21 #: modules/components/rewrite-comments.php:43 #: modules/components/rewrite-json-rest.php:22 #: modules/components/rewrite-json-rest.php:54 #: modules/components/rewrite-json-rest.php:91 #: modules/components/rewrite-json-rest.php:128 #: modules/components/rewrite-json-rest.php:152 #: modules/components/rewrite-json-rest.php:175 #: modules/components/rewrite-new_include_path.php:21 #: modules/components/rewrite-new_include_path.php:41 #: modules/components/rewrite-new_plugin_path.php:21 #: modules/components/rewrite-new_plugin_path.php:40 #: modules/components/rewrite-new_plugin_path.php:92 #: modules/components/rewrite-new_theme_path.php:31 #: modules/components/rewrite-new_theme_path.php:53 #: modules/components/rewrite-new_theme_path.php:77 #: modules/components/rewrite-new_theme_path.php:123 #: modules/components/rewrite-new_theme_path.php:144 #: modules/components/rewrite-new_theme_path.php:168 #: modules/components/rewrite-new_upload_path.php:21 #: modules/components/rewrite-new_upload_path.php:40 #: modules/components/rewrite-new_xml-rpc-path.php:21 #: modules/components/rewrite-new_xml-rpc-path.php:43 #: modules/components/rewrite-new_xml-rpc-path.php:73 #: modules/components/rewrite-new_xml-rpc-path.php:102 #: modules/components/rewrite-root-files.php:23 #: modules/components/rewrite-root-files.php:45 #: modules/components/rewrite-root-files.php:67 #: modules/components/rewrite-root-files.php:101 #: modules/components/rewrite-root-files.php:124 #: modules/components/rewrite-root-files.php:147 #: modules/components/rewrite-root-files.php:170 #: modules/components/rewrite-search.php:21 #: modules/components/rewrite-search.php:42 #: modules/components/rewrite-slash.php:20 #: modules/components/rewrite-wp_content_path.php:20 #: modules/components/rewrite-wp_content_path.php:42 msgid "Help" msgstr "" #: modules/components/admin-admin_url.php:23 msgid "" "Despite the flexibility of WordPress framework, there are few ways to " "configure the admin login url customization for making a bit safer against " "unauthorized access and brute force attempts. All methods are not provided " "out of the box through WordPress core but require custom code to make it " "happen." msgstr "" #: modules/components/admin-admin_url.php:24 msgid "" "This feature provide an easy way to change the default /wp-admin/ to a " "different slug." msgstr "" #: modules/components/admin-admin_url.php:25 msgid "" "Once changed, the new url will be used to access all Dashboard sections, " "from Posts and Pages section to Plugins, Appearance and Settings." msgstr "" #: modules/components/admin-admin_url.php:38 #: modules/components/admin-admin_url.php:44 msgid "Block default Admin Url" msgstr "" #: modules/components/admin-admin_url.php:40 msgid "Block default admin url and files from being accesible." msgstr "" #: modules/components/admin-admin_url.php:45 msgid "" "If set to Yes, the old admin url will be blocked and a default theme 404 " "error page will be returned." msgstr "" #: modules/components/admin-admin_url.php:46 msgid "" "Ensure the New Admin Url option works correctly on your server before " "activate this." msgstr "" #: modules/components/admin-admin_url.php:53 #: modules/components/admin-new_wp_login_php.php:59 #: modules/components/rewrite-json-rest.php:31 #: modules/components/rewrite-json-rest.php:64 #: modules/components/rewrite-json-rest.php:99 #: modules/components/rewrite-new_include_path.php:48 #: modules/components/rewrite-new_plugin_path.php:47 #: modules/components/rewrite-new_theme_path.php:85 #: modules/components/rewrite-new_theme_path.php:176 #: modules/components/rewrite-new_upload_path.php:47 #: modules/components/rewrite-new_xml-rpc-path.php:51 #: modules/components/rewrite-new_xml-rpc-path.php:80 #: modules/components/rewrite-new_xml-rpc-path.php:109 #: modules/components/rewrite-wp_content_path.php:49 msgid "This is an advanced option !" msgstr "" #: modules/components/admin-admin_url.php:53 msgid "" "This can break the layour of dashboard admin if server not supporting the " "feature. Ensure `New Admin Url` option works fine before activate this.
If not working, use the recovery link to revert." msgstr "" #: modules/components/admin-admin_url.php:59 #: modules/components/admin-new_wp_login_php.php:65 #: modules/components/general-admin-bar.php:57 #: modules/components/general-feed.php:31 #: modules/components/general-headers.php:30 #: modules/components/general-headers.php:54 #: modules/components/general-headers.php:76 #: modules/components/general-html.php:32 #: modules/components/general-html.php:61 #: modules/components/general-html.php:87 #: modules/components/general-html.php:110 #: modules/components/general-html.php:133 #: modules/components/general-html.php:156 #: modules/components/general-html.php:179 #: modules/components/general-meta.php:30 #: modules/components/general-meta.php:54 #: modules/components/general-meta.php:70 #: modules/components/general-meta.php:92 #: modules/components/general-meta.php:114 #: modules/components/general-meta.php:138 #: modules/components/general-meta.php:163 #: modules/components/general-meta.php:190 #: modules/components/general-meta.php:216 #: modules/components/general-meta.php:240 #: modules/components/general-meta.php:264 #: modules/components/general-oembed.php:26 #: modules/components/general-robots-txt.php:30 #: modules/components/general-scripts.php:32 #: modules/components/general-styles.php:28 #: modules/components/general-styles.php:50 #: modules/components/general-wpemoji.php:27 #: modules/components/general-wpemoji.php:50 #: modules/components/rewrite-author.php:49 #: modules/components/rewrite-comments.php:50 #: modules/components/rewrite-json-rest.php:37 #: modules/components/rewrite-json-rest.php:70 #: modules/components/rewrite-json-rest.php:105 #: modules/components/rewrite-json-rest.php:135 #: modules/components/rewrite-json-rest.php:159 #: modules/components/rewrite-json-rest.php:182 #: modules/components/rewrite-new_include_path.php:54 #: modules/components/rewrite-new_plugin_path.php:53 #: modules/components/rewrite-new_theme_path.php:91 #: modules/components/rewrite-new_theme_path.php:183 #: modules/components/rewrite-new_upload_path.php:53 #: modules/components/rewrite-new_xml-rpc-path.php:57 #: modules/components/rewrite-new_xml-rpc-path.php:86 #: modules/components/rewrite-new_xml-rpc-path.php:115 #: modules/components/rewrite-root-files.php:30 #: modules/components/rewrite-root-files.php:52 #: modules/components/rewrite-root-files.php:75 #: modules/components/rewrite-root-files.php:109 #: modules/components/rewrite-root-files.php:131 #: modules/components/rewrite-root-files.php:154 #: modules/components/rewrite-root-files.php:177 #: modules/components/rewrite-search.php:49 #: modules/components/rewrite-slash.php:35 #: modules/components/rewrite-wp_content_path.php:55 msgid "No" msgstr "" #: modules/components/admin-admin_url.php:60 #: modules/components/admin-new_wp_login_php.php:66 #: modules/components/general-admin-bar.php:58 #: modules/components/general-feed.php:32 #: modules/components/general-headers.php:31 #: modules/components/general-headers.php:55 #: modules/components/general-headers.php:77 #: modules/components/general-html.php:33 #: modules/components/general-html.php:88 #: modules/components/general-html.php:111 #: modules/components/general-html.php:134 #: modules/components/general-html.php:157 #: modules/components/general-html.php:180 #: modules/components/general-meta.php:31 #: modules/components/general-meta.php:55 #: modules/components/general-meta.php:71 #: modules/components/general-meta.php:93 #: modules/components/general-meta.php:115 #: modules/components/general-meta.php:139 #: modules/components/general-meta.php:164 #: modules/components/general-meta.php:191 #: modules/components/general-meta.php:217 #: modules/components/general-meta.php:241 #: modules/components/general-meta.php:265 #: modules/components/general-oembed.php:27 #: modules/components/general-robots-txt.php:31 #: modules/components/general-scripts.php:33 #: modules/components/general-styles.php:29 #: modules/components/general-styles.php:51 #: modules/components/general-wpemoji.php:28 #: modules/components/general-wpemoji.php:51 #: modules/components/rewrite-author.php:50 #: modules/components/rewrite-comments.php:51 #: modules/components/rewrite-json-rest.php:38 #: modules/components/rewrite-json-rest.php:71 #: modules/components/rewrite-json-rest.php:106 #: modules/components/rewrite-json-rest.php:136 #: modules/components/rewrite-json-rest.php:160 #: modules/components/rewrite-json-rest.php:183 #: modules/components/rewrite-new_include_path.php:55 #: modules/components/rewrite-new_plugin_path.php:54 #: modules/components/rewrite-new_theme_path.php:92 #: modules/components/rewrite-new_theme_path.php:184 #: modules/components/rewrite-new_upload_path.php:54 #: modules/components/rewrite-new_xml-rpc-path.php:58 #: modules/components/rewrite-new_xml-rpc-path.php:87 #: modules/components/rewrite-new_xml-rpc-path.php:116 #: modules/components/rewrite-root-files.php:31 #: modules/components/rewrite-root-files.php:53 #: modules/components/rewrite-root-files.php:76 #: modules/components/rewrite-root-files.php:110 #: modules/components/rewrite-root-files.php:132 #: modules/components/rewrite-root-files.php:155 #: modules/components/rewrite-root-files.php:178 #: modules/components/rewrite-search.php:50 #: modules/components/rewrite-slash.php:36 #: modules/components/rewrite-wp_content_path.php:56 msgid "Yes" msgstr "" #: modules/components/admin-new_wp_login_php.php:16 #: modules/components/admin-new_wp_login_php.php:22 msgid "New wp-login.php" msgstr "" #: modules/components/admin-new_wp_login_php.php:18 msgid "" "Map a new wp-login.php instead default. This also need to include .php extension." msgstr "" #: modules/components/admin-new_wp_login_php.php:23 msgid "" "There are a lot of security issues that come from having your login page " "open to the public. Most specifically, brute force attacks. Because of the " "ubiquity of WordPress, these kinds of attacks are becoming more and more " "common." msgstr "" #: modules/components/admin-new_wp_login_php.php:24 msgid "" "Map a new wp-login.php instead default prevent hackers boot to attempt to " "brute force a site login. Being known only by the site owner, the url itself " "becomes private." msgstr "" #: modules/components/admin-new_wp_login_php.php:25 msgid "" "Make sure you keep the new login url to a safe place, in case to forget." msgstr "" #: modules/components/admin-new_wp_login_php.php:35 msgid "" "Make sure your log-in url is not already modified by another plugin or " "theme. In such case, you should disable other code and take advantage of " "these features." msgstr "" #: modules/components/admin-new_wp_login_php.php:47 #: modules/components/admin-new_wp_login_php.php:51 msgid "Block default wp-login.php" msgstr "" #: modules/components/admin-new_wp_login_php.php:48 msgid "Block default wp-login.php file from being accesible." msgstr "" #: modules/components/admin-new_wp_login_php.php:52 msgid "" "If set to Yes, the old login url will be blocked and a default theme 404 " "error page will be returned." msgstr "" #: modules/components/admin-new_wp_login_php.php:53 msgid "" "Ensure the New wp-login.php option works correctly on your server before " "activate this." msgstr "" #: modules/components/admin-new_wp_login_php.php:59 msgid "" "This can break the login page if server not supporting the feature. Ensure " "`New wp-login.php` option works fine before activate this.
If not " "working, use the recovery link to revert." msgstr "" #: modules/components/admin-new_wp_login_php.php:115 msgid "" "This is an automated message to inform that your login url has been changed " "at site " msgstr "" #: modules/components/admin-new_wp_login_php.php:116 msgid "The new login url is" msgstr "" #: modules/components/admin-new_wp_login_php.php:117 msgid "Additionality you can use the following link to reset all options " msgstr "" #: modules/components/cdn-setup.php:16 modules/components/cdn-setup.php:20 msgid "CDN Url" msgstr "" #: modules/components/cdn-setup.php:17 msgid "" "Some CDN providers (like stackpath.com ) replace site assets with custom " "url, enter here such url. Otherwise this option should stay empty." msgstr "" #: modules/components/cdn-setup.php:21 msgid "" "A Content Delivery Network - CDN - is a network of servers located around " "the globe in fundamental spots with fast access. It takes a while for a web " "page to load especially if the server is located far away from the user. So " "they are designed to host and deliver copies of your site's static and " "dynamic content such as images, CSS, JavaScript, audio and video streams." msgstr "" #: modules/components/cdn-setup.php:22 msgid "Sample CDN url:" msgstr "" #: modules/components/cdn-setup.php:24 msgid "" "Enter a CDN Url to allow the plugin to process assets provided through CDN " "service." msgstr "" #: modules/components/general-admin-bar.php:42 #: modules/components/general-admin-bar.php:47 msgid "Remove WordPress Admin Bar for " msgstr "" #: modules/components/general-admin-bar.php:42 msgid "role" msgstr "" #: modules/components/general-admin-bar.php:46 #: modules/components/general-admin-bar.php:50 msgid "Remove Admin Bar for " msgstr "" #: modules/components/general-admin-bar.php:47 msgid "" "role, which is being displayed by default on front side of your website." msgstr "" #: modules/components/general-admin-bar.php:50 msgid "role." msgstr "" #: modules/components/general-feed.php:16 #: modules/components/general-feed.php:20 msgid "Remove feed|rdf|rss|rss2|atom links" msgstr "" #: modules/components/general-feed.php:17 msgid "" "Remove feed|rdf|rss|rss2|atom links within head. Also block such content " "functionality." msgstr "" #: modules/components/general-feed.php:21 msgid "" "A feed is a function of special software that allows feedreaders to access a " "site, automatically looking for new content and then posting the information " "about new content and updates to another site. This provides a way for users " "to keep up with the latest and hottest information posted on different " "blogging sites." msgstr "" #: modules/components/general-feed.php:22 msgid "" "There are several different kinds of feeds, read by different feedreaders. " "Some feeds include RSS (alternately defined as 'Rich Site Summary' or " "'Really Simple Syndication'), Atom or RDF files." msgstr "" #: modules/components/general-feed.php:23 #: modules/components/general-meta.php:131 #: modules/components/general-meta.php:156 #: modules/components/general-meta.php:183 #: modules/components/general-meta.php:209 #: modules/components/general-meta.php:233 #: modules/components/general-meta.php:257 #: modules/components/general-scripts.php:23 msgid "Sample tag:" msgstr "" #: modules/components/general-feed.php:25 msgid "Set this option to Yes also disable the feed service." msgstr "" #: modules/components/general-headers.php:17 msgid "Remove Link Header" msgstr "" #: modules/components/general-headers.php:18 msgid "" "Remove Link Header being set as default by WordPress which outputs the site " "JSON url." msgstr "" #: modules/components/general-headers.php:21 #: modules/components/general-scripts.php:16 #: modules/components/general-scripts.php:20 #: modules/components/general-styles.php:16 #: modules/components/general-styles.php:20 #: modules/components/general-styles.php:43 msgid "Remove Version" msgstr "" #: modules/components/general-headers.php:22 msgid "" "HTTP header fields are components of the header section of a request and " "response messages in the Hypertext Transfer Protocol (HTTP). They define the " "operating parameters of an HTTP transaction." msgstr "" #: modules/components/general-headers.php:23 #: modules/components/general-headers.php:47 msgid "Sample header:" msgstr "" #: modules/components/general-headers.php:42 #: modules/components/general-headers.php:46 msgid "Remove X-Powered-By Header" msgstr "" #: modules/components/general-headers.php:43 msgid "Remove X-Powered-By Header if being set." msgstr "" #: modules/components/general-headers.php:65 #: modules/components/general-headers.php:69 msgid "Remove X-Pingback Header" msgstr "" #: modules/components/general-headers.php:66 msgid "Remove X-Pingback Header if being set." msgstr "" #: modules/components/general-headers.php:70 msgid "" "Pingback is one of four types of linkback methods for Web authors to request " "notification when somebody links to one of their documents. This enables " "authors to keep track of who is linking to, or referring to their articles. " "Pingback-enabled resources must either use an X-Pingback header or contain a " "element to the XML-RPC script." msgstr "" #: modules/components/general-html.php:21 #: modules/components/general-html.php:25 msgid "Remove Comments" msgstr "" #: modules/components/general-html.php:22 msgid "Remove comments from HTML source code." msgstr "" #: modules/components/general-html.php:26 msgid "" "The HTML source code usually contain many comment lines, however there is no " "use for that, unless debugging. Remove all HTML Comments, which usually " "specify Plugins Name and Version. Any Internet Explorer conditional tags are " "preserved." msgstr "" #: modules/components/general-html.php:43 #: modules/components/general-html.php:47 msgid "Minify" msgstr "" #: modules/components/general-html.php:44 msgid "Minify HTML, Inline Styles, Inline JavaScripts." msgstr "" #: modules/components/general-html.php:48 msgid "" "When you minify HTML it removes the unnecessary characters and lines in the " "source code. Indentation, comments, empty lines, etc. are not required in " "HTML. They just make the file easier to read. Cutting out all this " "unnecessary stuff can shave down your file size considerably. When you " "minify HTML code on your website, the server will send a much smaller page " "to the client making your website load quicker." msgstr "" #: modules/components/general-html.php:49 msgid "The Minify component include multiple options:" msgstr "" #: modules/components/general-html.php:54 msgid "Minify JavaScript might produce errors for specific plugins." msgstr "" #: modules/components/general-html.php:62 msgid "Html" msgstr "" #: modules/components/general-html.php:63 msgid "Html & Css" msgstr "" #: modules/components/general-html.php:64 msgid "Html & JavaScript" msgstr "" #: modules/components/general-html.php:65 msgid "All" msgstr "" #: modules/components/general-html.php:75 #: modules/components/general-html.php:79 msgid "Remove general classes from body tag" msgstr "" #: modules/components/general-html.php:76 #: modules/components/general-html.php:80 msgid "Remove general classes from body tag." msgstr "" #: modules/components/general-html.php:81 #: modules/components/general-html.php:104 #: modules/components/general-html.php:127 #: modules/components/general-html.php:150 #: modules/components/general-html.php:173 msgid "" "This can produce layout issues with certain themes, if something break this " "should be turned off." msgstr "" #: modules/components/general-html.php:98 #: modules/components/general-html.php:102 msgid "Remove ID from Menu items" msgstr "" #: modules/components/general-html.php:99 #: modules/components/general-html.php:103 msgid "Remove ID attribute from all menu items." msgstr "" #: modules/components/general-html.php:121 #: modules/components/general-html.php:125 #: modules/components/general-html.php:144 #: modules/components/general-html.php:148 msgid "Remove class from Menu items" msgstr "" #: modules/components/general-html.php:122 msgid "Remove class attribute from all menu items." msgstr "" #: modules/components/general-html.php:126 msgid "" "Remove class attribute from all menu items. Any classes which include a " "'current' prefix or contain 'has-children' will be preserved." msgstr "" #: modules/components/general-html.php:145 #: modules/components/general-html.php:149 msgid "Remove general classes from post." msgstr "" #: modules/components/general-html.php:167 #: modules/components/general-html.php:171 msgid "Remove general classes from images" msgstr "" #: modules/components/general-html.php:168 #: modules/components/general-html.php:172 msgid "Remove general classes from media tags." msgstr "" #: modules/components/general-meta.php:17 #: modules/components/general-meta.php:21 msgid "Remove WordPress Generator Meta" msgstr "" #: modules/components/general-meta.php:18 #: modules/components/general-meta.php:22 msgid "" "Remove the autogenerated meta generator tag within head (WordPress Version)." msgstr "" #: modules/components/general-meta.php:23 #: modules/components/general-meta.php:47 msgid "Tag example:" msgstr "" #: modules/components/general-meta.php:41 #: modules/components/general-meta.php:45 msgid "Remove Other Generator Meta" msgstr "" #: modules/components/general-meta.php:42 #: modules/components/general-meta.php:46 msgid "" "Remove other meta generated tags within head (eg Theme Name, Theme Version)." msgstr "" #: modules/components/general-meta.php:65 msgid "Remove Shortlink Meta" msgstr "" #: modules/components/general-meta.php:66 msgid "Remove shortlink tags within head." msgstr "" #: modules/components/general-meta.php:81 #: modules/components/general-meta.php:85 msgid "Remove DNS Prefetch" msgstr "" #: modules/components/general-meta.php:82 msgid "Remove DNS Prefetch meta generated tag." msgstr "" #: modules/components/general-meta.php:86 msgid "" "DNS prefetching allows you to resolve domain names (perform a DNS lookup in " "the background) before a user clicks on a link, which in turn can help " "improve performance." msgstr "" #: modules/components/general-meta.php:103 #: modules/components/general-meta.php:107 msgid "Remove Resource Hints" msgstr "" #: modules/components/general-meta.php:104 msgid "" "Remove Resource Hints meta generated tags within head (eg dns-prefetch, " "preconnect)." msgstr "" #: modules/components/general-meta.php:108 msgid "" "DNS prefetching and preconect allows you to resolve domain names before a " "user clicks on a link, which in turn can help and slightly improve " "performance." msgstr "" #: modules/components/general-meta.php:125 #: modules/components/general-meta.php:129 msgid "Remove wlwmanifest Meta" msgstr "" #: modules/components/general-meta.php:126 msgid "Remove the wlwmanifest tag within head." msgstr "" #: modules/components/general-meta.php:130 msgid "" "The above link is actually used by Windows Live Writer. If you don't te " "application, this is just unnecessary code." msgstr "" #: modules/components/general-meta.php:150 #: modules/components/general-meta.php:154 #: modules/components/rewrite-json-rest.php:124 msgid "Disable output the REST API link tag into page header" msgstr "" #: modules/components/general-meta.php:151 #: modules/components/rewrite-json-rest.php:125 msgid "By default a REST API link tag is being append to HTML." msgstr "" #: modules/components/general-meta.php:155 msgid "This option disable the tag output with the JSON API url." msgstr "" #: modules/components/general-meta.php:177 #: modules/components/general-meta.php:181 msgid "Remove rsd_link Meta" msgstr "" #: modules/components/general-meta.php:178 msgid "Remove the rsd_link tag within head." msgstr "" #: modules/components/general-meta.php:182 msgid "" "This helps to hide the link to the Really Simple Discovery service endpoint." msgstr "" #: modules/components/general-meta.php:203 #: modules/components/general-meta.php:207 #: modules/components/general-meta.php:231 #: modules/components/general-meta.php:255 msgid "Remove adjacent_posts_rel Meta" msgstr "" #: modules/components/general-meta.php:204 msgid "Remove the adjacent_posts_rel tag within head." msgstr "" #: modules/components/general-meta.php:208 msgid "This helps to hide the post adjacent tags." msgstr "" #: modules/components/general-meta.php:227 msgid "Remove profile link" msgstr "" #: modules/components/general-meta.php:228 msgid "Remove profile link meta tag within head." msgstr "" #: modules/components/general-meta.php:232 msgid "This helps to hide the profile tags." msgstr "" #: modules/components/general-meta.php:251 msgid "Remove canonical link" msgstr "" #: modules/components/general-meta.php:252 msgid "Remove canonical link meta tag within head." msgstr "" #: modules/components/general-meta.php:256 msgid "" "The rel=canonical element, often called the 'canonical link', is an HTML " "element that helps webmasters prevent duplicate content issues. It does this " "by specifying the 'canonical URL', the 'preferred' version of a web page - " "the original source, even." msgstr "" #: modules/components/general-oembed.php:16 #: modules/components/general-oembed.php:20 msgid "Remove Oembed" msgstr "" #: modules/components/general-oembed.php:17 msgid "Remove Oembed tags from header." msgstr "" #: modules/components/general-oembed.php:21 msgid "" "WordPress oEmbed recognizes URLs to a number of services, for example " "Youtube videos. When WordPress sees the URL it will connect to the external " "service (Youtube) and ask for the relevant HTML code to embed the video into " "the page or post." msgstr "" #: modules/components/general-robots-txt.php:16 #: modules/components/general-robots-txt.php:20 msgid "Disable admin url within Robots.txt" msgstr "" #: modules/components/general-robots-txt.php:17 msgid "" "Disable any admin url which is being automatically generated by WordPress " "when called robots.txt." msgstr "" #: modules/components/general-robots-txt.php:21 msgid "" "The robots.txt file plays a major role in search engine ranking. It blocks " "search engine bots and helps index and crawl important parts of your site." msgstr "" #: modules/components/general-robots-txt.php:22 msgid "" "As default the robots.txt also includes an allow clause to admin URL and " "admin-ajax.php url. Once customized those areas, the new slugs might not " "want to be show to anyone. Turn this option to Yes removed any reference to " "new wp-admin and admin-ajax.php." msgstr "" #: modules/components/general-robots-txt.php:23 msgid "Sample robots.txt url:" msgstr "" #: modules/components/general-scripts.php:17 msgid "Remove version number from enqueued script files." msgstr "" #: modules/components/general-scripts.php:21 msgid "" "This provide a method to remove the JavaScript version number which is being " "append at the end of every script file. Generally this is intended to be a " "plain information upon the JavaScript code version, however not being used " "within any functionality or code run." msgstr "" #: modules/components/general-scripts.php:22 msgid "" "Keeping version number for scripts provide additional information to hackers " "which try to identify specific JavaScript code and version which know as " "being vulnerable." msgstr "" #: modules/components/general-scripts.php:25 msgid "Once option set to Yes the tag becomes:" msgstr "" #: modules/components/general-styles.php:17 msgid "Remove version number from enqueued style files." msgstr "" #: modules/components/general-styles.php:21 msgid "" "This provide a method to remove the Style file version number which is being " "append at the end of every style tag. Generally this is intended to be a " "plain information upon the style code version, however not being used within " "any functionality or code run." msgstr "" #: modules/components/general-styles.php:22 msgid "" "Keeping version number for styles provide additional information to hackers " "which try to identify specific code and version which know as being " "vulnerable." msgstr "" #: modules/components/general-styles.php:39 msgid "Remove ID from link tags" msgstr "" #: modules/components/general-styles.php:40 msgid "Remove ID attribute from all link tags which include a stylesheet." msgstr "" #: modules/components/general-styles.php:44 msgid "" "This provide a method to remove the Style file ID attribute which generally " "has no usage." msgstr "" #: modules/components/general-wpemoji.php:16 #: modules/components/general-wpemoji.php:20 #: modules/components/general-wpemoji.php:42 msgid "Disable Emoji" msgstr "" #: modules/components/general-wpemoji.php:17 msgid "Disable the Emoji icon library from being loaded." msgstr "" #: modules/components/general-wpemoji.php:21 msgid "" "Not everyone use Emoji. Since WordPress load the dependencies as default, it " "decrease the overall site speed. Disabling this will remove any code and " "related resources from being loaded on front side." msgstr "" #: modules/components/general-wpemoji.php:38 msgid "Disable TinyMCE Emoji" msgstr "" #: modules/components/general-wpemoji.php:39 msgid "Disable the TinyMCE Emoji icons library from being loaded into TinyMC." msgstr "" #: modules/components/general-wpemoji.php:43 msgid "" "Disable TinyMCE Emoji This is also loaded along the WordPress default " "TinyMCE editor, but it can be disabled through this option." msgstr "" #: modules/components/rewrite-author.php:17 #: modules/components/rewrite-author.php:21 msgid "New Author Path" msgstr "" #: modules/components/rewrite-author.php:18 msgid "The default path is set to /author/" msgstr "" #: modules/components/rewrite-author.php:22 msgid "" "An author URL display all posts associated to a particular author. The " "default URL format is:" msgstr "" #: modules/components/rewrite-author.php:24 msgid "By using a value of 'contributor' this become:" msgstr "" #: modules/components/rewrite-author.php:38 #: modules/components/rewrite-author.php:42 #: modules/components/rewrite-search.php:38 #: modules/components/rewrite-search.php:42 msgid "Block default" msgstr "" #: modules/components/rewrite-author.php:39 msgid "Block default /author/ when using custom one." msgstr "" #: modules/components/rewrite-author.php:39 #: modules/components/rewrite-search.php:39 msgid "Apply only if " msgstr "" #: modules/components/rewrite-author.php:39 #: modules/components/rewrite-search.php:39 msgid "is not empty." msgstr "" #: modules/components/rewrite-author.php:43 msgid "" "After changing the default author, the old url is still accessible, this " "provide a way to block it.
The functionality apply only if New " "Author Path option is filled in." msgstr "" #: modules/components/rewrite-comments.php:17 #: modules/components/rewrite-comments.php:21 msgid "New wp-comments-post.php" msgstr "" #: modules/components/rewrite-comments.php:18 msgid "The default path is set to wp-comments-post.php" msgstr "" #: modules/components/rewrite-comments.php:22 msgid "As default the form data is being sent and processed at:" msgstr "" #: modules/components/rewrite-comments.php:24 msgid "" "This makes it easy to recognise as WordPress form. Boots always search for " "such file ( wp-comments-post.php ) and automatically submit spam messages." msgstr "" #: modules/components/rewrite-comments.php:25 msgid "Though this option a new file slug can replace the default." msgstr "" #: modules/components/rewrite-comments.php:39 #: modules/components/rewrite-comments.php:43 msgid "Block wp-comments-post.php" msgstr "" #: modules/components/rewrite-comments.php:40 msgid "Block default wp-comments-post.php." msgstr "" #: modules/components/rewrite-comments.php:44 msgid "" "After changing the default wp-comments-post.php, the old url is still " "accessible, this provide a way to block the old.
The functionality " "apply only if New wp-comments-post.php option is filled in." msgstr "" #: modules/components/rewrite-json-rest.php:18 #: modules/components/rewrite-json-rest.php:22 msgid "Disable JSON REST V1 service" msgstr "" #: modules/components/rewrite-json-rest.php:19 #: modules/components/rewrite-json-rest.php:51 msgid "An API service for WordPress which is active by default." msgstr "" #: modules/components/rewrite-json-rest.php:23 #: modules/components/rewrite-json-rest.php:55 msgid "" "The WordPress REST API is an easy-to-use set of HTTP endpoints which allows " "access a site data in simple JSON format. That including users, posts, " "taxonomies and more. Retrieving or updating is as simple as sending a HTTP " "request." msgstr "" #: modules/components/rewrite-json-rest.php:24 #: modules/components/rewrite-json-rest.php:56 msgid "" "A REST API can be consumed everywhere. On mobile applications, on front-end " "(web apps) or any other devices that have access on the net, practically " "everything can connect from anywhere to your site and interact though JSON " "REST API service." msgstr "" #: modules/components/rewrite-json-rest.php:25 msgid "" "V1 was the first development version of API, which currently is deprecated. " "To disable the usage of it, simply chose Yes." msgstr "" #: modules/components/rewrite-json-rest.php:31 msgid "" "This can break specific functionality. Some plugins might use this API. Once " "active test it thoroughly.
If not working, set to No to revert." msgstr "" #: modules/components/rewrite-json-rest.php:50 #: modules/components/rewrite-json-rest.php:54 msgid "Disable JSON REST V2 service" msgstr "" #: modules/components/rewrite-json-rest.php:57 msgid "" "V2 is the current development version of API, which is included into " "WordPress as default. To disable the usage of it, simply chose Yes." msgstr "" #: modules/components/rewrite-json-rest.php:58 #: modules/components/rewrite-json-rest.php:93 msgid "" "This might be required by specific plugins, including new WordPress editor " "Gutenberg." msgstr "" #: modules/components/rewrite-json-rest.php:64 #: modules/components/rewrite-json-rest.php:99 msgid "" "This can break specific functionality. Some plugins like Gutenberg editor " "use this API. Once active test it thoroughly.
If not working, set to " "No to revert." msgstr "" #: modules/components/rewrite-json-rest.php:87 #: modules/components/rewrite-json-rest.php:91 msgid "Block any JSON REST calls" msgstr "" #: modules/components/rewrite-json-rest.php:88 msgid "Any call for JSON REST API service will be blocked." msgstr "" #: modules/components/rewrite-json-rest.php:92 msgid "This blocks the JSON REST API service." msgstr "" #: modules/components/rewrite-json-rest.php:128 msgid "disable_json_rest_wphead_link" msgstr "" #: modules/components/rewrite-json-rest.php:129 msgid "" "As default the API url is being append into the front html head tag. Using " "this option, it will be replaced." msgstr "" #: modules/components/rewrite-json-rest.php:148 msgid "Disable JSON REST WP RSD endpoint from XML-RPC responses" msgstr "" #: modules/components/rewrite-json-rest.php:149 msgid "By default a WP RSD endpoint is being append to the XML respose." msgstr "" #: modules/components/rewrite-json-rest.php:152 msgid "disable_json_rest_xmlrpc_rsd" msgstr "" #: modules/components/rewrite-json-rest.php:153 msgid "Disable any RSD endpoint from a XML-RPC response." msgstr "" #: modules/components/rewrite-json-rest.php:171 msgid "Disable Sends a Link header for the REST API" msgstr "" #: modules/components/rewrite-json-rest.php:172 msgid "On template_redirect, disable Sends a Link header for the REST API." msgstr "" #: modules/components/rewrite-json-rest.php:175 msgid "disable_json_rest_template_redirect" msgstr "" #: modules/components/rewrite-json-rest.php:176 msgid "Disable Sends a Link header for the REST API, on template_redirect" msgstr "" #: modules/components/rewrite-new_include_path.php:17 #: modules/components/rewrite-new_include_path.php:21 #: modules/components/rewrite-new_include_path.php:41 msgid "New Includes Path" msgstr "" #: modules/components/rewrite-new_include_path.php:18 msgid "Change default /wp-includes path." msgstr "" #: modules/components/rewrite-new_include_path.php:22 msgid "" "As default a WordPress installation contain a wp-include folder which store " "files and resources used by WordPress core, themes and plugin. The wp-" "includes is a common fingerprint, which makes easily to anyone to identify " "the site as being created on WordPress." msgstr "" #: modules/components/rewrite-new_include_path.php:24 msgid "" "After filling in this option e.g. resources the links will change to this:" msgstr "" #: modules/components/rewrite-new_include_path.php:29 msgid "e.g. my_includes" msgstr "" #: modules/components/rewrite-new_include_path.php:37 msgid "Block wp-includes URL" msgstr "" #: modules/components/rewrite-new_include_path.php:38 msgid "" "Block /wp-includes/ files from being accesible through default urls.
Apply only if New Includes Path is not empty." msgstr "" #: modules/components/rewrite-new_include_path.php:42 msgid "" "This blocks the default wp-includes urls only for non loged-in users.
The functionality apply only if New Includes Path option is filled " "in." msgstr "" #: modules/components/rewrite-new_include_path.php:48 #: modules/components/rewrite-new_plugin_path.php:47 msgid "" "This can break the layout if server not supporting the feature. Ensure `New " "Includes Path` option works fine before activate this. Once active test it " "thoroughly.
If not working, set to No to revert." msgstr "" #: modules/components/rewrite-new_plugin_path.php:17 #: modules/components/rewrite-new_plugin_path.php:21 msgid "New Plugins Path" msgstr "" #: modules/components/rewrite-new_plugin_path.php:18 msgid "The default plugins path is set to" msgstr "" #: modules/components/rewrite-new_plugin_path.php:22 msgid "" "Use any alphanumeric symbols for this field which will be used as the new " "slug for the plugins folder. Presuming the `apps` slug is being used, all " "plugins urls become to something like this:" msgstr "" #: modules/components/rewrite-new_plugin_path.php:36 #: modules/components/rewrite-new_plugin_path.php:40 msgid "Block plugins URL" msgstr "" #: modules/components/rewrite-new_plugin_path.php:37 msgid "" "Block default /wp-content/plugins/ files from being accesible through " "default urls." msgstr "" #: modules/components/rewrite-new_plugin_path.php:41 #: modules/components/rewrite-new_upload_path.php:41 msgid "" "This blocks the default wp-content/plugins/ url.
The functionality " "apply only if New Plugins Path option is filled in." msgstr "" #: modules/components/rewrite-new_plugin_path.php:88 #: modules/components/rewrite-new_plugin_path.php:92 msgid "New Path for" msgstr "" #: modules/components/rewrite-new_plugin_path.php:88 msgid "plugin" msgstr "" #: modules/components/rewrite-new_plugin_path.php:89 msgid "This setting if set, overwrites the" msgstr "" #: modules/components/rewrite-new_plugin_path.php:89 msgid "New Plugin Path" msgstr "" #: modules/components/rewrite-new_plugin_path.php:89 msgid "value for this plugin." msgstr "" #: modules/components/rewrite-new_theme_path.php:27 #: modules/components/rewrite-new_theme_path.php:31 #: modules/components/rewrite-new_theme_path.php:119 #: modules/components/rewrite-new_theme_path.php:123 msgid "New Theme Path" msgstr "" #: modules/components/rewrite-new_theme_path.php:28 msgid "Change theme url, which as default the path is set to" msgstr "" #: modules/components/rewrite-new_theme_path.php:32 msgid "" "This option helps to change the theme url to a custom one. As default all " "theme assets ( styles, JavaScript etc ) are loaded using the theme url and " "appear on front side html source like this:" msgstr "" #: modules/components/rewrite-new_theme_path.php:34 msgid "" "When using this option, if filling with `template`, all urls on front side " "become as follow:" msgstr "" #: modules/components/rewrite-new_theme_path.php:39 #: modules/components/rewrite-new_theme_path.php:60 #: modules/components/rewrite-new_theme_path.php:131 #: modules/components/rewrite-new_theme_path.php:151 msgid "Example" msgstr "" #: modules/components/rewrite-new_theme_path.php:39 msgid "template" msgstr "" #: modules/components/rewrite-new_theme_path.php:49 #: modules/components/rewrite-new_theme_path.php:53 #: modules/components/rewrite-new_theme_path.php:77 #: modules/components/rewrite-new_theme_path.php:140 #: modules/components/rewrite-new_theme_path.php:144 #: modules/components/rewrite-new_theme_path.php:168 msgid "New Style File Path" msgstr "" #: modules/components/rewrite-new_theme_path.php:50 msgid "Change default theme style file style.css, current path is set to" msgstr "" #: modules/components/rewrite-new_theme_path.php:54 msgid "" "This allow to change the default style.css filename to something else e.g. " "template-style.css. Per this example, on front side the main style link " "change from /style.css to /template-style.css" msgstr "" #: modules/components/rewrite-new_theme_path.php:60 msgid "skin.css" msgstr "" #: modules/components/rewrite-new_theme_path.php:70 #: modules/components/rewrite-new_theme_path.php:161 msgid "Remove description header from Style file" msgstr "" #: modules/components/rewrite-new_theme_path.php:73 msgid "Strip out all meta data from style file." msgstr "" #: modules/components/rewrite-new_theme_path.php:78 #: modules/components/rewrite-new_theme_path.php:169 msgid "" "Strip out all meta data from style file as Theme Name, Theme URI, Author " "etc. Those are important informations for hackers to find out possible theme " "security breaches. A list of headers can e found at" msgstr "" #: modules/components/rewrite-new_theme_path.php:78 #: modules/components/rewrite-new_theme_path.php:169 msgid "Theme Headers" msgstr "" #: modules/components/rewrite-new_theme_path.php:79 #: modules/components/rewrite-new_theme_path.php:170 msgid "" "This feature may fail if style file url not available on html ( being " "concatenated )." msgstr "" #: modules/components/rewrite-new_theme_path.php:85 msgid "" "This can break the layout if server not supporting the feature. Once active " "test it thoroughly.
If not working, set to No to revert." msgstr "" #: modules/components/rewrite-new_theme_path.php:95 #: modules/components/rewrite-new_theme_path.php:187 msgid "" "This functionality use caching! If active, cache clear is recommended on " "styles updates." msgstr "" #: modules/components/rewrite-new_theme_path.php:95 #: modules/components/rewrite-new_theme_path.php:187 msgid "Cache Clear" msgstr "" #: modules/components/rewrite-new_theme_path.php:120 msgid "Change child theme url, which as default the path is set to" msgstr "" #: modules/components/rewrite-new_theme_path.php:124 msgid "" "This option helps to change the child theme url to a custom one. As default " "all theme assets ( styles, JavaScript etc ) are loaded using the theme url " "and appear on front side html source like this:" msgstr "" #: modules/components/rewrite-new_theme_path.php:126 msgid "" "When using this option, if filling with `template-child`, all urls on front " "side become as follow:" msgstr "" #: modules/components/rewrite-new_theme_path.php:131 msgid "template-child" msgstr "" #: modules/components/rewrite-new_theme_path.php:141 msgid "Change default child theme style file style.css, current path is set to" msgstr "" #: modules/components/rewrite-new_theme_path.php:145 msgid "" "This allow to change the default style.css filename to something else e.g. " "template-style.css. Per this example, on front side the main style link " "change from /style.css to /child-style.css" msgstr "" #: modules/components/rewrite-new_theme_path.php:151 msgid "child-skin.css" msgstr "" #: modules/components/rewrite-new_theme_path.php:164 msgid "Strip out all meta data from child theme style file." msgstr "" #: modules/components/rewrite-new_theme_path.php:176 msgid "" "This can break the layout if server not supporting the feature. Ensure all " "regular options works fine before activate this. Once active test it " "thoroughly.
If not working, set to No to revert." msgstr "" #: modules/components/rewrite-new_theme_path.php:823 msgid "" "When changing the Child Theme Path it is recommended to also change the Main " "Theme Path to avoid relative paths issues within style files and layout " "break." msgstr "" #: modules/components/rewrite-new_upload_path.php:17 #: modules/components/rewrite-new_upload_path.php:21 msgid "New Uploads Path" msgstr "" #: modules/components/rewrite-new_upload_path.php:18 msgid "The default uploads path is set to" msgstr "" #: modules/components/rewrite-new_upload_path.php:22 msgid "" "Use any alphanumeric symbols for this field which will be used as the new " "slug for the uploads folder. Using this option the default media folder can " "be mapped to another path. Filling with a slug like 'media' the links become " "like this:" msgstr "" #: modules/components/rewrite-new_upload_path.php:27 msgid "e.g. media" msgstr "" #: modules/components/rewrite-new_upload_path.php:36 #: modules/components/rewrite-new_upload_path.php:40 msgid "Block default uploads URL" msgstr "" #: modules/components/rewrite-new_upload_path.php:37 msgid "" "Block default /wp-content/uploads/ media folder from being accesible through " "default urls." msgstr "" #: modules/components/rewrite-new_upload_path.php:47 msgid "" "This can break the layout if server not supporting the feature. Ensure `New " "Uploads Path` option works fine before activate this. Once active test it " "thoroughly.
If not working, set to No to revert." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:17 #: modules/components/rewrite-new_xml-rpc-path.php:21 #: modules/components/rewrite-slash.php:20 msgid "New XML-RPC Path" msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:18 msgid "The default XML-RPC path is set to xmlrpc.php." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:22 msgid "" "XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode " "its calls and HTTP as a transport mechanism. This service allow other " "applications to talk to your WordPress site." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:23 msgid "As default the path to XML-RPC file is:" msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:25 msgid "" "Through this option it can be changed to anything else. This ensure the " "protocol will not be called by anyone who don't know the actual path." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:30 msgid "e.g. my-xml-rpc.php" msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:39 #: modules/components/rewrite-new_xml-rpc-path.php:43 msgid "Block default xmlrpc.php" msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:40 msgid "Shut down XML-RPC service." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:44 msgid "" "This blocks the default XML-RPC service. The functionality apply if New " "XML-RPC Path option is NOT filled in." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:45 msgid "" "Keep in mind that some plugins like Jetpack use this API, so disabling might " "break specific functionality." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:51 #: modules/components/rewrite-new_xml-rpc-path.php:109 msgid "" "This can break specific functionality. Some plugins like Jetpack use this " "API. Once active test it thoroughly.
If not working, set to No " "to revert." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:69 #: modules/components/rewrite-new_xml-rpc-path.php:73 msgid "Disable XML-RPC authentication" msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:70 msgid "" "Filter whether XML-RPC methods requiring authentication, such as for " "publishing purposes, are enabled." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:74 msgid "" "As default it require authentication for the protocol to be used along with " "a remote application. Activating the option, no authentication will be " "required through a call. Recommended is to be set to No." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:80 msgid "" "Once active test it thoroughly.
If not working, set to No to " "revert." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:98 #: modules/components/rewrite-new_xml-rpc-path.php:102 msgid "Remove pingback" msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:99 msgid "Remove pingback link tag from theme." msgstr "" #: modules/components/rewrite-new_xml-rpc-path.php:103 msgid "" "A pingback is one of four types of link-back methods for Web authors to " "request notification when somebody links to one of their documents. This " "enables authors to keep track of who is linking to, or referring to their " "articles Using this option this functionality can be removed." msgstr "" #: modules/components/rewrite-root-files.php:19 #: modules/components/rewrite-root-files.php:23 msgid "Block license.txt" msgstr "" #: modules/components/rewrite-root-files.php:20 msgid "Block access to license.txt root file" msgstr "" #: modules/components/rewrite-root-files.php:24 msgid "" "This is a text file which contain the licensing terms for WordPress " "framework. Obviously you don't want that visible as every site containing " "such file must be a WordPress." msgstr "" #: modules/components/rewrite-root-files.php:41 #: modules/components/rewrite-root-files.php:45 msgid "Block readme.html" msgstr "" #: modules/components/rewrite-root-files.php:42 msgid "Block access to readme.html root file" msgstr "" #: modules/components/rewrite-root-files.php:46 msgid "" "A Hypertext Markup Language file with general information about installed " "WordPress, version, instalation steps, updating, requirements, resources etc." msgstr "" #: modules/components/rewrite-root-files.php:63 #: modules/components/rewrite-root-files.php:67 #: modules/components/rewrite-root-files.php:101 msgid "Block wp-activate.php" msgstr "" #: modules/components/rewrite-root-files.php:64 msgid "Block access to wp-activate.php file." msgstr "" #: modules/components/rewrite-root-files.php:68 msgid "" "Block access to wp-activate.php file. Through this file new users confirms " "that the activation key that is received in the email after signs up for a " "new blog, matches the key for that user." msgstr "" #: modules/components/rewrite-root-files.php:69 msgid "If anyone can register on your site, you should keep this no NO." msgstr "" #: modules/components/rewrite-root-files.php:88 msgid "" "Unable to identify site domain IP, blocking wp-cron.php will stop the site " "internal WordPress cron functionality." msgstr "" #: modules/components/rewrite-root-files.php:92 msgid "Site domain rezolved to IP" msgstr "" #: modules/components/rewrite-root-files.php:92 msgid "" "If blocked, all internal calls to cron will continue to run fine. All calls " "from a different IP are blocked, including direct calls." msgstr "" #: modules/components/rewrite-root-files.php:97 msgid "Block wp-cron.php" msgstr "" #: modules/components/rewrite-root-files.php:102 msgid "" "The file wp-cron.php is the portion of WordPress that handles scheduled " "events within a WordPress site. If remote cron calls not being used this can " "be set to Yes.." msgstr "" #: modules/components/rewrite-root-files.php:120 #: modules/components/rewrite-root-files.php:124 msgid "Block wp-signup.php" msgstr "" #: modules/components/rewrite-root-files.php:121 msgid "Block default wp-signup.php file." msgstr "" #: modules/components/rewrite-root-files.php:125 msgid "" "The wp-signup.php allow for anyone to register to your site. If the " "registration functionality is turned off, is safe to block the wp-signup." "php." msgstr "" #: modules/components/rewrite-root-files.php:143 #: modules/components/rewrite-root-files.php:147 msgid "Block wp-register.php" msgstr "" #: modules/components/rewrite-root-files.php:144 msgid "Block default wp-register.php file." msgstr "" #: modules/components/rewrite-root-files.php:148 msgid "" "This is a deprecated file but still present in many WordPress installs. " "When called the user is redirected to /register page. Is safe to block the " "wp-register.php." msgstr "" #: modules/components/rewrite-root-files.php:166 #: modules/components/rewrite-root-files.php:170 msgid "Block other wp-*.php files" msgstr "" #: modules/components/rewrite-root-files.php:167 msgid "Block other wp-*.php files in the root." msgstr "" #: modules/components/rewrite-root-files.php:171 msgid "" "Block other wp-*.php files. E.g. wp-blog-header.php, wp-config.php, wp-cron." "php. Those files are used internally, blocking those will not affect any " "functionality. Other root files (wp-activate.php, wp-login.php, wp-signup." "php) are ignored, they can be controlled through own setting." msgstr "" #: modules/components/rewrite-search.php:17 #: modules/components/rewrite-search.php:21 msgid "New Search Path" msgstr "" #: modules/components/rewrite-search.php:18 msgid "The default path is set to /search/" msgstr "" #: modules/components/rewrite-search.php:22 msgid "" "The /search/ is the default slug used to display the results for the search " "page. The default URL format is:" msgstr "" #: modules/components/rewrite-search.php:24 msgid "By using a value of 'find' this become:" msgstr "" #: modules/components/rewrite-search.php:39 msgid "Block default /search/ when using custom one." msgstr "" #: modules/components/rewrite-search.php:43 msgid "" "After changing the default author, the old url is still accessible, this " "provide a way to block it.
The functionality apply only if New " "Search Path option is filled in." msgstr "" #: modules/components/rewrite-slash.php:16 msgid "URL's add Slash" msgstr "" #: modules/components/rewrite-slash.php:17 msgid "Add an end slash to all links which does not include one." msgstr "" #: modules/components/rewrite-slash.php:21 msgid "As default the WordPress url's format include an ending slash. " msgstr "" #: modules/components/rewrite-slash.php:22 msgid "" "There are situations when this slash is not being append. Turning on this " "option, all links will get a slash if not included as default. Disguise the " "existence of files and folders, since they will not be slashed as deafault, " "all receive an ending slashed." msgstr "" #: modules/components/rewrite-slash.php:23 msgid "For example the following link:" msgstr "" #: modules/components/rewrite-slash.php:25 msgid "will be redirected to:" msgstr "" #: modules/components/rewrite-slash.php:27 msgid "" "On certain servers this can produce a small lag measured in milliseconds, " "for each url." msgstr "" #: modules/components/rewrite-slash.php:28 msgid "If produce endless redirects, turn this option off." msgstr "" #: modules/components/rewrite-wp_content_path.php:16 #: modules/components/rewrite-wp_content_path.php:20 msgid "New Content Path" msgstr "" #: modules/components/rewrite-wp_content_path.php:17 msgid "Your default wp-content path is set to" msgstr "" #: modules/components/rewrite-wp_content_path.php:21 msgid "" "As default a WordPress installation contain a wp-content folder which store " "files and resources used by themes and plugin. The wp-content is a common " "fingerprint, which makes easily to anyone to identify the site as being " "created on WordPress." msgstr "" #: modules/components/rewrite-wp_content_path.php:23 msgid "After filling in this option e.g. data the links become:" msgstr "" #: modules/components/rewrite-wp_content_path.php:28 msgid "e.g. my_content" msgstr "" #: modules/components/rewrite-wp_content_path.php:38 msgid "Block wp-content URL" msgstr "" #: modules/components/rewrite-wp_content_path.php:39 msgid "Block default /wp-content/ path. Your default wp-content path is set to" msgstr "" #: modules/components/rewrite-wp_content_path.php:42 msgid "New content Path" msgstr "" #: modules/components/rewrite-wp_content_path.php:43 msgid "" "This blocks the default wp-content urls only for non loged-in users.
The functionality apply only if New Content Path option is filled in." msgstr "" #: modules/components/rewrite-wp_content_path.php:49 msgid "" "This can break the layout if server not supporting the feature. Ensure New " "Includes Path options works fine before activate this. Once active test it " "thoroughly.
If not working, set to No to revert." msgstr "" #: modules/module-admin.php:45 msgid "Admin" msgstr "" #: modules/module-admin.php:57 msgid "WP Hide & Security Enhancer - Admin" msgstr "" #: modules/module-cdn.php:43 msgid "CDN" msgstr "" #: modules/module-cdn.php:55 msgid "WP Hide & Security Enhancer - CDN" msgstr "" #: modules/module-general.php:69 msgid "General / Html" msgstr "" #: modules/module-general.php:81 msgid "WP Hide & Security Enhancer - General / Html" msgstr "" #: modules/module-rewrite.php:77 modules/module-rewrite.php:88 msgid "Rewrite" msgstr "" #: modules/module-rewrite.php:88 msgid "WP Hide & Security Enhancer" msgstr "" PK1\ h&languages/wp-hide-security-enhancer.monuW+A$,89Project-Id-Version: WP Hide & Security Enhancer POT-Creation-Date: 2019-12-10 17:26+0200 PO-Revision-Date: 2019-12-10 17:28+0200 Last-Translator: NspCode Language-Team: Nsp Code Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 2.2.1 X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e X-Poedit-Basepath: .. Plural-Forms: nplurals=2; plural=(n != 1); X-Poedit-SearchPath-0: . PK1\'Mmodules/module-general.phpnuW+Acomponents[] = new WPH_module_general_meta(); include(WPH_PATH . "/modules/components/general-admin-bar.php"); $this->components[] = new WPH_module_general_admin_bar(); include(WPH_PATH . "/modules/components/general-feed.php"); $this->components[] = new WPH_module_general_feed(); include(WPH_PATH . "/modules/components/general-robots-txt.php"); $this->components[] = new WPH_module_general_robots_txt(); include(WPH_PATH . "/modules/components/general-wpemoji.php"); $this->components[] = new WPH_module_general_wpemoji(); include(WPH_PATH . "/modules/components/general-styles.php"); $this->components[] = new WPH_module_general_styles(); include(WPH_PATH . "/modules/components/general-scripts.php"); $this->components[] = new WPH_module_general_scripts(); include(WPH_PATH . "/modules/components/general-oembed.php"); $this->components[] = new WPH_module_general_oembed(); include(WPH_PATH . "/modules/components/general-headers.php"); $this->components[] = new WPH_module_general_headers(); include(WPH_PATH . "/modules/components/general-html.php"); $this->components[] = new WPH_module_general_html(); //action available for mu-plugins do_action('wp-hide/module_load_components', $this); } function use_tabs() { return TRUE; } function get_module_id() { return 'general'; } function get_module_slug() { return 'wp-hide-general'; } function get_interface_menu_data() { $interface_data = array(); $interface_data['menu_title'] = __('General / Html', 'wp-hide-security-enhancer'); $interface_data['menu_slug'] = self::get_module_slug(); $interface_data['menu_position'] = 20; return $interface_data; } function get_interface_data() { $interface_data = array(); $interface_data['title'] = __('WP Hide & Security Enhancer - General / Html', 'wp-hide-security-enhancer'); $interface_data['description'] = ''; $interface_data['handle_title'] = ''; return $interface_data; } } ?>PK1\DDmodules/module-cdn.phpnuW+Acomponents[] = new WPH_module_cdn_setup(); //action available for mu-plugins do_action('wp-hide/module_load_components', $this); } function use_tabs() { return TRUE; } function get_module_id() { return 'cdn'; } function get_module_slug() { return 'wp-hide-cdn'; } function get_interface_menu_data() { $interface_data = array(); $interface_data['menu_title'] = __('CDN', 'wp-hide-security-enhancer'); $interface_data['menu_slug'] = self::get_module_slug(); $interface_data['menu_position'] = 50; return $interface_data; } function get_interface_data() { $interface_data = array(); $interface_data['title'] = __('WP Hide & Security Enhancer - CDN', 'wp-hide-security-enhancer'); $interface_data['description'] = ''; $interface_data['handle_title'] = ''; return $interface_data; } } ?>PK1\:cbbmodules/module-rewrite.phpnuW+Acomponents[] = new WPH_module_rewrite_default(); include(WPH_PATH . "/modules/components/rewrite-new_theme_path.php"); $this->components[] = new WPH_module_rewrite_new_theme_path(); include(WPH_PATH . "/modules/components/rewrite-new_include_path.php"); $this->components[] = new WPH_module_rewrite_new_include_path(); include(WPH_PATH . "/modules/components/rewrite-wp_content_path.php"); $this->components[] = new WPH_module_rewrite_wp_content_path(); include(WPH_PATH . "/modules/components/rewrite-new_plugin_path.php"); $this->components[] = new WPH_module_rewrite_new_plugin_path(); include(WPH_PATH . "/modules/components/rewrite-new_upload_path.php"); $this->components[] = new WPH_module_rewrite_new_upload_path(); include(WPH_PATH . "/modules/components/rewrite-comments.php"); $this->components[] = new WPH_module_rewrite_comments(); include(WPH_PATH . "/modules/components/rewrite-author.php"); $this->components[] = new WPH_module_rewrite_author(); include(WPH_PATH . "/modules/components/rewrite-search.php"); $this->components[] = new WPH_module_rewrite_search(); include(WPH_PATH . "/modules/components/rewrite-new_xml-rpc-path.php"); $this->components[] = new WPH_module_rewrite_new_xml_rpc_path(); include(WPH_PATH . "/modules/components/rewrite-json-rest.php"); $this->components[] = new WPH_module_rewrite_json_rest(); include(WPH_PATH . "/modules/components/rewrite-root-files.php"); $this->components[] = new WPH_module_rewrite_root_files(); include(WPH_PATH . "/modules/components/rewrite-slash.php"); $this->components[] = new WPH_module_rewrite_slash(); //action available for mu-plugins do_action('wp-hide/module_load_components', $this); } function use_tabs() { return true; } function get_module_id() { return 'rewrite'; } function get_module_slug() { return 'wp-hide'; } function get_interface_menu_data() { $interface_data = array(); $interface_data['menu_title'] = __('Rewrite', 'wp-hide-security-enhancer'); $interface_data['menu_slug'] = self::get_module_slug(); $interface_data['menu_position'] = 1; return $interface_data; } function get_interface_data() { $interface_data = array(); $interface_data['title'] = __('WP Hide & Security Enhancer', 'wp-hide-security-enhancer') . ' - ' . __('Rewrite', 'wp-hide-security-enhancer'); $interface_data['description'] = ''; $interface_data['handle_title'] = ''; return $interface_data; } } ?>PK1\SR٧33&modules/components/general-headers.phpnuW+Amodule_settings[] = array( 'id' => 'remove_header_link', 'label' => __('Remove Link Header', 'wp-hide-security-enhancer'), 'description' => __('Remove Link Header being set as default by WordPress which outputs the site JSON url.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove Version', 'wp-hide-security-enhancer'), 'description' => __("HTTP header fields are components of the header section of a request and response messages in the Hypertext Transfer Protocol (HTTP). They define the operating parameters of an HTTP transaction.", 'wp-hide-security-enhancer') . "

" . __("Sample header:", 'wp-hide-security-enhancer') . "
Link: <http://-domain-name-/wp-json/>; rel="https://api.w.org/"", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/request-headers/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 70 ); $this->module_settings[] = array( 'id' => 'remove_x_powered_by', 'label' => __('Remove X-Powered-By Header', 'wp-hide-security-enhancer'), 'description' => __('Remove X-Powered-By Header if being set.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove X-Powered-By Header', 'wp-hide-security-enhancer'), 'description' => __("Sample header:", 'wp-hide-security-enhancer') . "
x-powered-by: 'W3 Total Cache/0.9.5'", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/request-headers/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 70 ); $this->module_settings[] = array( 'id' => 'remove_x_pingback', 'label' => __('Remove X-Pingback Header', 'wp-hide-security-enhancer'), 'description' => __('Remove X-Pingback Header if being set.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove X-Pingback Header', 'wp-hide-security-enhancer'), 'description' => __("Pingback is one of four types of linkback methods for Web authors to request notification when somebody links to one of their documents. This enables authors to keep track of who is linking to, or referring to their articles. Pingback-enabled resources must either use an X-Pingback header or contain a element to the XML-RPC script.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/request-headers/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 70 ); return $this->module_settings; } function _init_remove_header_link( $saved_field_data ) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 ); } function _init_remove_x_powered_by($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; } function _callback_saved_remove_x_powered_by($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = ' Header unset X-Powered-By '; if($this->wph->server_web_config === TRUE) { //this goes after section //to be implemented at a later version /* $processing_response['rewrite'] = ' '; */ $processing_response['rewrite'] = ''; } return $processing_response; } function _init_remove_x_pingback($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; } function _callback_saved_remove_x_pingback($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = ' Header unset X-Pingback '; if($this->wph->server_web_config === TRUE) { $processing_response['rewrite'] = ''; } return $processing_response; } } ?>PK1\oo=++'modules/components/rewrite-comments.phpnuW+Amodule_settings[] = array( 'id' => 'new_wp_comments_post', 'label' => __('New wp-comments-post.php', 'wp-hide-security-enhancer'), 'description' => __('The default path is set to wp-comments-post.php', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New wp-comments-post.php', 'wp-hide-security-enhancer'), 'description' => __("As default the form data is being sent and processed at:", 'wp-hide-security-enhancer') ."

https://-domain-name-/wp-comments-post.php

" . __("This makes it easy to recognise as WordPress form. Boots always search for such file ( wp-comments-post.php ) and automatically submit spam messages.", 'wp-hide-security-enhancer') . __("Though this option a new file slug can replace the default.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-comments/', 'input_value_extension' => 'php' ), 'value_description' => 'e.g. user-input.php', 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name'), array($this->wph->functions, 'php_extension_required')), 'processing_order' => 60 ); $this->module_settings[] = array( 'id' => 'block_wp_comments_post_url', 'label' => __('Block wp-comments-post.php', 'wp-hide-security-enhancer'), 'description' => __('Block default wp-comments-post.php.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block wp-comments-post.php', 'wp-hide-security-enhancer'), 'description' => __("After changing the default wp-comments-post.php, the old url is still accessible, this provide a way to block the old.
The functionality apply only if New wp-comments-post.php option is filled in.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-comments/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 60 ); return $this->module_settings; } function _init_new_wp_comments_post($saved_field_data) { if(empty($saved_field_data)) return FALSE; //add default plugin path replacement $url = trailingslashit( site_url() ) . 'wp-comments-post.php'; $replacement = trailingslashit( home_url() ) . $saved_field_data; $this->wph->functions->add_replacement( $url , $replacement ); return TRUE; } function _callback_saved_new_wp_comments_post($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $file_path = $this->wph->functions->get_url_path( trailingslashit(site_url()) . 'wp-comments-post.php' ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $file_path, TRUE, FALSE ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $saved_field_data . ' '. $rewrite_to .' [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _callback_saved_block_wp_comments_post_url($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //prevent from blocking if the wp_comments_post is not modified $new_wp_comments_post = ltrim(rtrim($this->wph->functions->get_module_item_setting('new_wp_comments_post'), "/"), "/"); if (empty( $new_wp_comments_post )) return FALSE; $rewrite_base = $this->wph->functions->get_rewrite_base( 'wp-comments-post.php', FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^" . $rewrite_base ." ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } } ?>PK1\ʜ %modules/components/general-oembed.phpnuW+Amodule_settings[] = array( 'id' => 'remove_oembed', 'label' => __('Remove Oembed', 'wp-hide-security-enhancer'), 'description' => __('Remove Oembed tags from header.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove Oembed', 'wp-hide-security-enhancer'), 'description' => __("WordPress oEmbed recognizes URLs to a number of services, for example Youtube videos. When WordPress sees the URL it will connect to the external service (Youtube) and ask for the relevant HTML code to embed the video into the page or post.", 'wp-hide-security-enhancer'), ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 75 ); return $this->module_settings; } function _init_remove_oembed($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action( 'wp_head', 'wp_oembed_add_discovery_links' ); remove_action( 'wp_head', 'wp_oembed_add_host_js' ); } } ?>PK1\X  $modules/components/rewrite-slash.phpnuW+Amodule_settings[] = array( 'id' => 'add_slash', 'label' => __('URL\'s add Slash', 'wp-hide-security-enhancer'), 'description' => __('Add an end slash to all links which does not include one.', 'wp-hide-security-enhancer'). '
', 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New XML-RPC Path', 'wp-hide-security-enhancer'), 'description' => __("As default the WordPress url's format include an ending slash. ", 'wp-hide-security-enhancer') . "

" . __("There are situations when this slash is not being append. Turning on this option, all links will get a slash if not included as default. Disguise the existence of files and folders, since they will not be slashed as deafault, all receive an ending slashed.", 'wp-hide-security-enhancer') . "
" . __("For example the following link:" , 'wp-hide-security-enhancer') . "
https://-domain-name-/map/data
" . __("will be redirected to:", 'wp-hide-security-enhancer') . "
https://-domain-name-/map/data/

" . __('On certain servers this can produce a small lag measured in milliseconds, for each url.', 'wp-hide-security-enhancer') . "

" . __('If produce endless redirects, turn this option off.', 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-url-slash/', 'input_value_extension' => 'php' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 3 ); return $this->module_settings; } function _init_add_slash($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return; //nothing to do at the moment } function _callback_saved_add_slash($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; if($this->wph->server_htaccess_config === TRUE) //\nRewriteCond %{ENV:REDIRECT_STATUS} !^$" $processing_response['rewrite'] = "\nRewriteCond %{REQUEST_URI} /+[^\.]+$" . "\nRewriteCond %{REQUEST_METHOD} !POST" . "\nRewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]"; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } } ?>PK1\N~>~>-modules/components/admin-new_wp_login_php.phpnuW+Amodule_settings[] = array( 'id' => 'new_wp_login_php', 'label' => __('New wp-login.php', 'wp-hide-security-enhancer'), 'description' => array( __('Map a new wp-login.php instead default. This also need to include .php extension.', 'wp-hide-security-enhancer') ), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New wp-login.php', 'wp-hide-security-enhancer'), 'description' => __("There are a lot of security issues that come from having your login page open to the public. Most specifically, brute force attacks. Because of the ubiquity of WordPress, these kinds of attacks are becoming more and more common.", 'wp-hide-security-enhancer') . "

" . __("Map a new wp-login.php instead default prevent hackers boot to attempt to brute force a site login. Being known only by the site owner, the url itself becomes private.", 'wp-hide-security-enhancer') . "

" . __("Make sure you keep the new login url to a safe place, in case to forget.", 'wp-hide-security-enhancer') . "", 'input_value_extension' => 'php', 'option_documentation_url' => 'https://www.wp-hide.com/documentation/admin-change-wp-login-php/' ), 'options_pre' => '

' . __('Make sure your log-in url is not already modified by another plugin or theme. In such case, you should disable other code and take advantage of these features.', 'wp-hide-security-enhancer') .'

' , 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 50 ); $this->module_settings[] = array( 'id' => 'block_default_wp_login_php', 'label' => __('Block default wp-login.php', 'wp-hide-security-enhancer'), 'description' => __('Block default wp-login.php file from being accesible.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block default wp-login.php', 'wp-hide-security-enhancer'), 'description' => __("If set to Yes, the old login url will be blocked and a default theme 404 error page will be returned.", 'wp-hide-security-enhancer') . "

" . __('Ensure the New wp-login.php option works correctly on your server before activate this.', 'wp-hide-security-enhancer') . '', 'option_documentation_url' => 'https://www.wp-hide.com/documentation/admin-change-wp-login-php/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break the login page if server not supporting the feature. Ensure `New wp-login.php` option works fine before activate this.
If not working, use the recovery link to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); return $this->module_settings; } function _init_new_wp_login_php($saved_field_data) { //check if the value has changed, e-mail the new url to site administrator $previous_url = get_option('wph-previous-login-url'); if($saved_field_data != $previous_url) { $this->new_login_email_notice($saved_field_data); update_option('wph-previous-login-url', $saved_field_data); } if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //conflict handle with other plugins include_once(WPH_PATH . 'compatibility/wp-simple-firewall.php'); WPH_conflict_handle_wp_simple_firewall::custom_login_check(); add_filter('login_url', array($this,'login_url'), 999, 3 ); //add replacement $this->wph->functions->add_replacement( trailingslashit( site_url() ) . 'wp-login.php', trailingslashit( home_url() ) . $saved_field_data ); } function new_login_email_notice( $new_login_url ) { if(empty( $new_login_url )) $new_login_url = 'wp-admin'; $to = get_option('admin_email'); $subject = get_option('blogname') . ' - WP Hide New Login Url for your WordPress'; $message = __('Hello', 'wp-hide-security-enhancer') . ", \n\n" . __('This is an automated message to inform that your login url has been changed at site ', 'wp-hide-security-enhancer') . " " . trailingslashit(site_url()) . "\n" . __('The new login url is', 'wp-hide-security-enhancer') . ": " . trailingslashit( trailingslashit(site_url()) . $new_login_url ) . "\n\n" . __('Additionality you can use the following link to reset all options ', 'wp-hide-security-enhancer') . ": " . site_url() . '?wph-recovery='. $this->wph->functions->get_recovery_code() . "\n\n" . __('Please keep this url to a safe place.', 'wp-hide-security-enhancer'); $headers = 'From: '. get_option('blogname') .' <'. get_option('admin_email') .'>' . "\r\n"; $this->wph->functions->wp_mail( $to, $subject, $message, $headers ); } function login_url($login_url, $redirect, $force_reauth) { $new_wp_login_php = $this->wph->functions->get_module_item_setting('new_wp_login_php'); $login_url = home_url($new_wp_login_php, 'login'); return $login_url; } function _callback_saved_new_wp_login_php($saved_field_data) { $processing_response = array(); if(empty($saved_field_data)) return $processing_response; $new_wp_login_php = untrailingslashit ( $this->wph->functions->get_url_path( trailingslashit( site_url() ) . 'wp-login.php' ) ); $rewrite_base = $saved_field_data; $rewrite_to = $this->wph->functions->get_rewrite_to_base( $new_wp_login_php, TRUE, FALSE ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $rewrite_base . '(.*) '. $rewrite_to .'$1 [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _init_block_default_wp_login_php($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; } function _callback_saved_block_default_wp_login_php($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return $processing_response; //prevent from blocking if the new_wp_login_php is empty $new_wp_login_php = $this->wph->functions->get_module_item_setting('new_wp_login_php'); if (empty( $new_wp_login_php )) return FALSE; $rewrite_base = $this->wph->functions->get_rewrite_base( 'wp-login.php', FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE ); if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^" . $rewrite_base ." ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } } ?>PK1\ɇZs(modules/components/general-admin-bar.phpnuW+Abase_prefix . 'user_roles'); $first = TRUE; foreach ( $wp_roles as $role_slug => $role ) { $this->module_settings[] = $this->_prepare_modle_setting( $role_slug, $role['name'], $first ); $first = FALSE; } return $this->module_settings; } function _prepare_modle_setting( $role_slug, $role_name, $first ) { $help_description = ''; if ( $first ) $help_description = 'The admin bar is a floating bar that contains useful administration screen links such as add a new post, see pending comments, edit your profile etc. It can be extended by plugins to add additional functionality for example SEO and more.

'; $help_description .= __('Remove WordPress Admin Bar for ', 'wp-hide-security-enhancer') . $role_name . ' ' . __('role' , 'wp-hide-security-enhancer'); $module_setting = array( 'id' => 'remove_admin_bar_' . $role_slug, 'label' => __('Remove Admin Bar for ', 'wp-hide-security-enhancer') . $role_name, 'description' => __('Remove WordPress Admin Bar for ', 'wp-hide-security-enhancer') . $role_name . ' ' . __('role, which is being displayed by default on front side of your website.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove Admin Bar for ', 'wp-hide-security-enhancer') . $role_name . ' ' . __('role.', 'wp-hide-security-enhancer'), 'description' => $help_description, 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-admin-bar/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'callback' => '_init_remove_admin_bar', 'callback_arguments' => array('role_slug' => $role_slug ), ); return $module_setting; } function _init_remove_admin_bar( $saved_field_data, $role ) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //trigger once if ( $this->_initialized ) return; $this->_initialized = TRUE; add_action('init', array($this, 'remove_admin_bar')); } function remove_admin_bar() { if ( is_user_logged_in() === FALSE ) return; $current_user = wp_get_current_user(); $user_role = isset( $current_user->roles[0] ) ? $current_user->roles[0] : ''; if ( empty ( $user_role )) return; $role_hide_admin_bar = $this->wph->functions->get_module_item_setting('remove_admin_bar_' . $user_role ); if( $role_hide_admin_bar != 'yes') return; add_filter('show_admin_bar', '__return_false'); } } ?>PK1\!2$2$%modules/components/rewrite-search.phpnuW+Amodule_settings[] = array( 'id' => 'search', 'label' => __('New Search Path', 'wp-hide-security-enhancer'), 'description' => __('The default path is set to /search/', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Search Path', 'wp-hide-security-enhancer'), 'description' => __("The /search/ is the default slug used to display the results for the search page. The default URL format is:", 'wp-hide-security-enhancer') . "

https://-domain-name-/search/search-word/

". __("By using a value of 'find' this become:", 'wp-hide-security-enhancer') . "
https://-domain-name-/find/search-word/", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-search/' ), 'value_description' => 'e.g. find', 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 60 ); $this->module_settings[] = array( 'id' => 'search_block_default', 'label' => __('Block default', 'wp-hide-security-enhancer'), 'description' => __('Block default /search/ when using custom one.', 'wp-hide-security-enhancer') . '
'.__('Apply only if ', 'wp-hide-security-enhancer') . 'New Search Path ' . __('is not empty.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block default', 'wp-hide-security-enhancer'), 'description' => __("After changing the default author, the old url is still accessible, this provide a way to block it.
The functionality apply only if New Search Path option is filled in.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-search/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 61 ); return $this->module_settings; } function _init_search( $saved_field_data ) { add_filter('search_rewrite_rules', array( $this, 'search_rewrite_rules'), 999); if(empty($saved_field_data)) return FALSE; add_action( 'template_redirect', array( $this, 'template_redirect' ), -1); //add default plugin path replacement $url = trailingslashit( site_url() ) . 'search'; $replacement = trailingslashit( home_url() ) . $saved_field_data; $this->wph->functions->add_replacement( $url , $replacement ); return TRUE; } /** * Rewrite the default Search url * * @param mixed $search_rewrite */ function search_rewrite_rules( $search_rewrite ) { $new_search_path = $this->wph->functions->get_module_item_setting('search'); if( empty( $new_search_path ) ) return $search_rewrite; $search_block_default = $this->wph->functions->get_module_item_setting('search_block_default'); $new_rules = array(); foreach ( $search_rewrite as $key => $value ) { $new_rules[ str_replace( 'search/', $new_search_path .'/' , $key ) ] = $value; } if ( $search_block_default == 'yes') $search_rewrite = $new_rules; else $search_rewrite = array_merge ( $search_rewrite, $new_rules ); return $search_rewrite; } /** * Redirect to new slug url * */ function template_redirect() { if ( is_search() && ! empty( $_GET['s'] ) ) { $new_search_path = $this->wph->functions->get_module_item_setting('search'); wp_redirect( home_url( "/" . $new_search_path . "/" ) . urlencode( get_query_var( 's' ) ) ); exit(); } } } ?>PK1\\|11.modules/components/rewrite-wp_content_path.phpnuW+Amodule_settings[] = array( 'id' => 'new_content_path', 'label' => __('New Content Path', 'wp-hide-security-enhancer'), 'description' => __('Your default wp-content path is set to', 'wp-hide-security-enhancer') . ' '. $this->wph->default_variables['content_directory'] .'', 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Content Path', 'wp-hide-security-enhancer'), 'description' => __("As default a WordPress installation contain a wp-content folder which store files and resources used by themes and plugin. The wp-content is a common fingerprint, which makes easily to anyone to identify the site as being created on WordPress.", 'wp-hide-security-enhancer') . "

<script type='text/javascript' src='https://-domain-name-/wp-content/cache/static/asset.js'></script>

" . __("After filling in this option e.g. data the links become:", 'wp-hide-security-enhancer') . "

<script type='text/javascript' src='https://-domain-name-/data/cache/static/asset.js'></script>", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-wp-content/' ), 'value_description' => __('e.g. my_content', 'wp-hide-security-enhancer'), 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 90 ); $this->module_settings[] = array( 'id' => 'block_wp_content_path', 'label' => __('Block wp-content URL', 'wp-hide-security-enhancer'), 'description' => __('Block default /wp-content/ path. Your default wp-content path is set to', 'wp-hide-security-enhancer') . ' '. $this->wph->default_variables['content_directory'] .'', 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New content Path', 'wp-hide-security-enhancer'), 'description' => __("This blocks the default wp-content urls only for non loged-in users.
The functionality apply only if New Content Path option is filled in.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-wp-content/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break the layout if server not supporting the feature. Ensure New Includes Path options works fine before activate this. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 91 ); return $this->module_settings; } function _init_new_content_path($saved_field_data) { if(empty($saved_field_data)) return FALSE; $content_directory = $this->wph->default_variables['content_directory']; //add default plugin path replacement $new_content_path = trailingslashit( home_url() ) . untrailingslashit( $saved_field_data ); $this->wph->functions->add_replacement( untrailingslashit( site_url() ) . $content_directory , $new_content_path ); return TRUE; } function _callback_saved_new_content_path( $saved_field_data ) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data)) return $processing_response; $content_path = $this->wph->functions->get_url_path( trailingslashit( WP_CONTENT_URL )); $rewrite_base = trailingslashit( $saved_field_data ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $content_path ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $rewrite_base . '(.+) '. $rewrite_to .'$1 [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _init_block_wp_content_path($saved_field_data) { } function _callback_saved_block_wp_content_path($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //prevent from blocking if the wp-include is not modified $new_content_path = $this->wph->functions->get_module_item_setting('new_content_path'); if (empty( $new_content_path )) return FALSE; $rewrite_base = $this->wph->functions->get_rewrite_base( $this->wph->default_variables['content_directory'], FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { if ( stripos($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') ) $text .= "RewriteCond %{HTTP_USER_AGENT} !LiteSpeed-Image\n"; $text .= "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]\n"; $text .= "RewriteRule ^". $rewrite_base ."(.+) ". $rewrite_to ."?wph-throw-404 [L]"; $processing_response['rewrite'] = $text; } if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } } ?>PK1\ڇ+1+1/modules/components/rewrite-new_include_path.phpnuW+Amodule_settings[] = array( 'id' => 'new_include_path', 'label' => __('New Includes Path', 'wp-hide-security-enhancer'), 'description' => __('Change default /wp-includes path.', 'wp-hide-security-enhancer') , 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Includes Path', 'wp-hide-security-enhancer'), 'description' => __("As default a WordPress installation contain a wp-include folder which store files and resources used by WordPress core, themes and plugin. The wp-includes is a common fingerprint, which makes easily to anyone to identify the site as being created on WordPress.", 'wp-hide-security-enhancer') ."

<script type='text/javascript' src='https://-domain-name-/wp-include/js/jquery/jquery.js'></script>

" . __("After filling in this option e.g. resources the links will change to this:", 'wp-hide-security-enhancer') . "

<script type='text/javascript' src='https://-domain-name-/resources/js/jquery/jquery.js'></script>", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-wp-includes/' ), 'value_description' => __('e.g. my_includes', 'wp-hide-security-enhancer'), 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 20 ); $this->module_settings[] = array( 'id' => 'block_wpinclude_url', 'label' => __('Block wp-includes URL', 'wp-hide-security-enhancer'), 'description' => __('Block /wp-includes/ files from being accesible through default urls.
Apply only if New Includes Path is not empty.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Includes Path', 'wp-hide-security-enhancer'), 'description' => __("This blocks the default wp-includes urls only for non loged-in users.
The functionality apply only if New Includes Path option is filled in.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-wp-includes/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break the layout if server not supporting the feature. Ensure `New Includes Path` option works fine before activate this. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 19 ); return $this->module_settings; } function _init_new_include_path($saved_field_data) { if(empty($saved_field_data)) return FALSE; //add default plugin path replacement $new_include_path = $this->wph->functions->untrailingslashit_all( $this->wph->functions->get_module_item_setting('new_include_path') ); $new_include_path = trailingslashit( home_url() ) . untrailingslashit( $new_include_path ); $this->wph->functions->add_replacement( trailingslashit( site_url() ) . 'wp-includes', $new_include_path ); } function _callback_saved_new_include_path($saved_field_data) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data)) return $processing_response; $include_path = $this->wph->functions->get_url_path( trailingslashit(site_url()) . WPINC ); $path = ''; if(!empty($this->wph->default_variables['wordpress_directory'])) $path = trailingslashit($this->wph->default_variables['wordpress_directory']); $path .= trailingslashit( $saved_field_data ); $rewrite_base = trailingslashit( $saved_field_data ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $include_path ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $rewrite_base . '(.+) '. $rewrite_to .'$1 [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _callback_saved_block_wpinclude_url($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //prevent from blocking if the wp-include is not modified $new_include_path = $this->wph->functions->get_module_item_setting('new_include_path'); if (empty( $new_include_path )) return FALSE; $rewrite_base = $this->wph->functions->get_rewrite_base( 'wp-includes', FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]\n"; $text .= "RewriteRule ^" .$rewrite_base ."(.*) ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) { $text = ' '; } $processing_response['rewrite'] = $text; return $processing_response; } } ?>PK1\ɿ#modules/components/general-meta.phpnuW+Amodule_settings[] = array( 'id' => 'remove_generator_meta', 'label' => __('Remove WordPress Generator Meta', 'wp-hide-security-enhancer'), 'description' => __('Remove the autogenerated meta generator tag within head (WordPress Version).', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove WordPress Generator Meta', 'wp-hide-security-enhancer'), 'description' => __("Remove the autogenerated meta generator tag within head (WordPress Version).", 'wp-hide-security-enhancer') . "
" . __("Tag example:", 'wp-hide-security-enhancer') . "

<meta name="generator" content="WordPress 5.3.1" />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'remove_other_generator_meta', 'label' => __('Remove Other Generator Meta', 'wp-hide-security-enhancer'), 'description' => __('Remove other meta generated tags within head (eg Theme Name, Theme Version).', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove Other Generator Meta', 'wp-hide-security-enhancer'), 'description' => __("Remove other meta generated tags within head (eg Theme Name, Theme Version).", 'wp-hide-security-enhancer') . "
" . __("Tag example:", 'wp-hide-security-enhancer') . "

<meta content="Divi - Child v.1.0.0" name="generator"/>", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'remove_shortlink_meta', 'label' => __('Remove Shortlink Meta', 'wp-hide-security-enhancer'), 'description' => __('Remove shortlink tags within head.', 'wp-hide-security-enhancer'), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'remove_dns_prefetch', 'label' => __('Remove DNS Prefetch', 'wp-hide-security-enhancer'), 'description' => __('Remove DNS Prefetch meta generated tag.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove DNS Prefetch', 'wp-hide-security-enhancer'), 'description' => __("DNS prefetching allows you to resolve domain names (perform a DNS lookup in the background) before a user clicks on a link, which in turn can help improve performance.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'remove_resource_hints', 'label' => __('Remove Resource Hints', 'wp-hide-security-enhancer'), 'description' => __('Remove Resource Hints meta generated tags within head (eg dns-prefetch, preconnect).', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove Resource Hints', 'wp-hide-security-enhancer'), 'description' => __("DNS prefetching and preconect allows you to resolve domain names before a user clicks on a link, which in turn can help and slightly improve performance.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'remove_wlwmanifest', 'label' => __('Remove wlwmanifest Meta', 'wp-hide-security-enhancer'), 'description' => __('Remove the wlwmanifest tag within head.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove wlwmanifest Meta', 'wp-hide-security-enhancer'), 'description' => __("The above link is actually used by Windows Live Writer. If you don't te application, this is just unnecessary code.", 'wp-hide-security-enhancer') . "

" . __("Sample tag:", 'wp-hide-security-enhancer') . "
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://-domain-name-/wp-includes/wlwmanifest.xml" />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'disable_json_rest_wphead_link', 'label' => __('Disable output the REST API link tag into page header', 'wp-hide-security-enhancer'), 'description' => __('By default a REST API link tag is being append to HTML.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Disable output the REST API link tag into page header', 'wp-hide-security-enhancer'), 'description' => __("This option disable the tag output with the JSON API url.", 'wp-hide-security-enhancer') . "

" . __("Sample tag:", 'wp-hide-security-enhancer') . "
<link rel='https://api.w.org/' href='https://-domain-name-/wp-json/' />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 58 ); $this->module_settings[] = array( 'id' => 'remove_rsd_link', 'label' => __('Remove rsd_link Meta', 'wp-hide-security-enhancer'), 'description' => __('Remove the rsd_link tag within head.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove rsd_link Meta', 'wp-hide-security-enhancer'), 'description' => __("This helps to hide the link to the Really Simple Discovery service endpoint.", 'wp-hide-security-enhancer') . "

" . __("Sample tag:", 'wp-hide-security-enhancer') . "
<link rel='EditURI' type='application/rsd+xml' title='RSD' href='https://-domain-name-/xmlrpc.php?rsd' />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'remove_adjacent_posts_rel', 'label' => __('Remove adjacent_posts_rel Meta', 'wp-hide-security-enhancer'), 'description' => __('Remove the adjacent_posts_rel tag within head.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove adjacent_posts_rel Meta', 'wp-hide-security-enhancer'), 'description' => __("This helps to hide the post adjacent tags.", 'wp-hide-security-enhancer') . "

" . __("Sample tag:", 'wp-hide-security-enhancer') . "
<link rel='next' title='Dummy Post' href='http://-domain-name-/dummy-post/' />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'remove_profile', 'label' => __('Remove profile link', 'wp-hide-security-enhancer'), 'description' => __('Remove profile link meta tag within head.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove adjacent_posts_rel Meta', 'wp-hide-security-enhancer'), 'description' => __("This helps to hide the profile tags.", 'wp-hide-security-enhancer') . "

" . __("Sample tag:", 'wp-hide-security-enhancer') . "
<link rel='profile' href='http://-domain-name-/profile/' />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'remove_canonical', 'label' => __('Remove canonical link', 'wp-hide-security-enhancer'), 'description' => __('Remove canonical link meta tag within head.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove adjacent_posts_rel Meta', 'wp-hide-security-enhancer'), 'description' => __("The rel=canonical element, often called the 'canonical link', is an HTML element that helps webmasters prevent duplicate content issues. It does this by specifying the 'canonical URL', the 'preferred' version of a web page - the original source, even.", 'wp-hide-security-enhancer') . "

" . __("Sample tag:", 'wp-hide-security-enhancer') . "
<link rel="canonical" href="http://-domain-name-/dummy-post/" />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-meta/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); return $this->module_settings; } function _init_remove_generator_meta($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('the_generator', array( $this, 'the_generator' )); remove_action( 'wp_head', 'wp_generator' ); //make sure it's being replaced add_filter( 'wp-hide/ob_start_callback', array(&$this, 'ob_start_callback_remove_generator_meta')); } function the_generator() { return ''; } function ob_start_callback_remove_generator_meta( $buffer ) { $buffer = preg_replace_callback('/(]+)name=("|\')generator("|\')([^>]+)?\/?>)/im', array($this, "remove_generator_meta_preg_replace_callback"), $buffer); return $buffer; } function remove_generator_meta_preg_replace_callback( $matches ) { $found = isset($matches[0]) ? $matches[0] : ''; if(empty($found)) return ''; //check if content starts with WordPress if(stripos($found, 'content="WordPress ') !== FALSE) return ""; return $found; } function _init_remove_other_generator_meta($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //remove other generator links add_filter( 'wp-hide/ob_start_callback', array(&$this, 'ob_start_callback_remove_other_generator_meta')); } function ob_start_callback_remove_other_generator_meta( $buffer ) { $buffer = preg_replace_callback('/(]+)name=("|\')generator("|\')([^>]+)?\/?>)/im', array($this, "remove_other_generator_meta_preg_replace_callback"), $buffer); return $buffer; } function remove_other_generator_meta_preg_replace_callback( $matches ) { $found = isset($matches[0]) ? $matches[0] : ''; if(empty($found)) return ''; //check if content starts with WordPress if(stripos($found, 'content="WordPress ') === FALSE) return ""; return $found; } function _init_remove_shortlink_meta($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //remove other generator links add_filter( 'wp-hide/ob_start_callback', array(&$this, 'ob_start_callback_remove_shortlink_meta')); } function ob_start_callback_remove_shortlink_meta( $buffer ) { $result = preg_match_all('/(]+)rel=("|\')shortlink("|\')([^>]+)?\/?>)/im', $buffer, $founds); if(!isset($founds[0]) || count($founds[0]) < 1) return $buffer; if(count($founds[0]) > 0) { foreach ($founds[0] as $found) { if(empty($found)) continue; $buffer = str_replace($found, "", $buffer); } } return $buffer; } function _init_remove_dns_prefetch( $saved_field_data ) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter( 'wp-hide/ob_start_callback', array(&$this, 'ob_start_callback_remove_dns_prefetch')); } function ob_start_callback_remove_dns_prefetch( $buffer ) { if(is_admin()) return $buffer; $result = preg_match_all('/(]+)rel=("|\')dns-prefetch("|\')([^>]+)?\/?>)/im', $buffer, $founds); if(!isset($founds[0]) || count($founds[0]) < 1) return $buffer; if(count($founds[0]) > 0) { foreach ($founds[0] as $found) { if(empty($found)) continue; $buffer = str_replace($found, "", $buffer); } } return $buffer; } function _init_remove_resource_hints($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action( 'wp_head', 'wp_resource_hints', 2 ); } function _init_remove_wlwmanifest($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action( 'wp_head', 'wlwmanifest_link' ); } function _init_disable_json_rest_wphead_link($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action( 'wp_head', 'rest_output_link_wp_head', 10 ); } function _init_remove_rsd_link($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action('wp_head', 'rsd_link'); } function _init_remove_adjacent_posts_rel($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); } function _init_remove_profile($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('wp-hide/ob_start_callback', array($this, 'remove_profile_tag')); } function remove_profile_tag( $buffer ) { if(is_admin()) return $buffer; $result = preg_match_all('/(]+)rel=("|\')profile("|\')([^>]+)?\/?>)/im', $buffer, $founds); if(!isset($founds[0]) || count($founds[0]) < 1) return $buffer; if(count($founds[0]) > 0) { foreach ($founds[0] as $found) { if(empty($found)) continue; $buffer = str_replace($found, "", $buffer); } } return $buffer; } function _init_remove_canonical($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action( 'wp_head', 'rel_canonical'); //use the earlier possible action to remove the admin canonical url add_action( 'auth_redirect', array(&$this, 'remove_wp_admin_canonical_url')); //make sure is removed if placed by other plugins add_filter('wp-hide/ob_start_callback', array($this, 'remove_canonical_tag')); } function remove_wp_admin_canonical_url() { remove_action( 'admin_head', 'wp_admin_canonical_url' ); } function remove_canonical_tag( $buffer ) { if(is_admin()) return $buffer; $result = preg_match_all('/(]+)rel=("|\')canonical("|\')([^>]+)?\/?>)/im', $buffer, $founds); if(!isset($founds[0]) || count($founds[0]) < 1) return $buffer; if(count($founds[0]) > 0) { foreach ($founds[0] as $found) { if(empty($found)) continue; $buffer = str_replace($found, "", $buffer); } } return $buffer; } } ?>PK1\p٭5R5R.modules/components/rewrite-new_plugin_path.phpnuW+Amodule_settings[] = array( 'id' => 'new_plugin_path', 'label' => __('New Plugins Path', 'wp-hide-security-enhancer'), 'description' => __('The default plugins path is set to', 'wp-hide-security-enhancer') . ' '. str_replace(get_bloginfo('wpurl'), '' ,$this->wph->default_variables['plugins_url']) .'', 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Plugins Path', 'wp-hide-security-enhancer'), 'description' => __("Use any alphanumeric symbols for this field which will be used as the new slug for the plugins folder. Presuming the `apps` slug is being used, all plugins urls become to something like this:", 'wp-hide-security-enhancer') . "

http://-domain-name-/apps/jetpack/", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-plugins/' ), 'value_description' => 'e.g. apps', 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 17 ); $this->module_settings[] = array( 'id' => 'block_plugins_url', 'label' => __('Block plugins URL', 'wp-hide-security-enhancer'), 'description' => __('Block default /wp-content/plugins/ files from being accesible through default urls.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block plugins URL', 'wp-hide-security-enhancer'), 'description' => __("This blocks the default wp-content/plugins/ url.
The functionality apply only if New Plugins Path option is filled in.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-plugins/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break the layout if server not supporting the feature. Ensure `New Includes Path` option works fine before activate this. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 18 ); $this->module_settings[] = array( 'type' => 'split' ); $all_plugins = $this->wph->functions->get_plugins(); //get active plugins $active_plugins = (array) get_option( 'active_plugins', array() ); foreach($active_plugins as $active_plugin) { //exclude this plugin if('wp-hide-security-enhancer/wp-hide.php' == $active_plugin) continue; $plugin_slug = sanitize_title($active_plugin); if(!isset($all_plugins[$active_plugin])) continue; $pluding_data = $all_plugins[$active_plugin]; $this->module_settings[] = array( 'id' => 'new_plugin_path_' . $plugin_slug, 'label' => __('New Path for', 'wp-hide-security-enhancer') . " " . $pluding_data['Name'] ." ". __('plugin', 'wp-hide-security-enhancer'), 'description' => __('This setting if set, overwrites the', 'wp-hide-security-enhancer') . ' ' . __('New Plugin Path', 'wp-hide-security-enhancer') . ' ' . __('value for this plugin.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Path for', 'wp-hide-security-enhancer') . " " . $pluding_data['Name'] ." ", 'description' => "Use any alphanumeric symbols for this field which will be used as the new slug for the plugin folder. Presuming the `module_name` slug is being used, this particular plugin urls become to:

http://-domain-name-/module_name/", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-plugins/' ), 'value_description' => 'e.g. modules/module_name', 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 16 ); } return $this->module_settings; } function _init_new_plugin_path($saved_field_data) { //add custom plugins path replacements //get active plugins $active_plugins = (array) get_option( 'active_plugins', array() ); foreach($active_plugins as $active_plugin) { $active_plugin_split = explode('/', $active_plugin); $active_plugin_directory = $active_plugin_split[0]; $plugin_slug = sanitize_title($active_plugin); $option_namespace = 'new_plugin_path_' . $plugin_slug; //check if plugin have custom url $plugin_custom_path = $this->wph->functions->get_module_item_setting($option_namespace); if(empty($plugin_custom_path)) continue; //add custom path $new_url = trailingslashit( site_url() ) . $plugin_custom_path; if(!empty($path)) $new_url = trailingslashit( $new_url ) . $path; //add replacement $new_plugin_path = $this->wph->functions->untrailingslashit_all( $this->wph->functions->get_module_item_setting('new_plugin_path') ); $replace_url = trailingslashit( trailingslashit( WP_PLUGIN_URL ) . $active_plugin_directory ); $replacement_url = trailingslashit( trailingslashit( home_url() ) . $plugin_custom_path ); $this->wph->functions->add_replacement( $replace_url, $replacement_url); } if(empty($saved_field_data)) return FALSE; //add default plugin path replacement $new_plugin_path = $this->wph->functions->untrailingslashit_all( $this->wph->functions->get_module_item_setting('new_plugin_path') ); $new_plugin_path = trailingslashit( home_url() ) . untrailingslashit( $new_plugin_path ); $this->wph->functions->add_replacement( WP_PLUGIN_URL, $new_plugin_path ); return TRUE; } function _callback_saved_new_plugin_path($saved_field_data) { $processing_response = array(); $rewrite = ''; $plugin_path = $this->wph->functions->get_url_path( WP_PLUGIN_URL ); $path = ''; if(!empty($saved_field_data)) $path .= trailingslashit( $saved_field_data ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $plugin_path ); //add custom rewrite for plugins //get active plugins $active_plugins = (array) get_option( 'active_plugins', array() ); foreach($active_plugins as $active_plugin) { $active_plugin_split = explode('/', $active_plugin); $active_plugin_directory = $active_plugin_split[0]; $plugin_slug = sanitize_title($active_plugin); $option_namespace = 'new_plugin_path_' . $plugin_slug; //check if plugin have custom url $plugin_custom_path = $this->wph->functions->get_module_item_setting($option_namespace); if(empty($plugin_custom_path)) continue; //add custom path $new_url = trailingslashit( site_url() ) . $plugin_custom_path; if($path != '/') $new_url = trailingslashit( $new_url ) . $path; $plugin_rewrite_to = $this->wph->functions->get_rewrite_to_base( trailingslashit($plugin_path) . $active_plugin_directory ); if($this->wph->server_htaccess_config === TRUE) $rewrite .= "\nRewriteRule ^" . trailingslashit( $plugin_custom_path ) . '(.+) '. $plugin_rewrite_to .'$1 [L,QSA]'; if($this->wph->server_web_config === TRUE) $rewrite .= ' '; } if( !empty($path) && !empty($saved_field_data)) { if($this->wph->server_htaccess_config === TRUE) $rewrite .= "\nRewriteRule ^" . trailingslashit( $path ) . '(.+) '. $rewrite_to .'$1 [L,QSA]'; if($this->wph->server_web_config === TRUE) $rewrite .= ' '; } $processing_response['rewrite'] = $rewrite; return $processing_response; } function _callback_saved_block_plugins_url($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //prevent from blocking if the wp-include is not modified $new_theme_path = ltrim(rtrim($this->wph->functions->get_module_item_setting('new_plugin_path'), "/"), "/"); if (empty( $new_theme_path )) return FALSE; $home_url = defined('WP_HOME') ? WP_HOME : get_option('home'); $home_url = untrailingslashit($home_url); $default_plugin_url = untrailingslashit ( WP_PLUGIN_URL ); $default_plugin_url = str_replace( $home_url, "", $default_plugin_url); $default_plugin_url = ltrim(rtrim($default_plugin_url, "/"), "/"); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^". $default_plugin_url ."(.+) ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } } ?>PK1\c#modules/components/general-feed.phpnuW+Amodule_settings[] = array( 'id' => 'remove_feed_links', 'label' => __('Remove feed|rdf|rss|rss2|atom links', 'wp-hide-security-enhancer'), 'description' => __('Remove feed|rdf|rss|rss2|atom links within head. Also block such content functionality.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove feed|rdf|rss|rss2|atom links', 'wp-hide-security-enhancer'), 'description' => __("A feed is a function of special software that allows feedreaders to access a site, automatically looking for new content and then posting the information about new content and updates to another site. This provides a way for users to keep up with the latest and hottest information posted on different blogging sites.", 'wp-hide-security-enhancer') . "
" . __("There are several different kinds of feeds, read by different feedreaders. Some feeds include RSS (alternately defined as 'Rich Site Summary' or 'Really Simple Syndication'), Atom or RDF files.", 'wp-hide-security-enhancer') . "

" . __("Sample tag:", 'wp-hide-security-enhancer') . "
<link rel="alternate" type="application/rss+xml" title="WP Hide Demo Feed" href="http://-domain-name-/feed/" />

" . __("Set this option to Yes also disable the feed service.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-feed/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); return $this->module_settings; } function _init_remove_feed_links($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action('wp_head', 'feed_links', 2); remove_action('wp_head', 'feed_links_extra', 3); } function _callback_saved_remove_feed_links($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $processing_response = array(); $rewrite = ''; $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); if($this->wph->server_htaccess_config === TRUE) { $rewrite .= "\nRewriteCond %{REQUEST_URI} ([^/]+)/(feed|rdf|rss|rss2|atom)/?$ [OR]" . "\nRewriteCond %{REQUEST_URI} ^/(feed|rdf|rss|rss2|atom)/?$" . "\nRewriteRule . ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) { //+++ To be implemented } $processing_response['rewrite'] = $rewrite; return $processing_response; } } ?>PK1\"Vl}EE&modules/components/general-wpemoji.phpnuW+Amodule_settings[] = array( 'id' => 'disable_wpemojia', 'label' => __('Disable Emoji', 'wp-hide-security-enhancer'), 'description' => __('Disable the Emoji icon library from being loaded.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Disable Emoji', 'wp-hide-security-enhancer'), 'description' => __("Not everyone use Emoji. Since WordPress load the dependencies as default, it decrease the overall site speed. Disabling this will remove any code and related resources from being loaded on front side.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-emoji/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'disable_tinymce_wpemojia', 'label' => __('Disable TinyMCE Emoji', 'wp-hide-security-enhancer'), 'description' => __('Disable the TinyMCE Emoji icons library from being loaded into TinyMC.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Disable Emoji', 'wp-hide-security-enhancer'), 'description' => __("Disable TinyMCE Emoji This is also loaded along the WordPress default TinyMCE editor, but it can be disabled through this option.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-emoji/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); return $this->module_settings; } function _init_disable_wpemojia($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_action( 'init', array($this, 'disable_emojicons' )); } function disable_emojicons() { remove_action( 'admin_print_styles', 'print_emoji_styles' ); remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' ); remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); } function _init_disable_tinymce_wpemojia($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_action( 'init', array($this, 'disable_tinymce_emojicons' )); } function disable_tinymce_emojicons() { add_filter( 'tiny_mce_plugins', array($this, 'disable_emojicons_tiny_mce_plugins') ); } function disable_emojicons_tiny_mce_plugins( $plugins ) { return array_diff( $plugins, array( 'wpemoji' ) ); } } ?>PK1\2#modules/components/general-html.phpnuW+Amodule_settings[] = array( 'id' => 'remove_html_comments', 'label' => __('Remove Comments', 'wp-hide-security-enhancer'), 'description' => __('Remove comments from HTML source code.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove Comments', 'wp-hide-security-enhancer'), 'description' => __("The HTML source code usually contain many comment lines, however there is no use for that, unless debugging. Remove all HTML Comments, which usually specify Plugins Name and Version. Any Internet Explorer conditional tags are preserved.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/remove-classes-from-html/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 80 ); $this->module_settings[] = array( 'id' => 'remove_html_new_lines', 'label' => __('Minify', 'wp-hide-security-enhancer'), 'description' => __('Minify HTML, Inline Styles, Inline JavaScripts.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Minify', 'wp-hide-security-enhancer'), 'description' => __("When you minify HTML it removes the unnecessary characters and lines in the source code. Indentation, comments, empty lines, etc. are not required in HTML. They just make the file easier to read. Cutting out all this unnecessary stuff can shave down your file size considerably. When you minify HTML code on your website, the server will send a much smaller page to the client making your website load quicker.", 'wp-hide-security-enhancer') . "

" . __("The Minify component include multiple options:", 'wp-hide-security-enhancer') . "
Html
Html & Css
Html & JavaScript
All
" . __("Minify JavaScript might produce errors for specific plugins.", 'wp-hide-security-enhancer') . "", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/remove-classes-from-html/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'html' => __('Html', 'wp-hide-security-enhancer'), 'html_css' => __('Html & Css', 'wp-hide-security-enhancer'), 'html_js' => __('Html & JavaScript', 'wp-hide-security-enhancer'), 'all' => __('All', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 80 ); $this->module_settings[] = array( 'id' => 'clean_body_classes', 'label' => __('Remove general classes from body tag', 'wp-hide-security-enhancer'), 'description' => __('Remove general classes from body tag.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove general classes from body tag', 'wp-hide-security-enhancer'), 'description' => __("Remove general classes from body tag.", 'wp-hide-security-enhancer') . "
" . __('This can produce layout issues with certain themes, if something break this should be turned off.', 'wp-hide-security-enhancer') ."", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/remove-classes-from-html/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 81 ); $this->module_settings[] = array( 'id' => 'clean_menu_items_id', 'label' => __('Remove ID from Menu items', 'wp-hide-security-enhancer'), 'description' => __('Remove ID attribute from all menu items.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove ID from Menu items', 'wp-hide-security-enhancer'), 'description' => __("Remove ID attribute from all menu items.", 'wp-hide-security-enhancer') . "
" . __('This can produce layout issues with certain themes, if something break this should be turned off.', 'wp-hide-security-enhancer') ."", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/remove-classes-from-html/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 81 ); $this->module_settings[] = array( 'id' => 'clean_menu_items_classes', 'label' => __('Remove class from Menu items', 'wp-hide-security-enhancer'), 'description' => __('Remove class attribute from all menu items.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove class from Menu items', 'wp-hide-security-enhancer'), 'description' => __("Remove class attribute from all menu items. Any classes which include a 'current' prefix or contain 'has-children' will be preserved.", 'wp-hide-security-enhancer') . "
" . __('This can produce layout issues with certain themes, if something break this should be turned off.', 'wp-hide-security-enhancer') ."", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/remove-classes-from-html/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 81 ); $this->module_settings[] = array( 'id' => 'clean_post_classes', 'label' => __('Remove class from Menu items', 'wp-hide-security-enhancer'), 'description' => __('Remove general classes from post.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove class from Menu items', 'wp-hide-security-enhancer'), 'description' => __("Remove general classes from post.", 'wp-hide-security-enhancer') . "
" . __('This can produce layout issues with certain themes, if something break this should be turned off.', 'wp-hide-security-enhancer') ."", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/remove-classes-from-html/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 81 ); $this->module_settings[] = array( 'id' => 'clean_image_classes', 'label' => __('Remove general classes from images', 'wp-hide-security-enhancer'), 'description' => __('Remove general classes from media tags.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove general classes from images', 'wp-hide-security-enhancer'), 'description' => __("Remove general classes from media tags.", 'wp-hide-security-enhancer') . "
" . __('This can produce layout issues with certain themes, if something break this should be turned off.', 'wp-hide-security-enhancer') ."", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/remove-classes-from-html/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 81 ); return $this->module_settings; } function _init_remove_html_comments($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('wp-hide/ob_start_callback', array($this, 'remove_html_comments')); } function remove_html_comments($buffer) { //do not run when within admin if(defined('WP_ADMIN')) return $buffer; //replace any Html comments $buffer = preg_replace('/)(.|\n))*-->/sm', "" , $buffer); //replace any JavaScript comments //$buffer = preg_replace('/(\s+)(\/\/)([a-zA-Z\s]+)(\s+)/sm', "" , $buffer); //$buffer = preg_replace('/(\s+)(\/\*)([a-zA-Z\s\n]+)(\*\/)(\s+)/sm', "" , $buffer); //remove empty multiple new lines $buffer = preg_replace("/(\n){2,}/", "\n", $buffer); return $buffer; } function _init_remove_html_new_lines($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('wp-hide/ob_start_callback', array($this, 'remove_html_new_lines')); } function remove_html_new_lines($buffer) { //do not run when within admin if(defined('WP_ADMIN')) return $buffer; $this->buffer = $buffer; $this->placeholder_hash = '%WPH-PLACEHOLDER-REPLACEMENT'; switch ( $this->wph->settings['module_settings']['remove_html_new_lines'] ) { case 'html' : $this->add_css_placeholders (); $this->add_js_placeholders (); $this->buffer = preg_replace( "/\r|\n/", "", $this->buffer ); break; case 'html_css' : $this->add_js_placeholders (); $this->buffer = preg_replace( "/\r|\n/", "", $this->buffer ); break; case 'html_js' : $this->add_css_placeholders (); $this->buffer = preg_replace( "/\r|\n/", "", $this->buffer ); break; case 'all' : $this->buffer = preg_replace( "/\r|\n/", "", $this->buffer ); break; } //put back any placeholders if( count($this->placeholders) > 0 ) { foreach($this->placeholders as $placeholder => $data) { $this->buffer = str_replace($placeholder, $data, $this->buffer); } } return $this->buffer; } function add_css_placeholders( ) { $this->buffer = preg_replace_callback( '/(\\s*)]*>)([\\s\\S]*?)<\\/style>(\\s*)/i', array($this, 'add_css_placeholders_callback') , $this->buffer); } function add_css_placeholders_callback( $match ) { $pre_space = $match[1] === '' ? '' : ' '; $tag_attrs = $match[2]; $tag_content = $match[3]; $post_space = $match[4] === '' ? '' : ' '; $match_block = $pre_space . '' . $post_space; $placeholder = $this->placeholder_hash . '-css-' . count( $this->placeholders ) . '%'; $this->placeholders[ $placeholder ] = $match_block; return $placeholder; } function add_js_placeholders( ) { $this->buffer = preg_replace_callback( '/(\\s*)]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i' ,array($this, 'add_js_placeholders_callback') , $this->buffer); } function add_js_placeholders_callback( $match ) { $pre_space = $match[1] === '' ? '' : ' '; $tag_attrs = $match[2]; $tag_content = $match[3]; $post_space = $match[4] === '' ? '' : ' '; $match_block = $pre_space . '' . $post_space; $placeholder = $this->placeholder_hash . '-js-' . count( $this->placeholders ) . '%'; $this->placeholders[ $placeholder ] = $match_block; return $placeholder; } function _init_clean_body_classes( $saved_field_data ) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('body_class', array(&$this, 'body_class'), 9, 2); } function body_class( $classes, $class ) { $preserve_classes = array( 'home', 'archive', 'single', 'blog', 'attachment', 'search', 'category', 'tag', 'rtl', 'author', 'custom-background' ); if(!empty( $class )) $preserve_classes = array_merge($preserve_classes, (array) $class ); $preserve_classes = apply_filters('wp-hide/components/general-html/body_class/preserve', $preserve_classes);; $keep_classes = array_intersect($preserve_classes, $classes); //reindex the array $keep_classes = array_values($keep_classes); return $keep_classes; } function _init_clean_menu_items_id( $saved_field_data ) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('nav_menu_item_id', array(&$this, 'nav_menu_item_id'), 999); } function nav_menu_item_id($item_id) { $item_id = ''; return $item_id; } function _init_clean_menu_items_classes( $saved_field_data ) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('nav_menu_css_class', array(&$this, 'nav_menu_css_class'), 999); } function nav_menu_css_class( $classes ) { foreach($classes as $key => $class_name) { if(strpos($class_name, 'current-') === 0 || strpos($class_name, 'current_') === 0 || strpos($class_name, 'has-children') !== FALSE) continue; unset($classes[$key]); } $classes = array_values($classes); return $classes; } function _init_clean_post_classes( $saved_field_data ) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('post_class', array(&$this, 'post_class'), 999, 2); } function post_class( $classes, $class ) { return $classes; $preserve_classes = array( 'sticky' ); if(!empty( $class )) $preserve_classes = array_merge($preserve_classes, (array) $class ); //preserve post types $post_types = get_post_types(); foreach($post_types as $post_type) { $preserve_classes[] = $post_type; } //preserve taxonomies $taxonomies = get_taxonomies( ); foreach($taxonomies as $taxonomy) { $preserve_classes[] = $taxonomy; } //preserve formats classes foreach( $classes as $class) { if(strpos($class, 'format-') === 0) $preserve_classes[] = $class; } $preserve_classes = apply_filters('wp-hide/components/general-html/post_class/preserve', $preserve_classes);; $keep_classes = array_intersect($preserve_classes, $classes); //reindex the array $keep_classes = array_values($keep_classes); return $keep_classes; } function _init_clean_image_classes( $saved_field_data ) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter( 'wp-hide/ob_start_callback', array(&$this, 'ob_start_callback_clean_image_classes')); } function ob_start_callback_clean_image_classes( $buffer ) { if(is_admin()) return $buffer; $buffer = preg_replace_callback('/]+)class=["|\'](.*?)["|\']([^>]+)?>/i', array($this, "clean_image_classes_preg_replace_callback"), $buffer); return $buffer; } function clean_image_classes_preg_replace_callback( $matches ) { $tag = isset($matches[0]) ? $matches[0] : ''; $classes = isset($matches[2]) ? $matches[2] : ''; if(empty($tag)) return ''; if(empty($classes)) return $tag; $classes_array = explode(" ", $classes); $classes_array = array_filter( $classes_array ); foreach($classes_array as $key => $class) { //only wp-image- at the momment if(strpos($class, 'wp-image-') === 0) { unset( $classes_array[$key] ); } } $classes_array = array_values($classes_array); $tag = str_replace($classes, implode( " ", $classes_array ), $tag); return $tag; } } ?>PK1\ed(X!X!%modules/components/rewrite-author.phpnuW+Amodule_settings[] = array( 'id' => 'author', 'label' => __('New Author Path', 'wp-hide-security-enhancer'), 'description' => __('The default path is set to /author/', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Author Path', 'wp-hide-security-enhancer'), 'description' => __("An author URL display all posts associated to a particular author. The default URL format is:", 'wp-hide-security-enhancer') ."

https://-domain-name-/author/author-name/

" . __("By using a value of 'contributor' this become:", 'wp-hide-security-enhancer') ."
https://-domain-name-/contributor/author-name/", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-author/', ), 'value_description' => 'e.g. contributor', 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 60 ); $this->module_settings[] = array( 'id' => 'author_block_default', 'label' => __('Block default', 'wp-hide-security-enhancer'), 'description' => __('Block default /author/ when using custom one.', 'wp-hide-security-enhancer') . '
'.__('Apply only if ', 'wp-hide-security-enhancer') . 'New Author Path ' . __('is not empty.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block default', 'wp-hide-security-enhancer'), 'description' => __("After changing the default author, the old url is still accessible, this provide a way to block it.
The functionality apply only if New Author Path option is filled in.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-author/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 61 ); return $this->module_settings; } function _init_author( $saved_field_data ) { add_filter('author_rewrite_rules', array( $this, 'author_rewrite_rules'), 999); if(empty($saved_field_data)) return FALSE; //add default plugin path replacement $url = trailingslashit( site_url() ) . 'author'; $replacement = trailingslashit( home_url() ) . $saved_field_data; $this->wph->functions->add_replacement( $url , $replacement ); return TRUE; } /** * Rewrite the default Author url * * @param mixed $author_rewrite */ function author_rewrite_rules( $author_rewrite ) { $new_author_path = $this->wph->functions->get_module_item_setting('author'); if( empty( $new_author_path ) ) return $author_rewrite; $author_block_default = $this->wph->functions->get_module_item_setting('author_block_default'); $new_rules = array(); foreach ( $author_rewrite as $key => $value ) { $new_rules[ str_replace( 'author/', $new_author_path .'/' , $key ) ] = $value; } if ( $author_block_default == 'yes') $author_rewrite = $new_rules; else $author_rewrite = array_merge ( $author_rewrite, $new_rules ); return $author_rewrite; } } ?>PK1\s˳gg(modules/components/rewrite-json-rest.phpnuW+Amodule_settings[] = array( 'id' => 'disable_json_rest_v1', 'label' => __('Disable JSON REST V1 service', 'wp-hide-security-enhancer'), 'description' => __('An API service for WordPress which is active by default.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Disable JSON REST V1 service', 'wp-hide-security-enhancer'), 'description' => __("The WordPress REST API is an easy-to-use set of HTTP endpoints which allows access a site data in simple JSON format. That including users, posts, taxonomies and more. Retrieving or updating is as simple as sending a HTTP request.", 'wp-hide-security-enhancer') . "
" . __("A REST API can be consumed everywhere. On mobile applications, on front-end (web apps) or any other devices that have access on the net, practically everything can connect from anywhere to your site and interact though JSON REST API service.", 'wp-hide-security-enhancer') . "

" . __("V1 was the first development version of API, which currently is deprecated. To disable the usage of it, simply chose Yes.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-json-rest/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break specific functionality. Some plugins might use this API. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 58 ); $this->module_settings[] = array( 'id' => 'disable_json_rest_v2', 'label' => __('Disable JSON REST V2 service', 'wp-hide-security-enhancer'), 'description' => __('An API service for WordPress which is active by default.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Disable JSON REST V2 service', 'wp-hide-security-enhancer'), 'description' => __("The WordPress REST API is an easy-to-use set of HTTP endpoints which allows access a site data in simple JSON format. That including users, posts, taxonomies and more. Retrieving or updating is as simple as sending a HTTP request.", 'wp-hide-security-enhancer') . "
" . __("A REST API can be consumed everywhere. On mobile applications, on front-end (web apps) or any other devices that have access on the net, practically everything can connect from anywhere to your site and interact though JSON REST API service.", 'wp-hide-security-enhancer') . "

" . __("V2 is the current development version of API, which is included into WordPress as default. To disable the usage of it, simply chose Yes." , 'wp-hide-security-enhancer') . "
" . __("This might be required by specific plugins, including new WordPress editor Gutenberg.", 'wp-hide-security-enhancer') . "", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-json-rest/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break specific functionality. Some plugins like Gutenberg editor use this API. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 58 ); $this->module_settings[] = array( 'type' => 'split' ); $this->module_settings[] = array( 'id' => 'block_json_rest', 'label' => __('Block any JSON REST calls', 'wp-hide-security-enhancer'), 'description' => __('Any call for JSON REST API service will be blocked.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block any JSON REST calls', 'wp-hide-security-enhancer'), 'description' => __("This blocks the JSON REST API service.", 'wp-hide-security-enhancer') . "
" . __("This might be required by specific plugins, including new WordPress editor Gutenberg.", 'wp-hide-security-enhancer') . "", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-json-rest/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break specific functionality. Some plugins like Gutenberg editor use this API. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 58 ); $this->module_settings[] = array( 'type' => 'split' ); $this->module_settings[] = array( 'id' => 'disable_json_rest_wphead_link', 'label' => __('Disable output the REST API link tag into page header', 'wp-hide-security-enhancer'), 'description' => __('By default a REST API link tag is being append to HTML.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('disable_json_rest_wphead_link', 'wp-hide-security-enhancer'), 'description' => __("As default the API url is being append into the front html head tag. Using this option, it will be replaced.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-json-rest/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 58 ); $this->module_settings[] = array( 'id' => 'disable_json_rest_xmlrpc_rsd', 'label' => __('Disable JSON REST WP RSD endpoint from XML-RPC responses', 'wp-hide-security-enhancer'), 'description' => __('By default a WP RSD endpoint is being append to the XML respose.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('disable_json_rest_xmlrpc_rsd', 'wp-hide-security-enhancer'), 'description' => __("Disable any RSD endpoint from a XML-RPC response.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-json-rest/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 58 ); $this->module_settings[] = array( 'id' => 'disable_json_rest_template_redirect', 'label' => __('Disable Sends a Link header for the REST API', 'wp-hide-security-enhancer'), 'description' => __('On template_redirect, disable Sends a Link header for the REST API.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('disable_json_rest_template_redirect', 'wp-hide-security-enhancer'), 'description' => __("Disable Sends a Link header for the REST API, on template_redirect", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-json-rest/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 58 ); return $this->module_settings; } function _init_disable_json_rest_v1($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('json_enabled', '__return_false'); add_filter('json_jsonp_enabled', '__return_false'); } function _init_disable_json_rest_v2($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('rest_enabled', '__return_false'); add_filter('rest_jsonp_enabled', '__return_false'); } function _callback_saved_block_json_rest($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); if($this->wph->server_htaccess_config === TRUE) { $text = "\nRewriteRule ^wp-json(.+) ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } function _init_disable_json_rest_wphead_link($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action( 'wp_head', 'rest_output_link_wp_head', 10 ); } function _init_disable_json_rest_xmlrpc_rsd($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' ); } function _init_disable_json_rest_template_redirect($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; remove_action( 'template_redirect', 'rest_output_link_header', 11 ); } } ?>PK1\)mMmM&modules/components/admin-admin_url.phpnuW+Amodule_settings[] = array( 'id' => 'admin_url', 'label' => __('New Admin Url', 'wp-hide-security-enhancer'), 'description' => array( __('Create a new admin url instead default /wp-admin and /login.', 'wp-hide-security-enhancer') ), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Admin Url', 'wp-hide-security-enhancer'), 'description' => __("Despite the flexibility of WordPress framework, there are few ways to configure the admin login url customization for making a bit safer against unauthorized access and brute force attempts. All methods are not provided out of the box through WordPress core but require custom code to make it happen.", 'wp-hide-security-enhancer') . "

". __("This feature provide an easy way to change the default /wp-admin/ to a different slug.", 'wp-hide-security-enhancer') . "

". __("Once changed, the new url will be used to access all Dashboard sections, from Posts and Pages section to Plugins, Appearance and Settings.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/admin-change-wp-admin/' ), 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name'), array($this, 'sanitize_path_name')), 'processing_order' => 60 ); $this->module_settings[] = array( 'id' => 'block_default_admin_url', 'label' => __('Block default Admin Url', 'wp-hide-security-enhancer'), 'description' => array( __('Block default admin url and files from being accesible.', 'wp-hide-security-enhancer') ), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block default Admin Url', 'wp-hide-security-enhancer'), 'description' => __("If set to Yes, the old admin url will be blocked and a default theme 404 error page will be returned.", 'wp-hide-security-enhancer') . "

" . __('Ensure the New Admin Url option works correctly on your server before activate this.', 'wp-hide-security-enhancer') . '', 'input_value_extension' => 'php', 'option_documentation_url' => 'https://www.wp-hide.com/documentation/admin-change-wp-admin/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break the layour of dashboard admin if server not supporting the feature. Ensure `New Admin Url` option works fine before activate this.
If not working, use the recovery link to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 65 ); return $this->module_settings; } function _init_admin_url($saved_field_data) { if(empty($saved_field_data)) return FALSE; remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 ); //conflict handle with other plugins include_once(WPH_PATH . 'compatibility/wp-simple-firewall.php'); WPH_conflict_handle_wp_simple_firewall::custom_login_check(); $this->wph->functions->add_replacement( trailingslashit( site_url() ) . 'wp-admin' , trailingslashit( home_url() ) . $saved_field_data ); add_action('set_auth_cookie', array($this,'set_auth_cookie'), 999, 5); //make sure the admin url redirect url is updated when updating WordPress Core add_filter('user_admin_url', array($this, 'wp_core_update_user_admin_url'), 999, 2); add_filter('admin_url', array($this, 'wp_core_update_admin_url'), 999, 3); //ensure admin_url() return correct url add_filter('admin_url', array($this, 'update_admin_url'), 999, 3); } function _callback_saved_admin_url($saved_field_data) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data)) return $processing_response; $wp_admin = untrailingslashit ( $this->wph->functions->get_url_path( trailingslashit( site_url() ) . 'wp-admin' ) ); $new_admin = untrailingslashit ( $this->wph->functions->get_url_path( trailingslashit( home_url() ) . $saved_field_data ) ); $rewrite_base = $saved_field_data; $rewrite_to = $this->wph->functions->get_rewrite_to_base( $wp_admin, TRUE, FALSE ); $rewrite_to_new_admin = $new_admin; $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "\nRewriteCond %{REQUEST_URI} ". $rewrite_to_new_admin ."$"; $text .= "\nRewriteRule ^(.*)$ ". $rewrite_to_new_admin ."/ [R=301,L]"; $text .= "\nRewriteRule ^" . $rewrite_base . '(.*) '. $rewrite_to .'$1 [L,QSA]'; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; $processing_response['page_refresh'] = TRUE; return $processing_response; } function admin_url($url, $path, $blog_id) { if($this->wph->uninstall === TRUE) return $url; $new_admin_url = $this->wph->functions->get_module_item_setting('admin_url'); $admin_dir_uri = trailingslashit( site_url() ) . trim($new_admin_url, "/"); $new_url = trailingslashit( $admin_dir_uri ) . $path; //add replacement $this->wph->functions->add_replacement($url, $new_url); return $new_url; } function set_auth_cookie($auth_cookie, $expire, $expiration, $user_id, $scheme) { $new_admin_url = $this->wph->functions->get_module_item_setting('admin_url'); if ( $scheme == 'secure_auth' ) { $auth_cookie_name = SECURE_AUTH_COOKIE; $secure = TRUE; } else { $auth_cookie_name = AUTH_COOKIE; $secure = FALSE; } $sitecookiepath = empty($this->wph->default_variables['wordpress_directory']) ? SITECOOKIEPATH : rtrim(SITECOOKIEPATH, trailingslashit($this->wph->default_variables['wordpress_directory'])); if (empty ($sitecookiepath)) $sitecookiepath = '/'; setcookie($auth_cookie_name, $auth_cookie, $expire, $sitecookiepath . $new_admin_url, COOKIE_DOMAIN, $secure, true); $manager = WP_Session_Tokens::get_instance( $user_id ); $token = $manager->create( $expiration ); $logged_in_cookie = wp_generate_auth_cookie( $user_id, $expiration, 'logged_in', $token ); } function _init_block_default_admin_url($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; } function _callback_saved_block_default_admin_url($saved_field_data) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data) || $saved_field_data == 'no') return $processing_response; //prevent from blocking if the admin_url is empty $admin_url = $this->wph->functions->get_module_item_setting('admin_url'); if (empty( $admin_url )) return FALSE; $rewrite_base = $this->wph->functions->get_rewrite_base( '', FALSE); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text .= "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^".$rewrite_base."wp-admin(.+) ". $rewrite_to ."?wph-throw-404 [L]\n"; } if($this->wph->server_web_config === TRUE) { $text .= ' '; } $processing_response['rewrite'] = $text; return $processing_response; } /** * Replace any dots in the slug, as it will confuse the server uppon being an actual file * * @param mixed $value */ function sanitize_path_name( $value ) { $value = str_replace(".","-", $value); return $value; } function wp_core_update_user_admin_url( $url, $path ) { if( strpos( $_SERVER['REQUEST_URI'], "/update-core.php") === FALSE ) return $url; //replace the wp-admin with custom slug $admin_url = $this->wph->functions->get_module_item_setting('admin_url'); $url = str_replace('/wp-admin', '/' . $admin_url, $url); return $url; } function wp_core_update_admin_url( $url, $path, $blog_id ) { if( strpos( $_SERVER['REQUEST_URI'], "/update-core.php") === FALSE && strpos( $_SERVER['REQUEST_URI'], "/update.php") === FALSE) return $url; //replace the wp-admin with custom slug $admin_url = $this->wph->functions->get_module_item_setting('admin_url'); $url = str_replace('/wp-admin', '/' . $admin_url, $url); return $url; } function update_admin_url( $url, $path, $blog_id ) { //if( strpos( $_SERVER['REQUEST_URI'], "/admin-ajax.php") === FALSE ) //return $url; //replace the wp-admin with custom slug $admin_url = $this->wph->functions->get_module_item_setting('admin_url'); $url = str_replace('/wp-admin', '/' . $admin_url, $url); return $url; } } ?>PK1\"՝f.f..modules/components/rewrite-new_upload_path.phpnuW+Amodule_settings[] = array( 'id' => 'new_upload_path', 'label' => __('New Uploads Path', 'wp-hide-security-enhancer'), 'description' => __('The default uploads path is set to', 'wp-hide-security-enhancer') . ' '. str_replace(get_bloginfo('wpurl'), '' ,$this->wph->default_variables['upload_url']) .'/', 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Uploads Path', 'wp-hide-security-enhancer'), 'description' => __("Use any alphanumeric symbols for this field which will be used as the new slug for the uploads folder. Using this option the default media folder can be mapped to another path. Filling with a slug like 'media' the links become like this:", 'wp-hide-security-enhancer') . "

<img class="alignnone size-full" src="http://domain.com/media/106658.jpg" alt="" width="640" height="390" alt="" />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-uploads/' ), 'value_description' => __('e.g. media', 'wp-hide-security-enhancer'), 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 40 ); $this->module_settings[] = array( 'id' => 'block_upload_url', 'label' => __('Block default uploads URL', 'wp-hide-security-enhancer'), 'description' => __('Block default /wp-content/uploads/ media folder from being accesible through default urls.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block default uploads URL', 'wp-hide-security-enhancer'), 'description' => __("This blocks the default wp-content/plugins/ url.
The functionality apply only if New Plugins Path option is filled in.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-uploads/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break the layout if server not supporting the feature. Ensure `New Uploads Path` option works fine before activate this. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 45 ); return $this->module_settings; } function _init_new_upload_path($saved_field_data) { if(empty($saved_field_data)) return FALSE; //add default plugin path replacement $new_upload_path = $this->wph->functions->untrailingslashit_all( $this->wph->functions->get_module_item_setting('new_upload_path') ); $new_url = trailingslashit( home_url() ) . $new_upload_path; $this->wph->functions->add_replacement( $this->wph->default_variables['upload_url'], $new_url); } function _callback_saved_new_upload_path($saved_field_data) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data)) return $processing_response; $uploads_path = $this->wph->functions->get_url_path( $this->wph->default_variables['upload_url'] ); $rewrite_base = trailingslashit( $saved_field_data ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $uploads_path ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $rewrite_base . '(.+) '. $rewrite_to .'$1 [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _callback_saved_block_upload_url($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //prevent from blocking if the wp-include is not modified $new_upload_path = $this->wph->functions->get_module_item_setting('new_upload_path'); if (empty( $new_upload_path )) return FALSE; $default_upload_url = untrailingslashit ( $this->wph->default_variables['upload_url'] ); $default_upload_url = str_replace( site_url(), "", $default_upload_url); $default_upload_url = ltrim(rtrim($default_upload_url, "/"), "/"); $rewrite_base = $this->wph->functions->get_rewrite_base( $default_upload_url, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^". $rewrite_base ."(.+) ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } } ?>PK1\;*`&modules/components/general-scripts.phpnuW+Amodule_settings[] = array( 'id' => 'scripts_remove_version', 'label' => __('Remove Version', 'wp-hide-security-enhancer'), 'description' => __('Remove version number from enqueued script files.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove Version', 'wp-hide-security-enhancer'), 'description' => __("This provide a method to remove the JavaScript version number which is being append at the end of every script file. Generally this is intended to be a plain information upon the JavaScript code version, however not being used within any functionality or code run.", 'wp-hide-security-enhancer') . "

" . __("Keeping version number for scripts provide additional information to hackers which try to identify specific JavaScript code and version which know as being vulnerable.", 'wp-hide-security-enhancer') . "

" . __("Sample tag:", 'wp-hide-security-enhancer') . "
<script type='text/javascript' src='https://-domain-name-/wp-includes/js/jquery/jquery.js?ver=1.12.4'></script>
" . __("Once option set to Yes the tag becomes:", 'wp-hide-security-enhancer') . "
<script type='text/javascript' src='https://-domain-name-/wp-includes/js/jquery/jquery.js'></script>", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-scripts/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); return $this->module_settings; } function _init_scripts_remove_version($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter( 'script_loader_src', array(&$this, 'remove_file_version'), 999 ); } function remove_file_version($src) { if( empty($src) ) return $src; $parse_url = parse_url( $src ); if(empty($parse_url['query'])) return $src; parse_str( $parse_url['query'], $query ); if(!isset( $query['ver'] )) return $src; unset($query['ver']); $parse_url['query'] = http_build_query( $query ); if(empty($parse_url['query'])) unset( $parse_url['query'] ); $url = $this->wph->functions->build_parsed_url( $parse_url ); return $url; } } ?>PK1\pQQ/modules/components/rewrite-new_xml-rpc-path.phpnuW+Amodule_settings[] = array( 'id' => 'new_xml_rpc_path', 'label' => __('New XML-RPC Path', 'wp-hide-security-enhancer'), 'description' => __('The default XML-RPC path is set to xmlrpc.php.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New XML-RPC Path', 'wp-hide-security-enhancer'), 'description' => __("XML-RPC is a remote procedure call (RPC) protocol which uses XML to encode its calls and HTTP as a transport mechanism. This service allow other applications to talk to your WordPress site.", 'wp-hide-security-enhancer') . "

" . __("As default the path to XML-RPC file is:", 'wp-hide-security-enhancer') . "https://-domain-name-/xmlrpc.php

" . __("Through this option it can be changed to anything else. This ensure the protocol will not be called by anyone who don't know the actual path.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-xml-rpc/', 'input_value_extension' => 'php' ), 'value_description' => __('e.g. my-xml-rpc.php', 'wp-hide-security-enhancer'), 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name'), array($this->wph->functions, 'php_extension_required')), 'processing_order' => 50 ); $this->module_settings[] = array( 'id' => 'block_xml_rpc', 'label' => __('Block default xmlrpc.php', 'wp-hide-security-enhancer'), 'description' => __('Shut down XML-RPC service.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block default xmlrpc.php', 'wp-hide-security-enhancer'), 'description' => __("This blocks the default XML-RPC service. The functionality apply if New XML-RPC Path option is NOT filled in.", 'wp-hide-security-enhancer') . "

" . __("Keep in mind that some plugins like Jetpack use this API, so disabling might break specific functionality.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-xml-rpc/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break specific functionality. Some plugins like Jetpack use this API. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); $this->module_settings[] = array( 'id' => 'disable_xml_rpc_auth', 'label' => __('Disable XML-RPC authentication', 'wp-hide-security-enhancer'), 'description' => __('Filter whether XML-RPC methods requiring authentication, such as for publishing purposes, are enabled.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Disable XML-RPC authentication', 'wp-hide-security-enhancer'), 'description' => __("As default it require authentication for the protocol to be used along with a remote application. Activating the option, no authentication will be required through a call. Recommended is to be set to No.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-xml-rpc/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); $this->module_settings[] = array( 'id' => 'remove_xml_rpc_tag', 'label' => __('Remove pingback', 'wp-hide-security-enhancer'), 'description' => __('Remove pingback link tag from theme.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove pingback', 'wp-hide-security-enhancer'), 'description' => __("A pingback is one of four types of link-back methods for Web authors to request notification when somebody links to one of their documents. This enables authors to keep track of who is linking to, or referring to their articles Using this option this functionality can be removed.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-xml-rpc/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break specific functionality. Some plugins like Jetpack use this API. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 58 ); return $this->module_settings; } function _init_new_xml_rpc_path($saved_field_data) { if(empty($saved_field_data)) return FALSE; //add default plugin path replacement $old_url = trailingslashit( site_url() ) . 'xmlrpc.php'; $new_url = trailingslashit( home_url() ) . $saved_field_data; $this->wph->functions->add_replacement( $old_url , $new_url ); } function _callback_saved_new_xml_rpc_path($saved_field_data) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data)) return $processing_response; $file_path = $this->wph->functions->get_url_path( trailingslashit(site_url()) . 'xmlrpc.php' ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $file_path, TRUE, FALSE ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $saved_field_data . ' '. $rewrite_to .' [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _callback_saved_block_xml_rpc($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^xmlrpc.php ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } function _init_disable_xml_rpc_auth($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter( 'xmlrpc_enabled', '__return_false' ); } function _init_remove_xml_rpc_tag($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter('wp-hide/ob_start_callback', array($this, 'remove_xml_rpc_tag')); } function remove_xml_rpc_tag( $buffer ) { $result = preg_match_all('/(]+)rel=("|\')pingback("|\')([^>]+)?\/?>)/im', $buffer, $founds); if(!isset($founds[0]) || count($founds[0]) < 1) return $buffer; if(count($founds[0]) > 0) { foreach ($founds[0] as $found) { if(empty($found)) continue; $buffer = str_replace($found, "", $buffer); } } return $buffer; } } ?>PK1\@t(Q)modules/components/general-robots-txt.phpnuW+Amodule_settings[] = array( 'id' => 'disable_robots_txt', 'label' => __('Disable admin url within Robots.txt', 'wp-hide-security-enhancer'), 'description' => __('Disable any admin url which is being automatically generated by WordPress when called robots.txt.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Disable admin url within Robots.txt', 'wp-hide-security-enhancer'), 'description' => __("The robots.txt file plays a major role in search engine ranking. It blocks search engine bots and helps index and crawl important parts of your site.", 'wp-hide-security-enhancer') . "

" . __("As default the robots.txt also includes an allow clause to admin URL and admin-ajax.php url. Once customized those areas, the new slugs might not want to be show to anyone. Turn this option to Yes removed any reference to new wp-admin and admin-ajax.php.", 'wp-hide-security-enhancer') . "

" . __("Sample robots.txt url:" , 'wp-hide-security-enhancer') . "
https://-domain-name-/robots.txt", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-robots-txt/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); return $this->module_settings; } function _init_disable_robots_txt($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_action( 'robots_txt', array($this, 'disable_robots_txt' ), 999, 2); } function disable_robots_txt( $output, $public ) { $search_for = '/wp-admin/'; $lines = preg_split("/\\r\\n|\\r|\\n/", $output); foreach($lines as $key => $line) { if(stripos($line, $search_for) !== FALSE) unset($lines[$key]); } $output = implode(PHP_EOL, $lines); return $output; } } ?>PK1\j modules/components/cdn-setup.phpnuW+Amodule_settings[] = array( 'id' => 'cdn_url', 'label' => __('CDN Url', 'wp-hide-security-enhancer'), 'description' => __('Some CDN providers (like stackpath.com ) replace site assets with custom url, enter here such url. Otherwise this option should stay empty.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('CDN Url', 'wp-hide-security-enhancer'), 'description' => __("A Content Delivery Network - CDN - is a network of servers located around the globe in fundamental spots with fast access. It takes a while for a web page to load especially if the server is located far away from the user. So they are designed to host and deliver copies of your site's static and dynamic content such as images, CSS, JavaScript, audio and video streams.", 'wp-hide-security-enhancer') . "

" . __('Sample CDN url:', 'wp-hide-security-enhancer') . "
cdnjs.cloudflare.com

" . __('Enter a CDN Url to allow the plugin to process assets provided through CDN service.', 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/admin-change-wp-admin/' ), 'input_type' => 'text', 'sanitize_type' => array() ); return $this->module_settings; } function _init_scripts_remove_version($saved_field_data) { } } ?>PK1\/qq-modules/components/rewrite-new_theme_path.phpnuW+Amodule_settings[] = array( 'type' => 'split', 'label' => ucfirst( get_option('template') ) ); $this->module_settings[] = array( 'id' => 'new_theme_path', 'label' => __('New Theme Path', 'wp-hide-security-enhancer'), 'description' => __('Change theme url, which as default the path is set to', 'wp-hide-security-enhancer') . ' '. str_replace(get_bloginfo('wpurl'), '' ,$this->wph->default_variables['template_url']) .'/', 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Theme Path', 'wp-hide-security-enhancer'), 'description' => __("This option helps to change the theme url to a custom one. As default all theme assets ( styles, JavaScript etc ) are loaded using the theme url and appear on front side html source like this:", 'wp-hide-security-enhancer') ."

<link rel='stylesheet' href='http://-domain-name-/wp-content/themes/Divi/style.css' type='text/css' media='all' />

" . __("When using this option, if filling with `template`, all urls on front side become as follow:", 'wp-hide-security-enhancer') ."

<link rel='stylesheet' href='http://-domain-name-/template/style.css' type='text/css' media='all' />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-theme/' ), 'value_description' => __('Example', 'wp-hide-security-enhancer') . ': ' . __('template', 'wp-hide-security-enhancer'), 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name'), 'strtolower'), 'processing_order' => 10 ); $this->module_settings[] = array( 'id' => 'new_style_file_path', 'label' => __('New Style File Path', 'wp-hide-security-enhancer'), 'description' => __('Change default theme style file style.css, current path is set to', 'wp-hide-security-enhancer') . ' '. str_replace(get_bloginfo('wpurl'), '' , $this->wph->default_variables['template_url']) .'/style.css', 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Style File Path', 'wp-hide-security-enhancer'), 'description' => __("This allow to change the default style.css filename to something else e.g. template-style.css. Per this example, on front side the main style link change from /style.css to /template-style.css", 'wp-hide-security-enhancer') ."

<link rel='stylesheet' href='http://-domain-name-/template/template-style.css' type='text/css' media='all' />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-theme/', 'input_value_extension' => 'css' ), 'value_description' => __('Example', 'wp-hide-security-enhancer') . ': ' . __('skin.css', 'wp-hide-security-enhancer'), 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 5 ); $this->module_settings[] = array( 'id' => 'style_file_clean', 'label' => __('Remove description header from Style file', 'wp-hide-security-enhancer'), 'description' => array( __('Strip out all meta data from style file.', 'wp-hide-security-enhancer') . '
' ), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Style File Path', 'wp-hide-security-enhancer'), 'description' => __("Strip out all meta data from style file as Theme Name, Theme URI, Author etc. Those are important informations for hackers to find out possible theme security breaches. A list of headers can e found at", 'wp-hide-security-enhancer') . " ". __("Theme Headers", 'wp-hide-security-enhancer') . "

" . __("This feature may fail if style file url not available on html ( being concatenated ).", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-theme/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break the layout if server not supporting the feature. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'options_post' => '

warning ' . __('This functionality use caching! If active, cache clear is recommended on styles updates.', 'wp-hide-security-enhancer') .'

' . __("Cache Clear", 'wp-hide-security-enhancer') . "

" , 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 3 ); if($this->wph->templates_data['use_child_theme']) { $this->module_settings[] = array( 'type' => 'split' ); $this->module_settings[] = array( 'type' => 'split', 'label' => ucfirst( get_option('current_theme') ) ); $this->module_settings[] = array( 'id' => 'new_theme_child_path', 'label' => __('New Theme Path', 'wp-hide-security-enhancer'), 'description' => __('Change child theme url, which as default the path is set to', 'wp-hide-security-enhancer') . ' '. str_replace(get_bloginfo('wpurl'), '' , trailingslashit($this->wph->templates_data['themes_url']) . $this->wph->templates_data['child']['folder_name']) .'/', 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Theme Path', 'wp-hide-security-enhancer'), 'description' => __("This option helps to change the child theme url to a custom one. As default all theme assets ( styles, JavaScript etc ) are loaded using the theme url and appear on front side html source like this:", 'wp-hide-security-enhancer') . "

<link rel='stylesheet' href='http://-domain-name-/wp-content/themes/Divi-child/style.css' type='text/css' media='all' />

" . __("When using this option, if filling with `template-child`, all urls on front side become as follow:", 'wp-hide-security-enhancer') . "

<link rel='stylesheet' href='http://-domain-name-/template-child/style.css' type='text/css' media='all' />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-theme/' ), 'value_description' => __('Example', 'wp-hide-security-enhancer') . ': ' . __('template-child', 'wp-hide-security-enhancer'), 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name'), 'strtolower'), 'processing_order' => 9 ); $this->module_settings[] = array( 'id' => 'child_style_file_path', 'label' => __('New Style File Path', 'wp-hide-security-enhancer'), 'description' => __('Change default child theme style file style.css, current path is set to', 'wp-hide-security-enhancer') . ' '. str_replace(get_bloginfo('wpurl'), '' , $this->wph->default_variables['stylesheet_uri']) .'/style.css', 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Style File Path', 'wp-hide-security-enhancer'), 'description' => __("This allow to change the default style.css filename to something else e.g. template-style.css. Per this example, on front side the main style link change from /style.css to /child-style.css", 'wp-hide-security-enhancer') . "

<link rel='stylesheet' href='http://-domain-name-/template-child/child-style.css' type='text/css' media='all' />", 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-theme/', 'input_value_extension' => 'css' ), 'value_description' => __('Example', 'wp-hide-security-enhancer') . ': ' . __('child-skin.css', 'wp-hide-security-enhancer'), 'input_type' => 'text', 'sanitize_type' => array(array($this->wph->functions, 'sanitize_file_path_name')), 'processing_order' => 5 ); $this->module_settings[] = array( 'id' => 'child_style_file_clean', 'label' => __('Remove description header from Style file', 'wp-hide-security-enhancer'), 'description' => array( __('Strip out all meta data from child theme style file.', 'wp-hide-security-enhancer') . '
' ), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('New Style File Path', 'wp-hide-security-enhancer'), 'description' => __("Strip out all meta data from style file as Theme Name, Theme URI, Author etc. Those are important informations for hackers to find out possible theme security breaches. A list of headers can e found at", 'wp-hide-security-enhancer') . " " . __("Theme Headers", 'wp-hide-security-enhancer') . "

" . __("This feature may fail if style file url not available on html ( being concatenated ).", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-theme/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('This can break the layout if server not supporting the feature. Ensure all regular options works fine before activate this. Once active test it thoroughly.
If not working, set to No to revert.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'options_post' => '

warning ' . __('This functionality use caching! If active, cache clear is recommended on styles updates.', 'wp-hide-security-enhancer') .'

' . __("Cache Clear", 'wp-hide-security-enhancer') . '

' , 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 3 ); add_filter('wp-hide/interface/process', array($this, 'interface_process'), 10, 3); } add_action('wph/settings_changed', array($this, 'settings_changed'), 10, 2); return $this->module_settings; } /** * New Theme Path * * @param mixed $saved_field_data */ function _init_new_theme_path($saved_field_data) { if(empty($saved_field_data)) return FALSE; //add replacement url $this->wph->functions->add_replacement( $this->wph->default_variables['template_url'], trailingslashit( home_url() ) . $saved_field_data ); } function _callback_saved_new_theme_path($saved_field_data) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data)) return $processing_response; $theme_path = $this->wph->functions->get_url_path( $this->wph->templates_data['themes_url'] . $this->wph->templates_data['main']['folder_name'] ); $path = ''; $path .= trailingslashit( $saved_field_data ); $theme_path = str_replace(' ', '%20', $theme_path); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $theme_path ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $path . '(.+) '. $rewrite_to .'$1 [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _init_new_theme_child_path($saved_field_data) { if(empty($saved_field_data)) return FALSE; //add replacement url $this->wph->functions->add_replacement( $this->wph->default_variables['stylesheet_uri'] , trailingslashit( home_url() ) . untrailingslashit( $saved_field_data ) ); } function _callback_saved_new_theme_child_path($saved_field_data) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data)) return $processing_response; $theme_path = $this->wph->functions->get_url_path( $this->wph->templates_data['themes_url'] . $this->wph->templates_data['child']['folder_name'] ); $path = ''; $path .= trailingslashit( $saved_field_data ); $theme_path = str_replace(' ', '%20', $theme_path); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $theme_path ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $path . '(.+) '. $rewrite_to .'$1 [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _init_new_style_file_path($saved_field_data) { if(empty($saved_field_data)) return FALSE; if($this->wph->functions->is_theme_customize()) return; $new_theme_path = $this->wph->functions->get_module_item_setting('new_theme_path'); //add default replacements $template_url = trailingslashit( $this->wph->default_variables['template_url'] ); $old_style_file_path = trailingslashit( $this->wph->default_variables['template_url'] ) . 'style.css'; if(!empty($new_theme_path)) { $new_style_file_path = trailingslashit( home_url() ) . trailingslashit($new_theme_path) . $saved_field_data; $this->wph->functions->add_replacement( $old_style_file_path , $new_style_file_path ); } else { $new_style_file_path = $template_url . $saved_field_data; $this->wph->functions->add_replacement( $old_style_file_path , $new_style_file_path ); } //add replacement for style.css when already template name replaced if(!empty($new_theme_path)) { $old_style_file_path = trailingslashit( site_url() ) . trailingslashit( $new_theme_path ) . 'style.css'; $this->wph->functions->add_replacement( $old_style_file_path , $new_style_file_path ); } } function _callback_saved_new_style_file_path($saved_field_data) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data)) return $processing_response; $current_stylesheet_uri = $this->wph->default_variables['template_url']; $current_stylesheet_uri = $this->wph->functions->get_url_path( $current_stylesheet_uri ); $current_stylesheet_uri = trailingslashit( $current_stylesheet_uri ) . 'style.css'; $path = ''; /* if(!empty($this->wph->default_variables['wordpress_directory'])) $path = trailingslashit($this->wph->default_variables['wordpress_directory']); */ $new_theme_path = $this->wph->functions->get_module_item_setting('new_theme_path'); if(!empty($new_theme_path)) { $path .= trailingslashit($new_theme_path) . $saved_field_data; } else { $template_relative_url = $this->wph->functions->get_url_path_relative_to_domain_root($this->wph->default_variables['template_url']); $path .= trailingslashit($template_relative_url) . $saved_field_data; } $current_stylesheet_uri = str_replace(' ', '%20', $current_stylesheet_uri); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $current_stylesheet_uri, TRUE, FALSE ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $path . ' '. $rewrite_to .' [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _init_style_file_clean($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //actual style file path $file_path = trailingslashit(get_template_directory()) . 'style.css'; $file_path = str_replace( '\\', '/', $file_path); $file_path = trim($file_path, '\\/ '); //not for windows if ( DIRECTORY_SEPARATOR != '\\') $file_path = DIRECTORY_SEPARATOR . $file_path; $this->cache_compare_for_clear[] = $file_path; if ( ! has_filter( 'shutdown', array($this, 'cache_compare_for_clear'), 999 ) ) add_action('shutdown', array($this, 'cache_compare_for_clear'), 999); } function _callback_saved_style_file_clean($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $wp_content_path = $this->wph->functions->get_url_path( WP_PLUGIN_URL ); $processing_response = array(); //actual style file path $current_stylesheet_uri = $this->wph->default_variables['template_url']; $current_stylesheet_uri = $this->wph->functions->get_url_path( $current_stylesheet_uri ); $current_stylesheet_uri = trailingslashit( $current_stylesheet_uri ) . 'style.css'; //current style file path $path = ''; $new_theme_path = $this->wph->functions->get_module_item_setting('new_theme_path'); $new_style_file_path = $this->wph->functions->get_module_item_setting('new_style_file_path'); if(!empty($new_style_file_path)) { /* if(!empty($this->wph->default_variables['wordpress_directory'])) $path = trailingslashit($this->wph->default_variables['wordpress_directory']); */ if(!empty($new_theme_path)) { $path .= trailingslashit($new_theme_path) . $new_style_file_path; } else { $template_relative_url = $this->wph->functions->get_url_path_relative_to_domain_root($this->wph->default_variables['template_url']); $path .= trailingslashit($template_relative_url) . $new_style_file_path; } } else if(!empty($new_theme_path)) { $path = trailingslashit( $new_theme_path ) . 'style.css'; } else { //use the default // cont/themes/twentyfifteen/style.css $default_path = get_template_directory_uri(); //check for modified wp-content folder $new_content_path = $this->wph->functions->get_module_item_setting('new_content_path'); if(!empty($new_content_path)) { $path = str_replace( trailingslashit( WP_CONTENT_URL ) , "/", $default_path); $path = $new_content_path . $path; } else { $path = str_replace( trailingslashit( WP_CONTENT_URL ) , "/", $default_path); $wp_content_folder = str_replace( site_url() , '' , WP_CONTENT_URL); $wp_content_folder = trim($wp_content_folder, '/'); $path = $wp_content_folder . $path; } //$path = $this->wph->functions->get_url_path( get_template_directory_uri() ); $path = trailingslashit( $path ) . 'style.css'; } //plugin File Processor router path $file_processor = $this->wph->functions->get_url_path( WP_PLUGIN_URL ); $file_processor = $this->wph->functions->get_rewrite_to_base( trailingslashit( $file_processor ) . 'wp-hide-security-enhancer/router/file-process.php', TRUE, FALSE ); $current_stylesheet_uri = str_replace(' ', '%20', $current_stylesheet_uri); $current_stylesheet_uri = $this->wph->functions->get_rewrite_to_base( $current_stylesheet_uri, TRUE, FALSE ); $path = str_replace(' ', '%20', $path); $processing_response['rewrite'] = ''; if($this->rewrite_global_output === FALSE) { $processing_response['rewrite'] = $this->get_rewrite_global_file_process(); $this->rewrite_global_output = TRUE; } if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] .= "\nRewriteRule ^" . $path . ' '. $file_processor . '?action=style-clean&file_path=' . $current_stylesheet_uri .'&replacement_path=/'. $path .' [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] .= ' '; return $processing_response; } function _init_child_style_file_path($saved_field_data) { if(empty($saved_field_data)) return FALSE; if($this->wph->functions->is_theme_customize()) return; $new_theme_path = $this->wph->functions->get_module_item_setting('new_theme_child_path'); //add default replacements $template_url = trailingslashit( $this->wph->default_variables['stylesheet_uri'] ); $old_style_file_path = trailingslashit( $this->wph->default_variables['stylesheet_uri'] ) . 'style.css'; if(!empty($new_theme_path)) { $new_style_file_path = trailingslashit( home_url() ) . trailingslashit($new_theme_path) . $saved_field_data; $this->wph->functions->add_replacement( $old_style_file_path , $new_style_file_path ); } else { $new_style_file_path = $template_url . $saved_field_data; $this->wph->functions->add_replacement( $old_style_file_path , $new_style_file_path ); } //add replacement for style.css when already template name replaced if(!empty($new_theme_path)) { $old_style_file_path = trailingslashit( site_url() ) . trailingslashit( $new_theme_path ) . 'style.css'; $this->wph->functions->add_replacement( $old_style_file_path , $new_style_file_path ); } } function _callback_saved_child_style_file_path($saved_field_data) { $processing_response = array(); //check if the field is noe empty if(empty($saved_field_data)) return $processing_response; $current_stylesheet_uri = $this->wph->default_variables['stylesheet_uri']; $current_stylesheet_uri = $this->wph->functions->get_url_path( $current_stylesheet_uri, TRUE ); $current_stylesheet_uri = trailingslashit( $current_stylesheet_uri ) . 'style.css'; $path = ''; /* if(!empty($this->wph->default_variables['wordpress_directory'])) $path = trailingslashit($this->wph->default_variables['wordpress_directory']); */ $new_theme_path = $this->wph->functions->get_module_item_setting('new_theme_child_path'); if(!empty($new_theme_path)) { $path .= trailingslashit($new_theme_path) . $saved_field_data; } else { $template_relative_url = $this->wph->functions->get_url_path_relative_to_domain_root($this->wph->default_variables['stylesheet_uri']); $path .= trailingslashit($template_relative_url) . $saved_field_data; } $current_stylesheet_uri = str_replace(' ', '%20', $current_stylesheet_uri); $rewrite_to = $this->wph->functions->get_rewrite_to_base( $current_stylesheet_uri, TRUE, FALSE ); if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] = "\nRewriteRule ^" . $path . ' '. $rewrite_to .' [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] = ' '; return $processing_response; } function _init_child_style_file_clean($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //actual style file path $file_path = trailingslashit(get_stylesheet_directory()) . 'style.css'; $file_path = str_replace( '\\', '/', $file_path); $file_path = trim($file_path, '\\/ '); //not for windows if ( DIRECTORY_SEPARATOR != '\\') $file_path = DIRECTORY_SEPARATOR . $file_path; $this->cache_compare_for_clear[] = $file_path; if ( ! has_filter( 'shutdown', array($this, 'cache_compare_for_clear'), 999 ) ) add_action('shutdown', array($this, 'cache_compare_for_clear'), 999); } function _callback_saved_child_style_file_clean($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $processing_response = array(); //actual style file path $current_stylesheet_uri = trailingslashit ( $this->wph->templates_data['themes_url'] ) . $this->wph->templates_data['child']['folder_name']; $current_stylesheet_uri = $this->wph->functions->get_url_path( $current_stylesheet_uri ); $current_stylesheet_uri = trailingslashit( $current_stylesheet_uri ) . 'style.css'; //current style file path $path = ''; $new_theme_path = $this->wph->functions->get_module_item_setting('new_theme_child_path'); $new_style_file_path = $this->wph->functions->get_module_item_setting('child_style_file_path'); if(!empty($new_style_file_path)) { /* if(!empty($this->wph->default_variables['wordpress_directory'])) $path = trailingslashit($this->wph->default_variables['wordpress_directory']); */ if(!empty($new_theme_path)) { $path .= trailingslashit($new_theme_path) . $new_style_file_path; } else { $template_relative_url = $this->wph->functions->get_url_path_relative_to_domain_root($this->wph->default_variables['stylesheet_uri']); $path .= trailingslashit($template_relative_url) . $new_style_file_path; } } else if(!empty($new_theme_path)) { $path = trailingslashit( $new_theme_path ) . 'style.css'; } else { //use the default // cont/themes/twentyfifteen/style.css $default_path = trailingslashit ( $this->wph->templates_data['themes_url'] ) . $this->wph->templates_data['child']['folder_name']; //check for modified wp-content folder $new_content_path = $this->wph->functions->get_module_item_setting('new_content_path'); if(!empty($new_content_path)) { $path = str_replace( trailingslashit( WP_CONTENT_URL ) , "/", $default_path); $path = $new_content_path . $path; } else { $path = str_replace( trailingslashit( WP_CONTENT_URL ) , "/", $default_path); $wp_content_folder = str_replace( site_url() , '' , WP_CONTENT_URL); $wp_content_folder = trim($wp_content_folder, '/'); $path = $wp_content_folder . $path; } //$path = $this->wph->functions->get_url_path( get_template_directory_uri() ); $path = trailingslashit( $path ) . 'style.css'; } //plugin File Processor router path $file_processor = $this->wph->functions->get_url_path( WP_PLUGIN_URL ); $file_processor = $this->wph->functions->get_rewrite_to_base( trailingslashit( $file_processor ) . 'wp-hide-security-enhancer/router/file-process.php', TRUE, FALSE ); $current_stylesheet_uri = str_replace(' ', '%20', $current_stylesheet_uri); $current_stylesheet_uri = $this->wph->functions->get_rewrite_to_base( $current_stylesheet_uri, TRUE, FALSE ); $path = str_replace(' ', '%20', $path); $processing_response['rewrite'] = ''; if($this->rewrite_global_output === FALSE) { $processing_response['rewrite'] = $this->get_rewrite_global_file_process(); $this->rewrite_global_output = TRUE; } if($this->wph->server_htaccess_config === TRUE) $processing_response['rewrite'] .= "\nRewriteRule ^" . $path . ' '. $file_processor . '?action=style-clean&file_path=' . $current_stylesheet_uri .'&replacement_path=/'. $path .' [L,QSA]'; if($this->wph->server_web_config === TRUE) $processing_response['rewrite'] .= ' '; return $processing_response; } function get_rewrite_global_file_process() { $rewrite = ''; $cache_path = '%{DOCUMENT_ROOT}'; $cache_path .= $this->wph->functions->get_rewrite_to_base( $this->wph->default_variables['content_directory'], TRUE, FALSE, 'full_path' ); $actual_cache_path = ''; $actual_cache_path .= $this->wph->functions->get_rewrite_to_base( $this->wph->default_variables['content_directory'], TRUE, FALSE, 'full_path' ); if($this->wph->server_htaccess_config === TRUE) { $rewrite = "\n" . 'RewriteCond "' . $cache_path . '/cache/wph/%{HTTP_HOST}%{REQUEST_URI}" -f' ."\n" . 'RewriteRule .* "' . $actual_cache_path . '/cache/wph/%{HTTP_HOST}%{REQUEST_URI}" [L]' ."\n"; } if($this->wph->server_web_config === TRUE) { $rewrite = "\n" . ' ' ."\n"; } return $rewrite; } /** * Compare if there's any changes on the cached files * Trigger cache clear if something has changed * */ function cache_compare_for_clear() { global $wp_filesystem; if (empty($wp_filesystem)) { require_once (ABSPATH . '/wp-admin/includes/file.php'); WP_Filesystem(); } $access_type = get_filesystem_method(); if($access_type !== 'direct') return; $cache_files_data = get_option('wph_cache_files_data'); $found_changes = FALSE; foreach($this->cache_compare_for_clear as $file) { $file_size = $wp_filesystem->size( $file ); $file_time = $wp_filesystem->mtime( $file ); if(isset($cache_files_data[md5($file)])) { $file_data = $cache_files_data[md5($file)]; if($file_data['size'] != $file_size || $file_data['time'] != $file_time) $found_changes = TRUE; } $file_data['size'] = $file_size; $file_data['time'] = $file_time; $cache_files_data[md5($file)] = $file_data; } update_option('wph_cache_files_data', $cache_files_data); if($found_changes === TRUE) $this->wph->functions->cache_clear(); } /** * Ensure specific processing execution when saving the options * * @param mixed $errors * @param mixed $process_interface_save_errors * @param mixed $_settings_ * @param mixed $module_settings */ function interface_process( $errors, $_settings_, $module_settings ) { global $process_interface_save_errors; //when using the 'Child - New Theme Path' trigger a warning tha the 'New Theme Path' should be changed to, to avoid relative paths issues within child styles if($_settings_['new_theme_path'] == '' && $_settings_['new_theme_child_path'] != '') { $process_interface_save_errors[] = array( 'type' => 'warning', 'message' => __('When changing the Child Theme Path it is recommended to also change the Main Theme Path to avoid relative paths issues within style files and layout break.', 'wp-hide-security-enhancer') ); } return $errors; } /** * Flush the style cache when this area being changed * * @param mixed $screen_slug * @param mixed $tab_slug */ function settings_changed( $screen_slug, $tab_slug ) { if( strtolower( $this->get_component_title() ) != $tab_slug ) return; $this->wph->functions->cache_clear(); } } ?>PK1\ '((&modules/components/rewrite-default.phpnuW+Amodule_settings[] = array( 'id' => 'rewrite_default', 'visible' => FALSE, 'processing_order' => 1 ); return $this->module_settings; } function _callback_saved_rewrite_default($saved_field_data) { $processing_response = array(); return $processing_response; } } ?>PK1\Lځ77)modules/components/rewrite-root-files.phpnuW+Amodule_settings[] = array( 'id' => 'block_license_txt', 'label' => __('Block license.txt', 'wp-hide-security-enhancer'), 'description' => __('Block access to license.txt root file', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block license.txt', 'wp-hide-security-enhancer'), 'description' => __("This is a text file which contain the licensing terms for WordPress framework. Obviously you don't want that visible as every site containing such file must be a WordPress.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-root-files/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); $this->module_settings[] = array( 'id' => 'block_readme_html', 'label' => __('Block readme.html', 'wp-hide-security-enhancer'), 'description' => __('Block access to readme.html root file', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block readme.html', 'wp-hide-security-enhancer'), 'description' => __("A Hypertext Markup Language file with general information about installed WordPress, version, instalation steps, updating, requirements, resources etc.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-root-files/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); $this->module_settings[] = array( 'id' => 'block_wp_activate_php', 'label' => __('Block wp-activate.php', 'wp-hide-security-enhancer'), 'description' => __('Block access to wp-activate.php file.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block wp-activate.php', 'wp-hide-security-enhancer'), 'description' => __("Block access to wp-activate.php file. Through this file new users confirms that the activation key that is received in the email after signs up for a new blog, matches the key for that user.", 'wp-hide-security-enhancer') . "
" . __("If anyone can register on your site, you should keep this no NO.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-root-files/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); $local_ip = $this->domain_get_ip(); $option_description = ''; if ( $local_ip === FALSE ) { $option_description .= '
' . __('Unable to identify site domain IP, blocking wp-cron.php will stop the site internal WordPress cron functionality.', 'wp-hide-security-enhancer') . ''; } else { $option_description .= '
' . __('Site domain rezolved to IP', 'wp-hide-security-enhancer') . ' ' . $local_ip . ' ' . __('If blocked, all internal calls to cron will continue to run fine. All calls from a different IP are blocked, including direct calls.', 'wp-hide-security-enhancer') . ''; $option_description .= '
' . __('On certain servers, different ip\'s can be used to call the cron internally. If the Cron service apepars to not trigger anymore, this option should be disabled.', 'wp-hide-security-enhancer') . ''; } $this->module_settings[] = array( 'id' => 'block_wp_cron_php', 'label' => __('Block wp-cron.php', 'wp-hide-security-enhancer'), 'description' => "Block access to wp-cron.php file", 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block wp-cron.php', 'wp-hide-security-enhancer'), 'description' => __("The file wp-cron.php is the portion of WordPress that handles scheduled events within a WordPress site. If remote cron calls not being used this can be set to Yes..", 'wp-hide-security-enhancer') . "
" . $option_description, 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-root-files/' ), 'advanced_option' => array( 'description' => '' . __('This is an advanced option !', 'wp-hide-security-enhancer') . '
' . __('The Cron service is how WordPress handles scheduling time-based tasks in WordPress. If not working correctly, some core features such as checking for updates and publishing scheduled will fail.', 'wp-hide-security-enhancer') ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); $this->module_settings[] = array( 'id' => 'block_default_wp_signup_php', 'label' => __('Block wp-signup.php', 'wp-hide-security-enhancer'), 'description' => __('Block default wp-signup.php file.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block wp-signup.php', 'wp-hide-security-enhancer'), 'description' => __("The wp-signup.php allow for anyone to register to your site. If the registration functionality is turned off, is safe to block the wp-signup.php.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-root-files/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); $this->module_settings[] = array( 'id' => 'block_default_wp_register_php', 'label' => __('Block wp-register.php', 'wp-hide-security-enhancer'), 'description' => __('Block default wp-register.php file.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block wp-register.php', 'wp-hide-security-enhancer'), 'description' => __("This is a deprecated file but still present in many WordPress installs. When called the user is redirected to /register page. Is safe to block the wp-register.php.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-root-files/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); $this->module_settings[] = array( 'id' => 'block_other_wp_files', 'label' => __('Block other wp-*.php files', 'wp-hide-security-enhancer'), 'description' => __('Block other wp-*.php files in the root.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Block other wp-*.php files', 'wp-hide-security-enhancer'), 'description' => __("Block other wp-*.php files. E.g. wp-blog-header.php, wp-config.php, wp-cron.php. Those files are used internally, blocking those will not affect any functionality. Other root files (wp-activate.php, wp-login.php, wp-signup.php) are ignored, they can be controlled through own setting.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/rewrite-root-files/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower'), 'processing_order' => 55 ); return $this->module_settings; } function _callback_saved_block_license_txt($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $rewrite_base = $this->wph->functions->get_rewrite_base( 'license.txt', FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^" . $rewrite_base ." ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } function _callback_saved_block_readme_html($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $rewrite_base = $this->wph->functions->get_rewrite_base( 'readme.html', FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^" . $rewrite_base ." ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } function _callback_saved_block_wp_activate_php($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $rewrite_base = $this->wph->functions->get_rewrite_base( 'wp-activate.php', FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^" . $rewrite_base ." ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } function _callback_saved_block_wp_cron_php($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; $rewrite_base = $this->wph->functions->get_rewrite_base( 'wp-cron.php', FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; $local_ip = $this->domain_get_ip(); if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; if ( $local_ip !== FALSE ) { $text .= "RewriteCond %{REMOTE_ADDR} !^". str_replace(".",'\.', $local_ip ) ."$\n"; } $text .= "RewriteRule ^" . $rewrite_base ." ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) { $text = ' '; if ( $local_ip !== FALSE ) { $text .= ' '; } $text .= ' '; } $processing_response['rewrite'] = $text; return $processing_response; } function _callback_saved_block_default_wp_signup_php($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return $processing_response; $rewrite_base = $this->wph->functions->get_rewrite_base( 'wp-signup.php', FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^" . $rewrite_base ." ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } function _callback_saved_block_default_wp_register_php( $saved_field_data ) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return $processing_response; $rewrite_base = $this->wph->functions->get_rewrite_base( 'wp-register.php', FALSE, FALSE ); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteRule ^" . $rewrite_base ." ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } function _callback_saved_block_other_wp_files($saved_field_data) { $processing_response = array(); if(empty($saved_field_data) || $saved_field_data == 'no') return $processing_response; $rewrite_conditional = $this->wph->functions->get_rewrite_base( '', FALSE ); $rewrite_base = $this->wph->functions->get_rewrite_base( '', FALSE); $rewrite_to = $this->wph->functions->get_rewrite_to_base( 'index.php', TRUE, FALSE, 'site_path' ); $text = ''; if($this->wph->server_htaccess_config === TRUE) { $text = "RewriteCond %{ENV:REDIRECT_STATUS} ^$\n"; $text .= "RewriteCond %{REQUEST_FILENAME} -f\n"; $text .= "RewriteCond %{REQUEST_FILENAME} !".$rewrite_conditional."wp-activate.php [NC]\n"; $text .= "RewriteCond %{REQUEST_FILENAME} !".$rewrite_conditional."wp-cron.php [NC]\n"; $text .= "RewriteCond %{REQUEST_FILENAME} !".$rewrite_conditional."wp-signup.php [NC]\n"; $text .= "RewriteCond %{REQUEST_FILENAME} !".$rewrite_conditional."wp-register.php [NC]\n"; $text .= "RewriteCond %{REQUEST_FILENAME} !".$rewrite_conditional."wp-comments-post.php [NC]\n"; $text .= "RewriteCond %{REQUEST_FILENAME} !".$rewrite_conditional."wp-login.php [NC]\n"; $text .= "RewriteRule ^" . $rewrite_base . "wp-([a-z-])+.php ". $rewrite_to ."?wph-throw-404 [L]"; } if($this->wph->server_web_config === TRUE) $text = ' '; $processing_response['rewrite'] = $text; return $processing_response; } /** * Return curent domain reversed ip * */ function domain_get_ip() { $local_ip = FALSE; $site_domain_parsed = parse_url( home_url() ); if ( $site_domain_parsed !== FALSE && function_exists('gethostbyname') && function_exists('ip2long') ) { $site_domain_is_ip = ip2long( $site_domain_parsed['host'] ) === FALSE ? FALSE : TRUE; $local_ip = gethostbyname( $site_domain_parsed['host'] ); if ( $site_domain_is_ip === FALSE && $local_ip == $site_domain_parsed['host'] ) $local_ip = FALSE; } return $local_ip; } } ?>PK1\}.%.%%modules/components/general-styles.phpnuW+Amodule_settings[] = array( 'id' => 'styles_remove_version', 'label' => __('Remove Version', 'wp-hide-security-enhancer'), 'description' => __('Remove version number from enqueued style files.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove Version', 'wp-hide-security-enhancer'), 'description' => __("This provide a method to remove the Style file version number which is being append at the end of every style tag. Generally this is intended to be a plain information upon the style code version, however not being used within any functionality or code run.", 'wp-hide-security-enhancer') . "

" . __("Keeping version number for styles provide additional information to hackers which try to identify specific code and version which know as being vulnerable.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-styles/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); $this->module_settings[] = array( 'id' => 'styles_remove_id_attribute', 'label' => __('Remove ID from link tags', 'wp-hide-security-enhancer'), 'description' => __('Remove ID attribute from all link tags which include a stylesheet.', 'wp-hide-security-enhancer'), 'help' => array( 'title' => __('Help', 'wp-hide-security-enhancer') . ' - ' . __('Remove Version', 'wp-hide-security-enhancer'), 'description' => __("This provide a method to remove the Style file ID attribute which generally has no usage.", 'wp-hide-security-enhancer'), 'option_documentation_url' => 'https://www.wp-hide.com/documentation/general-html-styles/' ), 'input_type' => 'radio', 'options' => array( 'no' => __('No', 'wp-hide-security-enhancer'), 'yes' => __('Yes', 'wp-hide-security-enhancer'), ), 'default_value' => 'no', 'sanitize_type' => array('sanitize_title', 'strtolower') ); return $this->module_settings; } function _init_styles_remove_version($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; add_filter( 'style_loader_src', array(&$this, 'remove_file_version'), 999 ); } function remove_file_version($src) { if( empty($src) ) return $src; $parse_url = parse_url( $src ); if(empty($parse_url['query'])) return $src; parse_str( $parse_url['query'], $query ); if(!isset( $query['ver'] )) return $src; unset($query['ver']); $parse_url['query'] = http_build_query( $query ); if(empty($parse_url['query'])) unset( $parse_url['query'] ); $url = $this->wph->functions->build_parsed_url( $parse_url ); return $url; } function _init_styles_remove_id_attribute($saved_field_data) { if(empty($saved_field_data) || $saved_field_data == 'no') return FALSE; //run only on front syde if(is_admin()) return FALSE; add_filter( 'wp-hide/ob_start_callback', array(&$this, 'ob_start_callback_remove_id')); } /** * Replace all ID's attribute for link tags * * @param mixed $buffer */ function ob_start_callback_remove_id( $buffer ) { $result = preg_match_all('/(]+)rel=("|\')stylesheet("|\')([^>]+)?\/?>)/im', $buffer, $founds); if(!isset($founds[0]) || count($founds[0]) < 1) return $buffer; if(count($founds[0]) > 0) { foreach ($founds[0] as $found) { if(empty($found)) continue; $found_replacement = preg_replace( '/(id=("|\')(.*?)("|\') )/i', "", $found ); $buffer = str_replace($found, $found_replacement, $buffer); } } return $buffer; } } ?>PK1\6  modules/module-admin.phpnuW+Acomponents[] = new WPH_module_admin_new_wp_login_php(); include(WPH_PATH . "/modules/components/admin-admin_url.php"); $this->components[] = new WPH_module_admin_admin_url(); //action available for mu-plugins do_action('wp-hide/module_load_components', $this); } function use_tabs() { return TRUE; } function get_module_id() { return 'admin'; } function get_module_slug() { return 'wp-hide-admin'; } function get_interface_menu_data() { $interface_data = array(); $interface_data['menu_title'] = __('Admin', 'wp-hide-security-enhancer'); $interface_data['menu_slug'] = self::get_module_slug(); $interface_data['menu_position'] = 30; return $interface_data; } function get_interface_data() { $interface_data = array(); $interface_data['title'] = __('WP Hide & Security Enhancer - Admin', 'wp-hide-security-enhancer'); $interface_data['description'] = ''; $interface_data['handle_title'] = ''; return $interface_data; } } ?>PK1\RNN composer.jsonnuW+A{ "name" : "nsp-code/wp-hide", "description" : "Hide and increase Security for your WordPress website instance using smart techniques. No files are changed on your server.", "keywords" : ["wordpress hide", "hide", "security", "improve security", "hacking", "wp hide", "custom login", "wp-loging.php", "wp-admin", "admin hide"], "homepage" : "https://www.wp-hide.com/", "authors" : [ { "name": "Nsp Code", "email": "contact@nsp-code.com", "homepage": "http://www.nsp-code.com/" } ], "type" : "wordpress-plugin", "require" : { "composer/installers": "~1.0" } } PK1\A  wp-hide.phpnuW+Ainit(); ob_start(array($wph, 'ob_start_callback')); } //Avoid issues if the mu loader has not updated yet if(!defined('WPH_URL')) define('WPH_URL', plugins_url() . '/wp-hide-security-enhancer' ); //load language files add_action( 'plugins_loaded', 'WPH_load_textdomain'); function WPH_load_textdomain() { load_plugin_textdomain('wp-hide-security-enhancer', FALSE, dirname( plugin_basename( __FILE__ ) ) . '/languages'); } register_activation_hook( __FILE__, 'WPH_activated'); register_deactivation_hook( __FILE__, 'WPH_deactivated'); function WPH_activated($network_wide) { flush_rewrite_rules(); global $wph; //check if permalinks where saved $wph->custom_permalinks_applied = $wph->functions->rewrite_rules_applied(); //reprocess components if the permalinks where applied if($wph->custom_permalinks_applied === TRUE) { $wph->_modules_components_run(); } } function WPH_deactivated() { global $wph; $wph->uninstall = TRUE; flush_rewrite_rules(); //replace the mu-loader WPH_functions::unlink_mu_loader(); } ?>PK1\  ,compatibility/shortpixel-adaptive-images.phpnuW+Afunctions->get_replacement_list(); //replace the urls foreach ( $sources as $size => $data ) { $sources[$size]['url'] = $wph->functions->content_urls_replacement( $sources[$size]['url'], $replacement_list ); } return $sources; } static public function init_ob() { if (is_feed() || (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || (defined('DOING_CRON') && DOING_CRON) || (defined('WP_CLI') && WP_CLI) || (is_admin() && function_exists("is_user_logged_in") && is_user_logged_in() && !(function_exists("wp_doing_ajax") && wp_doing_ajax()) && !(defined( 'DOING_AJAX' ) && DOING_AJAX)) ) { return; } ob_start( array ( 'WPH_conflict_shortpixel_ai', 'maybe_replace_images_src' ) ); } static function maybe_replace_images_src( $content ) { global $wph; //retrieve the replacements list $replacement_list = $wph->functions->get_replacement_list(); $content = $wph->functions->content_urls_replacement($content, $replacement_list ); return $content; } } ?>PK1\Hzcompatibility/webarx.phpnuW+Afunctions->get_module_item_setting('new_wp_login_php'); if ( empty ( $new_login ) ) return; //check if the other plugin also use similar feature $webarx_mv_wp_login = get_option( 'webarx_mv_wp_login' ); $webarx_rename_wp_login = get_option( 'webarx_rename_wp_login' ); if ( ! empty ( $webarx_mv_wp_login ) && ! empty ( $webarx_rename_wp_login ) ) echo "

". __("WP Hide Conflict Notice.", 'wp-hide-security-enhancer') . " ". __("You use another plugin (WebARX) to change the default wp-login.php. To avoid conflicts, activate the option within a single code.", 'wp-hide-security-enhancer') .'

'; } } ?>PK1\į^^compatibility/elementor.phpnuW+Aclear_cache(); } } ?>PK1\mylּcompatibility/autoptimize.phpnuW+Aob_start_callback( $code ); return $code; } static public function autoptimize_js_after_minify( $code ) { global $wph; //applay the replacements $code = $wph->ob_start_callback( $code ); return $code; } } WPH_conflict_handle_autoptimize::init(); ?>PK1\Yl l compatibility/w3-cache.phpnuW+Aob_start_callback($value); //allow the W3-Cache to continur the initial callback $callback = $GLOBALS['WPH_w3tc_ob_callbacks']['pagecache']; if (is_callable($callback)) { $value = call_user_func($callback, $value); } return $value; } static public function w3tc_filename_to_url( $url ) { global $wph; //do replacements for this url $url = $wph->functions->content_urls_replacement($url, $wph->functions->get_replacement_list() ); return $url; } static public function on_init() { if ( preg_match( '/\/cache\/minify\/\w+\.(?:css|js)/i', $_SERVER['REQUEST_URI'] ) ) { add_filter( 'wp-hide/ignore_ob_start_callback', '__return_true' ); } } } ?>PK1\ compatibility/wps-hide-login.phpnuW+Afunctions->get_module_item_setting('new_wp_login_php'); if ( empty ( $new_login ) ) return; if ( get_option( 'webarx_mv_wp_login' ) && get_option( 'webarx_rename_wp_login' ) ) { echo "

". __("WP Hide Conflict Notice.", 'wp-hide-security-enhancer') . " ". __("You use another plugin (WebARX) to change the default wp-login.php. To avoid conflicts, activate the option within a single code.", 'wp-hide-security-enhancer') .'

'; } } } ?>PK1\j compatibility/woocommerce.phpnuW+Afunctions->get_module_item_setting('new_upload_path'); if( empty ( $new_upload_path ) ) return $data; foreach ( $data as $key => $product_download ) { $file = $product_download->get_file(); $replace = trailingslashit ( site_url() ) . $new_upload_path; $replace = str_replace(array("http:", "https:") , "", $replace ); $replace_with = $wph->default_variables['url'] . $wph->default_variables['uploads_directory']; $replace_with = str_replace(array("http:", "https:") , "", $replace_with ); $file = str_replace($replace, $replace_with , $file); //attempt to change back the url $product_download->set_file( $file ); $data[$key] = $product_download; } return $data; } } ?>PK1\~)3!compatibility/woo-global-cart.phpnuW+APK1\<`/ / compatibility/wpml.phpnuW+Aget_setting( 'language_negotiation_type' ) == WPML_LANGUAGE_NEGOTIATION_TYPE_DOMAIN ? true : false; if ($current_lang == $default_lang || !$domain_per_lang) { return $buffer; } $replacement_list = $wph->functions->get_replacement_list(); $home_url = home_url(); $default_home_url = $sitepress->convert_url( $sitepress->get_wp_api()->get_home_url(), $default_lang ); $new_replacement_list = array(); if (!empty($replacement_list) && is_array($replacement_list)) { foreach ($replacement_list as $old_url => $new_url) { $old_url = str_ireplace($default_home_url, $home_url, $old_url); $new_url = str_ireplace($default_home_url, $home_url, $new_url); $new_replacement_list[$old_url] = $new_url; } return $wph->functions->content_urls_replacement($buffer, $new_replacement_list ); } return $buffer; } } ?>PK1\ 1Mcompatibility/cache-enabler.phpnuW+Afunctions->content_urls_replacement( $buffer, $wph->functions->get_replacement_list() ); return $buffer; } } WPH_conflict_handle_cache_enabler::init(); ?>PK1\k"compatibility/wp-fastest-cache.phpnuW+Aob_start_callback( $buffer ); return $buffer; } } ?>PK1\o$  compatibility/wp-smush.phpnuW+Afunctions->content_urls_replacement( $src, $wph->functions->get_replacement_list() ); return $src; } } WPH_conflict_handle_wp_smush::init(); ?>PK1\lD7D7compatibility/wp-rocket.phpnuW+A= 3.4 ).. */ add_filter( 'rocket_css_content', array( 'WPH_conflict_handle_wp_rocket', 'rocket_css_content'), 999 ); } static function is_plugin_active() { include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); if(is_plugin_active( 'wp-rocket/wp-rocket.php' )) return TRUE; else return FALSE; } static function is_cache_processing() { // Don't cache robots.txt && .htaccess directory (it's happened sometimes with weird server configuration) if ( strstr( $_SERVER['REQUEST_URI'], 'robots.txt' ) || strstr( $_SERVER['REQUEST_URI'], '.htaccess' ) ) { return FALSE; } $request_uri = explode( '?', $_SERVER['REQUEST_URI'] ); $request_uri = reset(( $request_uri )); // Don't cache disallowed extensions if ( strtolower( $_SERVER['REQUEST_URI'] ) != '/index.php' && in_array( pathinfo( $request_uri, PATHINFO_EXTENSION ), array( 'php', 'xml', 'xsl' ) ) ) { return FALSE; } // Don't cache if user is in admin if ( is_admin() ) { return FALSE; } if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { return FALSE; } // Don't cache the customizer preview if ( isset( $_POST['wp_customize'] ) ) { return FALSE; } // Don't cache without GET method if ( ! isset( $_SERVER['REQUEST_METHOD'] ) || $_SERVER['REQUEST_METHOD'] != 'GET' ) { return FALSE; } // Get the correct config file $rocket_config_path = WP_CONTENT_DIR . '/wp-rocket-config/'; $host = ( isset( $_SERVER['HTTP_HOST'] ) ) ? $_SERVER['HTTP_HOST'] : time(); $host = trim( strtolower( $host ), '.' ); $host = str_replace( array( '..', chr(0) ), '', $host ); $continue = false; if ( file_exists( $rocket_config_path . $host . '.php' ) ) { include( $rocket_config_path . $host . '.php' ); $continue = true; } else { $path = explode( '/' , trim( $_SERVER['REQUEST_URI'], '/' ) ); foreach ( $path as $p ) { static $dir; if ( file_exists( $rocket_config_path . $host . '.' . $p . '.php' ) ) { include( $rocket_config_path . $host . '.' . $p .'.php' ); $continue = true; break; } if( file_exists( $rocket_config_path . $host . '.' . $dir . $p . '.php' ) ) { include( $rocket_config_path . $host . '.' . $dir. $p . '.php' ); $continue = true; break; } $dir .= $p . '.'; } } // Exit if no config file is exist if ( ! $continue ) { return FALSE; } $request_uri = ( isset( $rocket_cache_query_strings ) && array_intersect( array_keys( $_GET ), $rocket_cache_query_strings ) ) || isset( $_GET['lp-variation-id'] ) || isset( $_GET['lang'] ) || isset( $_GET['s'] ) ? $_SERVER['REQUEST_URI'] : $request_uri; // Don't cache with variables // but the cache is enabled if the visitor comes from an RSS feed, an Facebook action or Google Adsence tracking // @since 2.3 Add query strings which can be cached via the options page. // @since 2.1 Add compatibilty with WordPress Landing Pages (permalink_name and lp-variation-id) // @since 2.1 Add compabitiliy with qTranslate and translation plugin with query string "lang" if ( ! empty( $_GET ) && ( ! isset( $_GET['utm_source'], $_GET['utm_medium'], $_GET['utm_campaign'] ) ) && ( ! isset( $_GET['utm_expid'] ) ) && ( ! isset( $_GET['fb_action_ids'], $_GET['fb_action_types'], $_GET['fb_source'] ) ) && ( ! isset( $_GET['gclid'] ) ) && ( ! isset( $_GET['permalink_name'] ) ) && ( ! isset( $_GET['lp-variation-id'] ) ) && ( ! isset( $_GET['lang'] ) ) && ( ! isset( $_GET['s'] ) ) && ( ! isset( $_GET['age-verified'] ) ) && ( ! isset( $rocket_cache_query_strings ) || ! array_intersect( array_keys( $_GET ), $rocket_cache_query_strings ) ) ) { return FALSE; } // Don't cache SSL if ( ! isset( $rocket_cache_ssl ) && rocket_is_ssl() ) { return FALSE; } // Don't cache these pages if ( isset( $rocket_cache_reject_uri ) && preg_match( '#^(' . $rocket_cache_reject_uri . ')$#', $request_uri ) ) { return FALSE; } // Don't cache page with these cookies if ( isset( $rocket_cache_reject_cookies ) && preg_match( '#(' . $rocket_cache_reject_cookies . ')#', var_export( $_COOKIE, true ) ) ) { return FALSE; } $ip = self::get_ip(); $allowed_ips = array( '85.17.131.209' => 0, // Pingdom Tools - Amsterdam '173.208.58.138' => 1, // Pingdom Tools - New-York '50.22.90.226' => 2, // Pingdom Tools - Dallas '209.58.131.213' => 3, // Pingdom Tools - San Jose '168.1.92.52' => 4, // Pingdom Tools - Melbourne '5.178.78.78' => 5 // Pingdom Tools - Stockholm ); // Don't cache page when these cookies don't exist if ( ! isset( $allowed_ips[ $ip ] ) && isset( $rocket_cache_mandatory_cookies ) && ! preg_match( '#(' . $rocket_cache_mandatory_cookies . ')#', var_export( $_COOKIE, true ) ) ) { return FALSE; } // Don't cache page with these user agents if ( isset( $rocket_cache_reject_ua, $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '#(' . $rocket_cache_reject_ua . ')#', $_SERVER['HTTP_USER_AGENT'] ) ) { return FALSE; } // Don't cache if mobile detection is activated if ( ! isset( $rocket_cache_mobile ) && isset( $_SERVER['HTTP_USER_AGENT'] ) && (preg_match('#^.*(2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800).*#i', $_SERVER['HTTP_USER_AGENT']) || preg_match('#^(w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-).*#i', substr($_SERVER['HTTP_USER_AGENT'], 0, 4))) ) { return FALSE; } return TRUE; } static function ignore_ob_start_callback( $do_ignore, $buffer ) { /** * Allow to cache search results * * @since 2.3.8 * * @param bool true will force caching search results */ $rocket_cache_search = apply_filters( 'rocket_cache_search', false ); /** * Allow to override the DONOTCACHEPAGE behavior. * To warn conflict with some plugins like Thrive Leads. * * @since 2.5 * * @param bool true will force the override */ $rocket_override_donotcachepage = apply_filters( 'rocket_override_donotcachepage', false ); if ( strlen( $buffer ) > 255 && ( function_exists( 'is_404' ) && ! is_404() ) // Don't cache 404 && ( function_exists( 'is_search' ) && ! is_search() || $rocket_cache_search ) // Don't cache search results && ( ! defined( 'DONOTCACHEPAGE' ) || ! DONOTCACHEPAGE || $rocket_override_donotcachepage ) // Don't cache template that use this constant && function_exists( 'rocket_mkdir_p' ) ) return TRUE; return FALSE; } static function rocket_buffer( $buffer ) { //remove the filter to allow the buffer processing remove_filter( 'wp-hide/ignore_ob_start_callback', array( 'WPH_conflict_handle_wp_rocket', 'ignore_ob_start_callback'), 999); global $wph; $buffer = $wph->ob_start_callback( $buffer ); return $buffer; } static function get_ip() { $keys = array( 'HTTP_CF_CONNECTING_IP', // CF = CloudFlare. 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_X_REAL_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR', ); foreach ( $keys as $key ) { if ( array_key_exists( $key, $_SERVER ) ) { $ip = explode( ',', $_SERVER[ $key ] ); $ip = end( $ip ); if ( false !== filter_var( $ip, FILTER_VALIDATE_IP ) ) { return $ip; } } } return '0.0.0.0'; } /** * Replace static inline cached file urls * * @param mixed $url */ static function rocket_js_url( $url ) { global $wph; //retrieve the replacements list $replacement_list = $wph->functions->get_replacement_list(); //replace the urls $url = $wph->functions->content_urls_replacement($url, $replacement_list ); return $url ; } static public function rocket_css_content( $content ) { global $wph; //retrieve the replacements list $replacement_list = $wph->functions->get_replacement_list(); //replace the urls $content = $wph->functions->content_urls_replacement( $content, $replacement_list ); return $content; } } ?>PK1\h5%%compatibility/general.phpnuW+Afunctions->untrailingslashit_all( $wph->functions->get_module_item_setting('new_upload_path') ); $new_content_path = $wph->functions->untrailingslashit_all( $wph->functions->get_module_item_setting('new_content_path') ); if ( empty ( $new_upload_path ) && empty ( $new_content_path ) ) return $data; if ( ! empty ( $new_upload_path ) ) { $new_url = trailingslashit( home_url() ) . $new_upload_path; if ( is_multisite() && ! ( is_main_network() && is_main_site() && defined( 'MULTISITE' ) ) ) { $ms_dir = '/sites/' . get_current_blog_id(); $new_url .= $ms_dir; } } else { $new_url = trailingslashit( home_url() ) . str_replace( '/wp-content' , $new_content_path, $wph->default_variables['uploads_directory'] ); } $data['url'] = str_replace($data['baseurl'], $new_url, $data['url']); $data['baseurl'] = $new_url; return $data; } static function check_backtrace_for_caller( $function_name, $class_name = FALSE ) { $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); foreach ( $backtrace as $block ) { if ( $block['function'] == $function_name ) { if ( $class_name === FALSE ) return TRUE; if ( $class_name != FALSE && !isset( $block['class'] ) ) return FALSE; if ( $block['class'] == $class_name ) return TRUE; return FALSE; } } return FALSE; } } WPH_conflict_handle_General::init(); ?>PK1\v*TT,compatibility/shortpixel-image-optimiser.phpnuW+Afunctions->get_replacement_list(); foreach ( $urls as $key => $url ) { $urls[ $key ] = $wph->functions->content_urls_replacement( $urls[ $key ], $replacement_list ); } return $urls; } } WPH_conflict_shortpixel_image_optimizer::init(); ?>PK1\0;$compatibility/wp-simple-firewall.phpnuW+AoFeatureHandlerLoginProtect->isCustomLoginPathEnabled()) return FALSE; global $wph; //attempt to disable other plugin code add_action( 'init', array( 'WPH_conflict_handle_wp_simple_firewall', '_on_filter_init' ), -1 ); } static function _on_filter_init() { global $wph; if($wph->functions->anonymous_object_filter_exists('init', 'ICWP_WPSF_Processor_LoginProtect_WpLogin', 'doBlockPossibleWpLoginLoad')) { //ready to process $wph->functions->remove_anonymous_object_filter('init', 'ICWP_WPSF_Processor_LoginProtect_WpLogin', 'doBlockPossibleWpLoginLoad'); $wph->functions->remove_anonymous_object_filter('wp_loaded', 'ICWP_WPSF_Processor_LoginProtect_WpLogin', 'aLoadWpLogin'); $wph->functions->remove_anonymous_object_filter('login_init', 'ICWP_WPSF_Processor_LoginProtect_WpLogin', 'aLoginFormAction'); $wph->functions->remove_anonymous_object_filter('site_url', 'ICWP_WPSF_Processor_LoginProtect_WpLogin', 'fCheckForLoginPhp'); $wph->functions->remove_anonymous_object_filter('network_site_url', 'ICWP_WPSF_Processor_LoginProtect_WpLogin', 'fCheckForLoginPhp'); $wph->functions->remove_anonymous_object_filter('wp_redirect', 'ICWP_WPSF_Processor_LoginProtect_WpLogin', 'fCheckForLoginPhp'); $wph->functions->remove_anonymous_object_filter('wp_redirect', 'ICWP_WPSF_Processor_LoginProtect_WpLogin', 'fProtectUnauthorizedLoginRedirect'); $wph->functions->remove_anonymous_object_filter('et_anticipate_exceptions', 'ICWP_WPSF_Processor_LoginProtect_WpLogin', 'fAddToEtMaintenanceExceptions'); //add an admin notice to inform about the conflict add_action('admin_notices', array( 'WPH_conflict_handle_wp_simple_firewall', 'admin_notice' )); add_action( 'wp_ajax_wph_notice_ignore_wp_simple_firewall', array( 'WPH_conflict_handle_wp_simple_firewall','ajax_calls' )); add_action( 'admin_print_scripts', array( 'WPH_conflict_handle_wp_simple_firewall', 'admin_print_scripts' ) ); } } static function admin_notice() { global $current_user ; $user_id = $current_user->ID; //only for admins if ( ! current_user_can( 'install_plugins' ) ) return; $WPH_notice_wp_simple_firewall__login = get_user_meta($user_id, 'wph_hide_notice_wp_simple_firewall__login'); if ( empty($WPH_notice_wp_simple_firewall__login )) { echo '

'; wp_nonce_field( 'WPH_conflict_handle_wp_simple_firewall_login-error-nottice-disable', 'WPH_conflict_handle_wp_simple_firewall_login_nonce' ); printf('', '?wph_conflicts_report_wp_simple_firewall=0'); _e('Conflict notice: The Security Firewall - Login Protection use the Rename WP Login Page functionality which is the same as WP Hide - Admin Login Url change. ', 'wp-hide-security-enhancer'); echo "

"; } } static function ajax_calls() { global $current_user; $user_id = $current_user->ID; $nonce = isset($_POST['_wpnonce']) ? $_POST['_wpnonce'] : ''; $type = isset($_POST['type']) ? sanitize_text_field($_POST['type']) : ''; if ( ! wp_verify_nonce( $nonce, 'WPH_conflict_handle_wp_simple_firewall_login-error-nottice-disable' ) ) die(); //only for admins If ( ! current_user_can ( 'manage_options' ) ) return FALSE; switch($type) { case 'login': update_user_meta($user_id, 'wph_hide_notice_wp_simple_firewall__login', 'true'); break; } } static function admin_print_scripts() { wp_enqueue_script( 'WPH_conflict_handle_wp_simple_firewall', WPH_URL . '/compatibility/js/wp_simple_firewall.js', array( 'jquery' ), '1.0', true ); } } ?>PK1\ys compatibility/themes/divi.phpnuW+Afunctions->get_replacement_list(); foreach ( $resource_data as $priority => $data_part ) { foreach ( $data_part as $key => $data ) { $resource_data[ $priority ][ $key ] = $wph->functions->content_urls_replacement( $data, $replacement_list ); } } return $resource_data; } /** * Process the cutom fonts * * @param mixed $all_custom_fonts */ static public function process_et_builder_custom_fonts( $all_custom_fonts ) { if ( ! is_array($all_custom_fonts) || count ( $all_custom_fonts ) < 1 ) return $all_custom_fonts; global $wph; $replacement_list = $wph->functions->get_replacement_list(); foreach ( $all_custom_fonts as $font => $font_data ) { $font_urls = $font_data['font_url']; if ( !is_array( $font_urls ) || count ( $font_urls ) < 1 ) continue; foreach ( $font_urls as $type => $url ) { $font_urls[$type] = $wph->functions->content_urls_replacement( $url, $replacement_list ); } $all_custom_fonts[$font]['font_url'] = $font_urls; } return $all_custom_fonts; } static function settings_changed() { ET_Core_PageResource::remove_static_resources( 'all', 'all' ); } } WPH_conflict_theme_divi::init(); ?>PK1\}compatibility/themes/avada.phpnuW+Afunctions->get_replacement_list(); //replace the urls $css = $wph->functions->content_urls_replacement( $css, $replacement_list ); return $css; } } WPH_conflict_theme_avada::init(); ?>PK1\)i))!compatibility/themes/woodmart.phpnuW+Afunctions->content_urls_replacement( $css, $wph->functions->get_replacement_list() ); return $css; } } WPH_conflict_theme_woodmart::init(); ?>PK1\Y܊  (compatibility/easy-digital-downloads.phpnuW+Afunctions->get_module_item_setting('admin_url'); if (empty( $admin_url )) return $start_session; $start_session = true; if( ! empty( $_SERVER[ 'REQUEST_URI' ] ) ) { $blacklist = EDD()->session->get_blacklist(); $uri = ltrim( $_SERVER[ 'REQUEST_URI' ], '/' ); $uri = untrailingslashit( $uri ); if( in_array( $uri, $blacklist ) ) { $start_session = false; } if( false !== strpos( $uri, 'feed=' ) ) { $start_session = false; } if( is_admin() && false === strpos( $uri, $admin_url . '/admin-ajax.php' ) ) { // We do not want to start sessions in the admin unless we're processing an ajax request $start_session = false; } if( false !== strpos( $uri, 'wp_scrape_key' ) ) { // Starting sessions while saving the file editor can break the save process, so don't start $start_session = false; } } return $start_session; } } WPH_conflict_handle_edd::init(); ?>PK1\Ժmuu&compatibility/js/wp_simple_firewall.jsnuW+A jQuery(document).on( 'click', '#WPH_conflict_handle_wp_simple_firewall_login .notice-dismiss', function() { var nonce = jQuery('#WPH_conflict_handle_wp_simple_firewall_login_nonce').val(); var queryString = { "action": "wph_notice_ignore_wp_simple_firewall", "type" : 'login', '_wpnonce' : nonce}; //send the data through ajax jQuery.ajax({ type: 'POST', url: ajaxurl, data: queryString, cache: false, success: function(data){ }, error: function(html){ } }); })PK1\ۤrcompatibility/buddypress.phpnuW+A $block) { foreach($block->components as $module_key => $module) { foreach($module->module_settings as $component_key => $component) { if(!isset($component['id'])) continue; /** if($component['id'] == 'styles_remove_id_attribute') { $modules[$block_key]->components[$module_key]->module_settings[$component_key]['description'] .= '
warning
' . __('This setting produce a conflict with BuddyPress and should be kept disabled.', 'wp-hide-security-enhancer') . '
'; } */ } } } return $modules; } static function bp_core_avatar_url( $url ) { global $wph; //retrieve the replacements list $replacement_list = $wph->functions->get_replacement_list(); //do replacements for this url $url = $wph->functions->content_urls_replacement($url, $wph->functions->get_replacement_list() ); return $url; } } ?>PK1\> compatibility/fusion-builder.phpnuW+Areset_all_caches(); } } WPH_conflict_fusion_builder::init(); ?>PK1\ 3>> compatibility/wp-hummingbird.phpnuW+Afunctions->content_urls_replacement( $content, $wph->functions->get_replacement_list() ); return $content; } } ?>PK1\Ůcompatibility/super-cache.phpnuW+APK1\sWWscreenshot-1.pngnuW+APNG  IHDR [ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FMIDATxw|VEǿsSHBAH^7 (UQEDz^I"J~{̙ߜsFY6iIA:7m%.бUETJy8)aOO!$_qQy~2LX `cH+ťWŗ/iڢA]Kp Pm݆W'~5+#}l2.5|樔id ѹ| 7?b` ?RHI*m 7?tPpDqXR4l$K?=KUdGX J|L%HXҌt L4\4TiwsA.d!JUoFdb䒓3JJA @|<{_ } y5܏hEQ)͵;w/=oLcْ9w`Qm,2wzGL}?_ɌCHCvBSU|?u>?ဟ~w$>֗=|=^}MxIK;u܆ D { ^x=rb:Ϩ? /DzZNN-꡺~͢qn^T^xj]T};F G+RFZnCJZ<eyWP A(ǥrwk/p~t B]tx 5is Wދ'o.yݻ;BN] f6>d4׋2~r>?^ >Or E/g4J{.3~@̥;Ets?.=pR%+;Uq;u{RCp<0<1<ťK ۶Rz@z6e{O~R\PER"+_ط}ˍ~Iݤ2H) [m )br~JФE<_m^J}׃\ިҡNrIET<~`]\@2al)w}->NW;"̿ymAA7j(BCG k,]`Q @ŇzIev:o 嬽+\,Sg͗_]w"%E˘ی}a,a:4qMD2*gG9Gc%} 5!pITa!~KOϸgG vHA{^3?ٓ$O@")xEs~BHchn'`HVeP_>(Mg6JDs*\r1BH@"H*T(9] H MIax6(T{!=h p#Tӛu .`HU:@hb>Tb )ZmY#P+<$dvN_2v(.t&;;˲"tO۰JТvi8~O#t\=k.gLt F ˫aG!HU4 G`@[Qc]F-tl Hs tI8t0AaҤYdB -&OEfF:c_w{|؊W;3s29@/dqX~#*:+>]ŖMXz5+W$~R֮Yb)t!!.o>r2 e瑙FFF>G3ٷGfXto'Clj's&OJ&py $P\Y$ٍ4-OB>}նbZrVY|7WYc]4xh/*MXMB BgȠ^$IdpTujTIúhEZӳʕCФQ6jEMph׶5 7eViMi٪ ~:u;L]( ߏ{82,% I)')Uc}"3 Б UUt6 zuf%@NǑ{ Cϟ 㢢(?>9پc .fӗYh1_nCGٰsfqYY3mX4 yu[,[ }vL*m&%+˱,5-7y,fϘıRHrdۤg]_#䫭 ESٷb{̨y>yn^z NE89FϕTS~R\=*WvШ^"ݮ쎦(88~?kR15:SnCzLKѵKg.m܄h޼ 6IJlr mhIf- #oNحcЫ {b$ѨE ᢋR6!W a˨P"*UD~C)@H!WLŧhrʡR*(fPER-_*}1O>w?Ģ3Y0wk֮gh><dvúUih'qiyY(ݻ'uis0WNNN4A_'Bt1'x2сiNtw.ֵWK떭xGIK38?5?ڱ*e)A6gfxA~TN|sll,E SWa̝!sfk>ngMʻM燽2yuy@ p^\ qqq"7|_`\"$* ZgNR^=z[Ԭ\ƽL~5|λTz1_nv]4ep<-"v,zcxzBNj>x)=߲,,"77tIHn3̌Xa$jT\!d1kxfLz_g/Q6ZC݆?˙ԥ[PPD=n"bʕs/~K1pԆpY$eWI )NtRJ֯;ͷ9|.BXHŇ_sؾek?  M8~||GBבo 2s=M7a8S!G^r8h M.ߐ;P6%lrr}RchX6t؉4hАdSիנeI!Fu$%ҳwZhD|Rb3H /_ǜSw8g.@p'̙X~3lLh"&OTMdRfLiYl%ӽQW۾`/9C\OWʊ \6l@vN>/jf8kA߬g¯Mŵ[гjTIE**y造k7/PO޴j~B;_}C=r.2ESI$%%T $&&$&&' Rvv6yn($'_`Lp%J<"1`W|pT9#:%O 0:7V e5'# X"$81NLL ~(vr&xkDҋ[%Bٔ)PD!*]9!0OI3yY8Bcߡ= G:C>{5&ɼ…KYa399 >l=Ӧ|LnZ˖,F+6;ߋOٹ AY>u$dglsBl9vĪRUpe`t͛Fl\"61#ȼeEb=%R4߹CDqݐ G6UʧP5*C65TDSJ."TMǴl&W肩8tڑHLDJ2\~y DLR:!p1ŕ+v5jW)uB0&@ըX b4i@01pu2 K8BA}'>!@ǖ8s.K/cpiZ`Y,\TR1{n9/ڞẜ,*reYEI6Wqc ѡG_:tMJ%\">akٵ3,A/Xh1~7Y3fzJE\TV-_oFXӀM6pT磩3Dje|v 7o&/ \UJsA3G ifFOGpV'F{\P.l߾#}TRJVZKfv4 p#ywO)X&x%)[l;q>L+uhԠ!tqѼ8R\V.[Lva̚MYt']֭],̚1` +u\+ӦLjJu;w(>ٺ3e Й$2ӎvjK8+Muʎ-;غqɋ< *+'X4#o( T. rW?qRK @М|?ɐV ڑ:{/3gm{QYF4Q~ NJuß$Dhݖ͛][4@ x0G-I~3}vVIBesWc&-eG(A'mOwgInQBNqwW6[ɟ|%\ּ a[elt #@DH2 vQPNMegĐN!B,νȣ ɺEKyt*pW"D>( br`oAV :!NN E9/c}KLSf ^{%ߡNn~n /H8捛yJV|%kc2~\~7y -!PHT#E"oP!uzrC|^!,%S C,c-tX0g'q?b+F<[Nu~E/Y[N9oE5 Uԧ@ 6)>"D Lhb${Qu!mp" |W&+Kޔ6ST#qekHE/®`q|6ˍkх$7+CqgYXc# & Dswyͷ~QRey̘: Pa0qۼ\UU ^7 0k2^7+"kIr˲ɽn\<`o敧<5ǥ͚*>ER樆66M.m# .>*ӴY3\dѰ^-wBJ*c0mc2r5r q~ 7= b q Oac&W8#I0@&A׮ݫ#A6]?|4#G~4Ul[ 3o|s0p0TIS`*MĻ^ceXK ]7_g%:+4V,W~eiNlŽoch,sgΌi̞!w 2sL6Sg#Da[&59i9{oQboڲ A5#9 k?n i٢xB&/b:vjRP 9θqw.SN=6[xg"fr)p \iAJBS@jc3o/Rt, 0GJ׮ M#o[N/"mڶm7^G]h\6 6nhڴ96]l,_].<&g~8s̀Brkrto*'NE0qܱ+~#sUhքeW&W8T(̨QRzMqɞlU z7p M.mܼ,|2?C;wdE`漙,Gڛ;g.[^qYx!Og i1m|jyl\)?fb:N㸚Kfa&L;j~~O/ ;'gsǗ̜5C)t"n/9i=ݒ "c#"uQhۼ1aWжO\jmK˟ ӹ\='RV-F G` ҧGl*H/õFp7 A7mFr-7ҹsW׏*)eNeѬu;.kҌA`YOnukMO#Uܵ_%>Q$0x@*VèUROJ ؟PFUc%q .}Sȃpݰq% ɲ՟qm*7\i@bĴU")N{pBWJqvNRJͥm'#|BR%g$p.G&><'˪ pXf[lWDZpيRUi% ! DUTF֙ jqE!..ٙ0p ?Gߥ ̚>-t<ۍdn}']ֽؑDJ4 -tTicJ3Q`/>>iΖ A T|8n,";GѦqsVh"4}Mz#ʈpS2ㅎ6uWzzft۲L,4SSqu2%~IFUrc_MK94"/\;o+?]2w2$ ~ŋ99̜9ˢk(,[M8h8޴ֺuٺ+TL2!¸A@ٶu+ Ic7ٰsVX#G7Mz0[8z8ݞpa3O'' 593 ,t|Szz:={tMۖ\T9!pN [!pH:tzk(بҎ 4$-Z4A8Ejjy싔cr45hʔE1s]\Zu&drYuk H[Sl2 \ެ9-_F뒚Z`@';;73'dرM1p)L:xtZ$8a3k/ǑhNYr b+~ 2AM/֛DU|(KMu<#6:Du:z0ӲdggzVb<,lBg'pHE{_.W#O:Aj_\QPU]3 ymZy|xФqY`ሸ jժ \nAJjyxT;!eRjhl>;=z4= (ZtJJN)yrڮcɉIKI:m*qϐ+bMx\8eWĤbwl KTw} uI)Dp-FWxcˋ\ff&xOK\WF?$_Lax;oAZթW t;FG}TCx `ӽ3zԋC|MXW;ѩ`O]_s40Bٞ_R7>ֱm) 5=J!rtl3n"{ pοy7f/{[3^!ݧ ǵdzmoKo_4=oǔtCxi«̜)~N|bS*sIK|ɇ^c%,Y7t֗T1Mꕡrb/Z^5 )ϛ>Ζ1wu USSHے 3gq(ǻ16G> ˨ޠ%ww 4L(sDdd~@nEQ'WjWJ ]='$)wn_[ڥ ]!d(U ~2vPp{k3gcL>L:}X8g!y+$v0?ġ^0qoh/r .c>T~(M) w&8`0T7dF^] *&GbT]=Dؾ)w<ӷ8/2ᝌ˜!ݜZh;oVBeQ"3.*6ATPbUTp" H %E{"']b6nBEҦC7.o U8hjEz"8.ݺ #ǰZwPK+;ʞӐErB!pٙf#0d(W((8 3Ds(uضm;'yX9y}4BR )lzGRxL p!"h޴1Eg^ R / #;U,B8$ٹdp\ &2K REF:+;\,TiHWzdW9/ӆ`0eeѤ޴އS{t+fŶZH惏gͮ7o={L>ɂ Y|5&Xj-c):W-Fs4~ Vض ̚AFz;?% IÇv8K-`9HeۯYl̛SIOlٲC ؽ9YLh"ڄ*LUu4\tt46d O q0TKL1xHկ !|\;/kÔTuU7 荔~Rֵ ]۵ƴ%hiM+:aY&-/W4hp)zLb*y+s2N]ѩk/.eԮ]/C1p5\=FP: Ѓ 咐KjZd䡄_IE4TZ^4]9! O~[9LXߚc\g. Ⴅ()OɀTp-BӮ\*h|8 $2b0fţ>Tk GꕰAo@s-Rmy޴\jɷ/K=i\TX#g(YPR*xY~1ͷg]߱+ur:{Dv~z/F"Bs&O<Җ&4 U"$BȂ(PЌtcࠈHׂ9sys6@0Bz]@QHTouV&FϾd"n^,pA $\VXuMV f ׌kUNC% ! . JLT\^=x]'3\iP#pqp@M&#O|\LtϻW*J &HrtE)JI;^勳ˀtR)o[4p\WLuRLL qqqhVm*qf"N)PL]xZ$;y6H6Up>7˗eYX_ u3 Ia8ΏB*ӺTK[v@N(ܼ}-uK!//kҊj SO#sYh5W1j5v(`~F]5HGؽk?&H@^avlG: xk+[<'dԵlkT`sL˻DѳN!KQPXWYr;v!j])e9۔['tgKϿ/OBN=ԥZ_ +;ЩDA1@hԮ[`L*uW!R7e.`ޡAtRQSxwڧ5t7 £gkڒ!c^a/u!_|íO}ᢀg.IRs[FzN |r`u7#zIUZe'oBD3E~H9WcKcc䲦 a\uYMj+K唲-i 2B$iShKzA ym_{EFZ6E <1q?q`:ҦMPtj ГfѮ]g}8h۬/3 ӝs5+\ZM /AX|.][F0/I^ƞ~,esٰz+V.;SO7|vA#m'i%EmH)]psg㤨='vCP2"JHTPYEPWtŸ]ч( A䙞ꪺif`AA|>շnsE rWA[Px䑇w"$s|[:)a1Q4mWN+%*%WKLe`%F;db^~Ev-K%RE4Y6r"6o5[0ELt>gyבZfI{{kAXx  ;@~X:D~')zmacSA!-a#{/4!ڶi@s74 2X>Zl!: 9-Ҏ޺%tTK:yI2$z{2Zb"Tkb3J)ѡ1NaTl *! pBnt9|!(v kq5Wi< ,"1>aOMa)|z-KV|âkpqcGZ]\!A%˛k/˳QGQ@NwE*&/}O #ﻟzuGs iܰ>]5xwZ퐐XJ,O4'_y;nd&ASE\{H.IJjb&p~xb>!16)qs?1^?5EN|Z /?[/ĥOQB phӣ/M]xWARG@$ <,<}izeMy,+1oHLab|R}N7#^"XG |o\tISAIv%o\ ̓4Sɪ-h윆n0G8M#d)1QTJ#0R*11x7'.! s?7V~Ήm۶ i^8R[YrR_% i$%qS^=_^|n,k+seq Zjx O:/V%&GL08qWS虘z:Iu`Qnq%?mI5YkV@'&&~깘DxEy^z}jJ.?D6hRmKKViK~UaՉ`pqySP?U}H k^kT< ɓOh}H̝9|0'ض{֨x"=}4BB I q03GM&'sG$C4",@ [l]7 E?;0t ` oʍb !xo )zn,ޭ#(GIHxؽ?o[vFeƄx?<ȺX*F>x3gvIӾk~p9`16' J#"*|-PS (88R{$bRbJB0k8FJI ]h2RCa֔q" *m)$/mB)tU^],.tR0+Gp}/_AE,;Rb ?#$IbI -7*>m*լޜpŅUX.`0ܢBT=q*. %28LKB&]y KXBGH% :*&vƩمL8ޟ>n+'LpIsХ lڲ Cј=k!6 `߲nr/]Ųe˱Xr K-u_cà PE8"`apl ALUR1N?lfϞdX4w*dp׽f S5(XLE!f}+p -Aî_Oӛ  t1mݿ8TuxD99uLcuzu=h F 1n];:6U+"]Xӱޅ]E&ҡqоڵFŢUfkb{iѽ1$V<o\ m]0' GB8]zV ǛRK('Gp,LCOs88(XnQc+ (TZ)MiT0Ћ 3t;v,R cCL2~ڎ)cd-(bM!Xf,0 ºE6ɗ˿dӶ,b ?M61g,~ؾ9/)>#y]fϝNPđ_3sTpL38`Ƕ3E<w~VҵSGJK^=KkQN]EHBCWbT{ /JɱxlA&^x *w=p?:!מ|QʪP?N⠣`Q@e%ǏZıP8<zd;זpɱ?B_O=mx`YMbݏ';`IK #lS\w q.2>Yi=,x)];C&|4.⡇Gpǰ!ͦ˙9k;~#s8lZ:%G!O#c K(Pԫq-# !3N>]`Z/@1tҙgo5mMz< FmΫO+lYYY!++̬<2JgY{fج}:lr23u-[dMvv6@pp8Lvv9Yn{vvvt;+;h{i$++P(D8´%'H ?ロ wqd K/mHKҸww$c?XNIs- Np?l"6J -AA #LM6yV6oݎD׃Tj?5,ray.-!.SVʉpUZZii֠*lڴiEݺ "ӳ}VXutHT .I&XREFU8*UJEdͣU$$ӮsOj׬'ٟJU|mۚjGZ˨U||)~ Ѷr}I}rh_t;=}>ɾh[1[E,A<3<R ~v|? E_VHZThGUUEe(BtkG*E.KsuXO,'&j̔H^,KttE(pS)b\"=Y&~2Uk`!`ظ;Yb-B>d2[GWR 42gB֭ deEFN l3ȊYkV%+V3O@,[Gl۾5_A/y9ٷo/ DHC!7r`gOg֟Xp6{vnCveoX89X-N^C'p\0 jVN:\٪)zlKzcJS=ФQ3zviÕWtTR+a&e1jٜͯe\٪mҮ(¡^ I}W9fm4 &>1ob,)xh$y8u.+.M00^vq}l}9>v<#D+0wХUa0ro]F{1:#ۊǼC7;F,.p Zbǯ&-Y]#j܅_ہ6|˚2̦-;bjPl Mcvm}6K֮] @䇰8V:-@Aشg!qӧbἙdf!QH 5_-ữeŗ BJAFf hMCofChuť#6*7 M7*-.oJjTݺ!Cm7ӽs~? ŗ@~z˭ӓ?X^0MU? ܳF`*X$FS6d( zo?v*5XJTs>%)Ow2.sgBQ:R\*`*ຎ=5.y9#ێH<{҉p.VotQ/ۍBB]h<]VB$a~VB=ݭбglu=;x\ק^E$\?v /6#x^Y#L70p,&M`(8L>~̜&1z=YgSVhL2}b}w ~fs>| עA7>ۯޝO<+.iu74MztL 1owI& +QnCDM-7%!OWM↡øÑM3:W CoBq 7a`q0ӄCШ0r-[oBztt GMg'f! ccOnع/PN1@C&MYs!Ϭ Òًb1|l{g``2I,]YϿ`o݆y 6mDl++OAa7ߟSfXm dطw7BH9&S> Uh!0MA~ƍbТ>3s|Ƭ~ llfoұ}K2sy7ٲ{r/{?5˿0d3fx@av&`unxv7J5I9Z 1~TTVJRc0% ӂ=@zW64m G3PuNZRjeL ]3#߭]̙3Yh1~ŤO0c@x\-]FAwz?dI8h8E|%P@8 Z85MCoF!a^KǎcIII$.r0$iУWx.kْFM@+;1[ߧ7X!:wJqE qx5mt)-hBݪ:|l$؄.mڔ";ТI#nvFHuU }ֶtʥEhTyXJ B Z^v1>BNp*6| :H+ 33! }J[ȨHiƏ?R#|BRJ)#~%Dt_UD ;v~^PP@aaN!!Dng^#V" Qx{CIPՔ_'5I܊"+WBHRWBcq4J\\\yS?edCH@ 9( ,VI%h.Miղy `xq'UUV..D!5HPiӤ7ɇDD}EBy7PQ7aGJydUfaYX%ฎu(+33쬃dee5+;;+MvvV Ȯ rryoPb%#j*Bƹ2,f_O?!"xEv4f՘yl޺K xb[`u_B`AaaϚk@x"-P!`W~C8R`ú0V-Ab A{vywz${IE_p #tҖuGJ7_D!QTwIyqɤ5&$MHC\ڤI7۷mMP(4 jҬy3 A i1mHfmY. RMtcIhب ujg]_J" '&pa%vr\!?RNu>w8kQ؀.W/8.ؾe͉!%A% V*b/(((`xJfRwf"`+F>;nݺvB%BfBQ`ERPHS `S´* VXănXVRA RtJ@y@ƈ`5vT|)\Ѣ%EyGz;t;?mrtNF WrjeCr$RKmq^=Kq}}IG@a|ɑbN@x*oHy NO?tqVVO|"Ȧ-EHΧsYTNs~o5M5mM8+ Ow]RQbDHpS#H#FdIXi Uu?M&q-@7@aTL"%%'ZfXTw꺎[->VݤS*$L8H UJ¦ Xxܲ=b}gB-)5Iq!REa+'Sp""t"t;wIZoOzhѸ-^ fleˎ}7xb9#<2k\?&2񤷽5ܲ9m[uB` oِ֖`Xe|V<}. ]L=}Ant4 M(_?ɠ";fǮ {vmO$3qmw8ǝobYa+nk܀ /7})ɴmXF=§S>BJ/L>-_ǰACzl2-.͢rH4^јkVӨN^*6(`@ed Y^?-TՃ/c`2r|k:Ծ}I^jHeڂeT 4?H'Lli'&R1{\o؄ml\T]0k,l@W_61o\ s5+Wdb a1 89bX`.?؍`rs¼ظi sO ;3~a;o@Aw1wz ӧ#湹sݵxmGQj*kNTJPT|RiX|n`Z6^^zpI4TՠzLK0-w4kӦKBr{ .ɇ6iݲWv@NI^) R#.6B:wN jb* xWi{GԽ1)U#M~ɾXB|Bz|@0{\F5NyN %_1mbƎONv&fܸ,V`c):ƒʹY7c+6à˽12uBO(D9޽3e[Wz:#>MJ@+7Æ!ٗʐ!tIe˩WB4'#c}CV ʷF0rHw{nk,|I/ӵ'B !9fi1A?l? )5OGCiuŃ-IW"' r-P[)8 `gRt,[CQB̛;oεfVqU%*fPMlxlXׇ&ed'RZ$ gϢ@VQxʝq޷x>6i=N AqM:vYRY?!4'Z8N 2Aݸ&pIpPr3l tԙX7MP7LJKA /">^#1!D2ҫ"%1>Ą8t]?x2%szϥOzE*6}pH頨y|jhn8X, w \EO'=[ Q!S۶˴@x< ʣ XrłU}"\t&ǝͣ~Ba X.s1АN3-z~ʽwތ,Z0;ň"V\ƺoVpuطbWT۳MAnCzwu{XfD)X""6bdzo'}AQDn)f}E_;_C@Py*ʙf~x"􉐮 p lS[5^z} йk3ʱ4oَ&ཉPɓ6ʌ95B󦩑 t*b ӌצ # ;@Qyxb4! 19c9ggNCy1g֔*%@'VCH'R]"8g1/ F7o+ԓ/x1}qI_,y0GOzf]aavT0Ν:BݹmEÆ IR}eY䓱hӪU[7 d6u5 ÁF p ѶQ ֏M:<0 tIZH/=nKYY~ucc1NiӪ)VA nl#D0wփ=}'/9 Mdkڡ)͛4Sl 8GCLNI:Q˜|;aaL=^zן=zֳШ#Jp8苟/SSt}e4/*$Һ݃mwSV%2ϟ)E!S&)32~<HJn죗yla<όh+; J2jk;߳~LTg/<;D:\RFq|k6B;&vMvnGqgSF6oL`Yd+!͎m8m7c'Leҵlٲ/YC0ᵂ4þ-8$kW0}VfOZz l>5/ mk÷GSZCvlۊnhڍhފTNDt$媵fΝd\{_C]RZ|?of΀aw#OC)䒡[8Ry ՒTN:A6v%Y4>yYܶq0շQEARB.pyMvOFʢEظmM{{>~N!,VNf m@To@fSaYh5-!abN1Y5M>v)R^_e"!2oWl*G*% HAX8G1v"&H |gDZV'??DĻn`MU/ 1S=}DWrCžse n 'g1\pwm(x7)ѣGoxGEUߵmNKFFBB.\a瓑ᡠ]۫3pCQNSNi ٳ]O1-4́P5U @t?.k>tCu-g(],Zg}y9kGb6%4Ti?,D#2u>Y0dxJjKoT>mI7γD=,L<}yd6i./2Ͽ>Kgnea#$|yü<›߳q(00Ts#ݙ<:m~4#,wf yP{c<#w@拯̪B# |7_|'pC˩#Gw`'w VbEwJnf-XYtMkB*"@rP]zNs4æ]Os/&@ >nCUp| ??+y[2╏dj(7yD^^z]߃"XqheӶ-*Ĝ㰝L2bB tMC 0É|j܎p.Yyn~~87'Bc8 30'3'F?S$O`_jt"% =e씼+l[5GO9KVbծ3w͈!CD%~?&K|0S?]F!i~"ABY>s"_} <$="7f wIP/di|ɷJ.O=" |9~>q@fuzO\Wd<>̢qG@UUNT egt:B'Gҽg/{|(j]dZ >CpG\tTC2$P@*iŧ98q0*%"2+xS3mV6}?;ApO?<_~&7o[fN>c>!z=*)iH+ )m6y+cz޹)I;l~5ʗB/`;/᭿6za-(4pXO^f+SrSh&tnՔL`OhY¾j{G^{|+Q2q+8E7!9 ŝot)d_m.hd^R DaggJJJ /^ر^bB[gcApt1zvA]خ^{M~P]чSrmF<~Վ 5c*UO?;IY-ʕ.KVd;E6!XcO=GVy/oX_@ώmiӪVlr6|W2|y~JF%ɗ(xuJ*ʇ]zy->yE{qk c>BX1\Ju@?<%OoV@ sP\MnҀFӢEs4}<xO10}~>۵É{mKT|޻t१GJc?|F?J "d! w)R/|J[e`9CLבK.,MMꣷ/ vX>_;F1b]$ۯ?OKEd&oSli>]|IB ָTMuѕV,k/:2EɱƏ<rIدV0n 3Mtfdnj{/=𰰰[xXhJxTjz՗byyEdpE\[LIBS4M! GL%H%L1d ٍ>ko W_CAbl!5BCغ};g͒i>V eT$X|~?-9g>3g/gFJgG?6f0gxt=xs'Ѡ^=zoFˎyrXzto%ݜqr.G_1e_-kW˝}YGf7ZdNnV' `orp|)VX䉓xI$E[ժסuêԯ[{﹟}o'Owǡ+oҚ3Y\<#΅,'h'sϼfD|c_ƊUyw|>R.lLa׵``8J^KIsBd1t]3/ď/r)WsҦutUcOSq)-!9{>Ogf۽_{2\g>Ƥ_>-ۘx~-ڶmŠCx{x!H #@E߷ٶ ~1 ˏضq7ESQaA@*EWt\#(kj9W\uk3 7O "!i,\=wдLsyBBZyZ@{ڗPU4wg`XH39נI7D@&Mf=<8j,ltkŧc?d媅qlڍW~BH@"5l s|ѣqTnFgh̜c*ӿç~*aӖ$fduͫOEM8L'G䚦A2c>T %e^L%n3g߁_/ξ9rL)[xqc?c=zcGsQƏ#(ΑD՝̹s?y6ٲiW,$-)l %1I29m2;AFJ/1fL~T"4i1gd$nΜIϗ$Lӗ8x('~͢SY8;OEjV6++EU򛩬I@?tNdǮ8ٽk+g۞c,]1cbgpnaLV/+=yLB躂pY[4B$ָpG7?W/k59@s9xl_CKܯg׵jW)8( mqf FԨQMۂ aP-TRwC*PWDr~ǽTRM26 a EPIQhظ)t%,"r pTuD q BszH)R4 4*=oRxn*M9dH Qj I[g aB ¶l26=< 蕫T(֮-Q ZҦC7,O6M۩Q170vCNqtԖGBrQFC‹0l\2E zI%̎Y0oLGwh( Yx.'|#8o/b/׿V{}ɒ3ѯ}]}MnţB .G-QXB!_Or!=/o\7yܪ3f-n6oO#/Yϵ:5PVM7߻AZԫW 49\HмES Kݞ /byy VNX j9zV;߱kP4HOM#5-Tʲ sx@Uzβ]^D2ԋ,22HOM˳ǁXa~((BRJuFG`lAFiֺÆ~JԭW{Щg? mдq,m;`TT*ժӵ[/ ¶vo!ZucҢw؎ k')4$ÒBJܵatҞ*N OHpqЦ]B ӦM+4M.]Q:w1 9ؚFPLҤyS5kɈQ0 hѪ%ZcwPrj֬IթY7 ڷiMhܴ9 ɩtjۚ[ӲU[BhBDtakHMvg3_*={w^ -QАBÂ(Y%M o ;wO\P4:wBTj&M4FWTՉ"tv^}ЭYڷnDkiغotGfO+9i1mΞƭЄ -y|@BEF- 4UfEeuuc )syw}7r6g6_ZY}d  Cue-R<ΞⰤnf ۟j%fjd4u+nHm;13 3>EQ rX#~UpK,ǽ|#4f'PؕfC4mt4`ul\+wYv3>C x9Ϝa|1n,#Gfwojk$3ZJ))))߭^^7>5 d:5&Cu465z ɺ ]>1117/_d,]iy'`eg0adΜKsgzd~:3N&ll܂1pAܶ ر0|͙ʵk3n c_k*cEunBL&ϒek{`;TYj bszZ׳mjR BbرlٶkV3k֯] ?ZoLƳ{F %BWcra6_S3g8z4&,*? b߮=EG3{w\d2V,ϩS~BTa`bS3Y0wnMcɲ802k.EKjbP=o.Kf@jN'(7!M ;XbKAbׁC @JKc٪Ӿwbܺ?NsY ے;z4x Ű,d%H3y =Ef&$߰!̝5ԩ4=ڝ8 Mؠ83s09̛=ÔoBj!0ϝZضDPlX{5رs#-5[!ؼq׮adV-Ah̝]q 4kA;l3ۆ={"d,?۫@=Z+څN?&OKmZt4;Ӯ]3:vlI%U2BG` Ct֛JnoFTX- Rŋҳs{ [г[M[tčzvFht9TL>֥YT\G^HˠH"jnE>}1m}ѽWtM۰! t )uұSWLˤcۖTRHlMڻeʖPd$‰Kt՛bt;Ȱ  Q&66(E%>t0mwQ& 9B! 6Bhժ%1 mHt_g+CX)/efe5K? _r1%;b oB`za'~ȚY|C+-XɁ;=_M-+VodլY?f޼yH ݽs"hSiS &X؊JRb"rQl#KIط0;$~F:±cPm߿!XJ Xf\۱m+ 6mEJ^zxࡧyїx'px59 oZÂxꑻ[TYћ/Y(%3!8OFMĄSNTiѤYcT &N6eKвm;:k[rQqIUjA _`DQ-ڴjNvhѪn.DC{o{:A lb Ji 4; KQQdA(Yt˱ *Df^uW!QWc EV&q{qKIll#aWXZ5kFI3ڳ?D}7xyw0hI&-oo IO0yINHu1ϟsA_'?(¢ }-'C!o w}~-}_pW¥eoFjj*YYYdgge-++vSz~#]g1)~_C;yV:/[-u|&sA ! " [3@o+xg`П]_ֽrkV`PLޥw~7wlo; . lBLLF&V6mtqCHXB7_WȳTx"79gJDaAAi{+zsrJ^6.Wpyo%Klx䅏|+e+al{c_#MTl% QV816n-cQ&?|piy]`·Tm\~k`,[a Au:ZѰq:_MtNطkvmgǾTk]n 1hbKjmw'wE3;, 0>cŪ<;+]،)a꼕׵'O hBjZYIϞ%:RX^aB'~JLEE&߃0>+F=@b !9[Hǭ%9!?Oܗܓ3) qXDž`KsIvFpڥFlg2p_P vor^vH{Pw)Yasj/]bmرn+cX!ڸ굫Qv=Voͫ]Ϙ8'#~*o<-S7Z[tH n˭oq/m[яC-9-< Oڽ#QѰQ00ܗ&!!tSfa N$o&]@V Qm%1h|QtEL4QRX $dhM"WKП pu6|Hߗeok0y˾#Q,089\qL'Y1*qDoaEҥE}2Cq78#Qxu_7)%"-4*Bj hDl $m01Tϵ2`#k\.a:izhBCKVay?dc֭޿ B,\rIN=e+Y2oǏFj:GÔysY0wV ásIΝ?ˮ{X8s s)G6t4]'!ܩ߱#=ԬtNspi._˕?ȶ +8&K[8w'l4CEH!9y"O\ R4X>w};~E$fm+,ݤi1]7Y|!dNDv<4AFE )NoXd5?K 9!8BE_/k44]ȎZ#a˿[rRh6oـfۨB;B]hP9z7h@j5iתn"T:wmTPС}:tE AR%ڽ]C q (C"ũU&] ZjB1P4DH@\D90uDBY$2hѮ NgJD)Rߞ-5)C Tm4&MPb pݺRJ9-%#0 fbЬ]L 4":u*c TqZ)Cб5Ŋ!"X))Nl4kٖQnK,iR۶kygOEn'2}_[hfx>ɧ׌l-F#m뿻\) LU*&ey*]y]pN`6%Xvw2#*/\xRq[9FųNN慗L"8|`Yq(^`X7w D`c ;Ijz|Z ?xm5Ν-RZ"e Tc;RTu6o"M& a"͜3Vꦿ DhvmV,^9|4ٙgRٶi-ͪU+Y4{tUSl߾sf`lNpl[a ,7Utg939}*')% |TfL};vsE֬Ǩ:`]^34ۼ@zMALL4zh2S"mnEba!0<PT0XBi{L[;m\YnBŶMLF T@ǰtӍ`g.Fڱ(P%qh yƨX^-4驚աS[%)mT z% PRO.xg,*u֣+-۶'5-d22HKOӞkMXTa)=D XBcl&$edp1"it ?D 6Ρt~ 6#N$XвHKym،޽hJ)~m)no@N]ۤ1+'(PxtL $DWhݺ5Ű ʕ*Mzҳ7ݺtJ(6M5s8,iqsћR:z!..jի-:M^cbh٢)pXzQfmt 'GGnP{ {*0 -C;[!UP܊3RŁ)B` %<@$Pl]b  ب3H7 ꂐXBA)Gnl!L?GO|C-@4 Dn"lT$##R=Xlli.Y38JC!,Ϭ~0]P^4TiJ S B`c-=afji)n8syqlQ:;+t[_ӈ%3՟cR Տ,زk7 b9ٙ,\!{C:cB@8pӰ3m#p̝3ŬKINòU]SYh3fddJ6@4t݁ڵn:t*I7I)ݼfEc˖xl'~Vf!vlɮ;ٽkwmA%}PArB*+,؁]dmݩR&NI]0M Ífԩ]zjҼys*U91D3 L 82үo/zҢaXb#Az H֫C:Uj7Tt296iBq2)Sn +BmiٺŊB`Ӻ] K ѾC7BB @S!&CWFAWA2(JDDaB8)4BTBP8*BhV;uVͪHjV-U(t]{r(GS:.W8R:iK7o _=!o8 wxZ/=?OgcDZ|? 7+xJNߎ1eXS9x bܤ> HKJ$;#R8RS-i3f3k HK֮^w{Z%!!! )|n43I^0 PN3QsgyMV:jeuUcSpWR! 2 ׿32 +7Jj5CPX4Ç !42hE Puw׶&ݴhՒ[z{7R^ AAA79l~X_p1)l;ES؀tTؾHg{y䩧aۿw|+7aɒ%lX>{-Őa#xd'6~~:y#n~mۿZ<%)!񺊬-rEIIϥk}p}`?!8r7++[ƍmvVKNNuX4U1|+7-q yhX* S'ܵG/@曯SV=Wk[ֶQM:vHv 84a7{bkWAT-ɓ<(nGH Mذ~  7Nt7 ɍ ұç t/5~vrxFaM d3@.MelI#ڕmm3_kJT Օ--4P]٨f&7ҥDݜ+7mcxl\s_ PHBLvobHjj豿 ?_~EwAEodJ+'C\e7T(dͭMX/Z[믋o._;_p?Rq+l]hX(Z0JU^rJ ]tRx(Q}lDPl9p=o-53"awRΓ{ ɨ򪙩4i7-=̭KhϤ+8s)peşV5td9RӿQtד煷\xS@}"SkJe,3ׯ[zyMR ~ 1d(WO'+%SnjTB*XpϾWӠFIHiX~=NBlͪڲ 41b̃wIPNF Ux~"P0U}۷U:>O6>۠^th PX;.u\IAۑN;"[tٞ/~틧`84lf qޒ _F%qJ7MbcC85l /=yumpSQ;#p&aam/Y|tهlE%[Q$Nut5w<ʀXv5YpǟQ~fh|! ~9s͍J@Q$C$^C^.u1:9s=;va9xf]3R90شj°L:B!lc=]Ci4aHỆ! k3 mىjhf.oggҥKڋHg$ ;6bmH)1-"˹)Ze1,ںe[` u[)l6o c5˄.~35aD:lUQբߺbOyp8z QBUqn|iʗ)A%qk(C)8GX8g&GJex47ӠmK +oƾoeVZB4eK+͔1oйs7m)(V"1͐-FV-~Xٙlٺ PQMv 3svBYnlqySJ-ҚCXv^ܬ;^ BfM[':egI?/~bpQ D7_ecc =ve3泏0\=sOlظsY0w bرn23Yz=f䙤$jZ7'bj{`)\8I$$s)!t0ibV,_"%Mlٲ@p1nTfO~/6 (W} z]eսǿ^USA@RѦ%Qz>5wiZByt-:ww<]]ޛPjMʗ)m бt"%j#{Ԯ\nIfhA۠ktѓνz3;p:tBhٲn2p@_CChݺCFdhAן刎 #::Pc)Y-Ӧm z!CQlz@~Qx#J~sH0{$s&!_ϢO-)Sa6NK Aj趋'~鳧3}BfXȄ Q]hB28D&iX/'~7+X013g-`}9pgpg8,ۍ,Y_ɹY5׳c7Yl.Y_[e6}9K8N7St͊'$𡃌A(EV'Na,;Es2ix3o;3 gN&9=~I"--Mضe+-`$dOϑIݸ/Xf-nA{o&a̚<]afM%+P7 Li]?眯VʂGycQe~&vu6/ţC(MQŰ b4mRE" L ȡ})}SOnӅ}0lP,g q 2*ATPqTnӵ['zwVԪVZ*SzUp`UÁathӄ#FQ4&ѲU3kʐ#nz PnOdfMm@>b20 7 a68ڴkÈz2T\[*UaPrE I@H N:{ѭ{/:vOޤ&$в]i޾;gTIh۹+:""<"qnUs-nu!;%+% SkPj7mGӆ5=h:-TER:6B5jX#&M'@TBuM!!Čs >ȡC ]|7KTi`Zv؆4Xl Yfxƌӧ`Iq&2s| 0kBƌǏ3q_gƍdƍG67dH%:}?];Q.VnʚKu'rfl^/.Řd̗ٴy.Y`!nɶ-INOpes`v:ˁ1s{vl%19/|ʹ&q -NfW57&Gd|9~sL8q4O8XprZ-ORZII,?0{VuV,Ǿ#شa s˶5+bY̞9sIIOO'35307y=OE`3~$͛F){ir=+|p|4U𘛐a#P 1 Khtmׂu뢨tiCݷ-r*tF N8h0iӫ{11tH ӨItÇCqڴaҩ[W ``nԮMl0(Wm7FT0w9a c8M}.A]p6#<4jzT)] >=Y7cehשQ0lKBR6wJʸluNTeK[l7tDz-ڴjA݈ %2"NzЩsO֏̬lTMN=V26G8&hٶWބD!ة׫gP(Fˎ= "..["Q>lݻ'PM=w! ^B֒IjѢټK|Xf[+$Ly h+f`iN  P>3f7хT<*B%ɡ][S8p)P1,ELE PE?d:.E*BIu\G6/y5nEA"k*HWT[:)9B`? !%ԼQs6rf&ԫ|9(F_8!U*eA~+/)4,oS<%QpxS48-LEj S8P-hCGSO L@ˠa6L-P 4!`k[.9a xb<9} @q5WSKx&_] ղTU!4,.i䁃+f $V[msJ+|ٿԩxG.!iذH7ڄ?E?!3̜ipy8UdYL2΂0…&;5ChJ&Rd¶h̚Ӧp w>ml;ȂK8}TYx5˖bmaJ;vsf,ӍPXv#k׬gᄑl۶LЅʎCYnVGOfJV^:qBqZk׭eúdgMV ;phZ0E8JMڕL7HKBUnG -EH .edzK"ller,@`:瓒Xa ) )M^p]@gXܚ ujU3ha6Ƕ !BB1>V,)MRp1R:q;B8'nDfW?cvS|5-to*T^.QlyL:tjM^Rԭ[j:ݢE˦4oфkP~St]bjԯV1EiּjN eh٦5[wF @ ҉ qhf-i8tAN(* QRS l""&2s EXC ګ7!LI"chױ RQtҾSWt HTˠhT]:wTDEEPRDEG[LM~兟 d;g2T4g@Q+ Ƅx˗]eff^oNAuQD<>&_β,, ! M^H)̮%~~߿\@вw\N\JJ 17 |ouQ-7QRn+zdv@UԏmĂ-M@b;7"+۱شy#wߓjcy$wk>UQې&VW$%,xM=/.v6/$ჇܝZŖeș6Y<>t4wӳ]n{厏' 3و,2+4 Ï]%~Enkb 4 BbY̙=Gﻇjb\٩ӿ̧_}GtNpp [FV [ҰvH%J1#Ǟ<'SǼGP*[ N*gIQPp4E 9=5:P. ( f₅L7?uK˟_o7,D4V>^gMù/[6@Vge#:LvQRt vvDTDC@D AAXwg8cfg}羮q}k'r:[VVVE[E((E+JG_AHgsi 61* w_+o-dx{ン==nDtr_"?hڪ-[u)fqZ|Jceb`ڋiڲ:NC Yz)xor 8cऀ8 O{y$ė1m2wrKI#!FG hp<~Y|n&=eVoa9xGs Af1~ܜL&Ξ%rvŭdۂ˗򿫆 "uUicөC2Bѭ\@(% 8X {_ŢSAsq>E -7\nPwYVxUM&`j<3~%/gî@߮\CWG*=+~w^ B5kX|8mUj|:AФqs/1:tlFī[8uR[y4ѥevedm J~޺& ʌ7-g obңzn"~%#n}MD -[7Y羑*w/M[ƝB(-%* Uzz?!CTnׂy}Y'\+}0t0y5"]ܙS0xPF$Ofgo1]+~#B NvZ11Ý<͇O\LNeQ^:-5Sa2vzLVZF3yǴ18FrXJ]8iMf-ZWqw^Mxw!.G? Ձ; w{Γ]+fѬ]&/rsQ:ETCs>O*VYT>1hxHA$R8&l\M )%1ю?+/$ZwiW,X@RbhD,/>y \|~JXrƾ12 FCPhSPI'.x0B(A/dž8L"P$;O PTtfD48.W.'\:qY<Գ\x\v8ԨXBS}QhQ׳F)JG]$yW`y.O>TCXr AA@GuYjC]e(ȵGclCWhܶ dkɬ]8WiB!"z}L)IG8f2ݸG^0<ҕkt?f=x,Ѧm'cĐ:pÀ⣉_8$xzî4BQ 1ѩ)2E,G s`ˆ%dXH'(p5\A^N.O cӫM3ϣoVtzi\ 7:M% B<H+Mh>2)@ .babCO0U0)3@xd>ak~2Da ~+|$}yĄIWGABu:ReRxyOX,U~Yq ɀ J16333RnPh!,?'ݚaͦ q (ϢE`9>ѳj&_LPz65+OW%xLrͷ|zAP\}S|nf,曮4nZ{[︗{?mчd_V]~93)|ݵƛn@ie?|M(3X- eQi), .z]w#;vO`I=j~]^x9Tś_\}y{r|~:\R?hq,\_1>t`_nJkZ_7 >>\BȲn* y<|BukW>6r BCDcJdIEz'#ThIOKVMQJcƬ9](11s8 wi22r4x'9Qmj>sԄ${ih}2 G\@WLz-[޺şF%f~-C X0o >/M>Bˍ̪Q O:1m/#{[.,;bR\he+^}j5t|L ?#7ϚKr\xF*sg&_u%AH}Oٻ˯Kn` se#7 m8|*HJI\sífeJO#r);8Xn)³Bǖ>d¤QEY_\૏_'a$sC aj<0BLll^k/EƜ=I$T&.eNL<C0/}7q: ,!u*F %xHHI#3+n|Cs㾚i Nf+ٱ QV nR+or򛟢??1 KRW@(~k;zF{I)LF>l_5^y>nU +{Wc8a^O|2mヒ 5:wBll,JZԱ ތo\|q%;ߤ5Ӈ gb$2"x*"ˊUٱk7GJסs ʤ:p)kyT/ppb~}4V|K_ LhJ=7S/?+qA\$m6 |p[yg:ؓ0/,o|.~ڙN6k|ElYsRTYNZgϞy#YYYX $b8v!O+ue 2(eQoҺe+H})^ym?^~.Fޡ[^s^|y(ŗ^ɗ⩗$&Ͼ wp ˯<[l@J=*rSspN+P = =/,Tž#z/*-J·W_Zx8w'ڴl3ڡ)V|5TN帚u{x ^{Qvzv,R34ЕGמk?Ƌ/(Gjx9.%8^|5*[:tiۄ^~Q9K>ɹ#Essym7+ұczMrmZUʝ4 tr&o2~t;/W_}-Y 7_^-?$&!v=¨hT:u}X|Oa~~rˊZnE¥g#5ȶظ2V~T :mVr_qĖ?Z_V~+\/}XRv$'b뵿υ)Z'*#WU#DGl!b{?lJ|l|lbK_ m)gۘ//t)"3h^ Y<8ԭ[HJJ )tyCbRR#..ڵkcbBqqqGj֬y&'':72M#^Q9G\& gc^_W~-QS]ݏ)Կ7JQR a0'#!%,e!Q"iy::?(E(}U5w/F~1mW_[~OG&,^ m{ni K`}" IK 11̶# Rɑg@ȞrkKϣ4vZbh.lruKm>IŚ\|ٵ %T >7!C%_Kbw]4G:Ȑ?sU7AF)J-B`<<9F zP܍$d;$͏bƌƼ2} yD14nچ*>.h߾۴nEヒu+qzx(7@۵㡧^`ą#j0GhҨWߊi9픆TrrF<#(pD`;!B"@ZTVMtiɉ*x{zW,m68m#5*EŎ?WFq]27"R޻'F3ϗ_@wrr 4Q4P.kbxX'z>]ihBQ@ ,0}6W_9ڵnGf`Aru:zӦcϛ=gRhe> O[MNu=F?4Q'(al8H7*+(#/nc ~^ >a6ǶMl&%d ו;ӶM[Blw,X#_N6tj>%.cwép5jQڧː!%n"@8z/bv pHu #{yMz7Hi{+_B ?>9!Nj҂фգ?tc艫ԨCW^|>z _|ω-Z4jr}r}r}c( w+D_ +l1o(x!QjԲ XRT(`+J<<5vy cw"n"Bڴhu Ij?=$ryiҵ?_Ozʱ.5˗1ojڷou6P@ )RI4!)#?WM a˪YMvv,sA(Д@ ǢPJ_@`Vh =e`k&[g'F @⠓/ @b(S$J2%"\Y ,5OCYfX%~Wz6?]_1m":RާBV"ϥQh nq*O#G_+6c:I;e)~)go/8|=Oe57sbw|/{C0ڵ¨w뙳$LG >!.r'̘:'GhI6 rȬ蛯=oþL#Pde< vݏR?؁6.~ɟ̔1!=+J@L|Ӿbh=غ-Wcf c̜֜9c'LJx8N:>Ǘc?f”,YߋN;5k>~[g>| f~/YIɌKxq"V͟y_;fZize;nZ~84<>Zm֪U+ -P5,,z@$ &BԱHa|<b,W\Aҽ?xyzEH#&Kl]Dݿ?ˈ:k'Ā h߭;:Zr*ȅE )UINLt.jjTNEjUĊO#xf7LaWpsVOÒSAh /W^‘)UnXJW>s֥ ngנ! 4!pmض!ӯ+qzt֛Jx9f<]{Iduխ=uFƧ֡NՍ^]r%ӰqZwJN]a94k^e P^9અ27vp,;^Vb$ݳP1vrT eEH(qP!\|T{UJ v=rrrva鲥xl0 flsq/,\42gf$3`Ц /lwh?_|Ɣ1_`a0>>C6lOF B5C;1i,bN?Vh ϝɏ?׳чoy?)SXj-XG"}~~#Xes-@Cһ-TWt6+_*+#e 2>M Y/[Q:47Mz ]-3@9 Fy SܚQ-iU߮)il0Kt+FRXfhD t42ᆿl @nn Bc>/j݁0sȺO ]`0 A,;.1Cϰ)%g)˦dWdұM |5{9?lU-;wk!r\~Ax.U$)!0n2Ϙ/-J",~޺ޱ0}3@ ϕhBvZ?0Q {oMմ$vh)'3oFc'OEP%ɓ'2Ks8&g섉xR㓏F KʩT]SSdrrq{1HfI <>dV.Ad¸dgeaxcnj'??4 UTNNΤyVq ضm;~͚a9$RS)ӏ?ތ O '?\*UihHƌDyFbbbhҴ%SO%?+DTb옱(ǡRJr@㪳d"RRRӟڹ )t7is1O_g4lҌU'A^Nu:thCԩY`{Ӧ9#~y%nVMp;x%耆D( ]yH t3rąqŵ7t ߟNgc:ڵiDgAT\=zЫ TJcyᏉu$$XHL@JrISVujլ%_.<`-s/ ɲRzC2H֫gJ)v\*>9x r6Z\{>uNB11,}\ix@Anf^za~ٓQf_}2^"3?~oCI:4HJ>T?Lbd&_|8/hYh mi@U!,[Rl%uu٥LZ 9֟$J2%(HWT&377TE,ōōbcc1 DSU"vTFZE~q((;6oAcLe"EWs˙` [2gT҂[}rn=*bj4'[RهW̸ń3O?>%0,'C9EZ"yXBCxQRyn9!Z `DVrr|gO> 䖟*#/T# /ӚcѠI[b}:}6,XsǶv .+.u˖$&QaˣcL81n|˸T^ h"&t Cp(P/4}1џWq4C圁B{e`v wU N|W00 ruT-*!.CȹsPj5.ƒH||t]'!! hG۱@dQW1EwJ3m^</R*)%P%OhBbbb`@\\jgpGXGO//g_޻y⩧~ynGxGx';gwX>2.6//"߀,Y"itϕJ˹(_\DJqEM@:UѠ 7lt2r4mӊ˖qjz\C/Anfݷr‰IBF'[.j;@hpw`&1hQܿ~2G~2+ܖ^;`+릗:_F%[:Qv 22?8¦ 23ˬ+jY칂  Gpyǃ܉^jp mK9}Nj 0p ^% of]YXe2\ЅikT B(n? A|BM_5P P!Z||<(7^sjH/:c:npSW_|&'6G6It Ny2bٲd(6] HUh9v*s9qל'RHנ}b@2+^O.*Ϩߥ{.s,F  )'dڤhn-[6G?@NA>SLBb/;"ޅ=eڹ)g0k端g(eђ_ -d_ Ks?ڵ-7C)sݿ{Mx̙%`Xlgܯγٿg;l`ܴ,5|7_M>}3GL8 ߮9|Z( ]wwf0&]D8oSӁޝ;]&*'VOOJ{OjI D!8h ?2 igbGy%`G^`/KB ig!0 ,ڇg<]z9l_s8z>0,ۡ0A9H3 ˀgFW*B*Ш_V8rF@Bb:c'M&@ ,oߚt QgbJpqн5m@QR*thtZhqkZaŢ<84hpJdFsb=tBfiش5P$1\T)6]A)5kѹѴr*iP@S.tQ&(7X:Ҷ}tS&ILJF(tYtՋĶm@Rҫ'P9?7V8B{7;T M/ OB)/[qoキ \oF_֩ Q*)^+2@XqY]Q~*U*/]a 1QWH"8h-G厍HWgATLԮ]ڵkRU"Rb+WSR%RSSK4χiƒBbbb}*jş4 "*kd5]>Fz`وC@ui+7?Z@uX֨maRb,c *Pb5uCU䋒t!ڒJByHQd$JQV(^$㒗CNn~ϞHBB>qqq$$$8N$꡸ _hV;BQMş(E:X<<,/EW7v:&O Bgߞ? 2iW|5eΤqY,[ FJmg0ed ei(!#ci0i4vډehXEVl| J)|3O'Lc%8G0`Ƕ-L<!ÞwmL0;q*Jx0Xtɗ_͢ /M1v$LC+LtYyٳ|֮^TQXuH/Ye8B˲J4sP+/Ľq<8JQԹK~@BG)EipFc큇"R52ڥ3 `Pl۰&!R1p ,)f=z2Bi–PFuj8o/q\rIN!, B@=9`4 3s|Sԩ= rq ԯWsG39?0!_#KݓN.a:~D2* .h&!\K( Ca*Bn&%öSy\!pÃލ( k&ұABitlߒ(ՐKH<#]gC@qmڴ&7T^QxtBa5<,^FբY~3w@ Lh(b U]hִR:uHJNB(nݺg J&P䴪('Fѿ_? < Prph٪ 4nҌYN6l5l|Xܘ";\2~ xBCSZi@v0pK-\a[E(cB|Rjj*i)EԔRdRRRSJ٥!(ivп_o*M+L-Zdȶ򯙖FZj)ٞٯ))ɥO"%%ӂ`ETFV{ M:%4RT%vq8J%Aqq U*EWMB+&\8 qRqEny m#>68|>_YXX@"TwJtEq EihXELL >Ɔ#Ϫ%Ҵ{:'N+c&o]_~rlƏe'l۹c?Cz#&L̇GЙ0 \/Ȥcfƶ,v-+/%7ӧ2XǗfa(|[ef6J3(ee·,[PF.n,3_}eY{v-Ζ?ev^l[>̟ς4i2qV f~af]L%ɱL5 ,d0L?|>?ðbzT2sٳk;ffi&fL᧍0v Jә4u }}8cǂ:Kbc|0 O?-b-?`Ï?cnv\a\٣)Qz\uoEaq \t9T}v\C^gK#,h`C W\>\q|SٟN}g>=m[!62;~ق`Ҧ] ףǙ%$B)z `,Xi;ްJ3Ot),\3Bֵk4Hz'z\wU:?m-? tM\SԨ.ફZ5őЩcg;X?W^y5Ʊ ӻazZٜޤ _nӚb`>4k 'C|x.t]π>G0kL~X<09o0HHvTQ<4%Q?I >2 6]ԪB*8f"UkAab8Ho [B眳{a+?thvFCTJElO1oO:NGSNBҧOhp*Jt[S960M瓿zAܹ=mZ5Mm ѪuKP&ibZ&5<43۶QHm,hߡgGLF֭lNUǟ"6G\*JMԯU?0W{6'T!ի?6?&ЩU')G:USq_ 8|{1Cο*W$r'ڐJ-ZLRF8P4F)J.*Ltɥ#0ҏf9r:2ymKjGpw<MyT) *<2azك;}9,D #\̚Ċ(aXQOQM,h$ 2T3x@RpRH+, !{aKTdi4Xx hb ;Le󷋣ҢtѡZ%ggKW׵}I o߾?}^۶.78dgg4eB6{di|ܒ~DvMisgkƠ>=IŰ栨.J'vrfHt7Yq˯Eb]A.*2b@fN-E PGi`8pe̙(,:Ò#-H"5k֢ l[l0y5ᑞ>Nȯ-;3̖ȹ׬\2B+y񷨷"Wa<&\J^< od'18[JRҔ|4n!Iq~S ̎ gˎ\Dg錝8=6<̙aP \4|<ʳA ,^`VAX*R+qq4:1c9so_: #Rpzv%$/?}V SL8ĤPq@&)>ظ$/]Ƽs\% Sѐv ?y*x,b_gE˃VZt숥SN:1Yt.ujUJQjHŭzʠx`P% / {` @$= )?h +ۡiFԩUqf48~d_ 5*۵Ү] !duFg4"jXq$x9[3;o#5$h]T !5/'* E2)S+z7+jIiUHKM&)ҟ>_ݒʩcR& CQq%ЊzBБN# k;>baSʐ+Ou-%Da`0| pQR(E_ pnsmR{Bm|{6~?en{lMk;b_=GjBqxqHF2\ezFDW#ܝ-͕; \fd?83:vIAק ^ `nMXgPO _=^@ ryWl4\l jK жuk4 -l wH{ 1[+2,]Ҧm4݊#`G=>({˲"܏<zxpSgeB(mVWb.kQmS+NcБ|uOڊW.MKDS|#W4Hhw{I181DzW$ljqZ|-f[eM`d>֜yݲPdzld 4Lڼ!ff٪hZsOХUVtV> XBpݗs3'm;tͥWcYF5rx˯"hC~C.4\QƓwބ-,vdf+4tDW^}xBԲ .!1-,=;hq|(W4 R ]xB#HK/!I~0];\tC(p !滹_ҿw]Oil>Ա,n}Ѻs)ۿ]IЈ=vC 2|~boa/܁U.K \opaR~=οbtFMeԬv]|2G(\~&qi2kDl_eF U>:jImaբuLS ႋG30;KjT_27ᇨ߸15Tmoye>1BY_fߢmsecI@.S]Jrh\X!ЖF*&`\w¤IP4Ə V"|Ukػw MIT8_|11ٝͦ#!}Fzfy_+n;><[~ѯ< _DX6>b bNxfL{㛙_aY[vʒ ;o! f}ɒK4Y|Yx>?nȆM0k /]Nng~OY3Xz~u7sgdޜd溠id/#KA W \ϲ~i #1DG1(4j׮Mǡbjdtr]8&XqJ}̤zWnhU ԛAR)я/8.Rq)98\2U%㬎Өa tCHtǙ]Z= G\'}hN]4ǓضCgpSvlght +﷈BRaMW@jiܸAÇxԯY':uk8Qc df')6.{嬾h^6TY 0i޼T'+Eh*>s9wӗMѕ^I\6I3^,wMp>g/鹜}4kӍC.&k:{hٺ=vlxc[GמtJUk +/_bY>|HओNbo3p0q񸺏=m꩸z`ZԔd*W%*ǓCSN ;Y|ÜH'L5cl _|)~ "VQ%B!6 Eɐ/8Bab(AAEDB8XԬ44&&+Y"534<൐ymKp:n؞_b$<'lWhFN=BZD$xBTX,@(4regCS ]-!}0лAb"LZ_W.Jy BAZ$4鐟EnN+̈T\yŚnJ.^FMVcQM޽Я?} 披uiޢ%͚s^TT:"m]Ϣut_\zJJTRZгoOtL3Юx BU9zUzwiG!iߡ=M[Ch~;2! >F\~%UN Z5s=.j&ldE`"mHeDюBi!uRQȈO^1,3t &U B"EŧU8 QJXt\D w"zuJu\rrFJYTN /?:>7SБ۶%77jC h_u$z%BWf(>;GlܺS'`*L@ r ߸/>&1ӏДF? '3wrQF2YLNǖM[ L82q N `EdX:@[lQop<cɲ%z[`YOs`Y>BYpf²L>l,yB3-v+2u X233"d9wH_=]z$'JyJg/&;v@弋. w uxJ}VzR0sbNQ,$$m&w;8N=42"!O:Ee˱ k2hڵA\sUy6t؉3{mw"/ۡNZTZ}@hL4 w+,tFMcj_<ί[qp ?mڴ`u89i[4[>[ VQIԮU?2؟ hP;wfǒEK (g}6Ccθ$66Eyz`c(4°˰TP{hJ'[aʐ5~L iӡmWb =r3 IM9gڬE(i!1KQ k3m[b~40h كr87uBrܟOA8xlѷǙaAѣW؏N ]!NEhչ-]tu˦(5WU뎘X! g|¶Q҇3| iqtl݊3緈'u4iܐvzPf5PΝt@URnm)Pvݺc޸2qITTM8Pկ@2p9_ !瓚HUHJHT 4&--ƭ:PHon0ɂ!@zJr C#~wy]_U#.i٠ʈ=!ecuxX<㘮•OD71:Em[n.T\t9JSJ&Kl@+'+2JЋyO֗@HA%8<#;7 UQ[*\C,{Q嗹e J ?Gaۂ`B]ABsoQrU(#G~ fS!Ph<|%H{A.r'JS_pmrKgIak,l@A*p P"M*uJda'_Q+ᱪ(EWc!n;p9-ó䮻A6<,+6wFwu tp5x % ^ js,gspUqqqF'|jw֡"O2 k%^y\aIRȟMa ]^l2t@}QiZsp4= =AtJ t]pjXT#EUX)uSH-Tlz͆_3@.! /Q:Ơ[Ł9JP#N:6腁j>|<$wv=(R{!yX aA/#aϙ1 Fz ٙ ˜q)߿?22J3_&pq(.#߿?޿?t233#===O~~`6%Z蘌?gd9A88=7^FSNթu$:>էery̱aY)L4x0/B!C/@ kՔxC.ds~M ٢1/=H)4`HTRE)eR!3e\!'VaD% R>E88D,LO|||wVѭFÈ6U9]'L] ` P0&KFtB:*I6%<o/>kam".%.,  By|=K&LL KV^fZ9%0E(B2s$9stSCq`}XoaxHOPez~ݳ?vna:Y3Yh1K-DW.0QJ?H߿__!t )-;tD*]<<[r. @yf"DbcbMS&qv=l+ÉIuDHE]G 0A9xVBxxN]=rɵL<_dRXJW>W(ޅZҵK;R+UE*\4>F0+&iӾ#rI\4GD 8hќz#hּ(O7pZFg4 G8SW_4V:eAƍiظ YyV:ksJfviH w^p:'e(a3XիoIjԪFG{2RGuHWSc^ZQ-J]q9/_+ܯ@Zh8\C+WQ(G-RTVPe+ W"|*K=cE=+x|tFrj )))Q)ԪU;->> RD-Y,GѱI =,t^2vãd:%ر*A!0XhiIJj9xmSHKWaa_HCIRu7 (8hIR3<=!JoWQh0EAC (ū8m[+O(Oa\A$;+5߮D IfV. ay!2~kB#*%X6qQ˝>¤OgĩvLUZ#z3Jh?D]ۑ`lٴdہpDcʴpAH2t{[@7&3 vi 9߳|J=4it鑱HalU@.iܲV.0,V!Sغs/݊䧍?0@9Q3gŒ3Xb)V)( bHe+V/ [֎98hs p8b{G㖢͚ ԩQuAآ^h׮OlR e1T(ɀ= NPZ$6JK o{|-R$)AӝT> OoI Fu@z?dPP^꜄\Znظ \ ͧYfhJp\V-*J&'֨Luє)' '#Yhv>?gEVi SIf-J4hN8 rŶHF?v"j{߽ Գ/c1QWQZj2)iE ʑߵT N./U"%%!C=%RwZѺR K [ժҳW BZZZcΗR:)Ŷ=gZ{KI!959lH&5-2ONNKMINIDjJBSHLL,+( LGY"'t܁Hzفn{a~b}EG]tr\iu\),..l;>yz<#8xE7q_.>?xYrfw,!6'{ۓ$ZEχ_LsixvYJ~rɎ-77`0H R- bfsZ` (q~۶-C rspOHl A͇%Pڛ5_HUTCR)4bkJ*Acu]AjUp*_`,̶Pf GiUfwE)JQ:2;oGH?Ic|{6~y!ZQRqpQұ@Q(E.JY*n=B Cf͹"E8B(-b壗|x $z'𱅅0t6;]H!xG%߷}#:;uC'PThhBѽ #tsa?Ѽ̟16>[r˅}/\Tn ʡ 25>S ''k&L:$@TP<3m'͊s% )Gҁ"tP"y %BeOwp!E('nc|h PN\ ֭X6y~>|&h۲Nѩit<60.zPsزg~ۆydZ)ժaxݿ|΋ `pS9>mlP׹!#.ǧk[?B؃/I0k+Bs?`0 7˅k(, { At~ۿ[;o0z,ӥ]7ɧ[Ht&|)R|2`~>g% ^|}1yX{zzt##]H! z_t5W[Y]IIIUMe:6W\|#} ͓ ѕ' 6b<|t:/ǟ\]j$ <W;n^gl,+TW r57ӳsMgw ŪYc:կxz mU.RdEP :g:W?;RhHt\cԙ|f4@1xhhyYL<OIxB[3. k' gsUI>kgЩU}>7Fɽ70klАJGW Wdl̜ypd9xG$Vu|8ڨQ܁7[`˶,]3j¶mlslZiKV\'yKLcä9熪4`Hb ɠݙ NPguݟ}v YQr FQ2tuWwݺVUW7݀ >υνs}}CAc>}[ׯ!*Y~Cۺw3o_`7lݰ6mUHs4jN^HWu*ldXr oF$5+7|̂ 6[M~2tFF4Jzlvi1׌Bf϶MMy~<7~&*!;?zYv-x_̓O?yޯ<Ӈ0sz"pYcư]h }ukQLeH2ȻFP2GL@9L9קfO穧q[ 8}Zj.$B&@ 9g9q~2R2˯&9"*Iy09C26nX_7gEJI λ h4J&7pqp\yTj<ÉTOIJRw>ڗcK/ƍ3yg,~*|tvRIE+>(7o""I$p҂vmʮ; fd3uxɇ{{.Z–L-<\i CdG*. m) l<<潾S+z슴mas:bߧwn$QeS8g+W,{8a1G߁JscoR-2%)I\E1D=yyH+]j֨mڢK/My0GҼa} Q:`xQFx2jh̨C[ӫO?FIiѥkg<$ȘQ23j03z$:A S9OHL%]HsѳGI%]Dq<7B Y:1870q-aμ%JH -`k}a"XFc8:*悢Zx'^t(#%Q0aL-D̑/G)mj\KɘDĞS `)ئƳX3y"=/|O?Bi>Jlm9P&,?ixmLIqHiB% sb}uG|EQcLӚ8+bgcgTh0$BW1ζ?PH4xDJ9!"tQܒ^&݀!BEF0Of" uS2 d쩸dh!7wD5._']fH-10 g,Y9N'Q U0kX^0G #Y(E^ Vo;K6y:mu}v7jRCiSũ3A$&.} /|r`/3^K%4Cp(`Yi5xb٢E|m4AyeV/?]*7<%+t(]MΔFǺ(bd 3ڡ]vx: ^0uG#9rʲr__4"F 3f0lCH߻#eȐDӚGƐ6Zf :WQPЛ=:ҧw7hH0Qmc&.2t\G0pUj@+bܘtԑΝ=p\GѵKwh-S2m23#_O4jz M4呱qM\۰GLI"G%7_  /sNP3=`fm22YЋD͜ xX(LJsU~m׫\HF<8 KKؤ>,Uj]|jJ6[^b1%(@c%L{DRV?NT%b{-$p&5>c̮(b Qf,X ]0phi Z;&ZԾ!AJ?@ 1+EK`W'\LRTp)JJJP@ TGTj C{⺕4NP:Eq1b+PŭWboOHa Ɩw Fq]7]وr^%ʁ*,ƨJW^sD'TskRet--twkXdͿ. BNESZ$׵,PT|oSOiѱ/I-l@zz Ҫl'O敩4yp/1-O1|p@SmP6{v1 G҃6}{Iϩg?[.D=E>b$(E&DӾcLE:է?EhxuߐjT4B^nDpm4kވ#+3C~N+V,'nm605i5ј%Cqӵsk[*&-SsHJs*T*(}#hҤpu9r:>/q(8q+J挑#9MUgUȯՕD 9&ca'eLθwA,A%B]$5p8 wqiNn;tyn.;w-ԡbc|RIj9tt^"LHw6p(SF0Dw}Hrm#$bX Rw-3l(3bIa 罍#mGNq&В%RL:}_d_:ĩn(4S%a(|cB⥗_A -SD&`&,ϩ(^mg@(p$F~ˆ~o(?Fcȿ.S˝w 85deeӺHeY\R\Z؇FѢYS^+\[ }ǚJy] 0RU /"МY~2~E?{jӉu3H<"v:eg`"LYD]}RJZff%.H kiƫ3ҤI$~($):a$F>g\; ~lZ'I`&(e$ў.ZM QJX&(iyZ>(`{k[PQh-زi3ː(b D,M&Mj%@ah"JFN'O&==A,oPh]Fqw_PŁ?5IHq>Bi$++߈[nÖ-sC|`؃0tW7O!¿u-ÈbrAX$gF'$͙y QCk 9yΆXD k `.(؇>Cp 釚 ƶ,{'.qm2ߺ(mm!=p46ox#M2Ym< 6mȡC_弳r  Lc=ٳ>$VC&Qw#GeԨE9֭cÑo-fw)*.T)QdŢ78q*< iVu0Xn/_*#r/9EX,a Ж,aQCZ!$Hm?Ǽ<~1_לK}0XA\/Zz#?gCTݥ2R#Hod%gn 4|\febbI3h- ^0@۴vM QzEᶖ7'C_~'#b/է0Ly 0i6lC֔6;2v~T1'-"b Dؗ6[ȳUO˲&++낳N^SyjVU LF d&.:HV}_]~vlٲٹ׬^տ0uԾ&Op$??ЩpfΘ05lY?J4kǶ]t`u|\wS`-`0f,XHVnw6L6[=Zy*Տ yplߴ"_=>6rMb4e ̘35_`m1h<_?mnaS/P)Az3'Kv-4W(C!wa $-Sk_u#==Bdlۮ=H]'  T"DU$>IV3LWW27L۝^bR)v6.c~.chY#kG*ɻ/=Kk.?g} Dh n~[$_J3v2jWJ+Pʧ =&&@S;>28G[ɡرDPQpA+4b/uAF/<ے qRW =/p)SL2_A"Y.o,\EoqONJ)=2 X>پ3۶nF[?Ů[}m~GGط8HcT4#ON`w3ENxe]IZbl:6ukNm{KnV6-t8_yӌ0O=<}zuf߿ ;i꣥Ɖss07LV7h7}vpxyi(яrک;CDkvb&m /"bep"/xNwt#ݍ ۷h^ \*[],,++댲o8!> ֵЩM\ͮ];*w_{ۯ?оSo~ßP+7:|syYOP̚=+ƱI>XnjMo5# Yv kW/mA~UƌFI|mZM7g~M jV^VHѷV[$vvvn۸Mʱ`aTh,FvSrjpqڥX0&pcd RʀvNJ]HIU_J&je>R}vg혙(( " ݭ.@% ]Rݠt]Ǟ3gNr}sf^{^] ue$4zXIIII+" " E8 AAp'=DADAc允OSrU fOSrNTi!ŷ>myXh+̆Uˉ"ȧ$&{FHo6(hʶPDQAs@l/1+7Asit8B FAp슴ɱTdO88B%D ۨvQRb UGlr끚g Q['-" !k%6 շ||[a* 5lQZڨzї_LqDIƾ l Q)E"Q򌻒ȈUDAI \~sç_M[ Α >|;}U/(G],J Mui؅7yl-ҥ*T)_)SgP2U,:RT9ҳl7l%5Ҧ < suǶ4} }3VӿxS& A(_}dI#FY.'LBhnd\Ѧ]cz"5+jkJ 6!h: YF(1AV"ߠh9(wA2(UU9Wn&% #N4K ͜M7ދ6l v>ϯ^+֗Ζ;ݏ!RCmm'{G(Hy -D.9A҅p%<8Bql|vޛ_3qg89"4ѯm5 XA u63F ,+RA:y }/)Q(]Ј(H|`Y BQذl!׸C2S  [yAHR"-,t4iO?ŏ'QHE O^E:(".w*blnFTLNoeÏn˾SG1DAI-txNF8/MWLKM`7'Щk{}lٺ'&.!(d\xOdDjҥTJU41~@HٲQl`cI_2! {Q̘&|?V{ҪELaq>+|0[h8^hXRCm%( Bu b ׉8 EsjTΚ]0zRv]L8cjlZa'"5e4Qs'Ծ)Zw`gHk+66]$g|{dPf-n׍hn_^A*0A<ܫ(Kɴlck^b:RO<[2Ըn,56tE=2Ѥ#5)$}*~=[8趟֍pO" 8- I哗~w)Jӆ8@<}w܎-w؇~GQ[ϫ7*6CFD:⪮>`ϳU(&6aPTa^"SxgBBZpU[ɰ5 璯"^H)E:Dʕ)MB4ҭo6 ]Sƞ=s㯣{=xhżGG֜t~n^ӗ[_6c!וT-=xtGoDAO-^p+7$&./@&8i&fjy҂ǭ2(GSti#21B[%8`#y뻅4V×?Df%N 4 A͸'H[,[-Dex+ҫe-4J1s񤧣Օ~ A#X8[R,:x#i,^4ѨL1+~&=a5|;{2ujиvTAiV,w}6r*W_ӉD-?|6jsYV\޴Kwco֎-ے-z*2!P%BQiߌ7G͏Эq uQ^ɉiި 4^+HH1&!yfmJWk/-[7|FTlP@gtl&+@Fi jnIV8d^^)G^V=y_kL,ų'- *̟Wq֬XU+tx5k,aiA6 XukV.fU]˫aKM`ݪ%] W.a3`E`_u+ӠFDLYoe XJ^1ֵ hQY4P he3im?sՇX|H6m7v n^a/Z W8%UJ爫.wp]5'nJ!R\" A@ᾇd?))xEY kGq/ϑNi=9RLJ C%G " "?I$(NL䐻ߥ#-'sIaaG~xϒEU}GIRlᄨ0(آHIq(7/'xCA+PIrCdF~[8*)N)qPw!" BBm"(a@jG*Rs_RG|!Ny維S yIZצ +MH_?}(|@DPRԢb)RS΀?E0DADA/ $`LDI> `*c owB Ŕ)NxTϽ{ԖYѽG~oPK~DJN834 EQسgؔNFF(;dw.sNڵk=7;;L fdffͩS8~8YYY2]>{,ds)QVVFٳg:^'ݻUU4#Gcu4MCUUO>ixŐYQSĩ]'o#}3鐫 y늅/o@ͺy~@{ΠK'$ *Λzs|DC!zY JB>*9:n_\ҡsܿEȱ:b-} >#7A yʜl+? *… bB"K趰6NC0ReXYk¯aceA}d%k U:mr|~}gB@ EcY+o5 g}r; s^1AKab9NֻYƞg+]{P]ғzϏva@sSJ2g?ɗ9͕X7KSdn?G(di>#PTdShc*:M!Cqѡosا ^8,԰?Ovk{9J@^ [a(:b*٪5xC" ~gOqS:[0KyqŽc.dʥTX¼ٵzm?Cs5Yz EHwz 9E'VϠϵW3e❣T(]rJ j)lTPA_`**%pG?>|afΝW_a׾s i:{ǎ2{ 6m\oq 24=HD[ɣb˺|"oɁ`fCsY|!|?S7K:8E(^Ϙ= b3O0Mݝ,e^J MfpcQe0c5l#>BJzuzΞƆuy3mBiLMP<*r#Sa aeҴN-v?s#[" ?ɥ+r8KK.gρޥ7vx1F~t:xQr%/ {i?Hժ"B@wH;bwc*<~g㞣 53y_`S_n@cx8ɛ#ͳ w;/'qfR&D& Ű#:~ F?ehٓ1igx^NeJxy=*R Σ2 H;B'xO zWg皅|8v^%]yߣyG8Ꭵhs/ip!@ ϤR*!ʑ+gDk?=_fM`ɖz{0[eրI3yGxtd둯y>۟- F^FF R,f=JTKL!%PdÂ锾>wЙ^ze|v w* kfcY;7Inp)oikhgwSCyD~cOsJ4=1Pe,ߴ+$ K8sqSGPR$%&HAHf+[  @HA#M,YB 4KDLp$.%ufr6 R|Bq _2uk7ccȹBG6 |Q@ARJ}{nXcG1%As'Nz l჏Fk /z#Lj*=7n8t$Bb /I;/L0'=qDEyyJԠAtH3?cW&M@-~̇o٘;lɣ$zصkTisz:h'h'&}DѶ { bu·f 27ɻd⛟rݵjY |l݁[7F/ v=UK4[~?(>>c_H\-}\\-=TJ>t5q+RS1gnnMKI,uw#Xƈw?#9È2ݱD)~lRª |V6;tme BݳΠ#bO, [쫟qEy>\T 7aĻQƗM@-M.z oQ!dQ'H^mиFE2l^zE0 $ȫ/>mK|{ F\eQ=\Z+%00xSxJWg3w|94wQ&9G*l՝[T }6vM.R|,?>K+%qIйMywd| ވn"Xr\iu#_HN]K$~j |2ҋѥ._JfM$r7[]˽GzdGɧ#.#DKda/RH4'x$%OR.ɇ&m*厛Cus6BDW;#Z0D4Ujף[ Js:#щ^ nJX џ~HTB"::qP0D4e/}%5[2\T:'1gBy t_"GUNd[iw72,WA}]rs3=:u]]R\2G ,xJ1ht ]n>VMe4Ѓw|֢sЙV% S*:VUb8tmݔ/=GPVyYK*9$1O AүgW.#C& K$^4)Fc,x0?~0x7Jd{(-4*+>JYgcswwP:ԏ6Գ+5/ˋF: En0v%JO|@Q0 Nܶ+}͕vBYQ'e>\ yv!H-sX%wG6vБt^c:͕27_vuIHnIK hdfۼ+xLWVp˖xJ [0}$]Gn BjqnQPCG<爂ə;ON߉S!dp}S8JQZ&yUDZk4wsB07.Ž{)8>("x^سs\PYP;MjsWΤWI% #W\a;gl|!W+? 뫒-';z :2߉u v z`W>8 ?mW>8(} ay`m}P{sNToD''s{pXHy}3ؖU;+;3Ȋ"n951^(0@/4 */f"/ OlǡJ*∍{)>41q9E'SBBNժU#&&sNt/_\k &ժ}b;$&$9UswqqDErJ?:SHĄ9_Ć%**"...,|ѿ]r5&ȱGŊe{M9̹Ra$66DlFJIKs=,ժU+9}a~]q>. KxwժUȾ-?2w`r袋m˲(W\kb)r*>y.c wn]s/Wea6^xa1u.0&Qb_!sd,>;纷b{/ӻK^û}+Ԓe;S}f;Ga 'xqݨdqze7<&&}L~c*$C[yrfnϣ}b|p$~!Cٶv)IAoz3Dޢ" "Op_Q+//>)/s#y=V?'O"3ѺͨѰJ:}Aztb=ѬٰÇѠa=v=Сu?O JT!D"ӗmq5%\o!_nN0MԬuyG9wiq.n Vt2cRlW%^)e0y" "?Mru PQc *2Q$آ=#̟SU[5M&[KR4Vǟx͚q#`U(7r,{\Ǥo&УuLCc8 Baoъ,= z^}-Z6i෾`E _(o&͢WlRZ5hOi>@*{Sf~9lDAD"ph,Srݷc2ڵ܍*ڵ##ۡnJ1,jjʖMKytۜ>zTc/˨zIevm_ܠY|5 `K?cc3hݱ;3N/y{IP ;5Hֈoܩ6,}pdѯe6h)%bR."[P#=ADA@'5?KT) /[Ox )χBɋF|yE>Dߋ(VDA o]C>sg$5J%bYi(7uRT|Gbb"eaFd_\2xy~_Ҥ:")"zE$ER$RVVV\X^<.E +wXl576$.K-ADA(^H7}FB*ݣPYkl;_>ˋ3<3=j,l޶_^z2NmW~؊,5EZD4z3"vDADAAɯ&h!CG` >A#ʧ/\_Awi) ߇.MT ű[$"DZt(!PФƝRbq7/?R`KE#s86DުHl[ɠd5R(H ="TJ FG8r*,Ι[~xO<3Gf7?Vxl'%RCwNҵϝ4$s )ܿg`=Bcԩ>s)mTpݜ !A$mk/@NWrM\խw$l@ Bep7NE!D65ߦK玴iw5YD1Fn2`PNOD 22EL"I%}oB.)2P^j6h>܃71{ǬS*&ፋ[9'ْlݎq vaCq|?zcg_|;pD^ߕ5L4'|W?r :?e{NfSPA)i ɍ@ ˡ bӏf[#^{WȜtaM!A*,]COa <^:U;ģy|>~<~3ĸRnfS6y Ӥdt҅t8 4,Ń<+}3 tdA<ɵfւeH4bҬf <(#oA0;9s|:7 @zxjP~}n1fΜB4 Hqx{X/&z$mt}#GyKz,=C e)|6+.l\xE&oǔ8xNpغf.4xD%pXXϞ\l{Pǎ7\,ٶA>oKi3xWpf aH`Qݺ(0Ye+a2EԼ"VnuKxhJ5͚3:5n4qL)1d 6khҤTj|;}9V( > ~0 Yb|5iSl (]G2Qx|:+Ɖ>Cyf{<0&4ƀaoa :ҥc'4i_W8gߔ~DzUS30h^M/?Ϫmk:}|5Mt 7&޽k:17"Sf+[c  `dtG!r9&} /o>,(tRb(>TiH ?I:^=u[!&! @A[ASB={]ٝ}! !tW'z5÷i߶YM0!dk>bޠ*\:A.TLA L3p0p: |ɻ(;E; .'E]3^էd&%E[|uš毕*ʧ%8qZԳi8_?,$.aZi^<`yj 2מ0$S;^M'_ॗSi{ϑPW67׵ݟJr^'_̐'A&ZbUFi6}ŧ0L52Qo\J/#AC$3TLLtL1%R=<1l(U&=IZK[TKg'RhtU{j^Xd̜cX^{> CQcS}x3kW*.#SL)@bŝ=K5+4-_dg)}A5mx,+EJB*x$TE7%*I*>A_J`wtJ;CqFH# *}Po\%}W_AU:s %/{sZ6 <9ʣ,_Ewp7Y9onIs6Bonsu :a=+Ο[ܾ In8lhyϿ)=D2🀡4 _0iY $^Љv: }_=|ַK;m^qE{һe$UΫ׽tѕ1ėJ\LS42ٻF-h2@øoH8AD/ )H-8\ޅJH#\%^Tp)gRHwA >| {m0aFZ|x= -2X0@5%X'Fn*e-cNѴ"ȐS3knc߾|'m/`0̜[ɔ'&Oc'O0{ ;IZ?:cǎΎM[<&0i8[پy _BwF6cFb_3z~wfeѳi)~9ˌzF}vneyl$GfQXa;V-a|g{<Kħ|7x<^rHd)!?9֕A\~<+Ç7ӂEHB4iвE7iʉ ?^MEӦZ<äSH=J#l߳G}Ô9y'i:bb<\Ѵ\֌(~籸㾇h&O?o*5n=G1'$hrNpaMF yɅ>z *rq~TO= 6boM@U}lپ{61mIVmӣ~ZukӨedfnf}^4lٰy_7dѳ:\j0mcHAmm#$Ec<9xSgٽs+G, #r*sWqX*BZIˠj˸lۤlŊ\ۥ`rp^n!N܃m7_ϩSgdfeвD<  㖻").XM4tv '!>Ƈ yqUmk:tDDnFzy8 /+Mϯpir^/Jc, S9~(Z./ׅW}%O096J4HAvv6a)L,*4p~1n=?.WJ&N0&;Gr?BhhuPbU.[C.#69 ӢQCk0&;v%+q8p4 #7רITtիU'*WGRf0 Rй[7Làsݯ㢲Pڅ~w0ع+±&*N!6>2+"уdT-]*5aڔN)CBb4)E7^JRb I1$$Aj(F4@h6D'::WSt 4pGHk{LRiʔ+U]zIoXEL$mP(U(xP>EQb ݮ )QxE&K>Greܷ?>LOZtsAs~x01hݼ!H-4 [Ҳy#և :C R LKF4kz9JGzTNApAvרKvqlIťpUF8{h tr7 oTW)4jX6]zqh:0S/kjTk_!C .׌I10:uеck |t%h +UV6Vhں=1Q$ѧUK zu02" 'WX<6_1cYq=MA##?q&ϱ{hE H)$,COu+DZسpN]Q7o+¶".Qrҗs̯9WSX~#R}\ VZy*Ia+y4KpTKŊ$XRED~rh!T?9Z|{2ȅ-)vya+"G?(/խܾɯV 0Z-F]ԝ _(O (]FmQ$IW'2=Uػ;Q`d#t|38OXx\/ݷ&# &Lg9rMR@ScPtoIT~D F=pjc>;cYH%?N!7Oر,LUlaݺ5~݇#4ta؊ͺ9{:} hwlbd?UV,nffΚfKZú [A(lް,~j,]ۣl}lںE?/BY8w7ӧM'- b"d8rY LbUxlqDP|Qq_b _V`ʸq¼YSChR0e8ҩ.zZoA'Lf>t?Ŵ?,[ .ӏFlrV]â 9ycFblݶtF}Ɣ9 ٲi 6l Y~Y|:#,XȦ[Yx1cT)'adfg`|RSXr\#o߿^=D(| " N( +wbQx))fZrvEX)j{㕢 F"(خTQqREx@ӈdPo`K\uUWk >>)SgQ\*W(Ŝ9s+uuk2it* "((4L4D,_Y3f`#@.&L@͚}-NAEe/d޽[.ZcZdg|(ӡ~f)?$K/A<l-Grl4#Guo(B㪫3jh؇"UPTlg{Yl Uv'YIqQdgfѪMkF}>2JUDl\QѱJv}=HNrH:-)əa9@(;~]"%%FUVHD=|+HBڵ;{:f̣nZ ʲ%dJR^q_sY˘8N:EtLL`&kV㓑ѡC',3@jPt gSV_~13c8l5Kiff͘I 55U(:kko@AC&+ MB|\̞6k`):>sYsl/(#h/Ĵ֥49c?KfzWӈa!s;o+yϘŏS"8v~ /LKW3f>} VbY(aeh lt” ;/(ufI($h8r}j"諴u< EӅuʊZb~7?rWG]HAKHO'=5t,:L"k%T< %j8N8@!33սK$-#`]<()YxIND%ߠG dQVO2&tkU% XW%*O^=\r&/eeމD s]i@ (E"௅RL qQPs+}?%g ZA,FzZv BT$RDY, aCBF9V?&Nv\PHjBj' wFLr}H b挹ئ;I:{=O`8 l@k:+׬R`97 @ tJFxTſeϋ5DNsXh1âp40:i.0)E(V[.eG|Lp0k4l]u%B8y|p*ٽSIOO#-#4320L[nl`ۅ["'P[8 RK=@`gx&3,OCX0gTL"2hӌ1!F{%5,iAc,?i"]8v}pJsǒ"2T׼%W8B8-FSs5ZnMɷC*0/ y+!í扬D]_]yz6oَb CqIɖ ސ+g*Y|7bl޼-wJk`8E^L̙WMFA!?LE &Z6;ī:ۼ 'Hr+ 'OP a;+#'c\aɤefb)*?#G_%l+ ph~ E ER"qX~?NGuf-Xsf6ډ؆d6]KVZeMd%_2XxVɎ*KY rJJE1Rc 5.ՙs8Q ,^0W@(:RجY a~F6myfYlݶ i3@CW,;Gaf[L:)`֔qڼ $;aPo;Q4._g29y8Og( g!@C(}{CCM$=p'YfF5+p2$-Sf#3p&- ig39uc~q4fLԢݱ"[&LHapd?ϟT@HӇ1 0zp,(8̛#%c;~sISu,!H|IOthlߺi%# >ugؘ9y*P*9FU K3Ok>4 慁p덽ФR ăbN> Ȃ\+J;jkV0u~(>WDA7KrUұX6_7b.' ,QԮBf -)p|T4.E:5]U*K8&՝wRFѧOWлwwP!Ȗ׹޽:*TEĤPx_E9p&0m˕CsldTe]-bAݚ (*Tc`#e4:GR‹0 ~C]ۙaPf:]džnQZ <Ѹre ӦIAƍa72 'IִkMѲUKXի(U*MJ1 V-[a&M[V-pMZh°Tڶmai{{вiiJpYzջ =C6@z](jת{ZT#@ 7kqQ-?ڴ!3-m;RJئAVkpZ4kff#TR TiѶ#UREUDвy+nlU]kQV#14I:H I$B|b WFl<*W]Q-:"!99:(TZ{"Z\*V:TB2וi2-4 1i߹1BPl 2IhG2 (iߩ+QvrHͲݻ/ 𓑑EF|ts#QRrQx)DSR4~8[)8Qwg~ Fga gwPhذ z|lXf矱q 5y_aZL:E1lˌ 5 ?srb5/ G~įנJ,/aצe4+&"OMC\yb.r~F/WP\R4\u(Rڥ#8V愀jG)a\Ijq1bVoB7e牳ԂO8_V_^>6Kk]Ngti;n4{+/mM;`/iӤ5bЗ\Wm@ඛo`oGjӺASbTz~jȅd_rHՊS&j<%tEGNx")")xM y]z")Z&7t'L%C!;#" ˕KdTDQi8g8v$8P:{ +.s?:ߝgSQ3 op iq%.>X|#Žb?^/oK8deeAcD91Uxs~W\M  ̄g%=KC@Dɲ=C@ "/DRZxJг[G%n;nc[ 5nU:ҷoW8>/^m7\GhzSΘK H~"lt]/×7* EDXY|h B *wm)sB%@6sg bzHyEw2wTI?s&kjOFz:F+h;a$Җ!X(H<۾x<Oll,|H+Dr.DR1썥K~}PqO>ys8O?`3?~"Jd(Nֻ㧅 1`ʕhu igq}#۳{G@6ū3},-)SIjRGloa3\Z%'xߣܵ+B"?2u$\O7#RM|<^@;z+h},ó` wggMw=ƫ&G^@su||^-oM FW3x^i_FZiEL|͢mEsU\j _zUgOp'D{= yc$?|D-5|-_~UUE"kf altLakϜ:͙S'd|Ϝ:͙3g }NIRT:s N*42$3>}Du9s*`ʽꘓO%iN:Ug7'O̙RHOO'`F0~Ξ=˙3n_䤜>*,>{ΝR |wyNj_ꚕiyRff&OCc4\(6N5}0E+~}_0xx'`XMį ]Rh#q`.QqBEH.卺QܔM?KQ05L_$ *nBx͵*E*(B (x耆DJ E(A2!4`8!@E|y"ȉ ިoAij) Ѓ >@]"L+4XdE:d>žC'En(#fہ y%_Sv)Pf! /ʕmwaQt{OejЊTH* ,6Eg%,\fÆ ~mT /[M#ϕYroXPטQDX/7Nzh˖D*6nFC"o"#=x5ɪիϭ9!r'alΞ8t` =6ţXo8/TW&ײ5' ~řtbc㉍#&6(Ԡ׉\aL(WE!(2O_,FY'N""ExN(`YȽ?L 'zJVK"&6ޕFcva/ 1qq-3ᕓ_x  c']^2jU$.?Nqϭ pMm[zbalK1ȦnKR/eQRm9-7^ێ,+KTR 7_%p(L??h[\)G_7Iq-\S2S+VQEQDyD/ޒaLK0/y x# (븳sЩ’CԂK,qQX?[G1{!c œJ^gc̜9Ȥ30!'*]kAK/|Լ ChB$kecV͚ 0p$_̔)S?a26f!=ԭU ?,`:y2_V0edO8N"jrgps,^h]cՃʕk2e:~iflti[h8B%RY+ U\B%DTi6F"ٰe+>U+ Lx5 T+0ǩ8~-[7 B}Tؽ}#7l`<ƑٺyS'OeuT/q(~Faْ1USYd)IlްoT,kW.pΚO~o[Xb1gR7o1sphn_̾GX~VX7!?/FOGqXX05/܍w%tAH38ɳwStz޽'QN&Rx5U B]iKZ<"PJyoˠܝTTm[y誂u2{j_]fxS Թm+ztL>=qkDEG!NVW`ڕn{pEhsEcwB>PF Jh+qJƍ1niPN-lq46OnӷP-[.#\ JrLi5R^7imWBBGh;*M^bf#8JWXAB-Q[Se[61Bݣ+KVض*$6Z +b8*.~T,BJ$*TD:uڽ;7B-ʗ.ER$49*6-ZB*=sAӖ-UIvIWtыXպ&MZPj\Bv-Ю>_.JvmR ǏlŪGU^\˚EQtŒR4e*\UrE!)Ieu Pncb5%*x4/\XDJUJnWӵ[J)M*l@Yij4i!Qhڼ-Q2CЦ}GtiҾSW⽉ցn]{PL ZmRbb*vA ePBj}D ixeK4b8Ç_bAJY<3MLKnCh֘!g9u ͛5ѣٹo=oD]ứ3x n2Rh2:ņ<_ &I#Hu9ųC7Ic0TLF"$pN}#*[<\E z_a8X S`aHWbb-OeT+TL%=F`w4c/c-(8 WB #6 6АBC vP2扴p-*;hJ`#ҢX{'(tT4QMyehV4@ԿrTđ ֻ a;`XRTQECN^`!B,*бĽT222 =3@ffS*QT_t4Qq':U%x3BJ_PEءF'"T:a%8fsSCJ=FMl\q>cP'O5HlƯ-rytߕjsWPH"K,ܕ# MS)LJfn'y|ܬX<"o{HHJgΜOR974_(Jt?捅ZᚒunYY18pq眘ᮝrT]dku)#({oP!ϽN۶]\H0rOfznl]4M#99ҥKSB*WJ*T %%BSrrr%>+W.O+WL2{LQQQJ9n@?7!!]󔩸|K*_4!ʑ(xyϒw@D'NbŊ\|TZ5")RRR]q;c':'Maʔit֩>tr(I<2u#q%!I緽\ ]A@%Va;"t*)x("ys> T,Z )8ħJ6؉ 3ȕ/ 5b574M AJPgM`uV3|ɺA [@brgyV23Mc9tK`ubU\ް1~V K={ӧ^8|T~֩El\PT|Uٶ '}8a"LaްƄ>MW| &''pPÖM k14 ,GAAQj,:ٽ{UkCgdVk0gpX EдsI)M͍kD!xCbz*Nн#En ?Ds8?FB(l5k4P'M U֯)}4oM8.TE:L pPխ#NTU _ F2n$|>-?[ ˧cdy}L\O3{R "ȕ %%"KLJrOII Lrrby.羢G)=3)OJLL"))DILN"91DX{O2II| 6)${dQ$-r㺕g:W\Fu&V3h ^ bРA 8G)ȼEQYl%hZ7Py#BcdfqC~l-;eÖ(yq \DAwD/﹖ if rP\ Eq8>;$/[D,(M5b5sy| |Mw#%E"lmUx1&dT)eRrl6&NB<`oi2joKRZ? T0-e_&xa Gf#޷<ƙ(CFA'NRJd@⏓$)|*)9Asƅ$% ~/ȫ#^) BaZV .D'!O'asB\ׯ+%&hm^>*yaDI7R")Kg׺:lXȑyqd9^7f!/SW!FlsrBRtD?)%KݾB M8{d/+@52X~ߏ@'R5-/'d!tDU#da;{A[bYZ]y:vFAb+nk!%qˑC #aٲX4c: qjf]tQG0?7 E IUGGbj<+_ J߹6.CuLTɷ㦐q}1QcA XJvN ?N8rs^? fS>s F3>x[xnQ]1~T%nS2,GNUM6l]"mիփZjž_7$k׮Cزc^UeXJBRX̘> AL|LXҋ)4sXHʆM5w 0w|L?ƣYKՑfe9|՛ֳ`J0 s}E+lr,̓!۴c/Yv;V`՘ʕ+lXh ^]c8z!Yp62;ZjOF_׽4m 0Bd37o#͖OY"4ŋQ2҂Q$|qn̙9EXx6Ɵ={HːQ$H;uG_T͞Z4L}A&b hgNq6%K~P<= &1i$Rk] 9| ~t̉-̞1K2o8J4ODi&0IBbl 3~8N_(n97waVw̜rVBoHޤ#&5$jL,E^vAzW/lǹ{n4j49g{Μ9s|W%wcI+Q% &/,ٹtٽ{/Oa5L1EaaG|'fe5RēpA2K< gPN)Wh\w(sӘVw︕n Bԫ ԭ@W=/Lux(l3z5rØX" eQJ ɦ #jOڤeaKF 5b̨,SޣgtwIIO qu^>(;`K+\y47BѺ];\=L+8m[\ΖqL'7Ez.(!CkEЪe{덋uv 0mB\VBTC7t4EfԬ]-;Ч{G\Щc{l˦k]:!hJ(5ѵ[O6n6ڷk ѹCG ݤsǎHSyt܇"C{'=z탫s/o^ eP̐=}>}и~}ѭgkwkp"uk4iܘ$oBj:ǵ]:HSwY}R5gPn}CԫWd* UDRTW]OR7ѨN]!1rVģjF:UqM7guԭV1 epBl3` EIKeuC>&2ӫD*듨)ԹC(#99o;sw!\'v˸S |+“ ΨoBS.cnsC5ɺ62W6Yh׹'#]K+?J dُ Vڃԋ#e^eV^uvD|3%xZ $c ~N⿮qcye4GTݤ\a FG)SWJeǮeI$J hÉ(ɭ'ppFq>O&ЅQ#KUh }G hthͳ8W=J\:n4+|Y**a)] K_upёXFbaU,č \t38xBGCEᕧxUP4ωfz-@Jٳ_i>=sgϞ-;Աg?O.E˙ٜ=3d9e}]|>8s -g,[Ν;8XENN%9;;s>G"l&??f'0K*I[w_KXH%_>I2m"l!]E6Y0s"*J_X9uLUq/̘0"rQ" @_LJKDaD*Rx?@箳_&ZU">@29?GTriIJ+}_lx $''":MLL$99x@+rwqN_?ǯ}~;\֕++% ".od5}͝Dawt]4sR'.?zWL^>@.iq+vnػw?S B)($#bœ+-DE'Oi<~)0h83?Hl]l݈֭((D)DYJ3次9P1W"Ջ g!DGyklݺHS!֮]Q 7 TiB_O3ߞCex:lp;3z}(m6n܈'#tZ%bXBǺk43Wpw`?㈴S m j+D {%оʹFЋ{"fYB % JMErdv!dbMYGK*GOVJ_KJݕ'@Bƿ/ƽ"{[1 p UYl=[wI;{HA>D%ٽmkfޝ||R C Zt4)$ !!GfB;~3u#l "E|zxtHTE9{:zQr!\O<KJ_JJ2 h"D[<ɫH\Wٶ Uk(gUn+TZPvҎz$8t(h;ͮlPV. 5zqmTB|aE[˅Z|\Y_fjhr%l"ϡehS~%}T*VNg9*,RH)+T4q"233IOO'#-t22H == HK'==4222HK -O|^LW#=HVZԗI ^=5ߌ̒c3בF ޏoTNݵzR]RybFe+/ ũ(s!WħG,P"utW\>K%\CJ򊖜*prcˆ레ڐœGG KW6}3o.J|@')CXW*OjnD%5mDY*/R6X/a\ a^NظTZ$^~4cdBisr/bq[*&rԀ  @ ]j3oᒘB'êJ9 'S;F*1;;TG?;ۇ/ج[ץ\[DBKKcU@yVl-`E']Km؉#Q45cTR#P8p-D]}T,(qĮ)1:QD{UVҒJH\N/. ֯_Z(J Jh$h.׮AiɀDZώCJlٌz,}I9|r s9|Jk| \Y2fuţO/GG_<Σ>ʯ}UѼ,%#{z,K7QBƼb"yQB^DËh<6òPw8v0k7nIFqtϝ)̧v|əg*U/t\a a3ӔfϞ>ҕkADIZբ=YF2Eɑ[Us9Bly /YB˱1m ӧOg(Bt'!alR0Rg̢K𴰟 J6eC\ݺ5aNݷ.a>T.\fΙ4B;вes)LN& m̎af4-'$E؏'KֵO[7 ;6u*&O%/"Gѱc'[q"|%%djS寫hݦm43C\"c͚_ЪiSMS; ׻/@%pm[)_%uӥ]KtoqHN9rD4_O ?ώ*.ՖA}(sRK.PөSg4Oid3ES0)"^MҧwwP.1Æ$+k(-%zRm۶٫J9h #e Rj)W4"eҹst':'2Rp°AّJTIhټ;q#h&MP7\ޤ )a \A͛Ӫy uKڧ˯lôiPtiժנJjiD4k*UKIt-.So1o@4IoX{sr;JrO_?>[<4\rxoJե >O!AEzF*=_c7@B-Yཀp|c"555b0{oB0"eZ22/i*>q'K+3M8vXP9uOJPN>8݈xi,[H Ew~"l} HNNJP%(A\aBf!@,В-Vג~좢" A JPB8& BPR[A["5u$pT\ԉҝ[R_`2.wqzٶ8a皜?8ysU,\}_G?_%$Uؓ^k2c(>͐H+(40C[!͏%܍?S/r_͈޵WX3NTF^3EEم |)xsz +$]2.ǩ`{yIswsR 3@KN 4=ڑS5^|wvwsʄ t&iE3QV\ߋg]N;> ;EWsy409I,p=(2lteb| % o[.ER!AI5opV̋OsVhK I.+jrӢ 4N'zE_ofi^XK.oMZ|NWwcڲ?y0ЕB pQT Oh(t>bL6ỏr7a&J($RjD <\a ]+d|v֯g?F0< ;zmfG+aJh:f:PJ`I:W 2$DjԾ ?ɣt(-(4<h8٣{xx<_^U]EpI" y2|mHi^brpB{ҕl](WH4^M-CxMFb᝷_;)N\6okܯ@yɧ9q,ӛ|v╚ ߬=Y =>(ּXt激^P67>1Wʌ:t<>+ȱPd|' 8!yFqJdl-tc3cF*UK(QC%ס_PXw^߫=:ѹn wy/xҶ[tƴ&1G+~?-S" vVYŖsOd]$w<.X<)?Mkک+x\MpD[֬?|eJe>#\ݣ?];wg-E,Нc&:iFϮm1b850Uo$$a3N15*5;)"A- My?c_hָ>!A;9<eY_)U): iOo5YfL}]hy}laF C㧷co:O5[O_;("!  >ݻk`jEHjȑOyYؚ Lz=>'!+@8y;G3"?G,8K/4--`iI$YgݖxB+\Q|j?4Q/Ro~p"~=G /%[e"f*37S'k8VX}Z\~v:9zn?8AOOl*?">S|Ep?#E)5EP/\ŒVq2k?{aˊy^acFpv~ay7@:zWWJi\mKϧ~z5yg~SV,}?{^o~ӏ+bZ1RX) ˿BϿb[n(eG:5@("V"'eKO}58]ɓOШM[࿋el/ejIҷ|S\wS/]&iIE;bBʯ!ty//qR y^+_Bcbg~Ւx|W,*~^worrPPB OT~!={U48m|8ǫꯨBrIʟ.|\|r$Z嫬meIs-/ MQ$TTJWQ{BK[2C /R۔xq-.0A^iXs} jzx*\(fa|H/A|n:͸f]+j[I%x(%/xףfJyygR/S]A_ӻȆ}/* )ux>t"}} ]🟀.{w|<|Q[C5<%}O9!cMzqdŤwR153gz4.@xZI8'8fNH"|!#䞏tJhqb_˭!le!L$F+ueѶI.l 9u!;غ -aaY,'6s>2xqnJH<mgR "c0pu@{C+0=vӔ~!D4dB)Xcd6nAԢM{AH!nqD Ǐ&?;S>tL4 iL}0LfM|O|4<%А(7xe@8v6qˇX ݠOF 9y*ٓLjX^17đ&MHi̛>$"u.2"$\^=KWf0 J\BRLIș u+PzMVs'Y8=O|l]سu5ND-3 C77c&ٿ}=GOgZ!g/G$h$4@I+r2eˊy* (***E*$jQXXHNNN)Ry\pCIt4~.KbP*ksUHKO%=ʤu Cju5Fr=:HS߀ضMh׬ hGtvky2ij\ۦM0SEȱp\ÆwHTO#h2dH\biXzm LjծOJr"k%9%5둜Ƞ7`5z<+Bu7m1t-4[&< ednҒIKO"$gOѢ5dV Y7ކD|#leFFf iWOe؍wR3=3䛛%qwy' FU1h۩;H:Uyw0=]8 J&UhXc͚`0wq '%L 2$5hа3߰06GHXdt'{.F]O0FLǡɕux Wh(giI ԬS=`͚7IJ͛7IJ4ZR6hѪ#喛H1}nĖ|˭$UqPMvMA9xHF6k$иY[25Тc?2%%С#5[ki޸:*.ikK\Y96cH,Hݚ5>;=Ӵ=33tm)Q=IЦ2BY٥f/&%7@JړkD"|)׻&EL}En㼘2^MbYΗ/YvG\X^i.]mS!JҺ\QM[V-cU6g TgNeڕdɔwȷV/&[L}-Μ@{x-Jb:|MkWb"]uA**H D6)$#5oJܹXX7>8k`Q SyIA<抍UJӇ+t ¸w`}-PYozKtL{ _7`u$ 7Tf]JΥ W)FVcK,7' / G Dߛ_g]D 8q3f`ܛ#,_o"4 #8vϞaٹ WE#„Sѕ%+QcPÄwob+_ծax|^z 4bמ]ڛXMkxE̚:zE֠ )zJ8]T驳Bdt^zm;oWSPTX>9z OhaάXu\ƽNo0{ͫ™sg`c`"4wnf7xg4nbϺuk?n<ӦLcպMYj86./EI4%/a}W5!t[+c9}.eq6Ŧ+x屘3Kp)N~vW_z}dm[yh">4 4ٶy=/2Ǹ^ͷ'`&gF&˯}67ʫc9u$7ndƴi\&|aس_{}ʸ^c=̜2^G鱣Dr 6]kl9xx1Gum޻,\ϓ[Ȃ931s3w"u$.?;`)ݟ'cæMdˋIL7ჼ>-Ng0齷[ݻM[X߽ǃ0;8h9.\Ȅ oڸQHMƿN,;Y4X$_ dRwK:':uۘ߸_??Y~u=p*Fwٸ%>xNQx ɺ="V\i̜1Й>}*4b P~;%Ds%U*JАeV"9m 41v (QŔ{"¬@񥔌*'V&\Lg|0G%O6s}knIナms+1+kUBJl.N0c@UvGo$QyCI` NְA\ݺ H0<0f>=q +aylݼ^|P._OJ2|H<^݆B5+ذy'o4mҐQ#Fpl.w~ I0\ݱM6v :z>, 3|{;?9CwckatHvMw^;/¾!\ԥ;׍ƶ2S&׆jsדs<MIӢUsڶiKN)<ߣ^ڤgӮ(aG֓g)rQmƁ]9y} 0칳j߅kB*׃ҸA Nвug<4mdM$7bѵk&( Ι'C$IJ ѭsG֬^ɨn"P)1z ۷cM7sh #>ϐ!((*Bя{S!4hҒ;n]H,^LZѭ|Xy0z"oqJ'9L֘)8n'0 /cʴY82-[F`c4kaSheጉ,Xi(m~ecÆ D"673l\W>ϜԪ0VoX6o>Veԩ^"B&Ŏ]8y{vm؉s eb6lz2(XG ؼ#4ddt+In> -e}1E΍ٲ}/ö qR oF)bܸq+XuGV#奸qQd jbYxJrݘaB4:mZ^ll-#I:x`pu뇣rh,pε=AA@5p4Vͮ$!*)H!B];)'`!۠17LWp݈(i0b0$ob\޸#'}w!yFXK+c.W]يao%XkԨ[-2ڞ$'Qd8`xFVڹz(1piۦ#^ax[AգIIe1Dz%YQMe9tܝ-QZZL_f&ukU#t ""6t~ eѣ{:i F@>},kzwXMkҶ!VW"E˖(S0+5#!1L+"- ڶA( :USh2FAILJa$$'Рcn "r ,z˹3gZrΜwaHLѷ@"?D,V,]@~NT4i|Ij6WlKZW6e? > Cfa*us3$g$3`0gJ!Cs pߠaEYCYM pzMFJ\+Ju21D:wn]nsޗS&X٤%Ǫ .WhNUMR5=3,+ u\C>qm i\}夦ѡCB!v;Rf@,$U3jrcW=X#= gΌ1]Wk, 4Z5mBUiڬ2|')M\2b e{HØѣۻ/:wE86J4n؀Sԩ]Yʧjz4_*둶IU ~'eԭ[X.ڷnP`̭r DΝ؎GpMfQѷ;A8?7& h1dsveǔS~1XIDeurvgTIB{ԩ)+TzʌW?,Ru]pV/O D}Ƕ]\$%f @P^\XBhbBKC)Egqnt|XHj)qf_׵),,$//\rr/,qoTV*~wT8`E/v=nh-/e!D\RIa좡H^܊';kx"j7y\ǸͨW`?W:ƅ$4"Jb,tDEAXa;/42') \hq OFD, L0Dxcqߕ@L8sxoʼ6%D >If\ Qcy(k^_#"%tپ{]C֫~_͊kq5~J(LCn&4koTJ d+WŲD,R 5k֮_UuRB!h~lΨR1s{:yQ?"'rTayiQou049ff)S8̞>"ܼrr 8z0.TlI_UoHa qqJCVJxsڐ=]6sgM6RC yer%)5<"y9)46N>OT쯕[j]/B:|&gˡ-!wJ\<yx$yI̪|$8JG <_Ң JT8([?0*¤I3p qCRpϫo"zo: LgN~h|؊ǽC}7qoG8qߴS|8^zM ص0!!ر0g6\:l޼q0e!f᭱3aLfL:`hvM&dlpMLN"AsشC{>Bd㦕_ed K!0E,tl GEuÝw]h~EC+{(m&W\ٞrwaxzK`GVQNVpZ_t=\ǣ]-mM.'b ڵ~:#0}zwæShtEzF*;o׶؞Kk!;ŽwNݺuQ*Lm:t0Ct35@ym۶hߦ-I6 {ރ<@fW`&jقCC6ԯW'7p99yԩCBSt֗& .c,r}zAhv է52pmxy\!q4^{b: NCS.7|}zZI)Idd֠jj"tplL3fG\[TdА&$0HINFS%)kAfԯMW&5kQ5$kV䪫[#ȑ#qN"3=Nfk{INF4F]ύ#е[W@V԰J'j&4A#k(`?\ +IRPPq,_W*G D -54Sv- ޛ?$h3cfʠg>܊#u"Ҫi{y<|e#0rOg~uc?BfM0|oPӦXnLV'u A$?GǿDThP&KdԨM8lڡMIuL JPL0 J*K4*:.>cMh\8ALAK ^[l|Ų|Rvqar.e\*]X6z Dq6%tҖ+qVm#H\\rrsiJŢ,wOrwWl𖽇`YEضvi炼  ksKˋ6%u HpΔxBN.l L eݎ0)dOD"fN ]?&__'rVl"ߓ$as.;&5K,[[Kaq8^׫8N.z5'^zfXzBj`1\"cp 27Xl%gOcq8EL0ǿƾ}ݴ (={vo0ǽ{൷&`\^;qo1s<y9p0EyxNdJaEx$oǖ|2^|uoTB!RRRHII!55p8_oDD"PTT{Bt]=g'+bN%,U6:_|q"-Gj$^JuU%;o*5%,w>qڠINJ__﹇P&q[!;bAY(~zo3g1j(g9m܌;o9*m%nK12|HO̞ENJPf[MN'OUtZs7 {|zлgOǍS' 0 dRSSIII!!!⾾-0JH(ޯȱ7izdEb +_7UDڈ=Q 5Qs(kn9wl/+.f2fNF-DBD%J2/zwߣeJWIi\!Y%vJ)L3DRRiR-0UJ)07dR=tzM}04+t<'~~>MCH~ٗ?YtJ UZ:̞1'\ZURp. 5Y;7A{azO_2eo[3ӱC[ ٴe+jTGʹ07 .&ɡhݢ5I>3{<2͗i߲ {9DfM6ܹ?ϟSEWǽ<e8{l]sgN>狔u{̙33Rre9ڕ}6ٜ֟>3es3g)[ʎ{,¶X)**)9w>ܹsHXsHq1M󒥜WʸFM~ӿ@i&GwvqF$?3T ÏAWE8 s? [D#<@< ~/⟸;mw&4 ^>䇄C|˭z(c>cEڵH'ǿDÆ y{K\sMO~P&_e jqϏ\u q#?9R_\V?$ kͱ/2~ۿ /Rz^&yf&[7ey #8|z".܈ē <>>YTr ̨=)Oañ[6lVA{UVr"l̟5{>F # ÊTݕRJIˤpY|%[:MX~#Ba]0gT,_M?ݩ!$ҋzZm:TYDC`xBh [6@a Mc9Hr~0+QVb~߿gsMHLL$999VJ_?"+$.OKy$d6lr<D TN4I*#k&H͂ Ui"yy⑇xН6z>? ~u;ܟ_!ljN²5cP>π0R1([,*l͙ "MvUIENJKIIECh.b%h@ .-xaB,^+)r5F ~Ef1cT&N끑B پ8"aڵhxҕHe3o \˅êeK,^CGÕaPs̜ S38y(Yz57.[nŠAZeҳG7B!͟baJ>ɼI0u.\@(̎];ټe RxlܼV;~ѧW76_i30yy<kbj3ǏtZnp`r}! 6n܈Äuf:km%֮%;7LIyVZ,>>|W4/MX/dyzؾyk׮б{#A5qJj* ϙ1,[%e< sgLE3Y~#I)TM29}6$_ÚK8d!p>C^#~ U1)3!?}u+fR9H{nflCVd͹sqt6!abCu.HǾ9/Uw pW\iRQ1kdɛ0ڳMX':c61}lvl^'>Ca</Bpufl߱kA˯@!A}vȌ)3gV>:)} c9 MQPXYٷwH͙=k:>=͐:g}%,&Oc^ti?d=L>a!'%KgwA&Nt؞Sgpi4#-3w4݇@a+AZF:aӗլ]"ۡe+iߺS&MӣGCxh \mv`\?:8 ԨY$COƍX`&{a6eiӮʵVtkѦ5h^'Of&FI0^B˱l C(`-nfhADzYx aS]˗qSV$/\NJUHJIc⥬[$Rah2F?ɮHMMfudb< 3K8s,ɉɤVIc̜= h<̞Gs(***d8UXR62u'Es @3M jzE#<ǥ[k6BH2WN8p(ͮhҴ ZjCidfTfֳ}m^ڞ$&ru6<ڴkOp8K˫[STOnI'3rڷmCbHЬekH+"FfĐa$$'ǪKLLAhtI~ֵ xѷwO ѬE+_Ӄhۗhҫ@e$kLdѴj݊ᡄ଑ <`a Bl;R~Sy~klYoЊLOؒuMWVQ>||I)+ELXRLʦ$oR^4DW]h{3J.ߔ(RhN HRBn\<-%}-kjFBBBiDH)IKBZZiiiWMvZԯ_/AhP65"== oZ*WB$%}!EU}yLDWq]%$QYjpsK>e vԩ3/ѣGdc;OVbT|lߺ)3fa^*jed^sN&+->ĩpv)B6/Ų+2q2ܽ%3Ga݆(iŽ׺ZDܽ&qpذiJb$Hpٶm99:Jl)4pA\trX`!~BJ^B]>DvN~E̛73ЄMkYz-0>+ucJ\WiQM2uHII- 5]7b}K(,,$77 Ԏ扭lT!ҷA*;FdÊ|y4PhD:]Oh\ָ iI_Q$Ҫ9D\ Vpߛ+UQns1avUE.OcƜ9̞Ff:rpl-ڴzZ0UGnN!"t'1\‚2Yb}޽8{ wlCMlg#7''<qpq s04X46/fڍ(HQ%5l!fr2]:wFkߞĐ/QhԬUr?q i&"&>܈%2Rl_q{H4j_h";9^6W7G*/;  @_iSdVI4غqs&2;wsϧjժe#9,]̌T._32}3fx{w`(Xl5f JJܹYS>RG ǔ)PAbߧ'HKc놵0܈CZlزz c Ų%+QHʼn㧘8a2iԑó~TIa=&rщk3q»F 9S>zfk֮ 88K/gl!>;Eմ B!IĵLwnq,YȚ+@qLyxOV5OEHJLb޼V%jZc;fϚ˙'Xh. >{.9@IL>}ҹELRJ6nȪ5k1C99lZM[6ʕ+9KQQ*t8u&D<|!]ْH9sbx[WxlYWo6S6=UkPl4Xb9wx.⣭Xc+ @8yZ5:nӜZPYR1r͛5n:b ݺt.ga=Ąrm,O]khXi)TU.ھ=h|yCBI 0W6q,ΰR?-[ U$|iߙn];ҺUK$UO)Itڛнk[LѠ~ÍQ&ZX) yƫ` p]k'NMb ^ @_쌌 2Kq_TMO#==*dnj3K37&x URw:HBFz ԓV꜒Ry?==*IOO'3 iiHKO#=JzʶvQ%gQJJZQrnF׈os~@@qTו.~ǖ?--e;s+.Ub튯/TR}SpA &N6@%dX&(/ol*|;^|{.UGoƸ"))\K)pMӾ}TB`o$;6 F`.ms :  @.|uk]b]S~T'US!>qrNc?,ٕM]%d,_4LPS'D"6qq"+ԩY+^߽ڵ2hݲ) j{" ϥG~$WGwހ! 2x'^5G~ iUi*ڃu)(♧"3դS{L=;op['qi9)%*VՆB! .E!Hձob`f3$IH{'rΗOS D){͐dVfE)O$ 5IAJIV ]RPOzZ ༝H0pǸw !],Yz%GgSjuL!m^~c"bŒE|r"*iI:} =)!Ɋhgر;v,(A JP8~8NA %3gpi,"\}c]PPpVTΞ=?U"\1)3"gO'~KD(=vmYœ>=,R(Lx79SلB /'I o_5crql̪[Pz,^σH17S @ 7Z⸘> ey +w +9p ϓgj3}HXx\CSrPHa p\Wa(v(te2@&Alo'nJ%&'0Qs  @@+Xow&O~_= aà[24޾%'_w4dɬ֮;O<'6n^ފitl?]Kzi(0gd [\-Ѿ]W^}]zbͷc&=;WkYf=?Ϲ{iۥ.ٮ)SϢ?}>]A?|Ӱץ=&׬9-Z4ɋp}mCnY9qԳ ]{]aܥKVoeѣk{x ǐ ]z3LtocRYڵ c#FnJ$O_ƛG,yG0{$}Ak ؞ !%) O)mHD6۫91M~W4"p\(v%dz'nM /&O~>ܼK31d7vATwv.YLD8E@(Ka7~'~8? ЇM,wD$bun2&tf,b4YG:󦌥cV<, /Bg!!zȌYyݷN>#߿a7o 8vp+_ƋIL= DQ$x0aT D 2c'>jZLGkCπ擠}{㸅D.{~ܚ3sY㦘N7a[g70 }Sq^Y:[6"-AX=,Mq=Ҹ_zzL3*n>K-[}H߾[/BU/Dz,! Ky{1^/q,-3'1s ŒS32elj&n3R!HD://VJZ>{o+gO?EÚU0@+[3}|-Kbܩd4?1y͗L兗_bi\V3 =f5T.nJnnzh U_¼yӹ螋R&?[&L{g5ML-~+}i|jJm׻D߷x"W:Vh UB(E*!QeqŻy U6)C ;4)TH!tAB*~ńq,~(1./9H*Mϥ=jK&+ -J.xQ> {eFT %бc$D|Nׅ{eS}\/m_B!Ir0 Ow8WZV||i W~R/GT)#'PWҶ'kyÓivؽ+!"@.)",_am[vRX'4SntߩI453kaPY&P \ai8T>y, Qrs}') b &Oӟqm4CL0GףDίS0ǿnT}W1H<.݌CM9Ly=,͌:Ov5SDbE|v\Du @_d" ܷ[)`%hH;ضi Λi,?eŋ1MXj){(ߋЄ7c&,5|[dK9}a2kTi0w+ 9y8{63dC)-?GAx >ںwDr88EB݃iᅨxLywpu Gnn.EEE ܷo U,OwAIV-MZlK"w-Ҳ5^}Ŷl\Ӌf NH+@% C-\Ѽu,ǦO\Q2YgptRÆYC,U6ԯS5i^V% z_;s}#MF1jUI!j".k+`薅-t_w=µq oD]#="##tINJ'Z#Lڶ 1[МBi@+[!۩N8AGSpd 7a*n'I@:Uq]lMy<MyQVE,FZԶ" {/1Ie5D=gbQ,.ecɸ x^dRʫĞX Q|%6Bש^$Ry鉊2W^LkBd׹ĩY)Qg5OhF6ŎY:`D*}u,_e_lǏTgWߡT%O9CNn>bYVmKn[n\e(c3v+}&qdJiWO\H*y+ly~" %E[8,p)Gb/}q <`|ħ޲,W᤮* 422kbHdAhA +~/ ٴCTL/>nQ ,?'N7ƳvӶh 3'ys{,dz*я;Mf_1}4'c0q( !"L`y]֛Yj=p{2MNKcA6o:SfCG`/S1;oƤ3Y8{/❷1al&0nx/Zysƛśu0MnW^/xlڴ3m4VoJHי9{* f¹(ibǎe,[])֯_x{vُiJ&O|ޟix_!MC\ شn5+,aԙ+c BX*ı'嵗^f͆4]\KWB,ټ޷ݻwa̙ÒKLd燛xq(=Tj7d֬x{زa Oa߳^n9m/::K/Gc_~h!t0c$sO):o1mJ2o,?gbҵ9sgX|)BHϙ`ѼLSΠ(R:eBsaƿ6|ĉǘ718{]7RرwH)#Ǵ4'vqb$ƿ={Qeڽ; !4)y{ܫ̘3K8w>)ëc "5^@ӓ3Fb+Uj.SŲG6RR;jU.b&J*,TiVֱ.WCofOڷmŬs=: ;N"0qg]rF%Iw%G|z.~=;<=y3%DL@AX6t3l"y-^?NOUuwuSO}iмm48)x6YFLΝSy|{(R 2?L˩'qd ȉq0Qcǰ'L8ㇿE1*׮ϴA>9qY#(,,ĶllVS%Rȑ2|0h`wL8/AC#00*UkҷW:0eX־:&N疛n$77VtLS2qQjm!tjݔ9o ţFmnZcbZ4d`^`oochޤ!㹴nӆ*U+W){t8UH 6*;SfuBG妛;> |v[~K>ݷ]0hh_XВ ׍]Bxp/~L5@6W>:vuˉEؿ#nu(Yrn84iv9lGaN;w_\bG`Nn._!@ j E!bIDÄ,[XE }iޱ-۵o8R1-zB0M*իӷN;λ[=z4~SiҴ%4)/do5zx|مaҺ,?[cNoɩL8c_ᵵk<چ%<\s$Neڵ<$_Iث1s5jF/k6bIxVpg`2FDi'2Ld&Pse\yDjvdkFģ۷' 2ałlKG>=t=a(ңs{*'Ƿ %z(DFػ>tK0c*a v0:vб="5 Ö 0ի'aн@hޘZFcX4k߉={ЭC;,ˠ Z5Cf=4iŧ2rs[ E1,.!K/m=nRmL +YXcW4p<]s8tÈЯ ˠ߀aTII&%C<_P=t$$ԪUHòIILr(J)AHN 2`x&c2hH&)ii>,00# 2`Pܓtٟ1x! 3mjLCӂԨFINQ&cc!ܩGOįĜ$k'W7WCcK؏G\c*ЉJDH5oyB6܁fϦ_Oq5O:N|D(;d.v=ݬҗk/؉sbѣ3%*1~8Qqr߻69X:nuUFHvvgp<>xPdx5L/z>bwNXx7E+yTg(avTM NB"էHѺԟw5t]{9' c9$%9wfD{BDY8IjǝO'ZR)Czt[_ q(R?B WW,Аqǂ)HbV D!k׼e*xa]X'n?Gž'<`ۖhq5ݯGYzΑxu 6bi֯[ģĉy":[J={Qe+BQ4^]AO>pX:` >;1p>|a䑗{|r 0ȞXkTJ{"O$#}6@H"-Ns*%&-֭Z:OcLw0 xOl ??v}1b;q+^%J,T*-ϟEX8"OA|uH}b Tݽ#*F\psG3w… ӑ=-@S .X.̟wat+1haӦ-(|MPQ̙O3}H>_>j#X~Y&y V:јC!99s;*+n-^Q,\p,\ UFXd0 {xq`a'h9{nT{c =N(`HKb|f&N?[O?ˉPL/<g9a#XcKRb PLQزmlZ死QnيQ`} bK"lٺ Ge;ocv. X|ANzGc#>?s|7%4}? GqlO͎3Oسw3J$!/h4LA>;@$/ʢg3g2|֡^Xxsr>WxQ0YxW냟hR^ye>"w9NAn5h~^[GPFAI)FFNs"be,YxY4o-H) ݱV.~9KVqF/Y quqbiFٽzL/ t@>m{x8,"Uc;~xy#,… ԯTŲ1ñq#3ΘAQz*M/k1Qܵ xԩV NÔ)72uW*BRڥL GשWFQtdg`֭Ld/2@5!tFdQuG ^2cNk` I.pK[21{W^T+KWXV^}`QzL9r(X00bD(ԪWQ#2ۢE%(m+/'_с/ya9z9g|/T%psQn  "Q@$TUzxzL`ֱ Z1k DkP]tN !5,@g8kC `,1+?*v))l1cۃq;'0^1OWv:s%3A*BE* :^.++HEJǷ)E !ebVEh Ǯ]*6Pڑ *R(Ɖ۷XHE~-V[~_PbVl"&6LNr*SP"wN^ qPhgOH<Aşm՜aHQ"b8"V6@$Bd*B+W~BXteRe+FqllbZ(c&cAuN'P1O.=^-4Lpny 76*F/n9ZKrT\Ad,ǑMR*V) ظnOEvs9.pz`e'mrEf'.x~d!K4.Yϙ8)(PSɢvN!W` ??w82N\"jBGUu"g Yb-Tbtym"o~~o4 G$)y\'nxPBef8@!77Ÿpi⿆1@ֽwC`(6;^Fˍ=wld}jomq'{{]Y=3c\Mķ0c, ,ogA3g=ǼФK/dEH#EA~ggXfMɋ3b|d0EGNE/YsqPD!3gȆ( 0s |Ca6l0W6 /ls5#83K7w0b=w2KxxnQ)qgV݄x<B?K)Q%6+r_RI, g%.hY\Ǎ_^i*|5e΋iuJGtpnJJzju&c[J\&5+dLlŝdQ0xWjđ~n:Z#6y(i3^GaPK2S v 0pLoPgKc:&u}`ѣF5nJ[U)%>䘍X8WJJrTȩJRRP$ (v .\ 8pB!(yeωAO<#rJ^6]R= _p\(9(E6Q27+.T+,uT~i^`xۯIII.+ ecˊr8zN !,3/[YN):?u++j̇^$V })""|Gd8$챸s `XRjP{gdʵxzoRKrq a0͒9[EGSKP>bÆxw{DNQ[/_Tcz "F!O sp苃|i,gDst\ JEJ+`P&\WA1|p{foo1e>|KNӸ !*yGъ-X]Wwq=!)*7+T/:%iӧO9hη\*˖.!*<ԭU5ߤG|a&TѨ[BlܸW׬)qаP>/IR4G2}ƋB}}Z\Me*pPB6sEU4逐EDSƒ 9q.kP spW,^F+;9l䫃Xx1҉ezBCC$ J޽x~s|ghpl}s#4`*V,T0m`Z*U+%aiO>,m;Sv ͟+(f FaUPz^=C%68x<:/Ξ×_~Mjj*Iڷp"XEJJ*/͞mHZ` V> + ШZ6^]bْJiUY8qT\*UPJe s c^XTJIFWb3>!)A6kܹsPPiԪUH~ 5a͚5|Xۤm6T]Sca!qUT^GfD';{81kM\ѡ3~FH#F QuM14b( M^RId 9HLZ֪If=0l0aȐتApU !:TW*]˸Q8!= :̡mՖ=zꉮ^z솮{޽RЭgon~*^UnK8a ib'_Řx^6oFz1 aL0uG6-U7jf Gj*òF&%JmP|hߙB#@=0 c&{Dt0ޣ'NAZ>6j?㲆P*CE3DƗ7'qrsUE߁4 .iܒNe MjUI [ժѶݕ7!óH$RxHIΘQT^ju.atvIITNLr )  &Wa jԨFC8/))A:uAvm\c+0x(mpΈQYtу$)WM!)dUSr$SΝU-&UY3HNĞ4MWs#n$,Y.\88!'~sQ^PB\H9rlչĂ\(?A"BM,K|m+Y_ 3 $E~~~-"?x۶ybjQ~V]K8J$''xB_(EI|9$'x3t)^g\<@$!΅ .\p\dly,p8\DpHsٛ%Or>ŕ< ʐ3q\^6.\p&pH4l.WZԕVJ!A JzkΌF%eyνa^^^]A y=ԻaMp…Ya?XLG w^G"Xܢ (7(qo]"/%q0P-x=|\psS ߟd~%l~Hs6'u URW V,D$B p ՃH)¸w4qރ]p]?;_' ׳ !mp8\?4e;$.hru %,m_5aoP^bYïp9sN Xu+,M**g;T r۴M>ԍN:Ңc !W|H^{aZl$[tnے}2ؼ}Nc׈X4m"Zハ>1p@ӥw?cG94o՜esylQVM3(3Pf +^Z@Ƕ|#̝3ar7ɂ̈́,g '*%m`x$03#Uh׎ggWҶc:k|pxб[:9lK.X(LUȚԩ3a@::vj˽=~)2Yulޏch~"-~]ѦM[NY1ܭ['~ŭ\;:?('p'9}wJVmɷ*X-Zd8¨i֢91پoƟʨ7?SO-50h@?n͟-7qtc4nҌS.qX?.8_Yxi*:vsh? *G;ThUñcG9g{>:"jUR⩠N3T;u"&@*TMO݉4{dyDOBHGp4<~ﭼcwo,_ƃ9w>~)yy<1lyI<~BS >܋+E}f֊<ݘAHWx}u;nICR$[#I'sD6$Kq ?$LZ>Z9M'3^U ^tIrdtJ'XU쬗WgyK0l(7fM篢C:0cbhuOQ0}2T%K(̧vnT/.bZ h^ ,Y>/<$W'ՠa\ZNֵyʚZ&4jWT/NPt=UΝ9FV]V ^, `q<\}oRlG呼۩.m>`1E"l;aƜ'yt^ھ &S_>nmZ4$* (7_=`7H$wz "X;WEӹWt8je>h$N,]i1D! _%>L;\WHDWwرe#;l b/ ěT?SI|Eɡ*XNi۷[5KSD7t{ :4<س$A)3 t w뺰U,d99SBwg<= +Gxb0. GXxmWlBN{F *toՐ3oLp4iF j1QmR;L&i 074, sY8BVz #dTM%=bE؎ BE)ES[Bs%pNGyeg[) T|%E9e洹SFJ\ ,4t[ |=m{wV4!GD&̥UtmHty% ]sGeaLQHUiեE|a\F& 2q8$CtNE,vd!Ҧ)]Ctoיko'zپ$;c(ъb5%DWS9Epj ﹈ 9OR~_hVD;Vt \LcǖxYp%wO<m[2ٻ/&gǟW_?@Ƙ S`l&0'ٳ)~" 5맍%zq=sN'Joi6lm}E˗b杈Oo';7ɍL@KkAw|{(pLj]چi6Cs"|~-[H!}p_Ο×~#X"F;m&nyd~o$;w?`ksGڕx`L6V-ai˛TSY& LP.:1;Dwm%ڙHj/%'';⿮/$: /0Ͽ?xDE0~H|_xЍCgP)CQzEbV_*C!r}Mǧtփ`e\ ѱ UkgKu.Tͩ͢Q;DmY7iܴ!ujh >Ld ꁔpyhX Lh V>V^zeId|L5@ј|-}sE*Z0sje_Ϊ wZ. \ \ESD񜙘(J_W\W3"CB!Ϋ<Õ)zu:+ JJ*UѸi opu`U.󎒢X{&r **  `œ0 "9+(YT b HQ Y@P "HƙݙeQ9}fwSo\rv?w*^JkS====Õp… .\M… .\p8.\p… .s… .\pqF8y5 5H… .\po$p[.kп>ӈITp>-eD90D^0[ȃC|~7?M^?gjt>ͳvyRBͼNy.[CD?cvίݞ26TfbvcyGJE.\p?Flarؽ}i7hEEЭ{OƕKYj%]|!hAF[np-IO3hXفK9D.Љ e)^0#WN*\aml /N)l6YR[yC02)6RȬ2<(a (|1DS[XY&YkH©ClQb!Ph!0iΎ9mBOt -#o=E)^8:-L1Xy's?{3A;k(̬w9d*wY܁DVh!%ٵs…  )%|aZlESǾI[ēcv"k ^?\FPhxqilaU6Z lBZ; F8!DXMk*F4ƒF!6V($Z( Ͽ0 "1>noW뷢 I@#mHD!^r94~+`l,od=0 wɻ32ISxR * ˬ8zz5/v۠/6e&8M|_:|OLߩS:ޏA O[jpE\]0j4N[~|*~ɑA$*c^d ~)5tP:}@"帼\Q" # ө!d;b,j >ɧ5S')s\p%\[D.$-97^Mʩ\Rd%8-@kIzZ*_xZ/YrZH^ɷຖdU~_/`7m͜}G% D[z4`xH}^ j#PŒ&YY!O(FV_3 _ch UMWH7JPg’9C+4"a巬YkWsݵ1t%LV:2@!QhSfXBlh+l}2s:n~fHdd8m%,pE: TEJc-lX5?_Qo`qa a o2%uRZ-R[9Fl\ O),S?.K2*Z9uK]pYI^a Zuq .Jbt1))]sYa3e/MlBHg$$c$| 76 :/TvdF<׋_b< ~_vl|f,xw$u߱@K6Y#47@0&-Gco1MS`.Z\[52 L~9 L6 )xҫ( N j׭I=qh&Nѭ+cPfbD{J C)\ J=2ę{wt%l3R%XJ}+I1N!BF9rM[︟t|a2S^][߯]E뮣^q7!! 7m_YǟN@QB%w.UWѨqSvH>zoFW6fSX?ұSLxknቋ)y:bPHCz㦵`JLBGnܘkđRv]?`c BFakM6sy+1WSPaԩaԸJޟ>!-5W_UiXi]pO,lF2M5FhV}T3C(,#s>dά/ycXqBiPvG R*> VX¢糃H;}[o/ /q$K"L}xPOqo.$P*(uʗL RCl >gȪEsws Kli7+Ų>UX&%5mB烮ct6lH!ƟwI'DoWy:/R{)@45*_P[n%뗒JBEHR<ѱCvOaIc3&pxW5k˻d{㸵xSFuwV WXB멄D"6&qv*Mw&N!(}J|R ~JnjҀ 2< ,͞Ouv]VaHT:1%~20|H,&6w=2pKO_1k,_1wHr@NA>-VmLd&Bjƽ}Œ_29~\u-L|&gL8*?(u̞3 6Au2<ݥ;"#ms۽13y4lpʔ+}'4[-c0LV|fZA |j36'8 I_e;lۆ?oƖw0mR W^y%%Xl=CDЦxOxQ?-kZiIz7_oqhf Rpyy)/[A7@sdvU: sL,V0zHq#Q~=6hHkHiF{ >`"X!=v7U)55ީ=ʆ1/G)-}L`[\[)x]wݎ=75JTaq5jcPޞ3PyTmu|'9\! | @XIsڊ M/x42̐ xu ~ lپg/& ?v߆A lZ]߄rIH}J%haWy(mi~.2*U.F9v$dҠ!ƣјx2H2DJh'>AҠ~mfm:Ij&a.X5$5۰ϾXō6Ķ-t= MfԼBhcT<:x\2V %V-V<'wlЉt4ݴt$䧟Ul\/#ZƑ'A, h}:k5!b qλq% /v\qQ=qݵMYn||MiٔB^L&#hl3FLOV%ɒFaʒb˱L~o6=y0Aok%q]y2)YR6)W,]% $犺xkw֬5+~7hx"X :"`I"Nã1mqEDp4!=9֯O WJ9Zn͊SiP.u45-'&qU?vPNmou-&T\OúuSZJvb٘a?',"Gn9 )J{cWRLTZp 5N<7l4H5 Y?&-76kwߠa+u"eAphqg1)A-8^!E%g6u?/=uNFԫ_ڍoD `QFB)ڗ%~ݨ 3lu,LxuԹ!oNguSԭ߀+6A$gK] .\Ϸ_%t:Nz*FmQ|*ݢ%'Ym+җvw8GFG\vؖ}{}wby֭Y/3e$*LyxGo~\5׭M;YCdVF mhr ;-eÚ,_JJ ~ذ{h)l[ѻ@_uk̛>ɤ{cwKشzWo`͊/IMI%(/>coX{,I0hhkV+^bWt. xap~y"W֯`Ӫ$mРf _e_n7Ĭذv%׬f iA$(’30UzՍ9U|>ʖ /ņUXn+ld7(]8`NJ P>jė9Mk,߰kt,`oXn;\OGQK2~,2BZ B@ZfUT>8eV^U_ݺ_icko0 )6׭箖WBB,_`J!%!_!VXF0%Hrk澻ڒZ?Zw붰~rHMΒR7.\p ܿ9 %2Jf~T2R>:'A.ˑU .ܺp… [(S%&t$զKWgwPY:I4<Yd6!DBԝْ/fx< sOb2%oEEyFڳ()q.B΅ .\/l$b \~K럓Uלߟ/7:~ْ$-A]s0ɿJ ~^$ˋ6o.\8۵JQP|us̨@,\.\p5G>H5HIYxH$d}@us]B#.;2̑f8ϒfęI\əhZe.\p! FN)N{8`p"> ?`DZ3ve8`p*C)q8Lhl8.\pF˨]KJZӢ>>b}uy]9G=*eS;*3;y8'{qv0 >OJɾ}HNN&==k.l&55__tl k׮ɑ#G#Ͽw^ 4M8|Gi"_G믿"  wΝYs=ܹ!irx>y$GY~GZZɓ<55ݻwCG1ѲJ12L";?*2|)*,:;0Jp&{3Ea"BxM+ĝ}]@ҩet#q\ΣvPkEXZ#dT̈́eXΪ- 6p~e88WpxX?]wkNy]v8~͋!fI>yHB'&$<(! AHhiPJH$n8RkIMH(!FD}&LިH,E਋2,ƬkӝsN 4$6TlNfrΕyv~Lib !"*+~W;?!M:gANBygH"buq}lRI _><@!:Xy33Pvq"$+}h!"3¥*l#,,Q\E's+_J]Nf} ~vWDžj; p1,mQLz(KZ8湁8Z$(͢/Xz^, x/2 {B?bI(o|>+7;4C 4?@Ҫq"fIl[ֵ0n sat4r[+Eﮝ1+HX؄+H';Хkg53&"9Un 6%utizvʱtϰӽ+Cr(Պh, ontѝcڃ.]TLׯ~Sןv;'; ?ҹs7&Lck#d| L:uSO< xo«tևJ;ƓO/޹z[g0)gtލ#GWO{b;S6f }):ut=||1UOwK|BR8'c^ZXYoY}lwaaѮѵ4xq{؏2G:FÒգ'"7*v!9͸b؊1͠iHW=̃}t: zƣ$\&.4y:s67?ދE Ğ;!p"ӫpG ^&a ΋CGR9^oH H IV._/`׷->f4K/ĔŒ/:,;}b-@ nhs?mIR2@4@XB"F"$xuCFBjˇ Ebے&W^}&v0o2V:5]dz`)E..S]-"ac CZ"CٱF՘hz%7oewk)]&JʀOO;#zM3"$v|Wn-(6BF$]yE <ۇ$OEHmٕ;XbIs\,DQ"~4g % L1#(ȰC( 0’FavPMƫR>u}0zwNOEQv" )OJN:K(xy z1\ڄ(B#,*U.deha r bsϠ #uK-LOA}2⅟s hbɮ" K,G#3νӏTFϯ\ٸ1/Q6$%j*ė `/[(^"6~Le&Q`;q,_IH*G ؇΃2nk|aJaϫ W:mc'Lʋ3gZ"X£ӱGj p|bRx^ՕQwh&O5M1to *X0)4*n]3w|9RZ-経| 3 ;f?Ȱpwr ?q+6,dN+0*`6NЎZPhaxѻܗqoL&$;`M0ypGղۧ#^aKw$= jOOPx~=D^iǰuVW*'Qlq&=  p4nȣ#cҘa]ͨėхm;c,%2۵uGf$! 'eoٴu5{KҺAm6o';0j5f“("Tx9-gT([BE(QrLŐ{nY\22p^ 'Pԥ*K 3dyYٱU?N Eظ.Rl+Ć+xggɚ7]n Rr6>d;`ʻxyqKIѢEHSi!2.rbdȖ"/,]v;HG]"Lwl_QG q(ŲV3o/B`0?Ɛg09._NZ'P={o < R2wtM'O_ Qz&kme8~"0J+W;5h G⑧)T:lQMb/N@*O{^T2L'p ]FF(㜬q"H7o 1x0w ;F_pYy|d2LWrW "( ۷Y 7G5qtxf?k1)┆^Hi-aN<`FK{1xU'lvvW$K`%R(A!DDRpg{LMQv=yHJLǭ-nezwF||\ƬD+$m4KhStO _<։"iР~8oFQJG`qy;bE@&Ai⋔ƧRi ,L,֮^E2QH1wJPxaai-|l;ASr-JAempa'%Q)~^iJ,A!-WgoAGΝh{H[l!%IIB6Ey%HKITʖfyy( oŅUPR") Ї:j,ԒAٷWא %Wٿgf\!IHKRI~ .C)ZbI^8^3S)*RS9v4 lt;0sBa5#Ǡl֭^IJe'N*MHP'.!q-?ʅբEif0}(Sζ4$&Ok|& 6c^oŒ1EP$P켊`B6A[zXQjDm 6﹓geY/bqq<Pm)%Di[XÀg0gɐ~⊔f)fMTA&zgڠXT^Əm[K M~y'^t1+?&YG؞N,-yɧy(U:O|C{8p*茒?c||۝Xv#x\RV\)Y0Llebj!MZv7]z;D?@Ei6!J5ys/ixK/ohf~1?nȇǵtWbyxq8^^493'xA8LCƒW `Rʥ~n } T(|EPB 3ۓxnokFĜ hӠ-O˫SLYIF2(ab`e-4a0gbm|!L,0᩶-y'X qq|m RԨR%kЪm|6}=tf}LzC'1*д) ݓȥ+riH<Qha`j ϿGwoW'hw| uE݆ P#a`smm1jkM٥? 1Mmpa"9\Fϑ; 1x +la ּ={AZaRfϞ%US8^3m8lYl[﹝aԬU 2Eժs: Mߞ9M7w_װ/X/DS(Bk̄Ҳ]~CFCػ;?Eƍ#2UB(^#)^iB'ք1LyZ YǾ΄w?Ҫ5og+v?@J iҸ>|%EbDJ(f DjE3l~:݃` hn`bg<գ+l~t܃n3gyE /^~!MIN3o,G1C1Ԧ2ߠWl]2頄]>wŧB"6L͇gqN"$5e*]?w~ݟ6Ҍ3c'9@.P̚ #_ 6}x*D;}ǮvohLȖtixTq/&x4% KNkYLގUo>O…ZYЗUK2LIv]'=6 .'>-go@. aTHLmy+lq] g+>F5etZ H{nF( xs>?5ȝ-{^o˕Ȥ/`.Ä7~AE?/6Q/%U3v(F}+V7&3` Xi^yy$`S%<׫C"E:=ͫcޤM\X26Z7Ea4{omFP&0n0ȋ_dRZ Ə|ۓ ӳ_?teȩRdN>T(UH:*{{no7'00b0f=FЛTR<# ya(zCrsIBKzW2 D(!M|_L%/yc8/c|#QH 81=ŀ~27I\u9Zb۷/q2O2^~eq za0e˖'q[U.OwBJxnMkv3>x{omEhߡ_\j_ɰaxC'ƏKDr, "J .)Sbz hڼgtvF2cƾ7h7BpK[^3C^İ2(wQ ^{%5#x镱_=?C?f8-ZĐQoRxy7|BiGE-8J}<ݹ=e.E[㊋+е0Əmۄ Ǐ X4>PP ӧgORSxy}\V(L&LK4h~'\SP0Dp饗2zP/NX>Əs%xsd?BԠGތys2 #0אi\^F͛c_~ͪXMWߠ{(ț#_u72t+y7<4ޜH?f,?^D0=@fm-Y^.2xN\J$GǠ݃-)W(P|B B5bXׄn ~"m\2FT"7 GOQv9%YF ƎԬEfa`yqJ%/[lN|waIV˿dsYrɖ|Yg:Qdz;:v51=T6^Qk-ڗJaDHRǏrK4i~}zSD*4X#)&,.""7n7q*,̫.DxҏXm99O#=8Ec'6'Y]:uYc'j>ǹ̥M/I!yJr-ڂ؄}OYksC^<$ulyWykta+.I}b."y9s/s3b )DHymuq< yDQ*TŠ Qg%ce86an6p-뺨US]_:gTT9 j$tUЙݣ'Rk;bʮsb9ɉmxuE?bŒ^d^,aHBL*{=:HHx(Lm9q&XDD; 4"w:f]EĽLڟ,IcqEa 9U9?;"ƝEl"E&=Vc9DoTIpyE!r<XYB,#4֦8Lb?_qODHFEsS͋12 Xd';R17ф(Ҵ|'t{VObz[;Go9r:D喈3?of{0ә_TAˆDO"<'ϼDgN۟!#9IDA('D3Ƽsa6Jl'W:.bucIdrrk;UWm^6a\,bw$]2\6+,1nٛUBծBL/D̲TSc #Xvs /殳!F>'$MSgT MT(9!rh$N9_3{Hw6(| jg]+P(..\p'pNʊh!A0uMZ4BE\)3ݓI@\yM<ۏ7%2b:,ӠReg4az@kY;.\p?FҒɯ1xFM7KCa8Mt0-;+ND'Box1  nD\V "4)4: Zc^V=-cvZ7g}htDDi(nee:AB\p… 6;SH 0HGc"5d+-XyTs~C2qdg"KJ^, RRTE@"D/<,ժ5b˚\W5ʗb΃-4sruچT*));%SJ-.7_b{ƽ9_s3/²ͿaBxK\p… sd<ئ #`ۼd.o؜G1` ^/VSAsT/5+xmdF<#ʵ\YK~\üٳ8p/xrG[3h̛Lx9fًivUUXʔqw/0#Gp.\p…K\8MlْniS'2kR!yo.4 ҐTt?WRM$Viք|ʀgh|$g0T{[G)WˊƓ.A H&7WoqT+tߖ .\p8e{DF0'##[_ԅЃBm4v<1PoO݋z=WWM7w"m:>|'?xg{ ?.S Ю}'j=߃,.\p%p.PL 0@ɲTZSr1%1l.XO[F~x+hk752m$:xZsM K4v ZGz( hp/u7b{ y'W… .\΅èe]<-sJ}ҢUkHQ:%Ś54/%9W}… .\E5x-2O"1d:WϦr>Ӹp… bpl%\W%@kt,"#Bwn… .\84 s߿xA%޶]IMeL^_ײ,8}t#t;b|O'dtt.\h/g%p%p9ɒBuPg^6RG2/"S+xoV!mKj'=Rʬ}>&G||@IHM`h0EHR~rlq ^~v_7^5k'MLx6B;P.\p…8{L 1Ix~${ !ډk`01ػ55Vv75.5+ th׎zz/5!0.\p… "pa7^ʠ/1tPaC9ph\%Q3u mlƿ&Fe}%3/8KX`68.vCf_Z{"lbsqUΝi|Ԏ=fB]]p1# Ң!j Xacg` h]Im^ƴ"+/XB ƫ3ȴ[ /u^-=$e2ˌ4 Xx, l8d$^42[ү'>kh Ck0<3cZbaeѷw_~{Kvڑ\$,z>ϛp$iQ'"Tg9wc=Q:<"tp⿒9MuwQg5@#+ɞMo5jgX<?5pP#PS B r>Pk6Erz:JB"1@ 3,0K:+ C[& h~Z +x[x kCy9[+v#nY_PZ !7k1 7_~2|lذhO{zx ؏UcS&@aa *3?ͻsXt6v:sfN SXS.,&7Y1H؝Zab\pbJBj'r0sRm6D(랱Hޙz.\?&pi -{&rLp~i3};2#0v<{|'),MujŊuH=F ڭxus}xq4ӘޛS]z;x&߯\FzuyXTXZ% ZtGgGo~Z~m>O$.>#p/t_| /B*(UW6C d¼4yԭAt&`y͢gdw{qHca/zWI<(y=y'6Z5_'pC 员ڢ_NdEf/?MHj'N4+[B@Bsϭ0$H,(#7͝D͸6o& --A̾^#Б*g6вeK}KzXa&q2Y`W2t. $oEv.ӿsjzs$?"F|nbkÖգ?wܘ+|g6-"j;#Ɍ/ySt|:?|C^EjJ2n~AdϺ=+|0ՉęQk[.R87mrQtue„7H a,=`6P]DR~}\v1:֍Yf Hl^Ո;<oЀ I"qz{;x'LJj&oY! ,Ne|ɧX[D]-L -CTb!6^p76c0qpd %֌.VźpJ,;#+.Z8S*.RAvKEh-Ef/~}^ O?ۇ˵7\K dh\ES$6!nQztzW%RNPBQ^-@:m~ !MfaWԻow_mnq/ wg<ݩ'oO|C_)3Uv-ҲU~7?3ZĎ ߐ+ߛ2C&6n vͷ`\x0}xrܶe=t{% >c[S CR*8J[tX _|={~䆶%3i 0Wy}Z5x漿hE9SaED0i x|8}=z0h'_9g#] P2֔89Xϊ?ϼ G ĩΫ\NN:ܟ6ȁwǽ>Lfȵ %xBB11/>CZW}˴1 •xw֮M&we hס+OwHNI1 k<CƲ~L<ݧ f(Mgˣx>54cǼܥkڛѩ#j"=*󾦰ywGЃ^X>8ͩ4|,Z8?Ҫ3Ȭr~`t!)[|rl6yҭ#Jk2ˢ5/_Dm:AI سɓBId#Mm%WCXdg$Ѷ!!X3Eg@`ힵ p{j*>x}@[N0DiaK}9P!mη1x4<4ks){|e9M1cڂ%AsPf8V ZR:\~yHB͹zrJT̅*`ӣIQYvt|Q@^"ܜҭ؄%άg~D;vDur[5YpZgt徿ِ0Jf%upl{oHEiU,ܜOi.\1rYZ1E<,!Yv# ֬ em>֭8֬^AÚHU_bYv%&cϖ-)$?lǏ?nA'gثc1sq^sǟ6 "VId#Oe٭)O])s"+{aɋk%ש3t!sp0ς pfnGErk͊OG\dp92NmL] s67mI :lWOQŰ22CZ5n6y?# uk )ȹBfMYYT` 2,_x6(V FWHaAO^AgzШvM1 $j5xogլ]rE䍁TTP&:?WuWWG~)"LLj61 xDifhtIڏa!M uĊ3b٠e8/dvȜ4.Zk{T.JC,&"flGJ[a1|lKn+W$%5#HAБDm#@ q؉\$F ^¢Eغm''p*9# S(Iu!qB;muF[[Mh]@R?r1%.\p8A~ٴ!C_xʈ2ts $;Mg1ݹ݇aLm_B^5y8B3+ՓC4hxU}?N}Xz-CY'luxwRʔ+kQBE~?|,+)s_/CTp"xJODb֛c{(`ҤsKe̞3%_#CL4+ dΟ8x0 4a,;$ĤIogYrJ>6î?3e, 7Nd{I1|>!sJRJ/_3f6+WP6L?'8u)ɧy{;vwߞ?albޛ!YsxOD`y1?>t&3?ϲ+$}i?| %sf`7Njj* ЊO?zaLy#Ogd'|jR0g"̚ŗKaCR2y2#ER{6ޚ!Kc ˖1a̝=勹sYb5)x ѣG5wʲVِ%pD2Gɣ|.v(ė`b>1OgF&RKrZ!ޙ66m"-=)b%Z_os ~'_@(Δ&mv//O:pm;~QlYy >d^o|fWL~=vloL0L|k T7@=u?@2圐LdȰHl:аQcyA,ϣCW}Q|~|2`|'Yˌ__ԣbBt5fM {;mݬ \Zfl}8$qaD&ZKҞA%Q:ȁ0E7PjH9Br0o@Hm&/}P墋)S<5WC ~޺_TV.k_EӺqaZذa ZL’mc 7#Ǫ˒~:*TdV^hځW(4A-GhOd]Hib+V´S8x0GS-~fN=mq!gi/`h)@{i~S3=ЪrpAҎ %hcY6mec C'i}˭\:L'(}8=t>2ѓ)hI&4JlжMsfYDG'g@g~׫˥VСC)WNQ\YmRr?r)oOfmL|!< ^/';PDQN9%<胬ߴj670"LVeMR%JPʅW 5/>?DPFnn ;⚫RR+ލckfRC'NǧoXw>?Zu)W4;d87VS\n=9I8< q~לVs-λҒP @Bb!.y~[ G!4 I~?r8<َcȴ7 'FHHH,DՋ/G ?R!f>|6w%>Q;vlE Bm[H˰ q3OʕhX;qYi&`ck<Ϗ)+oe^j]V+PJ<:D0`}xGre^OCGy R9t( IN"Gm,(-ye+CQdIai@5qk;IS\݀e_bl"K!D.9;fpo);ffcthgSTt)!TvF:S@no{*- NEbe5 8ó3es  4bW;YB#i,s0$99dBii$''UX^*Y;Dj3ۿDvH587;$)G QpaBA7U C&75$eW]KSKyM25d7ܜPТ)[ +֒2\H8ʞqr!IB<|_+p*V<KڍH&pmpǝҥבڠL;6Xqǭ$/AyKBsg[mmh';Z5Dʔ*%Lj^QVqݭ 3>.u Qx1*V)޻^X2/L smKbQ=wBᮻ@moG{ mXt-l.J)A\\-!8REl-BlrE eck%U*bcpE{vq^{ivTvR([n3[Z݈pwX!^TձImڴ&6P$1,Low}q~/D"~JTMyiѪ%2.&MF &]OՈ+RL!U.⏏o@z}Ң9/G*E˪Sd)mz= 4ir-%JVI/-nj4^{J)]לMS,Gl2*qIՋi!ϕӎv|Fss-JO潐 <$o"rrKtź R$SZ<"6F +"j6)[bd!A)rU{-T]S>?gf" bk>m4i>}@ 3HNN&55n;/ĊgyvcL/芻Dt)@ Br-Hma pmPB80ǟ5zK0T@a u(F~3)!QrrQJ81P;z%ͯGbLSdڟi!1X02S;ӎGb!}͝"aL2ͻ|Hz # ͧ|Fxt6g>q\mc -o3?%C2q(dH͢ٳP"ƢX@UV BE۱%7ݷ BŤY}0Jϑl\Ԡ-I)c$򌶝V$9sfI=yU7丗"7'~?, m[WKIIM#-9RQS'8~*0h8pΘadFWLY>)"eK9MDnpؾ}'П: "cd.B qjSC^mՙ2U% )?ʈ𺓹vyʶ6#V4gRž_5U`˼wIy ǝmoA ;\]~#;v\DF\ّFBϭ[5s>k,LsSk'"3uAؔt3yspGH=Ss}"# 8p$JPyVfE0 BX1#q6AISi"&R,94a:rm*\oA0[+#gDRZ S)-)B0yb_bI:|>k"2Z7:;Fh/d#7’b˚UTZVፓAf%m4);sc,Z 02DMD͙Y2[ "^}5m&cz"8nhg'4pJMFQ3XM1ig2qkT 2&swP-larhb'3"5yqkQP5Mv^ﲟ5[gVi"Y·QElb=O禳xEO^=C^}59yE~~rv}v؇0LlؿZvG9x>~t䣏Az A~ٟ~'O@,%x%}]zGة%M!}@1gc_rp6VիVwZ[z'&B|'xbւ9g)lݾ2Jlq#^!LÁCؾWl4NbQBԉL;E`E F C' kLe#/kHKGk@+Rgة)q?Heyݻugf$3}Ƨۄ-LX B|4}.x񗄄G8?{uڇm k=T0>o pyȖiWqysN~(L"v|B"t+[*z`N~{ ܻ{:*U&gV}nT] e64g^hUMAN4!(XrKi$>Qrf]d عO\;{1҂qfi"r@+>nI)]8iO|l~v hRRR9E-ZSG‹i/DPTBKl[a j^AR8q~ԌIE(_ vrSfTRN'SH)^+[n|KfK"(AiK8ܴvYb,[/Jf~>m;߭\&)lޙ<v XüzoYz%V/J>16aL~ i3ywD6m_zz}>Dze+y VoEK/ _jeY Bs&);-Rt˖"fx}ς O9EҭgC:@*D/'+8!KμU7nbh /O?䂋/l>.A 9XD -o)Rbu|:Hv+U E@n~st߽୉|GiB |ln%O~I0%㾶|4֮!KP\<ǎ!uv\ue]ޚ8i!/?obI>u(_|>c` __wdʔ)8z媜Ϭ3C;"s>&MLJ@Mn)oʹ?czQJbe'02HЎR3Oh|L?s^$46%V`S{ªkGb^&N|?U=pČ[` -1c`q컛I ![X2Hd˲ђpyf~tܙ{L1x35UO:yk~ۗe.Ha~IZd?9pQG'nvptpշ;gyo7/rq{ٟ~n\8(Ұ}_<ē4ϱx=M(/- ?9d$Qd[I<=Dm|ѣ! Zжs7~! 썣2ҳO?4Yay8|?D̚;]ң<IwMNH uA^ȍl~QLD, 3& fO$|y6oMA=v!?#mZ3y՗JKLɓ(Ӯs'f̞Ǥ#fSɈ#2ܹ2f  >eim2hp )dD2{v1gO,hV΢U|d0VMWX#>Δw!PF&>$3y6[p}>8t+%bh!JѣG68:-)(*Ǟm&n6Њݻ͒Ԋ.Ζ}xEsy'Ԧk52-۵b77h 'Og섑c|`6ʜ{t Ϊ֙CƉ2 [Կp{önjyO,꽧tnҐ 1ԓSwmSwm۔QVVF,-(ph8Ph***())Iʥ\?A}f e wщUwK2?ElٰChеZ7#ߔ{"?S'<4k< MfĴd4kݞm[a ZѶy-vrddf1gTyi(mѬU{g61-olrZЫs;"ZIB)^{K|^Ġ6T.ՋvN"]7[=TggzוlJێK<,xq/Qܸ)fv|ǚ\(idjfy]Ջӆ$` 8qMBX;X M2Bii).9<@ib1JJJH=#M5Yβ3}Li8j<٦E :fIw xh C(laa0`H5j XG[ЂpgMDKr9=)UͷOuΓ}/魚5"E椥 O/)G%?tYtqz]#{>ҷpi%}ܪ\F~ =ݔdӁ~qb6唗Ô ,e~\x麀u++(--M ҷs] 91;M=pujvuX=)EA7`_Mv=W 0ynCu̔LoiZ:S[v+oLɓ:AhuK-8 UYQ^‰gR&3WӳG|]ٳcQ;E9:N I RuSRՓ:7ptB)\AVKk!پq=ǧd-EdJ+TX`eK_0L.qnii)U)) Q)IX_}\ǎMT_2ŖO(e_CxKjHh\TBU{H~vg]tyL:F@ڃ_,;h W^Wu@?>|4|(zAJHhNQZ!A$ z+Wksf>r" gѱmjHu΀.jj#4M֢ G1@;nP(!che&eQz:T3"T[J#Q@`]rQt؋{|i熷)vYRhoH-0u4ю.ɬ@>.{ .&6<#uLh1{nƧ. AyYeeeرtz@Sq =STI3~e"D(f̈aH2vk=޻jcX̘1mtݬߚJHk<)BrJKˉTUZ0:q)F$w'7ܽ:${zu- m7A S'O -bK^ 0شuoz '/WÓ.xsSC{ew"6{w7 %nUEXnRk^[{Bqv`ZWyBi2"'OnbJ+Xɻ[v"=!`ʥTF˗,"$vx7lܰ3coZmu5\ExaWrk[orMΞ=&[־AWJަ"tʔ=I+2po:+{ߥc6 7ôLN?ƚof-ѪJN^a ஻ 3 HZiC0rJ yp^ͫGɡmGvmٌmd`\,B^N1L&NG.ҭ  jպ}"@)4ϦJ@BJB(\|#åaHlyCW^%aJ@F20d`VMJ3lҵCs*+8z,yYWвC7ڴm%( D1 LrXĂYKIfNڷbhYA(+Ci̬05AktWQ:*/Ͳp6LڶjƍMBؚ62/ȍX,0ڴU -Z`HJ}I4j'g͚a)p;$33-ڵE^gϒӤ! uHvz֒Bd\/i=(Qr-EϮxuL[Kp6Ž TE(jޜfY*$-!ƲXE˦$tUa&+Q8 Zd߮=>s-{&j~~+tѸn ]_|i0p_@F8iX`0X}raW/fj+w_aq4 ҂WmSin]?ǀa#bE0u_[N6Z/1e%JRK~d ﮢ"jckŴ3xYd ;cŲ{%ݶs&2CPif-[ShqV<. 0x/F. 2y{_L(y58fҴ)<_/3z ?jiC_>˷VxRZj%R oB?|UBhi+ ^Jyg9{Z+jͫ//1v AK_''6qm[}~; 1ˑ7 [8HV.ѳq(l֒_<!ZYFTi"T|zg-VY;v ~tv{ЪuKvn+ p~*["XmBiEv-Xˬyw'Z5T*Ե+mk-4 1w{:э\mRbh$Ϝiޢ(,՗_aρ(>E¦6x@[B"I,ֿ U 58s6m!IKfNǯ[@oc7AKFxYeϘ ˖&)6|Y=a[7?DMۓ^IUlPԕW}?E:>xo}!@&?ua!yGQ W"քC5+$Ikx~&*?{6o4 4yO@yG:}0X!ya({ɓ'"p1w>O<8&m]RqWywĉC>Df y0xfIDm%b- 9F0pX?0x6!Ё\x3@4*է O<@^݉F5<!4gӿwgl#'{ |㫏3s, Ld5O?μSO=In|,[3lG;?"?*#7l4kו'2^eAc@2x| :iBRԺ?0w ˂%M“O>EV?a(0_O=##75vzчm1w<NHDeѣOo&LݣMĖL1񓧐aGhQ`L<Un߁{Cw2mKЛIQʍEIcѶw&S&ߍV 0e8`ʔq()jނGaN`v>Mr3 fS˰:mבY!,O;;Y~>y̙7Qqj ZyQ w3e8Sm2exl3@&HoҜ%;)5^Z5'Mz&OB67w*Rjbx aԜȍ*zч'0hNG֌?*e2XiӦ ~.L$/W>A*V5'd ck7YC*}2sjQjCU$=o5WCqqC:5&g׃ScW\4!A hTVV&R!ƭ:=Ы!Na6LK_9i?4Έ/Z ѽՠ&yokhʕ/I}\|1pE!QF6ߐo@ ^vSS qclN\ Ŵ0\Ri$[cUe\t3E7Rޯ܏N%`Gl %Q㋕v;k{8eM{Ŷ Bg)~VVV8x\JQIŀwoوc+Oh~.3?pRǬ2A~/9Sfrln GQ2}{8d8[~cF3hH6>̿=`SPU⥅>Q<}.0y5Bɟ<8*d 2o}FdFi`?mK&7|rX}C;+WV"\0f.NRq4G,[剣T'ԭFoZPؘse p$k]>IOu}#UnUPVR^K(nWfW}ݞǚ ={nEUUX ۶bDQ=b${ٯTB`J)**\=IlL]J:&z"h>xQ 9wxpL!Q5܂@C'Ż| z> |+_7>q"Mm gJRh)0hΤ+̈́À#hޢ 7lӊ9{6r/Tx Ufy+m'6RIl0 !+M6KP*?,RUUEee%UUUD"$ V!S%gM$++Q1䝦]uLDJ{8hY~N }ͷ3@l*Fz֢5o-À'`pymNV-Yx1NNƟE deeeY~|LAFFلOljwGuW+|oB2k7b0 f̘B~VdVj5`{>_`:f̷O -?lbgȒ~A0Q8lsu k캩 ^x53y{g BU y up*};F%:>~uxͷOnNP;<]Jױh=sL&{j+J|\:ЦD:!{"\~rVZ_ٟCO#ukV?s8.O<ž'z2}M[xG8s~k@p9?eoC x'>x`v;W*1+hS~S?zf z~Q8|$nfAݘt}з/?V.-ޞ(o'gws;@ش Oiœ8?ɿ{{/Ort_iNHva~-(mQ<-la5[3Thժ)s<2o:dA\|*?GO]5:vhef=1nH_1l ?{JYg%A7`w|U5A>dzG#X9?0 0Q b)^IreK7kBjEVMW]y5ZT]0z *S#PQrܖSA I21N]qV={rt>L.'D*&MRW0x:'9~< n7 M,Bq+ y 0 r$2?z{WB hax |r_|@ZE%&NWAt2[  %Z{]Z0kOjA`׫PZejR^J3izM\rf.I7&K'6H)-%\z8pvH37_)Vq FJݖn6 dfخT`]|o`-e:WGP*'5SZB,@$0a$II/b6Uiϧ82׎i3o_)?䖙WԪ- W@M;3oP^xuUen@#8"D2BkR a"#ȊUdvJBP)$T,&Ea&ZS8>&jC$7rQ#W*Lw 9vNWoo/{Uq%wQXLؼm")I>yp':KKz"kMRk}uD  !9Q].6GcyϐLK7p5C$QDz`.h]BP-?4O]Dj"uJ[l.$ZqpvnV@iY}n N;̍ 0b4`}VN]R1T]%?W5/ʻz=ay^9pFYYXU'\:%߇»WVpYlíwYo5͎ʉ??3"kǎsPQ:PZYHo$IO8^O1A|j8%@a0 0ɇ*m sL^^4b] 5ӣX~q/{;v1oUk oKCЮbbvoAw&V*ŽV# 3R0eW@(4p>_85 Y5D]h-*4[E !bK8n--&bbɲlܼa@ei JYK.cϾHC,\2y;v,$$ߞ(q0-/Wp3';XBec^]*[fj.]+K:c{=$';R+ ^FI%yʂ\v}{wf;صG罍Xv- ]{H h CDvm©-^6aa(իdmD+Kٸi37nfպw*ŋXo)A(?Y[@`";3P89x6l ٽc+kZ[e?v7w6,ŋyk WzQz`u\rnwtdvزs[ĩsI/tVbæ֮}yah6nȚVq)N?έ[Xf JnQQruk˨hGn;degfۻe@#tWn`X{Xt7\fٲ8ZQU^eK8|4'Nd޾ǎQ`ż$&Z͢%˱cLE !or/{*l[V*j;9y6@0o9&=zDb8֓?~zt+ & ۶J.-Efv RϦ@.°UzJ{HG[)2[mGcn 4 1BѩswƏJEe6o~I3 %bY̜1ʊR*€+.W{|Hm#P8Bx F IeUӧb #\V08y8͠SNs®p&Ιʕ7DsϛXG7qMrsNc4#Gѥg_&AYaڴ)7l.^ŠQ̘>^}3x_ԒwMUMm؊݇P cGвMK**Y~;ط5ӦbZCڑVO=0#L{⪙[Zc((+-!+3A %s9Qxb5M:DTH3[}2?Erז_){ܟk EYFzᆤT@^t7>f|X )SgszGӮ $ev4!# /D gұ̚5[ҴyKǍ5B"h)8y*s﹇p;1x6]m"D6U#tcڄpvach֮-̡w.^HeBFDkiz"+.+Ak9w o!v#+bQ;z>}{@̛7I-( 3oF(L=nj pP] tއYfӾu 6Ra /dQ('n*7{ Oad„I5z8]4p hMAN*ʹz2M@Ee!&L#P{])݅IaA7oVi%Y _Bd, R38y0LϘ͜Y@*H@(6%Ӧbdqĸ~čvdiCȉ%~B~4[jC+/$g~ξ]U߱?s۳ PQ"J>{$+?xwџq޽=Ģ f\Y2e>4@IGH.:Vo\aO OXhL%"8 RfaCAff&5 dI,+QiUm۔SVVm _UU >I6vLtS|y1M;/忾`֭[sڵpNt |M7xZxcr!Ao\N,I)#ĄHp[7Y3q8z-:h-RU,CsS/HxmK[B|0k0CozҘFj{wQQq|{/'˥ Xݻ#yo{m&PA:)}S,{w$! j'\7>C0taH8w7mzҐ{'?=+Tl޲#ID-~V \Y amV?ծ* (H$R ##D{mcm˭V5beeee]<)9noU|\׆D?'0>@pzL5wڵ[K #qڽI. (β{^N?իXb%W.VغqQmb l]Gy}*S;,Y;Dزy;p meݚU>} ^v!9~"͛2%Wū #M;%\~ CGyuRz{= bk$臘%}o7m6@h"o܄ieV MWl,ukXUnV+j$vL0tǡu/^oo@XJJL*+#^֭BzQ8Nb)4.ݠKaΝ b129-}  ;;LP(DVVV&k㭢Cy2q>nׇ_9&¥<6|gmզ?8*Q SA:u‘{9zLiRv9/wHqe5_>ؙ&EL1fMi$I(K*%}zFp}uNY1TE"L:`+d3l@WK:#YVkՔSк)[7"fiQԬ7S'Nmipv,w6Mӥc[&LFnپipaT ^[h 1Ѷm;ϟehnӬ-2Vέ>~:s@sf #F 1L0퀒wMT?Miݥ3`6Ms8rn?˭ר̚Qc+lʨ!}iba'O^@8eʧEDhʮ]!tB)d~Q椝u+*cCG^, GFFe$RVVFiiGeX8VJNm{|ͷ/y`nd]1vIО@!Iͫt 63A(ӔhLw]C 2s1˵ֻo?C^-SQ d̜5r%?z%%Yh;y34SN'|3uP^-cF\u&z{iwG/P ߼In^>ɤӘ;oAd !\!\X%Jd¤I̙w/YfGԱ=7op#b!Rp:vl̬ln\@=6E=|̟v7ڌ͇_kB!AƎ̹QVr.b w/\ mQR{8N4uB*3>resXu0Zyu->/_Ɛ;vұK2VkۘI]TTTPRRB$δv> P8Wޕ8I Xu|.|ͷg֚۷[ J߁.P6., #5j G;l] (L풑Jla2y$~X"*x"BRCǎq'D{_HΝZop 䜂9gPĄI0JK%"@ I;zPhmlK h™Ejє#Ge# X6t M;(ʲpߐ$J c3`ztDnN6͐A}qEqiPhuNۢnDc zv1b 2صͻ̼iނлwovD~fݚaF Ma b4oۅ&9Af̰~ѿwwDK\ ;uN5~ĢM~})f4I^Gl~H':b]:T+WYYޞn2m+++sxĶ8`J))̏3Q_w W]_HAAQgyu RHf_y)[PP@~a^ҵ)P,š9+# * WC q|nIR"/ {_V !Y n/0+%ow쓴ϋN,͍Sd"-$jc ޕM?*vy%<mcY.#S|7jN&i3eO[cdjkPGEvnʇ iOyt;Im4ۘSzΩ1t4R'X,LRu ig>+pJ&[#ow&!]͘Ts+Ok:ʥԏ@KgIr ?>wωov|A]@#ogße'ԺVMUl- m_ഡk&`'DXWmPuc}q9%Ƕ}.k}\-ҝ ʑ@i!{FRs t03ǍĎ Lcߘ bW=.ڜ;ui;}6+5?'(:ojkt6aR]x1a ڢITZ%KɊp+odZ[ڠ{6> ҟ0JxPunq޾cןg\&zC4 e81i]a{?~jvl\ǺEJygV,x{dؽ{+ؼܻ4@R7vŰe7>_VS;CM"M` 6'*ݤP+yW,<֋Tcgg ~j{>-픬L-TpTi_ֺ=y.u[1jw:Y]ȴ5}_nܢ&q}W:9Oj#eGSصs;vHSCHT1xCbS,gMb!\e`7 $KVC<~l 1RWPP3g>Y4Hb 8HPmtqgI,)Y6~M_{+&M^5 m(Mdt kTB=^jGؘy5\ M[hizNfh$֎IL_GEc,rY% ]=w<ygxg3?b?`Q7VjGA|P۴it4˲>w5{ޤ'! b!f,(lϕ٨W"u2e"U9[W0nYU pDNɞA5=!ɐz!dct ZI R;hϫY f\azmpi֤QJ!P86$ g&33`0@0$t^=k'8D?I-O`'BC.MԄ8pB  33 EV(au:`dd@FNެEL*Lé Q^W _|_7u]+Xf5Z# CQf\\R5ާLvcU I>?RYbxĤ V}=31a'_/yrYx Qe`jǣ ^R+7[\v6Xb %1%4lٸX{}11K{IJ'ߓH@>uƷR$[׮s(RzsކiymP5I D{mI@@nfLY 0FYT!e9~Ê[8wJK2醋$pXz9AL+0%B` `as΢0/ora p,&T?u3" ÈhJJsMM\nۏϩ^OIM/[.Y݋*(:~/D|ͷkB:ܸz_{ƕ :,~ضmp' ~# /x [Ͽȡ+ PN=vshIE5E,X@DeSYzK x{{h)9u$׬g|J]E+Jxؽ{7)x?'hJn\eɊ7XbZ۬X_<3l݂WXm HiY?z˗nnFL)x9x ه@^ !5,g,Y Gؾm mvnoN;ˋW :V,_ Vvgټ~=gXV8q ?Ņ+7س} o`@S鳗ػc,Ze³>ˆmwGgHeU~1e Q3GSVp*U`պ!z$?/t& 0Tg ,YL `l~sgX=ȫ̥7y;vb\qRvه@Sq//XWY*LxqKꫯ^:ǒ%K0L+/DW_Ysz ɳUrQ,YơCXx1Bܼv%,eW  j8N7|nsvGG\N]ؽk#-wt 09\:7W &-66HO<Ņc&R+ pnХ{_zt뀡RҤy{x^.;lǞ D GJ`h OcTJ Wx0LDڲSk)I ׿4?Ba~.3 *#9tS>pt@^ֈ֣p4mVرpS2x4&B[ Ñ,iN;Æ M]骘mSUrruKA* :uܹ3D+9z<-D\1x-4{oçLΡ ǜ8ݎ)mvoΪۘ7>:f3o6W.\̚8=iw D{ e` -._ʭ z];13g&MM̾=:G>HxZd裏RQrݺ#=z*F]={VW9 iS z';}7|ga5۰u: ޶ yG?n2,**m=NxsG t+PЮTʋ6Zsq!*l g 3gNQVZJQ:)33gOPQ^A&MR)4vB3>kDNm(37Bm: *^Cn:C{wB"S7P&B ]_eg)(jS_c:(rJLL`J9v"Mrd-|ۮpAv30q>bQ2 ЯooD<bV D+*vč?Ʀi\x3ѦysXib{o@HZBU(!~:0fe E %\Ԗmӹe!@hE8=y0A0CJ]p7Jh۲%{dؠ~d ZG\zGL` C`sY|1LC[PȈ=ظuJP,Ν9ɍ[mYU'NQfwյu,]0-4Se]JdpNjQ##9nj],"){|7ߒ'\>, iڬ{K9d0R )ӰrߣOb*b 2 ( ZjAZnʼs1A()4̺^Lq=X̜{th}~d`ƜyG JڵiI KM:g!4{-:F -1xa4Sgs|&bny,ѣ+ ,B bQ> ѧOwN5}]&#mE~݉E]ǒs hekLGaL.Jǰ1 c&S C24 9/1{f#jǨIFL4j3j0Xw Î* r|h%c a8QqFӽ__2K\:{ n0\FAc`2z0vLF-ڵin>ƎN,:u8-ѵ-ЦsZfӹPt4F5S̘1XL3ktQ3̘^LQgeҪM{Z5iŜpZtڅɓǒW@y0BcGP($&ږV0D9p(1L{ʶAq$SNȢ PV۶&/ -*&IvmdQbFXaڷh2 dpY(ˢM^RaL 7}"-%weǮA%ew?jU7|Sy Hcjj2IY7L~[־U4[}y@4M>jZKts oҦyL*!p'SooŁs@ H/jiy[,++F| ǽBISr%˪?YYY5ȁ?eggғɽX~YGvT[ e0HrK&OD[b5U<7|ͷjɪOz8-uK"oN4#?Vkp8L h%%`P]0~4omƍOԉ}SжF%^]L!P& DU!k# 7 Ro<ڵk\~ssƇ9&7avP97nhˉD"s򫴴H$pM NDQ IρcyoT@*pe"ؾu Z7PGlߺ[a6 ]gӻ \\c8|ͷFy7>_Yal}?nϒNJy۱ki ~}=9 =bE$&LKaVK[7JvAy͍(, Ztds?ʬբ'MMIl>3 h@5|?uԎLoQ~g~ȿ/Iw/[%ҹ]&np-cjdhr[5.颡5JhLi1o,NUhV)ȕogŪSĔ.GtbΜMto\#$犄o1sW[]4&PڷLSG[ D!U\k@q!-|JG@4 .ݨ1`Gheǎ}H)XQ6DahGwn䱿);7ˋ-ǽvmyq_]?O97|s1TV(زe0ud7YK6uwG*p^ҙқT :G޴n CMiXfĠ!9(.E &tc"4n\X.q7=Z,Xs0 X!+ b BX=TY %.4/`Sya5@F l `;1 5FKj,S8R;( XU9,֜8v{eǁP(Q8•rAr5Pڨ0alql(FK+ t~"KP;)&5W[% ZAQu%޻L.3 />ǣB«&4!"PTjjsfr˲0D'CsuL|0d\$b3<:pˆ3o5r>jy 6lx$8N%6ҥsGAb"( oܕZmTٰonl@9wVW)RYeKX5;F0zDB4'/Z.]VpFir WbXGO^=Dm-,pp.*K8u&[֯EI{6|"FgBqш[v.) ő9qKpN8NĎrI=` "cɢ%,[Mw!{!d. <}©bǡc8; N<ș ٵs;HoaSG~(p r.GfBSG? qqJKAV]#G(ia7a7ΝcG9 i"Љų}zQ~< !1hּ (6\*1ǧqҹ3+_[I$J-2xmJ~A+%hōWVZӥ[/e]!$#4zFI+Qt=k#]{5!;a ,-91rѶC U vEwsm;0SpQ@&.&5-۴I^&1f3~Ha˥69a \>{6hԮтhe"rŪJ"dfiZIyy̼\23svΞ2Pn=Ra J)k(ak^ 04k~)i0$M5AU+߅v\3FnѦcWl 6! B2ha$M5Pf\91m Yj-H'o0T`If܉ MQI!U`o_&c&e0l޶ ;ፕsNN=ϻʍX%dDHwr҄\ț\z+&yg,]h͛7s-/]eY,XeˉE+0d$gOaѢE8ZӧOrw!@=;wreV.[H0;xJJn{֭[G-Pړ"9KVbkds},YW8ҫ,X*1%kLnkZ[ b$fV.aɒ\p. fΙCq bTsD=vñkUD(whE:|fTL%?٤kVWWa j$L)rU5֨.Gd(A[7&%Q6pNą:>G.Fܼ҈7wy|o?RHi 0jd@$N,K$Q~Ԟ3DS6ķ4v*qzqDumP$O5Pe8u9G R~-4 aZ~.B'$֠j&(hRHAA*0}P_@~~.%Sr~8'+'~lwıQPKAA]Q_^'0r򽿿Bׁu&4uw;U|ͷ/xcR'Ԅj!SQE Eܺ=YǬع VȻjtC=m*tzmUD%{ U! g⽬N#WKWӛ[~T5KkT>DUk}FԞ+=0kl[\oVTJ)Jo>ڱ*Ξ[{; ;IA8`uK]c wHXՋk_aH'NЮ*2_ H=OF~\6}I(#Lffmj8*S% 2hJYԋ 4oF]ESZ Vbn& Iu@6ۢJ #GqH#']O g$FcWԔQI̱kx,Z   l5Rq-L  Gj)bCzԓ5^ՋN{┿z7߾T*(D9Q.9F+o ڍݺNeH+VFҔų[1&6CGр# 41БDiNH7I9{"H9nq6WRpE6[˲eXhU61Aǎ-=]8@M!ZV+ؾmH- $ -,ݺbYw3QQicc`YEJp Z{0Үvhi]^Z#l߽"ⶑPX;0 !ع}HE Yd9nڊ!M:tL׆v:h RFt$J(R̓WΞA8M>yo(#D}7k&{&Y5p1<w W~#:Pg5~:_>o_&玦1ۦUn KjՊ%K# 7)h`vl߅ =-Iׯ^A!L#Daz ʱХOBcWܼ~Q;brGYWF f =~ Z4 q5 +G ڵkt ǂ6/# јKdsNwSh7߾_`Kطw7-wBhUlr,@;ig&VHAΝhmAawr&+-E[֬Zҥqʥ0R`/K6񽍴n-`ٲ('LZ\מCR=yŋ4՝]P,_V](jϞXt n0rxg2wlBF%@قW+Kr8r`K,5\#'qp*"ݗ^[#9~ Q /Y38tVZEf͐d\v̌:OC,YS'ѽ{~S%Xh)/6SԲ K- fϙÌ39b wR8()w%d\:w;(DycJn\ʖ-YA{Ͱ|5oM,0YЦ%yMw| 폮0y,1t 9E-wlF1uqHb`츱u7}{uI6Ͼ{ +hrĩw7qjC閛ӄV- @hR'V }yICǰ&F1kQk~lf\8cv ?w63?w߁7;>Ͼ_f<! 22lFWiɲ_|}sBҬi't=-.:|KbZ;(LJx[rCh{LNE`A]Le=Dbie#ޅrnuzJ/M!>[&_*tsP;a{s@xq鼺}VcW_IyM??)iGQ&*dD`kl&vBv86UALiּ%eкܬ0e%ߗ⥟|Ç } ~m>|ÇÇ>|Džoǹ>MJ0b۾gPlfPbߪ{V#K(77KlR`0跉-##)B-xW{o%Z Úo}Ç?B rOFon?v<9R]"{ć>ǹPU'^>");ע,^rytSYX~6L&Zxy/}|s&>?F]~賤'y>|._i;> Uup"d>e2:sD9iB|-m_D[A lhۊW,/݀}*B/J; 4"ofp?QP~q6W!3]M}|K{U;*&:UdƗ8~_p!|nU@+6wdGZlw>>O$[*.HҖ?g#i,}y|k:bREԋ~0_Yz LmWtI9K{.Su|H@ca袝?UǜڧA,e$އiI֤$n'%k -~qvm>>Y#NMԊ*Mϊll,K;FjE[\ª 얥p>A0@ ickD^NFܚ[Ryx}*[7+UTS9!HCTL)GkbSA;\]]pBĹGY^ f;(H0oTO&͇s̄[@8 S՘J'q>t˘;rhU5]O9{y+>N=]@@q~vp]h ~y7Ǒh\C0y*8clC 4V1?q=kڽ@pZD%kR[H k  eEoP`hN.ce%pUbI-FlL])T QŚ=>.GS?o , C:lٰjeР0q bdD%IvY?wW brwv7>o`h~  {gg95WwMB3ȇZGxk0kצ}M,T. 8Ԑ$!pK;PGgTAx'?gutO?`(Q/&^xN.)歟CR\pZhA϶Xi;V ޽9qVN`vB׮غQl <Ѷ;ʲ*+Bstփ=z`Jzu3\*T `Z^={ӫg7ޞB,eݏx&ZػcNqe`ъ )Y8oc'RC˟/Y| `FV5!>5OOL|9VlBR_>R,WV<L)ڳy:$N NhǩYRaggѱamYzNj|b7'ٴk`_dͼ춳BF=JI2"/r+0R&nXWT/*xpgߜHd3R ke @@ATH *X:#$rq@@#,_gٲv fc,uC8ID幒t i۹'k׭媫zzz31;myQk*Mk??W$h VXˏy'K7~$QG~N\-iּ)uj֡O϶2†ի~٭SsX`JS&1odR3/~@e-bA_B+pUdBCT8876pGMWLC+a,jJ<0cV Yx(\# {S'y巑iyTN{L&?5[@}_0 $L`ɿΟoBy4WA>qFzYK?nc)HxwdŖ9`o{3q*1=nK*&flԜ޾{v^Wr2o~X~ȵ=0fBΕ 6]w_7"vRwB*^W$¿_|=z俿71Cq swӿa|=re<_?CH0:m4J!y3zNm#GSbޒ ς&T%rf-(8,aIn1bDhPB`J+!"D#QB !$%> M0q] +`o|@ -7D+ -LvY6zN@4Te#p*e+T~ @)@49<º/i.`Ylw)#tъ* G4V#@HJLp_{b23uݚ@>7?<=$o=3ߛ/֘_⑸g'qq˔j}ϟ| oj|QnLAgĩ֍2G4\;6]ĆEXYǕ-ygq;M^!.gNo]-IKWv:6oD4eg>f %zPv]̵#e^$9DANnR\އY㟥 _[D,X<0{zoB -d‚R* )شi!3_O෿5#LYc2Hcv?GEwyٓ7wFJ&w0M N$P.9Y#%]қx - :c7 LeO'`uLG. 4/{}dըÚ [ZBn)XmQ?|Ǣޒ GsNF$A5aant@yϿn8Db}#Cy?0c6SG,}T0OW%C\_챗8|/[ '~ &JIOLa dq&Ck5x/,d3~SəkxgBM&R`_˗`&s31XY (4nIX۸ص Wt^|c&?8P4{8xM%I~}h;&-\rrAi=-L`Q`-4uF0uǎ( Z\1U.MMV/6(, o<;Ȥ?qM|;y8!se0cx_VdL[.;=JN](T-0ˋ/Ug7~Ώ~M b!Gq#iFFH:f0VAn16xkPUsi"Q&/?*™hOXh*:5fִy__gꍌ.@ ??4bQ\\9y #2,֯Zǘ[SpHY"eH!I\9v*v=8\; 7?cm~ǎ$*@rӔxt'm>\2jd+1'tƟy{W)3j30֏+<%&$W .d⇻B\ckVlEټe=pMY?G2\m{iܨ>۶l!u\Yn״o^3R Q&"QXu%Nmk3.h|8cxDlՋX&Mx2^5R$V-MxYiց^+.cPy>>G \bvƛ4'?)֯(ԹR,~‰#ɫ߂ACW+Q`E*R I& Yv5z噿CP9Kw6-ȭUYsf䓿%hAq]3>G; jd"phXH+pt?F 0{Lu7 >;ȯ! Y$7-@(#3d8opw~hlZ׿?MP81E&h!jQQ3}y-j7sЧ{[>Z6>C;!9u J >–?3*JR[F#拞B|DMS;DeR(MTfRQ\Bf5Eh *@ȍ"&*3 [G;ҬBD(RDe&ZB*!2'gka'K I0v DL[lLB:JTxGE)ʰE%+vN>>? iP4'EƍL+/u4gz^hO,ɝ~fTuys/cD.37;Eh^}kVġU>lނ믾Ӏ?>שLZ \=h4xM/L\~_D#{8"MPHoU!}?בܦw+T'9=M$l£tWUAV$B@kD *21CPEA["hL BRUGDele!h A&Z%4']0,L")K_*7vX}c_,"%(ƶLA(Bm\O@a !pn N n|+m$黢waUy϶U}YRil)\)d|tYb@W{K3TIR+R*(VVgwl<ޙ4OR)CGHxUM\Y--󺾴REEޘDV̊xwTUL*uJ<=e>Mkgz촮&+?J>ڿbVjR1*X_qل6&>͊m߅6"avbKlCs4mv*o`e4eZճ"P}U3BAӓ-q G1 r]ΧyRZ0wŶ(< V(}Ude 2VȲLNQATVᾮL"%N:[ԭ}ƶ}p<[j3fƛoruFОGJ04r@FrYg^ƪCĮ:Do?)43uoR3eTG 푩IKkb`ZiYȥ'ޚ v@zI^Uҷ[|wA̜ϭwCAj Z4&B}D L.B@Ŏ1:v1ё(hGkO  l8nNDP' xq 2%-4"NTEy{4X `Zh JXf Gp\YN||F),,q())H$[|w QB2k7A}?yKWbyKٻu>͒E,SQVZĴ ٻu3(k7 0SޙLqq)}7SRfav,+ S2qʼn2vrNaj<୯梓'N 'ԡ{(;q yFlG6fJbd ] ]VODOĩ{IJ8hQƏOpɡ=;1GPHe%QHf#1d3wl/Z͜ٳq19rڵkf6o3yaђ` s dSpdGP\-1CԶhv0LlفWeJJAa`2fΚc8u( Ic:~`μHXb5Ҕ(W:Ȑ!Xh1ZkVZ&﾿NZ3}DN<^{wpaګH`wɫZ)&QHq!gBsl*vnysmJYv:7sOc+ܹAZ^=ci>||umeee"SI4b\ ~2(X{+DA6}|- q(**"F 4k\ƍ% V4i҄kױun8Iz9ۺmZ q).*"''"Bpt!H⥗_~|}[6oB VeIűS#KD|]A*5nLiaY9Ԯ[#mԫb\#f{O2DJ0  Ck&#/ ݄077HI)ソ !5r#Q>xkֳ71X`EU>gWR`XiX8 Maiռ1wv&4kSvKAzt)6E27ie(P.ePa}Bh4N$3IFnՆZ65ѲR b(}dZ2lۦ"lNOcR \􂧥 A4 Cn? / @kGP(!f3Z;ށ`ݯ=ÛA @[!"ʄ1mv=^{@8CխK>CȔkܐ7_z7~->Lz{!D+bZ(ƥIV kX \xY| زe;[>Fȯdtj׌çEyxW, 0!E A_w5/ .`}[!~<[Bv{6@80i^}e]' ep^y6o !БX2a4ВQӬ߰+/Lm{^Q M(+K_$xUZ5Sб4M/xQ^-x?,Z5ɓ֗%,zq9gѰqV)*fYmМ!CO3a$ڴlG9~8{] >E˖Q0^N0$Pĉ#Ose(G!Kfɩy˯?^5PvgGA~9"Qs eZv>fOǰ,%1>|\zMR*am+++vi#8Y OXdNZrn(bR>|Xុ&@_Q̀ARYKL] ZulӠwߞ݋0|F==f (~>m,57FIzM{owl#o<F$'Qry[cI 1!؎A>cQ^cjeȮې:4j֔{{^ (Z^ޑ;ᅬras%Ǐk`QD r߽wqߝ:6Z;n57v4"U{ M- jЗk*ȸ ~+}+*q:H{m۶u]{׭ԭ׈⦅!80rj֩]}ۿ6 [j֘(Vcko!.kٌҴiт:rӘ 4?eO2[6}v8fÆހ!C 6r*ȩ]G"iYL}YgBV:q|iu s]bFXCW|?%oÒ*ͽp_}˗rdb&Jho92’Ea"֒)s.{ 7k.`NUE ڥF1hDiWRW2WW$UX8TTxOڥfJQ1D\ͽޜ Y]_Ţu%zCdjHռn/&*e+햮qem|須Yp*U#pWP9rQUL&7Kۼ3MӠc S88P)4QO17&@GAC;L0[KJdJ<3Ə'"w=)'%$2#$ R̙<6;yeZT @!̛1D&}2$B½R9PŬ~AXZ)$XlRۦaLNAi6X±2$ ,ZCÍd"H3Vf9žwǂ&` ̚0)eTq~M"^ɂ:1sx.ΔF9cNAc% RZVFaa1eeX^4aD=kQLU9sBʳ$.-)""MqaE%(M'y\O 4QVcjf)sR 0Og+l\mfjR~_H:Y|ѩUCßS3_? +͈=Hߧ~Eqe?Cϔ1!T$;*u) la!E?44J˫zxB'qN2=RqguF 7CU}H֐9)M_d3/WH:iLڐbQ='s.Z#:W_yd ^|ev܋^y9潻86{/@k/ nu",scK˘W;!֮L `ff,~wkmf0{ 6S9Y!Z|?AKn?<3lݼol`%ھ>,J7naE_!AxgXf}y$S'N@ Ȼs'{bhg}EV!d?p[i{i,B  5<,SL!0>u/[?ڌeH qͣؼj%w? #dd|زy{mA9x0Ça̘EJhrѢӠe%4lٞuF "⨘m%AmB 9}.]РN&[)VHN>@ P\ZeJ%lض⸩Ak8y 0FJ EFͺtz>}Gd;'EKf (O!Yb9He{Ky?oW6_.u(MtUO&?~FnWdżӾ/evQ2ٿL ,J}.r} n1X|y5;C$E^cuB hdFgJ9k3[>ه&'$eq^69 wNB-nђBRvk>ڑ('C1l 4ړ )8[PInC(7]P,Sp?ْ>hW4PXࠄIu2Z@n,<&YYY߷3ghԨ!-Z4f 5 Hٽ5ю mz=?Ao#7;3a tA14n֜{ܐEBY .wfdаq{ajeP(\p' ̢^ !p(8uνnAѲ N0Al?q5.8ʁSH4k9UO= [nf#bce\?`0[ȞCbР #fv8"ChTDKNcԥ}=-ؚ n?nh ӥ$ZAi$(#%+ɭYGOqխi} Hõ gાWsR)n.%e:Jձ 5S9s8-)CNun4uش}7f0_^]; p gСC'n33'rӸrtQH̦mvtl pP!ZqDK#=p*U5jR3.V;{!s\1w+.X(ak*X`ɂyH1ϼ'̞=gXv<*vx}L41%lp%’L2@ -Fe<؅YGL*+Hpdc jnnzgHFz+hѢ QiѪ ƌ$ \df>Z ; pE@4r   ,FP8tȨ`Ġ>((%:w Sr4oNXtځa8WFFRq2ս-G={u{iA߾ע!8Q@uW]eGmВkt՗erE>XJrW4I= [&ANN-tiW݀%\0ZÀѲ]{Z7+ jK IyVSY3eqY>2r Q#5:MӱEc6۬95arpd׬GdɭS!j֮Ov01CE Qnێ `>_֎:@Bɣsh-̩AvNF"a22iNffQ;73#+.oʦ^n `sajbI(%CUjȭ#_up۸!8"ĭF +CkM.v.Q끯qJea:'֫?o^70tLFߺ廎cOH(np'X5n|ɬ-p|B):v={! ]K/iI\֢K罋S vN+# 2]_В#OqyȢSμdk׮g԰k`X? b ZJrc t,"M0uLk WHp=+ppcka!pbyf¢n`' [J[&u=(- h׳ /S /(c8"# O. čU`Ix ]+b>6#FpϢ&"cm0bEtCd˺+ %]@D*'Qa(xU^Ѐ &(D n - 4 [^,X:J<ӉKS^}Q8"^U8CG1Aر`Sٴ),RZp{%R vpP޿t9sOб'm 8B Ckaza< I/&'pX(b<0)ϟ+$h{'ӅPZzeEK1x5Sp(ztA 央G]$'ۮjH*54mmuUsgZ(8qeQ;IE i$ʍгWwg` 5ƶjh5i̎iR{ txṧ). .CVn/ZD(&Gwddծ-;hP3?O M/=,g KZ423Y{X99/=xoڵlDԶy #MV")嚾=QB 0M՗C[4k݌_|7x5Б_}̠{ /o_4W}PuK^ u^>9bFpu޻_'O3(>ZWp՞r נE?WΡn߹=w唟BU_rDZ$4R앎eKi_^:})'' -U=%8l8cnz_M!; q CGkUYV4^ɺrEk+'u"9v);-}!8ߨ%Z7EF|H,]%E;~*!$p)phA#Y4It5V pxQnLqp2a \|r0g8Xj8Vi4')uL!Z»S'QEo,X:g#dT__.%kfbiGxZh#M yo2KVk5$O><"DIn΄J{kl߼ Rk>ټQ''>fuO8/10,Cr`-t"})-CTae wYSR*h;rkHCea_KyK*0k\0b d3#Do8,ܮez9X#QT>7n@%,VrMs}*xuEWxwb>}\|V}(H&믿ƴ)S5csg`ߞq's^|L O㕗_um^zoSxb˵]]֊#G))<Ƌ/BAQ)'ŋ&8KiI!/,`ĉ^yun hL2q?". ߙGV/PXj3{;=i2kn7mgsnSy籥F 3g̳OS%sg3I̞=a}Yx)+k_`%[gO KlI1-@@k`{|n/a̙xYi+BV/_m;s`?R@(S'sUbdy#>RUuYΥO$f{U"y݌5aCs]DJmn[į;}:Xt v8qW}wNciו4ԩ3w]1rʻkoSq]fOFTZtҵw]`7qC AFF4lކ+:u@()93z&"GDFˡ}GZ1dXʰ݉.ڼiHtY1Zf1rpzvӠv Gq={06n3A-ʦMnx (:}2IǶm1f- 1!7k͵;pijkq=eǟpAq7oEZ f&2߿?7ZD.Wp!|eמh2;v 6[obϮ=Hi Z7oDA)ڵkGmgd>lh3 8NDKlF !Y̘nmz.,妛o-[Ңes&k"RX@߁øصxVh4zѬNÈ<[c$+,U@cdli9U:V8_Mw;`VZ5;}<싥l3f 0qx2skyZ&5j֡or~;o2Ws` wNPbBuם :0՛k%7tHmE0àd+A@FV6͚$7<|g Y}nNFk#1A`mx.}RZ\L~zh-i)438z"Qj悖^>Yh( g-)cLeǬzJ_>egon>v]@#Gp-cq1il %u0!_G.s{vEO 5˗Ǿ㔠5@{eij@06W`Hh۶ohVdfe2ֻhߪ 2%YySPEjIn^mއi( yT1Q_qT =,[BHPÇk'H& 1ֻѹ]]kL#@V8ڵkSTp2/klLtL"ު(u]j֩OMXihEgʵ ᒑM6mQ8e%:~Ldrȁl߶rVۈ-™Y;pӅ4WSU!PPP@IIIbeglU"1qRtN!J)oZ^ǭi-WIJdqLP NO72Çʣ ul;%3`Pv-vԮ_p8L:yVL7+Ln;aѧ[{ovJ@ЪCBMF k[ɘb[bBX4mZ M5D!hڬ#oQ"ʤOhmEDkA5_:q4@iQc2jфIzVc1`^h~j "^VhTrMN#LM7x0Ro`5dB\3h0a W@N@pq(;Bnzvuדa0p:>}k0!U!^u%WM/FPjkvk{n4U#U&wQCk&_GN]"8ס}U}z6-f:MZ!`f0fx?ϊ( lZ6lBVТ~f{t!j{ֲf AԪ׈PZuUDm f1x@?[3h פa<6!ˍ8֝4_Z S+YjҺa]j5i%_;cLffC B)(+гWbO0ʪA1vɫE-P: _Z`j@k{B 6m`h seE kFZ4!]pem8)p]ʗAdEk& \`M7䓿Gwb9TrEb?5>{e?-"1⦴6h-yMᢐ<0\uWw/?QQH^/C>|8M,wʈE/Θ<wt r K ス[`(!cXZx"kvi b:3ҞUUDcsSXS.EΊ z)]v#'(cA<['+qqcBU|10]2&laxObBG0FZ.K\8ac"Jx볼QB'k D==e;! p 7R;CN]qH@UL p ELl@ $A"RXYq]g 0a[v$fkb00Q(鵣5Q@c{ "rZ50@p<&:R;3ҪY7FxF,]Zb$c`xc WGqna_!hPo,H&cn9ݟ<` o} ~ҿuep=pw~O!sry_,+ ehhTnB"›EEC{%1|0r??_iޢ1_ *Qkυ[= >|lpd[F$6DzZ'UbU)ua2H몵F(/ETvMS rɒʒi_#d9T!YQؘp}EqrAcAStތ ד^%-Y@8EEb۞nhF8@yЊ¹^kCIA- "l*2skrqw7Ѧ*JTJ.]:a`52ɨ/t[ksX .rM${xXxjVȨŽ?SO>E@Y=sڵoϿZwOش뿟} -.(ڹ]!60ӥ{'mZ4=3fNRѓ<hٸ6>z2VpS ;~A3ip-UR(wV SHgr 2COz(R^Wn:=Jc ԕZ:RD+gXTR(Y@YYg (--EUʓ\DŽ\54* s?i%EEE(*JJu-))v^/NU~}Zij=WCNұS'CșH,$$ش#LR{G\a2ذngR fX: 8Kٜ.1NُO~Oy@L1F( ]EyEytD  ##-d8K*Ya TԛK4~&[ĥK&R0)TIQkۥ5Dmqmh4,Oqui_kZ$pxOԯ~)#BůCN\Ae\w`oϫ.&wq+JPz븦HcbࠄAjp{0Fc i\0S)aÇus;{*Ee?K-TM1SD>x&! &ĭ¨ЏzO$I_2m[Db:[$Ԙ;/;Kj-Fd)" ~e+FQZZJYYhsV}Y4& ~~NX>;0u?;,>||D\M5efΜa ^{E|-"%l߼_~ 7˯0xXPEK2{>ʋ/©l#J 1{>[6{ޙ  `xŗ R`/šyo<{y^yUVOh@l,'5RJ0لZ/K|d?W>])IpY$FXQ*W$X>|87b9Z^֎7İ!C8~p'-;FZk7QnSnh:˭w݇,=E !McG 1xP?fNATZ,{=&:4o݉;fغ[C!#8tQd2ޥ=G"ZZLm޵?!DBT~UțeYdggi+HaCZ:fKVQszA3|^}>ԇ>.iɮ=p"&̣C+{1bU%R 0bїVfĘ 3䞻bNjdpC.|M:h̜:3#dddӼUk~r,ǻ_$!ƎۈLЃ%L|qOKD'*% b IVM*GU7ϛDyUW|Uk釡YԪC(&=hpS7`0DHMs۽dHW?Q7H^:oPѷКB'` {2q@FnZnIHD}] h5-l5Mv";pUʣ"}OM}Ŷ0/gjWɤ>SxS=U*^|J̊ƅt rpDK$ *O5`*uU1A^'!lńY5.&.JXDxgiѶJ 옶X\(؊GbF:"%lH~~.ob,䋶UIAl㴫B9]҅W֠U\YK&#NIuY{U'*eUr|U꠹i1ѷFVAi;}ӖWWiW|I3}|nտ}|j籨`0],X |*y=H]dT5v3$W~}rT}hOxw\"irIeB9sF=;vcm-h E'U'qLJAb {tlدJ%Β lԡ߇7N[EY]ƗM6}Y^fddދ?K61KQY]*/܉ݲ#n)7flܴM?bqGx{O@43৏(ϼԿ7/>e%L/7e|Btmӄ[ EAAVm^g3v`onKCwOɃGٳc-׏ =SPHi y? ٗuE(y5] e),_ο>||8q'OLN:|'+Sg~̪sTu?u9ێ'v]$ʬvIl^빶ҷ]w'NOi'Or N:SbS:y9^]KKKmR ʺX3N:s^e|kfUeF6Wqc@|Oĵ_~3tڅǾc~1t 88C);:w*?O͞IuGzصe ]zvM;ݻOEyxw֛kn*o;ֱmQ]v7WĬy_>ɢSVe邥4lX#NТq-~&P1(_Rp4޹-?Mχϻ8Rn!PհOx&+_Vy*^Gkpָw5i<>FZVL \9rsOFziddd|!ΗU_|Fa ݶ &p8WԬߜEsQ!l|&NGh/O˻8-]G!4oI}O"b!Ͼ%o؎/^z_#}wOq\֨6]@L+^M mڴO-S4j}%A-vxoLx r֫\o(7פ#?  g9̋om7~?y/s"KJTMM-V OTʿ9ϩ ΗJL:xf58B*׭Vy ijT\hj >bmŕ=zNG`;%\#GP֭&*T ЊVQ p БS9Z"EL:)Smn4B(!سs QH4BRižQ,(_%CsqLS'صe=QG -[6 {b QR{9t+`m>I Ž7h3Nmpdv:ƞݻ86w&0YiI'2u4}]zi:{>nD )3hEKlCYv5e)fPgvw:LͱbMNPƈGZX a@H>xQᓝ;(Ξ]pW5ׄaf1 ːBڱ3x;w’EaE﯀ !V^NҬK@1kޒs0x\ .H .6*n&X񘊚oS|ږ9c[Q -^h  WuG4H kdҩSOGXu{=1XF'}uiݪ3f qhWrxV[ܚ>0CQM6-pJ]d\^D hݮ%V69uiެ9fY$մx9NB= Yl(Mx`i³)ޠ*4`"@.R4hԈZ99PD1,ӨEk\ʍ[$vI1q] E S'?2k擙D8w7Ee.ָsJ,*.aӦXxeR@iI;2Іb%  n`#v%{Fqhni 7A)Cp= 'ZY% ҠV(`GCV(>Xdf"@JF& G+W)֌D"RVVvi;j1IF+HRrǔ}"ÇgCEwPݺeU8v3ffjK8v4ӧN8  ɠ1e2J$(Qe0ȫՀeʔDV,{0cDP>#Ffȑ\ֲY^ymLF4R!߻wޙ]:^NNͺ5k83N"] V0yT N~z.\Hc˂]hǡO߫ir7@.i}Q@h+F2pKN RVL6{ &;7Yӧr),C0{LN8œV6%E^8B wwM V X1)%,Z7ôٰq=JXh&.lڱFxPhҐsRѴlєwg5ZoI)+ajۖhK?`˖?z\.XD0`6Ծ5S'OHA)WvSX`A5.P\\Lqq1Ѩ7m;q//IQ-hRʤK]%8LcÇðJL+71rP6l@ko`3|A$4'#ch'v]$|ߝCL=nL8NR$d+P7LeApgd-Ur":9|8W)* = $HK:V^YG$ C;:*_Uƫ~|K&1 KHrie‹=WzdB!kl*K''RJJKIDQ())UvNh!@,222 z璛G^瓛K^^ 7hB&hPj"VMSyY<0e@kZmۗyK}TH6-p>|Qm>[KUE_]UN"QNZdYKK!#4'cc׹tbB9qNx]Y )"o46PYH(J= azy䉃RRJEv)(, JJ0 ;FRjr1᳑+۶)**(nm)}{#Hq^.Q2QW5ٰo߾KF߿SbbR.&%9 SLϪHn[! @&FUo<ʴ)Nh:IWvpR,kIr4*bUz=qx5[D}-"٢Vjhr7Ful ()*qTe lA`Y999deeaPltm*-4Izg2٥}6\* 2| M˷D{5I&oy>4'OҸqKbѤ>@ ] 7gg.VA<ٚSi@.3NbU/R5@#]@6iSٲܝZU%aM%唲~fd%"@txżs`)76닭KRd(]T1m~6>H%kDe⥕2%_`523RJ>޲gJbQ=kWΗ$l֬^V"$ZZ98q(,ö (Fr-BQ-ZB\92Y222;jܥ[XXxεmNVd]O>I<ԯ~Btx:?vǹgq3o㫉ϞwQ%Ҳ샩|tWO?21KRo- L7cH`/JXŪeK(lFČDn՘b~NTؚ)Ȕm.p̌4:y.׮( /k)bi765Dֱ`0eH4;?Z275Ax14?\a1iMѪM/w' btLgN& P8FF*-*Su}yOMɭ[C! H ()/Պn{ B`edqu+p'" I*OQe6EŔ.EЭ{h[miZԪ| bۂ"Hb|𑮫Zf 5ڣBBxbɼyh ϝQPamlظfYe Ԇ{sfC =גH_HnXdDY?Y(>X8d%8)[? iYGXڲHԳ [ҪUTw%QB"qeK `LYDiN֯-$V&jG6i SLgڍHidH0be|vnDiK8pGO`ĈLp>V`H W8q +v}=ztA)7eHe [?i\aŊAms~N.:kGXv+ew|Nc3FA>g1(W+p]'JK՛wV˛gd"nm+..R֟D.SM0#V 3%%,1eǣ^x[|)lǡa0t' L MO`/Iz p1MK~N(w՞#ҖVH(2п^a0h߱+NxɒXq8ݓHi)]z]GP^`aBIu]"aYC022A+hm/gޜӺmGh E2L4%L rF N~ʡ, ڔE!ֽimr0b:w ҤK֬߼ujĮE]IPoŵ#tҕcԩ׈ɔ)'H1(e%;3().0 6jP6ܚʉ $ 4`'HuyB$-9y0%;*Ar먪vJװ HB 0^B"J>O\&pRK;~J C MJUSiV=F@:IV7DžepQY W.o׎isL1:wfi,Zܵ\m;)3iٶ Si3Y~=VL:܍:ue֔>r={1u ;Y\6+Vߧq($]:]1B9?oM–-[ؼe^)S1{.Ga]hӧ2q$ `i& ~,X@zpHYgboױ3gLaO0ClZA5+yhrz;0u4dԘь9WtLq).kϻvfzķ0uT]=qC/f}Tӈ2 a);\ѕsf2wL>}>!7/}0sLլ4BJ:|BF"0.m.oˬY`LtYl$`8|V8s+ 4_߿?y١ZfŜ:s K([3Oeb6YɓgHD GQ<@F#:pzQRphYzh0Qf7孛 F\;tQF7ΨBE01ܡ->1 qq 2_;BǮ=ih.Gp (Ce18e6d̍!ߨ9Gox9W+_ S֍лWWZjE+4?7ܹ]Av-ɫUcn1Ȧ[qڷHZ˓p &}wwݍPF6€f^N%M"C9׎eh iѬI(ڶF'>_Lݨ29Dر"#|l=HXb,.:eSUVUW3ѧ#=5p(iyY iKV JTH $ۦ4nZ,n٫([.IRucQJXM+gbfW ן}lFd||*R*jz[~MV-my5>QfDk_y9,'uVk)-fRk_7Vբf~Nk>wj֬yƳ+'NU_c9Or}kyme,HbG^RVNܯ)mQ}*/]̋M)B=>|qi|N\ʗj7Wxᓊ>JU3U'p>|[|| >|!}0 `L233    IƥnN˲m yF EP(DYY>||EQTT7/233DMJ2A.(TyiJ\_ff&P(i&4M@GZdeea6wf׮]oGnn-RaP(Axp,7An-"333QXF]3gO>}݈l7oN-+5n$U׊'D`f0!;;P(tAg]l567Qg7uA}W}Y]70"##s#\r>TARW&ounqyKQdmW=Fr$Q s^װk5Y$(3 b"|tW}ܙF~=]Uo:=E1 {:;D N:(Nȟ{:*{~$BIMM4XɿKLxJ#$ @#cIh? V>!K9OU0'_"IKܞUgz{IwoՃ<;8DE!~Re&iii{R%QV4z  "(Lⴈ$h\4ETDĺQ'"L+J o"XQP1MP%m^Fi`ges׽`ϫLC8ze{aڵmIvõK<$%%FI5h$ձ-@%<1 O䚓s8NE֗_NցLZj],H-صc¿ (O?{*"J2С2Y9?iVR@e_vdۻ{šC8|wx)#Gpa B'=,:+Vǎ;e=xi-Pm^|YB2 G8伋j8rh/8cZk S?Ckp4hD2soo¦dxבӥH kfbo%XL)0 `hͨ$1=urxw~e3vd+x0~'shf~c!J)RSSIMM8#%%ū8AYO(300 }Oob`?# $aS;"&,|:F`bKm$#1$,hLm$6,PԊ01pP½{C؆7)O.K$7B&%kő3(0DNAtQ+\NL!pΊ=xV〷) \AKEYdR.SOs":?WyΟ!H9Dvͺc;4 ;>&#))d9}W*LTQG3? jhEF5zp<&Wg0nyۦk0H0(Lp>EW6u3~\1u~ ,T_PNn= D$^& oPl,||kGNM<' #CvZ9'B1}x5mG?ݷ^7r^8t(ujU݇6f |U+}c󟷆td)2,?+' \ڲ7|Bi*>3kX4f)mȞnՌ?9GѪUS=/ꊶaͥ_ɮ4hW d&_2d#*/.mWuu7OiqU|~ -Z\EHG2{m8_? p#MZ^cp[!|3Z`f6 #sϓiII+IL k&Z^sЌ;>իiݤ!;}\["0݋ILmLJ%GJ6[/XzbO#q, ΣGGzt%dn<@}x:ucO.ع9ywPc ҿg':t?_|n'xdO߮]x L6#k|n Ig$Wz8?*nPԤ+5džD\2M|2>y<7D;onE=}k77~?) ^|!:w$מA'﹙{ 7nFYa#wқP ?2d2׻f\{5exg$̽twkm )k/KׯDzB߸ Ʊl}% A64lLJV.ZN^j:fMK2Xr[g޼~SYgʎ}Yf%/\۽̛7-4 У[7}J9ʲy㹴mf-\UٳBOM|R hίTGN`ICK}K.l$cC5ڷu;/[C%ixai@^q=wQj_<y|>7z;gț8#OY;#Df" Ba >;0p_ L. Kބ;:e/dP"ikt߂4}tCC̙9 #{- Ic`6n?&Di>=xKUR+|>Aǎ]ߟGՔq!bG#84<뮾Y_~?gDj^ݻׇM_Ӟ=xÏ V}bp;Y?L]А%$3hlʗE(U;\ϔa/UbMC<֯ݒc=il4ӮGu7h #F tRW TYRJ{"TB iWUkQzR 48N)UB6`Yl ;wwPT~6 iP 4:!ݶX>KHJJAE5.M$kT¯, R<{).MBbĨW'NJS;KV`ƴZcԈNHȶT6FJIxsc sh61|3 Ƈ| r,ڷMmny0?k(4#&ۯy 7K+ Mݰ#5[1qڴA?ǼS`ǾԪU{ӹ`P8 Oʀ]n+馟L?aǓgRRy1vLRCFE=rOS$H&`Jn֞fQ1#'" 0ض(>w16g ?OMM廭2lZ0)"^|*Ha=x5@>,`+!SytP76mm?/_YllGxx2*֡rGW+QgDMGI1 m=O?yf7Z4i̺?.f͎#< {zM5?LCIZɘ:ДKiy0G%)<֞} ӫx 4oԈ̔h|!>Njan4J\[HTJ9ƽOZ4iU恇|C':븠QsR|4Z5meWwFIU8AI–&arl>Wj'NйC{|:% đVHAk4oՁnݺcSOテ Vɗr2H\Ѳ)c~ k-HL$vW^C˛5{=aԘt#\<{}?[CO=j`̜խց062|"XrCG҉Y݆!M%" lap=r_1O9X";믿3wd;դ{=$NfqߣrBAa-k7rM2!4>) mJTbҿ'UO9ߩP"?pr5/yqT-)Rmm;#p~b her*e_^~>ϲeKtԉ+OA7'oDz|v=6,oYXs;&ep?, GCJomCR%LR+鲕,[8TsMd4Ljw^>S),QI3}I]dA'5cOx뭷I-⥧PV6BE-;K U#L,'3.%1L3ra$ȶMT;G4}^#p~Ǡ%v' G0Nu\dym JDF^(Xu{P ݃R8½$Q ĵ0L20cA *B䤆p\pyL4 -݄Bm Nhh‰7K2MNtNq9^0JoLj\(nDr\,h3&uRPŃ]uW;Xj-!vX wU;ػ#9-9o{b7ۑR``q~g交Re9|'@(P.A 9M[<~wf=8ʻcc:aF|;~*ZHeX؎a>_am1iD Xz-c#/]0Lj`Z!@*Ys.t&qMZ%*UzT;0~?_| BI|*$oI$'ǡr*\PB1|>r_0y _hPWAȢrT,̱%ptD I۫d1"Xt :)a4iټkmq"==U+cc'7?#l&''L,k;-|#F2uիGl{9p0 X0w.M %4jހoͪMۨZ,J;̠Re2ix>,_G pӖm9bn$fd,-àժWw`"2)"|jl-7.Rk7;f$ġbՊ?&~D&*7B=$2cVHqY&**ƌOGr>PpH/]S?f1H+]{[<쪅tut\?hJ(jU&wdmqqQ}JȲNC+/’^(J$䊲2ɴ UX3A ~]P&33\ljg$//t8ӭϽŹ;-[0`eѭw/jUu׷Ʋ4׵*pmwЯOw3 C6"9eRl Lkp}RZ :DUw',`MmP??H1r=zp5'TuY1_S狦chv Dk'd7)B fڤ"i@8a(z/!Seu Ozji&Oqd3Z0]u뾌O5knFJ@@E@c'sve p\!->V/,[a$})ehP\!vHM똳s o76#нPiίp<7iOaD5"$.. us}$wlpV. d͉<6niZL<a,Lrss9g-] 7bHayHPnY9栔'ډ-h :i(̧7v /a&LN`7Q =W?@%E9e_{PNkvu;@IRݗ_įˆ'yBB2iJ2Zۉft>EI*mO."KCڠ ]h?z-IX rtr23X3&|.ĉ Y|y &ZØ1 0:a&Of֜Op@z駌=~7fȷ׌9ˁ죌=3:3i FMA*NOlY#g);̇fe )`Yi+9ٳw/`з Y f`^ɓ&2{'4׬ୡØ>c֮Yis"7L^߽s9j4ہ%dfefjB {{(Z>Ż}ðosaro=YyAX0BbFjo#X XEK2'̝3Lvr:t-Da漚zn|>>:w` {Mv͛oζ]0taÆ2qM?R(a`0haovafذɧ=k֯cԩ,]qW>R"Qdgd ܿ -~(as(2r>~{vJ1e| e1q$>h3~?`0nj:C͞i1 ["AIqbh,GF͜>c1q~[QFc+Leѣ9t< ;N{,scY 'eW D'D'HPĖB%ZNهU *ad"Ɉ">iqm_,aWEDI8k{f5W_? IҕfGK[rs?j+r]ԧךSF *hᐔR[nD04wrvdXϒϖRD*;zHoA\yMw^GUPt uD*aﮃh:ueWlRj-*OFs}w/*uu`@MRw~ ;Ѥi =ذ jU%c_Ð\v4j،2IhCqln?~aR hfϮ?p^z\ =7_˺Q޺!h hѶ#Pa֬aͷ;"ۏkpx6dP6e˕GeX8HbӖ<]l lvځgv|5۶| $^R AzkԆk[6b[ YzcldnkPBeff}oչ,S2Y|-Vx}RR$u $ta۶?xң|}7Lkǎ{wXGnC^=ءݸyM.0w:mpڹ#Gнwܛlaq̐(@Z&Amk^T2%цE)G~Ui%^>cOUt^QYdq>,XO@bɺ(usp,R;pԒe8v !CIH]vr1U @jj:{wnȱLUFrz2scvrbjv"J;!A;Hک}2#yc߈ߑ&5$۾o!}FIVK,\)o XĈdq )9{wt2( 2沪58 n Gvs(vGl!X*0Z>?=u؎ A0)*r۝RB|dgK{9\: v8!#DG$etl| ;t~},;3n_jI%^4}?ԬA rM3@65J(v3&\à7bY!wP# F4@H&rW2h`?Ba$ $6)$%q]ѲQ} 4֮\A J/ MJj*{wmHFǐ~ٲe+R=nr3hZzSiqtxr~Q#7CDU|BB䧘HV;'sP/yrk8ZLփs *РisԚ}o4=g[TVRe*>> ֭J$h ߠ Jp"]zvDz9TH*U#"TUkT5jTK^$ [ҳ'>ڳ'ԩ]% ,59*Stэ?jӡ{7|Zӵ[w|f2]P v[mZGTQk;ugHvL@xASh*h@OuqER%Z6a˦IKh}5OaˡyF0-Z4b%=\m8$(mwqy,JUG ]_9II-嗵Ki3j+AH 4kNipI߫VBao܈tIXp=V+]@W&_Erо-a˦}k^.W4 >l鏎Ԩw>%>l[p ,E.XլRjG k -%k(N4Or7[ѴA}J@zZ2eKDrI:o˲\-R ^r\߼W—JJe~ޅJ)Cc;:CKMvrP$Oס#HIEu0(Bm:hf0C$*/P>zG^z5I*URIJH.V";aށ`ZiWC]P"@uY8\ju,>E;GS]NbM Ji+:ڨ S/yC n[8:@븭8B )ԮXFb 7hA-!\˛vs3PtKv2#4 64JA mRvԀ0"V#|BFiCp @PD ƽ":ˆ !cj#}l\9YN2SnP!YeHO<.i2R#"s1A:}S[@hp][HeV)abh\H}H 8isٕ8v8R3-L hBڀ硄+ߵR ?D4V 233l7'[!1#0q JeE2HP$8d##3;3"嶗DH'V{595G2ɈѨV}ҀYE<(H2NFxN-zr Z ~Vt?vt?}Vxaޘ_փ_~Fd$3&`*SKXtk(iDQX-GD QDSމ) m4ЏȞzFq^u("++n[5 )fd \Ghb<淽N^^'2.f +I_.>yr/48kJ$-ʢH9ۃ'Erav90)+H\d<-)rr+JhX> Os%0EŞ-OvM13-  E5 ֪1/X/@KtbY,J/F.pXT,aZBhUKl!p 2 e{8[j W2>F1(q~OJ6e܀eC8ƶm7O2!(+z.Ϫur(-.IS'Ϟ~;0a,w "O_1ޓ-xݔ"q]E D\yy½.b0I):++s4+cǴ6D}bm, ;8RP'J ;# }OK[&u ۛCPL.YADqdSԵ.р℮=w.A(XRC')9dOtSɹjp !\3aThV`񄥑0aEBcgKvCh \F ">Vn{vk/`ۖM\@g1sB `DhP̘>fL@Gf1!+VF #>"e! 'On)C"#ߕZì:J4c>[,D=.2 50fEDBI۶c9XǴkߡXve(m&ORE%l><[o'=s{ UPhD=x4aĶy&NOvn6_; `̘dʄqz=֬Y13~>GCvv6s/dEv7b;,])S&1{BD7iDXf F' 2--]I((Fæ/6,\#'嫯=-~-#'|v%#F di2e|Ǡm}8ÇgkMOO>1Xj-RYaW=}CMR,7QcGIWU_9~YlKcY&}KV H76#`˷X"y"_nZϛCcaMO_: 1 M?>߲`b֮X![з`c*oɾC1U#3g .7ٴn?As?aзٵ 3tHf̘1m,oHfsfg|q'MB<ʼE#d[9p+׮#l5mݾ C[0ş|y sauL1#`{6&N@XAÌ?gv&ML03k< S1k|r2٧9z{vm'++ cpKM}L:'>}:3fء|8CB`岥Lh}gKA չuMs$.%>F!3IZSdAy җw̞^޹ KӵKG 'DCVhЭHNԭMϞ]?c&ﺛU9E؂ ף}`KqwWXb%w> ʗr,[AwC:{L7mL]À"{ᅨ;vi{d瞽zv޽СeK"MЦ1@` h2{\2esa:ow(_G T}-.Cq8̒IM7#=~f͛QlKna֯Yg+OT)_I˅6~"TSK|dѶm)Y*_ŷ;Tu#DPj-LǾ#1o9={H0ى=vu(!";;;Zƽ`a6*q^2_,00hٜW/ti=܌ hׅoM["Dj})B;_|Z"rEOQv9HzJ;sXիUmD$]Zvu{ڍ"? h-dDD0|~|c/~#oSLPRO/q{ h$99{M#I#R(4k͢ݔPB~]IIiس< aºvL7_d7_}oW2dƈǎEcdr";pnRhlKql!0Exd._ÞG|jFN4~Kڕַ?>*MuZsIA LEe.,[R~]J kE%X8Me-S;k-[koQݶ<7 R}y)%iii0 ا~INN&--"eYΆ-"XY}W%0ezt–MW,͛ѧOo`bӈy- :ۮA+ik\i~6YC(0S-pNIjΌ E>)0>6#?5D!J& fIZubBRSSf|QhL$uo`<1'Q]_g4aǮ=\xх(?s/cq͚7c۶^D^f(KOa{< "*n",JVJUUA$ wH16M-QTGkO%Yf>?ن[I?lA"#@ E PE^+S-H.N}_ZkcֶdlF|օy-IYtjE+^W.^#pq|{9Wm!72Vlv|w֞- P|~O}EQ=xfM3%|2$pY9?pr -O3h їh&ԍH O A\'d7ޝv&,Mr ?N,OH1^ !a--"HrU0UQ$װj/776Kĉ+a!iQT:YY-]:neC?=7)%1|նТ>{<[IOmڕ>-rm#ȱ$e*FAN#L6!%!eB'bk+ch'^yf!g2j:fc g]]$ha-ai ewmaӗ_rcf;㊛`ݞ NiL|0)'^)䐑A(:g,mYTXt. ZǬrلa  .˖smj<ݳeuiBNjjf7nXKf$z {vH5 Jjg_ !2d0;gC8*@@i}xh|1̙1KXb7GJ[H R21+Hj8j@ J4o>};_{'^wKRQJalot.ZBךH3'>X/0elB $^_d|??8w5rӬyϜǿ?fΞOÆЬQxŗsՂd2IkU~c8ztlzO?D5/ BϫE SbIzcaKPfU6JHt)֭{JrՊtv"?5JEtZԬYL4K $˔k/x#8NM[r^t6}F(tߗ…ԣ} ,ۡE9"Ձ7! 0anؐ\;77RRYKl;5F;lֈ;^ ^xv2GnlݽSD / f_kOk 9X"o2 oj _F^Ϥs#qCk Mq+Xfa}U))z 2wBmQ=&|"PMT15^] q^OK7H*(Ham;Zݞ򊞩Cx!%N>U$Zdu8Yگ2Hs$Tɤ:fm;"=w~P8̴Y˯1s|I<iMunq=Ԗ??~>Ih)cI=󑚚Jzzz,l YoVq孹;MkVYǺ n2pq:0 SMQ~lZ;@b].T]D"SK* ES B~qϪ:U'!2L( .E i$''F *'h'ĞڒyvAQ)ITbKD嘦Ijj*Ʌ4f嗴i C)ߤuݰ1? 2)w_Cl߲fo2״<ɫ1v05GˑC'"8}43zBNIKkQrcFiI Ehy{YogGu$RԉB1yx;Qp/6}#-Q?8|>)BDv7Gfv.'#7]X&T!r 7O/ &0fEp¬߰) ! Y5M=8z(eʖұKȑ#_$phP"Qxo9K"5 ' L_!J F8qWG~q]D`[y?I:B a8ʌkW YD#r,8h JH.]*mp#n[GC4`R Cq\2LVn& 9^2yaO`-Py瑚D"j5trB-o->B"A[1r#n߰2r(3׽ȿN*o"ČYs破),⬶M?HJ YRSS1s#pgjתv$;tvSNyMRT.@*UyLZ\نze㶽x A<: oؾ[,GeǞH!X l\{q l&N&LXw!cC|<~6Nx%L\ Bc}ȑ{e:s1;{.dӦ/ C;|4#|ͮ΂aG i%!X4gRhp!u+kq|r506)X[ kדy<'H>;l L6Ĭ8~'X٬=>]@Vysl -|>Oe,_S(|~'KVid(F`_2wrۿK?%;-kc7~4 aƴfYί6YR@ }ǺU6P1c~!l>[v ._7bU=|Cj> y'ໝ:t +&O/aƼ8~h/a A|7(asd{dϮdf0uf2jؘA1{Z BG8z8;LZ 9 y9>ق3wl Xi#ӧmc#*?9%8? 5UeME.[5]Nԟ .lDvWG֏6(4U{,J$k\F+;2z>4)f $sVF Ʊ#qEV1O+c cuUz{8O8MIal߽G *Uɨѣ2kmjT/G9zADI@iU2b~3?k:[bzhf]ʰ1w8FeS$o55[ӢE,KӢeXeK,MKadnu-[4Ų,zGE0@7e)zcQ8` ͛\[W&\Պ*u.ib4lFZ,ˡa w6{aYJ\ܤ q)~M݆M(Լ>>Ws*lЁ N׺?;b  TYEgb;>zͭwKe2wv oKZ*ң{۠W.pǭ QD*MXѧ;R~A[vƱ w1ѫ;];ҳgohK^] ՝:#+?Kkmv/N-e+VĠ!im[jWn^*T_|Jӻ;!eY5#pg1dIͱ'=_~8 qGq 8WhU! 5=>e4 -u-(ЫPn 鄊lrRFbE$rThӊjL,WD|*]Q$o"yݓboQuJ_6Lr[V Srmn6Y;-ť1K]%-TQ`0 *`!33P(DVVG<pş5N4F&NÅ5+dF .ԕQ'4E@Bb vZ DMũT|+J#>몊=<Ȗ$(` lVLrssF.v$ *<6-mn<}GZvv6lrss=#r#SȘ'--teYzb=4MRRRHKK E)؂~d 5ǃy)?F, t'73`sc-V(n yi%o?}<!qc s<3ءl zҀ[\ּ9 Z\#y#A %x=uϟ#'a2ws2#1|v8l۴oK [xEşMQ!ꫣf[9zYBcD[k'89AȵɤfJO]$*kwޛ{%h6foݤ:RRR<dP.ǎH)9x$c0#}8+BMTG`ݖLA! -b2kC5hѢ tBj: arM챲x7^y?4ߔ;>Z{_V.w_ߝמzokZx5|DR|=ƿ6;^U_[?aa 0Yz)"V߈uԌ]rít,P570o(n}du;hZ fϜpZ:8Nc#љhڡ/?M0%A?FSj]W Ǻ5U>"^7Wi@Ir tkX#"8~~'O5RINoq"Ò~@&yFFhiw?9 G#pIĒ~gcUXbW>`0@`L<|8%4m9CFl8rH0sg0c $bEJz`> tpm,͛og_Fn'#4 \ ~OAL@eGt&'ZꀖTY{uΟք@Nog~޳?z/q`V/ZPaZ5~']B!?S>|:D@Ғpi1$G !>(!AR<݌0ڕ+f/ '|$627)L= !UǟzYLNr ( Ƚò2qѩM^~s̹͖G yޗܰ溾7ss/c8t[0iL] ;)='?_@kxa“|:%ϽϾ`΢%\{,ںM1uա ïkycHp IIIig-999fa<s)xILl;L{Ӿ5!G7'iP5`"D0@RbriK6-'EE,һowh)0BI;WoEww^Y}0e\pi+i 06 ғ߻ڑb!(W2ݺtT"WnmOkըDei AWo5o?e=em;ѰťlނcF T{1s*\),0BHH7xo\Ѫ%ҀPk6~|'x:N;I)רMf-pB8FOq+hS#i%ASBy~"ScF*g&i5hӖoagsOr%,}<3 |UJ*4p0R}k}WuAi!Y~-S?!:na&ʛʅ+ɒ,\kzjF_U3jV~2_ji֮ZŃxf+RU6u$dG`,AzxH )S^>v)A.mPXRM4D$v$O֮1$OF kB& 5[b5MdT\1y Vrmwfӆ̜2?Ï_ӤoZӷ ,_[uڼm2{ުuZ8 O}o>4$#}=e Z-%%.BIWjR-҈d&Z\9*LRkvoxbZcDׄaTd 1y_ ZcݺY3V-_ªUKU"KErqq?QD7y n\Ty?7ֺEe2%B94lӌq:$.,xop}6isq]uW>J ~6/YK ǢO.!ǹI"8lN zwb}> 3Yv/i9yL9O9yIbeϓˋO>D<, 9y|Q^w ʔqE#).=w2wE "6Rf  55wmYUdkͨW>Ȏ OgSXQ"ɦ8b IAl?S݂>>A.C8ڕ~MKéj$*5Z"Ne0K} Bzߋĺ[RJ~֨T~x,{1Wdl _=98" pEcR'"P63<yY Tt'"+'bHnqr%.9 ]7鞵 &4|.`&pZDrrOZy|#€pLBm;1VTs^(.1eML 1 A2b'&A(6-Y·sϵN"Wnz;|{Fv}[`outT"!|7F3fXx)'YLwѤ%LrIdrY}&>ln9E%Xa\3 Ƃ%sda]u7 o8;tAk$KPF.Vn=2dl0|KLdSTZ  Qs0p0tbf\ras>6vÊ/x Mc(߃s ψĥx6/aDPB(4ѨIS{Cv 7Ő{[㝷Ѻ<8Rcj00> " -B\ڱ@9M{ooH Ү3ZC.b6n݁K<ƅ .aPL>f[IKЯ %*{*td_i޼<4wY6>V}tb Hl7nfIƏ}͚2))F662%ȭ`?>IV2ե']ٚ&GnD,<=ħ>v ~QwOuG.}~n0?g:;˗" JJ7jJ4A^94mng[:aٴ6q7l.h,ViAE7AO_@Dţ(6HZH(zi&T ?g3$TcBvw0>/}vf S<_{_02v/\rC|;7s|Wט8w`A6~cdglpQfRgݥlkEݸʉ )R%*g.ؑq&aBu-~/,_QXYƚ>s+\#UߜBDHNm&tdspud6]R-9ǎfYL)x79Sza]sWpH3H&.HIk4ڑFH8L+i+.CU[QK!:,\F54*$DWd !},*AZ%'bH"&W !D'g9 EBPY#QUSM!z*7h;?n[5'B;f ]ݽ$rPD Q1p PD$A (sDLd*QrCw{dO?U 3wwUuժZO]^r[/JB7(:}[-nq[-nq?Q.\p… .\p… .\p 8.\p… .\p… .F .\p… .\p… #\΅ .\p… .\p…E"RI4L%4Ccؠ~<~ώd@>KQ!t"T)ΊYB4@+E0bW#yt@ILvE'HH%k\ul|:BhØ+sF8sBVׂŅLs^y16OƳF!!#kݦlH@~o_<%YёݮS]HyQ492h:?tG>zp… .\p_9%1E1< ԛQ|ytX0+̙Cf$ϧ3?x$bPBKecADQQst0giڀ{!@DWJdIңD'4IiHc !-Cay^DS?VwK9!bY gsfqV-s- {Nѭc):)OfD!PhH^B H[%ϓhG~ub{=N*± H8oBˢ.\p… .\Cތ<g@H.bږz#67ͣ=@׶4oZĬYos:o則/B7R6q Y\ ]0T `hڰͯiK%G:,;֯X–uK6x no[uYy%MWXBIa^͚Kعn)-]GI23^%eR~ٸxC0!-äd)kSVԫv1 sx~6m}7SFdp*5BSx'bڐ͛z&&Lc5lݼax4d<ʃ*O4ҏ³=Y.>\1^ۊA)4 #I?ݟBYvJCDQc !BlQ$`D8~`7;wf͆mܒFI4KEb\wk~\=66wͮOT| ޴|8{&zҵoҊFI$'קaF4k۞9~?.67uN;S?24l}?.];3RR`( KGN5_!sCCr.("95!Ѵ4)nkɍZ04QrcHLnBb,#ED(HD4ag!?,0>`_&`}J"#]Iٺk~7C,o׵ԅ .\p'.&4{*k^\|2# $8s FOd획R J$^z !V:u_JOӠI+VmIN]JYϛoަ]4HlFf鑞뮻8vwCR\U:\ݜƍ!u %|x.ڐEOHkPV-F8éSB ,ݱ[(̈ILoߎ*W ظi@4lj,]46Rn V_E+4@A>~oגܤ ^ddԈDZL[Bդ^ŶMKyw 6,^`׾3x)B$ԢFٟ*a[l*DzNS2PH#k/A D) T-|WЕ ,xZ RMe3$^¨,]śotoȺ?qO|, s?|KJt'dqdqXa^yah:iYL1#'vϬZšU+IY )X V2Rs- *6baCbУGC1PPOH|*G '$bQ7}]LteqX1T-)#CXѕ8BZM ¯R Lb-=qFDa Zo5'1Tyq9,IN $WE?|jV$er֬ZU?qMd*4 2LP&An%<a f"NX 8&*\ ߹@)IDʲ߅AH!a檗 ^aᵭY5a$YkWKxĘKP׫s9kRX e.eƜwYgRVrfڟ¤q/v3ЉZ 'CL?J(4FA췼XKX3h:BeB#(b(*4/ GFL=0^R)0 dl߹Pa[=ixPL §20y|((ɥՅ .\p…K@a+Z*! I kXh"R/3`+_ ].CaowBa8u4C<ߠJ 5i3t|I>W^q)?.^HbX8رӾ5?Cqv}TRHѼ JDМq M ʔ.G DSY)AY#i\!L C "}!"KҕHHAA@`Y%˔'X_fq_$_Yqq]PB Vc-#/WK*#L:A$bP)) Ǻ7s2I < mn:hp55_CƍInT?~*4a#v3@#x#giؘImj,6զG~ڲ]Bx1ei̞ؐ:ǎ'cw֫ŰCqc{ wڞ (CvlAJŕLK>eLGXcq{":ɯpǝRa 5nIbr"W'VI\{ۣy 0Nqrz36vw؈k-gԚ)?BŠ$V!A6z=&lOvٵ DVnz wxH0_/mFt;'5-y[q62Rv4JnƿGۯ'Ml{ S9ycpCShX9 9Ti9fm a4oܐϿtnv$''4-աir)=H&f'y4hҌzMhXR;-/@$4nZMnIRbW7FFHjs+v&$By[|j&%11fuhTo#ix/8ct%i&nrKi Ukd2:L,ZҵMFlX&u{g4Z<~oZүw=;moMig/fYK?粨d0BtjH2T&GD|JEHбHfGѵInCRR"-բA>hOD/sS~C{ߜ6 ^PGNTR s?؁`Ln~m>?{eQq+1lO7okHH(|B농1y sfSNS5j{L兩/̚>[nP7IhTjѱs?W % p\p… .\\A,>|gwmG&ML=أxx2^i4f̚MFDbE ]I;nW8HwYz=V/q`hxq=^0YZS.F$-۟cq~=eBDE( t)ѱPzarB/Oa Nn]ƒ2{8@rÃ1~^˾7'wYz nةaoMEHW[W!0?wpýOp̓Yvn]ǝ״HO3府 ,8wؚk+,e+~T1>'6_\flHYp.1\ fB6 w/31TGb7a9ɣna3Cfѫiza(j4$))hܔMhи_3f GF)iH:o0JVIX:֤d%XPqJaԩin}YlU+Yj5{/ f;p4a ORF$̌ 2c!f6nO=·oAhbK`)pdǖ_9} M' ί9Ĥӗ@aUܚ\ǮMZUyIU g֬[ϫj5RVѰzpBIp~L2( ,%1 Kɲ{ݤ7nbʟCxdȎ'zBy^}}V.OUŕo~>zuJ.a#<ôC(AH"H(&;~N7y+@a䞍Ҧ&ؘzpy[![M D;ɯdꕬZ )+15N"4es>Iobz֥by)T4oٴj W.fؼfJoMjFDYoSYw#֯Ia~ٸkyeK=A ;6l>)kRHIYɚ+Xf[FWPk27@j5Kr:֭^ooÃ@y".kКy d˦~Id8\ӜsaV.R1 2CX> Ri{W}Ǩs5r$Ą Η:MЍRXv kW`|6`Y w~Z5n_|-~{d[o_rV _-\ƚg{_hlܵc&Ng_ظ{DI4+mϦ8?fXV:tfælL'﹚(ӧJ.Hl}'+׭e5^ KYTNÈcI|dBƂs… .\ppYĘ7ɨ0fsF1f]3Gc3:- ,y$3&yVo֚&-hԨ1 #-t܌ ޯ͚7nb27ʖǩ?㞻IlܜFMq ͩ9?~S8Lu2Cթέe,"k~䖻h|-f[5},Cl0 H [QD"fT{=߷]z4Lnm=}'>]/]bIG'+`ZFlI?[֒:&Vbͪ]mV2ihw<' ɣUCaE U\o.X- ’7իQFd  .ط{ CWKԩQD$5ZÖ<}({`?zP A7={x聮"GO$e|5_eՌ׉u斤|'qSt}dךlټi޸5ARsmNޣs~^ϺU+Xz))kYz-g;H4h|.!z^a"3nR6'Y{WL8&+2%<4mo=է/=z >6~V0 " ueǨS =zL=[Ŗd+QfrVJaӾUWzZ| aL܏m:oUA4~P +w{"+^>#fB'aA:v-koۮ#lٴ<9rG.>LR>QxU(JFf囓vVb=`)B!pVzǣzB#Ä *3 ̞1)le7_FBǟ ZEJ*V^ʔ\>~Wz7ֵXlY7>^ڇRM%g/嗵|7?uoK*cFLz=kl iY’=JUo闍Z+Yz-+SֱmRV~7GT3E… .\po%\OD,2WQhEbКK?~sX*Gš3>/JR%\T!xӛ7s2S{ PS1ed>Oq<$6M|4g(ko&"Bh8q}K?ߔ2ʬIxeXRq&8*q9ceq(o" M[8ni~,b_xqk|veO/XKq ٝ燎C(݃%m7BBKXvxZի0gy]3R`JleY"kV2qzq2g"f?pCG&PZS"t̑쬛qIr$&ؾm6@3DLOȱh?e2JxYlk&;#qGY8Yn>{NM4áG6x˶ᘈ{'(S,GiS_Gl`]7LH)uVI!'ތ#o 1z i!-9FR^JG%9Wl$:=t ־etp3x!t Jeu < C[ x=q/ǘg崽_TY`f:w\DZۼI18IfYn*tfӨf}2o9@IY*uy_QCʼnpd׋dkFƎsCy9, c  ƀs… .\pp.\RoYfddJZ\ݒki}{j\ۺ q°2A@CU\sM/#oׄz133ДKĠPt|2q%*5zI2sYV~B" @&>iXPeH )j6lG_~̗Ǒv`woK w0>e!t Vڳ|ё{R^}Vf94ΛaYD[D1(_~Bʥy_&%R? ӁKq=Xv/Y҅2epG~ 殻gu ĪTX9smנ![\GxE-_I +J\Z?g%szf4lHm2| @NOw"=3~[wiV|IMhڬ ϏLZթ]2÷ЦI2>&9z$~I CX#_Io'SWH!|Ȅ?UhȜ Ciܔ 6q+Ŕ!8};?ښVJAPdVnl׊INJ")1ߨƼ@P ,=S1/SѱF% #01V].٦n` Ct,u `iDM!ͯ/ҪaUۉIIvOOʼnS(_,?!ÀD &<*D@fQ&(B!u!GPGᧅּxmќxg\WV-k4䓅֬)ٞFh: IչxL݇"r\[>?F$m!-~P|רŌT*=;cǷ33,Cn9ԣE[\߮mGaL!q ֤m-]n#aŊsMrEI?`: jBZ,iqY{ O H`tf cЏۮik|"xIlՆ/Աپrw]ߚ:uФU{F pM2#ޤ-y-fޅ .\p… ss6$(|<{{M啈dfi3_͇_~)<ͨtVIiRS/} ?UbmOXI剥C\GjO05ñˎ3PomdpGXfˈ'zjZ:62S BxxiԬ5o5ukW~ ޝ*Ԣb\"4"ҋ&XjkRV>y"-`2-R xb;dP pQ?YkVfJ~n!ǎir;e! /\u,cnhӘHz,Ô(1jd^ ˗-am*VX'O a*u4e:˖.a^ʃw@GNT)aXt՛_5+Xr)y_IE/#OuE߲>e-ӝ-Vq/%HU @>%k0 ;I[8 #|P#Fbُ_צ@!~uH(禿MVgbYF){,@c88,eluvrRVI96^A= h [!;nhU0Da% X4c.+Pa2&zcq:njג8BW( b~-/*ˢKI>b ?~u)˙$7iAXݗ}o&eV ǫooΥ1d0H?d\\>_㟣B݌8 yYz%)+WͼObRyHiԗft2֬Y9yՔI "P|`1͘FұH/Y Zĕbk$V<yfČ/kjF;kt:^slI fEu… .\pp.\ *uhoTP6͜ Υf^Xj{hd ,gL¿}? n\;f՚[_HjU8<ߗQ+p)yۛ5קh-3h49eu( 鏛 .\pkF.\PTeP;æP ܟ5'7Vs ̾awCL( RT%|&=DAnb' m: PUdn@:٢y8WH+?o{,"rvlK&%Z^5mIdPg!m]p… .\8F?KtWJz%`?@0d{ \%+:J.\%^0)>XŅ .\p… .\p AP mZw5GrM6kmu~&Ϭpu˺gq;ߟmM?{\}S ϶=FruQmYŊset,ˊ$YkZLLL1VBJ.eYYp9\fBx{Z2%<Vς,Nǎvv;gRg폂m;v\~(qcg]:''z!Cx{t$btـ.`wI.b|?s+7Bα|ȋqw|% \Xw\NrP )tRJE|D\^T6 >R!R:DŽ]߳V;hbY(W˥bt}iB'|֌.\'*}Ź(c\Ѭ~_ߢȥ*!;1*.W}Q6~(kg\;GȔ L"i?{c8}rwʹjQW44O'`-tx :M /擜~z|g_D ?|> 9rx) i.ٿGt>//$5a^Apod݆$^LUM+wL oMYXGBߟO?E#0 $6;pԊ>#X{.Vzz)e)23ZϳmrRdj1t"Trʓol.:re4K $>A<_f)P C)Ge ]K $bQhƬ}K:Je Dq o/m7)D84E"0bFECP!tF))X@jJ({>FSN}Rְ> [bBB"")B鹬$:!N4ea  t"D0Sxס PYH>LТmB 01TLAXi>ѰmdІtg[YpFEYNB*aD+ c xαk9欅GLЊ}8S $^+C(4%썕$PhZ> U!a=grDy?͏|WyWPa|*0&B)*_P; E)Y\c)[GaI+RhJa(Gf! _T'ChXODkSNywB\lkk֜Z;x! La\v^SL L*LL!, E{޿ L|2WFP5MSXBCW])|D4xU& c  ebk !BJ% ^!u"OXxPģBxU/qd|X9d_cQ!<*""s`Gf~heD#בsƘ@0>P&9w#MI|2KxA8ԉ8ʃr~$LGVJMGiE%?A "18kvε|PxT !P"W1TZagdQau,Z3B#= -fJDJ @4{o&=A#5 8W:a|* 96PYE)$!5@K.콫cEeͿ.L! !LN} 6 ABBXs}3# k2b8qH1NM9\M#!þҌXN(<_>?aMw81TO{K >?8BGKD^BJ$^BN=Ã_dSQ҂-+rrAtibj麟^1zd<9-x݆Cw7`㨦wx?nzt%?>~2 Abis>;s'sM~ rgδЊjHXt9c~ ܋!P*FB;ʡp6V \+y|,+n:MSW_ߞGWSzk>BC#Gea4eoCz,JxIL/3 :If+3T:yJ=t?JX*&`Y\ĜJςaoD.:{m9tkaaJ(N2mHOʗ-Ϭ>#RJLKi"DES J#tHQa}ܕGy89}{zb[O=8aƟՂ|3+,֬eϫ3|n|{܁+;6Ч{W^}XTnYĎ?JGS,]{l@E;AT#{1 ȂOJ ҾuzPf|Nrˡ=ѿW7܅'Ķsv3WOFMIi痕 ҁ_7a8Rx`Щ SefѥveTsƟ=!`rx:vLű#vޥCJg"^rtܟ֒ii'k@ST h!™'ynd 8vt7 SmVF<ۛfLsL9#ǎcȐ| NZ좮9Hɧ˹~D@㣷fҳw_mߍ q7܍+Wcy}XJ8,x #L;q&h:rVʲH}ޝ13grtiPɳ?}H_ L{MغCF2w*/FgǶ}'~^ S̯, g!ݦ?O,k5“q?xc&)4/6.˥ ƠKMy!-$OtcHY #6)YMD( >dPl{M`ڥօ-D/42w/6\ 눜OAuwlSQB<823ROd u^dmԥɱ=Ч3gKě% sÐ Wa~y,<Ċ?ii 9n=Gpa4/L߮}N>Qc?ˆ{0dq8na #W[e~D&L.}0A;Lc؈<;RO8㧠Olϓ=EKXE?G\ĉ ZAf|QS^ |(,YOwK#Hiz}ȎMkx7yߗdG-@D.]h"x=wlch,6nɫoVϖ?ӯ㣼=sZnG|RYeKG|he9v`/K|87|MCY~ /*cTxPat֭]3oˣh97{J8yK#MpB#b .2* [Lt1}ͤG?e(!Fة &ę ̈́?GI3Q1^t(,I|b4C?Zcw2}T0LXo,I(Qz.9o;R|ize 3ft>=*1:Q~1WTJD|՗4y%tiHK`Q )R5wiSI\\2ޕ|~řFȈCz̈́6d(k ׏vޠ{=vKgY~ƣ).# Izi^zi*];?Jeԙv< ?5ޝ;гKG ˉ[4~ c&5J3<ӇNeۯ1E0hQz}7SJ)=B eZԩZj<}̦sGqF89 Օ#^g~x)Ə˸Sة+g_}zf䰡 Յn]ܸiL<.!,Z@\1 ?,˓LѓE 桋|OtͧVh*3ObpOҥ߲kv<ӛ,i9Xjvy^U /aI6mŠGQ}GR1%,#; ItˌܛUk7[sIYL1h*)tueΜ7Y&?-NO(#l܃ħ,N:Ѡ5(U1*BSvBSi\tɥ_o/o5cxQMh{pJ$R4Τ&N1Zp ]V6x+>%ex gsQJPRN- iy([CǶ25SM]T J%؟#q&-H0_=$^^/mG1ͶTD".@F]~DDD#.g2LPt9T(K)oqfo:ǞNǧ℉ݷؘX3y}ee:m߀_`FPe~bzu@ѻ}5޸ܹ~]st?/}Gll14b˺exQ F %Q!C ;x%\5,2LV7 :iL3LgvϓC_dס!b< ؍?#ś84VN#yb(qP^i,tTE5dh[+'U5|} ?A] JJ 1,IwMi ˏJNjj6>@auvN<2όP&>kEY~Sv5̱<6[мUNf3E%4 aݏv㩾cٲ7kٚSA˝Y%ۯu=Y}u;B{.%Oh2 5Sxyxv=<l͗ڌi ]G}۸mGϳzv㇯ 3>֑*E8(% a a. ToM)X" jwzVXot׽\Tg޼8*i޼i;|f&OH5 $(gU T!4j$6g \\_7,d޷LyKn4zGѢIC"4۾VI4"zow+7ѹ&MK6-Xfu+2eX= vٯņN?D/hӝ)RCa~/eJ ˵[rb6]_~urc$|b~ٶ-&..ykLǕ52in5^+q:|>/WMd}4/ɭ?)>/kVⵗgYt,Tbq}>>1M.L1Z v+n>#>FKP%Շ5kd!faʖ+=57ɩL%aV-9x+/SgNdُ;~/n``+7e_R}Qj]u%%tԉ;t0 S&q-ٹn>|O]MAxedv>~#>z}^&V1S^y}zQ\!%oWM^Q/%3gؑ1{498kߞC+{]Yo,˓)X:Ld-ǽHoaט4En Ҳ蔹2cǏrtv=0ɖuZE䐑Kܤf+"T1#?B8csDV-3}eFH2Oaٽ']d!!]>CvQJ>RU *]Ƥx8y V9xv ;7b b\F!Wq5f{ΏǏjy1D4Ǖ_YUBH([>M zW:sggݚUdqt*<݂?,oly&)a˴]2C_D^y7}2K 9)dcX|V.QԬSkWdQ2T+Sxxn,7ٳS 7P0=LReZ-zIgFP00BW-bhS|ŧX%Ox6"X<? M[_ G?߰ gb(aSR*ʧiu .M Qyi2 Th>fy=tf&MT -Th֨&{3 ASg]̛?_6ybe{9D / 2sXZ֮.v?.t޽,9֔EҸY#>ϒ_Op2!F kQ={,fWFPzy 2|ƿ6U;4ˮCyx}P4ebl-R ,C-Usdof*:o{:~9MR|2)C`Y*)j?U9nn!Tg>HLMѣرw,%3A-2`ꜦE͹5%1pzx֭_1űxőfnt\/^:\߾=yիsYK,R=q: %r{Vtx/K/*cʗ)˴q2~<:>EVmisuL2y>q2# #B#䋥afa˕zÆ,] .滟6h: Ca@brhqIMֻ+_cE$lzЕh mP fGK45[)_|ԕZ H(^`4i}z7ĝmK4%2)t  D4!Y7>-߆-aAx0dMHЈh^,]ïI=+Ҳ8x4XLٲ}^N9L6oIZqhe[f(4,m!qU2|8sqם0 S,b8NZvZ:u-WåWV%V*ם:q=`rU.SiZ‚*WT29sx2Ɂ}׮/6ӽswJ.M޽TR2,Yb:q34{б "/g>Ό˘‹,_W@E`uq-+>@'_9+j~S?~_wtJT2ea C%Xj`JMر0N\+t~eM~?J IĆK@+2@((I S ¡4Nُ G8t KD<>/e˖BY0QmyP%ǗFXiG9s~jԮC،0P\O)Z>7y2Nr FLq7oEU05Rx &$֫ŋ/K鞃曉!^[hEjWauhf) (]7]YhDP*+KҜE)>u`ȗX4wc,&ta_MJrhyuK\RנeR"1ДգH @XYä)>}2jWDSx9#,[A/ąR,<*/!lܲ`ujs&6oXKZi6Ozx8Q^Sh߄]?T~;%UhMs =lѦM.N;A47rm8 ;︙nj˂/?ԙL0W8~ٲׯcԨY-C7Da>!#3BW| |\1*]v9OHlRФI.)Wѓ]r /O|<%b1 rTDe/sG0狡XB Efx;j c1罷iժ/OƗ~;&D\PT&kU 9d09ꍣ~ OBj\R!x󏵼:q@ 4;+;pH^tcXCQl)/' kDp`3p`hNZz1q%ƛt}^>/")tĉLC8{`C`r1q6 ZVAteR.>RFZRG( ᢐTkF" +X"FFxxT RE”B2kpgZElʱ3J|\_jiqf+ȳ䑫qI|nO 0պ@Tz>|'A0 ~p[ D}};ؑ#pqX1L؉;W))xRʙذŌ+4qуss3ԍےR6d`z: W'e)[*eKSBi$E0 Ze:iR(M7w$\1s%!!x_7O2k8M esc ~X󍯠+2FӟN8#BSaC! +*^ @J/Kfa|a43H:q>v"gP0_'z f 8f/ƨ )Tt)+)N[]2eD&)0<~_ݖ+^Ŵ֛ ch\Kɯң# Y[^2o?i4jچJf tJcL4e0tTU^ƀ8&]7!Xj%dҤ \צ11m.0iu`ֲl AXŠŖ޼0v-2D ĕ/CK/a<z Vxy~mK4h_≎(+uxH5$ؑ=\R* ˨(q:%:=ՙRb0-IzfNO>Ĥj 3-磼H%8\tEMFCPge@'t2&dB˫(Qg(WO3QK׭3 dYJ_TQC7sm0fꫴn. Fʳ]Qbc7QX Iɼ8ؑ 1pܞSF<.2B>geAgBIm7y=vldfԬWcF bon<ۣ#ʔ3~Dk^J\ @C1bU+RRA7ۮkIé[.]1a\ZW1xPzt/Mo˃ 3Jl.ZTo)hNY&rǣOI$׫F0-oBy`=?ҨU{7kEgйFCJ =$OKK"TOlń/sύWB4iw c&Jfiٸ'%)9 S宻b\uե\ZϤ#w !w` iܢ ^\ӒOLٟK˗x~k >a.\*k֡Wތ3*/kodЮU.*ŔI#ݳ#>AW^Z&B>]L Q?.އLڍ7uwoE r ]Erɼ], -ۢ[c#0e2UW 6IP`İ>tF&H.4?o&^J=!)%GaL^"˗G%=SϤMk)U$Ça̘~\T2ea( ?cNL>׶1PRѦe2C+<5| k|̜2ZҠni'=#-wʴShݪ9V$Df-yqd^ CI(qJ1L\FB\<*ӳ zE%P:2adiԪZq,DĖ}?|k{oeܰ\ue4vfup*qŋQzuʕ*d-7ar} `sraIdZR3 :eˣsǝ1aԫYԓkSØi!.J"NVeN9/5Haol#&#(e:j, 9p,XxO:Rq\\wظSYb C5!t{Q*ì e/CHN;A'X ( :O9MǺ̶51u7RI.@`gܔA Khve;-E9&\}5%:E Ǿ=*o 'k4ޜlo~>3 A&F5dBs=LO\KN9/2F4 lBdդ-UM Jk:EF\՜LwYq` YH+˱0EgWc>k: ʰcadhBp+Ӝ6"lHYnp}Ɓ>NF63$}V7r6G c[`zr2(e*['wNTCYP6c ÖUʱ'Jq)8,LRVaxTĶ^EcG]lQKIPE,lm(0<ʑYsMٙBC-[Y, w]e+y_Sʱѱ-%fwSͩcAşT,f[?fIWA] }cߑ2Ś@rì>S4GyPJ 嬟De&s ]TIhJY@&,R` u[wbj*ea /RVEd 5X["_]@KS(a:450+f89V{=Gw2yIͰe*3'8 M~"i=˙+Z #;4,.lK,Yxd-$zBʴ+I ̹rd` m]{̨ JڮIw Ԣ{m!#3jU@:V^8>UFݲ5d v]Җ5w6k.0$h9=pv<;{hhxN2VCvY2;Y{kN6+ 2of[:& gNf 'G%h&דG9KrAbfﻈ"G[r0n)/\40`y `\MKLȗNckS\ GEˢI@ȊlK׏ꂪ) YwQM9ٓ@^P؜Y/5%Д(tXE}9_ ԍ"gqeu+}I Q+,{ 9nY e]ۜk.ɒT_@S$ \+8j+hAqΓ D-_SBn?NPO{,)_ʂ̂t*s*Jd/ kg\*Py!ǻtg䗙6u:cCJY4+sq͚ާÌXO+"'4i+qTV8Meթ=7,0OWȞB䌳yXƤyQaO^uX,ڻ8d{Q˃ȑ1\)Hޞ-*p:Nezd\ :w橖;&gAuPJ H'So}{.V,Y# s-. w1uwϒa]̘wQ捦XEmXgyyQgTګHC={S,sZе9<10#*Ϛ4˂/c&P3s/BbڢiYlsK#sϑh2N)X[d)?> ,'Ϟ@]:/P)cbS.~ ~_7Oo~Q/  k=~6+Sx1gB]P7b"G&Ϣ/&#(`ş.^7nÔ^"ՅH{Wy&ro i9)oy b\d܅w+o?EfY# 6a\{X;OmA']>M*g0x>[BJEp٢$ciPA}=*Py̻W(E|{2P)rXvpHG!S}m8u]\)H ͧ/ +R8A>eم\ $( Yz_E*E{Q{Ͼiy!GVTq^;1V,0v{1@OQE;1ӽԊWȰ(SRy~8RV%:k=,JYFX 3tJοTE7U o\ӲB-;PB}apqmΝ;ZvŮ]عs' aPBLGiuVv9ti~<薿P9۷Go*ۑRrȑdߏ?#:nJ(ԩS8pb~۷P(ĉ'r~֭>}~P}yi233s IJyYQ]WN&D $bauU1+~̀f%GQ%)H(9O{{a@t }ŹowuuWuթ=;ww_ݻݻws<ϋ?;7ndڵݻw{Ϟ=%?@Jyر7i&֯_:˯x8pX,Ν;z*V::mƍl۶ 0S{$<\`-eo''+cm8I^ */!Tt@;.^V܏"Dp]jժѲeK5kVִiS6mJfhѢUT_d(HIIUVeG͏YgVي~>{k \"S-|[8 ٟ3ּys7n ĔEtNk' dT=_N`!B8'D!Bq"(l!Aizي|Tvǫ"rKs"D!B!BJ%đ 75(ai!B"D!B"D_1I^$*#DeOH&vK"D!B"D!B"įp GDN2R=#x`C7 "S^ K9Ϫq!B"D!B"D˄i,U0!B"D!Bg2RdVɏ.SxB$n.0?pTI20BY(y'≑r8CVq+=i8aj<߿ӰamD*9?{ IWIdtL!n*'yc;\2ɣ=M\s5jE*ȎtjW]JuvRi|}mlYrOaOJ)(-?W<5D!B"D!BcA ~^G9r$?O|'ȑO3g3<<<3whW)-ј@QmUal岏=q6E4F=/?7#fDZumZ)3Z5k¹;qnhܤ6<)=xЧ%x &v%f͜ÿ:+>WGqz˦TJ`H x]p?ZZOs-넔ʓ?W῵S*^c~xhc"D!B"DeAD+$1$")l\] C~HKenݽ|?91, 5~-(H2"񊟫LB[RB!B"D!B@gͪm%s@JJ.r1)yoT9!DڍsXE iadȇxad:$ڒٓs/FM ݑ L|o*?(X1jdf栥MLŕE~g*K場C Rhrq1< ޹@.]a ں%mvc=D%p^l@U Z֙aCH\A9hDi:<3b^PNA1BÆd v'!B"D!Bk DAY~T҂0x,O 2H q 8yWӞr o&°iF[|y/d[bI;ی,ۜOǒ`rj$&bDD>c\zaWbn7sV55v 0xiZ)g.f>j;֯/꡷!ӺYKݵ?Z0lr*g`mǜy Xp22 a&cI$ A&Mx{ޞ<S&ѬI R*aDE%}#6|C1w:vAϮgL}H%NIH"D!B"D_B!5a=ؼr9{/K}tn:V.]Rq&=H@6gْ ["7cќhbl޴/fӲ gqV.W_?sDycW00uuZl xwK ݍ[etr6:k/狖Ҿùt< o}#6{dYs%9Y_Xس[Rɜѯkco̬%5q<&ukĻ/=Okn7{'D!B"D!B΁C8Jmjμ:zo:WرqWxפmXTTSn\z0r\ -npJ))j ޙ><ُxѻqF>_4/F$o֯[ߗK 7!ym^̩X4w&7f&rvND/fNcȭ#׳H< PS"pDiMaMxjrg73]{ "D!B"D"s!J*A\)q h ًJӌ?!شf!4ESQ<C(Z+_@ QjO>[szgS4yӨ:SmD+dyG Zy.>CӤy3Sўfղ%oz7\w3S| \ͥ<\Z՗_ѡ Jfsiծ +bO GpU 7o=d;Im؜Q,Bs!B"D!BCHQ |GT"2)6  D@ @ @ Qo}m_$h^0A S&ذzݞ_ECfb:5 v0$@D\2n+)YNH!-A$ ں/APEgvn@"D!B"D!~M !*4QE} JYOkZمE+ oZc- .WYМMZއK<儱p!B"D!Bׁ "?u"){G؁Bƣӄהu-Qw_PR8I2Q?y~rR'S=,GH܅"Dav!Bd#NI\HɘfC1"=1?g׬F0&%ZkK QBV(XNR?-xGժUZk.vn-==5krQ---~-;;̰.---LR'+Xu?sJJZʼnP !@3*iO%qc\!,e_~ɕ=RSVW|2P+|.Ĝ-BfԪUի[[[[تUFJJ 5j(]i[[[ۯcQժUf͚YN0 pCP`X)d]zzV~tF.L#g f3{GЉ3ZEKzO@Z rd"%"Qebj% b"HAa!Qbl, / [gETabhDMݐhKD:,3D!B"D!Bs]'*U! xBQZH\a&y^W]1n3y:!ѠV \G.:e> T{*FxdS3ҼQ)ޢeI_ ӧrYmHRIsqC|F!8i"O "D!B"D?g! i -Z: YQ5@h,%VL2oʔ9K/2yF]8~ & }ض3ym3II\ZޚSzRhٔ n?#G䩧⩑OOcYv%w.]8a$ʏ + \a ŷ%,PUp\IxgH\{ؒ(?ÉQߖ!*pWye*]tc5˻悱O)PeBY֋<H\sg#z'G>œOdS<<2l/xKZx$F$gztL.8];1( v O> gK' RI@ ̄O*S[뉘H_FIY< 5 X9r))WA}CIDy$i!BA%e&9D_u'L 2$B@ PIGZQث;>DŽEǣHpq~bM(hRإMEئ,bO"BWz K"ccK9c|ײX,\2ht':FFjLҭÙ\umOZ" E'%#aY_c=}=?}u¶-wZaKܷ7njG'}ePN\(i!1TALC>^潙(F {>Gd Öݵ)<|&LӶQdB 3]T:AV0Ώ8+J|];匣ey|cR"'p*)X4Nie(XZ=WsBz8(D!~N*bZQBԩ8Pd`2+2_0‰{/.Lej雯x/0ex %01R8&װ(\<- pp PD(-\abQNiў_u}w}O˜ݡ%yu7'f8&L5,b?E`(C⡄A,¢,-m$2m |Qy8?Ӵ O# u9K3"DC %ÊB3UH7B~ia SBm dKn*nЙ1Sb@!g_@ѭK{ڷȐdYw8Æ^΁3w.Zẫeռ$οt|$5p4iZ :hlϝ9ңCjہ}dڱmAsΡ{\{>|9gH]K9{wtL zr+8|vm݃x V,Nsv,:uHØp%FԛHa@$,m.lzt= :oV{Gdr9mňGFbR%Yf%ݍе\?>b E{!Bb'TI W2ګ\Ѱr3L _?<{ ʛoO?GksY,$SaH:{ Yl5Ϗ}.fף^gԫyo\l@#ŭHģjjjbofyRsooawy2m?m&Ii4j'#<{2 I];G&QlPGF[y[RI4 ={Oh>1 bøLbh?U!C|bR@&(3Z#" $- NBK5a*%BD&1a# 9M H`|L>й^ Kiy'Rvg"w={`lnx!f6RclLC#3`.̧K1W !U O⮰AJl8o "D_w\(s# " VI(7(#@K\%3#x3恻 O8DT9y9V1A ۿ5_,EkȊYtB>Y< wh܌ş.y(iKp)x"a=/W|)tmh.0<ɇ!ٵ~%N^&01áD&W֡-*'1ѿG4; ˗/f;hV G3عW!e8 "/k+#.S* @Ċ/=2Í\{ϷѪYܘ]d@i!e ^^HpQ:JѯEDcz=$~]_䏏w'bYٽG-CY F8V.bCwq9?;C'h,bƕ?H_{Fߋ8 k?5;1j횸n\};ʨ+q8^b8aO(8O4ڟݕ+{d<"X bsD\z)^ X8}2ɞۉI  `?-bn~֊ h KaObhdC0o ~5ȿ6a؂)rs2ٻu 1o9+j!l{nE3a.1f3~`$X&/inCq8g/>1,P%LqGLK.HKSO0MZQJa&T +V~]dDSE%d@ȹ-A-\aѲLzM^~1&*Z \a!fϪU_tz {{O+|!Yg4bޔ̞1vt斻`|̠uׁ _U$2\$\om۝%5;'.`4V|_~W;@v^K?/raԪWDZSI3:aBNmDwK>Kٰ+:nrXl%yYȸn< [!rQ^(qnz \^ЕǞxNj/HV{BZF\ dDλ]vCoHrPVQ1ؔ"D!B@ܱDM}7I0Wqע(DJ  r˷-ߌp[//񯎥eS<"Z7D<:םO6~url\“} ǁ}dW,Y-fk}:1 )ӺUky?b@(_[F.UrtvV|1K?OVw'pvӚTOϿү6bTyjz,[;/?y<o?^i51'Hx!~\O 2mۭ̞9hn chhmPjM֯/2Y\F~Q{ X]YC\Ӏ!Nv:{8GLF˳?ӧ ~ z4S /-bSԊܬ ZOWQFݐxitއd|[f!u6CG- .uժUn`4MG"U(NDnK^Ng_xxE?Dhq@ahU M:"iGx}axx14E%_җU֦ӧNcƬy<q5Wmq5C2u^x]B=n;OʖX-qm,Cӣ/kVf ̞;y4#1X1Tt>rڽu֦)MygX!>*7FJZ J` ҒWǿΜh|ڵmmkV/YwΠA2sbn͝TS /읛E GDPmFhDL5B& !B#*& &<((rUPP䦠SH%'yu03A[xLkiF w \,Cq' ?EH+ -T!:hz"BLDBF: >MиF I 6H "5y+J(?W:xH-+_TXb1(40H&~6=$!p1өPqn>=blÊ[E;}>FݶO:N+o<~_~TLǿ?x/IY?7Yh!r*֩M֧ B!)IJZڷIݪx#/ҋFK|\"52iRL9=m_NPๅ675`=k56?舿q߃39K|.jsZb(c@bզ}+>0+YoP]GXyx~Wq*JXi trx'xGxGxOKӉUyGoOѺi@3`aUO)\|U<߸ׅDcah$ELYԨׄ? ?$?(>?t_*%b]gHdR*Q6m@ 6_  !B" ǜ-U_R5AQsD:Zap30r[\Խ gwBNl{\#FLa#A吨r<"h\$XJ$xBa\LZxDP2kweeJ%,}J)GզE1]42p'Q:/RM ў'*(WT"il쟴(#E)%͟d!Bp'e`-ݯpK3ڥ- lUe2 <#L~Ԭ!3ymo=u?zռ8~,,ˢπ0mjhH4# gOSQXǎгw_;~Ut>G/ ϴ2FT@_%|b$MR%'Z% "b}Z /}'/_W)MQUOTt;J+"Ntq*":-?i+Y>.wѾb>/h-miM(d1㝼7/Y @W *y.pվxi:|i3g|@N42xq㔒BG_Ig| 'D}iػgߟEFFCZDiR8ppME(R.;mwl(=уL8Ç*iUp-~E0"Y.L!@8KNnߝʁHa;C;*6274C]zD_ bMa(N,Na# | Ik!=РmzqTߝG}1BwkM˧ߛ%Yh]b9LnԑQ껩dOlI)K*JᾳwEBe"Q>GVBcG1uEeUP<1Ҧ(|2oE,Lz 2DfXa+]Mb\,s0;ߧa  '/W.ز.D{#áD<|rέkxo#yr_yaˁ%h+B` >f y,|%}\JA$}ɏZah?rѕdBGsyDv;#%JZBC9YL8ݻm"pS=6JZ*?q7= /_~~y  H &Ǧmq#|8^yBW!J)+9i4&J؅9 Dݽ,οx40)Xayڿg^3s֭HװZajNAiѮ356D+׉$E|$OxY }~{PA9c"xIGƶ%V,eΜ8`׵ťx(wibk\ɜYw0’(i٧˩UgiU+=kDZvT9W' EjA GhAlmi!v>T1RMWj ? |_$x49!B"D W^zDa!o_-alvm]ȧkoMqu0G+E R{$-ןJzf.ôX|9o&rßph:ޟ:a @̔wSg-&7 L~>$GұM{muFw- ;ILJfi*{]v;nOFj`ϹλX>+nj^ O'rU}i:ₕ*=Fĝ̆r"z]֬D} 2mvlΖol>h>/\6Ry䫯2w"ix7a|<46Xq+-$H^Q͚Yضa-sg ;z|v-7~m%H)ٿo?׮B{9|fbז̚6̨Cz:n\=;U- -`5~,86YN5[w~S琓prXV}-Ҷδ)I6 δ)e#To؊-$s|Bsp׍aZ>_K(6~w'Ou@Xr9+׬GDKAxwT40wHX$#ь2}<,]KQxnS'7߬G]:a hڼ)e-̜e]9aoOBNN.+>_G#L7'N'Qcƴ|3bX2 ..f/"=37/̃qr1m|.X̞9O~B4(敱oelN~ϗ}Nq$Db̞=Uk7co3m^|1w۶L>?YvڏK(lW@r-Zh\0nۅ`,3<% rR";9c&{wngúKH}0tV~.ao!< NQ^ţhv:xǫY~_,RdNsPM)GV4zۗ-DK8T ֥iOZ҉~ʿ ?q,J'T2q"]K!4'bu\]O. 2PKxWm#. "][W1gTbDՂ*0^hqCQ-"$/H9>wb)LXB /|"? W 0\FUajǏ=LE 0y}x 21JId4cG;h7:S7JY2\Q$P.sU6 4$Ԯr8y}b oMNN:yQZb6IҤ h q6iÇ V1͚ cҤWb|.:++,_{iyzkUJEiޢɉXE͍ JqQ4=J$Ԭ]#s\4iAbb2VĤvD1b<<סaSZT[K B`K}ȋ)Hy&\޿'MT#/'zPV "H"ќ\ѨhH3ϣE3 Z"9iPuj$ɑna箝dIJ#hԨ!affи4nڔIeШQCjԮEGp4;L^:;K^ҠV%}m&LȮ?;( q"uU<9 i*:9+˨uMiߤu^+:Ie >^͢_΢Pȉk Qd6..Qs,bKh}RɆ?|\#?VpqKqi?BMqRq!KUM"~SGՆEF䐙Yh!//Ǹ2o!G[l9^NIݱYehʗ"iDd1c{x*H kY"Oe 1G\t9l5c^|qƘq꫍"AŦOU&ۿŘWdX~ F)N+M\ec$l 9s}ޛŽL aЁի07x^ێQ*jU*7j&T4. M3ϠQzyƍkoŗ_G$ R\_f Hhݲ7ū/W^dUD,nZSv]4i_٪JP $<֮ys! ?阩UԦb5lGJҤ˗A:cj9AeJ(a#iڠ>\Ёw^1yغ sD` n02fU*`ګL3eDÎ7UZĔ$6hR*NFڴnY<+o`kr=8xu ǿƇ %>QYR2 )L2E -\H:wysXf}1LAx"J &e|4o>R+(eDhܠ >̜hD* \%^}0w{ʫ7zPXecƌVhՒ*TYfS)פ>ӧu]d̩L9GФ)4Wuc"ԏd~炊kr„,2'nv`YNŏWшƂJ3HIc|E}hqů3 CMĉgTUE% >MvJJrߕ-PVE,O((gu[Ⱦc&4(*HUu6Zk+Р/)QVh\撓'rrrbxW%'/l23"//qrN./ݷ ,&8Wod) KK<*[4Y )б3oM7 ai bmlEyq\Գ;m؄k!7\ϕ0,fg&Ģ-N?"D.wwsN#r" pE3s-p8UsbZ \OSz-^z9CDf-iؠ"1)XLqʩM׿ Ĕgp[uP\{ v:55oTJ\5iJHKJq5jJR)1 4mނ[nn!7\G3|DEiݶw~+]{}wޤ%&Qv _֏$bv\6Ll^<J4:)W Ji8ZШɩ\uťTIKuժV)T^$R Uj0+V Ũ\ 7 7 ګaTJK+RJ*'ITJv\mIJK/eС 2.y15kT&p6t(W_~) 哌&B4>)7¹]rTQGKլː!øeȍttq>DʫS rv>rӐ\q ]ғڵjH:N妛1tuݛ˯z`X\} jթ# :{ vσ}Lz7 Bϋ/6MrDc" +:k Jո6znr{4pZMNiv:8a7ę.^ :.a:8vİo~}̀ˮF pnܐDj|4F\y5 i(o+!q`3azԬfB \ưa72!\:h 2!md qx;g,h٦5p]~9iIIE:lvJr)׃=z`u` A[3tڕ5jrŗp۸t9 ; QF&">(3л+LY=idv|1'2kM4;% ^_A5plغ\̢F[5p'?tFk_-+ג(3\" 5C!ŒC~1yO(b^v-$\(@,Vv (SĆU^:y+OǦp;}vOVLǨu+OȨ"J :VBQ+ctO*.0ٱ[/ 7C;$X2]M  Py9^hid17`y˴3; ^7( kcym(ƍ˺M;QFe37Xa=|`帮b`35QO1itޏd7f77 ֮W8x:{gղ/xs+;K S8Dބ{u >\e""}wߝ+d78<ÐSk7ބxQ|h0 -2f+\<% cdIgO>k6n4{Oqo0zXV~QWI+޿:m,Y^{_!Ðe5/$;Űmz5ϫ}˖̙=e. oʨ5s۷Ū5L<%BXG(Ϝt ??䵗Gʋ/͆o0lK>gْ|Y)[fƌiz9̘#9X1j8^5/n`/d|x9ö%K.+\3sTzw*X6-C%ˆ5+>gv6&?n&b9S^3Fe9B"ۙ;o= [vav.{lvl;o/Č9dM̛h^z .B`wۘkz%ΝÒ%KX|;wdYamv*^<~gp6e}W̛5VQ2cLmK/f)l۱ öQ{.f_1jxF~)S~,`۶-L}o}1/=;Ndֽl^Q_eԫo0{"  GJ\LA6mGϞiZ6W,EI0  L8]{a1l/6ѯaVd$ho7/ژ1̘:-;cdd2o܌)|y)U_b$dΜ3#ҏF101#|4oYٙ_%W!D_.O0iۼ7}>[a%CM_hTC^,JvVٙ:KVV&3f⃅xs˼ C9dŸ3 ^{=rc:/)^g {ƿ7~˚5kxuxƍeW .꫼ۤ)Ҏ/v8,]qG3v8f]V.̙q;v,֭<͛ϸo0z|~%/6W^Ù?y2Y̛sTg+f#1m9$mtRZٚHi|| ?cH2X"28FYoHـܜ-\Ī˱-|G?5-:6t']l8aC/$IDb+ھ]LC8O5)9OY=?X~̉v[^ e[Ŵ- kFGytNt):y7⫨]D~> w' ԨuC+.g-sKJ#d=™gf7rjAħ8r 3Jr2d(b2*5H'[vo$%W咞sq@CU*̝}/ 7m\I]l-QGusÐ2ž"!%+a7ȁ={9>3s4rsrPK\"?0*qkIN0ٲa=Yrp>7jĐ!C8m;i)R4?\ ;t;sE=hb;v~F\}@lшϖ|#r=l\wbIҩ9ic֯]KNr]S+dc /ờۡ\pl^{Y)H3vgo?:ɶYc KI͞}Y*,˿/'B~[7SN]תBZUY 0 :kV:=`|mqW^}4iI4}?Y-FI(pF&ۿŽZ wf uþ}w0g!htHvGJ\г)\pt׭ѰwA<>NH^IJJGt:,22U Cemӷũ5c7k~CH6Tx_y)_ZNZr-xٲvs͞GF]O>$>Zax.6Hس'+(ѲesJN'=3CӢy3FVdiEs >t) --.ޗ"hzj_2{MZZ*B 4Oe$ʎd++]H9PSD1 '+W$r׮aԙl߹a˸۠б`k! Z[xZqZPZ 4عu3Mc H/? Njٽ} 3`|#x,/zLbڋGpqKW;1u 6mAZH~yt#4)<ز;vMϋCyW!#N֛9WbJ)Kc~g#+tb 5WΓU-h bh}ЅɭcEډe`w_// ;h5CaBPzuzlۖUfٲH#OXa-9rm;wS)hQaH ӣl 4 !0E % Z(RR#R{wepæiP&N0v ] #_zNpV푔eI6m΍^CҷoQHK( N zAUxiPze.؏UW^EuqJ" d)MLKRF 5W_IzuE &5D8Qrrr8p(1nAiM7CXIrу8J|w-5WOcJInN/]JZZ͝nljƥVeöCJ3T8osn.b1׭]@*DxE5xȈ 9&7;C<3HωѠvu2H2%II6))t֝ooN`o9e s\<3BXy'G2s8s+qꩧy`/i-iRK>[xC1LgNfݦ<Vɩ$%ش; j]v)ڶ'Hc۶-عkJ]Q.-,ilC4Z8n\5Gk\|~MM]vjν`#?]TNN9N4S:1XrcOy~Kw.Fx/pQ W)@?!KVj\vUԭz!11+Oi(!12W\՟j*Ar Zk  `[ҹC[} 3W_AfUrUW`rl¤^&8BVW^} )DQvm +@zUQv"V-cQ)-4l CPz VpqϞu I)( E J=vg!PĜzI%h׶=rAշ+y.vbzqo:ՎdCEz%t؁d XcNKsw*UzH%Q1ݺҹE,9sҹeiuBsIۮ?RjVp0сA,Ѧm[ν|RҰd6ϡ[H5$X3yu#\t>w#b1Zw<^}Q9%\v.tŐU #)=zrFN(.gsIOi'9YsGubH n̥iӦ\tEU4ꇎy4mԀ/&)9XLШ) 3ɦZæ\q4?Xj5>~Q9)VvE=QN 4'Y\Dݺq<*6mNkٔ kq9YdGRkԦWԮQ Ӑ;3OZB"+oP?Niv "jTL^瓒'-5my.գo>TMJ"-1=Χf(-iz\:')iiUw?R%)KzRdr٭ :MN {n w1b&qqATOBMPj0P$!)^{SJU'I$ѧETR )De.yS:z';"쪫_ rI\zԯYs!1AW]KݚH6M x6 .rB ObIHKcUhP*6>VJZj9Ɗ/y٪tꈲptڕPEФ~] bGDphق;'Qhz.kWň3Bd8p kۖ5߰HΦR * ʠiWIY9ͧ6PV-؂5|owS^#WMpuj0OOڶhF^V6UkԢAFHKAS$Zg6'%b޵fb~\ϣjj"'++Wn"1!bYaUjؿgVj5bV̀ЩiegZ MNm0 xCvV6Rz5 Mv 5y|c5uؾ5kVӶsҪ&*ulC"DJ, KOM { F6As~tܤ d$ڐH.r%Rą A$|~$H2/w!B&ˠJ I@y@*WW̸H2Y] Ct Q&SZШĨ!OeR LzY~$F`xyu /w"ΊZHT(YH9吞Ѭl2&Du%#_p=7?e𽒠Dٙ5ϣ.QjWݡM\LR*1_Ғlps .Zl 0Ml܄jzhVҐ|0c*VIV)8t(-SdfEwJK܎;{^ufR͝ŧKR! `ps8}+HZdΛg-nSS*]>4ԩEJR{I$֤KXÌ~YF~C~y7jV?࣏XM]9owmCGX[֨OЎnԅl!BKEaҍcT/_D.|5kU eMn=(9)4^ܘ%J(-A4nR)Gu8/N\?' O"'ұ9\Pn6ۆBu1[(]- x>]ND˺urFݧ~d(kB(F2[aQ:Eo- Y幧V/AfʧQnQyTD8ٖIvv6hLN8*&R+=x3F ;^Y 5뒗GVVdee}x_{ۚ4D@*]},D\'}Ԭ u&xZɕkлO>N; OXq/GjJ"4{SR*CJ  /$!!2xP_T$:tdTNHNgϞfo;ʞ}HQv qHHEYq[˻b,̶$ ,YZ1\r%8 !`1%Y̰L3U?gv+YNwgѢy1WлOyp&y y3gH)W^G2jW&2t`b1uK!RH!?T~eM/npq}GEXCE7^45^~7ZyiAŘ16Lh6F\6',b2GB9tg$9dO%P"njMOGps& X5 IqkC 'ۿ.A'5ARDQ**)/-K@X,AaRؿ9o\˙~A6@?θK4R*ʩT /}Ir*kZ=5x[&>:iRJ(a]]TK罝<?q\ix^?)lIAiy[ % 1pfN̠v]IN -AIrypIU`(ZI6#!zÃn\ꐎ7%RH!>8_͐M/dGjMo!5Ν(LHй5֞|$ S۾ &Gx?pxبlP0yLm#,onIzµuF`m"wSJYҺEm]l+(ʊ lnlk;Z &3f {vۆDC;ZFW-' w_+U.Iij^I FJ "mp,I: ZTcgC_,0z?.+E⠧o+iY "iBEj1n.O7\FNj:&%L!RH!5o!RYQڵ2ϜZw^{WK}Ժes!RFx8{a$H~RTҫ VJqiK zB/Eo' M^ȉTaJūH+Ⱥ59uQ&7&v4"e .]ʾǰ|z :N0H+`r*{NT-iwرsJ :B7)jTqQYJr+o֚p+"D"]ֲqfm0iܼMSe;h3,ؼZ$&֭]Gf0Ⱦ[Yv51m *zuI!D qm'!9y˗,4HiXXZ5P~Y0N`eTGFiyyvA9Q'Vn8~4&^ ~~a+\QRREpÐHuWVTt* +}n9qH9ҸJ/Yĕb\iCH *Z%XX# !*%+|QTE۸/;˖#*-]ȾgESG~ [Lcufs ,Zfe2Оp$=%]t1,l֮X/ij?{Qa[Yj-/e KKyE?}ˎ?qa[<ˬ_Ư%E]KRsQ`T֛o܋/բb,X@YQ)kmb* k䗿y;?c ԑcK ɫx-ref".\A #Gj_91de 7~[vPq1>|~^-"ڵYt򷼳|%0M N+Yo{ =yt2Vx_yV,YIay p! UKN"$`زz;oA_Vۂmv_qMM[~-os-ZŢ*喳qZ~Y|%/dݔeIڲr1^  Hٺio7o Wb,.7m_~kݽ 3 ٻc+{Ӽ|N:M8d"m/~[o˘mxW_mnELvwֲmF>{+V5,am} [w V,_H$J dуk1oknA&I]0%W{@ hY_y^{mN>_^yc'΢LҊJ**+Du?y-.^:wVrAxO,\g St,kYCo`RN:и?u7G|U֮߄2BWEYvoG==b^eɢ%_e+bHl ]yxYx ^Feonx_0ϡPVr+S<2/XĦ [Y|9r)|_oG,X#Hfx{">B$R;+SQYʪkٴu' 5i8 ֬Xoq9bRVp7|7-f#i 8^go0WY`!&&Z C92y{s{u]-[BeU6eݦ5p G<ʻw/-)M\十~jyxw0J *y?~'iSi '_" L?q lB֬\ /%Rn2~Kgٵwhe_=? Jy>SR\9tJL`%j$Ami ~rNxۛE=D[xK!RH 65e%T3p uW_|MiӸ{(.vUHLq1fOSUk_cE(\ UÆ)/+>}[G/6B ;u-Js\+)38o?ѲJ\Gg>N ÌqGN LW/]b29>уqJ/~š{),WD|Sd@B*ڭ'1e)@ Ldg$?|ݒq'4,p@RZV+=Eڍ[4>rr瞱̜q?Wz]<ԓ|o>̤yJFV8""F ]tn3@W 8{"Ģ(ۡm<'iӼ%,ڵhC -ޥ)kJa`G/XF>yӟ_$졸¦m.@IU.^r6ev|:7pZbF^g5v;hi2bhsLNKIY d`!sXm ʀ~}ڵ s̡sD"Q02b8гC N~Bû{!VǏrQL3A _"[ؑ;/~ޅRYTcw1"`qi>eYh4h׏"MJq=r\"ЎCzf:ﻏqC;n5õHuh*b1\Heyi8|_0r`O΅ع'>Ү]+\'P \H Ѻep._DaI5BtҝGxMs\<a0h׹+{&=k8{,.\e]@0),ƾ ӦMrQN+/q ` 8&ߋTK gPYY֚hѪmSWѽēݝRZ{}s|S#RZĉC{nCk?Dn[kO>C45p,}|SO1b@*b%GQK-FiKS-ԳP1j#DD:-_"t%7!K+Klbޘn>Wqlrb:J(:$yQS6'n&KDb-IB )W=к|UHAVx'Ի7}-BD(lL3eu3x,!1=7&=3D `ѯO>S|'{g;vlEURh/?֜Visٱm;yͳQ֮]cSMخ$ 8^JA!VCM<0k.'xhwl+8w$WxX&t"^%ԸhCp"\tMaQ1W iվr#P IL&1LjҾBM7oһ{O;}ІB3gjRU 3 XУ<\f͞董Ù(?sVv9M ^F m_S X}U#gؠ9x [wL dh9JK8q:tB0%ZsZ%6!nmI xL"e wc='?Ig W2NnZ!qDQCyG AY|K_}ϓ?0:qESPu5c׻FڟKm^2 oZ ?&D3h>RH!RH!?7F)X& @FLfҬEB%/7-ӵG7n :H8C͢yfp6s>$CDv09iѿ]=nX͑cq /OK/,tlϬ9vd֜٘<أtl՜뒝ǴL6 IKpz1:mC6-h׶%O21#Ga Ŕ1zM ̙NNQbΜt@5 az6p4sfϢ0.B;8ZckisqfIEԹҳk'@V0{GF0T0u S*6l{Nw ;+S)vq ykyܼMgOo;76}AXhl[39L4pqhS)RAb1iOOi5%1 ItԅON?3A}`6S&cԘQfV2dНF;)'';xn'p4k՜=ˆ!H Ch -?nFEz  pٌ1!¶mڷkɘ1Ia؉ >?z(#G b1cG3b Gcĉd,&3#D(` }F 3Fehb͘1cȐh4Jw3z8J1d@f͙CVC9X3h ͸qeA,?,Szɸ j>}xhӶ ĵä -QM~4i4`;߯?'E.3Gؾ5*Lj>b1Х{4p3mGtzƏD*5tl`„@-??wA̱Z M=z1fhlҾS'N`2n23(m+bA AF7}[6eӶ}{&Ot%ͳvxpfL2 Z9h7@vV37 $+3M$;'5Hfiն5ִn՚݋!%VF.SMyvq24-ٹdL: 1&n`Eiqw2O im 1.: ݇274Rh$6#Ә2m:mrBBLOHSТUK20ɴii200e&ҪU.),NH6y8ŤiiײAec&vб hE97.:c,!r33NL\lcO>EwBМԹBJl%0iƎrDkYss=~HB@'Le꡹>\S4 fzo~o};L7GqE!mۜ?oo}[w%Zefb)jWTpIdκO"rk$V_u%CL5,1&Kkqk[6zn_Yڊ?Z u[n )B )_3͔Uʏ4*Rʂyxtk=ut?pqJ$N>ڴ1zwt$Nu9|RԉsI.A%0E6\PnxpqTB8@hT ՂLLaZDi`;w GFa]0n=ˀdΒ;I 0!$W qeVY)O\^K\'=Fu0]aZH+]AX#n*KXD!*r!i80KXy5h!=1&`"I@Dcy{:B[Ct" ϭ V1 ? oPV%X:=δiRH!RH!nG P3f>FfyHeZ;I} C8:|׀2_>㋾/B2cCtԞ *A>4V- G QR}5*LHX' |{l8XkLM\LPuv̥W~|O~~S I7[C"Dw׫[Q(ۮF9Uz!O{tDz5&VO:MvLxi!\$![A4i Ya \NhsOx0\յz"$--, ˲0 &0ii)7>֗ 6)ek: 7QS|SCq**)/-r"\ǭa(k0~N(eɔQXpTS;=W?Ni/<<}8}0psL0 Qu7?džEkӏ~~ڷı-^oعg%zut76a V={W2w7Ccxc! ,/W?*ׯ<; x`CЪ?6;ڵ"ig}sz DkVŀ=0m*㡏ͥKQw ׯ/aP|_f{)~o@p8LZZZjKm-ԖR[-UqDL7^N-ŸB@:dzy{X 7?^(4ދp/ jsyzL/L2BnȑŤɋ::]kqgKr[U[4VMjkLnplxǔjS }Ce[rfUW>ij(Eo\!eHVj%Rhq|bQȎPUUIYY RN9:9#(Cި]a!7AYT%!cGpeVXOyʛﬦ[d楾qFt?(/2bF4d&GB<,rÕخ׾ %?˧@!ۀ,9 au_(9Gԇ`kbOV<`RSUW l(vÄ͟1e[}d[yy ɶzo\xSo{rTUUQbM]q^rOF?GHݼc{ tJF(-&=$A(`箞H`WxKz E]!?ɬ)r #%VdĒ{ߥp(?{]!f RZPH8…5k6N _SJ٣9D*U!juȶǤE<6^w7{;6-f'M%n2RVVFii9Ѩ m#djUU唗EMu{|quM>8)WUUPVTT!>bC;+#~8X8FҰ(V:[Ijc$$+ml鵶P~+ \)PFDsM| /nXwHz-t"G]wHw)?zonߟ)B )QF6] "leƝ;r'FPphE_7m|?WݜfTukDQs~T{L՝&mrcbv[I9j$@!ZqpS (E,I6&[|#vlz}7򭏌k nD*ph4J,PV*NRmeOo+SB}!Zkr1"hEy'{ J݉C6=$D@ V>uM'RHკ_rK0Mύ}~7,&#pC]K!RHޤ_V5i12oۅ4¤eg`L>Iē0u|z#LlL4qW_&Z"Yv3> 6cv.y979y(J!BZJ tZj6)5R}oC_ PG}2)B{+Jc+<{j x )4*DN 7yK!RHG '?ǿ/t`R- J&h Xn + NEk`BXX-fdž5<ԗKoԹA~ljUݦH!RH!悥V{^۴D`hM-ghK!CZ7&15I )4Oo~q-YjmMŇJF)QsZ#8]çsx7Oo~3j$.J;8B\Ȕ.zJ~"O@)D.SRTB^Р =Nl [U?/ز8P^YjY$ bVӓwJ11 ogb88#Gٲ#ׯQ7e҅Ī1arkC RH!>*޺J%jB ~0 $oLmB dQ'blk ׌ w-M \t_'^RŵKٴi o-\ǖ9w?ɿq7h<,|į3"EZX|̛*7lة ?…W&'"Mºm[o~"De4 a\r~{y>hJX'|Ǽj#o Ok'?9ԩSرO7XdUlܰmҧs.ϡys%K)U{ҾG.מ o_L?_韾ϕ.PrJ!RH>mFCMkš )7;UJJK&7\mR !A qX_$e~"jQRMk]uf',M Eoᕥo|r'locN( r :o^/2iFV9('E+wwɾG:e{ɁC{(]t* wu).,`IL2SGBY!=:BN[NF@"(,wh׾5u=CAC@(2{hڷjNwtn88uW {݅\= ѺC' Ezf7~‹gY&'0~;]|K]1:@y?7͞C.(xie5đcBig$%%H>Maq1]='s¦S~҂,~-2s1t$d~wiYkM_ )B ڙRPXXoyEŅEד>/N7C),,U]kl Q7EEE ^k5yp^UTDaa [@au nد :M;o?/o%m$m/{J"`6X JJJI+** q%_Oڊ (4jo%v{:~ZNJ겼*bmc6QTTTW{^/@-F-!4Wc$Qq Y<ϓ?yK(Մ5l$RtjJcwP8X_:5qx&;^GץYee 2+\kow5]!W?"LJ+kYr ^ȇ!_>w Ng2o*]2h0O||+[8{?Sg.b%E9U%6в}wf?×>e^ +Yi?=wgL=~ojΉǸ3t[{*痿}O?U{އr(.dsEͿg9upv+ZfUVSȆyuReO!;_ O??"D*<RH!Fzs5I! x+Pwr @dW֛&j?9/a4Q#D!S?f_7Ծ Iu+8W},U" zFi熎#3'M9MZ$ CS5kMiC9r~),ź" &##LzzZ"}R+ܫ^U## 42|3cI}I LBQzoXQclןgfgi e[| YcLM(mnxùBA2+|ӟ:f 7ÿ*jFnPɍUy rĉ|8h_:4]A552zR:D hSu6UhUuN}<.7gVnNkm}߿,gOrGn y7Ͻ; ̙3`8Ǟ{h4GÓ2h`Șq}_~?~Ц ⰾyn5v;n%ZbWׅ5ȸ[9Z5^k^Cm1uk?7* x Z!t}b7=hJ?H'@JY/a\Z("o@0`}ƈԛ%BH ,pTIKK'!YO{6>>iI\|Ҵ{KFB ju¦Ju(j:Nvh,JE(i3zkjӆ?idÕ=j* ZvΗ-c1bTZ4p+/wO>FDD*(3WX\s׾Ϧukعy5mg<4yP[ ޓC>B Ak['N%h?Q~IBf]`(-eUvA7dKchrQet^gj0voNOQJzJ O6{[Coy1B'@E%טI'?LIH/" ~s&^D)呀XZkUXR]!y67SMJ' Iudž_RH!RH/ۣZ{;2ޛ,Xsxsܦ+2 Mpٶq-']"&hI[\%fX0MH.O8J*XtG"-Խ5%+_+(_A4䑃-~5>A@M׬/47lʕĬVE^4DA]h_E&N#M ؾ]ΜVn!d ?ĒE xͷXaH3PZ{`3H)1UcU*i`4{SdNhrP3;o>,A !JX(_5'W^+(_Bxױo^v 1[ž}{~%ACd.R8q8{a:b#>$Ǐ|z +10422$bzzpy5ǚ$.p%6nETUvky73O6<;jK0bB'AEUY)+Ce - qYb1C64\ +4+R%B6Q*)2$sL?s R!V<[:ϗ4!hشz3 a#g0?rpDanaR (u04"- tUIw{Ǐ7_F hA SWrc\"DT` KXUV`Xv!Ӹe ӉaCnKrNgد^$wda&Wݖda|M jC+ )&ˢC$jM~֣Ȫq$&IG)υ~Swȃ6 BId.I!RH![&.J8|$[0-48x0ӦOYVvE0di3iߡ#ZzDV[j$0QUU Dc  \iWVh+V{BKXAl-ӧ/3gLM<<@KT!ebZa31uh.04$غcGO:KRE&JZ>A 昫ֳgL[D+?|?Fch@+LJ%B0>IghFab0<?OX8!Kw.;@$ c#BA2˜`@Dv80psZ WH!0(&JHiziEȀ˗.rj!ч>=wCvvk{OS @:`p`@"B1Zo;Ԛp@rvx28}8;AqyAaDj.H]ڟJ\v Y(4l;FyDqg7ڻ 3oHI@k.&i2Z[-<2PB>둉 GX(!v1P{/10޵;NDNnk#Kkvļ b4VSz/ͥR>IS+£B ^k#DMoMWr Ӑx @'pB>뎡0z `_vo}+O"PN]+^_|Lۻ^a$QWh$hH&{i@Jc*LEXF[7o38ؤ<߶ ׿>QϘ-1qA"1u66Acn\6 tCLO]V-<_y&T]?/Peu؊ #,bҠҮ{ ~OD*@0)bMo%yg+?ɷ0UgUt߽A)?~8}-vB<[s`> "~ЦKO0BuhWtkM "(B Q^e1!aBeiVgw+U$"TH2zȵ P?T@MZjsp俼n:x?xUkJ!RH!YC߾+6ĎTpZ9ϝz1bP3sViJHofTeZΝ;bql,_1+gYx9Q@Hw.@ĕ}I ,_ SܳsÊU(+rJ!JIԞxUUeZE 3-\ěri\ak='ѾMKL08'Oqi[GZ |%`\8sӍb,_U|R#EB%`h6l̵eaa[Sp~;Ek?}aw~bU%* Xl)/_#dذKW.A4غq='N54¥h$V`Ӧ;v Giπ ?Bd1F^]1-Qjh+3G))+a?yep  8w0GƱ#ܽ'/0,v{%(iyd y-8{8Ne)n!f8v${2v:ij .yf+05' (ss0E&8PZX̦ ).+Eٶa%T8z6?)]9Ϻr9%U(myEذi+%eHf>pPfvY V6 +G/gj҅[@rZ9vZ x#A@bA.i A@"-иչ F%%(#d L2Z2 <% #2<y8;Zr{gb%WYx!k׮ʎduҔTZQFMMF I8arֹ3_]7yzI` ]/--2= eTqrh;gM۰*Ў-\wC<& 'Z?g2 F㏥DWO9:Ill <@h˧zl'FAF8'ҩ1&T~W_*n1Ex8˴|`,JЭ$U"i#MJr[lsݖ$EIܾl7dn@OwblFolBLRH!>\miҒ`(&3xp?ϻ۶`Ƕٸv/*μK8s2816nE+RT]X-Μ!/g1zJ2a1ed.ʾ}!OY&$rǹDyޟ +h<,Xʕb:ƶyk;\^}X6u? rȟE~~>33wV>=v E(pywVΟϺD]ڶm)Gl c…|Ν4a{b[w!+;tس]\s 8vdKξ f`۽d,\,`XmVYEIy9t4;XGx/c8zpKzp ݌ đ,xu[KVP 2Ӌ,[^{Sp,׍ _+Z1p<-6B{čZ0v /g[0,X +7{sDKC1slfgF ;QC kzƏѸ(Yh兠)pEI3]V-_«q5QL:tx?k>l[Z:vo^}%1 D0klmƺ(//ǔ!CryΜ9G6k l /]șklіͳ:S#=U~As eѱc;H! gD]0&+=ȝz`,Y#g ܣ/rra*sZ(\ +;-Ǫ^R WYp)[7nze֬_((B^G̸@$sI?_<:2C4&3ٰ~k6ot~JxO fNөMgU^} NqiB9k\P +#LqiQעmi^NYH]E5kΪuعzҪU >m 1|HojZ6lَ"@.]hռ,]UkY=ZwN6m0U\Q!ipg;W`Ttg>l\w/e^G+{P"0•N , ,zA ۃt(kz2@8'΂87ŌϖG(EnKƵY4/dTEc(->ERp@)9;j 6.gἷ?!KYAYUs/`݆uTFmZ%OD.ٔ7xZ)>ȣ <4*,8Ϳ33<Ï~#y~̏>sW qdT.- ~?.E鉷6.YB{Tf 6eeC|ǞA'{w(.r0t^9sűs>Y:Aeݯ-,\5eĨ~?*dRQr0_OG JZ1 qM7fWZdbeZkl)7eEd+_W!IFA0?;KQt)BΞk:p; Qk-m?3oB )׈0Ԟ_K RJzaCq] 2 ̘53=*T:k0;dFf͘άӹ}{z2roDBAFSH\ZhI~t)GW_h$1L LV_v3ҙ2m*3f擟?I' xJ#G3mh93{ΘBשM4 ]i!F1-&Ϝs٣ "pQZ`Œ83g0{ :knѵ=w%`43f2#&3g| CJ,bܸqϜɬLzٙ>1ulg⁹{W/f'3v-[h0NGVy80s3g3kf>?<\G`&cƌ!,fgh K#FM<zv%%hO״PhزcaÆѱSlcnj.l:э޽"+l"T,AHa2dPf̟~?۴:͛1rpZjĭlBGZV64cЯ__zyrQdذ!Bz9z̹sy Пi(E;{&͝LI$jӵ[Ogeܹ 4i"\W 1|gY!RBn 6-bU 7ѴhђӦmK;,=S%+QPZ& `i 8;{;h{}Scĉ)Mi 0]ҮusƌFf9ݛ6:ag2<0w6{Ca(;FfLo?ssg3aXi :zᖝugԘ J[eԨ1^n:4teEF8c0{\L!C3j04h !ykF)_[\93czI0+$0<DQBdxO^b#EYf p̫L[q%- DfK!lzZ[fב2~2{bT3qd*| )B )‡:(&zNooqP$$p H'}\/w_z2]Xq;Ckn[|pc)v  8<))k )B )_E,ڵk?ޓ<K=Z !mi1xk"iu$[z}گ%"k_MTRՓf6X׺) ؆O4?#h{ֵ)Vkꯦ S,BI`MRNHc$ZW ˛>Dأb`FD"zw}?ƕrH *J((q-뭪\(AʅaLZD]  ==Fi{XJ)E,2ʨ$KVk\RJQYYm\Y0BCʴڟ|4F`_x 7BRoߞL"RH!R@ Mx_CCkΙK]ceNsʌ-stABT\fp:^f3EHeYb(h9v`б |<+o!&L%+p7m&۷A*;zd]KI/W&=9SͤcN Tu5[6oeAG(%0qLHuFN9f'<2ELKzG~~>mZĔ6_m`h3~> H:y+R;x=38W \XMχ0=+-,2HxA`]<|pKˑH.8ļ«50q x+L\>av#G阁 i!kװeoKe4kpB p ]kA["!7@ }{U1p}"Ra00KzZ]LpJ6Q@89`w\iȸ+ W  ,A]#ѻFyI=RMy'P -Pʯ2Hx_ b)\3h= d=qlО Jq}D "   (@y%$0|U̬,OϘ& X4Je$JzF#`ĐJAPMBRPPӷ7E9~g]@ H4FyeS2A{#T7,CRN$8ٖlKOOO$4^M u]hl+++/VD"bTI5eb jJk W<@#Ofc5ARH!RH+f׮ 6fH46P[^mݜcG!*ټq-g_DI'جXDPv%+Wm2fx[3[(}P.Ql#t{Dؖ8(?ThQYxUCE *֬\¥Ed,}ҊRVqEz.V br0A˄-RGew)sM4! c.uk0CX=C'R ⎑#?n:vj57J1/#60?_eJN! &'`͸:qwRR2 $+ Xٓضr@˸.(g{\իWzjVXɶ(. +h׮ u6K5'f֭ئcb6Bhj?֣Ѳ\k֬"&R!z՟;_gŢ%YBI^P/g%W"m5]be\|X5M>Ciժ-V(Gѻo„99؎؎ҰE0zpzuLXU%D8BiI(+.""!âʱ2l0}IN 3oo.;ǑGrq=S;$҄LǏhv:Eperri֒h"rlv;g@Bf,^8 WtZw}4[t:2bFRj/4pZ4&'+rF!"W6+C9^@V ZH$6Ӭ߲O緙O%j4)9 7m<6kG(\N_B cO6mjd,TsvHZfU 5H\C~8z]2'8+//O(nD 11nG'Թ >ng$jw'VM U— 7V:Z`B )B )B %@݃M;|UzSʋ.d_v3rh:o+eݺ5_E߹e CdegЭ,Z6yظ̌0YsAz k&ޞ߿6YYtѝ>z4g[`|.z׊ FMY瓟?3ߝfR>dk+ Y6 {L`ر\Nxa2@˶5s&۷E*S=30}LfOgtnbϧG AZ}7Ϝ̙3?wt"ԩS?3ѦE˶G{]:w"J#6b4d|fOgάt BBL<Ә9s:MHZ(`kAw?=wƐ#.MJ|fΚY]}ТU[b}3{&fMgft֕H FC=̰#tc{cC)BzF&CN7( V(Lwұc'IGt xgmՓm !Iލ}u"O~ѭ;5!{dWi\q;]W?Oӈ;!ٵ)B )B )‡*-k+CdŦF:&sMF(PHvW'0xu. (9Cm %L&M;uD ?Z-A)\72nfLMZ%z:,xh\V$ BGZ\t2~ťaF' w =}A)B )B )‡zQRgI,7C^^g㭨]kfv;z/t&"J/؍rSm)j&&$6zQ@DEP{;=3k}r-f5kyiKS~ުҴnV*KA~.yqj?OcΛׄQcƝK䒟W3 (& 6+ȧzSPP`4ڿꑟ}A3wX}ռʶW[AAAZ&됗G^A>yט}^^^-('YyG^^>7\ZLSy3 $YRIW*ɖ18N7i$ Zt(X\{Mx{n_h'\ڇ7g\Я7Goyjߞ/!oػs1^XmW[vq!L @bTj!l<4O ku5M]W߾bBۯ߫Hy"j,B Yk߿.q\Wy?7L6痨N4x]_NFque~Hx9ޔrq]ijgD'K# Ok EtFaFRs &!AC)Ik$d/<4.; %\ݿ5?uziGO :F[o႞=ֵ u7;62\Ǝҋz2l@w8U"eKj% eA0{ﻏ.uusdgSbA @j1$^g+!<K 5ZG)j"nxj*1%XwlcQ}.nk(?I6> z^Q+U] NSo:ٸ|1[/?{_>cgs~/yk?"EAi7y# Ӕ7:{.NDUvu|U$4&tfT# $#U|}}b&:L{]Et}S}ns!J9{.~ ݍͿY={L簆~WOZ>JQ5]}&a~Z9?OCsy3pJ4 ᄋ( i$̒ 6D5>~૴AVsv^'FP;#++ӹsgt%(A JP>sδoߞ| ZxpVX;R"qK39x%CXn9wmaK(Q^Zѣ%Z^P=Ws\x(JN΁GqF6sZX {ɍryv=Hv¡^PJ_u{5zB!rf|[w`+FE 4)]ٳyX*N3fɿB0 .(-:dzϲA_ć?"5gpC _[Ɔ p,7_O-3)m\{7!$Ԡ*XUV׶<ʔ0&]M+Pf=rg aJf̞Ǟ9z0.^LQP(Ϛ ]qy/=ɶ]c!矛MQQ 2OwbEhIX8g۷mB.3_~Umq4v_bۖ1˫ ҬW8](?}Yx}7 SʳC<^ I^~y1n oӤxgPXHŋش~ Je,}oX6%K\/Χ S̜9[w Exxs;SG3Xv B0(.*dK9yNY1:/(-Y`H |e Cڜl1L/`RxUSRKLlBͪYb .n5Nnvؾ-cx8~ᖰh+B>Xߞz&d־7XJk(%~Lֽ7©POP)ؼn5KF);[;bZa H^ zʣ2$l[>K/0pOFBkKɾ[ye%p;沥+2kv܏y M"^ΆucB(!xGaJؿ}3gf" `ƕ,"NN3p Vb $BTE9(F f)*<΂E+(.Sdgrp.^]*NY93{,}i|lC0h?ρ}9|K.D:q>Ĭ XjRlh3.{eƜ|~9ԋ;)S&ߦz!y @ @]š$Ȑ ٽe ]1[[6_moc˴hMTagj M([2/KV:1l>O?4[>މF&Lz폒- (9UDYa1t Uu m m\ɐÈ,Z7';lQTTuA^v?#6~7R@RD:M ؑ2lIA !;3BVffyA)D¥xܥU$k+hEي={cE"䒛[+VauhaHR(Vf&M7_xhٓL *l?$9ѧ7Dcܕ+fy0 `+`z)~'edѻOoD$#>K =~,C89sx) qj4 0}8Ϟ1" 7 B`b( [HB2%.B>igz2l';^{UNV ?d;v#͠yf;v"͢C=`hvΝۙҋ;t aһLpI a:k[x>Xc-yyW_o~G*bKhN)Z G Ziɶyod-X!PRӬm[N:c\4J"aSO?$|yC("$c,_+nC%"uٷ+nDxI'*h߱#y1x9fyAp6B2* GX.N5?}Goޒ-sQJ{Eء-O={?ƚ;d8[FeaĠ(=>M 6 fN1w=ԟǟ/[I߁h۩ XH, %BDLbd,Y<6`2RToaYl}hf>-@ vRҢU+ڴn sѶ=`f!оU.w3g<ә5{k}azla놵?J:^0.6/ϼdƌ̘2L6uE,"3_zY@ -:0tH/^3^+,sh߹iGǨR;~8v)#.X@J여k<~}PRl[ӣ@.d8 CU Ys H^g2H_6(^>AOA49Ut}SuT^_{qH~joWu/{ؿR4QG_EJH";S4 潩U%|:"E-R;E\_#9CΧ dffI G}v= ͡ ]>ϑTgViUܯgÿkz{U4~XSj6`K9>l @DOr_`R}/ϙYM?$NjK ]iD Qwsm?}ꄢEGiʃO.T~Ϯ;W/~zσo]-%h,2220M9d曔qPM'˅GeddI(:g>c:ePB"TGpDКVq_Wջ's~j_SJ>`  @FpB W9P> Q/W/ Df[B.$*eyպo$uK0P|UJqS v]}%@s8m5[RD"a&JOe;Bt P8N*R>z -#2Ɲ>|kw ,Gj{rUېA7V4U%^y ȢZ  @d].˧1"iSWFB- ~gTT[go ;paDQ Bmrf [/[:Igh#|Zl%ma60)C0ndZgiJA _΃,Yeױbjֽ~Li薪LV8*(/)AIYoF@](l @O0'np.ſ:eM@Oc:kߑ HLOa1/q?A,###˲BR@MTzQ dLAiIνsUWsxoӷ[{pDq,5H?lbv:=epI}UTTPXX^{ W&|BM"R;"D"cw |2 G 2]F?αTpEթN*$^T-A&NN#z7dG(\>V`:@3CL+z3 ؁D1->I}ӪSWa"T{  @!\: 젔kh4J40:3֘I, LdݮUЄ0PP"Bpݍ7˗nCXOϟG{=+~ox߰im)e !tWW;ZPH {V{_h&|{OҾG?^2 _B,>k!wOXC9XҢQnzyw>9[.ATݕ @3I!lԺN;DN"4Z7qkZKYW׳}ngF J!\&c$O|a+YN~hp=;K'MGu)l߮Ҋ4RHloaZhXDݹD(RKG7L9"W? }d1SHbvQx~]9n/LݿRw:frk Ӏp$+EGdzmuM@D"r9L`Vο|V]|ڔ6m9O^> a\+?~!wmOX't9Q]ľ/~;>QF#A#p79GrDVņF8 ^s]%l\Z͚e|OkL+V6ضà;~ {]F;Ʉ4՜佃7 @u!I Vu= -J$8o/_:Ţg_4BAjp*X-v;#C( H#@huko_Ѐ1Rqּw&A%|bH&U8k^G!9,{U>޾On*4HA8HSjm݅r4&QiP-H,gmĵFư: ,_mT/I$27 l`-TTUej*>xCR/Y4 Ų׬fϞFT议~CmR 0%ex{@&G*55Q6VQ\^IJ>;Jk+Ʋ$۷og()0 ]mXv-Km$yJRހAJ{<.9UX7sQBS°I6_ϞCGV4լUS)P;vl7eu q:E l߾WӅQ+) Vu>#:kҲ<it)5xGl޾+AFf׉v;z )zm&ʫmMIXQKw0ʌTUĚBHǩ80u9T-Xu^ߧ0_j;Da,37~7ǎg?5k`Pr&,mzd[ :&. S'~NLw;9]XD8cu}:uX{7r'N"`W㞻9RPbmlX LjfDS% X @gt<]ukeo`TyIQ\\j&ZRB $(%eG2wM۰eW*a̝{byҞdNej>p3 -ayEBPVRʒ0,̝] g` \?;yk)ȴWhQWqy]bh)4vy o,Yy=g.﾿ەڷr!>#gq>חq$`իc{)K8 V!no39k7o'HL.eٛo2{+Lߣ<GS@y)\2gwߣ(!.g3w3gfM'Sܹ31k:lpI^}y{wog׮,Z*ӧf˶]$\&B<:".DDj]% QVe1s,[6Hi.[5};v5-4uW3wLfΜΚw- KYګ,ZOtv܆4tHRѮ ̕?aC144nVc+),-ͥ8x/}^ƍ9yZ7pA| ^1oDjسm3W+řx79r4 c ,Yӥ 4+S [R̾}{rri۩ "FJAI͎}GȤ[6D B$=Hʻ?{v`E2v܋a1T6{wmg񫯱7X}JKNjپc߰ח-g쭕[/)bŲי={&gDa f8LaQ!˗>@Zqx^z} k׭㥙Yu? }vC},[*>/͚âEKٽf$BYY Y/`L,]mիXV&Yŋ8xe8?fdY,~u E#҈TrΛB5,㔟 xfYRV2'ƒWy}b-_Α(L>%KyݷY\=Lifo7k: ^^{f U:n&x*̞f9xGDغe 㼷nsg+ 9~Z@,?sf`v;Ky3@yZ%Mv0t`?So~ɢ&tژyQZE 1DH#Z($UD{V@ Mr-*PQw0 @4@'Cщ#,|e>!rea+t)2{}& `¸fs) BD.`Ҥb?DFjP._ǻ+W?:uh ^Rc)L<ǒ8'Xm6dÇ9rh'UehMjBUy3 AXh̴PS!$Ǐ%QQNvv6ǍgAhäu0-УGOOԩSiݦ-]:G-صCٷ{'F8D~ TV ToÉeeh8p *Jʈ1zh F8CG "YJ&OKEi9E%؉ V|'Of[?о$Jx59Q!Bf-۶cr 3n":uK}5ӦMn]Ghyĩ $ҝP,W\k'М8v6`:Z. ׮a#`D;wm[ff1\:r7oECs֥Gx$1OJ/\EZ`+2lEp5dedpasʫӷ۶e#ݧyy\6RE6m|U\?z^ؗ)qٹ ~)t-:dm;U-cp&C ceE)LKr6}0$=mWpel1q#=EYn-3fy x:lxE5rvvKhi0aƏrpN*$j ѭ{/g޴iY@dZ4+q Qt?F3b q1I5hWF?d0]w-Ⱦ=;IhEB9lۼ_`Μټh ưb(%4뮽ufmĝ hf-[.BhKV%M,aNtFN)޶DmZ(jĥBsW \г/NaԨ+8qFZ8kOM֭Ku߽'cO$/ dҔL7V9QJOaU$ U7pId5V6rNj( "xgvTpR:MToսĪx]8 ܚ,t]wiD[ @];IH` 9bGiM0  !4Ko2vtjS%0$l5jK}9@\:.ۑa1t#AB Bֱ5!*0oȫGӾs'dR~0rj rܑNx)TEjxEK‘(c9LqE^7`f]8tFAk¤B r1/F뻎b8gO8( },E(dr+hQ7ҋh2afph*m3d۟pD^5.^}`Cho "qqEn0x0J%< rJ -6:L†! c680K8smv{һwrCD*  fDg.vh\WѬYs F˖-q$*LsZ[$>}zӣGWZѯGmZiǠoǵA(M‘Ci2mzZ#Nbk0"X\NF ?"a Ƒʋ*ΆM(C¿?7xyO|uڍ /쏔yy Cn\8p0eSn0|zuIvmi)̎1be\åm\< LWҹCgu5HHˆ_•!}zѣo"͸tr[܉ =q~8v}8pDtq EjPB%{iA @5%+RCW}SS:ϛ0Q+߯_6룥W|C2K 5Rٴj RWy&uiPu%JuEkt/L9Æb-L 2bd3r{OmRzʨ~Z룽<_זgb6),$:D AuS=MFUzQSRXA{B'k=opBT"MyҝOJPIuJ"NUWWBJ{k-{BĕuHDW:x(m䆟Ky eW**y=ۗ *$5J̓^%BQeJ\ߊ|aIRK*j3 uoIrKK%GXKMSU^cx^ Me'RJ/eic?M5۴e=ҕB]RhD3"Ȃ6) U T2?'nڪ0͙(}F)Z=ՙP=)$^H4P%A{Cjo._  @gAmdHg ";&P +_uV4ks2Uc/IؚuU(/cK﫼/5D}~ ^S{Tf1 _q6MtǨc"IB:A'>FPAIR͚<8 lE @ R:u*nHչ,BT:=RɻG "#IcF}0FZoEGM'ɓ3!=nQRM.$G3S=$l*1пȯyު "Qk=S,}|NQUhI[.Y&ZiD^^I#+FR߼ZW B4k֌ZJ߬ m k?N^^ySWvM)i篬G^^/_GmB}mWܼj[q j-g"dĕBT5-Tog~<{ުP :@ @)QZcId~uo_ x@%.b: ()k֣} ٬)Qk{JIOOMHI99W=#o,}vFMk##ꃮ amL_Vg^V#ۮOTX]Ry$Q"RbBs5S&AVwu?xE5Ie`  @"%ߙ#9h:Q2ЎFW6lTTETy0B=#29:f:Y_p9U'DmO5iYxay4kHģvҽL Oyn;KikB{YHR>IO;V?dD2-@hF™NzB H JԼ>Teƴ3!+ ZKSxR(a 3eT'RBX'Az^p ӆsM b5=rjr`:8 @|Q=W%Q[d歘Ҭ$syQ88v9ox䑫EMPB#2V:{5B>1Q%PW[JPK5&om;w@Gj/@eHyl۾l zk諑. 0 p )X:6o;Rx;@a8|lp3EDp%8p!EEBN yFXkVv:JڴjPip(h{W`j6mތ+ &=xrL#Il ꀪ&ܲ+smk8WUB6ޭymN90$dPRX4 _VbCjjN" O*Bʛ&ļiZr65V_ğk 骮'U繓N[ @'ֵaB&Q\p] Oe̛7//d;moa8u8֭c,\ 'OfX$\Ou*X6lSMũT>EW^f9̝{U@k,PX8l^/ϛü 3e:N$y9[!"^[2b9`# $ Bz ݺt&4+>48o7 C|i3//xٳgs>ɫKSXb.׬6 kyybfΞ˚5k؉ z} Ng֬|*|Bn@ lG0K<ء,zy6fm,\3fmN\4k[˘?g&fLgƏ]7 )q P`ͻg.^=ٵs'/ټuQE<{i<󚡕CĄ{v̞3feXRaeywKUaµyw7{fosap1(}eРdZ3 cٺi+zW/dꕼe^a;k:3gMg՚u ᖱq̜59 s! 8|o,]Ν;V׮TLxs̞=3򝵔!MnѨ%s>\zpba]QZ^bάX;*mߣWN־ ZĐ."?3 NRٲM .+f߾ݸm;XBSr8+|߈"RDrm>QnH0 Qm|<z!z!|A~CA?\C==ȏ竴 QMxTQ)ĝmc!Tr;im|k *j9M= @BU%Pdߡclݶ D /R;z:iӊS&rA8Br^?f\x&Mر(oy],'-1͞ݻ˥{~u(g*B:Ni)- [ ߸c'| T6J9,|u9[we)L4Ǒ ѣDZ r8q"_#؉8yyL0=}WkWWmߑq&ҢUkzɄkhպ-t]ҵٻk7F(D~1U7@HoJ+XNhaa!6o62S>}TQqiѪ cO]N|ƌӦгk[ !L+–m[ٱg2 2K0t;A\AΝ;z]:vs\=zӦM]1L@**gԾ-eCe+ޥ rS´kұ}sLӅٲ0.l4ݻ3e cGY$l :!M3 Jc И8"&vGqoeKU`R(4&CaB9-z1y&Mĉi,_:sfc!"B2,o SUBΝ;3i.be弶h1eŸ(:vĉl$e,ZR !Lr2#@B8X8bP Ȳ`{ٶ$="fI qWapT)O׬YQ \w̸q˖8Q_FfBk6wZ|B\@0@*CMAo.|G#=/Y $Z߮- ,W?Ճ2bƎ̮)7bl"-,Q%2 'EAZ݇tKٶyW:&a.'-R6JHD CHt9.%H Q\\Lʉqt @%:]v:QLΟ tyjQ7 ~ңwO\_XAj/Kw0:2c d۷Ag[!}5;v:PUD/PЪ'_Cm1pZ"K.Kиگ?PdŒ= >.X㯾 I:qhS zMbXcףtmڴ`#?P4Զb\(֐q/hr4=z`&YHk@x֊J鹧vߝ  "xQ\z)} AZcѷO_\4XT UW^Np=C^FIk|65$>|=yQGAkIկ/yMHҏ.>yKذ NAfChh$WB;50n#F%iǬ~>/ ϥS4{KYDjˮC\:վ@@*OZ ^Gg@U@ I;G|i*`z;B Mڿ*Uy "MDӫl!hSk~Z$~g؎ҢCnڠ~K|mb7G~08 |f.-m`jW,JDfԞPK8ډ3p8*x>\ث㮸eK^ޡG\~D1/_{v+&iB WpN.SkÒ nڈRd5ߠaԆOe`CL鮯qb˖L=H8~})Ro @>:dV4ssyxh4祕4H {='tmޖ|+u ¦RsQJZoj!Vh'L!aqZv\:* =UDHI2Fs#ĜBLꠥ:WH\)ACpزv5G~ab-;RQZrkIIBcp&Oyڵ!?;{ܼ,\7AmsVU: A @ZJ ?뒗߬4'??sv|)hN~~v~>mO呓C^^^eM|&%779)cL TQ?[#4.7B +ւ44{+91c*mY67w aLxN0u8w_/+0$bѼB3[QRRc(Yč0f);ֿ}}'f:wqx! 4Ʃڼ_G̘:q2)>z~+۶# _.8vP(/Ďp;<8uXv?c~?h1h3Z&۔@:@ss5}b; i¹ !r,H(£?O~3~c?>c=VأGGOQb8B4 1 *]!@4{Cǽ  '7u+s+H1+qe*2,P¤G~oû`ۖ4z?wؿ{+a˳KVI1 M <{R g٨\7"n+BD6yx{B6n#UIɦ>ܴGydjdS%=j:DGdÆw-]&7A ,Js>o @>1]|royW#ߒF,ܻ_'!BETB }ufDV} !5Ns|xg H) D @35\" Eff9/P(\ݕEuBnL!ډP&^>;7ՏW]\-j;a8W &x @W*AN{LPU'&]c.%(rĉ/Κ N[E4%F%(A JP%(A JP\bX.@AR @ 3 B @ӎ F[b.@p @s Z,kB`6%%%A JP%(M.m%(A JP(..Fє{bkOSHwgt(Ҏ"+}Ӭ"ѢE 5k%(A JPRIkVwA JPߣ4oޜZhii|Ù暗77?ؿ[#nBݦ3"= @ @ԕLSU2#JXH(iq(efmePfd\37uKEaS*td/b\T~HtJus-R[Psx_hu{ 9|es3W͹?{ @W䃕M]8UVBT[ Z8NscPu- u~q@J(n7|i7uysl u-}}kmWu-A޾Vq|hc9:ecS9:w&s9xo= @ 6zӍXW Jhk1]}Ϣi 4Ao(&)m3Q9dkƒgucBkY~]޽אu&FV羝r>OjkhTכK2N"/v;r0l_LeׯqӸEs :U:3#4:lO6l} u!Rkv:`W$>%XW+u~6t31ή i/b& >7V㫞gjUp\ǯ"Ӡ=PSodS9D]ux5@DœbU5:%BZiYfoޭC\.89&n"] {yj8kv-yH'TVQoh іHZKUu{=BH0e5{APV7/߼(#*Jܧ/>6fyt*;SR~`gׇeb'ш7b_$;Nb1xx&TVF]VhzƅtNDB@u h]?[K3j?Ori9-Te8SzyWm_Enh8w&:QF\r !HQ [pie1q2--8;j.h]S4EVsyygnRm̟`jc*CGRVSB)xtvK 1[['_"@4HV kE]LC.?A4e?}_-GݎK7V4OЦ+N$U'RmX!/\BV.{ 0m1yX7zdGi/";q/m~DiKs| [>?=tDeDT[NkkVDR2jGq/SVB휦eA}]r Wc:~Ne{P,4`XhHp *mtg>yVY?ě׀X*Nh4VL. 9BA?7k $6eTr0Bꑐt1ZC*mFp]kqBK#}Q 8B!\ma&R \C1  vMʨH W;F QS'R !I\ ]HR5g[űCy??'? c_x#?'?5K^2^zCH$P%yct~G?Sl;RИPL"E ,9yc~˟~*CMyK[Qto1znp{?/^sPBfSun 8ֶE[^>QhQ^lOCץ\{A%eyo\BGNd!c.'+l)QBuj`r<;MKG1 ߝ{{S~?-|T? `"ioct0-;KrQ!<"L0q}G\F"-msq2AbАL|?Ġ~;()?>e @UګNI wy`ah\w77!d훺5):“=]y1ooڍ gz.:&@Ts  @O3U-ȒRhֹ9Fk&|2s P H9v0vCr)w%]v+.vU˛kI# P/*dE30~?}ObY!!\jD@.g|Nɣ̣}k_!lM} L•a6%=o`Bc>tu\nT)GYs^gZ q>Ֆ}o* @mnRR( ?' NhorTqeh^1[/DQ)s_ŝG8Ra^ڼR#/v].2=X𳧖СO .ٞ#z9J{ Iɜvظ˾4/|VJ{D C7Y߸[2K'q \-0K.!gK s2݆odq؜׾ ɭ o>fg({~~XBv?Ž;56eliM;~ƐNW swȎSeH!Y?a #Ȟ}s|;_4X]&^|1~[ 1hXxEBZJ |}JJ:|s_[y'P;7Mշ}oqq`iBk_ 'C"#æ3j`_.4G_g Yu/j.N^}3|:͛Cr3Ȏ哟U@B#E+_A2x_5_?3 `yw5 kVt nv<`;ˉ̽Sd 02LrVxm<+/ϷHHӳ#N噗 pU-L^ BT&wxi!E;-c£cuKyF9 ;uL0).3x`~_c8e<ؽc/"%#rzFWlp#&zĉ8g;kk(.GNfsh^uLj1xЉMv?s%{/Jީz<̟Wbo_`ˮc6:߃'mن_ź.Mf34ůC \WRFvp{qj<['0p \>̈́[hr="J q< l|?~[osHn6CdA % C^A7|3\eop%Сϟτ1WOx^՜BMC_>ʷ{aaСЫWw z\4~5J"azNhTvq '. E nbܸL| |a:"#.h"5>x$'鶻2J4WV PuJ[{+FQn߻7zQ^ӸڋHZbh+JHq3׍ O<k%' y'qd=N<O=Ãx<^9aG|񎻹h͡OZ}PVЉz 7YV3{c9)؊a 5Th]4[8Y?;_|bH*9(>9"mGB;Lۖ}x?sNR$D -v;`B ܟO]wgŊ\zK ,,?h,W2zP|o6NpBLk\)CDe"T*FHGELpB Xj5*ajhOVEiP`be \6nX_'fW;l%DA cT p #d+/?p2kө}'Z5oSXȦͻ`=o}o^mTwiYhw{` hΝU?#%f;|[,Oߑ ׏~3z0 {6oqc/,_M;9JBǐHYtB~˟_'(T o כ>rb2p+na  L_1+|?v/fhT6~y?b5,]K.3Oxgٱe_հ.K-⥛,_߀PruhŌ˘7۷ [{^5ɟhYL} ?|Pf.'+3je%# ˧N 4yKyo?ռC!ãuחg`YDy^+2Mn?Cҹs'/Y[6霻u,"=,/H%vsrVO"b ڶh”g̘Ϝe4nц??? 9???;2P:`">տspJvNiFBā-nqr/@&0i:`*]~8 yr=N˥,Pȷ'/38:GQ-OXd\#<3 -#䛉䛉BH H'o$9>L!(a$a IG䛉XXID+$Q#BJDHLB^fG~COiVc2cRʫ5Z \ ipuw/ }iٹ9u_i۶--Z?3Μ?G|]KFf5FEȹ~ڕGJ+23*se^m۴/sr/з33k8ʛ/f""T޽zн}cnx>^GJBu1(pzfzaՊ9,]1}T7r]C^1!&!))fH;)t*_"76d931)cɲU\ݻ`j\Ġ6Io_5ܓka&d26pIsRճ+/Ƙw_,:z Ӹe}v p0DV._ĒO?[]ۮp*GN^é{?GWuk'RKPP`\G?!7HJD*VPٞ ) D-_u?zPW\+%&QH!qϏ[T^i5_LjJ(=`Ŏ q.gk-!A 'Ȫ^l*KhTxӸ-nq N{' D 03$C~8V?'?gsi5~J'*F{zp~ソ/}{QE*nG_t+% 8u ^}mpG =gΝǤX!O4]ו4lمE+W3c/fZm֝NN̉Ҷu[ƿl<}˃l۱;d<ݬ!1FՒe}|޿b9 |pN'lϦɏYr5lu˶}صew?Zfl޺9v=Rk59 Y13TOs\.WJϩe<ץF,Zx9PHbJJ6-_#p(ќ[Hhx٧D1QOJIs])oNP@)J5}SMyp-.]DXkLLz0T !lFbjST_?3ozƠWDXZ!(Oi9 L26 ٶj?>N~^.ahv3-6?s#/"AԹ_?<--n0ܣB 4<@&jXpeGG0ȃ6U#>ZRXQ_S~4>?D % $R+ {5F.=־>PH GHS߻k T.R9Azmk҂=}Z~(%\i=*N?x-U/+:(!N_(#E1W+ <B eӈ0QB`E>,u3oJSu(uBFDRg8?_7?oџέĶk~_? _xjT#p;JJDϡ/WmXĐإ UfGE],ԪϟՏ=?OO/:71W7GH k/͟}(V$ZoFX+\@ݦOlbVX 9@YO?&dq=˟Pz& '|sA`)KVdٲYaC1|uSOK~ۏXr)H%i'}g,05IJgNfAP"fj}V.K1m*ga`}ԇmی5|Bu_oJc$UaoPR| ;#_U+zbΚN}qo5kV \ƎycՏ%g^0e5?!5?5kc6n͔ٳٽ+aG?i8{@h#'G[Hͣzhʔ]|@Y=@~q͒(GmeyKm1 ŠD= laؘল\mxy<L< qoi>>WK}QǴ-nqcJ}J#AVxQe,fсlA:OH]X\'H-;N(k-nq[ܾ1nEnEEKދ?q^{Cʑ<^~{_(g{ ůzeW~~=?Gf%RhX1@gT+E<(dv]2 2EN}߯qӏ)@8q[vA@ϽNXW.*{Qr|$mˎLf鱻|K+{GrC Lg)W論ǢG o|̻wS Ӻl{72Ri|:PWKgTC3(M۾Q![8,gQvMuE :H.r DŽob-nq;ބ+Iؿr>.r`ys}sW+q ė+nr=N?/}({Ӊ_gWߏJu**.ZΣ-%_/U}Tʦ?=LOrs/!)/T e13Uj)y P'8Q S;/"*.O. [[}"=ґ8e'9 Bѣܟ."huU&{@\^q@MOz ejkI8e<)Ҧh@ASCEOz>ceu?-6*u4'qAMDXy#vKw=/ܤ*cu)1&p-nq[vF7޸ \[ h&Bh_lfҕʱ1MϾ ɹáGXfBCȕ~Gô4'OgHihL N}t+,V^ _Bxs,Z &9,Ovgm ,\VHp%,XJnN!4+U>RR"A8HisMYFvVCHܜ;̙[(4Yʯq"FA~.g,~$va̝5ٷp OdQQ98 cNsf/;)86glL}өuE2dW0=-\ܲHjBKWsY ,_GN:E(%Ti A-<$Z 4kl`ޯp * X5+سgyJd뀏$¬>B+ Kr`.V\͵;xl-2F-&dz>Ks_BOtr.^ '2[|̙Wn y"Kd=qPԡݬ\7'1wb_ 8K>z7,Z4Uk6jvQp8z`/|4&~†-; s)\9z`?sg칫$PGGSxǬ߲s.qoe8{>CGaZhKg2:q" /PJ (fYL43pAV,[Nn_kV,f͚?an>a52=LUH L2&Oc%؞Bb,?B6v̝w0>5.ٔ)L?En-J(R9YOfʔ)|u((kx4>9&Nexò }&7mbe:hi"Qų9ts.ᣉYnQ#̚6MdED1V._Wضm+ ,n^)NcGeMdG= `$+0rV>c>ClE~L!d! dIy6֚uWĉL~C.\p{aE\ui!Vs9;KȾylX>iV 0Cx@{V8ѣ8s9ڷ;X8!4V-`p]֮YǕ3j6_exI̜9! I␈rٶs> p*Fx1D6׬M჉SXp!n^2aYl-VfGٜ~S'ϱon\šU8zeuÏ)%p:V.]Ȫp'L> .pivWYn=;NmȑS:ٱceM 8x(ea ÉqQn+0r֩ĐClݲ2І-w^dU~}i\IRR36\Gq%r 0/j(T95jѳg22:d ڶ xJU=rz:cv QRRQ[t<!ZϞe5@ܱB`R^#~-z=ߙ{vQY ַYˍ[W82+mBaq]vnہtJ)ro㙎3f [ߏǽT&4mҘO˝iܸ1ƍO,k L^`طxs8nфP$=ϣnƌ:U3iаǽNj$K{.J 6oۊ[X.WeKo}gfT2dRDi4D!Cη'fqQr5k7 c ȾqB~WM/0d Ғq=8w.vxn M q2UdꫯѥK‘!q q2h= j]6-,ؾVOniݞCxG{PNmZ~ÆVKVUޙw jd9t7s Ц~ճ9x8jOzV-j׭ABXr%ߓ x k!!N[okѹSGK8ƶ5-[>MϒBҪmg<ۦKV ”izM%m-[ѣwF <I KVA#nڊ/J:v )ۅ0x+'ѻW6jЌᯌq`X7nN߁H KL-uK^([M9/Huo 5TFh۷gHW*J ^>##1_TUCg+jVa}HNIĶYY:? dfxYSb)\RkfTIԬ UR"h!%:GLFR2U*0WiخϷfiCyhg Gp"mڴݓ-èT9<S*2+QjU6nDF*xEJJeFLZF% F:VO?tciCkZ'QɬR 3IJLcԨWHNeȨ1dW%%W^U۶~`i|2 $mZH4#F jVRy#r 4l܈5P:e&KCV3Jb˯ѱc{ڲԬ^ K zE@ _ufҩ=ZZxqMֹ}#_hә݋.v4M%SՋ-&#^{~#GҤ~x8xV&}]'bR8h AqgH6lLs<4|aYPv]ea# 1Wd𠁤gVB >Mc0x ד'hl۠߀^=viTN813HAӫisHO{x23/eȰTFD(2ӈ$%L^ۏԤ0Zy<׽=ߍH8vbP߮$?v'IvV0ZU*aHI?xzR9:wcTIs/2``#צԬYeH塵Oq[m4G*VʕFrq_ )Aa@I""SLjB"|~ "Z0oF[cfF)0DJ 05t%z4>&N3)(tݫ PZGpQW-@+,}tQ5>Х~+RD! Ku)xQ (Q  HZ*R ʧT_?5(Wk%b ET  *Ke*{0@ yd5ZqHGcJ_d(vHrJ;8^/KQc0JKݣϊK<}!=Ū"q:ߖQ->"L*Esn<2N_x J)jnK 笴a C{P4QR˯ϲ:PUh2R<%ҤWtؖ%xő~%c@Q!0PEѨQ[-~@agE\ W(D{`|oD 'עQrZKЪ%JNBqJubl^i?`ڔ&<)Ӧ^ lsrF>TȾ~3qm(r,\(Y̍+wB͚kPɼu@ajCc'J榇[I4xQ )sgq% WVq=l-tw`L!V.NP {ʖ~_i ew(y32449wY4o>?ƅ@ܗs,2aer7Z 3'$ txV:B!/-v'&*@J.)\@!a Yv-ONMl| tصw6l'͆P1;E#]Y|rrJq9)ؓZRA?WzWvq1y> U$fhht.^&*BeBcmx<='5H¤H7Me'M/+gf\ꦅ1x$`KW*:K W + G )*@HPaOc) LgcT.Àᯰmf:=Qd N–Tt!aЎ?@q{a'OdRV^z5ƽ~}H`~i1P d_DX('m,/ e"U,}>Uu<%$2d^~%*WJAxn1Tz1cz8DXaȘ1c^Vp7m(ȌaBZ YDBjBuSKkGq]+6,^Շ.;`JP.ZS.g|` 2|(i  Ęh)1% %TRW_~h!q'/6#O A Wjk}4{IS;}G>/UL`!np3}-pHe9tw9]͒A`SQ :XajS;xA@*<ߋAy[ çN[ E9t M[ FP>BIDTBEj&?OS`.! ۾^fԨQT }8|g I֮a}:0pxB7q/Ko.+!Bb6B  RC|M (JLW-R,"JRe[V\~(-PNmw1&ϝN5LOYb @z9u):C;&EĀ +>b-|0b,֬Yϗ{- cAHmah3M6ūI؀h >߰ a>܉C !kپ};1%WȎ{|:oC!ĵID蜫l| \XRQ{->ԩsO`V(1_n)J dέlܸBɏ۷[/q~>l:]%زr6o3C(ia ][(p&MC@tB\ |Z6lJ(dq~֮^Iȷ=<ɓ1n8DñcGp-7oc{w| cHC` 9ٳma|9"c\+r+!u8s&'`׎ac&}:3g/6w|ҥk&WϞb٢Dmlep):B8dBRב2V-v8pݛYxer5/XN,쫗:u*[v ط} ~J+WdW=dr6%ddu"TN3`%@ygΝf]d`ݾʕPQ_8çLDӾbʥ+/^СØ1hz.\b=sn~cxe!dk#/?5˗r]apUh\XBNǴy~ť$f,b•8̘֭1kWo޳52Zٳ8{&1#0R ܹr&Q^>ÎpRYq7u.⇞h/~Sj~8ƼF'j۴GRdPg?s6`kxw0Yǯ?;(zcB!6| fqe0O,ODmQzk؈2}/ <ۥ Ĵ[?6nLB頩`a8~8+\9}eKpa׶Ydr $9qsPл(M}U ŸL.hj.;Kε,]g.# J<&Pr?ShEHܹz%ryCY0,=rcɢ<~'ʤxSIJ/||<| _h@Ԋ»Yx1_:/ {1p qyN۷Q MF=׬oyo8m3nm9Uk;VXDu0%ղ1,o = u'ѤeKb͛~*kn`/ ,8w7ӄBl;-{Ln#ѯXl {mg>c:c޽|_8vP({f~vT}P(͋g'|G̘bu"VF$&ajn]֭Yd֬B0}2oAfweػ{/{}Ćukцc̚=[Iɴi>|9Q6HkعٳlbvM("/֭ۘ3k_ḽضK,Zˆuٽs ǩtb\a{6mߍB>x''b\q9>>v0m$>)[v'7Yz-]gϗ_2gR-^֭[1C! ;vr Ssز)3 bop\&NOgb=lX7ط?sf۴i""\ò%+RT <8{S>i'3g| mPR"RyܹvNc3dLa꧟w.!ݰ>vng颅 n#Dּй%aҔ)̜ۄMgȓaN,W3WnABAa~KgqQ)0js>f͛ùשW+G8sU6JV\p* IL}&}3fVmvɖ/vb{&F:w{{| na5[[ٷY.e=o1W ȪUʕQEa-1PS'0Bi,^S~?ȧ3gsedB_GJ\ ¡DjW¥Gm ;u$-5'=~P(WI)gs%:wB5}o"_8Jm^bض >.^"= 5Ӹe j֨'-{Ot_- aE\:k>t|;`@'Aú|oIL38LFV a0,+1ŇiB ɋ.qcQ},~Vj!!Ԫ^.]簌p1׭$j֪CuX0g*sga¥w+ৎNe?}Hr&j!ZmZ6bi,f}L?$zMZn93Y4k&/abQ\MvC5hRgLf:vwaA>W,#n%$f"r%6۩U:r|͙y b0#hϕ4*"EhO eqH7Ɓ8i|6 Q~} XcJfżӘx)""%ukvBLrFmʲEԉLxV)ͬ?wU65h^yO 6sDg^dՆ=.#aȉYHĎXu7Łݛխ/;vȹuFC.(PwVC_)t)={oM'*,?1k:0f^Q/s5!Jeؼl "7+D?)q-}ORf]7Cб#Uޣ;mڴƎnێo3'T/9ylgW3ı_v%6ghܸ1.\'~Mqe.]6sp~"aLs|f.];h޴)Iuy6{ 5-vO?AVt92VsN "u3R~"gN^NN2+si.ߺݜԫQְiqnق)M<4jҜ7~m[c1=Y:2fTiݜ˧s\|+QF2{*t؞a{аF:7.^٫\M9~87rz*O4͛ش}'22-nܼcH%Ԭ[7|gɾu}Pj&۴㕑ީ7.ԩ\yӗշ?cL\pׯΈW.t֍*|5/@gq)N?ƍ[99}};.ݬٸJƕ&yZ ΞĚ55f4O˘/Q%=/pUyѴnӎ.sU =Vqfus"RԻ,K4z0<-9jU*>!Z:FB2C_zjURN]ޘƽΘ*ӁfCG_~ԨZD`Ԩ!TYa|ղ0rʼ25Ǝ_VVU$  Ƽ25"HNKg+S{V$֒vЧZ^~^gԮ]3UR!C;~ o1-3,{ujb*#WBkwƸc6j$^:Z1b4Caڀ&==W^ŷ.J2DfFB@$f!}c<&g$AUмek^Fs7mLX(ۣ< ,4ew@NoaC־i 6ߚ ]_`QөS'@~V9jgÊл_e!RҨqsF|CSVv4B[ѣ@Rp(=_رc<|VJLN>nzB(Mj4^~u cǽqӯWdw\5DbhO,)&nh 06"FIXe-<nWkԄT SljRN^X'p0t,P , >(i*ݧuc ar1ʵhٶ=uٵ|*3_P _E.X0BTLgЁ?=^z(%0jQZ)2%I$"H̠y}xؓӾcG{JfMXt+Wtx+-R 4C8%YϷk훗ٺ$ V*$) _wԭ[W^5^Y#+48@fl4/mB+:֩NFڲTkSxRY;jTJjIrB>}1aMFMPTP|*"5gKάLΝؼv-|INЖɥ+\8VHCҴiS|ۗ7~ΖcH\*\FnI F+i*$=v1x@o~7]c괹<{Ԕ+CqN5`„ >;`nԈqoN`Qؾ6 Ʋx 8<q֫ GKtB2%E*uǽ\U,SD S^ٻl_+T(Q-9Ŏr w%  D)]tRп\}"H)g鱹^4p/86[䥑HKPEeKo4UiXt̖Cz-]ti5@@;xh4ʼn,]:R"'Qw%7Eע /",u^]miZ#/t}F"\DA/R$zGQݗ(\XiR%EO]:3g4#!@bw.nk)gQ/ZPRKqR@Xl[*7jȥy^.1w}ET?pKک((:cw8V=뢒.VU/]RQ$ / #Ӵ5 ^tǥM 8j!ҴҝU%]:2|`*!AuZ'4`^Vh׾@$luIMKs/2d+dVN%=լBVVUOY:zt]Ν8svFu%Uk7!4_v3y5MJNw ЛFbcѾS^yddjY]O6i#Pj:2hē:j0UIR~Cdh'aJ*e^ӤV&m\ &uqmX]Qi)D82r`h[SO1R#TZzSNM^e5kTQ&u7CYFZ N'| RթWTl%]{ ba H [,/<I})‰!MAJZ:Sn=5T0ձTɬBzukԭW54WU*4hXڼQlTw!E5x0e6 X'ϸoT#+d1[\#Dٺ)Y}x$,Q\&]^bRkeERk?b13/2V5[޷odkM)t?+S\%QPXH^n.y9a6=ݏSW(8NH=Pi.هe!ʝtЯ8Z^(F$J`@Y{)=,lPvޕRK4%777 Fml uDpx|qX)Ce=aOlݖA1A$R`7̻(*Y=ia%lX9-`NPn"-*OѲD *>oqyY\'_nx%OR]XdOkG-q<:ujҨ%W&(D Yj-/Vhծ%-]yϦ鞨|Oe6B-,:=,*0e)L>B967ݷ~(bMrz?(QcS,} , ԋ~qd}KGm TVL-*ƒ*/@id,Tf?uuTDw!Zk<öm !//h4J,sb*P@/7-= ăU>QSɵ+{kǢi1)R{Y@0ĈF)'77|쨃k{(e8q߇04߄r#w4QdrVYuUwN@gqa xi-n2K?ݑPJ)*gPF2իf}<0g_}:57B﫲!Nk>ym,ˎ[=⧝!>}Cݥ,@xV`mD] &|6bv,8ˆ"TbǎlڴXL _AUѦ5BTqji@A .na5\0B (Ѧ% %䥨U3rrF=<+T*/w1-a.?ʥ_G`)7ndSPPHAAX NH [.aK"g-q֭]B 󠠑(hmS_1m<6n<#csJy\x[cIڿB %sAW#f|Zn+ >^~ 8)]HBO,W\zr/D0T/u@t l=jzav ѮJ\2)0KRӃ)>+>nqU`dwXu&">-nq[tGS:p?Ű9spl0 C;HxB p1}77HW:hv0 <}.)-dWX%Jwi=eѽg_ƾ}[ru ec`dB_~m/ùp(Ј`a`/nH髺40ʕ׏/&xǣR{R\O WXB 4Bj/8oa5R<$B [W$&L̪+ɋ`%'̈́Y=F Aj\b<+~Ft'H_?3hGد@a#KCh#C=v\+FpC#k)!ITX , +o{7'{<|%g]Ka 8 Echi@cUݨ?N:9&]vLg4 Ybsx.PY@EdᵓxM\`sZ(p˸p?h/V@,Z@^^w 0jnt{< ^ㆸ5~PX轿+q{T`|^7.nq .f_ |4<Ν>ͺuf$$y]P+]0P˶-8q, 7xw7s:Wng/^b݁ A ׍x> BbrvK|+"(1KYj% O>~9R0$F `RǾ:6 2a( gO 8H.^ۑn m;)A[2l'$;oÉp%>6| 4Kٓ\zūP $Ftؘc%>y S;ܼq/v%_,]4[WYh%W }9,\bjͪK:}>7ܾ΢Ynwy`.]9YX9MGv\yr<ǒe9t$Rܽu;r+/:W QB!ٴ1Ay,]b ͦ1g7sbعy,'O1(iQO_!bjlX+[H y6nJ1t Kgg6+Ć{>c17b9,\π4\*vIXM}.Y>d mȎퟣ v|bW/qEΟeYabGq쫣(UȚu6{1׮Dz_-[v!e)4&.Xv3ڃn*;Oqi,m۸aHpPwرs°"`MX×vp`P׮yNe6LL6אOa vÞ(p0x -Jxl\9^4ƍK登`>N4"۷Mtqk?9XP>`gIȽqu+PZ Ν= /ٰf4qn ͭYf9Bc΂8pt9VZ!Bܽu˖qmlٿk #?zwYj=yHUȹs8p4"C!<`y:yPx6+/[`Xd_9N˂yh<Μ=ì꫓Xc,^[%Aa˞]_Ҷ]K/βeV'R:~z v [nǐؽk7]DH?BNA4U+s-6|,+ 'ƆM;سx\Vd_9Ǻ-;qHB 0kٲyS\` T9ʏ64h9Xcv V-͙ +(敋brq ,)ʽrt!K|8gZ XZA?+0u7J/Y) }]2 yGtVTGQ̝+W7$-]߱52 JT>fx'٬9t+dUHn*ܸ|9gq pJ`0%tV6S->i3fr9,o+nXOmV>bD‚U9uM h'}.<(R{D3HRR16o3frU2eV%L ?gRV}թϥ*JUɹsp$Dͩ^%932{l,Z' B\MDYyh~ }b(_p@j R*sP7+EsgcH+7iPy3?єE3?aX}҂%aQ) sf`/VRH"ebUժd2),[!dHV|Le9_/ d|($* IArb"$Dը;g'ɔI]OwY<I 2HLH%1! )<"D  v\Ο9CzYrt sȱXde2UC߸MwbB<Ѥ&N,+x3x*hHHsgXd!Kdl޺uYb%Wo%R&{?Ϧ5X0os\zrAiU׮0< jBya`!VblsRRx[W[9lR2j5qztQZ}TJ~\NNDQ\׍pJH +>D 0|eCkC#ˊ#pD V'?.Z*b)'/]k(4fTP .侥0-v/*CixQM!똼y*9h-nq[ǴP@H-S5a[79r$aC2kn* vV>t,W$!/ #Ze\ *efk?n o>ݻ!zU# 1ь?qѤIjժqo0n>z!׮k'73uR Q#QFUJW,bKèUZx2xW?U:+̐/SvrОǎe@LÆP^ >ҰC[>uRJUFøqxgX*d ւ~ӴqCBq yFq]DfIk{Ԭـλҩ},p\T'4;` x oN`Q|u(zY6JG=;~"nGzp'/‹s왜u$㕀&kus'ctЖIaGtʹ&Rqv¹N&vж5'Í4m֜3gx6ETmqEsL:͚Ҵe;&NJHLҲM&LJnN.M 9i̿p.SΛ(ɡu7eyxIM:\ G\zɧ9wDJ;O&MCN̻̿psfЀxX I~̚3m["Oa6̝w-$6:uujの!m:vO~9q@ 0vhH&9z< # @'@0G@XJ`8&92> *a QKG_qSJL,0&F{n:/]Aa$GcQI|w3b8V>JCYR~#E_3\E*{8Ux@' ӱ,2DN!P"d `0>4BXZkT;3 j*1XhiѲukΟ~NjN ^"RAk:3d SkМ*;óa]aT;v(FH& ]W]ؐG{Vw"5dF,&2=CFJ5$ndw~f-sb ?tEK jYdĩ"㫏*=(!QX0󼏽('҄zG<o^ZG{Ϸ-l/\Hb|yկ|iЬEqi$>~̷hf/Ԫъ͘ׯ7f_yĴWq-_:5 }΢e|bMνm-t !<#Bۢ-?ÉC+5j4J 37Ec 'BE_>;vEۮp庫)lޚ-s 7ҿwЉ`ԺZ_NyNӌ `0\T8 `ssQZWj^\e325ӘP1ūښAwfL cXtV̙hZakO&زuOUUY%J/5n>E][_l(\. 1҅\03ǮOJ*N9~c X?u/F1 $| cRJˈb(OEY"U*S\#idWUƎAm,&+Z *+$Z/%\=Q}Ũ-Ֆ{ؒuU==f17;?s}n=BnԽ_(L&<9flLgK7n2+ F$R+vW6Hvޭ+:sͷC6t!%X%/"VV{8VѶeG"N.ݻҮSkn{|ӥC;v邴-e8~ta|kgwEs]ZneY5!sS\~ŧyٿ]+ C*p:6tL D:=:.}CGطO`͋(wAѬUKܜJ8oꃰ}@5puORoƶmlu]SL1SL1Ŕ% ûw+]-YMATP׿ \4>U`[T[վ٢XCUogI#C_ u/j\)E""JKK|߯>4 X,mN%:*YVVFYYd$eyk*++I${K6&/  Ͽ+mOR"IQq\U1*[;sq,oulJ+dhV*ٽq7^=q&zPӞtqcƎw ~,ZD,RnK"_l^{wd!KJ &:m|,#)E>XFB7g(jni7Ь3S Ԫַ`0 K.la{6K?Dи52Zdj YTϫ2A2Q/ A50s0/\N!:JxI'sAdi'yؾ{/1i3A5QZu+`F0υ1R%Sl˴ 4k)4ӒrĉR*yV+3WrwH̆[CD `0b{pq);vf1$Kph lNqlpOHZk}kRY3-5<;')@itIRq܂]R xXcY|!c$A&SE]T(|ab8-L׶m"yyyPPP@^^4E 6}u.pBdq53H/B.۟8e!E廒[:x /Dwm;DWm;/]T I7gɣd JO:5l%*xdM6ZXHt_ua@C-t4e!$:7É0o ? `0?-"Ilʩ<33t$<塄B ƥ(<GR1~o,)O{v/u`$vo_xUG&[$|ly%ɤ?%a?b<|s0tٳ/]IlU0ϵǁY b~-=R8r˖KaCwSB7];DQӢ\nn.d_ /ii"dW#u}T} YhʂJ 껺( 3d5)שN>ߓݿ3 `IVXq*+HrkeEҹ3E&˱!#F"\Vm[QW@]QBѺm+rl g):|4<9~8*tBPR\}>DY a+ 8ؚ25m'۷e,6ڵgsksxh-57-yul*q\J>'H*۶f찾[ F2p9$T3m ;^9;1?7oDSa~`YhZ- Cp%EePP<RuuXAUm88F4)uRX `0|x2ϛ[ѽGoڶn}P"nm[x<|=۝sGpw{oY iGC7MF+ :mDI2p3U7^=͟}=qNpR$&{O{1צMN,[˞ZJ~fLvO,nSK#RhlG׭CX6;wF.vXTz}=1/Q+p8hPӄ fLe ƣ<#l۾O_W6у?3+^ ,v@ى_w܊HIwe;he2>][:Ud \a3?޵ zk@jL\JTm%f0 Vk$зo/z%Wˎ2 \?~Ӣu[.\~\1qDEϡUf(m墋ѺM3Ds𢹴n,4^r.=@YD/G-Ю3˹p:<ڵo/,/i'cߴ%%|Ke2)ȴECҪ]>s\vgܥiA. -4tW\7\)?vG1ɸ ')aҹ 6\]t!_~9 f?e1t-]J2s,.g._ߞlۖ^>ӢYsZ6kş} hߪ0p 3 >.׸T Z#9Gؖ-(( '''ˍcYSμ_ 8VLJɦn,>϶hϫ^fdhf=FNaW,OqO e*IRC`0 穵 -TŲ&+@<ܶ 9\оuKl ~c@i;L~]S4.K.=Z )$тBf?&Q;PBcgՎ=ϯ:kIg:sa뉏\Wûkj۝8ՙqrrr> 1$n)Ķ~۠  RuF 7VUh(Z~0dJ ~ ^V?mU쾺`> ;Z-u^x&>*{>h|@"TԨԷ>x[ĝxԈJHBl×Yyyyfel(уy n81ˤjnGRn㘆iSX}IJƸz-jp~P[<{Ͽ 'UjO~nӌ6c,]4w?D}! 'Ѐ_Q߸5lڇC+>O={Cc EiNA"Ip=7)G;Cm29)%Ht(g^_qju#M%9C}\ÃBc'UXCBZ'.ov,Gӿo/Dyb$I淿%Ko_?eؽw+-ɇ}7pg.3?)U֎,?77y%W\ůsTA_//~;~{s ИJoT|Uq>{2fƕ1\C׿EF{82+y+86Ѯ6EnRZY3I˪f)-Ӎ4??h4ZlST$ )YH[mT><ݫЯT^>|k-LmF]Гj0S hO\7ssMLH3 /ս\q4Ρ/~Sf̚BV9lz 殟 8y2wWx&b2c_Icy z)7?)u4ʰ#8Egve~gz8u˗Сc{_wnz+m~e߷1]xO ʌi܅sWt}GGy^?O]=u=G?d؀ٲn9^D6+_o}-[^fSi߲_sxW0`0>BDX&NBE[zS:WCWغY]j.cfBP譿uSD?BXq:ez h)FaG]ujjnkYH%'''KXI~-[9E{!J@%Ht#MYN9Znׯ4o)D(|)"UI,ij'"(\:E$6 u,g? K-% |E-^Tw=A3|ď=4؆t*WɢQf33S^rG,9@<پcx)zCN~lyD,ιSݜؿ.M~WPϭ`ꗘ6s"x%q^QW=?]L?7_~?0~j}Њ'qw?l;tfѱSk^&!Y~monIBzExh6ݯ?eGƖ |G'o-\/n!%DNx9[1x1?o̚??w}i _/7sS`0 J)]JJJ(..GOj:STTDQQIկr%%%:ϯ%E8ZTBQIqz.G}=Ruίc}_xJQIp'AGSߟ~\\\LIQv^9S\TDQqQmRT\n(Ծ1JJ>;V6%u׿LգH$$I88qc燫d^Q;V>))>c* 9Ɉm㐓Cnnnfvn\I+aW@Ձyh墙yE̻J srJeظIhP G&MZ> 6z~5_MJu?k%Zw!'o}.W}Z~pwhĥUӵC8|x`0!)kHԧ4nK-#̚s1& ciiӒ˾FW9֗Dr2wUaB)?t>_μGu8Q׵Rn**XZԚVqs,l:y ju=&HFضu4@et\8#P&&BQq1|}镗1uǶ%Æ_wCtya:!H z1enN%xdPr`0|g\NvAp!@񴍮>id!|PP5~q'>B\UXsv_Eoy %kַfe֡(xEckv| Uc_ZƒkE.D^MR$v2ҿOcOW}$ $>J(5DEPVHZ~Bj74 -H+ -IPR/`O%zZvڅeH4RPڔЁ^y#/"1nb˖WywNϡA#‰HmK7QVò9ޭ{h;ƪ5F ˅c'N+q!\ۂ,"5NJ+v<-dfTޮ5FJF撗Gnn.H۲3Sr /O=.eߦ~n ۷mc=h,g9|)Fd,HQ"e:.Y01l2 WRB ϲlgߘx{H3󁓲 .fҲr|!;?oă?-oT.Geٵkx<<›[wPK">l($h$BI__#6}gx).ȉDطM^ݲgWfѢxپkqQ6]ˢGࡇgWH$mN;sKfSOrh1lz}mlŲ} Au֒ Os`F N' ?^x)8^g3KٲygbWif*R v&k׬b՚y8\t DpBKY,}~-=HJٽg7Nt/Is|>ѥ=*YQTcIK6+/#Yy_񧖲r:xx V> <0 >VQr +x V|W6m ΋@`)ڷ˟aƗGX3޳ۉ8Bs>i6^SO=ˮ=)(@i-Y ּ>IOc[yV`uq+V2rAyIy)VYÑ2rT-[P2gnc櫬Yc'xm˫,}Vy #s=϶V*Y ]Ux𓼾e{f -[ξܾ=c<3{G6EQmXKa!Bf X*=>`n6/DZxxl( M9uhd o\R `0 ^^pk#ϱy{8ܱYӲ@Z6˦̘>M :#z(rF5gƎb߾}b 4卬}ЭKg$~gJ_$u)l0c\fΜF+=+WPT(m!9kiU(ũ,q15O2tX )Rk#*iҤ >BHv:1},ZiOϞpi̝;:pFtnז[_d=;#]%U%Р=\rVyhb9o{Ci8ZTLeyyL=o*G $ ''r+9~D<VQR|-[or`eYJA8v;;ӬE ?.]sfL=o ^8z#eB?|ikڨz0!2Q̝7 !H(=e3pf]p.m'ظ%v8Vljή]Mr 8unjuV 6O~Bztu`ԧS˥F`O HÇ^@An{' NLhס=N<.O>}i٢ƍ޴Ёs'N /bPDlL_ؔcp.mVTyHG gҸ4ɋֲ)[X'K8q+=%8G%*ټi> -|yÇ o6'|鳙xx{UR2?uȁ=;(**"ӼM;9к%%hUx~0/.aHӴc&L`qB KzTWF 2޽P$y-<,Z'ZνvZI"<}VwJ܋Di٦-RPV^wv)@X6yt? whO9¦-oEXe~Hd<yy\îl ۋqp^v:}%8'>qFi!fʔ9Qɱ#yyf"y뭷9^ZfQ" uJ]()/E i9t~&&OdeXRrS}:xCmQJ [m'=ihޢb̚qS^r^$m46J+[6sVz [eƎTTTM 5taҗF8!PgR ծ:ni |X-H `0 ).,l3Ԧ)>W#k%VQthZRYv/\<_0w [w">'V@A|( ()\&H!٣O0w\t֚m2myL<٥8xHk+<7DPZT){7u&3fy3n>u*sff 83@8heѴ De ~"JMQf#!d`&m@6mY L{B)h[hvhôS={.眞,;”(!2tgD@Pa06)A=mˍ" 'Hp/9QPIXB萁ȇ’$NJDi4JT/"VDy۶Ee}"d"0'xzXqM ,7B7>sgd i$c$;ήA^ԡ jSrxHq)eqrh̸RlgEEG5g.&LYa;nxaȐ $ud4oO"~-۟Сi۪ :Y_!4X(Fd`}2|p&Ea^QoH$L| Ph`kS%C IhngɠM-0~<}E3d!8B4f-ߧtN6-=r-[rNtڃN{2jD" q1r`l/TT2|r]e4k׆~#@Ӯs WQND)'(+  /E5 K%tڝѣVn2a$h.n$cFs!业>}zqvADfԄ4k֚8ݺЪY!ϛLNɣ 7cGgaVkG}0CB pNt_QH 9f4-ZW>hc w}zCn.GYswJϮ^%ڷe8-\ JNw%M СMFVm Jr7p={MFrT:u2_bTC|'OR^8ǩ ~ϫxtױȉ䥳8aaѪU>ǒt{7oWe:H{.prW D\7J~^!yؖzF[v|FdeTG F-*+(;Qǩ$H~FQ^^^綆@;jys=>%1ޯg{Q0V|.!jWˮ.dV~(՛^}z^ZՒI8)FTWaӴ UkfՅ:QG^e}RkE<^IeeEgtzPL5Ũ2***H&'kOgF kq,"(WPP@NN-kdM{rFݛ5_ -rs 3v8M䓟K~ny ޫ U۳B)E22*ʨH0TAfV3Y U=R*} {n:;MZמ&`0 `xO)EIII uϫjL&\4z4e[Wkx1URw ?khYUf;~ܓ=&k|?\us 3-jq]hTx߾i DpD"A":4m2J+㔗EJIIhELQcZE4MryyyD"e޽|2Y"9poyk0t!U rdֿ>;}S%h(1A3}Rg]v#nH;8Ƭ8?}FZd/wCquHנW%R"ƈZkU-^:#t}!ۢ+h5N9ŷAe,KZciWKT+]E(R/3A\H(7+qFEh4ծ#D\rҖun˲NĉRYYI,;[]֠J,3Nwoo֠7uYխ`W=\!Fyy9¶m:vHn޽)b)!.;v>SkYcjXnJZU1EC„j @q̪gZ6J,^hj^.XֵN{%lҩq~ Y5ЂD na9m]TPP+bm<,RK9@}55!DVF3!@hP@+*}pl!d+BTyH0.]c*kb_ݢ þAFL\ ?8E~V$ d"P؎痊iU/ |J /lKD8V@ّC]IcU(-QVVNEEW^>LvL4-T}0f]z6 !,H$J~~i5W=wFKb[ii)'N"TDxNQܳV^͞[zI8kcνĄ ©xuž&im1 ܴEOqB %-֮]˶|B<[Ь޾UWI]tYTܫ,Jzخ`Ul:Dd mȕI^"_}I@JK1ֲs]oִ|r] /vKƓhE El|y*5ɺ:4˸l!*<xmlXX $&biJM;R[SWMoڽ4z3erZzغ-VXEى>ӪsM{O2c;5e(:Q%Xh-H&$08 ²CYǎU_d3 ?~ SRTeYh&R@#lZ#E'N!%%EZ"E%DZ,+)WQQvT*H X‡x9o&o L!*! T}X,Fyy9i˶ F6;i}`|m`rӵ_qeEN2 ko`9gG_Yt:7q{.EQ~ħ>5'$kcH>$Tc ƿ `0|t)uP(/у8|8돟H7x%q.zO>MɱRlQZ|[̢GOo^,l:6mɧ򕼴>{q[^{}G{-/ ުj{핍D-ڮ"QFR9tgyG~z|8ol~=#/dٳ+8|8Vf|Qxd1O/_XEg1nH s}aXX>kXf O<4k^X+^`ժuTpfme˟gXm Jeٲ㠅6cSv=Gc H /MYK |-񅋯#xU61M$DE)/_ҥOt鳼zJm9(|'с(@O l6k1hѼL%zD2NP^^Js8zde/,gQ'*0˶Hlǩmeee(>%XC\*^[Mm #5o3]<̺ /NSk^C&ѧgOr$W/7ov OXZ#+0Nf@9`0 !s,{>l@ؒzӧТYSœ9>m* 9^\̚Bi6o~EGAhIOJtr&zM,E׳b֜\0\*bǮ}$f %VJxtl:̄-S|Ff<6ӧ_f̚3hۺee^< /KlٲC K/Gpѣߴ#8͛5aƌ 8,N]2cnݒ^0}L.=msfthׂn#$vrүOrmfY%JVz X믿}JeXeXQ[H7 g2s^0-c (:zʊrss8oGSQVF~nSNaQudu˰CTVm3}4wLng0e .!gvHmڹ즴"%|^Ь D"A?i ԧhVXPv q`>ˎ;پcGUQW SHIz>ZbIst܉.sֱ{-](f1?+/?4[gqt? cƏWtБ'pзK$~Y 7UؚNg|$׆W7mdמ ?^ȼypNϳڧq:ÆfySiުҲrJCayh٪5燮2~>BnV嚩GEem:u^2Bhբ'Jسsoo݊eYXűvmFűbn}cqM4rRnB9Y&J -2vn߉%3F謕{2R*] `ߞ3{Xqe'([2lF ŽdOpmzZݲ-%}ו6nt&X웤&ø C>@gw[p̼2"vf`0 a\{89q7vdX:x9MHKRX ha$7X 8/`ƜL;Mueu:r]H#rJ*h׶91\c r6lx#G1clv-Xq"??%XJD AnmK̙s9{63gϡmhӼE ͘Ys3{DZ@+]0ct3H8VV'yT}|XT*I ܷnpnZa)699Hg}OɌYs3w.t>Q*(bK.chA^awlCUVb}ڴk˴iӘ2u"ne9xOaꔉ˗.Bgˮj"hD.,'+x)p(,ٛ8u۶nm)hAp+"r iҬ EΝ:yfeμ8g/~:uI]V/* J+zJ܈eA<'LFY6hE9QX$eqW0v0~~˵~A!!Syw^߿"wE4 `0|x-aƗ5bf{/$S@}N+Ae ΛIǎ:1@[ѣ7c#OyGӲe>gJ>}ҁҕU6Lq>@eQt1X4iΤshٲ>aiO7~}%OF7|vA ZP _8A9MH<$' ߀Hu=P}q%GH*2|(=ztDZ@hp=:XxX"pEC&͘q4<֠1_wpƍ?ѪRk4v\NCօĻ Ƕ4aڴ ZJdjY¢),:y0A1l#S;r3J D:¢k30tҍaC,Pq|2ͪlՅE JXܝAFu]rs" >Ab)X*AAf 4 ~ $%9MZ0h`Z7k^<БClݱVH@wҿ_ V>I+cQVVFyyynSYYv!MmO^VZϲꃿԙfJv 7xWF)@p6N/_%lV^ 7-׶S1J`طM\p#_{-k^y"OZj`0 ÇbhX4kՖɓX$RTO{U"ٙD%TyBI!J00/Zgu<(Տ̳:$A2"{u/5TK Ev< G ~U/\0rssC10Lէ*h]10J>=h\#]TI2-.V[d%'T:zDTԱ\Kgv_ 6wpڵ=DNXI*5R,Ruh3jgI&{)T{yUbP</K_,C0y!ӻ'Z˜<^X(23u EZ` fxP7z-Z0N7D:كN_^t20gUT A^POk|- -(R.AQ2>?]m)wF d-d5VU C錬:Xԛl 7[iǰaC,Ykkb,-U,޻>.TmYSb13x\C^٨9(TɪtO|!l52o_o&Rx7 `0 baQjxq%ۅ]'@OLccZ")3XCTu.Fշu_=_sVL=Q23V&FuTΡ1K+وv=p&G.9olFIA^T2-$aÇйs@%kckŧj۟z쬮o8)~WqO{Ѹ1 ̀:SV)H&i+Ǝ3}UkwE]c/RYkZh}t?>oB6 `0 'Im hт͛oYh}=r~[ҼyK7oJM?vw"la4 > )ҴiS5kK>[hAӦM),, iǽ4iĸIg8`0 }6  Zk|Qf`10`0 .m,+ CmcC)eX5# `0 Gf0wZכ9_)yI} }fLO # A`0 6m4`mۦ %٩BrssFm +F @JeYKNNyyy~Y˫/L_Cs0M`04o)%{졢4`0 $Gvڙ1 ZN j]9]HaYDɩU#8|zR8N%%Dm)i>z53M`0TѢE :uDnni `0>KVԩf7 ZNP1"S]BPJkrpj>?k,긖Ǐ' K%'K/T*'To|ޫzcJH$.4 `0 ; e:MqĖZ$M'bYwNmD,-eq8ej&Z tƒ:U4nuDP])lY_֥r}e0 `0 2'R"GH8fKGAz,h4J~~>䘘Sj(MUBV])<+hMVmJ=ݟl- %e:Ml! `0 -}R8k/$sssL&7ie(%DU RZy/-YRwU^-Rۦl!!ᯪ>u mXDX>%ά.AI`0 `07T5J$L_j Qi-//uk=;MZQr1 JW/$ RiE ` mA뎛5e4[c8N'L4&)D$\gaemt,j lB a/[HKOU]rkܐ Zո5RWYUKF`0 `0Բ+BJrrr(,,̲a}HYE"ϯSt3aQ"%,0$!#$äSr7qɅqRdz`׿BaX=Bd A)قB ˗؞B$$M\Z}5-2Z.c}# HUZ3=`0 `0GNp"Z,˸E̸HŸKn&C!E@-ĴN!߽&&E$ckW$)"$KmѣM3SEP>)nu?~vMtn7]Pʫq|o]y <ղ65ܔ9g[FgX7`0 `h"I)k=O˲ׇ!^\[AAhԈntC_a94A!pU(>kV,[ݛSJH|$~R:W\IΛ<׉R^3baD]R`0 >sE BF"~mYnC}?v5)|B׿bO%]tm*̘'$9y42p~OVMݧ'kWƋyXB#ͷJgʍ?ivnC`U˲8p0?|[5ߣ[Ջ| X1ͯ[5 ;BFFNr٬^rU./$C~p-tkK;J%ڌo.JKI!EfD@b 8: r]B,(gRI:uhw[!#E BrK,ɟ{^\#>BYN+Q p.~p1+׿E,^KvG B@TZakNc:8D!hƓD4X)% m)U^?7FO q5 `SR_;呓NT:mDu$ҨUgZfSf$eOF)-W^n*%8ԼvqB*=fz+?w۷q?o}Mr( /Cڝ ]7~{w=KZ`kmxDC+;{AxU;hZڥY|{;o秷\mޡ4 |[@8koҶoCXpܩ5*e4h/">H5Q̍?C=۹?[nnJ, 3:VIIDDpv0~;>C͉Q:ym :ġCG8tpoSL1SL1Ŕ>|J)))b;Ʊcҟb)JK;F,}|S.L)KKKI$$:۰흹X,Ɖ'L;›R pY?RI\٥Op7TDY|ZI"M%QggᖛLEݠ#QX:%/=~3nf&8|&j,[ 7?1Ǘ)ݯ~ΆW^"a ~?qÛX}^,~zxA~(S۲(:\w v]>teYQW\}_aٸs77p߿nNv= J_$ w-x~* 7'{[:;;[r<Ͽu^{̲QC^n۟XbroWcs%t Zt晜SL1SL1ŔZKms30SNWFDQq sVnnnVbZ8&=ze=w|=p7x3|+|+߿|`SkT.pjVf9 +" bU9JT BC_~.TeyA0:ÍwdKo$APRi,43_nKh5gUj>_F؏B.("l>a;u`0 `0 58g~* Ԃ"Q^!2LP媲(F7=ԍy@xdpVUܲKUWI5s}<_%HaP3c**QU0m5*`0 `0 C-5@(k@-d5]qYVUﲉM~IhЪF㦮Kl_tX1 SEu`0 `0 {G n'[ [vRϔNΒ4LjOu^~Uf\HoǔezYݕT!BC0K?t }J+(++3SL1SLԴ)b)Rjz Cu MZʩnRDžʦ Es]O[(Y}մҺeSZlIhѢ9-[4SL1S>ĥEhA~~>Z2l)b)([} A'>F>J$堓 `=mk0 p`0 %Fx3 qp`0 )ѭfȓ̩2 e0 # `0 emwZfk0 # `0>+jfs`0 F3 `0| 4Ā3 qp`0 Z(P&>#Ec2 pqDxd(uW^oQ?!Zk!juiL]ָv2{D.-\Ѝ<ڏVRZqvlXʨ}o,Mo5JeH<%aIlon#+xh1Eղka! "erdV:K|rs]jڷ$B !N:dC\s?-;PoY˹:!QC'1vҧSql(RS~T‹PYb3ӟe-WG?%8غ .\* *u'Ona<%V]SIfQg>\L2飄M\$, o@xx&![p$CZ(XUeX~0/lt?'yefLV16Rx8TJ_8Y n0N+';7tͷ, u?ةlHzX: "x+a?OZ.1%DxbQ%޶?ҕrBҍh*|^sUR$ a0FKNkg"xYSXZvKB:$R [)|)IX% s2Oӗ~4DR/,\i/*V\]taulrx)5RZ B a:h_8*cC}pu` GU |$ ᢭  8nuA`0 F3NԙřT{!V& MwY1 ;7c!2|8ƍ%_gӆ Jn̚2W6c 2a3z` _կql|ت%AΡߨ :/]u)"::W>!;\A=d,y=3à1=t#2zƝ{1Jg 1#3yh?.vJ~pM§gԩ91#Fr41o?hl~?0gͷt9ak{AW,)(< =c&2~ F5 bGyWF3NI4>NTP)9w+ n>H<7kOA߅Z)/5nP6($'qݷUB!@R ,%HA#Q8l\?x9ck/~d2FD(@B,^BTRHu7-f?/}۔k6<ؓ\(j3:R>wF/lB׎m)= ϯ~"_wq"ص^} ϱJ也Wq =>5/+Ö.4mہ;WoXa!<*ٵK/$-r}=4?%1gҽ $B|ű\ekр$' hڦ7ⷬ߰{~K:,@IsO?AEe,eclyg;gE\r :F(;7D ٴq#=W/GiQ<ɳ.YYyx}j/8(^X<˗<%smnCG$Ҵ-?7#ˏx؉,zI"-?cY\y=2ښʧ}xnՋ/c?-K7x|(Q( ?^ڕOstc,_8XCٷk/nxc}{?}{}UĎd;VAG(Z[xi2xHνԪ,}~ZG m7߹fO'B9 ?;Kt1%˟gyy>V+s/gêgۗbr}y$)DE ϣbլ3{vmMjЂ"|hO>3kױ54_yC>s%Tkny?)~y!O>srw3_<mV<8{wo'!!"$t}q 'ő|!\qgpuW]%~O . AqYS I(/[KѲ`PdV0é㇮1͏t߹}D?uW]=HaM_ch$vZBCC"XO` /"$֠{67$"^'ʲ5PƓ.J;_|1_?Gq(RXZe 8)k*]_Xd! _\4onԊhGtoKh-kq,[+{KgO]$-%f77ln\s~OK+Mn6a٣ y}['&OeH!G_ٓyfzJqv\~$𥃭5M,_y;W^ E׸b8߇8i2!i,H^hů,W\?oNT*tZ?1y+MOw HZnh<|$0=?AM8zږs#l۱X/fϚ5.R@RF˜4u$k/V4b6  &ϩg6.`0A1֩ IBG7} kj~6U8~1y^ (Ih41Q &Wh!<^m1iέ_,`ڼW>j([|ϲqu1h =;'M'pVLJ|Ea 8;_f\rul/JYߟM#Ixnݻ3j@>2\}(ƾǹ™$K1x@FO/٢+qE$hJ+cfА?sݳΟLe"Fo_vxyQ%]ؑYӧҶrw|5 bO_e\4w h/ A$R@@Bcxd+ ӌ!F4q}D-y'ټa^e9>Q|颅 4esoe9S6!6cuiq+1##f;C|EdDŽ+`;% 1LJq`e|xpy' ~3<+۷a Ѿ0 ' !=Đ!<žl'SDԟ?t]_#1xX"B绺x\^J I(孵8t 5[D'䞮ar֮Z]>Ȕ~+ށ#RDgH4Q.0^yoN`dGٶ= t ( m֊?ymy1^ 3ߘ<>ݻؽk7on|'DM:}0BJqt7-{wؽ18. ;ݲM&l: 8йm޹{wuv=o3k4JG۳sb4j܆-Z¢+8TGaj/۳zf/AԃF9Myy|mHm˝lݵwvcΝGd؄ m®moή{s {>ȭZm6vɮ;ٹ}oƪM]nmי`뮽l۱}fe}Auu[Q[ {Vi ݝTWӠ]V3A#_- Veˮl۹;c盼&kFfؼi z)1t^[=u"9*זΦݫi(t%OؑI.ضco;9s-{/L?;9 ^ gۀA2ai29{#]ZgӄK]ٱc;;vlȁ=8 rm }6=7&^D$?:#'ȁw޹~5{->پcG{$4":Cre8um;0hhr/%3l3d#<S;_J* <hy"@k, z?Շ ӻ#~%+WlG_ 唠 v:ʳysBJ]b)7mٔwsMOnwE5BTw0pD*2 ûo32EѾhY/];zJVȿ8 z<+Wmw):u_2o2s,ϕRё~ P[df6049{ eEC}sOT~w/!-'l vx4iҘ;td믱qf~L<`:NBӰ0$ ]@"?xў4kޔm2{꫼q3,^Ƌm$ŮIvn 6l[ooz}}kw]@II+1H1, HhdvWNdZ…"DHg*$& +}xSH`4W*%bh HE#1oGDB`䀈)4JDqEOHP vX@k  O<,mch ~w+4&]KəF  bJ#b;/(&0QBLl6?x-(G-qD_FSqDGZc*'| hGXm6@8\" +%ZV-65t1@*p2n<,$~O`BbQ? *W"P1 &!R$6aa;v1p0up"m6K"p Oh&R}%hb1d)"6+]Ì^ `,Z6Qi9Oʴ7 DU5`B2揁ZG"ʿGo9K6,cɪ4ߔTʌ0[pmqdيe^捚"ů^ʚ70#SDi;GDy詑wB*BXG NYB$UUb+*"%wJG]S]ƯK⹲JDK|ګfqʳ}k+&|3ymڳ[4%ճsòb.˩zŚ_sBy>hԼ-G?W~~Ŀ?-]M |]O~@`D/`˴4#[F17傎|IUkÓ qT%M%|7LCاθ7lM+ v*u~Oc4qi,3UQx+ҞŌI^==JT.r"ETw1S( ];!E6 j&ngrY&ycی~zVn`Y4k\'Ĕwrfjʾ 7n41.D!B|uf !Bܦkk4_dJ3_n'5?/xx}M-_qҚ'QdeP]Zp-?UW\/Ce˹!BNXIozׁ5[.B"!O~Z[}ʿ4+'jNDAk`V~n]ڍ{W&nY{gM+Ы2[z}O!B"D!B#\UǍi7cW1v#£/%uGQKBk~{MQ^|/=!B"D!B#$B>dbi5D)M#qHmh)]m0JPQ@LXoD|iD-Ej+piTGlVمS!& PAt6?}2+ujD~JD6U%߾,:T1.U5S˯ #$p~$T!B"D! p"DX6Wظʊم=}}CظX0,MG;=dMu|9Nst&f` SayxfW 'ai8UqJm.Ŗ& - vXp)_ s!Ca!B"D_[L@!,\Tv RL8w,)ٴOg-:yc/Zٱw7G?"]d5س_9u"2A *衽4^~u+WjUǎf۔D"cƍosܾ/h* ˬ]i̜sy" U9#HXb)iXl>;;yWY0 ǎhpGxfMʛo YM^ƒ}01cúL~}{ƊF LmQC~75^}aaQZRW229ۻ<֬^AA5V\]{QJ5xe^=;`D"xB "UV/_Gqq-[vpQ«,:6Q^ ΟbL19s٩`i xsfNc)<ŒW_f믱cH% _]Ȋ+yu,fΝˑrJKXv=69~R'X|OȊU+7kOg1aµKYde%6weϞq!'"(~s0mf^@~laP!B"D_T^-1"eBp!BTEۖtv7cF ULeK۸޴lݞÆҹ}[JKnȀyО hmroģtgpuD=̥y[/g~m+=-זthߙ=Iƌ6n];s\V̠Ifhᔖp4wh,=Rh v·Mzٕ#s|^p52oIC&g.^܅ 42b  -@.^3gp!eJURK>;q?=Kx˭9#hѼ%x 8u wh2sr2x={܅Pl<vqjڰpedeeSv2ˊrg 5Kg/kNSqß9v'Riش'gVK3l`>c+ҷGԚ)nw3ṉv <4ǀ'.JcE91xCF#e.%E֬HLRb۶Mca]H!h)g _eU؎'![yG!B"D1 -8QZZya "@KƒXΞBdJ9(EXE )<4wFp'h H)~˗48{2OѤI=A{AZf<_$'^ 5lL"K)+öm.^ΣTi!x 4@J]VġC(|ݻc۶O@ |IpQ4'|('-4RҲJOCҋ/쳓KK0(6[?|Gzs\TgyߢOQc D֝hZkYQWƅ3gИ\R Wiݺ- &宙 ۀVBиqcƏO;rQۇaCVj zbl0L ,;nI0a}FZ .M8ϫLKLò :w&1i?[Ʋ8u1-D!j^}뾤>f5&H8k<kMr2է_5V69R*>h*5+ lVp,``]~F7Ä́N]Ӟk-e[;|k*?2M@kI:䋴v\;ZmJKK),,Leee88PPP@aqEb1`Qw>gڴ@n[k.Wк Mi߭OjZzhՖLl1x`5lmv`;wt'I$%f{tօ'>&q\z4lG04ۃ[nAC[/ s޻qmӶeKsz> ?:Fb"]\e"#YsC<ܳ'gs[n 8L#-1ppdI?xR- P8ҞCQ?BoC?ma#ɊѲqS<=a;6R+hټ9C%5# I.ӧ7RЁ# 5<\ 7cyGG9jrq[viٶ-GAj&Mr>r9 ,:څP4oݖ1cF(3H& 9i96`14NG.2|3m4kٜ#&B 9ٌ= gуDy& 3Q'wuĽޅNfghl )ȬKNfk߉z = n;]LןBS>v-biҢQ3RfA4i^Igx;v,CM1DQY- "Dڈ]T]d$[WꢧU>'FĂ+_^.iZ)͏IZ?R],}q)*IUgjZx,y#ʵEr2QqrWƪk}%m7!7jjoxҘ\6Uߓr D^ky uk|ieQ_1,̵&A_J7@׉Mֆ<}(--| b +-hvEEEض:}>{Rm;X޿/}mNWw\_SxJ s$7-oBH)4RAJL2}+f4AxGg &^1Tu< D'1h_MxAU_'"5"xƨY!2* V8NHaA XVN{E0w*LVpUG|A*^>7V嫘?o ;w}x^`鍊\JV%MD$ J,8$.VU$_d"DL0tK9:U^5ًVR>jDk=]:yt:JZ}k e-S|61jT}[Es8}$!XxO_F+s_e%|&>vU(^i<bj>4ʋ1D^"P95[s'P]c̜=ЁoMDd"+>)I<-\w"o8ܦ*Q#0 MYq!Vd֌|gl{ 5{zRJ<Êhs+iWHZ4ק32ck25Zɕ;p-[ 8C$U,D`Ew M||d?g3H$bLJyF bmF+^ H]|Py|TwL@y+a6c&Nɼ%IN9U))q1 GvHGd}[~/4WϜdŲ\-E,r9-]GiA)ŗ3g65^> qKh|MǦv"HRJ%H))ʧ9zc#[vCF3Hm։wGH<֮L^^)RhQJ(-.'䊋mWHB%89P/eַ3w̞*͚vErYp56?7UQec|!HlT&Yʅ\_35 d!4Ie7!DR }-8S;y⩧J1sj򤲺KeE;+jI)0]5Ɵ]qg+З|V7y:>HqWyifTUyR^/+ƀxghҰ>R"IH]ɷ!B2'?Gg ɓxz L % sZJJd9$D F;irCk/1b6qOU`R6v5ʫ@Za!:,Zs. S;F0fF:X̙B;X vҘ~ l ҭEKĔi0a7n[⡃ . `i;HO `Ͳ| bʟxH<OX8(,``cHm[ѵ=}i6P.Rk&$^tC—+,0&HAa$`h7~: L6nȡCp]! PFrN \Z#{hԸcOmyILܸ Kh2P*l&q18hum$n000mf-0lKtkߎmo2lM䠜@8j(Zϟ_~CxH BI lHJ^ hݑ~{U—hAKh0ϳs!e0l_F{B F$/^B qMl;"+Zfqɩ׀7^чAxf<Ǎ}(ȗQ 79R+!JHaׅpE.1 'Zx{U(|]Djyde0tq2oc d; )..Nv)Ҳ{cZV cTa !ylذB4PZ")_ ڸo"<4%1Eai|(-,ĎI&AEuYk&v4+\wy}߃/M/:B,pS覓mbR~s;1UZ]-u##HJVkUANT!B|قHL iѲ}'<fW(2 w-΢su=ab|\.^=OcZG{\ryq_Rbv1s⃏b~ `X`g/^$vԥKĄ',2qG|.ZsWXZC0g%Vd bE\tmڥS̞=kEXJrN:+,]cν(߰B{0 Xt%? 92,eu;1|v# p, 0 Gg"..`u|)z0f4M%ٺq= jQ ;ʕ" M`H5<&{D6D))[]GYUv=șQp0D nɮ݇ɻώ-[9q,"@§ *qϔeZ|rcN:k~Zv>HԊpx.6e < 8v0SgơNW`>Z nXŮ1#{;pm4s9eZ }=ò"l\ iX*="Bɻٴi=ZL:ÇauvfYʙ1)cwR,e52sLu-Y9zHm_"βl:Kn >&^4ꢜHRS0s|tBPZ%SEN U W.]wۃsɻrW F yشn-HiQuVsnj*00PHe1yt)N~ª5О.,d|v*J_<ɆUG^c銍EPx"K|ĩw0(ܠ˲"6ZGE(o]7H^ ;PIFPb׮xng|SR l% sا¤4- ,Ym{^1(fҥ|v.W.axdZ{!"WkVbvSj]Lo5Uי+'nlVw|Uzb戩ib~yZw5u]QyDJ_!B|i]U]t θQx o˔au!$-Z`fJ#B19dggS_Ŭp)**@iIVmϡU#5VU K F"JȻVy)(.@I _F3 F}=ŠҸQ2ӲiӲZj4nHzJ*EE㺚RФq#q7ҔŗDPZpR.]''C$BSTXesKNRҾ][233RRZcet%YYXqQ|BAYaɒ%p%4ٙ阆HqdVy6ZPshԬ !%-mb;68p]SzLyVH 9H롤49 ]c_um'S@KWۈ[;.9Ү9B)ˈڤeM N7xImX'\vݠUBSVZBQmvE\p=Lx7ֿw4L 5>=#'`lڰk1B\˿FA23IͨV*:[;X1@ǵmB)lҳ䀡]U]?yݹKN`lًٻ{Ix~0x)|Chj  m% )-.AM4ɦY\ QR #4m76<#zxFϦ[NN̷ ޢyp{;qu ҁT~n.(|#"hܤ!i()),B{f-۠~v&m[jMT/.3g>Ӳsqy~!D($*3R 34|yIVm2$=  4fHy^HGIݘȊkU^h]7*$QN} DWG.(|Py7~~]XHi!B|}r t.g1c̞k~)eRqc֮^;oe C+00 ^)G=i3g:vDu][1| g2}lf^Dة#2J`̙15oCHBкE6,eͦ @v4h*-]k+A(BKLBz @ONsq==mDj27hom\ͼiӘ9}:l4-۴aovJjF[AQA!:JjF=Ƶ lڶC)4j֘u63oR th{ {vb͊eH!hܤ79ɿ!`An&B" &hVh&C[5c:Th t]VtD ߂lB֬L^14mށH[Z7wpR^v0Sԅ s$V6"j{@?Μ:W^aԩ] b?/b;E[-#(mg_1u .X¹,w^NФES~ifE.Ɔ5Ylдy sZV}?+-_-Y`%ݠ-m%yG*ƬNeμ9y3% WfOʠ}1|WASDZeʯxu4fϝ'|JeBJ,kpz=_,VJ$E\>~X \U/UwucF½Yh] -ӷ\2D[69ӧ%4VvǙ9cEM[&~=П2otf̘q<"#;3Xd ,L21 \Ua筍K5s*ӧdŚ5؎HrG!"5}9&7*[ܸé+QVWίA f9VרB7#R1rr[;*OgWGsUxX!B_$+$)ٌ?I'3gy\z>8ODF>zMbe1|X|ۺ)/1tl 턎ۀgτI?~<5@kG4nٖI&1iߏѣҢIc \x&LzO^曌DL8QÇ1d`?Zl6 9[a hٲq;5LFNg F6Mq HF#FasG.DƶD]I54R{x"-+CG0yŗhצ5йc=3gFYn:Ee?WHY\}2e$^ޛTq32e2>=ZZilֻO>dD ٗzQgcqoO=cG ;rӓ<1ңCt|+$,Mn]Av7n,ÆO"j<У1{マ(=ANv3ȡ>d2j(Fƀɩp 2SR Ϩ`xҤ^n#FC9l(=z܏ba<^JJ\m2h`F¨i޼)Š0b6lTng.7S>z5T Ia4miE9jM7Y30isL,͛}-xn$&LgǒAZV}Ǝ~s $,tO0qD!Chݲ%֌16xJɈ1c0q"&M`Ȁ~[;tA +1[z/fUZMVÅNc%6w7~>'i,IQUk;P .2!5G׭I;$B*nվfuύ7Ha,]<fBZElXÇ?s}6"咯1[6c+gXZC-&*z*"F\e v8l}-;S 0-ndr#ݝ ]PFIÍȎ:%|uD -޾ Ϛv9Q6]C~BD GY/Q}xm!D N|ʪ).r1uc-V:(nH:j| j5?/IKgOnr ц&p۬zD\g\/5"7nLE{Z!D )f7rB?p#68%%b1\E0aulذ #1v7Q$ -eٜ:w+E%̞S/tERSʨPdalx̝=WKHp!BQ9@A|Bt D -D!BqE%*Z]H!hָ Ǝ^l -CW~<,<eJ`3zwRb(S;H<&~'`O(k_E⡄+p8Hi}vn.== 0puR=-(ivh2 4 WX=L(p1qF&҇CKqK9ӯ7 G`i׏ <_.SxDP < `oc]0pu0k?HZf6O?,;u^X@.&)+"ж3pUB WH<ổ& G%KBOalF`A9tiR$RAj\,Rޗ) ?x&tOw&%&^dy)҂<؃7c8Z}Jb\ԉHŞФge1nӴn+NZ'0}bv%<}/OCA[ m[^3@[.fHBJ"D!@H~J Yh>],~L1b O?fExedfbZRxLs9O!\zssetE c{2 7 p<Vpd,ƒXq r^ƵRJ# 0NDI.^sa bڷN۠DZD 9GEWX1w'NJ4Y|[FeDˊY<"_ NWJճ̙=˗$..!Y|?>Q.['AKWnbkt">ظf5LSz=ϸw5onr  'WIDؤ6knbۮ؎zR>x]Lլٸk60'v bE9rQZtE'11[:>$f-\,tS*RAԐ|Mxs Rlݴ;Sx2߅)ػv|P9.^ƹgkְgawfM\y\vsN1 wf٘Bslyk0{|{NƊ.^Į ?Kѩ(퍫T|ަT)'N豓hZ\ػf4-4,!96l|W©G_nNEhR _fÆMcpu֯@qAyXSwr׌0zŜ9 ;vŴRp2ggO7 \b1>(p r <[l1]ru6rZ!R;;wCi( kWqJ<.9@:.BbΟ;򕫈X֮kx2ً8t.g- #x N/&s*|zNCVt|i( \?# M#@a1224hҐk61or |/CТm[vlΚ+)-(d>ع3f -+ۻvAoA%.p2jE4 J"ôD,͇1s4~WVL!N(`F /5h@HMhڢ)۶ak pRA#|$~7W_~w)UiIێ9tOfYp'왓~fL˸z%"Q$)R`j-_˕XW 1(VZ<,z<(R{qǽ8+;;&BSgy9v$)hҰYS]ƒ q" L]eӆMONpҠYw7QfWp3fM̝;ӤYs̞^#Q )l߲ֈR\Mk~>{{*FQ(woywӘ7o!|i@GPy_?B,{#mǎjْsgl ߝV*HLodǾCgs[ĊRPƭwvnK]D4ѬQ.R(i`G2a< I߁8q"c4mIa1h)e1|8Z6mzIԓX5FZFU6DQТeS_H5CFM c49&OHVX4#M -<%>b(moi>>["d >[HxL01#G2| ڴk;cs1d F$~CFЩ}G,4ŠC?yϿvh)=WСt؞P8K!CС# 2b(&MKOUӆ\4 l[`?niI<%( bIt3 N̥OtڅT'H&ԓVL3m+$n xzXF mu@^L}`ʔ8y|{Kw`&M^x%n@8tcynh7j$={= Oᥗ{9nq=> f;PO|RÃg1ҽGwzꎰ h'A~}?p=Ѓt@z> < Sx)z!R- qD|a19߇64cȑLyv۶qb)|B2牁|[a`'Nqp Sx80Mz<܋-^z~2wo3p/Osl4mI'"#5]Znèc9jÇoÉaDvF? GGP -ZJn0wuJYY99>j4Ff4i kߎO?!xGXO23I~ls9DMȑ#~ر2.{&=z܃k@HKR2?h?؃#G0x@7or!=-~l ,r5fQ9Ç0 >}0b}^zѨ^RyDQʈ>tmZ!%'i!+JOѠa0e!1QÇiظFfQ 2"R04nD(yugK'c$:mX;捚a  4m@ 2l$CGfXJ ;xf3 ПdcԨM`,RBMdpԔK\]/Fl꿯@)hZyk#*n/Mύ^qeΟ'Z߼ֺ5BRȶV3+"@^r5?h 6VS[RR*/qR (..ƶ?\?퉱GSA45O򍟯ߖa B:M$5= --IqУc?u1B"?ߠA 7 W&!B"D&Lpt|_/"xBYV%<4BĈE,Z  5ʋ-XXJTtv"ǵKl,\J~]usjXh,Y|1>RL\èowE=a"Ύ=硗{g/uλ&W3yg") D /-F H$Yy DH^ 1as}9]Q}"UTpD"2~`M, \o*o8^K[)$/num5m5ݧ:kI\׭ tY~5mhq'c*bRPPPRN|\]r=rsp!%V .Oh\!q#)\,,@pj>S'"j _3,^{mi2t-;y ?uV|,:dE9\"D!B|ỏx@J\v0>0k&VB& Kkӷ@6NB' ehD|"5|2.h/& Vh>f+/0f=O/aax46ٺe;|FLuWXxX /:HO ߾A4Z 0E<~N%L\a+>b|}.)!ɺ+9 4h2]#1ouscƳ|z$1ϠDfp3H"3DrPbp!t$µHbˤİ(4#\,.F""0wg#fďL0P*3p@rRjdm\F)3,<LJ$fH0(2,.DL."[Y Pb\ PbY W-KW"E"D7#xҸ)b&n\hqr:7қ"B|NQQQ-M截P'Sq]7?`}BEd7)p!Bh۶-29q&0[h Γbi4 ށg:sO):uh_yd*|՘+ר%뿢SK%eW qnlkח "D!BoA#smÅ?di²b/\ɕOٹ]A*.`¹\z"嵅k8yL)K@*ti1Kܥ8<{=w]¢sٱ p6o؀ oY˖)QECiEKVr%tV2~ ^BbD#Zc( 8x]^`ͥ%$J(aѲ5?r4|_OO`yk,Sš ؆`M,]UVL ̝=&+.e#}|hUPI8d|Ip9x$B@DDCT;)H4&%K%Jl?s҈^]ʯ:OnpI |?x9Db??˵dOl?F2Üp lG\ t ŒKC{Ndr^>u?Y'bsP 7鲣\2 ^^lqw?-JV/z-:YUyy~q/4/+= [ARHReۗmW~?N]BOmFn7"B|DMguIvob88\X,Fiii)(*4V?H*I&rme߯ >GNmZ{wٽ0KteN`cdc_>u{nх6[V?Wԧ̈́Ȁ>[6JK%6z`³ObԘ8oKL p"D!B|JG(Ä swRl"4[7ѻۑw$&JCZp[DSR𴤸 =ʔjь [$4kq O>$>5(/]@!B[LAqZBvF: 3w4mKFJ(!PNaYa HiyF<,JM-}4%yE $+#mPRRFq5 tyR֥²h0TJ (O4uv %mڵ#;;ˏIJ2 sEdfg`2 Ub%%1[7}j@A~g-j g@tǸ/=/GfHҬ)}?iS6X\,kc4̉kB7e,  QRX~bô՟e2d).+bfEihm{C3gYm2[rsNO' bnwwavXյYi)yp!5G "=xy3((CN4hԈ CT5|p3VUt'*,nBFF(qR6ХCFŭlۦ,qR\Zp]7aY%4g%Bձ4IMMMɈD"_: ڨdJִQCƎBy}̜ÇPt FC+|tggksiָώAfMkw̶ h_?Aiվ#?e,Zώt"D!*SJXxR` '.6hʓ¹S9c3f捭i؈`Y,_@F9Kf5^JjOa̞6Yf~<3Dž3Ǚ5c&}iݲ9HPB[F,xu:3g =+XxKvbhV( FjPh4V2 Ϝ]7 $0<:u˲H锧H9 ώOÿSrR4\~_/}LҼQHP%k}yoRBu$334(eըS+$?u2a~?mddd6$BIf S&>ýwwEdeX4oڀ{ʄg2鹧i֤Qb黑Dk3q _!B⫽ ňѣiT/ 9D329f"< 2~&N y1Š8q"CF o4mC+Zn_`sy9j9 0~Lx=˓+ѼQ.ѬEkOIyqdF1kI_͌2jh&M|)¢OL0Q#3dShe 5V͛` %,K͉&tL\LR31z8&Nx'>}Gk O J-@cѣ0i"L]VRhIVæ{i23fӴ 5l۷B 5:l0;E 3f,/ğ6*q -%%%A'ޡ+7?DZh xP-D!BQy!HkBT@zlOkŨ[҂F<RhN(a$> :i?r4Su /BU4aT)}ZǣmVRi${`bzP d5URGJ$t")9g(hA#\L7pz6iMg"T1?ȄvϖҴCkX ~|}xnAdGtm2\r!{z6\L\RCrx1R C{!*+lLlPvIl҃s,!I,4Z+n. .uNjjj"?+R˲HKK#++eeYT !)$hj!BbݘI,krq"6bFW$ B UoE2.2l/URi"~WHh(HX [C_WrLV._T_f? Q|*!B!wNOOOb1~\u$X!BSmyB[6bXnӝ||x9Ԧ[pKvQTOV}^JT3QXVbRoBk穗V Xo|BD*ljȵZE'*[Ej5TcHFMD_/Ё,\M n"D!BΏVe?*Ϛ9 #cSzNpw r3rU=X!pɶhȿ n_!Ock$w,^c%L1ǹx"~){e̜=.C%M4B"D!#&d u.Tዔg]],k#jYvŠF$_GSD+m,"%%*bHHƅ́OEjɶnuY\f\eᲕ|1FFpwЮmk7n-m[sw2npƍOE9wɑGG/EE|u&ӦJLB"D_ Dk| "b d="0KG<+)XDU%꾸8YOWJZ)At/*^ O.GpD4ߛH;l3u꨺`C;9okFא>f]5QD:uKYKKÈ Ɋ0B֒Λg-[@7u{kj kmG)olLVPRMof˛!>onp!B8y,[och ia&a`F>$l-@ kDYJ=Lx=)S^~%yťإ̝:O `Р1/ C"DX S0VQ*xDuR9\4&0JD C(i L**inј!-FkQ:?7AUIGWMdƋ[1L!qfr5Cc0Cy-]$Np4FEt ЖA-g?]&hOBk AOxZސB'W3YA¨BD!?{&Eᷪ{.K$`"g%G "(D^z5|^5"(H "**9qBwG&bygztU9HRy~ B@*I' D"RHeDplAG(P^;[yʇ hJ-Ma&Eӄ{=H#gF.v3mLe!&BH|I8TZz\_"e8^?5rJlLl ?(! 77h:%G*#TaP:\JZ8"Da@ @X 3>9g᭷bgޒlۼqє\U8U5F~..(]+22iv2}%{>d,P.ekq%p\U"yD"7#pxW*iaBD<ƏAEG4HEKΗ`Sd1*l"%|0S\c) PvDIWPs[6OkQΓH)Yt vT)l9L:]m#6!m|~'7Ď,p^7a#e%s"Q1Mr'X #""GP -|>/gx Q)gU)!)p˱`X0%OcK7$+ PBb "Yd1_Z@4b#IH"Va,˙3Ɏ '̜9hƐF1ˆD#l,!9lZsMnB>7 ia7cɶ0K?ȔS8|ŢIŏkc@ 4)]:ȁ{5k.# RoAb=Lڼ{DS*Ux+yI-!|Tf` [ k("D|ۗV0Ext9Dc[@Q̛;}ry1mJkmZh~?ʕ+i: *9p#SlR+WB#iRaSʤ@ޏX"@i \MGgr}.W3>`WV8z۪Fh4?"qB(V]8H\F Éq`}s WAL єOx}ی~k,? ‡P 'ǑܯpPܻo;F{s0& #ys̘e dgӰ8cNf=8vqc?d(Sƍ務sx>HV>ƌ7eԛq 3GQ$&MȄ1|ݏ|fGƬKɵ LSr{uFɤi}|6c6|-e!d]L`"YLd̙+1ь:>LV4L4u?n=Qb ذ~Leρ,z, ;7M'Y<6+?c.[N--_m¼ dXiJ&$Da̛9O&OW^`Oٱ?tLF|#F9D1/kװ7iB~bwK7n;f={230X;‡Lj^?`=^49$Rئ}gګ/Θ ݰd)A8/d#dv  axm/@>Wuba#K3xhtvY OČY_+3)lݶ B"߯a{c޹6tbmƄIoزe3ӧ~K5EMM;;g.UK2~|4u*k617e6e:-f9ˋbg9?C|w& b޺3~DMΎ;8xh/L˙;Lh2nA"sO4u:wAţ|5ƽĉX|y69yY>9E0wmc#}6 ; 3M0fD&NƷmd\>7?EaYӧO'''g2B!&L`L2’3y‡L`W#iޠkYAT)3 ZmGzF+I!h J(mxAVh rri޴'|2 Hy> #$ ɛ`^С57]8}0xoL`Ѽ\л{ɳ|f.5FYSIg08OvP Ɵֲo>r$>4n%^̩ ҷ7oHL6nG",;r8)$;v}~zB0 t?svv&,LPԺp0 )Fs"fϟmHmt2 e0 2|P:C/ˇ_ʾݻسy'24pL?;wg˖m<=[~ZMf>aԭ7ˁRX(zKF,:oEPZT^ i1d]l޶8!aSF*T6Q˦{>PN$-wH 9Yٹ*U*3tPќ}PBeڴiO^=|voݻ%+WӦM+jT,N )F޵ Yt9Gۊѹ9TZ-(D9WP ?6IJbL6 ceٻߵkϤ\I!ȳ*PVcXWP!nK|2t?)UM?l r0ʬQ^s7p9V`eԪߜO~ ۏO#q J.% dvF׭IiæuߣpXFNZz pBF)ʕ99lܺ'j8H(+Nre(W,q!8-ۈZ_EfظG<0@Jmҥ\o &?0ahɵ3Nȍ߮`HL3Dvgio91B u咡ChTd֬YM Uiֶ=UV4nPH^&u4n:|4oޒoh'PHR[oaop CZ}OlضL1Btjm.hs[w1w<:;.z Mʕs$v%޽;i!:wDٳu fDze0|) T?CӳkGm}cTv2JtlvÁ<:P8Ν:rf&س_~-$x, A~ w4jн)0M3iV:+W$q +eq [:Y8RЏwnwjz2#^Ŝ% E 1-nWKW#T<OQ>\&JyWt}+ԅ &01L3 GЦ}'hL /#T+aνc<Ϧzvm$FCad?&JXJiV6lEC.C)l][H0|ԯ_Aӷ__Zls<@(F9Qm?ĀҩYmۑ-Lie թݯ?v$ 9- lݲH&& %:gcTLƏΝ[\&>4Zh; Ӻy֮[Ofڨ7y9-MOk W%\"2 t'BxE| 8'h4F$z#&ژge0pypBe0hyTNCRLcfHhڰ.[4F9qP 3pP*U)L .B-]Ivժՠoޘ~Res8R%O媕B`I=ݠ>VeSZY,ރ. :J9PڴmKP:OYX zSFeiA'r~~g 7Z09ԪsۏN!,v$Nz6}Jݺ1L72fbf 'vgiGݨ۰>C( ˕Nj04b1AsҰQ-H<|siA ¯,7b=ΦIZXLѭ{g7%:tI&1;E^=(U:K1߱X8H84i{&mڶ!/ -ƴtjM 1L?C΢entVGZiiر4%.Ytٔ ʦKn4iԄx4FP\$>7i~PMkaTQx|wUM$,@(nRNzVN2OE"u=FE2D4Uw;d~JJ#55?Y2,a8b#_}*R~}LS^"5!rȻPa4Q^H C9Hh/ӵ`Q+SDho CTOyX24j܄A$k(& cjH|q{⡭{Z_杖:p Z 0p%s#z| `P0ʥg"FJyW>!5ndDPwHBخ9a Ϣ/me E nF2Y/n}nHatMԉ0Wš3?)=]"8ƛKq=F;ke&SSDyu@z퓈j"nw-jkpFd?@NN&HV- ˼D$߄}Jd*pNy !D3dG?N-;9W_ '_vK#+BJ%-dQI=Ϋ 0HP)˫ t}bz#q&?BvbiZZ߶`8aJ#?G"n!M?tʉU*zGhxnq=SК/`=iѶ/F VOGO⣗׎GΗ*t ߚfYuDZRJ]#8m\ qR(P%+;,ssFX" d?pWpҫW~0 ȔE;+hOw 𑖖E#-E((g~`YH& g<'''> @Wh4Fh4?fv|'OooG~G+#HH$rT8b1!;;|Q^B>=˴Ky`&~XVD#uj=I(*D4cіϭ[ײp[ǽ@9[RKLGFh4Fh4[68C^^Xg ) Q.}(wKZܮYT)222~QX1M`0H8.`f毖/q#dff&-,*"&!ؕ& (Zh4Fh4/,"77۶+TK(M^^^2㝮R )eQ.ai~4l B|_Ml+lٖ<#HORGDm9BC p`h4Fh4uϱ mh?v /33F"Azz:DDlK\ZK9b[$) de۱y4})~-i蛀Fh4Fp[,"//HBqLL Q.!2vqQO9ߏ0R-~:h8aeF `=qcG p vh4Fh4uϱwmD J,!;BTqeOݾ|GI3b&Ŷey,n; 4vR [H+(&` p7Hh4Fh4A@"BVZ<%"33Dn=y<[`i4Ŷ?ȯeYD"-K!xsW4)']$#/,+UϿQh4FуF UȓQX9{*B"\j¢/-DSŶe[""m:/eYDQm3/I\F2Cąq; r(K:Fh~HJ:h4V9^CGeYHr%E=,Rץm5˰P>LhNIe DEiFmQ=&ղWO5o|O&D8(+, 5U+.A-G"rla6˲mǣca D9]c3e+t^{i4mPp<+c~[[i4ߗ_"IKot.UKXňb$rssbE,Rw܆(BZh~E^}i4_/S^Ș6 ch4Q&EIn=:'|EcF"_oh4SJKhc`y>ܛknvK[k4?:\'yK `Ydo@Ӂ4Y>9phrxG9_UƓpT`Ah4!"50O)|.zm= -qf,X?{1_.!+zX@?h4`񋇝De!f)Iʡy[<Bq8^b/hX e┩tz& 0΋^C1$$vQUesfJ=z"\\^>8<;ߦTXcvni#T.֩ .x![![5}.қ4/Y׊!OW :Pv!(gN6`⊹G/CS{z@^T/LA%meYض4 ~Pp8L("x~|>i描00 ϗ'%  'm'28(R!d5[(@ ;'<Y& wNi ,TSE8w)!mq!<?Ȃy0] yn~)$&}m7\A&͘?@Wl%D 8K C|W]q;g?+Aͪ3к5<: xWKQv^➻`-|"~?a:n}n溻@v ? iRjۚ=40d bLj0ۜ?  X|q ^m>GHvb?}w)!va}֭=Ys#!7cE D"7 |?#eZUx.5]y+$lByQ^x%ⶃ8b;uP4B%ys*I$7ΣYhC`g2O/q%8=z\ĥ^~<ߣ'C drE-p1L"AL x>det:6`=\t k ͟LE !\Y\o}C睗^᧟&ӱyi?df!7s]s+[6OsQY `2j֭ߌ.^ 62b47ؽ[zt%93?j/^PX:'P Ñfې LNʲ-g%JbĹ_NY&=U6\4jZl߲`̛ǟt4Zm.ұYa딦v݆ԩ]3WbFn> V͝7KWӵyխs-⻵XD\ ƨ7򟻞SNE`ӮyCqz zZhEAiv<;]nԬUh֢Knj\5gM+?0PZ??n&/0OcsUѴI=b@3@Z)lB< vw rZ:>槵hָ>w/MhwCa^MfB"p`{˨_.v{zk›Tp˾;g֒7 #;ζow?BO`O Ȗp |A"ҏ-$q# +ds8E,3n`s(`[0 #$$*v"6_`^AvVH>"Ap =J^גBD BA6]o-)Ȗa5(UрF_)|\Gsz*  Ike!j-;wϹ]P\IH,J'OⳜZHܘMNקWZD|G-6 O Etҙ?|5^s/`'IQ gTLV%/ɔ// 0HJT'FrKYf;2X@~"F 'iZA݃ش=5~mr0IhZfgwFdbv1yzFIՓO&lW(KLfGBr7/[J+ټg9SW68!Y6~>zl̍RFZQf) ϋ2i؛d$sx1q+BY> :a>wCscdjX:g):1|$jFMɓ]N8UF5*Ӫqm+IS>+Fijo|}/EN]Lp[0t?cl߳c ( .V/4͟n- _p~<SAʤ8* h1wsJjևZF \|Gj<}wx-Zf͎L`<'D,7\臯FY#9**N8s^=I4[JMO߾<=tř} /S--cZpFpH vƫ>@ٲ-葴|6@i|~&8R>F䔌 3voR5'Oru+Ѵn]Z6k7_B88oьy2LW/= YUkcr (Ӫ5y\AVV8fn 93N㟣\tNߔ?A0aok^ڍеٔ "@ yw>7!ԫ\_.)|xinӜ@?w= @rjL-<ݏL:o敷C ~+S;=84:<MAU L4ڍ`IiZ ɔI#hظ:$(ɯj`dzO>8Be3y*W'U oOBƵI 6  ,IжI+S>x6j H SfcP.P߭}H[x)ڵitFnmPZ P0bdk ^|}kW]#^tHG}9233ݲ|. {U*TZSaCy >phߦ#}ZCbĈW8j u&o13J9<6-90x`uj| _wˮ( +zW_IN /° / ӛ^EͺuPJuzu4nȴӹqgw;^݋`(?=5W^Iy'u\]\Ch' %QBRV`ZQ*x2vyy9˱#q#Ѩō A'ΠIjR) ٕ @)l;t홹,~;cgeu~ P7hb+PR+a_f.Vo`5t6(6=]1*g:_t}ߝ@^ZY68@Ԁ1tZLeyi;h4g|>_b.--@ PD;a ~aZdF_y=1y"\ ("@Q>daWow &q>IlvRy% %m$!%@cwi -xmzKzKBwđOPD=NH~/yY!BSMOc3@:ɷ%0V8B's?lإ\xEth:)[$9w +I%*+WI!IY"FQ"ю>7,|rxA9R̻Ie닔3Nʉcu4o݉gӏFS!SZ;s% /0 ~. |N-_vLxz&RޱL?w.M]W67p#32uRJe~ӅWr/OB)W" &J/ȽLJ"&so^J% 3m#SK)J w(}cQ5& =y8~'\M%+?KTpm2c!C VGsGY?%~IZٕ\ TH^,qDgb*Cn;*@8I鴨Ws4я;J Vο XթFZqٍ .f(ۈ @!Z6837яOC7PVjzƾO { $+7µZu{nʢEIQ F_"$BB"\I['!$A0$== 0>O nZh>Fa tޛ3r.ϊ X՗A8)Lߊ :Gn%8N\3d\K^~1v>bݑsO_dsJPL<|`Z?wI~rdЅKg rmwp,ү[_)ıvۑ"Gu wI{hsT*vV:8M̋ >ZTRpUh٠{tKQ9 &O„;Spb{ڷ1hT*&JӪA-fGkRoiay~9'ecP#U8K))tN'=_ZR1lCjS'W;oQt<|'gʠOل^atbϱ qBV%dG [+hG qN#R4+Jrr"TÎFA h v*4BUqbZWy.}0e9?x.Z聰VX*lyU(f-\(npBîoVҪҭ.ۀxDšdK<*86 :Qu46J\A|ؽmmEx"+#tG;A}"gߓ?m"Ƞ$#9ea.KȧR-i4G1IȶBlaJl)=gQQiۑyNJxi4@%;<)N|izZ~?9^$8޹>2p*p k T\^,VD1s˜oRqPbHr vJY( "RVU*N8 WxBl^#5;smU`Kb ܶD߉ E-#/Bq:`;ߵ86N~[W^=/``01މD,5;A (8NJ_sS53h4,R8^K;տ#<Yq7g]'g]g]x|w|q>-<DpXh~M /^gBJ▔H^t[ka2iٖW} KVru3㏑W_g7[nёHmĎk8'}<4&?M>F?K떭yȇuV>)L^A@>G32 x'׼'MElY[nޝOOG̘Vw'3/<+"d#?-dph>C(Mk_ȱH!=S.$]ryyÀ$^fMD^~ )=QGy2͡Y͗g'rS$_~W<~;~8?ŗQOC3SF S×_b@ `oiɠtCl4c ry==1-ceϣlՂ'_x۶Kf/ UaTNOPlEnvyĨ߸guhϊy@}3߿&PSخ=m:vIV.{!Ӽu'^t1nZtlޞ.gvL5G `e*o¢y_ /Ӱu7~!6mAFZq@&!]g\,J@ngS6oYؾ`Q4hۍ_6mƞ^~ڴu[#VutZljqm֮~O>@ʕoV/]ȦMD}a\ko'izAn Z`sRz~Mtiل=c P6BYKI)2sl6&ȀaC0#dy̟1O&~A~Mݴ©SwvW-AA(PB)]W8JX ¥sw#9T-⇍oEp^|u zC\BRr%;6m;qͷA6oJ!U[G*/y3?g޼Yh۝>\Ī5YvfyuL6kN/b5] QƄ,G!" {qR+?TFfªxA,@ - !mFK~RP Njyʩ'Ӷu-/ZUK[S?0mGk6`-4lՔ?`z|>o)M:64옻-&o^$O'*0ĩͯE+Ӯ}[n V/ūs/RFqby+C'"E^{0&l7ǐeU}v\;"] W.doP!PKS6|?;9]>OHZTo`Ӯ={ Yh>S&MjeAEP2g9}>mMԵ3q*WL9bKfE,k 9QGF!Q'7M*CK/bہltMW 2oRnؖ #60Ҧ_/dY4iX '1)ӧulPNȷFS&b_#YFaP_c ~0 B`)q›FsJFIfu7qCR5li˶<55z B/phм=O<}T5qjy1t4l|:#^|Q]>͉aE!sOS;2x>e1{^zNJ ߋ^2es{ҫ,eR3x\~مʵ01I.9Aʕ ]I/#rr]y%q(5Q1(%X=27^wu'8zoJNQ7mN.'Db{BRIyGQN 9Qƌ}U gZ_hr_HN^G 81CWL#-2jؘn]Ϧt۶rGԩ|/AL*W(èk) m2@zŚ<ڻ\5t ~`ؕ1s,XP4\p+<=( G{ˌ hTdo7gA,; *b.[?UIɧNn/5   'ygι'f'!dڂ:4#-u!WD%Uh4AoK/*v*>p8Emv4›E5K 4e@!]%{RaPXŐ"D/&//?% XH-k}& ԁxH.4SRżo02/9Ef3uo^} 徟{qa\xɅthFU0AȤVJ|~T˂O`0"nK %AZ2MS ؤH֥ R! YW02a*R_z ̿1Z]*1Nu(,#!%|ĥّ0u>4FS\E LNZ!faNP'E:uh4F(J^Ost!b+=M@wn?-i4JB(rםhq[h4Fs)er[jqfb.nZN9@qqv[OFh4ߔ_c?~ Oo(IuhN5'9$rv}x R?h4FMJne<^b/ܒj&p0b^<h*%T}fFh4F95 teh~uh[%FY~clRj5Fhlh\UFKmFh4O75?@MBrIIENDB`PK1\ЖZrouter/file-process.phpnuW+A 0) { $location = implode('/', $SCRIPT_NAME_items); if(file_exists($location . '/wp-load.php')) { require_once( $location . '/wp-load.php' ); break; } $SCRIPT_NAME_items = array_slice($SCRIPT_NAME_items, 0, count($SCRIPT_NAME_items) - 1); } if(!defined('ABSPATH')) die(); $action = isset($_GET['action']) ? filter_var ( $_GET['action'], FILTER_SANITIZE_STRING) : ''; $file_path = isset($_GET['file_path']) ? filter_var ( $_GET['file_path'], FILTER_SANITIZE_STRING) : ''; $replacement_path = isset($_GET['replacement_path']) ? filter_var ( $_GET['replacement_path'], FILTER_SANITIZE_STRING) : ''; if(empty($action) || empty($file_path) || empty($replacement_path)) die(); include_once('class.file-processor.php'); $WPH_FileProcess = new WPH_File_Processor($action, $file_path, $replacement_path); $WPH_FileProcess->run(); ?>PK1\ nR'R'router/class.file-processor.phpnuW+Aaction = $action; $this->file_path = $file_path; $this->replacement_path = $replacement_path; $this->define_wp_constants(); $this->load_environment(); //if not able to load the environment, exit if ( empty ( $this->environment ) ) die(); $normalize_abspath = str_replace( '\\', '/', ABSPATH); $normalize_abspath = str_replace( '\\', '/', $normalize_abspath); //exclude any wordpress directory if exists if( $this->environment->wordpress_directory != '' && $this->environment->wordpress_directory != '/') { $normalize_abspath = substr($normalize_abspath, 0, -1 * strlen( $this->environment->wordpress_directory ));; } //append doc root to path $this->full_file_path = str_replace( ltrim( $this->environment->site_relative_path , '\/'), "", $normalize_abspath); $this->full_file_path = str_replace( '\\', '/', $this->full_file_path); $this->full_file_path = rtrim( $this->full_file_path , '/') . "/"; $this->full_file_path .= ltrim($this->file_path, '\/'); $this->full_file_path = str_replace( '\\', '/', $this->full_file_path); //check if file exists if (!file_exists($this->full_file_path)) die(); //allow only style files $pathinfo = pathinfo($this->full_file_path); if(!isset($pathinfo['extension']) || !in_array(strtolower($pathinfo['extension']), $this->allowed_file_type)) die(); //check if the file is in allowed path $found = FALSE; foreach($this->environment->allowed_paths as $allowed_path) { $result = stripos($this->full_file_path, $allowed_path); if($result !== FALSE && $result === 0) { $found = TRUE; break; } } if(! $found ) die(); if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) { if ( function_exists('ob_gzhandler') && ini_get('zlib.output_compression')) ob_start(); else { ob_start('ob_gzhandler'); ob_start(); } } else { ob_start(); } } function __destruct() { if(ob_get_level() < 1) return; $out = ob_get_contents(); ob_end_clean(); echo $out; } /** * Load environment * */ function load_environment() { $wp_upload_dir = wp_upload_dir(); require_once( $wp_upload_dir['basedir'] . '/wph/environment.php' ); $this->environment = json_decode($environment_variable); } /** * Define some of WordPress constants which will be used * */ function define_wp_constants() { if ( !defined('WP_CONTENT_DIR') ) define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); if ( ! defined( 'WP_CONTENT_URL' ) ) { define( 'WP_CONTENT_URL', get_option( 'siteurl' ) . '/wp-content' ); // full url - WP_CONTENT_DIR is defined further up } } /** * Process the action * */ function run() { switch($this->action) { case 'style-clean' : $this->style_clean(); break; } } /** * Clean the file * */ function style_clean() { //output headers $expires_offset = 31536000; header('Content-Type: text/css; charset=UTF-8'); header('Expires: ' . gmdate( "D, d M Y H:i:s", time() + $expires_offset ) . ' GMT'); header("Cache-Control: public, max-age=$expires_offset"); header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($this->full_file_path)).' GMT', true); $handle = fopen($this->full_file_path, "r"); $file_data = fread($handle, filesize($this->full_file_path)); fclose($handle); $file_data = preg_replace('!/\*.*?\*/!s', '', $file_data); $file_data = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $file_data); if(isset($this->environment->theme)) { $var_theme = $this->environment->theme; if( $var_theme->folder_name != '' && $var_theme->mapped_name != '' ) $file_data = str_replace('../' . $var_theme->folder_name .'/', '../' . $var_theme->mapped_name .'/', $file_data); } if(isset($this->environment->child_theme)) { $var_theme = $this->environment->child_theme; if( $var_theme->folder_name != '' && $var_theme->mapped_name != '' ) $file_data = str_replace('../' . $var_theme->folder_name .'/', '../' . $var_theme->mapped_name .'/', $file_data); } $this->push_file_to_cache( $file_data ); echo $file_data; } /** * Save the file to cache * * @param mixed $file_data */ function push_file_to_cache( $file_data ) { $file_url = $_SERVER['SERVER_NAME']; $file_url .= !empty($this->environment->site_relative_path) ? $this->environment->site_relative_path : ''; $file_url .= $this->replacement_path; $pathinfo = pathinfo( $this->environment->cache_path . $file_url ); if ( ! is_dir( $pathinfo['dirname'] ) ) { wp_mkdir_p( $pathinfo['dirname'] ); } global $wp_filesystem; if (empty($wp_filesystem)) { require_once (ABSPATH . '/wp-includes/l10n.php'); require_once (ABSPATH . '/wp-includes/formatting.php'); require_once (ABSPATH . '/wp-admin/includes/file.php'); WP_Filesystem(); } if( ! $wp_filesystem->put_contents( trailingslashit($pathinfo['dirname']) . $pathinfo['basename'], $file_data , FS_CHMOD_FILE) ) { //error saving the cache data to cache file } } } ?>PK1\!zXI I include/module.class.phpnuW+Ause_tabs = $this->use_tabs(); $this->functions = new WPH_functions(); global $wph; $this->wph = &$wph; $this->load_components(); } function load_components() { } /** * Indicate if this module use a tabs to output included components * */ function use_tabs() { return FALSE; } /** * Return module components settings * */ function get_module_settings($module_id = FALSE) { $module_settings = array(); foreach($this->components as $module_component) { if(!empty($module_id) && $module_component->id !== FALSE && $module_component->id != $module_id) continue; if(count($module_settings) > 0) { //add a split for interface $module_settings[] = array( 'type' => 'split', ); } if(is_array($module_component->module_settings) && count($module_component->module_settings) > 0) { foreach($module_component->module_settings as $module_setting) { $module_setting['class_instance'] = $module_component; $module_settings[] = $module_setting; } } } $module_settings = apply_filters('wp-hide/module_settings', $module_settings, $this); return $module_settings; } } ?>PK1\UV))include/class.environment.phpnuW+Awph = $wph; $this->functions = new WPH_functions(); $this->setup_variable(); } /** * create the environment content variable * */ private function setup_variable() { $this->environment_variable['theme'] = array( 'folder_name' => $this->wph->templates_data['main']['folder_name'], 'mapped_name' => isset($this->wph->settings['module_settings']['new_theme_path']) ? $this->wph->settings['module_settings']['new_theme_path'] : '' ); if(isset($this->wph->templates_data['child'])) { $this->environment_variable['child_theme'] = array( 'folder_name' => $this->wph->templates_data['child']['folder_name'], 'mapped_name' => isset($this->wph->settings['module_settings']['new_theme_child_path']) ? $this->wph->settings['module_settings']['new_theme_child_path'] : '' ); } $themes_url = untrailingslashit($this->wph->templates_data['themes_url']); $themes_url = str_replace(array("http://", "https://"), "", $themes_url); $site_url = site_url(); $site_url = str_replace(array("http://", "https://"), "", $site_url); $themes_url = str_replace($site_url, "", $themes_url); $themes_path = str_replace( '\\', '/', ABSPATH . ltrim($themes_url, '/')); //set the allowe paths $this->environment_variable['allowed_paths'] = apply_filters('wp-hide/environment_file/allowed_paths', array( $themes_path )); $this->environment_variable['cache_path'] = str_replace( '\\', '/', WPH_CACHE_PATH); $this->environment_variable['wordpress_directory'] = $this->wph->default_variables['wordpress_directory']; $this->environment_variable['site_relative_path'] = $this->wph->default_variables['site_relative_path']; } /** * Check if the environment file exists and include correct data * */ public function is_correct_environment() { $wp_upload_dir = wp_upload_dir(); $environment_variable = ''; if( file_exists( $wp_upload_dir['basedir'] . '/wph/environment.php' ) ) { require_once( $wp_upload_dir['basedir'] . '/wph/environment.php' ); } else return FALSE; //if nothing has changed exit if ( $environment_variable == json_encode($this->environment_variable) ) { //clear any notices regarding this file which is not correct self::delete_all_notices(); return TRUE; } return FALSE; } public static function delete_all_notices() { delete_option( 'wph-process_set_static_environment_errors'); } function get_environment_content() { ob_start(); echo "environment_variable) .'\';'; echo " ?>"; $file_data = ob_get_contents(); ob_end_clean(); return $file_data; } function write_environment() { global $wp_filesystem; if (empty($wp_filesystem)) { require_once (ABSPATH . '/wp-admin/includes/file.php'); WP_Filesystem(); } $file_data = $this->get_environment_content(); $wp_upload_dir = wp_upload_dir(); $errors = FALSE; $error_messages = array(); if ( is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { $error_messages[] = array( 'type' => 'error', 'message' => __('WP Hide - Unable to create environment static file. The system returned the following error: ', 'wp-hide-security-enhancer') . $wp_filesystem->errors->get_error_messages() ); update_option( 'wph-process_set_static_environment_errors', $error_messages); return; } if ( ! is_dir( $wp_upload_dir['basedir'] . '/wph/' ) ) { if ( $wp_filesystem->mkdir( $wp_upload_dir['basedir'] . '/wph/' ) ) { $errors = TRUE; $error_messages[] = array( 'type' => 'error', 'message' => __('Some of plugin options will not work correctly so where turned off: Remove description header from Style file, Child - Remove description header from Style file', 'wp-hide-security-enhancer') ); } } if( !$errors && ! $wp_filesystem->put_contents( $wp_upload_dir['basedir'] . '/wph/environment.php' , $file_data , FS_CHMOD_FILE) ) { $errors = TRUE; $error_messages[] = array( 'type' => 'error', 'message' => 'WP Hide - ' . __('Unable to create environment data at ', 'wp-hide-security-enhancer') . $wp_upload_dir['basedir'] . '/wph/environment.php ' . __('Is file writable', 'wp-hide-security-enhancer') . '? ' . __('Check with folder/file permission or contact server administrator.', 'wp-hide-security-enhancer') ); $error_messages[] = array( 'type' => 'error', 'message' => __('Some of plugin options will not work correctly so where turned off: Remove description header from Style file, Child - Remove description header from Style file', 'wp-hide-security-enhancer') ); //disable certain options $this->settings['module_settings']['style_file_clean'] = 'no'; $this->settings['module_settings']['child_style_file_clean'] = 'no'; //save the new options $this->functions->update_settings( $this->settings ); //regenerate permalinks $this->wph->settings_changed(); } if ( ! $errors ) { self::delete_all_notices(); } else { update_option( 'wph-process_set_static_environment_errors', $error_messages ); } } } ?>PK1\Wf  include/functions.class.phpnuW+Awph = &$wph; } function get_module_default_setting() { $defaults = array ( 'id' => '', 'visible' => TRUE, 'label' => '', 'description' => '', 'value_description' => '', 'input_type' => 'text', 'default_value' => '', 'sanitize_type' => array('sanitize_title'), 'help' => FALSE, 'advanced_option' => FALSE, 'options_pre' => '', 'options' => array(), 'options_post' => '', //callback function when components run. Default being set for _init_{$field_id} 'callback' => '', //callback function to return the rewrite code, Default being set for _callback_saved_{$field_id} 'callback_saved' => '', //PassThrough any additional arguments 'callback_arguments' => array(), 'processing_order' => 10, ); return $defaults; } function filter_settings($module_settings, $strip_splits = FALSE) { if(!is_array($module_settings) || count($module_settings) < 1) return $module_settings; $defaults = $this->get_module_default_setting(); foreach($module_settings as $key => $module_setting) { if(isset($module_setting['type']) && $module_setting['type'] == 'split') { if($strip_splits === TRUE) unset($module_settings[$key]); continue; } $module_setting = wp_parse_args( $module_setting, $defaults ); switch($module_setting['input_type']) { case 'text' : $defaults_type = array ( 'placeholder' => '', ); $module_setting = wp_parse_args( $module_setting, $defaults_type ); break; } $module_settings[$key] = $module_setting; } $module_settings = array_values($module_settings); return $module_settings; } function do_reset_settings() { $nonce = $_POST['_wpnonce']; if ( ! wp_verify_nonce( $nonce, 'wp-hide-reset-settings' ) ) return FALSE; //only for admins If ( ! current_user_can ( 'manage_options' ) ) return FALSE; $settings = $this->get_settings(); $settings['module_settings'] = $this->reset_settings(); //eset the write string $settings['write_check_string'] = ''; //update the settings $this->update_settings( $settings ); //udpate the cass settings as well $this->wph->settings = $settings; //trigger the settings changed action do_action('wph/settings_changed', null, null); //redirect $new_admin_url = $this->get_module_item_setting('admin_url' , 'admin'); if(!empty($new_admin_url) && $this->is_permalink_enabled()) $new_location = trailingslashit( home_url() ) . $new_admin_url . "/admin.php?page=wp-hide"; else $new_location = trailingslashit( site_url() ) . "wp-admin/admin.php?page=wp-hide"; $new_location .= '&reset_settings=true'; wp_redirect( $new_location ); die(); } function process_interface_save() { $nonce = $_POST['wph-interface-nonce']; if ( ! wp_verify_nonce( $nonce, 'wph/interface_fields' ) ) return FALSE; //only for admins If ( ! current_user_can ( 'manage_options' ) ) return FALSE; $screen_slug = sanitize_text_field( $_GET['page'] ); if(empty($screen_slug)) return FALSE; $tab_slug = isset($_GET['component']) ? sanitize_text_field($_GET['component']) : FALSE; $module = $this->get_module_by_slug($screen_slug); if(!is_object($module)) return FALSE; //if no tag slug check if module use tabs and use the very first one if(empty($tab_slug) && $module->use_tabs === TRUE) { //get the first component foreach($module->components as $module_component) { if( ! $module_component->title) continue; $tab_slug = $module_component->id; break; } } $unique_require_updated_settings = array(); //proces the fields $module_settings = $this->filter_settings( $module->get_module_settings($tab_slug) ); $processed_fields = array(); foreach($module_settings as $module_setting) { if(isset($module_setting['type']) && $module_setting['type'] == 'split') continue; $field_name = $module_setting['id']; $processed_fields[] = $field_name; $value = isset($_POST[$field_name]) ? sanitize_text_field($_POST[$field_name]) : ''; //if empty use the default if(empty($value)) $value = $module_setting['default_value']; //sanitize value foreach($module_setting['sanitize_type'] as $sanitize) { $value = call_user_func_array($sanitize, array($value)); } //held the value if ($module_setting['input_type'] == 'text' && !empty( $value )) { //if require unique, save for postprocessing $unique_require_updated_settings[ $field_name ] = array( 'module_name' => $module_setting['label'], 'value' => $value ); } else $this->wph->settings['module_settings'][ $field_name ] = $value; } //delete previous errors transient delete_transient( 'wph-process_interface_save_errors' ); $errors = FALSE; global $process_interface_save_errors; $process_interface_save_errors = array(); //put the new values into a temporary settings variable $_settings_ = $this->wph->settings['module_settings']; //clean up all values if $tab_slug is theme, to prevent deleted themes to still held values which oterwise can't be used anymore if ( $tab_slug == 'theme' ) { $reset_fileds = array( 'new_theme_path_', 'new_style_file_path_' ); foreach($reset_fileds as $reset_filed ) { foreach ( $_settings_ as $key => $setting ) { if ( strpos ( $key, $reset_filed ) !== FALSE ) $_settings_[ $key ] = ''; } } } foreach($unique_require_updated_settings as $field_name => $data) { $_settings_[ $field_name ] = $data['value']; } //ensure the base slug is not being used by another option // e.g. skin skin/module $_settings_for_regex = array(); foreach ( $_settings_ as $field_name => $option_value ) { if ( ! is_string( $option_value ) ) continue; $parts = explode("/", $option_value); $_settings_for_regex[ $field_name ] = $parts[0]; } $reserved_values = apply_filters('wp-hide/interface/process/reserved_values', array( 'wp' )); //clean the just updated fields within main settings array foreach($unique_require_updated_settings as $field_name => $data) { if( isset($_settings_[ $field_name ]) ) $_settings_[ $field_name ] = ''; //check if the value already exists in other setting if(array_search( $data['value'] , $_settings_) !== FALSE) { $errors = TRUE; $process_interface_save_errors[] = array( 'type' => 'error', 'message' => __('Value', 'wp-hide-security-enhancer') . ' ' . $data['value'] .' ' . __('set for', 'wp-hide-security-enhancer') . ' ' . __($data['module_name'], 'wp-hide-security-enhancer') . ' ' . __('already in use for another option.', 'wp-hide-security-enhancer') ); } else { //check for base slug e.g. skin/module $parts = explode ( "/" , $data['value'] ); $_settings_to_search = $_settings_for_regex; unset( $_settings_to_search[ $field_name ] ); //if plugins tab, ignore the other options which might use the same base slug if ( $tab_slug == 'plugins' ) { foreach ( $processed_fields as $processed_field ) unset( $_settings_to_search[ $processed_field ] ); } if( array_search( $parts[0] , $_settings_to_search ) !== FALSE ) { $errors = TRUE; $process_interface_save_errors[] = array( 'type' => 'error', 'message' => __('Value', 'wp-hide-security-enhancer') . ' ' . $data['value'] .' ' . __('set for', 'wp-hide-security-enhancer') . ' ' . __($data['module_name'], 'wp-hide-security-enhancer') . ' ' . __('use the same base slug ', 'wp-hide-security-enhancer') . '' . $parts[0] . ' ' . __('used for another option.', 'wp-hide-security-enhancer') ); } } //put the value back $_settings_[ $field_name ] = $data['value']; //check for reserved value if( array_search( $data['value'] , $reserved_values) !== FALSE ) { $errors = TRUE; $process_interface_save_errors[] = array( 'type' => 'error', 'message' => __('Value', 'wp-hide-security-enhancer') . ' ' . $data['value'] .' ' . __('set for', 'wp-hide-security-enhancer') . ' ' . __($data['module_name'], 'wp-hide-security-enhancer') . ' ' . __('is a system reserved.', 'wp-hide-security-enhancer') ); } } $errors = apply_filters('wp-hide/interface/process', $errors, $_settings_, $module_settings); if( $errors === FALSE) { //put to main setting holder $this->wph->settings['module_settings'] = $_settings_; //generate a new write_check_string $write_check_string = time() . '_' . mt_rand(100, 99999); $this->wph->settings['write_check_string'] = $write_check_string; //update the settings $this->update_settings($this->wph->settings); //trigger the settings changed action do_action('wph/settings_changed', $screen_slug, $tab_slug); } //store the error for display purpose if ( count ( $process_interface_save_errors ) > 0 ) set_transient( 'wph-process_interface_save_errors', $process_interface_save_errors, HOUR_IN_SECONDS ); //redirect $new_admin_url = $this->get_module_item_setting('admin_url' , 'admin'); //check if the rewrite applied if ( ! empty ( $new_admin_url ) && ! $this->rewrite_rules_applied() ) $new_admin_url = ''; if(!empty($new_admin_url) && $this->is_permalink_enabled()) $new_location = trailingslashit( home_url() ) . $new_admin_url . "/admin.php?page=" . $screen_slug; else $new_location = trailingslashit( site_url() ) . "wp-admin/admin.php?page=" . $screen_slug; if($tab_slug !== FALSE) $new_location .= '&component=' . $tab_slug; $new_location .= '&settings_updated=true'; wp_redirect($new_location); die(); } /** * Attempt to copy the mu loader within mu-plugins folder * */ static function copy_mu_loader( $force_overwrite = FALSE ) { //check if mu-plugins folder exists if(! is_dir( WPMU_PLUGIN_DIR )) { if (! wp_mkdir_p( WPMU_PLUGIN_DIR ) ) return FALSE; } //check if file actually exists already if( ! $force_overwrite ) { if( file_exists(WPMU_PLUGIN_DIR . '/wp-hide-loader.php' )) return TRUE; } //attempt to copy the file return @copy( WP_PLUGIN_DIR . '/wp-hide-security-enhancer/mu-loader/wp-hide-loader.php', WPMU_PLUGIN_DIR . '/wp-hide-loader.php' ); } /** * Attempt to remove the mu loader * */ static function unlink_mu_loader() { //check if file actually exists already if( !file_exists(WPMU_PLUGIN_DIR . '/wp-hide-loader.php' )) return; //attempt to copy the file @unlink ( WPMU_PLUGIN_DIR . '/wp-hide-loader.php' ); } function settings_changed_check_for_cache_plugins() { $active_plugins = (array) get_option( 'active_plugins', array() ); //cache plugin nottice if(array_search('w3-total-cache/w3-total-cache.php', $active_plugins) !== FALSE) { //check if just flushed if(!isset($_GET['w3tc_note'])) echo "

". __('W3 Total Cache Plugin is active, make sure you clear the cache for new changes to apply', 'wp-hide-security-enhancer') ."

"; } if(array_search('wp-super-cache/wp-cache.php', $active_plugins) !== FALSE) { echo "

". __('WP Super Cache Plugin is active, make sure you clear the cache for new changes to apply', 'wp-hide-security-enhancer') ."

"; } if(array_search('wp-fastest-cache/wpFastestCache.php', $active_plugins) !== FALSE) { echo "

". __('WP Fastest Cache Plugin is active, make sure you clear the cache for new changes to apply', 'wp-hide-security-enhancer') ."

"; } } /** * Return the module class by it's slug * * @param mixed $module_slug */ function get_module_by_slug($module_slug) { global $wph; $found_module = FALSE; foreach($wph->modules as $module) { $interface_menu_data = $module->get_module_slug(); if($interface_menu_data == $module_slug) { $found_module = $module; break; } } return $found_module; } /** * Used on early access when WP_Rewrite is not available * */ function is_permalink_enabled() { $permalink_structure = get_option('permalink_structure'); if ( empty($permalink_structure) ) return FALSE; return TRUE; } /** * return the server home path * */ function get_home_path() { $home = set_url_scheme( get_option( 'home' ), 'http' ); $siteurl = set_url_scheme( get_option( 'siteurl' ), 'http' ); if ( ! empty( $home ) && 0 !== strcasecmp( $home, $siteurl ) ) { $home_path = str_replace( '\\', '/', $_SERVER['DOCUMENT_ROOT'] ); $home_path = rtrim( $home_path , '/'); $home_path .= $this->wph->default_variables['site_relative_path']; /* $wp_path_rel_to_home = str_ireplace( $home, '', $siteurl ); $pos = strripos( str_replace( '\\', '/', $_SERVER['SCRIPT_FILENAME'] ), trailingslashit( $wp_path_rel_to_home ) ); if($pos !== FALSE) { $home_path = substr( $_SERVER['SCRIPT_FILENAME'], 0, $pos ); $home_path = trim( $home_path , '/\\') . DIRECTORY_SEPARATOR;; } else { $wp_path_rel_to_home = DIRECTORY_SEPARATOR . trim($wp_path_rel_to_home, '/\\') . DIRECTORY_SEPARATOR; $real_apth = realpath(ABSPATH) . DIRECTORY_SEPARATOR ; $pos = strpos( $real_apth, $wp_path_rel_to_home); $home_path = substr( $real_apth, 0, $pos ); $home_path = trim( $home_path , '/\\') . DIRECTORY_SEPARATOR; } */ } else { $home_path = ABSPATH; } $home_path = trim($home_path, '\\/ '); //not for windows if ( DIRECTORY_SEPARATOR != '\\') $home_path = DIRECTORY_SEPARATOR . $home_path; return $home_path; } /** * Set server type * */ function set_server_type() { //Allow to set server type through filter if ( ! empty ( apply_filters( 'wph/core/set_server_type' , '' ) ) ) return; $SERVER_SOFTWARE = $_SERVER['SERVER_SOFTWARE']; If ( empty ( $SERVER_SOFTWARE ) ) { //unable to identify server type return FALSE; } //check for WPEngine if ( getenv('IS_WPE') == "1" || getenv('IS_WPE_SNAPSHOT') == "1" ) { $this->wph->server_nginx_config = TRUE; return; } //check for Flywheel hosting if ( stripos( $SERVER_SOFTWARE, 'Flywheel') !== FALSE ) { $this->wph->server_nginx_config = TRUE; return; } if ( $this->is_apache() === TRUE ) $this->wph->server_htaccess_config = TRUE; if ( $this->is_IIS() === TRUE ) $this->wph->server_web_config = TRUE; if ( $this->is_nginx() === TRUE ) $this->wph->server_nginx_config = TRUE; } /** * return whatever server using the .htaccess config file * */ function server_use_htaccess_config_file() { $home_path = $this->get_home_path(); $htaccess_file = $home_path . DIRECTORY_SEPARATOR . '.htaccess'; if ((!file_exists($htaccess_file) && $this->using_mod_rewrite_permalinks()) || is_writable($htaccess_file)) { if ( $this->got_mod_rewrite() ) return TRUE; } return FALSE; } function using_mod_rewrite_permalinks() { return $this->is_permalink_enabled() && ! $this->using_index_permalinks(); } function using_index_permalinks() { $permalink_structure = get_option('permalink_structure'); if(empty($permalink_structure)) return; $index = 'index.php'; // If the index is not in the permalink, we're using mod_rewrite. return preg_match( '#^/*' . $index . '#', $permalink_structure ); } function got_mod_rewrite() { if ($this->apache_mod_loaded('mod_rewrite', true)) return TRUE; return FALSE; } /** * Does the specified module exist in the Apache config? * * @since 2.5.0 * * @global bool $is_apache * * @param string $mod The module, e.g. mod_rewrite. * @param bool $default Optional. The default return value if the module is not found. Default false. * @return bool Whether the specified module is loaded. */ function apache_mod_loaded($mod, $default = false) { if ( !$this->is_apache() ) return false; if ( function_exists( 'apache_get_modules' ) ) { $mods = apache_get_modules(); if ( in_array($mod, $mods) ) return true; } elseif (getenv('HTTP_MOD_REWRITE') !== FALSE) { $mod_found = getenv('HTTP_MOD_REWRITE') == 'On' ? true : false ; return $mod_found; } elseif ( function_exists( 'phpinfo' ) && false === strpos( ini_get( 'disable_functions' ), 'phpinfo' ) ) { ob_start(); phpinfo(8); $phpinfo = ob_get_clean(); if ( false !== strpos($phpinfo, $mod) ) return true; } return $default; } /** * return whatever the htaccess config file is writable * */ function is_writable_htaccess_config_file() { $home_path = $this->get_home_path(); $htaccess_file = $home_path . DIRECTORY_SEPARATOR . '.htaccess'; if ((!file_exists($htaccess_file) && $this->is_permalink_enabled()) || is_writable($htaccess_file)) return TRUE; return FALSE; } /** * return whatever server using the .htaccess config file * */ function server_use_web_config_file() { $is_iis7 = $this->is_IIS7(); $supports_permalinks = false; if ( $is_iis7 ) { $supports_permalinks = class_exists( 'DOMDocument', false ) && isset($_SERVER['IIS_UrlRewriteModule']) && ( PHP_SAPI == 'cgi-fcgi' ); } $supports_permalinks = apply_filters( 'iis7_supports_permalinks', $supports_permalinks ); return $supports_permalinks; } /** * return whatever the web.config config file is writable * */ function is_writable_web_config_file() { $home_path = $this->get_home_path(); $web_config_file = $home_path . 'web.config'; if ( ( ! file_exists($web_config_file) && $this->is_permalink_enabled() ) || win_is_writable($web_config_file) ) return TRUE; return FALSE; } /** * Return if the server run Apache * */ function is_apache() { $is_apache = FALSE; $is_apache = (stripos($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false || stripos($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') !== false); return $is_apache; } /** * Return if the server run on nginx * */ function is_nginx() { $is_nginx = FALSE; $is_nginx = (stripos($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false); return $is_nginx; } /** * Return if the server run on IIS * */ function is_IIS() { $is_IIS = FALSE; $is_IIS = !$this->is_apache() && (stripos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false || stripos($_SERVER['SERVER_SOFTWARE'], 'ExpressionDevServer') !== false); return $is_IIS; } /** * Return if the server run on IIS version 7 and up * */ function is_IIS7() { $is_iis7 = FALSE; $is_iis7 = $this->is_IIS() && intval( substr( $_SERVER['SERVER_SOFTWARE'], stripos( $_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/' ) + 14 ) ) >= 7; return $is_iis7; } function get_write_check_string() { $home_path = $this->get_home_path(); global $wp_rewrite; $result = FALSE; //check for .htaccess if ( $this->wph->server_htaccess_config === TRUE ) { $file_path = $home_path . DIRECTORY_SEPARATOR . '.htaccess'; if(file_exists( $file_path )) { if ( $markerdata = explode( "\n", implode( '', file( $file_path ) ) )); { foreach ( $markerdata as $markerline ) { if (strpos($markerline, '#WriteCheckString:') !== false) { $result = trim(str_replace( '#WriteCheckString:', '', $markerline)); break; } } } } } //check for web.config if ( $this->wph->server_web_config === TRUE ) { $file_path = $home_path . DIRECTORY_SEPARATOR . 'web.config'; if(file_exists( $file_path )) { if ( $markerdata = explode( "\n", implode( '', file( $file_path ) ) )); { foreach ( $markerdata as $markerline ) { preg_match("''si", $markerline, $matches); if(isset($matches[1])) { $result = $matches[1]; } if (!isset($matches[1]) && strpos($markerline, '', '', $result)); $result = trim($result); break; } } } } } return $result; } function rewrite_rules_applied() { $status = TRUE; if(isset($this->wph->settings['write_check_string']) && !empty($this->wph->settings['write_check_string'])) { $_write_check_string = $this->get_write_check_string(); if(empty($_write_check_string) || $_write_check_string != $this->wph->settings['write_check_string']) $status = FALSE; } return $status; } /** * Return rewrite base * */ function get_rewrite_base( $saved_field_data, $left_slash = TRUE, $right_slash = TRUE ) { global $blog_id; $saved_field_data = $this->untrailingslashit_all($saved_field_data); $path = !empty($this->wph->default_variables['wordpress_directory']) ? trailingslashit( $this->wph->default_variables['wordpress_directory'] ) : ''; $rewrite_base = !empty($path) ? trailingslashit( $path ) . $saved_field_data : ( !empty($saved_field_data) ? '/' .$saved_field_data : '' ); if( !empty($rewrite_base)) { $rewrite_base = $this->untrailingslashit_all( $rewrite_base ); if( $left_slash === TRUE ) $rewrite_base = '/' . $rewrite_base; if( $right_slash === TRUE ) $rewrite_base = $rewrite_base . '/'; } return $rewrite_base; } /** * Return rewrite to base * */ function get_rewrite_to_base( $field_data, $left_slash = TRUE, $right_slash = TRUE, $append_path = '') { $field_data = $this->untrailingslashit_all( $field_data ); $path = ''; switch($append_path) { case 'site_path' : $path = !empty($this->wph->default_variables['site_relative_path']) ? trailingslashit( $this->wph->default_variables['site_relative_path'] ) : ''; break; case 'wp_path' : $path .= !empty($this->wph->default_variables['wordpress_directory']) ? trailingslashit( $this->wph->default_variables['wordpress_directory'] ) : ''; break; case 'full_path' : $path = !empty($this->wph->default_variables['site_relative_path']) ? trailingslashit( $this->wph->default_variables['site_relative_path'] ) : ''; $path .= !empty($this->wph->default_variables['wordpress_directory']) ? trailingslashit( $this->wph->default_variables['wordpress_directory'] ) : ''; break; } $rewrite_to_base = !empty($path) ? trailingslashit( $path ) . $field_data : ( !empty( $field_data ) ? '/' . $field_data : '' ); if( !empty($rewrite_to_base)) { $rewrite_to_base = $this->untrailingslashit_all( $rewrite_to_base ); if( $left_slash === TRUE ) $rewrite_to_base = '/' . $rewrite_to_base; if( $right_slash === TRUE ) $rewrite_to_base = $rewrite_to_base . '/'; } return $rewrite_to_base; } function insert_with_markers_on_top( $filename, $marker, $insertion) { if ( ! file_exists( $filename ) ) { if ( ! is_writable( dirname( $filename ) ) ) { return false; } if ( ! touch( $filename ) ) { return false; } } elseif ( ! is_writeable( $filename ) ) { return false; } if ( ! is_array( $insertion ) ) { $insertion = explode( "\n", $insertion ); } $start_marker = "# BEGIN {$marker}"; $end_marker = "# END {$marker}"; $fp = fopen( $filename, 'r+' ); if ( ! $fp ) { return false; } // Attempt to get a lock. If the filesystem supports locking, this will block until the lock is acquired. flock( $fp, LOCK_EX ); $lines = array(); while ( ! feof( $fp ) ) { $lines[] = rtrim( fgets( $fp ), "\r\n" ); } // Split out the existing file into the preceding lines, and those that appear after the marker $pre_lines = $post_lines = $existing_lines = array(); $found_marker = $found_end_marker = false; foreach ( $lines as $line ) { if ( ! $found_marker && false !== strpos( $line, $start_marker ) ) { $found_marker = true; continue; } elseif ( ! $found_end_marker && false !== strpos( $line, $end_marker ) ) { $found_end_marker = true; continue; } if ( ! $found_marker ) { $pre_lines[] = $line; } elseif ( $found_marker && $found_end_marker ) { $post_lines[] = $line; } else { $existing_lines[] = $line; } } // Check to see if there was a change if ( $existing_lines === $insertion ) { flock( $fp, LOCK_UN ); fclose( $fp ); return true; } // Generate the new file data if($found_marker && $found_end_marker) { $new_file_data = implode( "\n", array_merge( $pre_lines, array( $start_marker ), $insertion, array( $end_marker ), $post_lines ) ); } else { $new_file_data = implode( "\n", array_merge( array( $start_marker ), $insertion, array( $end_marker ), $pre_lines ) ); } // Write to the start of the file, and truncate it to that length fseek( $fp, 0 ); $bytes = fwrite( $fp, $new_file_data ); if ( $bytes ) { ftruncate( $fp, ftell( $fp ) ); } fflush( $fp ); flock( $fp, LOCK_UN ); fclose( $fp ); return (bool) $bytes; } function clean_with_markers( $filename, $markers) { if ( ! file_exists( $filename ) ) { if ( ! is_writable( dirname( $filename ) ) ) { return false; } if ( ! touch( $filename ) ) { return false; } } elseif ( ! is_writeable( $filename ) ) { return false; } $start_marker = $markers['start']; $end_marker = $markers['end']; $fp = fopen( $filename, 'r+' ); if ( ! $fp ) { return false; } // Attempt to get a lock. If the filesystem supports locking, this will block until the lock is acquired. flock( $fp, LOCK_EX ); $lines = array(); while ( ! feof( $fp ) ) { $lines[] = rtrim( fgets( $fp ), "\r\n" ); } // Split out the existing file into the preceding lines, and those that appear after the marker $pre_lines = $post_lines = $existing_lines = array(); $found_marker = $found_end_marker = false; foreach ( $lines as $line ) { if ( ! $found_marker && false !== strpos( $line, $start_marker ) ) { $found_marker = true; continue; } elseif ( ! $found_end_marker && false !== strpos( $line, $end_marker ) ) { $found_end_marker = true; continue; } if ( ! $found_marker ) { $pre_lines[] = $line; } elseif ( $found_marker && $found_end_marker ) { $post_lines[] = $line; } else { $existing_lines[] = $line; } } // Generate the new file data if($found_marker && $found_end_marker) { $new_file_data = implode( "\n", array_merge( $pre_lines, $post_lines ) ); // Write to the start of the file, and truncate it to that length fseek( $fp, 0 ); $bytes = fwrite( $fp, $new_file_data ); if ( $bytes ) { ftruncate( $fp, ftell( $fp ) ); } fflush( $fp ); flock( $fp, LOCK_UN ); fclose( $fp ); return (bool) $bytes; } return FALSE; } /** * Check if the plugin started through MU plugin loader * */ function is_muloader() { if (defined('WPH_MULOADER')) return TRUE; //check if the file actually exists if( file_exists(WPMU_PLUGIN_DIR . '/wp-hide-loader.php' )) return TRUE; return FALSE; } /** * * Check if theme is is customize mode * */ function is_theme_customize() { if ( strpos($_SERVER['REQUEST_URI'] ,'customize.php') !== FALSE ) return TRUE; if ( isset($_POST['wp_customize']) && sanitize_text_field($_POST['wp_customize']) == "on" ) return TRUE; return FALSE; } /** * return settings * */ function get_settings() { $settings = get_option('wph_settings'); $defaults = array ( 'module_settings' => array(), 'recovery_code' => '' ); $settings = wp_parse_args( $settings, $defaults ); $settings = apply_filters('wp-hide/get_settings', $settings); return $settings; } /** * Return a Module Item value setting * * @param mixed $item_id */ function get_module_item_setting($item_id) { $settings = $this->get_settings(); $value = isset($settings['module_settings'][ $item_id ]) ? $settings['module_settings'][ $item_id] : ''; $value = apply_filters('wp-hide/get_module_item_setting', $value, $item_id); return $value; } /** * Save the settings * * @param mixed $settings */ function update_settings($settings) { update_option('wph_settings', $settings); } /** * Get path from url relative to domain root * * @param mixed $url * @param mixed $is_file_path * @param mixed $relative_to_wordpress_directory */ function get_url_path($url, $is_file_path = FALSE, $relative_to_wordpress_directory = FALSE) { if(!$is_file_path) $url = trailingslashit( $url ); $url_parse = parse_url( $url ); $path = $url_parse['path']; if( $relative_to_wordpress_directory === TRUE && $this->wph->default_variables['wordpress_directory'] != '/') { $path = $this->string_left_replacement( $path , trailingslashit ( $this->wph->default_variables['wordpress_directory'] )) ; } if(!$is_file_path) $path = trailingslashit( $path ); if($path != '/' && strlen($path) > 1) { $path = ltrim($path, '/'); $path = '/' . $path; } if(isset($url_parse['query'])) $path .= '?' . $url_parse['query']; $path = str_replace( '\\', '/', $path); return $path; } /** * return the url relative to domain root * * @param mixed $url */ function get_url_path_relative_to_domain_root($url) { $url = str_replace(trailingslashit( home_url() ), "" , $url); return $url; } /** * Replace all slashes from begining and the end of string * * @param mixed $value */ function untrailingslashit_all($value) { $value = ltrim(rtrim($value, "/"), "/"); return $value; } /** * Replace a prefix from the beginning of a text * * @param mixed $string * @param mixed $prefix */ function string_left_replacement($string, $prefix) { if (substr($string, 0, strlen($prefix)) == $prefix) { $string = (string) substr($string, strlen($prefix)); } return $string; } /** * saniteize including a possible extension * * @param mixed $value */ function sanitize_file_path_name($value) { $value = trim($value); if(empty($value)) return $value; //check for any extension $pathinfo = pathinfo($value); $dirname = (!empty($pathinfo['dirname']) && $pathinfo['dirname'] != '.') ? $pathinfo['dirname'] : ''; $path = !empty($dirname) ? trailingslashit($dirname) . $pathinfo['filename'] : $pathinfo['filename']; $parts = explode("/", $path); $parts = array_filter($parts); foreach($parts as $key => $part_item) { $parts[$key] = sanitize_title($part_item); } $value = implode("/", $parts); $value .= !empty($pathinfo['extension']) ? '.' . $pathinfo['extension'] : ''; $value = strtolower($value); return $value; } /** * make sure there's a php extension included within the slug * * @param mixed $value * @return mixed */ function php_extension_required($value) { $value = trim($value); if($value == '') return ''; $extension = substr($value, -4); if(strtolower($extension) != '.php') $value .= '.php'; return $value; } /** * return current url * */ function get_current_url() { $current_url = 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; return $current_url; } /** * Add replacement withint the list * * @param mixed $old_url * @param mixed $new_url * @param mixed $priority */ function add_replacement($old_url, $new_url, $priority = 'normal') { if($this->replacement_exists($old_url)) return; $this->wph->urls_replacement[ $priority ][ $old_url ] = $new_url; } /** * Return whatever a replacement exists or not * The old url should be provided * * @param mixed $old_url */ function replacement_exists($old_url) { if(count($this->wph->urls_replacement) < 1) return FALSE; foreach($this->wph->urls_replacement as $priority => $replacements_block) { if(isset($this->wph->urls_replacement[$priority][ $old_url ])) return TRUE; } return FALSE; } /** * Return a list of replacements * */ function get_replacement_list() { $replacements = array(); if(count($this->wph->urls_replacement) < 1) return $replacements; foreach($this->wph->urls_replacement as $priority => $replacements_block) { if(!is_array($replacements_block) || count($replacements_block) < 1) continue; foreach($replacements_block as $old_url => $new_url) { $replacements[ $old_url ] = $new_url; } } return $replacements; } /** * Replace the urls within given content * * @param mixed $text * @param mixed $replacements */ function content_urls_replacement($text, $replacements) { //process the replacements if( count($replacements) < 1) return $text; //exclude scheme to match urls without it $_replacements = array(); //no protocol $_replacements_np = array(); //single quote ; double quote $_relative_url_replacements_sq = array(); $_relative_url_replacements_dq = array(); //single quote ; double quote / domain url / domain ssl $_relative_domain_url_replacements_sq = array(); $_relative_domain_url_replacements_dq = array(); //$_relative_domain_url_replacements_ssl_sq = array(); //$_relative_domain_url_replacements_ssl_dq = array(); $home_url = home_url(); $home_url_parsed = parse_url($home_url); $domain_url = 'http://' . $home_url_parsed['host']; $domain_url_ssl = 'https://' . $home_url_parsed['host']; /** * * CDN * */ $CDN_url = $this->get_module_item_setting('cdn_url');; if ( ! empty ( $CDN_url ) ) { foreach($replacements as $old_url => $new_url) { $replacements[ str_replace($home_url_parsed['host'], $CDN_url, $old_url) ] = str_replace($home_url_parsed['host'], $CDN_url, $new_url); } } /** * Preserve absolute paths * */ $text = str_ireplace( ABSPATH, '%WPH-PLACEHOLDER-PRESERVE-ABSPATH%', $text); //jsonencoded $text = str_ireplace( trim(json_encode(ABSPATH), '"'), '%WPH-PLACEHOLDER-PRESERVE-JSON-ABSPATH%', $text); //urlencode $text = str_ireplace( trim(urlencode(ABSPATH), '"'), '%WPH-PLACEHOLDER-PRESERVE-URLENCODE-ABSPATH%', $text); foreach($replacements as $old_url => $new_url) { //add quote to make sure it's actualy a link value and is right at the start of text $_relative_url_replacements_dq[ '"' . str_ireplace( $home_url, "", $old_url) ] = '"' . str_ireplace( $home_url, "", $new_url); $_relative_url_replacements_sq[ "'" . str_ireplace( $home_url, "", $old_url) ] = "'" . str_ireplace( $home_url, "", $new_url); $_relative_domain_url_replacements_dq[ '"' . str_ireplace( array( $domain_url, $domain_url_ssl ), "", $old_url) ] = '"' . str_ireplace( array( $domain_url, $domain_url_ssl ), "", $new_url); $_relative_domain_url_replacements_sq[ "'" . str_ireplace( array( $domain_url, $domain_url_ssl ), "", $old_url) ] = "'" . str_ireplace( array( $domain_url, $domain_url_ssl ), "", $new_url); //$_relative_domain_url_replacements_ssl_dq[ '"' . str_ireplace( $domain_url_ssl, "", $old_url) ] = '"' . str_ireplace( $domain_url_ssl, "", $new_url); //$_relative_domain_url_replacements_ssl_sq[ "'" . str_ireplace( $domain_url_ssl, "", $old_url) ] = "'" . str_ireplace( $domain_url_ssl, "", $new_url); //match urls without protocol $_old_url = str_ireplace( array('http:', 'https:'), "", $old_url); $_new_url = str_ireplace( array('http:', 'https:'), "", $new_url); $_replacements_np[$_old_url] = $_new_url; $_old_url = str_ireplace( array('http://', 'https://'), "", $old_url); $_new_url = str_ireplace( array('http://', 'https://'), "", $new_url); $_replacements[$_old_url] = $_new_url; } /** * Main replaments * * @var mixed */ $text = str_ireplace( array_keys($_replacements_np), array_values($_replacements_np) ,$text ); $text = str_ireplace( array_keys($_replacements), array_values($_replacements) ,$text ); /** * Relative tp domain urls replacements; using subfolder e.g. 127.0.0.1/wp01/wordpress_site, this will be /wp01/wordpress_site * * @var mixed */ $text = str_ireplace( array_keys($_relative_domain_url_replacements_sq), array_values($_relative_domain_url_replacements_sq) ,$text ); $text = str_ireplace( array_keys($_relative_domain_url_replacements_dq), array_values($_relative_domain_url_replacements_dq) ,$text ); //$text = str_ireplace( array_keys($_relative_domain_url_replacements_ssl_sq), array_values($_relative_domain_url_replacements_ssl_sq) ,$text ); //$text = str_ireplace( array_keys($_relative_domain_url_replacements_ssl_dq), array_values($_relative_domain_url_replacements_ssl_dq) ,$text ); /** * Relative urls replacements * @var mixed */ //single quote $text = str_ireplace( array_keys($_relative_url_replacements_sq), array_values($_relative_url_replacements_sq) ,$text ); $text = str_ireplace( array_keys($_relative_url_replacements_dq), array_values($_relative_url_replacements_dq) ,$text ); //check for json encoded urls foreach($_replacements_np as $old_url => $new_url) { $old_url = trim(json_encode($old_url), '"'); $new_url = trim(json_encode($new_url), '"'); $text = str_ireplace( $old_url, $new_url ,$text ); $old_url = trim(urlencode($old_url), '"'); $new_url = trim(urlencode($new_url), '"'); $text = str_ireplace( $old_url, $new_url ,$text ); } //check for json encoded urls foreach($_replacements as $old_url => $new_url) { $old_url = trim(json_encode($old_url), '"'); $new_url = trim(json_encode($new_url), '"'); $text = str_ireplace( $old_url, $new_url ,$text ); $old_url = trim(urlencode($old_url), '"'); $new_url = trim(urlencode($new_url), '"'); $text = str_ireplace( $old_url, $new_url ,$text ); } //check for url encoded urls foreach( $_relative_domain_url_replacements_dq as $old_url => $new_url ) { /* * JSON always use double quotes * use double quote type at the start of the string (per json encodync) to avoid replacing for non-local domains * e.g. "collectionThumbnail":"https:\/\/wp.envatoextensions.com\/kit-57\/wp-content\/uploads\/sites\/60\/2018\/08\/screenshot-20-1540279812-300x997.jpg" */ //$text = str_ireplace( "'" . trim( json_encode( trim( $old_url, '"')), '"' ) , "'" . trim( json_encode( trim ( $new_url, '"')), '"' ) ,$text ); $text = str_ireplace( '"' . trim( json_encode( trim( $old_url, '"')), '"' ) , '"' . trim( json_encode( trim ( $new_url, '"')), '"' ) ,$text ); $text = str_ireplace( trim( urlencode(trim( $old_url, '"')), '"' ) , trim( urlencode(trim ( $new_url, '"')), '"' ) ,$text ); } /** * Restore absolute paths */ //Preserve absolute paths $text = str_ireplace( '%WPH-PLACEHOLDER-PRESERVE-ABSPATH%', ABSPATH, $text); //jsonencoded $text = str_ireplace( '%WPH-PLACEHOLDER-PRESERVE-JSON-ABSPATH%', trim(json_encode(ABSPATH), '"'), $text); //urlencode $text = str_ireplace( '%WPH-PLACEHOLDER-PRESERVE-URLENCODE-ABSPATH%', trim(urlencode(ABSPATH), '"'), $text); return $text; } function default_scripts_styles_replace($object, $replacements) { //update default dirs if(isset($object->default_dirs)) { foreach($object->default_dirs as $key => $value) { $object->default_dirs[$key] = str_replace(array_keys($replacements), array_values($replacements), $value); } } foreach($object->registered as $script_name => $script_data) { $script_data->src = str_replace(array_keys($replacements), array_values($replacements), $script_data->src); $object->registered[$script_name] = $script_data; } return $object; } function check_headers_content_type($header_name, $header_value) { $headers = headers_list(); foreach($headers as $header) { if(stripos($header, $header_name) !== FALSE) { if(stripos($header, $header_value) !== FALSE) return TRUE; } } return FALSE; } function array_sort_by_processing_order($a, $b) { return $a['processing_order'] - $b['processing_order']; } /** * Return the recovey code * */ function get_recovery_code() { $settings = $this->get_settings(); if(!isset($settings['recovery_code']) || empty($settings['recovery_code'])) { $recovery_code = $this->generate_recovery_code(); } else $recovery_code = $settings['recovery_code']; return $recovery_code; } /** * Generate a recovery code * */ function generate_recovery_code() { $settings = $this->get_settings(); $recovery_code = substr( md5(rand(1,9999) . microtime()), 0, 10 ); $settings['recovery_code'] = $recovery_code; $this->update_settings($settings); //send the link to admin $this->send_recovery_email(); return $recovery_code; } function send_recovery_email( ) { $to = get_option('admin_email'); $subject = get_option('blogname') . ' - WP Hide Recovery Link'; $message = __('Hello', 'wp-hide-security-enhancer') . ", \n\n" . __('This is an automated message to inform that you can always use a recovery link if something go wrong', 'wp-hide-security-enhancer') . ": " . site_url() . '?wph-recovery='. $this->wph->functions->get_recovery_code() . "\n\n" . __('Please keep this url to a safe place.', 'wp-hide-security-enhancer') . "."; $headers = 'From: '. get_option('blogname') .' <'. get_option('admin_email') .'>' . "\r\n"; $this->wph->functions->wp_mail( $to, $subject, $message, $headers ); } /** * Trigger the recovery actions * */ function do_recovery() { //prevent hammering sleep(5); //feetch a new set of settings $settings = $this->get_settings(); $wph_recovery = isset($_GET['wph-recovery']) ? sanitize_text_field($_GET['wph-recovery']) : ''; if(empty($wph_recovery) || $wph_recovery != $this->wph->settings['recovery_code']) return; $settings['module_settings'] = $this->reset_settings(); //update the settings $this->update_settings( $settings ); //available for mu-plugins do_action('wph/do_recovery'); //add filter for rewriting the rules add_action('wp_loaded', array($this, 'wp_loaded_trigger_do_recovery')); } function reset_settings() { $settings = array(); foreach($this->wph->modules as $module) { //proces the fields $module_settings = $this->filter_settings( $module->get_module_settings(), TRUE ); foreach($module_settings as $module_setting) { if(isset($module_setting['type']) && $module_setting['type'] == 'split') continue; $field_name = $module_setting['id']; $value = isset($module_setting['default_value']) ? $module_setting['default_value'] : ''; //save the value $settings[ $field_name ] = $value; } } return $settings; } function wp_loaded_trigger_do_recovery() { /** WordPress Misc Administration API */ require_once(ABSPATH . 'wp-admin/includes/misc.php'); /** WordPress Administration File API */ require_once(ABSPATH . 'wp-admin/includes/file.php'); flush_rewrite_rules(); //redirect to homepage wp_redirect(get_site_url()); die(); } /** * Check if filter / action exists for anonymous object * * @param mixed $tag * @param mixed $class * @param mixed $method */ function anonymous_object_filter_exists($tag, $class, $method) { if ( ! isset( $GLOBALS['wp_filter'][$tag] ) ) return FALSE; $filters = $GLOBALS['wp_filter'][$tag]; if ( ! $filters ) return FALSE; foreach ( $filters as $priority => $filter ) { foreach ( $filter as $identifier => $function ) { if ( ! is_array( $function ) ) continue; if ( ! $function['function'][0] instanceof $class ) continue; if ( $method == $function['function'][1] ) { return TRUE; } } } return FALSE; } /** * Replace a filter / action from anonymous object * * @param mixed $tag * @param mixed $class * @param mixed $method */ function remove_anonymous_object_filter( $tag, $class, $method ) { $filters = false; if ( isset( $GLOBALS['wp_filter'][$tag] ) ) $filters = $GLOBALS['wp_filter'][$tag]; if ( $filters ) foreach ( $filters as $priority => $filter ) { foreach ( $filter as $identifier => $function ) { if ( ! is_array( $function ) ) continue; if ( ! $function['function'][0] instanceof $class ) continue; if ( $method == $function['function'][1] ) { remove_filter($tag, array( $function['function'][0], $method ), $priority); } } } } /** * An early instance of WordPress wp_mail core * Unable to load pluggable.php where the function exists, as bein loaded using require * * @param mixed $to * @param mixed $subject * @param mixed $message * @param mixed $headers * @param mixed $attachments */ function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) { // Compact the input, apply the filters, and extract them back out /** * Filter the wp_mail() arguments. * * @since 2.2.0 * * @param array $args A compacted array of wp_mail() arguments, including the "to" email, * subject, message, headers, and attachments values. */ $atts = apply_filters( 'wp_mail', compact( 'to', 'subject', 'message', 'headers', 'attachments' ) ); if ( isset( $atts['to'] ) ) { $to = $atts['to']; } if ( isset( $atts['subject'] ) ) { $subject = $atts['subject']; } if ( isset( $atts['message'] ) ) { $message = $atts['message']; } if ( isset( $atts['headers'] ) ) { $headers = $atts['headers']; } if ( isset( $atts['attachments'] ) ) { $attachments = $atts['attachments']; } if ( ! is_array( $attachments ) ) { $attachments = explode( "\n", str_replace( "\r\n", "\n", $attachments ) ); } global $phpmailer; // (Re)create it, if it's gone missing if ( ! ( $phpmailer instanceof PHPMailer ) ) { require_once ABSPATH . WPINC . '/class-phpmailer.php'; require_once ABSPATH . WPINC . '/class-smtp.php'; $phpmailer = new PHPMailer( true ); } // Headers if ( empty( $headers ) ) { $headers = array(); } else { if ( !is_array( $headers ) ) { // Explode the headers out, so this function can take both // string headers and an array of headers. $tempheaders = explode( "\n", str_replace( "\r\n", "\n", $headers ) ); } else { $tempheaders = $headers; } $headers = array(); $cc = array(); $bcc = array(); // If it's actually got contents if ( !empty( $tempheaders ) ) { // Iterate through the raw headers foreach ( (array) $tempheaders as $header ) { if ( strpos($header, ':') === false ) { if ( false !== stripos( $header, 'boundary=' ) ) { $parts = preg_split('/boundary=/i', trim( $header ) ); $boundary = trim( str_replace( array( "'", '"' ), '', $parts[1] ) ); } continue; } // Explode them out list( $name, $content ) = explode( ':', trim( $header ), 2 ); // Cleanup crew $name = trim( $name ); $content = trim( $content ); switch ( strtolower( $name ) ) { // Mainly for legacy -- process a From: header if it's there case 'from': $bracket_pos = strpos( $content, '<' ); if ( $bracket_pos !== false ) { // Text before the bracketed email is the "From" name. if ( $bracket_pos > 0 ) { $from_name = substr( $content, 0, $bracket_pos - 1 ); $from_name = str_replace( '"', '', $from_name ); $from_name = trim( $from_name ); } $from_email = substr( $content, $bracket_pos + 1 ); $from_email = str_replace( '>', '', $from_email ); $from_email = trim( $from_email ); // Avoid setting an empty $from_email. } elseif ( '' !== trim( $content ) ) { $from_email = trim( $content ); } break; case 'content-type': if ( strpos( $content, ';' ) !== false ) { list( $type, $charset_content ) = explode( ';', $content ); $content_type = trim( $type ); if ( false !== stripos( $charset_content, 'charset=' ) ) { $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset_content ) ); } elseif ( false !== stripos( $charset_content, 'boundary=' ) ) { $boundary = trim( str_replace( array( 'BOUNDARY=', 'boundary=', '"' ), '', $charset_content ) ); $charset = ''; } // Avoid setting an empty $content_type. } elseif ( '' !== trim( $content ) ) { $content_type = trim( $content ); } break; case 'cc': $cc = array_merge( (array) $cc, explode( ',', $content ) ); break; case 'bcc': $bcc = array_merge( (array) $bcc, explode( ',', $content ) ); break; default: // Add it to our grand headers array $headers[trim( $name )] = trim( $content ); break; } } } } // Empty out the values that may be set $phpmailer->ClearAllRecipients(); $phpmailer->ClearAttachments(); $phpmailer->ClearCustomHeaders(); $phpmailer->ClearReplyTos(); // From email and name // If we don't have a name from the input headers if ( !isset( $from_name ) ) $from_name = 'WordPress'; /* If we don't have an email from the input headers default to wordpress@$sitename * Some hosts will block outgoing mail from this address if it doesn't exist but * there's no easy alternative. Defaulting to admin_email might appear to be another * option but some hosts may refuse to relay mail from an unknown domain. See * https://core.trac.wordpress.org/ticket/5007. */ if ( !isset( $from_email ) ) { // Get the site domain and get rid of www. $sitename = strtolower( $_SERVER['SERVER_NAME'] ); if ( substr( $sitename, 0, 4 ) == 'www.' ) { $sitename = substr( $sitename, 4 ); } $from_email = 'wordpress@' . $sitename; } /** * Filter the email address to send from. * * @since 2.2.0 * * @param string $from_email Email address to send from. */ $phpmailer->From = apply_filters( 'wp_mail_from', $from_email ); /** * Filter the name to associate with the "from" email address. * * @since 2.3.0 * * @param string $from_name Name associated with the "from" email address. */ $phpmailer->FromName = apply_filters( 'wp_mail_from_name', $from_name ); // Set destination addresses if ( !is_array( $to ) ) $to = explode( ',', $to ); foreach ( (array) $to as $recipient ) { try { // Break $recipient into name and address parts if in the format "Foo " $recipient_name = ''; if ( preg_match( '/(.*)<(.+)>/', $recipient, $matches ) ) { if ( count( $matches ) == 3 ) { $recipient_name = $matches[1]; $recipient = $matches[2]; } } $phpmailer->AddAddress( $recipient, $recipient_name); } catch ( phpmailerException $e ) { continue; } } // Set mail's subject and body $phpmailer->Subject = $subject; $phpmailer->Body = $message; // Add any CC and BCC recipients if ( !empty( $cc ) ) { foreach ( (array) $cc as $recipient ) { try { // Break $recipient into name and address parts if in the format "Foo " $recipient_name = ''; if ( preg_match( '/(.*)<(.+)>/', $recipient, $matches ) ) { if ( count( $matches ) == 3 ) { $recipient_name = $matches[1]; $recipient = $matches[2]; } } $phpmailer->AddCc( $recipient, $recipient_name ); } catch ( phpmailerException $e ) { continue; } } } if ( !empty( $bcc ) ) { foreach ( (array) $bcc as $recipient) { try { // Break $recipient into name and address parts if in the format "Foo " $recipient_name = ''; if ( preg_match( '/(.*)<(.+)>/', $recipient, $matches ) ) { if ( count( $matches ) == 3 ) { $recipient_name = $matches[1]; $recipient = $matches[2]; } } $phpmailer->AddBcc( $recipient, $recipient_name ); } catch ( phpmailerException $e ) { continue; } } } // Set to use PHP's mail() $phpmailer->IsMail(); // Set Content-Type and charset // If we don't have a content-type from the input headers if ( !isset( $content_type ) ) $content_type = 'text/plain'; /** * Filter the wp_mail() content type. * * @since 2.3.0 * * @param string $content_type Default wp_mail() content type. */ $content_type = apply_filters( 'wp_mail_content_type', $content_type ); $phpmailer->ContentType = $content_type; // Set whether it's plaintext, depending on $content_type if ( 'text/html' == $content_type ) $phpmailer->IsHTML( true ); // If we don't have a charset from the input headers if ( !isset( $charset ) ) $charset = get_bloginfo( 'charset' ); // Set the content-type and charset /** * Filter the default wp_mail() charset. * * @since 2.3.0 * * @param string $charset Default email charset. */ $phpmailer->CharSet = apply_filters( 'wp_mail_charset', $charset ); // Set custom headers if ( !empty( $headers ) ) { foreach ( (array) $headers as $name => $content ) { $phpmailer->AddCustomHeader( sprintf( '%1$s: %2$s', $name, $content ) ); } if ( false !== stripos( $content_type, 'multipart' ) && ! empty($boundary) ) $phpmailer->AddCustomHeader( sprintf( "Content-Type: %s;\n\t boundary=\"%s\"", $content_type, $boundary ) ); } if ( !empty( $attachments ) ) { foreach ( $attachments as $attachment ) { try { $phpmailer->AddAttachment($attachment); } catch ( phpmailerException $e ) { continue; } } } /** * Fires after PHPMailer is initialized. * * @since 2.2.0 * * @param PHPMailer &$phpmailer The PHPMailer instance, passed by reference. */ do_action_ref_array( 'phpmailer_init', array( &$phpmailer ) ); // Send! try { return $phpmailer->Send(); } catch ( phpmailerException $e ) { $mail_error_data = compact( $to, $subject, $message, $headers, $attachments ); /** * Fires after a phpmailerException is caught. * * @since 4.4.0 * * @param WP_Error $error A WP_Error object with the phpmailerException code, message, and an array * containing the mail recipient, subject, message, headers, and attachments. */ do_action( 'wp_mail_failed', new WP_Error( $e->getCode(), $e->getMessage(), $mail_error_data ) ); return false; } } /** * Check the plugins directory and retrieve all plugin files with plugin data. * * WordPress only supports plugin files in the base plugins directory * (wp-content/plugins) and in one directory above the plugins directory * (wp-content/plugins/my-plugin). The file it looks for has the plugin data * and must be found in those two locations. It is recommended to keep your * plugin files in their own directories. * * The file with the plugin data is the file that will be included and therefore * needs to have the main execution for the plugin. This does not mean * everything must be contained in the file and it is recommended that the file * be split for maintainability. Keep everything in one file for extreme * optimization purposes. * * @since 1.5.0 * * @param string $plugin_folder Optional. Relative path to single plugin folder. * @return array Key is the plugin file path and the value is an array of the plugin data. */ function get_plugins($plugin_folder = '') { $wp_plugins = array (); $plugin_root = WP_PLUGIN_DIR; if ( !empty($plugin_folder) ) $plugin_root .= $plugin_folder; // Files in wp-content/plugins directory $plugins_dir = @ opendir( $plugin_root); $plugin_files = array(); if ( $plugins_dir ) { while (($file = readdir( $plugins_dir ) ) !== false ) { if ( substr($file, 0, 1) == '.' ) continue; if ( is_dir( $plugin_root.'/'.$file ) ) { $plugins_subdir = @ opendir( $plugin_root.'/'.$file ); if ( $plugins_subdir ) { while (($subfile = readdir( $plugins_subdir ) ) !== false ) { if ( substr($subfile, 0, 1) == '.' ) continue; if ( substr($subfile, -4) == '.php' ) $plugin_files[] = "$file/$subfile"; } closedir( $plugins_subdir ); } } else { if ( substr($file, -4) == '.php' ) $plugin_files[] = $file; } } closedir( $plugins_dir ); } if ( empty($plugin_files) ) return $wp_plugins; foreach ( $plugin_files as $plugin_file ) { if ( !is_readable( "$plugin_root/$plugin_file" ) ) continue; $plugin_data = $this->get_plugin_data( "$plugin_root/$plugin_file", false, false ); //Do not apply markup/translate as it'll be cached. if ( empty ( $plugin_data['Name'] ) ) continue; $wp_plugins[plugin_basename( $plugin_file )] = $plugin_data; } return $wp_plugins; } /** * Parse plugin headers data * * @param mixed $plugin_file * @param mixed $markup * @param mixed $translate */ function get_plugin_data( $plugin_file, $markup = true, $translate = true ) { $default_headers = array( 'Name' => 'Plugin Name', 'PluginURI' => 'Plugin URI', 'Version' => 'Version', 'Description' => 'Description', 'Author' => 'Author', 'AuthorURI' => 'Author URI', 'TextDomain' => 'Text Domain', 'DomainPath' => 'Domain Path', 'Network' => 'Network', // Site Wide Only is deprecated in favor of Network. '_sitewide' => 'Site Wide Only', ); $plugin_data = get_file_data( $plugin_file, $default_headers, 'plugin' ); // Site Wide Only is the old header for Network if ( ! $plugin_data['Network'] && $plugin_data['_sitewide'] ) { /* translators: 1: Site Wide Only: true, 2: Network: true */ _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The %1$s plugin header is deprecated. Use %2$s instead.' ), 'Site Wide Only: true', 'Network: true' ) ); $plugin_data['Network'] = $plugin_data['_sitewide']; } $plugin_data['Network'] = ( 'true' == strtolower( $plugin_data['Network'] ) ); unset( $plugin_data['_sitewide'] ); if ( $markup || $translate ) { $plugin_data = $this->_get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup, $translate ); } else { $plugin_data['Title'] = $plugin_data['Name']; $plugin_data['AuthorName'] = $plugin_data['Author']; } return $plugin_data; } /** * Sanitizes plugin data, optionally adds markup, optionally translates. * * @since 2.7.0 * @access private * @see get_plugin_data() */ function _get_plugin_data_markup_translate( $plugin_file, $plugin_data, $markup = true, $translate = true ) { // Sanitize the plugin filename to a WP_PLUGIN_DIR relative path $plugin_file = plugin_basename( $plugin_file ); // Translate fields if ( $translate ) { if ( $textdomain = $plugin_data['TextDomain'] ) { if ( ! is_textdomain_loaded( $textdomain ) ) { if ( $plugin_data['DomainPath'] ) { load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) . $plugin_data['DomainPath'] ); } else { load_plugin_textdomain( $textdomain, false, dirname( $plugin_file ) ); } } } elseif ( 'hello.php' == basename( $plugin_file ) ) { $textdomain = 'default'; } if ( $textdomain ) { foreach ( array( 'Name', 'PluginURI', 'Description', 'Author', 'AuthorURI', 'Version' ) as $field ) $plugin_data[ $field ] = translate( $plugin_data[ $field ], $textdomain ); } } // Sanitize fields $allowed_tags = $allowed_tags_in_links = array( 'abbr' => array( 'title' => true ), 'acronym' => array( 'title' => true ), 'code' => true, 'em' => true, 'strong' => true, ); $allowed_tags['a'] = array( 'href' => true, 'title' => true ); // Name is marked up inside
tags. Don't allow these. // Author is too, but some plugins have used here (omitting Author URI). $plugin_data['Name'] = wp_kses( $plugin_data['Name'], $allowed_tags_in_links ); $plugin_data['Author'] = wp_kses( $plugin_data['Author'], $allowed_tags ); $plugin_data['Description'] = wp_kses( $plugin_data['Description'], $allowed_tags ); $plugin_data['Version'] = wp_kses( $plugin_data['Version'], $allowed_tags ); $plugin_data['PluginURI'] = esc_url( $plugin_data['PluginURI'] ); $plugin_data['AuthorURI'] = esc_url( $plugin_data['AuthorURI'] ); $plugin_data['Title'] = $plugin_data['Name']; $plugin_data['AuthorName'] = $plugin_data['Author']; // Apply markup if ( $markup ) { if ( $plugin_data['PluginURI'] && $plugin_data['Name'] ) $plugin_data['Title'] = '' . $plugin_data['Name'] . ''; if ( $plugin_data['AuthorURI'] && $plugin_data['Author'] ) $plugin_data['Author'] = '' . $plugin_data['Author'] . ''; $plugin_data['Description'] = wptexturize( $plugin_data['Description'] ); if ( $plugin_data['Author'] ) $plugin_data['Description'] .= ' ' . sprintf( __('By %s.'), $plugin_data['Author'] ) . ''; } return $plugin_data; } /** * Alternative when apache_response_headers() not available * */ function parseRequestHeaders() { $headers = array(); foreach($_SERVER as $key => $value) { if (substr($key, 0, 5) <> 'HTTP_') continue; $header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5))))); $headers[$header] = $value; } return $headers; } /** * Attempt to update the outputed headers * * @param mixed $headers * @param mixed $response_headers */ function update_headers( $headers, $response_headers ) { $replacement_list = $this->get_replacement_list(); foreach ( $headers as $header ) { if(isset($response_headers[ $header ])) { $header_value = $response_headers[ $header ]; $new_header_value = $this->content_urls_replacement($header_value, $replacement_list ); if($header_value != $new_header_value) { header_remove("Location"); header( 'Location: ' . $new_header_value ); } } } } /** * Check if current content is filterable, depending on header content type * */ function is_filterable_content_type() { $is_filterable = TRUE; $headers_content_type = $this->get_headers_list_content_type(); if ( $headers_content_type === FALSE ) return $is_filterable; $allow_type = array( 'text/plain', 'text/css', 'text/html', 'text/csv', 'text/javascript', 'application/javascript', 'application/json' ); if ( ! in_array( $headers_content_type , $allow_type ) ) $is_filterable = FALSE; return $is_filterable; } function get_headers_list_content_type() { $headers = headers_list(); //there is no header to check if ( ! is_array( $headers ) || count ( $headers ) < 1 ) return FALSE; $found = preg_grep('/^Content-Type\s?:.*/i', $headers); if ( ! is_array ( $found ) || count ( $found ) < 1 ) return FALSE; reset( $found ); $header_field = $headers[ key( $found ) ]; $header_field = preg_replace('/Content-Type\s?:/i', '', $header_field); $header_field = trim ( $header_field ); $header_field_parts = explode(";", $header_field); $header_content_type = trim( $header_field_parts[0] ); return $header_content_type; } /** * Get available themes * * @param mixed $args */ function get_themes( $args = array() ) { global $wp_theme_directories; $defaults = array( 'errors' => false, 'allowed' => null, 'blog_id' => 0 ); $args = wp_parse_args( $args, $defaults ); // Register the default theme directory root if ( ! is_array ( $wp_theme_directories ) || count( $wp_theme_directories ) < 1 ) register_theme_directory( get_theme_root() ); $theme_directories = search_theme_directories(); if ( count( $wp_theme_directories ) > 1 ) { // Make sure the current theme wins out, in case search_theme_directories() picks the wrong // one in the case of a conflict. (Normally, last registered theme root wins.) $current_theme = get_stylesheet(); if ( isset( $theme_directories[ $current_theme ] ) ) { $root_of_current_theme = get_raw_theme_root( $current_theme ); if ( ! in_array( $root_of_current_theme, $wp_theme_directories ) ) $root_of_current_theme = WP_CONTENT_DIR . $root_of_current_theme; $theme_directories[ $current_theme ]['theme_root'] = $root_of_current_theme; } } if ( empty( $theme_directories ) ) return array(); if ( is_multisite() && null !== $args['allowed'] ) { $allowed = $args['allowed']; if ( 'network' === $allowed ) $theme_directories = array_intersect_key( $theme_directories, WP_Theme::get_allowed_on_network() ); elseif ( 'site' === $allowed ) $theme_directories = array_intersect_key( $theme_directories, WP_Theme::get_allowed_on_site( $args['blog_id'] ) ); elseif ( $allowed ) $theme_directories = array_intersect_key( $theme_directories, WP_Theme::get_allowed( $args['blog_id'] ) ); else $theme_directories = array_diff_key( $theme_directories, WP_Theme::get_allowed( $args['blog_id'] ) ); } return $theme_directories; } /** * Parse available themes headers * */ function parse_themes_headers( $all_templates ) { foreach( $all_templates as $directory => $theme_data) { $theme_style_path = trailingslashit( $theme_data['theme_root']) . $theme_data['theme_file']; if ( ! file_exists( $theme_style_path )) continue; $theme_headers = $this->get_theme_headers( $theme_style_path ); $all_templates[$directory]['headers'] = $theme_headers; } return $all_templates; } function get_theme_headers($stylesheet_path) { $file_headers = array( 'Name' => 'Theme Name', 'ThemeURI' => 'Theme URI', 'Description' => 'Description', 'Author' => 'Author', 'AuthorURI' => 'Author URI', 'Version' => 'Version', 'Template' => 'Template', 'Status' => 'Status', 'Tags' => 'Tags', 'TextDomain' => 'Text Domain', 'DomainPath' => 'Domain Path', ); $theme_headers = get_file_data( $stylesheet_path, $file_headers, 'theme' ); return $theme_headers; } /** * Return if a theme is child or not * * @param mixed $theme_slug * @param mixed $all_themes */ function is_child_theme($theme_slug, $all_themes) { $theme_data = $all_themes[$theme_slug]; if( isset($theme_data['headers']['Template']) && !empty($theme_data['headers']['Template'])) return TRUE; return FALSE; } /** * Return main theme directory slug * * @param mixed $theme_slug * @param mixed $all_themes */ function get_main_theme_directory($theme_slug, $all_themes) { $theme_data = $all_themes[$theme_slug]; $theme_directory = $theme_slug; if( isset($theme_data['headers']['Template']) && !empty($theme_data['headers']['Template'])) { $theme_directory = $theme_data['headers']['Template']; } return $theme_directory; } /** * Recreate a url from a parsed array * * @param mixed $parts */ function build_parsed_url( $parse_url ) { $url = (isset($parse_url['scheme']) ? "{$parse_url['scheme']}:" : '') . ((isset($parse_url['user']) || isset($parse_url['host'])) ? '//' : '') . (isset($parse_url['user']) ? "{$parse_url['user']}" : '') . (isset($parse_url['pass']) ? ":{$parse_url['pass']}" : '') . (isset($parse_url['user']) ? '@' : '') . (isset($parse_url['host']) ? "{$parse_url['host']}" : '') . (isset($parse_url['port']) ? ":{$parse_url['port']}" : '') . (isset($parse_url['path']) ? "{$parse_url['path']}" : '') . (isset($parse_url['query']) ? "?{$parse_url['query']}" : '') . (isset($parse_url['fragment']) ? "#{$parse_url['fragment']}" : ''); return $url; } /** * Init the cache directory where static files will be saved * */ function init_cache_dir() { if ( ! is_dir( WPH_CACHE_PATH ) ) { wp_mkdir_p( WPH_CACHE_PATH ); } } /** * Clear the cache content * */ function cache_clear() { do_action('wp-hide/before_cache_clear'); $this->rrmdir( WPH_CACHE_PATH, TRUE ); do_action('wp-hide/after_cache_clear'); } /** * Clear any cache plugins * */ function site_cache_clear() { if (function_exists('wp_cache_clear_cache')) wp_cache_clear_cache(); if (function_exists('w3tc_flush_all')) w3tc_flush_all(); if (function_exists('opcache_reset') && ! ini_get( 'opcache.restrict_api' ) ) @opcache_reset(); if ( function_exists( 'rocket_clean_domain' ) ) rocket_clean_domain(); if (function_exists('wp_cache_clear_cache')) wp_cache_clear_cache(); global $wp_fastest_cache; if ( method_exists( 'WpFastestCache', 'deleteCache' ) && !empty( $wp_fastest_cache ) ) $wp_fastest_cache->deleteCache(); //If your host has installed APC cache this plugin allows you to clear the cache from within WordPress if (function_exists('apc_clear_cache')) apc_clear_cache(); //WPEngine if ( class_exists( 'WpeCommon' ) ) { if ( method_exists( 'WpeCommon', 'purge_memcached' ) ) WpeCommon::purge_memcached(); if ( method_exists( 'WpeCommon', 'clear_maxcdn_cache' ) ) WpeCommon::clear_maxcdn_cache(); if ( method_exists( 'WpeCommon', 'purge_varnish_cache' ) ) WpeCommon::purge_varnish_cache(); } if (class_exists('Cache_Enabler_Disk') && method_exists('Cache_Enabler_Disk', 'clear_cache')) Cache_Enabler_Disk::clear_cache(); } /** * Recursivelly remove all fodlers and files within a directory * * @param mixed $dir */ function rrmdir( $dir, $xclude_parent = FALSE ) { if (is_dir($dir)) { $objects = scandir($dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype($dir."/".$object) == "dir") $this->rrmdir($dir."/".$object); else unlink ($dir."/".$object); } } reset($objects); if($xclude_parent !== TRUE) rmdir($dir); } } /** * Dirty check if a specified caller is in the backtrace debug list * * @param mixed $type * @param mixed $name */ function _is_caller_in_backtrace( $elements ) { $stack = debug_backtrace(); foreach ( $stack as $stack_item ) { $elements_seek = $elements; foreach ( $elements as $key => $value ) { if ( isset( $stack_item[ $key ] ) && $stack_item[ $key ] == $value ) unset( $elements_seek[$key]); } if ( count ( $elements_seek ) < 1 ) return TRUE; } return FALSE; } function get_ad_banner() { ob_start(); ?>

www.wp-hide.com

 

PRO Read more

 

https://www.wp-hide.com/

PK1\J?<<include/update.class.phpnuW+Awph = &$wph; $this->_run(); } private function _run() { $version = isset($this->wph->settings['version']) ? $this->wph->settings['version'] : 1; //make sure the WPH_VERSION constant is being defined, //this issue occoured in version 1.3.9 //We set this for 1.3.9 as this is the code version whcih included the issue, all other version include the correnct data if(!defined('WPH_VERSION') && defined('WPH_MULOADER') && version_compare($version, '1.3.9', '<=')) { define('WPH_VERSION', '1.3.9'); //attempt to copy over the new version of wp-hide-loader.php WPH_functions::copy_mu_loader( TRUE ); } if (version_compare($version, WPH_CORE_VERSION, '<')) { $_trigger_flush_rules = FALSE; if(version_compare($version, '1.1', '<')) { //structure and settings fields where changed since v1.1 if( isset($this->wph->settings['module_settings']['rewrite_new_theme_path']) ) { $module_settings = $this->wph->settings['module_settings']; $this->wph->settings['module_settings'] = array(); foreach($module_settings as $key => $value) { if(strpos($key, 'rewrite_') !== FALSE && strpos($key, 'rewrite_') == 0) $key = substr($key, 8); if(strpos($key, 'general_') !== FALSE && strpos($key, 'general_') == 0) $key = substr($key, 8); if(strpos($key, 'admin_') !== FALSE && strpos($key, 'admin_') == 0) $key = substr($key, 6); $key = trim($key); if(empty($key)) continue; $this->wph->settings['module_settings'][$key] = $value; } } $version = '1.1'; } if(version_compare($version, '1.3', '<')) { //flush rules $_trigger_flush_rules = TRUE; $version = '1.3'; } if(version_compare($version, '1.3.2', '<')) { //flush rules $_trigger_flush_rules = TRUE; $version = '1.3.2'; } if(version_compare($version, '1.3.2.2', '<')) { if(isset($this->wph->settings['module_settings']['remove_version']) && $this->wph->settings['module_settings']['remove_version'] == "yes") { $this->wph->settings['module_settings']['styles_remove_version'] = 'yes'; $this->wph->settings['module_settings']['scripts_remove_version'] = 'yes'; unset($this->wph->settings['module_settings']['remove_version']); } $version = '1.3.2.2'; } /** * Create the environment file */ if(version_compare($version, '1.4', '<')) { //copy over the new mu-loader version WPH_functions::copy_mu_loader( TRUE ); $_trigger_flush_rules = TRUE; $version = '1.4'; } /** * Update the environment file and mu loader */ if(version_compare($version, '1.4.1', '<')) { //copy over the new mu-loader version WPH_functions::copy_mu_loader( TRUE ); $version = '1.4.1'; } if(version_compare($version, '1.4.2', '<')) { $_trigger_flush_rules = TRUE; $version = '1.4.2'; } if(version_compare($version, '1.4.4', '<')) { //copy over the new mu-loader version WPH_functions::copy_mu_loader( TRUE ); //remove previous rules from .htaccess file to use the new block type if($this->wph->server_htaccess_config === TRUE) { $home_path = $this->wph->functions->get_home_path(); $htaccess_file = $home_path . DIRECTORY_SEPARATOR . '.htaccess'; //check if .htaccess file exists and is writable if( $this->wph->functions->is_writable_htaccess_config_file( $htaccess_file )) { $markers = array( 'start' => '#START - WP Hide & Security Enhancer', 'end' => '#END - WP Hide & Security Enhancer' ); $this->wph->functions->clean_with_markers( $htaccess_file, $markers); } } $_trigger_flush_rules = TRUE; $version = '1.4.4'; } if(version_compare($version, '1.4.4.2', '<')) { $_trigger_flush_rules = TRUE; $version = '1.4.4.2'; } if(version_compare($version, '1.4.4.4', '<')) { //copy over the new mu-loader version WPH_functions::copy_mu_loader( TRUE ); $_trigger_flush_rules = TRUE; $version = '1.4.4.4'; } if(version_compare($version, '1.4.7', '<')) { $_trigger_flush_rules = TRUE; $version = '1.4.7'; } if(version_compare($version, '1.4.7.8', '<')) { if(isset($this->wph->settings['module_settings']['remove_html_new_lines']) && $this->wph->settings['module_settings']['remove_html_new_lines'] == "yes") { $this->wph->settings['module_settings']['remove_html_new_lines'] = 'all'; } $version = '1.4.7.8'; } if(version_compare($version, '1.4.8.3', '<')) { //copy over the new mu-loader version WPH_functions::copy_mu_loader( TRUE ); $version = '1.4.8.3'; } if(version_compare($version, '1.5.6.6', '<')) { $_trigger_flush_rules = TRUE; $version = '1.5.6.6'; } if(version_compare($version, '1.5.8.8', '<')) { //copy over the new mu-loader version WPH_functions::copy_mu_loader( TRUE ); $version = '1.5.8.8'; //Attempt to remove the router/environment.php file if ( file_exists ( WPH_PATH . '/router/environment.php') ) @unlink( WPH_PATH . '/router/environment.php' ); } //check for triggered flush rules if ( $_trigger_flush_rules === TRUE ) { //on plugin inline code update if(isset($_GET['action']) && $_GET['action'] == 'activate-plugin') add_action('shutdown', array($this, 'flush_rules') , -1); else add_action('wp_loaded', array($this, 'flush_rules') , -1); } //Always generate the environment file $this->wph->set_static_environment_file(); //clear teh site cache $this->wph->functions->site_cache_clear(); //save the last code version $this->wph->settings['version'] = WPH_CORE_VERSION; $this->wph->functions->update_settings($this->wph->settings); } } /** * Regenerate rewrite rules * */ function flush_rules() { /** WordPress Misc Administration API */ require_once(ABSPATH . 'wp-admin/includes/misc.php'); /** WordPress Administration File API */ require_once(ABSPATH . 'wp-admin/includes/file.php'); flush_rewrite_rules(); } } ?>PK1\p@N}S}S!include/admin-interface.class.phpnuW+Awph = &$wph; $this->functions = new WPH_functions(); } function _render($interface_name) { $this->screen_slug = sanitize_text_field($_GET['page']); $this->tab_slug = isset($_GET['component']) ? sanitize_text_field($_GET['component']) : FALSE; //identify the module by slug $this->module = $this->functions->get_module_by_slug($this->screen_slug); if(empty($this->tab_slug) && $this->module->use_tabs === true ) { //get the first component foreach($this->module->components as $module_component) { if( ! $module_component->title) continue; $this->tab_slug = $module_component->id; break; } } $this->_load_interface_data(); $this->_generate_interface_html(); } function _load_interface_data() { $this->module_settings = $this->functions->filter_settings( $this->module->get_module_settings($this->tab_slug )); $this->interface_data = $this->module->get_interface_data(); } function _generate_interface_html() { ?>

interface_data['title'] ?>

functions->get_ad_banner(); $this->show_recovery(); if( $this->module->use_tabs === true ) $this->_generate_interface_tabs(); ?>
interface_data['handle_title'])) { ?>

interface_data['handle_title'] ?>

module_settings as $module_setting) { $this->_generate_module_html( $module_setting ); } ?>
 

 

wph->get_setting_value( $option_name, $module_setting ); $is_advanced = ! empty ( $module_setting['advanced_option'] ) ? TRUE : FALSE; $hide_advanced = ( $is_advanced && ( $value == 'no' || empty ( $value ) )) ? TRUE : FALSE; ?>

$option_title) { ?>

There is no help available for this option.

?wph-recovery=functions->get_recovery_code() ?>

PK1\s#11"include/module.component.class.phpnuW+Aid = $this->get_component_id(); $this->title = $this->get_component_title(); global $wph; $this->wph = $wph; $this->module_settings = $this->get_module_settings(); } function get_component_id() { if($this->get_component_title() === FALSE) return FALSE; return sanitize_title($this->get_component_title()); } function get_component_title() { return FALSE; } function get_module_settings() { return array(); } } ?>PK1\H@mminclude/wph.class.phpnuW+Afunctions = new WPH_functions(); $plugin_data = $this->functions->get_plugin_data( WPH_PATH . '/wp-hide.php', $markup = true, $translate = true ); define('WPH_CORE_VERSION', $plugin_data['Version']); if(!defined('WPH_CACHE_PATH')) define('WPH_CACHE_PATH', WP_CONTENT_DIR . '/cache/wph/' ); if(!defined('WPH_URL')) define('WPH_URL', plugins_url() . '/wp-hide-security-enhancer' ); } function init() { $this->settings = $this->functions->get_settings(); //set the urls_replacement priority blocks $this->urls_replacement['high'] = array(); $this->urls_replacement['normal'] = array(); $this->urls_replacement['low'] = array(); $this->get_default_variables(); //set whatever the server use htaccess or web.config configuration file $this->functions->set_server_type(); //check for interface submit if(is_admin() && isset($_POST['wph-interface-nonce'])) { $this->doing_interface_save = TRUE; } //check if WPEngine if ( getenv('IS_WPE') == "1" || getenv('IS_WPE_SNAPSHOT') == "1" ) $this->disable_filters = TRUE; //check for permalink issues $this->custom_permalinks_applied = $this->functions->rewrite_rules_applied(); $this->_load_modules(); $this->is_initialised = TRUE; do_action('wp-hide/is_initialised'); //check for recovery link run if(isset($_GET['wph-recovery'])) $this->functions->do_recovery(); //check for reset setings if(is_admin() && isset($_POST['reset-settings'])) { $this->doing_reset_settings = TRUE; $this->disable_filters = TRUE; } $this->_modules_components_run(); //handle the compatibility $this->plugins_themes_compatibility(); $this->add_default_replacements(); //check for plugin update $this->update(); /** * Filters */ add_action( 'activated_plugin', array($this, 'activated_plugin'), 999, 2 ); //change any links within email message add_filter('wp_mail', array($this, 'apply_for_wp_mail') , 999); //process redirects add_action('wp_redirect', array($this, 'wp_redirect') , 999, 2); //hijack a redirect on permalink change add_action('admin_head', array($this, 'permalink_change_redirect') , 999, 2); add_action('logout_redirect', array($this, 'logout_redirect') , 999, 3); //check if force 404 error add_action('init', array($this, 'check_for_404')); add_action('admin_menu', array($this, 'admin_menus')); add_action('admin_init', array($this, 'admin_init'), 11); //make sure to clear cache files on certain actions add_action("after_switch_theme", array($this->functions, 'cache_clear')); //rebuild and change uppon settings modified add_action('wph/settings_changed', array($this, 'settings_changed')); //create the static file which contain different environment variables which will be used on router add_action('wph/settings_changed', array($this, 'set_static_environment_file'), 999); //create the static file which contain different environment variables which will be used on router add_action('admin_init', array($this, 'environment_check'), 999); add_action('admin_init', array($this, 'mu_loader_check'), 999); //apache //add_filter('mod_rewrite_rules', array($this, 'mod_rewrite_rules'), 999); if($this->server_htaccess_config === TRUE) add_filter('flush_rewrite_rules_hard', array($this, 'flush_rewrite_rules_hard'), 999); //IIS7 server add_filter('iis7_url_rewrite_rules', array($this, 'iis7_url_rewrite_rules'), 999); //on switch theme add_action('switch_theme', array($this, 'switch_theme')); //admin notices add_action( 'admin_notices', array(&$this, 'admin_notices')); add_action( 'network_admin_notices', array(&$this, 'admin_notices')); //ensure the media urls are being saved using default WordPress urls add_action( 'save_post', array($this, 'save_post'), 999 ); //restart the buffering if already outputed. This is usefull for plugin / theme update iframe add_action('admin_print_footer_scripts', array($this, 'admin_print_footer_scripts'), -1); //prevent the buffer processing if not filterable available add_filter( 'wp-hide/ignore_ob_start_callback', array($this, 'ignore_ob_start_callback'), 999 ); } /** * Update wrapper * */ function update() { //check for update from older version include_once(WPH_PATH . '/include/update.class.php'); new WPH_update(); } /** * Load modules * */ function _load_modules() { $module_files = glob(WPH_PATH . "/modules/module-*.php"); foreach ($module_files as $filename) { $path_parts = pathinfo($filename); include_once(WPH_PATH . '/modules/' . $path_parts['basename']); $module_name = str_replace('module-' , '', $path_parts['filename']); $module_class_name = 'WPH_module_' . $module_name; $module = new $module_class_name; //action available for mu-plugins do_action('wp-hide/loaded_module', $module); $interface_menu_data = $module->get_interface_menu_data(); $menu_position = $interface_menu_data['menu_position']; $this->modules[$menu_position] = $module; } //sort the modules array ksort($this->modules); //filter available for mu-plugins $this->modules = apply_filters('wp-hide/loaded_modules', $this->modules); } /** * Runt the components of loaded modules * */ function _modules_components_run() { foreach($this->modules as $module) { //process the module fields $module_settings = $this->functions->filter_settings( $module->get_module_settings(), TRUE ); usort($module_settings, array($this->functions, 'array_sort_by_processing_order')); if($this->disable_filters || $this->custom_permalinks_applied === FALSE || !is_array($module_settings) || count($module_settings) < 1) continue; foreach($module_settings as $module_setting) { $field_id = $module_setting['id']; $saved_field_value = isset($this->settings['module_settings'][ $field_id ]) ? $this->settings['module_settings'][ $field_id ] : ''; $_class_instance = isset($module_setting['class_instance']) ? $module_setting['class_instance'] : $module; //ignore callbacks if permalink is turned OFF if($this->functions->is_permalink_enabled()) { $_callback = isset($module_setting['callback']) ? $module_setting['callback'] : ''; $_callback_arguments = isset($module_setting['callback_arguments']) ? $module_setting['callback_arguments'] : ''; if(empty($_callback)) $_callback = '_init_' . $field_id; if (method_exists($_class_instance, $_callback) && is_callable(array($_class_instance, $_callback))) $processing_data[] = $this->_run_component_callback( $_callback, $_callback_arguments, $_class_instance, $saved_field_value ); } //action available for mu-plugins do_action('wp-hide/module_settings_process', $field_id, $saved_field_value, $_class_instance, $module); } } } /** * Retrieve the rewrite results from component * */ private function _run_component_callback( $_callback, $_callback_arguments, $_class_instance, $saved_field_value) { if ( ! empty($_callback_arguments) && is_array($_callback_arguments) && count($_callback_arguments) > 0 ) $module_processing_data = call_user_func_array( array($_class_instance, $_callback), array_merge( array( 'field_value' => $saved_field_value), $_callback_arguments)); else $module_processing_data = call_user_func(array($_class_instance, $_callback), $saved_field_value); return $module_processing_data; } /** * run on admin_init action * */ function admin_init() { //check for settings reset if($this->doing_reset_settings === TRUE) { $this->functions->do_reset_settings(); } //check for interface submit if($this->doing_interface_save === TRUE) { $this->functions->process_interface_save(); } //crete required additional folders $this->functions->init_cache_dir(); } function admin_print_styles() { wp_enqueue_style( 'tipsy.css', WPH_URL . '/assets/css/tipsy.css'); wp_register_style('WPHStyle', WPH_URL . '/assets/css/wph.css'); wp_enqueue_style( 'WPHStyle'); } function admin_print_scripts() { wp_enqueue_script( 'jquery'); wp_register_script('wph', WPH_URL . '/assets/js/wph.js'); wp_enqueue_script('jquery.tipsy.js', WPH_URL . '/assets/js/jquery.tipsy.js' ); // Localize the script with new data $translation_array = array( 'reset_confirmation' => __('Are you sure to reset all settings? All options will be removed. Manual remove of rewrite lines is required if no access from php', 'wp-hide-security-enhancer') ); wp_localize_script( 'wph', 'wph_vars', $translation_array ); wp_enqueue_script( 'wph'); } function admin_menus() { include_once(WPH_PATH . '/include/admin-interface.class.php'); $this->admin_interface = new WPH_interface(); $hookID = add_menu_page('WP Hide', 'WP Hide', 'manage_options', 'wp-hide'); foreach($this->modules as $module) { $interface_menu_data = $module->get_interface_menu_data(); $hookID = add_submenu_page( 'wp-hide', 'WP Hide', $interface_menu_data['menu_title'], 'manage_options', $interface_menu_data['menu_slug'], array($this->admin_interface,'_render')); add_action('admin_print_styles-' . $hookID , array($this, 'admin_print_styles')); add_action('admin_print_scripts-' . $hookID , array($this, 'admin_print_scripts')); } } function admin_notices() { global $wp_rewrite; do_action('wp-hide/admin_notices'); if ( getenv('IS_WPE') == "1" || getenv('IS_WPE_SNAPSHOT') == "1" ) { echo "

WP Hide ". __("Your server run on WPEngine which works on Nginx rewrite rules, please check with WP Hide PRO version at", 'wp-hide-security-enhancer') .' WP-Hide PRO

'; } if ( is_multisite() ) { echo "

WP Hide ". __("This plugin version can't handle MultiSite environment, please check with WP Hide PRO version at", 'wp-hide-security-enhancer') . ' WP-Hide PRO

'; } if(! $this->functions->is_muloader()) { echo "

WP Hide ". __('Unable to launch WP Hide through mu-plugins/wp-hide-loader.php
Please make sure this location is writable so the plugin create the required file.', 'wp-hide-security-enhancer') ."

"; } //check if mu loader is up to date if( $this->functions->is_muloader() && defined( 'WPH_MULOADER_VERSION' ) && version_compare( WPH_MULOADER_VERSION, '1.3.4', '<' ) && !isset($this->maintenances['mu_loader']) ) { echo "

WP Hide ". __('Unable to update the /mu-plugins/wp-hide-loader.php
Please make sure the file is writable so the plugin create the required file.', 'wp-hide-security-enhancer') ."

"; } //check if the MU loader was succesfully updated if( $this->functions->is_muloader() && defined( 'WPH_MULOADER_VERSION' ) && version_compare( WPH_MULOADER_VERSION, '1.3.4', '<' )) { //attempt to copy the new version $status = WPH_functions::copy_mu_loader(); if ( $status === FALSE ) echo "

WP Hide ". __('Unable to update the mu-plugins/wp-hide-loader.php
Please manually copy the file from', 'wp-hide-security-enhancer') ." " . WPH_PATH . 'router/wp-hide-loader.php ' . __('to', 'wp-hide-security-enhancer') . " " . WPMU_PLUGIN_DIR ."/

"; } //check for permalinks enabled if (!$this->functions->is_permalink_enabled()) { echo "

WP Hide ". __('Permalink is required to be turned ON for WP Hide & Security Enhancer to work', 'wp-hide-security-enhancer') ."

"; } if($this->server_htaccess_config === FALSE && $this->server_web_config === FALSE) { echo "

". __("WP Hide This plugin version can't handle this server type, please check with PRO version at", 'wp-hide-security-enhancer') . ' WP-Hide PRO

'; } //check if the htaccess file is not writable if(isset($this->settings['write_check_string']) && !empty($this->settings['write_check_string'])) { $_write_check_string = $this->functions->get_write_check_string(); if(empty($_write_check_string) || $_write_check_string != $this->settings['write_check_string']) { if($this->server_htaccess_config === TRUE) echo "

WP Hide ". __('Unable to write custom rules to your .htaccess. Is this file writable?
No changes are being applied.', 'wp-hide-security-enhancer') ."

"; if($this->server_web_config === TRUE) echo "

WP Hide ". __('Unable to write custom rules to your web.config. Is this file writable?
No changes are being applied.', 'wp-hide-security-enhancer') ."

"; } } //check if the cache dir is available if(! is_writable( WPH_CACHE_PATH )) { echo "

WP Hide ". __('Unable to create cache folder. Is the wp-content writable?
No cache data will be available.', 'wp-hide-security-enhancer') ."

"; } if(isset($_GET['reset_settings'])) { echo "

WP Hide ". __('All Settings where restored to default', 'wp-hide-security-enhancer') ."

"; $this->functions->settings_changed_check_for_cache_plugins(); } if(isset($_GET['settings_updated'])) { //check for interface save processing errors $process_interface_save_errors = get_transient( 'wph-process_interface_save_errors' ); $found_warnings = FALSE; $found_errors = FALSE; if( is_array($process_interface_save_errors) && count($process_interface_save_errors) > 0) { foreach ( $process_interface_save_errors as $process_interface_save_error ) { if($process_interface_save_error['type'] === 'warning') $found_warnings = TRUE; if($process_interface_save_error['type'] === 'error') $found_errors = TRUE; } } if( $found_errors === FALSE ) echo "

". __('Settings saved', 'wp-hide-security-enhancer') ."
" . __('Remember, site cache clear is required.', 'wp-hide-security-enhancer') ."

"; if( is_array($process_interface_save_errors) && count($process_interface_save_errors) > 0) { //display the warnings if( $found_warnings === TRUE ) { echo "

"; foreach ( $process_interface_save_errors as $process_interface_save_error ) { if($process_interface_save_error['type'] == 'warning') { echo $process_interface_save_error['message'] .'
'; } } echo "

"; } //display the errors if( $found_errors === TRUE ) { echo "

"; foreach ( $process_interface_save_errors as $process_interface_save_error ) { if($process_interface_save_error['type'] == 'error') { echo $process_interface_save_error['message'] .'
'; } } echo "

"; } } $this->functions->settings_changed_check_for_cache_plugins(); } if(isset($_GET['wph_cache_clear']) && $_GET['wph_cache_clear'] == 'true') { $this->functions->cache_clear(); echo "

". __('Cache cleared', 'wp-hide-security-enhancer') ."

"; } //output any other errors message $process_errors = get_option( 'wph-process_set_static_environment_errors' ); if ( is_array( $process_errors ) && count ( $process_errors ) > 0 ) { $found_warnings = FALSE; $found_errors = FALSE; if( is_array($process_errors ) && count($process_errors ) > 0) { foreach ( $process_errors as $process_interface_save_error ) { if($process_interface_save_error['type'] === 'warning') $found_warnings = TRUE; if($process_interface_save_error['type'] === 'error') $found_errors = TRUE; } } //display the warnings if( $found_warnings === TRUE ) { echo "

"; foreach ( $process_errors as $process_interface_save_error ) { if($process_interface_save_error['type'] == 'warning') { echo $process_interface_save_error['message'] .'
'; } } echo "

"; } //display the errors if( $found_errors === TRUE ) { echo "

"; foreach ( $process_errors as $process_interface_save_error ) { if($process_interface_save_error['type'] == 'error') { echo $process_interface_save_error['message'] .'
'; } } echo "

"; } } } /** * Buffer Callback. This is the place to replace all data * * @param mixed $buffer */ function ob_start_callback( $buffer ) { if($this->disable_ob_start_callback === TRUE) return $buffer; $response_headers = array(); if ( empty ( $buffer ) ) { //attempt to change the headers urls if(function_exists('apache_response_headers')) { $response_headers = apache_response_headers(); } else { if ( ! is_null ($this->functions) ) $response_headers = $this->functions->parseRequestHeaders(); } if ( ! is_null ($this->functions) ) $this->functions->update_headers ( array ( 'Location' ) , $response_headers ); return $buffer; } //check for xml content tupe $headers_content_type = array(); if ( ! is_null ( $this->functions ) ) $headers_content_type = $this->functions->get_headers_list_content_type(); if ( in_array( $headers_content_type , array( 'text/xml' ) ) && ! is_null ( $this->functions ) ) { //do only url replacements $replacement_list = $this->functions->get_replacement_list(); //replace the urls $buffer = $this->functions->content_urls_replacement($buffer, $replacement_list ); //if html comments remove is on, run a regex $option_remove_html_comments = $this->functions->get_module_item_setting( 'remove_html_comments' ); if ( ! empty ( $option_remove_html_comments ) && $option_remove_html_comments == 'yes' ) $buffer = WPH_module_general_html::remove_html_comments( $buffer ); return $buffer; } //provide a filter to disable the replacements if ( apply_filters('wp-hide/ignore_ob_start_callback', FALSE, $buffer) === TRUE ) return $buffer; //check headers fir content-encoding if(function_exists('apache_response_headers')) { $response_headers = apache_response_headers(); } else { $response_headers = $this->functions->parseRequestHeaders(); } if(isset($response_headers['Content-Encoding']) && $response_headers['Content-Encoding'] == "gzip") { //Decodes the gzip compressed buffer $decoded = @gzdecode($buffer); if($decoded === FALSE || $decoded == '') return $buffer; $buffer = $decoded; } //retrieve the replacements list $replacement_list = $this->functions->get_replacement_list(); //replace the urls $buffer = $this->functions->content_urls_replacement($buffer, $replacement_list ); //check for redirect header and make updates if(isset($response_headers['Location'])) { $header_value = $response_headers['Location']; $new_header_value = $this->functions->content_urls_replacement($header_value, $replacement_list ); if($header_value != $new_header_value) { header_remove("Location"); header( 'Location: ' . $new_header_value ); } } $buffer = apply_filters( 'wp-hide/ob_start_callback', $buffer ); if(isset($response_headers['Content-Encoding']) && $response_headers['Content-Encoding'] == "gzip") { //compress the buffer $buffer = gzencode($buffer); } return $buffer; } /** * Ignore the buffer processing if the content is not filterable by header content type * * @param mixed $ignore */ function ignore_ob_start_callback( $ignore ) { $is_filterable = $this->functions->is_filterable_content_type(); if ( $is_filterable === FALSE ) $ignore = TRUE; return $ignore; } /** * check for any query and headers change * */ function check_for_404() { if(!isset($_GET['wph-throw-404'])) return; global $wp_query; $wp_query->set_404(); status_header(404); add_action('request', array($this, 'change_request'), 999); add_action('parse_request', array($this, 'change_parse_request'), 999); remove_action( 'template_redirect', 'redirect_canonical' ); remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 ); } /** * Modify the request data to allow a 404 error page to trigger * * @param mixed $query_vars */ function change_request($query_vars) { return array(); } function change_parse_request( $object ) { $object->request = NULL; $object->matched_rule = NULL; $object->matched_query = NULL; $object->query_vars['error'] = 404; } /** * The plugin always need to load first to ensure filters are loading before anything else * */ function activated_plugin($plugin, $network_wide) { if($network_wide) { $active_plugins = get_site_option( 'active_sitewide_plugins', array() ); //$active_plugins = get_site_option( 'active_sitewide_plugins', array() ); return; } $active_plugins = (array) get_option( 'active_plugins', array() ); if(count($active_plugins) < 2) return; $plugin_path = 'wp-hide-security-enhancer/wp-hide.php'; $key = array_search( $plugin_path, $active_plugins ); if($key === FALSE || $key < 1) return; array_splice ( $active_plugins, $key, 1 ); array_unshift ( $active_plugins, $plugin_path ); update_option( 'active_plugins', $active_plugins ); } function wp_redirect($location, $status) { if( $this->uninstall === TRUE || $this->disable_filters || $this->custom_permalinks_applied === FALSE ) return $location; //do not replace 404 pages global $wp_the_query; if(!is_object($wp_the_query)) return $location; if($wp_the_query->is_404()) return $location; $location = $this->functions->content_urls_replacement($location, $this->functions->get_replacement_list() ); /** * Check if register link for to apply the replacement * Unfortunate the default WordPress link does not contain a beginning backslash to make a replacement match in functions->content_urls_replacement */ if(preg_match("/(wp-login.php|checkemail=registered)/i", $location)) { $updated_slug = $this->functions->get_module_item_setting('new_wp_login_php' , 'admin'); if ( ! empty( $updated_slug )) $location = str_replace('wp-login.php', $updated_slug, $location); } $location = apply_filters('wp-hide/wp_redirect', $location); return $location; } /** * Update arbitrary url with new data * * @param mixed $url */ function url_replace( $url ) { $url = $this->functions->content_urls_replacement($url, $this->functions->get_replacement_list() ); return $url; } function logout_redirect($redirect_to, $requested_redirect_to, $user) { $new_wp_login_php = $this->functions->get_module_item_setting('new_wp_login_php' , 'admin'); if (empty( $new_wp_login_php )) return $redirect_to; $redirect_to = str_replace('wp-login.php', $new_wp_login_php, $redirect_to); return $redirect_to; } function generic_string_replacement($text) { $text = $this->functions->content_urls_replacement($text, $this->functions->get_replacement_list() ); return $text; } function get_setting_value($setting_name, $module_setting ) { $setting_value = isset($this->settings['module_settings'][$setting_name]) ? $this->settings['module_settings'][$setting_name] : $module_setting['default_value']; //if radio input and value is empty, use default if ( empty ( $setting_value ) && $module_setting['input_type'] == 'radio' ) { $setting_value = $module_setting['default_value']; } return $setting_value; } function settings_changed() { //allow rewrite flush_rewrite_rules(); $this->functions->site_cache_clear(); } /** * Create a staitc file which contain specific variables and will be used in router * */ function set_static_environment_file( $force_create = FALSE ) { $this->enironment_checked = TRUE; include_once(WPH_PATH . '/include/class.environment.php'); $WPH_Environment = new WPH_Environment(); if ( $WPH_Environment->is_correct_environment() ) return; $WPH_Environment->write_environment(); } function get_rewrite_rules( ) { $rules = ""; if($this->uninstall === TRUE) return $rules; $write_check_string = isset($this->settings['write_check_string']) ? $this->settings['write_check_string'] : ''; if ( empty ( $write_check_string ) ) return $rules; $processing_data = $this->get_components_rules(); //post-process the htaccess data $_rewrite_data = array(); $_page_refresh = FALSE; foreach($processing_data as $response) { if(isset($response['rewrite']) && !empty($response['rewrite'])) { $_rewrite_data[] = $response['rewrite']; } if(isset($response['page_refresh']) && $response['page_refresh'] === TRUE) $_page_refresh = TRUE; } $rules .= "#WriteCheckString:" . $write_check_string . "\n"; $rules .= "RewriteRule .* - [E=HTTP_MOD_REWRITE:On]"; if(count($_rewrite_data) > 0) { foreach($_rewrite_data as $_htaccess_data_line) { $rules .= "\n" . $_htaccess_data_line; } } $rules = apply_filters('wp-hide/mod_rewrite_rules', $rules); $home_root = parse_url(home_url()); if ( isset( $home_root['path'] ) ) $home_root = trailingslashit($home_root['path']); else $home_root = '/'; $rules = " \n" . "RewriteEngine On \n" . "RewriteBase ". $home_root ." \n" . $rules . "\n" . " \n"; return $rules; } /** * Maintain Environment file * */ function environment_check( $force_check = FALSE ) { if ( $this->enironment_checked === TRUE ) return; include_once(WPH_PATH . '/include/class.environment.php'); $WPH_Environment = new WPH_Environment(); if ( $WPH_Environment->is_correct_environment() ) return; $WPH_Environment->write_environment(); } /** * Check if the mu-loader is deployed and up to date * * @param mixed $continue */ function mu_loader_check() { if ( $this->functions->is_muloader() === FALSE ) { $status = $this->functions->copy_mu_loader(); if ( $status ) $this->maintenances['mu_loader'] = TRUE; return; } if ( $this->functions->is_muloader() && version_compare( WPH_MULOADER_VERSION, '1.3.4', '<' ) ) { $status = $this->functions->copy_mu_loader( TRUE ); if ( $status ) $this->maintenances['mu_loader'] = TRUE; } } function flush_rewrite_rules_hard( $continue ) { $home_path = $this->functions->get_home_path(); $htaccess_file = $home_path . DIRECTORY_SEPARATOR . '.htaccess'; //check if .htaccess file exists and is writable if( ! $this->functions->is_writable_htaccess_config_file( $htaccess_file )) return TRUE; $rules = $this->get_rewrite_rules(); //check if there's a # BEGIN WordPress and # END WordPress markers or create those to ensude plugin rules are put on top of Wordpress ones $file_content = file( $htaccess_file ); if( count( preg_grep("/.*# BEGIN WordPress.*/i", $file_content) ) < 1 && count( preg_grep("/.*# END WordPress.*/i", $file_content) ) < 1 ) { $this->functions->insert_with_markers_on_top( $htaccess_file, 'WordPress', '' ); } $this->functions->insert_with_markers_on_top( $htaccess_file, 'WP Hide & Security Enhancer', $rules, 'top' ); return TRUE; } function get_components_rules() { $processing_data = array(); //loop all module settings and run the callback functions foreach($this->modules as $module) { $module_settings = $this->functions->filter_settings( $module->get_module_settings(), TRUE ); //sort by processing order usort($module_settings, array($this->functions, 'array_sort_by_processing_order')); if(is_array($module_settings) && count($module_settings) > 0) foreach($module_settings as $module_setting) { $field_id = $module_setting['id']; $saved_field_value = isset( $this->settings['module_settings'][ $field_id ]) ? $this->settings['module_settings'][ $field_id ] : ''; $_class_instance = isset($module_setting['class_instance']) ? $module_setting['class_instance'] : $module; $_callback = isset($module_setting['callback_saved']) ? $module_setting['callback_saved'] : ''; if(empty($_callback)) $_callback = '_callback_saved_' . $field_id; if (method_exists($_class_instance, $_callback) && is_callable(array($_class_instance, $_callback))) { $module_mod_rewrite_rules = call_user_func(array($_class_instance, $_callback), $saved_field_value); $module_mod_rewrite_rules = apply_filters('wp-hide/module_mod_rewrite_rules', $module_mod_rewrite_rules, $_class_instance); $processing_data[] = $module_mod_rewrite_rules; } } } return $processing_data; } function iis7_url_rewrite_rules( $wp_rules ) { $home_path = get_home_path(); $web_config_file = $home_path . 'web.config'; //delete all WPH rules $this->iis7_delete_rewrite_rules($web_config_file); if($this->uninstall === TRUE) return $wp_rules; $processing_data = $this->get_components_rules(); //post-process the htaccess data $_rewrite_data = array(); $_page_refresh = FALSE; foreach($processing_data as $response) { if(isset($response['rewrite']) && !empty($response['rewrite'])) { $_rewrite_data[] = $response['rewrite']; } if(isset($response['page_refresh']) && $response['page_refresh'] === TRUE) $_page_refresh = TRUE; } $write_check_string = time() . '_' . mt_rand(100, 99999); $this->settings['write_check_string'] = $write_check_string; $this->functions->update_settings($this->settings); //add a write stricng $_writestring_rule = ' '; array_unshift($_rewrite_data, $_writestring_rule); $this->iis7_add_rewrite_rule( $_rewrite_data, $web_config_file ); return $wp_rules; } /** * Add a rewrite rule within specified file * * @param mixed $filename */ function iis7_add_rewrite_rule( $rules, $filename ) { if (!is_array($rules) || count($rules) < 1) return false; if ( ! class_exists( 'DOMDocument', false ) ) { return false; } // If configuration file does not exist then we create one. if ( ! file_exists($filename) ) { $fp = fopen( $filename, 'w'); fwrite($fp, ''); fclose($fp); } $doc = new DOMDocument(); $doc->preserveWhiteSpace = false; if ( $doc->load($filename) === false ) return false; $xpath = new DOMXPath($doc); // Check the XPath to the rewrite rule and create XML nodes if they do not exist $xmlnodes = $xpath->query('/configuration/system.webServer/rewrite/rules'); if ( $xmlnodes->length > 0 ) { $rules_node = $xmlnodes->item(0); } else { $rules_node = $doc->createElement('rules'); $xmlnodes = $xpath->query('/configuration/system.webServer/rewrite'); if ( $xmlnodes->length > 0 ) { $rewrite_node = $xmlnodes->item(0); $rewrite_node->appendChild($rules_node); } else { $rewrite_node = $doc->createElement('rewrite'); $rewrite_node->appendChild($rules_node); $xmlnodes = $xpath->query('/configuration/system.webServer'); if ( $xmlnodes->length > 0 ) { $system_webServer_node = $xmlnodes->item(0); $system_webServer_node->appendChild($rewrite_node); } else { $system_webServer_node = $doc->createElement('system.webServer'); $system_webServer_node->appendChild($rewrite_node); $xmlnodes = $xpath->query('/configuration'); if ( $xmlnodes->length > 0 ) { $config_node = $xmlnodes->item(0); $config_node->appendChild($system_webServer_node); } else { $config_node = $doc->createElement('configuration'); $doc->appendChild($config_node); $config_node->appendChild($system_webServer_node); } } } } //append before other rules $ref_node = $xpath->query('/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wordpress\')] | /configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'WordPress\')]'); foreach($rules as $rule) { $rule_fragment = $doc->createDocumentFragment(); $rule_fragment->appendXML($rule); if($ref_node->length > 0) $rules_node->insertBefore($rule_fragment, $ref_node->item(0)); else $rules_node->appendChild($rule_fragment); } $doc->encoding = "UTF-8"; $doc->formatOutput = true; saveDomDocument($doc, $filename); return true; } /** * Delete all wph rules within specified filename * * @param mixed $filename */ function iis7_delete_rewrite_rules( $filename ) { if ( ! file_exists($filename) ) return true; if ( ! class_exists( 'DOMDocument', false ) ) { return false; } $doc = new DOMDocument(); $doc->preserveWhiteSpace = false; if ( $doc -> load($filename) === false ) return false; $xpath = new DOMXPath($doc); $rules = $xpath->query('/configuration/system.webServer/rewrite/rules/rule[starts-with(@name,\'wph\')]'); if ( $rules->length > 0 ) { foreach($rules as $child) { $parent = $child->parentNode; $parent->removeChild($child); } $doc->formatOutput = true; saveDomDocument($doc, $filename); } return true; } function get_default_variables() { $this->default_variables['include_url'] = trailingslashit( site_url() ) . WPINC; $this->default_variables['template_url'] = get_bloginfo('template_url'); $this->default_variables['stylesheet_uri'] = get_stylesheet_directory_uri(); $this->default_variables['plugins_url'] = plugins_url(); $wp_upload_dir = wp_upload_dir(); $this->default_variables['upload_url'] = $wp_upload_dir['baseurl']; //catch the absolute siteurl in case wp folder is different than domain root $this->default_variables['wordpress_directory'] = ''; $this->default_variables['content_directory'] = ''; //content_directory $content_directory = str_replace(ABSPATH, "", WP_CONTENT_DIR); $content_directory = str_replace( '\\', '/', $content_directory ); $content_directory = trim($content_directory, '/ '); $this->default_variables['content_directory'] = '/' . $content_directory; $home_url = defined('WP_HOME') ? WP_HOME : get_option('home'); $home_url = untrailingslashit($home_url); //stripp the protocols to ensure there's no difference from home_ur to site_url $home_url = str_replace(array('http://', 'https://', 'http://www.', 'https://www.'), '', $home_url); $siteurl = defined('WP_HOME') ? WP_SITEURL : get_option('siteurl'); $siteurl = untrailingslashit($siteurl); //stripp the protocols to ensure there's no difference from home_ur to site_url $siteurl = str_replace(array('http://', 'https://', 'http://www.', 'https://www.'), '', $siteurl); $wp_directory = str_replace($home_url, "" , $siteurl); $wp_directory = trim(trim($wp_directory), '/'); if($wp_directory != '') { $this->default_variables['wordpress_directory'] = '/' . trim($wp_directory, '/'); } //used across modules $home_root = parse_url(home_url()); if ( isset( $home_root['path'] ) ) $home_root_path = trailingslashit($home_root['path']); else $home_root_path = '/'; $this->default_variables['site_relative_path'] = $home_root_path; //$this->default_variables['site_relative_path'] = rtrim ( $this->functions->get_url_path( rtrim( $siteurl, '/' ), FALSE, FALSE), '/' ); if ( empty ( $this->default_variables['site_relative_path'] ) ) $this->default_variables['site_relative_path'] = '/'; //themes url $this->templates_data['themes_url'] = trailingslashit( get_theme_root_uri() ); $all_templates = $this->functions->get_themes(); $all_templates = $this->functions->parse_themes_headers($all_templates); $stylesheet = get_option( 'stylesheet' ); $this->templates_data['use_child_theme'] = $this->functions->is_child_theme($stylesheet, $all_templates); $main_theme_directory = $this->functions->get_main_theme_directory($stylesheet, $all_templates); $this->templates_data['main'] = array(); $this->templates_data['main']['folder_name'] = $main_theme_directory; $this->templates_data['_template_' . $main_theme_directory] = 'main'; if($this->templates_data['use_child_theme']) { $this->templates_data['child'] = array(); $this->templates_data['child']['folder_name'] = $stylesheet; $this->templates_data['_template_' . $stylesheet] = 'child'; } } /** * Apply new changes for e-mail content too * * @param mixed $atts */ function apply_for_wp_mail($atts) { if ( isset ($atts['message'] ) ) $atts['message'] = $this->functions->content_urls_replacement($atts['message'], $this->functions->get_replacement_list() ); return $atts; } /** * Add default Url Replacements * */ function add_default_replacements() { do_action('wp-hide/add_default_replacements', $this->urls_replacement); } function switch_theme() { $this->disable_filters = TRUE; $this->get_default_variables(); //allow rewrite flush_rewrite_rules(); $this->disable_filters = FALSE; } function permalink_change_redirect() { $screen = get_current_screen(); if(empty($screen)) return; if($screen->base != "options-permalink") return; //recheck if the permalinks where sucesfully saved $this->custom_permalinks_applied = $this->functions->rewrite_rules_applied(); //ignore if permalinks are available if($this->custom_permalinks_applied === FALSE) return; $new_location = trailingslashit( site_url() ) . "wp-admin/options-permalink.php"; if($this->functions->is_permalink_enabled()) { $new_admin_url = $this->functions->get_module_item_setting('admin_url' , 'admin'); if(!empty($new_admin_url)) $new_location = trailingslashit( site_url() ) . $new_admin_url . "/options-permalink.php"; } $new_location .= '?settings-updated=true'; //no need to redirect if it's on the same path $request_uri = $_SERVER['REQUEST_URI']; $new_location_uri = $this->functions->get_url_path($new_location, TRUE); if($request_uri == $new_location_uri) return; wp_redirect( $new_location ); die(); } /** * General Plugins and Themes compatibility Handle * */ function plugins_themes_compatibility() { include_once( WPH_PATH . '/include/class.compatibility.php' ); $compatibility_handler = new WPH_Compatibility(); } /** * Revert back the files urls to default WordPress * * @param mixed $post_id */ function save_post( $post_id ) { if ( wp_is_post_revision( $post_id ) ) return; global $wpdb; //raw retrieve the post data $mysql_query = $wpdb->prepare( "SELECT * FROM " . $wpdb->posts . " WHERE ID = %d", $post_id ); $post_data = $wpdb->get_row( $mysql_query ); $replacement_list = $this->functions->get_replacement_list(); //reverse the list $replacement_list = array_flip($replacement_list); //replace the urls $post_content = $this->functions->content_urls_replacement($post_data->post_content, $replacement_list ); //if there's a difference, update if ( $post_content != $post_data->post_content ) { $mysql_query = $wpdb->prepare( " UPDATE " . $wpdb->posts . " SET post_content = %s WHERE ID = %d", $post_content, $post_id); $result = $wpdb->get_results( $mysql_query ); } } /** * Restart the bufering if turned off already * */ function admin_print_footer_scripts() { if ( ob_get_level() < 1 ) ob_start( array($this, 'ob_start_callback')); } function log_save($text) { $myfile = fopen(WPH_PATH . "/debug.txt", "a") or die("Unable to open file!"); $txt = $text . "\n"; fwrite($myfile, $txt); fclose($myfile); } } ?>PK1\0include/class.compatibility.phpnuW+Awph = $wph; $this->functions = new WPH_functions(); $this->init(); } function init() { /** * General */ include_once(WPH_PATH . 'compatibility/general.php'); //w3-cache compatibility handle include_once(WPH_PATH . 'compatibility/w3-cache.php'); WPH_conflict_handle_w3_cache::init(); //super-cache compatibility handle include_once(WPH_PATH . 'compatibility/super-cache.php'); WPH_conflict_handle_super_cache::init(); //BuddyPress handle include_once(WPH_PATH . 'compatibility/buddypress.php'); WPH_conflict_handle_BuddyPress::init(); //WP Fastest Cache handle include_once(WPH_PATH . 'compatibility/wp-fastest-cache.php'); WPH_conflict_handle_wp_fastest_cache::init(); //WP Rocket include_once(WPH_PATH . 'compatibility/wp-rocket.php'); WPH_conflict_handle_wp_rocket::init(); //WooCommerce include_once(WPH_PATH . 'compatibility/woocommerce.php'); WPH_conflict_handle_woocommerce::init(); //WPML include_once(WPH_PATH . 'compatibility/wpml.php'); WPH_conflict_handle_wpml::init(); //WooGlobalCart include_once(WPH_PATH . 'compatibility/woo-global-cart.php'); WPH_conflict_handle_wgc::init(); //ShortPixel Adaptive Images include_once(WPH_PATH . 'compatibility/shortpixel-adaptive-images.php'); WPH_conflict_shortpixel_ai::init(); //WebArx include_once(WPH_PATH . 'compatibility/webarx.php'); WPH_conflict_webarx::init(); //WPS Hide Login include_once(WPH_PATH . 'compatibility/wps-hide-login.php'); WPH_conflict_wps_hide_login::init(); //Hummingbird include_once(WPH_PATH . 'compatibility/wp-hummingbird.php'); WPH_conflict_handle_hummingbird::init(); //Autoptimize include_once(WPH_PATH . 'compatibility/autoptimize.php'); //Easy Digital Downloads include_once(WPH_PATH . 'compatibility/easy-digital-downloads.php'); //Fusion Builder include_once(WPH_PATH . 'compatibility/fusion-builder.php'); //Elementor include_once(WPH_PATH . 'compatibility/fusion-builder.php'); //Cache Enabler include_once(WPH_PATH . 'compatibility/cache-enabler.php'); //WP Smush include_once(WPH_PATH . 'compatibility/wp-smush.php'); //ShortCode Image Optimizer include_once(WPH_PATH . 'compatibility/shortpixel-image-optimiser.php'); /** * Themes */ $theme = wp_get_theme(); if( ! $theme instanceof WP_Theme ) return FALSE; $compatibility_themes = array( 'avada' => 'avada.php', 'divi' => 'divi.php', 'woodmart' => 'woodmart.php' ); if (isset( $theme->template ) ) { foreach ( $compatibility_themes as $theme_slug => $compatibility_file ) { if ( strtolower( $theme->template ) == $theme_slug || strtolower( $theme->display( 'Name' ) ) == $theme_slug ) { include_once(WPH_PATH . 'compatibility/themes/' . $compatibility_file ); } } } do_action('wph/compatibility/init'); } } ?>PK1\;0WWWscreenshot-2.pngnuW+APK1\Dt˟assets/images/warning.pngnuW+APK1\&&assets/images/computer.pngnuW+APK1\A;&;&assets/js/jquery.tipsy.jsnuW+APK1\H8 8 `assets/js/wph.jsnuW+APK1\{vv assets/css/tipsy.cssnuW+APK1\(?""assets/css/wph.cssnuW+APK1\5 7readme.txtnuW+APK1\ncmu-loader/wp-hide-loader.phpnuW+APK1\O=22&languages/wp-hide-security-enhancer.ponuW+APK1\ h&languages/wp-hide-security-enhancer.monuW+APK1\'Mmodules/module-general.phpnuW+APK1\DDPmodules/module-cdn.phpnuW+APK1\:cbbmodules/module-rewrite.phpnuW+APK1\SR٧33&modules/components/general-headers.phpnuW+APK1\oo=++' modules/components/rewrite-comments.phpnuW+APK1\ʜ %Lmodules/components/general-oembed.phpnuW+APK1\X  $Zmodules/components/rewrite-slash.phpnuW+APK1\N~>~>-vmodules/components/admin-new_wp_login_php.phpnuW+APK1\ɇZs(еmodules/components/general-admin-bar.phpnuW+APK1\!2$2$%modules/components/rewrite-search.phpnuW+APK1\\|11.Amodules/components/rewrite-wp_content_path.phpnuW+APK1\ڇ+1+1/(&modules/components/rewrite-new_include_path.phpnuW+APK1\ɿ#Wmodules/components/general-meta.phpnuW+APK1\p٭5R5R.modules/components/rewrite-new_plugin_path.phpnuW+APK1\c#WWmodules/components/general-feed.phpnuW+APK1\"Vl}EE&qmodules/components/general-wpemoji.phpnuW+APK1\2#&modules/components/general-html.phpnuW+APK1\ed(X!X!%o%modules/components/rewrite-author.phpnuW+APK1\s˳gg(Gmodules/components/rewrite-json-rest.phpnuW+APK1\)mMmM&'modules/components/admin-admin_url.phpnuW+APK1\"՝f.f..modules/components/rewrite-new_upload_path.phpnuW+APK1\;*`&+modules/components/general-scripts.phpnuW+APK1\pQQ/Cmodules/components/rewrite-new_xml-rpc-path.phpnuW+APK1\@t(Q)modules/components/general-robots-txt.phpnuW+APK1\j  modules/components/cdn-setup.phpnuW+APK1\/qq-modules/components/rewrite-new_theme_path.phpnuW+APK1\ '((&Ȫ modules/components/rewrite-default.phpnuW+APK1\Lځ77)F modules/components/rewrite-root-files.phpnuW+APK1\}.%.%%I modules/components/general-styles.phpnuW+APK1\6  Yo modules/module-admin.phpnuW+APK1\RNN x composer.jsonnuW+APK1\A  J| wp-hide.phpnuW+APK1\  ,H compatibility/shortpixel-adaptive-images.phpnuW+APK1\Hz compatibility/webarx.phpnuW+APK1\į^^ compatibility/elementor.phpnuW+APK1\mylּ: compatibility/autoptimize.phpnuW+APK1\Yl l C compatibility/w3-cache.phpnuW+APK1\  compatibility/wps-hide-login.phpnuW+APK1\j  compatibility/woocommerce.phpnuW+APK1\~)3! compatibility/woo-global-cart.phpnuW+APK1\<`/ /  compatibility/wpml.phpnuW+APK1\ 1Mw compatibility/cache-enabler.phpnuW+APK1\k" compatibility/wp-fastest-cache.phpnuW+APK1\o$   compatibility/wp-smush.phpnuW+APK1\lD7D7 compatibility/wp-rocket.phpnuW+APK1\h5%%( compatibility/general.phpnuW+APK1\v*TT,: compatibility/shortpixel-image-optimiser.phpnuW+APK1\0;$A compatibility/wp-simple-firewall.phpnuW+APK1\ys ^ compatibility/themes/divi.phpnuW+APK1\}l compatibility/themes/avada.phpnuW+APK1\)i))!r compatibility/themes/woodmart.phpnuW+APK1\Y܊  (iw compatibility/easy-digital-downloads.phpnuW+APK1\Ժmuu&؁ compatibility/js/wp_simple_firewall.jsnuW+APK1\ۤr compatibility/buddypress.phpnuW+APK1\>  compatibility/fusion-builder.phpnuW+APK1\ 3>>  compatibility/wp-hummingbird.phpnuW+APK1\Ůt compatibility/super-cache.phpnuW+APK1\sWWo screenshot-1.pngnuW+APK1\ЖZrouter/file-process.phpnuW+APK1\ nR'R'router/class.file-processor.phpnuW+APK1\!zXI I +include/module.class.phpnuW+APK1\UV))8include/class.environment.phpnuW+APK1\Wf  ainclude/functions.class.phpnuW+APK1\J?<<pinclude/update.class.phpnuW+APK1\p@N}S}S!?include/admin-interface.class.phpnuW+APK1\s#11" include/module.component.class.phpnuW+APK1\H@mminclude/wph.class.phpnuW+APK1\0B%include/class.compatibility.phpnuW+APKOOy<