server/php/basic/resources/library/utilsFunctions.php
author ymh <ymh.work@gmail.com>
Fri, 15 Jul 2016 11:43:58 +0200
changeset 630 d9d61a673599
parent 442 adb907bba956
permissions -rw-r--r--
Added tag V00.12.20 for changeset 2d916332faf4

<?php

/**
 * Generates version 4 UUIDs
 * from https://github.com/ramsey/uuid/blob/2.8/src/Uuid.php
 * and http://stackoverflow.com/a/2040279
 *
 * @return string
 */
function genUuid4() {

    if (function_exists('openssl_random_pseudo_bytes')) {
        $bytes = openssl_random_pseudo_bytes(16);
    }
    else {
        $bytes = '';
        mt_srand(crc32(serialize([microtime(true), 'USER_IP', 'ETC'])));
        for ($i = 1; $i <= $length; $i++) {
            $bytes = chr(mt_rand(0, 255)) . $bytes;
        }
    }


    $bytes[6] = chr(ord($bytes[6]) & 0x0f | 0x40); // set version to 0100
    $bytes[8] = chr(ord($bytes[8]) & 0x3f | 0x80); // set bits 6-7 to 10

    return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($bytes), 4));
}


/**
 * get page self url
 * from http://stackoverflow.com/a/2236887
 */
function strleft($s1, $s2) { return substr($s1, 0, strpos($s1, $s2)); }
function selfURL()
{
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
    $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s;
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'];
}

function selfBaseURL()
{
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
    $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s;
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.dirname($_SERVER['REQUEST_URI']);
}
/F..0OVGӟ"@F0EtGHh67(lEull\z)&y1#P$Fa_6^&U[7MhN~vMv><9֫Qrkz;`6H}GoF|XKptF+1!P-cOG?~FF3yE jn|Qg)hyM^>>9mjGy*b:x,LQ\F_=מ"䆔W J01 ^jFYEy\ոZF/-Ceskۊ(|<<\ͮg_}b5|Α2B,y9`67g_'*( ܇R.!4D!"1]G'iUU#43<#N4tke{< .SPyYG06ib |@{̂%d|рE苌2>Nϓs#`OH֎$N/~P҆dO4OIlͱF<7U|qQrԑb [!IlI#WtE3OhFOzitEԼ -,^SfEmGqyoR#S`QE$"3 '?ތvw`4#m}Gy,=<Rod-ɔrj*i[A%;މ"3H)]4/am_(to2墾Yhj#"ΉFfZQ grڍb $8N^Es责P38ףCr':dqrz:XX:ӈ4uwFIs]H=ʡ*ȼ&3M$M۪D_uuQgGE㞎bi7S?X=SO=:Ή\}~0 t^Qb+WфCK)~Vm62k('FsT*j yfb 4y;TdJ4(l+D":lPQ~FGIFKq3h$PpP؋4'y,""ETЦL0*2PJ?(iE8h"],"5EQ`d8QQ{ l8zP2?x9(WZx8X9ĊU]葥t9"p*fE$rcQ^EDDc%lD"9LMjm+Ͳ,%4NƱV_9r() sgŤ{EF#b3ZQ[#;ew9M;܂1Eu"Q a@$#sCOa B捒=(R-l βsx]0Š쎏amB;"zyi70#E?̆eC}j{+dQ"7b5ԛOumGi(!}Qȴ^tCPFKaWCb;Fv# ?2踚kUpLF5V hmTH69!Q!"3J<?j444bY.! 0(CAuQ4)nFIj*|L&Q=CrCa/Qj㿟{Z>3j#!FUXy3T\*1h7]iN{2FP.vݵo}hهWƆE7Y%tC:e>uM:Y0ЈtBDc u$7E0Hpz8XPqVd"FhV&"\єQ ]U `{4R7H+ԫhʢ0HQEu ?<_ YPihtgE,h _jno2d2E5$/y'|3ul"esg2C !npF U~'Ezע sQL;&Aϙ|B#TN}%VދѪEeb47hd@C3;TLUՉEm6Žhnv5p= J3ߒ)U[ºёErݕ*%JnE! |ٔ1#"ҡt؉*X۔! ZJzܛ+BVF5"I\G܎KDb=jQU{rMB35A`(ܫj;|G!УiF کthÍ>h#bK!|*dN<:(J}]E_OZŢr[QeF 8h!{Mﶉj%Jʚ,"[QEG5?G :_@l⢗jQ&K,̡|PxE'9!Tz;(G52@#>/#,vԉ5,rt6|E)~* Ggw#TZ 8TDZw% R'?QM7ވL:xJ#L;_ TV'Ha-*z'+u&j)")x{$@@$ 0^k/M9d|>ϭ8NJ_Y{)۸i@ƪi(@)ZͰラ}:kīI3۴8}{K>`>ɧ>ǏNu(ڨ"k^}}sԍ_UQ;}h%}m|o lH}x|#Wa^(+pO;Mz.9>rAѳb*3aa(Ȁ@kt]]^w;>gn9qsc׳Au3x]˰r:ipѽˆf}̩֋_go{8{=)3CCvmy۾uٕkyӣv){>נhk,j ך^ﵦ8o]ҟ;ufggOp^Zk+fg;qnպT-+t]7wsܙ=V^fe5ݗ8뫽H+l4=wfm54Sht:P-ѡWWwۧ0nKJsr&q{hsVm}Ow<<\cCw]N̝w4Ӥ >=׾殽[zO޶Z[糷]rw}TϵQZo @@TSڧjLA   HDB!FIM' A02dL&F!(IQ%=Oʟ'OTz~zM44hzOT4*zOSG m %$  iz0iJbQ" y4i(jt-[!ajj$cVC]P&&J7JTMLŰ[30fVŸUݠ)!YURS?$^ !GU~|:-4zh䇸 VhS-a ijjfl,Tf&ԧ!8Ӓ QdH@%TeJ`%jꢾU@BӲG ϧIoMpa`7NgL#`܊Big(Hr=({nKep *M^ҽ{hK(`Qv괟ѥq!Siƨ^T ң)4\³v[4s5\mxz%ەu/ HeI=U' }6ٶZTfZK66XT.{Y94E@E13~غuX CPic6iS- vrs_,mNtqχrB? =;Z)Z|gFqH;*mk)Q1 1,lI/28fy~*5xmf87ӭWX5mӍAHJ,bMP-dc{SZ#ufNJεY"ԚK1@HBw[4JVĭ2o2&ptҸ/CltfvɎ|}j\r0@\E.96Wmmll,f xR%3 J$jȆ%65[Ee4W*Js薑MgDQ)V@yD=+t@lfMu Ic. էV D=Jh6ƋcTQ&5Bm+eq& W`׌;K:2EϤ=v^j#\άuqq\OFαR@;Pmv M3XP3ty]hvO]LV,ѻ)YF12M&̩Lo:T&L9j baꊿ=k/8|)y:\-3ΉKINdP}PK ρyUdqFp#rfeAXB Wgi\ʰ;D,`fRXz92Jd- |xuT; sB"bj+V?@h:Nky.:Gdț 1RnH!}JO\$2LY4ƧD2Jmcpf&~JB;{KPMNgQ.I$NF]I܊QIF*S߼:oA]C})-)P?C6j1RŎ`~ r*c<+Y5O>8m=:ur 茎u$mL edA8M8 50!t >/-[m B/RXU{׉W-2G'N]^2&'dyOܪR"Y&w9ώs0S&Mΐ,P` IY zIgM,I_w1;JSEeqfkmt-kGW[tń q}8/!^Q8pD*(CKk;v}h$F.ݣcL7>VϡItTt(q`AXC4*ߴh g~}]2*|J2'ӈ'mH3noJ 4I 75Q 'Mn|sKbyV$5Ϲv FM9;4DP`%I*K܆ۧ\sا{Г'JGEJ5$N j&ZNZ%9 2Wy:%DŽ*8'{tܞ>\{ 6Adۥ+=P^/b =s)L{%R9])U鈞JvRogΚWd7aG@w٣ (r!XGRmkjr.TqOi5qnAӱ m{LrqLRfϠu+Acy|t =1* j=Bpn/HשH*P-D*4vfIFT5)V)%rXI@l%awTskPȲCZds9o#y'nFoӤrHXřδ4̬7@*)$eP`تJ 0k%d/QK}} Cq'n{b 8%]s [¬Z)ua  I 9j22s& ĂPX XM`ShAS4uܨckͬJ_|$3j]?^yn5Tl3K ;3{ճxEɛ !X`JQQ;T+, -B6YAȐv%FH)JdErj^"n@y1=@~Xs)!B,Ho `RM rGpU,Ihr1!`kڥNþ ԁv:d.,K&Kmm|;0>R~eFڬ,F2ZIZyR<1ZZX@"W4mz}qĨ!ֲU̘I"GC5}CNmpn6;SQ Q=UNvVZ5jqbm}zfP%I] X{["XbB|ݪkL.IS e%E^<!XBR (ѝ~WcIdsDh+. e@ɢ W-g\SGٴGI,,½]rMĒOP6a//jխ=J]!)@6vᄏظ2gT%jݷp%"ܬRY|YRFx6ҹ{Y*bĜ=1sjTM^C<Lg̳Wb+-ޫXY 5oŪ|,BC:r[4k!gc4.] S/1oYC5cR{ 5(%{ε Uñ>,k+ $n>[-F͈ TKmzk^,uKq Mؑ<-upԈ3pսkk3PF,IfAZx3!7w})pRBZ*ء6\+3md3]ށeY *3rhևuǴ$-;gɹSL\օ6B&w5N %XJ(ATT C. fKc|Ԏ*nnrgc9^0L.ZNS%ӯ=3)HCߕjn*Tb.Appj%IC޸i^q̍4_" #;bH>z sm \^/r |=LmS]qnu%ub삵S t…4 (gխp@"FY  J R@>>ʊ糥Ă2n=% VYH0^鯯̇u844M5ry#4tVJ_F֮RF/) §aMS9elk0\HL䣃#LLC!%idff^$^&~dr`r$y/~crd5 @s*`!b.!)!֠n P`􃜅SSA>$.!pj jrAt{(%#3*j?a}ta7"^$bk .!wԠ0䊤`VF v<gԍ 6lWąt?5dyڙmV%R׻~!?=sP52QL#)1>}̑b~&љ"F 0L +p"d95sOĝ1<>%_zOcQ7ZJ*,"JD.O<+T(+jº!UE&HavŜ6E `nLȒgMW&--RurڍLd<*Ö3z&gHq^=T[ҕnF)dU-]|e,*ؼWyQ\G}qh;ǔhG PaY'(v)j >nx~gS;qɄNxhǓ[MMq4HoZ4E؊4sZ4QWO;tsc^~~3tȠxKcz↔fb[XӡìaR^)ܫYUmE^$w|C&LcM4hhCEߑp8%*rNQR .G#,32%&UhѫVgBtF* O'*L/&%'<ILN䓰};'!쩉2uQɍшcAN#]Ak-f"ZZ_\L+j1}jءOh5JiJqg_#M]5t/F=NVzW M/I=V:m_#5wINY9sۦ9З|BYzľ6 3vWJ.%_ G*䮎.9ן[_^illHPXh.(QTYUUEfTDr , !0 ZA~_ܑ~FI+?態kZ1eYԴUTrIu)U~]!jKE1@C.(ĭ\lkFb$F1V6-S @ **wPiK#YW7 :Tuux9 2{IvPmPJ6Ѭ;|".AbBa% %I#48TmPB0b4m+t'bsGY U/q4sgd;#f,΄ulױ'~!gؓ%"O)g5mgIp6UkM^rx'I.NaHWٴLjc74skUOb&sL = h̨::d=qoO"gUԯhJ>Jw9]OG.4Lƛ)k|rוGXGGb8YI"di!ʪѥi5U2hɣ&dhei1ZMFEIDfafafafafaf&YfYeeQE"1c1R)JR)JLc35,-̍+,2122deda2024df1iLS )AIL)fPR̦R2h)(bEe2c@K.d`6%Q6Xh#mZiVVح6k5,S&5fjkK[4Mɒ֛ 4 ٤ٴT)3hƳ FZ5EQj5QiUmL XQP!&A`Vմ m2BX,U`m2m3iLFmRX1ܒؤaWe(S"4e%8NemEAObhFն3E6,fUz唭XQ]kۅ˛j[nY ӻr"PnX& pA6΃5HR`)bA`@')Eeo!E!EB""̊l !EQB ,QEB""" hf)z:Ih,cB l#$4QQBD!h5Ɗ4b4Q  0lcV 1a b,b51h6ɣ]ɹԚRj1`MQh4hˮ1-Il""(5&ԚRj I5&Ԛ5&Ԛ1I"!hƌUI$1ݻsAijkbeSt\J!,"jB ,lBbbfڛ6좊;kN_B}M(9"9G2pD6G Hy#7]!t! AwZr1s1RU _ 2Tj%faBF!ƥ?i+=m9=떶log#4ʭ5jzԫ#{?#w_MyK>?>^G#̰yh-?dߟ&LykמMV{ xV?շν$8!1t?9wQ&@ ۅb$E_kcq=O_7Z:ҞOin@gjlX1\e%Ēd$GS8~K+ڱH@66t-stC?EZx~:V6(CWec ꧅W\tӦF>Z\&!LRՂ ס25pX&bÃvWr(b:H4-:0Ab4$WFSOZ$+6zӆmȐOw Px(}Hj1,KQ22Đtxzyq9iWdQ{5lmxbtj(sFmF"g▭IO IIs紟+?' "OwX&'iWD^XD./@"yYܥOQQBBny.R.jҮ? Lx[LꎯiՋE4۵nw۬;jt)~*k9UebŪm=/is=7wݾ}=6>$뇕_;p:][g_\ /uC }GBJ3IE$$!-$SaTbMzj J@0rlrW%:tBhg_ zX>t41rW?5S?_o? 8'O '`>ߥ-} !?>ˎW&]12f4UFIJvuzAq1\Ηֶ0[IF7ç=E]l{ϊS\ڔL琴( i&MCMoGǺ1}{:Mx/z$<\oJ=5֔\.uI!#X[f)xyH'YTAÆ;QEPvvEu;DjNZNHӱGXv#*ױmI}bHc"?K~G.yh=hGhƱ0NC!!!qI'i;bN䘟 '{N=v#Gr6Fr:w&'8M b{NEUvD !Czq۶)}{}>%m%%&SrjM櫥'7K껪[)+KWKTiZ5&\ذ8"\C $R¦ JGc:tȚ0I 42KS* )a٬nN$Y2&P8@)HlEDDc9qftb2fRF$gyqp`̇$02QQKd:C9J $!3܉sw<o:FӍDcr}OĽI+NQ~Y_&XOO)Qy'ONs BtuY~SyE;?xQ$zH7Rmj?"=ay4i3}b{B0=-?ܶ#drEo9##Mp[*}H6#PEmDт4E_:gm#sWd}͑NaG@G`7{i"AOt"ZD ̝]:] RdB &'RO h jP>ӿ;[m'/ihƞ_ӯ|d>β+~1TW-TZȊD'bL:'rjzY6wКjfދ+H~za!32ׅ$ͦ|8qrᗞwd;:9JlBLLfc$)XrwuFM`ڣcp0ns[W!Ux `R˄1hgʜj X4ed2(`Kh(d4p[0edѩΓߤQOZf/ڻ{>?O:]YKMMmG<2_V"8QpaŎPt?2Cy[ (KO 2X«MCQB!Vy^Wգ,GS ݴ^rWt{Զ^t05җ}ARf8k"QDX>5jZ9sl@ðý'kZ;F(KvRCb|(N&О LO'?'<:'bw&##D`)玗4ז+ߢ5)8qM`z/zWbnjNZs X%(0ZPqbCJ#(|#3<>B5'u"5 !d=&!tώr?GȄB?hH~̟ɷ; T?KBW _G{3,*Y!C̟Q<+'{$uR5xx'yRO#ӝ |b?tڶ cr4Ouo7ݟ}VOuZЊE֟Ify܅wsvšMDhlb1r b+mTn#=z;jr*# *f GY>.XDfZ=|baX(aNȝ]%g&"("hap'lG6tlVCZ\b.ppÉqIOh 꽮cb6UA$Q5߼11nq?4 u Ѓ])7|xGiO~Vv 7hE*P1O0Б4|3voFu2`fŪ;=mGGˏӥ3yHAFʽP /*O+Ƚ"F>Tb}=s3|  cNG~.;P<i1Dk6d.3 VM,gyG7_UL36t).:^!+AuANJB8wD1aY՜z~b찅wE}:eȭk\ճq{j N7\J%1\ lExLJzV/"&ԉb c"Ԏg9/_DG5-9[ݬ4ݷw*|5-F;:Sv<Đaݯ_:ƅ|ېG٦ܥm"rsL(Y'MyV*O@(b!w|; B{ގ*DR:\6c_ːX_ZmJ20N$`(* M}ڭ8~Dt%l #KƳ't%4@y(t n_[\0g8CÓ P<$wuX}nIcgc 3[p"\K8׌/PjuR:jo!>4xўXCM[usf鯷te(+_k4Eb:9i-KMQU =Ks!;v8 8R+!4* 7Г]6ayಡd_@4]ncDAP5QEoLR|]_\RfAt{_jmYh:hS&_MܢU:^+lksGY>v+63-O89EY.-ʁWߥ8ΒjB|Jt'iyܚ8_|л뭎uiRi3*?ju.\h7~()Z6 T i(FZżV jO^n]z:S#yO?E[+FO:|Rw0̌dkj$)>0NeF̠|P`<.MVX1@.t-jsxw|e4>`E)?ٚ`d9 H j?G@DBsIdN`5!@ 1rtz˧Ft%wpmЂ?%JOo8P#{,?QfczuƮFA RKM]֮6՚flS$`!V;~f2xx-NZE!̭^!ؠLE&Ѭd)"m.!Lua1zRr#:1p;ӭxKǖ06|ON^qDI}d:ʼvjxb)MdVJ.Ҏs%GhjjhWTFS䴴C'e@|!Z(%!/Y(jPwԎi|EY.XṆߥᪧZ.jsU9VCZ]2qjSiKl#s:ȣA'LsqHq,sj:2jNiZAM*h% <,h;ds$ivմMj$>oǏ׶ۭf~쟥? ;=ޤ=OdNJ#]X '_%4Y>93+~+k\9X#?x1x$$;Dr{9lqjԌ8oSNk{Vn[_HB5P2(iJxd /?I/LO~ϔm ܶH'^ ! !~!ġ5.^ij7Gs<˳,Nw~6huyLqf̗|7p:yz&Y:wM[3 ͯ/8e(Q8OG GD& p?GS9/oݹ2ytMf׾n*|Q.^c_eKxu+Z+ i| ~E/ X+߻kb|ƲF$=X|qE-E~.`` bǤ:  ~_]};UI{[XIǹ%pi0?wo֏#v%H|߬TzApc̬kX4Q]}<~1a?M3LoD?r]:;Nq4NW~?"_?$4fK/Rq*܌x7d rf)1!#Ç&59nuhvdžI.Ṉ2DZ AĞ85~ڑSqƾXGޣ*pS?I}?7_m뫫 $_d_qǓlc3lmUO¬n &/ؿ!=W_0",~ë<7]_^OtM(/ƥ}6m㑤Q{~?Ϋ[y1ӥ['o?iY11{'&O§vؿv+y+=!o𵶴343P~U[-$$ZS)'9>mֳmh ]J~O͚ttN3Fh c !t7iBmAm"jSQ%%“eGjGhbv~阅b-?+-vU+VDžfzU\9?C5'}kt)d'w䩩iKmۥKchq;9v ']K)jZ}FP~_n^b}_d%?熗<^tixO>}Poj'ףkY[FeWk8N?J2me*MF/鬽D$KƳ<?T/''ExePOP*^i%4pnIU*(A4Gۂjy=9lK:񫶈Zͭ}g+OYC032>|ß]S6ϲ@L~-U%s<^.bc0k14a=:G[oQ=^_=EElcm6~e#AGdGxHM~qH 2wM9~5UDW:ςV{mlgWWonۻ]֌F6Lj93BFb~1*}l|cR=/,~26\H5~ñ$QϽUB|'S8xS>ɦNNI}Iju8G0ahZ10M224yFFH*2Q}ϺxJGpKG7 n`i*-ZKҬݭmvyGS\][ZnGo_Kxiiê_{6jßG#HI$nETlI$nv'?U=4h3fe}ϕ gzȓu~Oshf-VyoUD#c3 {L"dzB6lcwf['JFͩ]yMIbJCJJXcT0j1qB1 !驦u)N&;-j^F5yN6j^GL|PS@aIjcCH%P;x#£8cgd:]7NA:`+{A1,M *5 Pکq ֦z`Nɲcejq6޴+$NӱwL9UEU,oظpJpAE@LJM$t 0e%8g,E &9]GZޞ Ț7U40銕,!vJC` y48!q!$*t•ՠ c(I !c@F$9 DDG^#^ż6lI8 Ib#NgeL*l6786ǖ#M!cGJk 0NA$93`ư !$#YRF5K06>Gi\ @7&G(syRr妜ĝvz1ݪY "2ХB1qt#:R9r'é rOGER3/9<;S֦[ n*u?F'rup]A*]G͏ƕy}v]՛Bi+TO:e$ՍjEl16'>%kI)+L#hkɶdI0i6ؙ5fo^<|+oNWnp୍c4L2UO*_ioRjXSfYAҩb$0p~hUK/BNG^^zVBy=9=^+e [(\3Ud_ aE& BKlQxMtS|zm,Dב0v>1~rĖZs_o6B7p"1=`KݓQ8-AHmf[tb)]\7w6ɔCLѦjK6l.C60j)\oeydٴ<<ڬƓjljX<s~U,i-I[9]15ONv٫}Lͭ]ff`R،dmVZжmEͦ6ȐAbڢZefcTD A~D($Rŕ(\ʼT0ۄZ@HPLJvdS:vbFb$ɓbkD3l; ?>n-U~UB=`YXz ϵ RJ6C$Ţh6Ѳa6=VxL^JD HDzHuOR?AITs;AS>I:ƈ8>Ԑ>/h;5Ta}AUp {5;F_FH*Ujq5 n}$=+<|'|O>1VyݞtB}bc++1O2yW\ufcdhih@8DDlh֍C1JI1&Ds%FwùWU| Fb9 o_RRĿ>&YO|#nXUǏ|@KD-ZaH#vY=i彏]z80ІmuC:DЀ\ǂ5CJȜ'9cSgE]%wHxVj|gMI֜d!"mF.`Ķ(L Z:׮8Uwb XihRP@c#lI*D.?~Ҿm1ևw%Nb˕Oj+5/jO*童jU=*dꦉ¾ ƸWqڽ^%AGl1)쉡2 1?'\~:}zߏY ?uҶM2YotvvWleVޯO?O^HOOuH}}R}BhL8S;~ZS԰ust='ݹ_UVDӨb2rOUUL-ccT#ZjIzKcɖ&Эc&MbIk㸓|H23m'b[Pp#1$:G&Ɣ|lG[ªQUUQ<˔Of_oxnR줉| ؇ǂ|Byiٓ=aD<"9yDmCv=/5Nֺ/ "MblwU*/zc&қ~/t&?ZC?WG%vIkͱ +Z$sG]SwR'd/ q F dFZ3+ Y`j"șكGΆ$B6g=8^ƖLchW7&i,s/E4+۞'rʷwʯKO.B){(̰CA/&UY奬u]:km{O:MK#rCc5QTGĜ^N\9Dc9L$Pw69q/˗jwED5Rpܺt>=GDTuSIkf&N5Zf8`]U\r:Hk]OՔ?Sj%W$Ǿlr<-.Sݺ =ҫ;~"^-ۼ\81l,)0+Y]t%s%m[7Ztx] dx30RG988&8`VpI ԍ7LPIqWc r21p.1 ӚOlI2Ŧ*j*79z0ˮvK7N YiJxu8u*I^)WNüoGf\`.|EصD/t]/wJGKJ-*U{^~dz9 [n)Fx+S'tZnb:.' $ PO1 !>xO;RфK-&##rvG4BTو|kdC~rg|_+GX|| _`4b'0, Adʀ}8ݻN9=n62v]zۭ{jLRTeK̝JS 3BP]kL` ` TI\IG*DEPI=R⼳Pqz*r9RJ)dY'͓k5GSGQ8N#]*9Q2cĎm–^؉ΘD:0MA>sckUٌ*-]9])VeG&˜$gz'`J%&5u45 -@{)qb(.QBKI %~:*키3 c,e2. e)N0cc ,3oT9d<g&L+Ѭ^_&;9Ykz]=Bêr}ت9=u1w!c1:m`i򴭼8Q@d 66 4P{@ƌA1P͕4 D@['y>d'<̘O%b}}}xz %1rxVKm\' 13ТEmh. .a aL֡9ী:;m4+ K* l2jWLr1(J``44h32G.*M.GzYLmg%kp+wqDBwT4ίnxʕhå׮:^J@e(kޖ4(laeO<̙$IK4U Q]7! A CJªuZhXC/fY;4فY}lia@?t:wa8OYZb3b[R7U´k :sFI'La(R<]ygsFxwaf _+~{=}:w9ϊZe Z6ZZ[i [Zږd U%LHO\)UDXb{lYRвdsV1RaS<;W6YW{Rr?6ٍ%M-RL-jN_~= vbO*n^VtպWۯ )@ dj~x~'|4P*W;^=j/pY4@h# -Ctl\jpc؅Iu.gQ">OI hOK}Z {??1 /4)p(T KȶHTKx)'ܽeiZkt/]RRсkժX @E|9֕㜯C1ի1pB.Lnc9eLHD@'TV& [^ BdMO C(RP*C{sGFea§ ikKV>R c,S3i7"Gן#/NJ`{,GPYbMZrFW(6!+_S ةzPCSFd$mVҢl^FE:i(ј1;u! K;j>4pEł+\uv" O?^`)Ob A@^UձVF!!d2LC-uztc[,9ЊGQzG#@f8yhztb989GWy1ҮπZoӭ쐔$lOtDHގN5tl)xjT'OTjG{]}mc΍$™c!ԅ]'з}̃VbY MQ 4 {Z0t$$9RM`,KeS!7 oSBvcSb +4,hjfn^[Bn f¦(Z Cz)ӟ1-#PڰJ$L6 igxb1NvlǾWH@R[c5kK & 5&de$ 533P@Nj A4B婆 sYdȚ ŜM-+5AV30@BkdiA" ikeJ L&jfXfiRу: 9yP6ƕةvn(N)’)J;Qj I;29I^ J}:*Cjؙ[SKJ~ޔ&Ap$#"/ 8NpX~fX1hh(-ьcEƓM4IM#E pyұX x_êLC^͍y g-nR$oSV8S33c!0i4 'lf쑗M5%5"9c P W'9ڼ]>L9w1S)~fa89~ r#NbGmr#vf +uS`EDV `D1 >\Ѫ$HЋ9t$L[֋$&Yj@hKE_s}c11lRWJ>QO! Q3CFTQJ,J/JW'%'WW=W| 5=LZhҕi] HI$It@GoPJy#~*OBz)ߕyI{8\v춶Vӟ1z}MCbx{uP{Jy ?38cqOT=5@cPGrbk1)$ +t%EV (\4yG/Xx"='εhdi5t&22A 1,<p4HζX.ƣv 7?Pt7$ݕrб=YUiYj f5,-b,S486rb XŽr+f-_m'iTȦAFF -HU&$d&+ LLaa$UrX')͉o@)@,3EmȻG b 6.ˇ !q10c)8cFj*L |TdVU$UNpkdɭ)q$!@D0_Z_ڱc;'},("AH%VQ/ߊW\"n\?|vG^Dwj'4LVT UL[#3C2,af@4bhIDRkb3kb N`XbQ F"F +bh*S%&mRʰDeR+F 3x=؇CQ) <7ehy&*1gE켳rwfc 4 55րQE]E^a3eŤk5leDO7Ի*{}Cr=-N^ekIpmH(tTHP9 6mt.>NԊO'p*Iɡ>a1+B s}XvˡhqTN>>VUl 볧:&|j_*L';ؒ??dz ;}LC^RNa<8~XVL Xv']ݗE_!z{B#,mW|&$ ۮjd!$adCY| Ff^ڕ^@}?yV=-912~W#ēLzr2uJ6ON=Ғ{|-"lj>{1֨k:U~}T+9qkWf6)FՔvזIXlmnL293BfRͱ$¯ō#PYTXUƫH*VjCPWhM®C@ "ceP1³H*T5 ՚FW+PD@ ˆYDT q5 5)UU_C|\R_Skmg½T<Tcȫ6ȝ+ LmXʿ" Bcqٞ)ÎCiI$% CHe$gm'v_6y|DE~*]cJ?||K&N!Ȣ|5k.e#0AF9Ɗcu՜ns*&FI0YXNI9JtGXv8L*u1;hTsvGD"ph} $#q8@魵4B (#-CdtM;PTkdV?݄Dm6+R@0BmM!0Q8J)WO(  Q$@KК4mJnWFcܺ WU^yD> ж&iX4a*ѕfL͚L 3hk^|(pY}Q 3Is~>eg''?uVίO|}wG"6Ȅ1.mJ5Dm*͒/>gf⺷(ӛ5IUPg47Ttqz>y}R^^ERCҔfbn %L"ڴuk]^dkN& 4\mZ)IȄth0 i7rҭZĦi#0 zѩ{ 9N/wOȟu}*;zh1DW -Zl3ֽrҾG*IdҢc{I$&@IPn>zIDŽ|ܤ>߳}Bt%GhmXo f>3ڈO뉉FY 20OMU8Bʬp2;Dq0˻GO$~.sg.m ]]XhDiBJֆX08pcU{>1Rطr',!+ϝ]_jjZ4 l Nk'LM|D=S{O:| 8L&yD vN{8nW572e10>GgWeIS$f۫4\=>M9FjuԖ 4D&ŦE$3UfFhh q蟰~NUYG5algH%)#?/lI'ЮwL?a7x@?}&K`'IaTRʗW5l&FѣhTbɴZ1Z1ch-Fh5Qc-m61+6h5FƣQI*FѴmbشklcEZJ,Z-&ѴV6)J)JRhmEcƨ&1l[iTSL/ |QԹ~quE?j^O~H7:)A?MbcblU9}~&Z&Rg^\Rop\&\]v324p&QxYg>w#;w$zy[ҲSgڍMM5f&~"j6tdCQVEBMM&T2/$ Uq8U@Upa11#/7]YښL88 0gWү~j5GRK+TUOJ'b'ȫCwPƫV"!*CtSэ( Vj<$<ՌzM 2CˡySA scC&pL9-nc}؈#LAD#N,jHGr]Sqʧ>:hjn~*ZEƒ B[ice>9Tm$ Pթ'˹6&bucƬX ƞm .j(ʴ=̨p<%̵3ZAjGFR)>>T׹;&3#8rsUd&_}8efjruO69; Qx#SCT!}y&Q'z|Pl鐔"h 1*$J(rD)FKe Inq P,Rzh :p3q z8G C~J2dD[Z[S͢SWپicZ͍3cU?*8wUzUMH!a2!mnAfb͙;N8N0cڻrwjYl6ŊeS<~iU铋+*iW8:'3hŗnҼɉRpNMdTSK)٤ n~9Uxgx-UVf3 Vrw$vv-*LmfUmZMJhPLhڕ*&85k9o޼a:*~dTRM"<05}feQP/y [orœ[B8| GrY'oL'r>$q_f 䈃0R hcXD45PqۄC^%Yʦ60 8:/UJ ɱ#LZSk&ZT:FrVŬW/w3隳X Sb#tK/BJ;oz}zrf&bhW?N7ASĝmVțkž~x}e<+;PT=ǘOei(x=>fWo)?W%{N=ȏfl~XưWOsEg8>*hF# ̿նӭ|Қi66^<sN]8EHC){;T?_uJxr$:miI2hP/_TK׷x`*(cRz'ԄcJ;L$PCHZ ]Ґyy]sv*kWR$n^yG~rb<Ԣt*dQx7@ R }^Oҫ=҄cRF;JV8q+HXdMlʾ>0Md=p~uXeYգf;Ev*8xUDzoV(h 1c4cQm1FƍFэ5-k/q^WU:'XJ1=u.<6MN#NJWڥ9î%]JEtl ޳}mQ3L@\x% JD+bOLkZ2{'vu95zNA10th0u4 ,SZUYsifgc:; 7@l+raq$\SsS$:;H(o$x5jLBrAa;1ddM'@Щ0Fv~=`0$32r, Z0,&5Wx`/ؗ}4a$E'ǰbș <n<LeD%Qt2B wQKTKD|D יּ+}{8#AZ/AV`,  g91+۾!*6M"I0 +='6[ xNetqk>:JҜGR^#u:#HAt! aQT=+fgX@!)b·  GZ( ZMS0K*Tw^[klkZfp]s[}yZ$$e! U{_M|vF%yOr*]?'R1їV~Geʻ)WRRs w1$Z@7 'JBvK i4l'r`7zA ű) : wUUIjߔq#I&輪OJ6Za}}^@)$(\2d GgDprs$ʣ̛kԝ^ƃe/1`2]mZLbI0s~x\ +;g9rus4>$+4<-mMVUEF i6\'>^?'_vf_.)sN 22wo!+ pb&l-OEPFűbch(jq!t D1hٸc&V^k֗R-yj$\$%W oYÓ4[lDLqF%Q!uFRB5`?^'oe36R0Qfk8~͙摒rxOT+l=GWлL1Н:,Wsf> !T6͙2Ɋ%J Rr|w<8qWrL#U5rǤiyHI?Oq)7>wW5X¤<z(tH)}{V┃?TAދnh⺄cBC2zk ; @ElҚT0YzPI Gƴ.HN±rƝ}vxL|0O..pӄ>)d^ii3ILՎpspȭnD$&XH{mͲ1lIw#r0d(Pգnv ;-8a8uvqaŝU\82:tvF H W&R}PBv[j MJT\L=4 Qj'v=IZIއjzyF#zR,);kth $EצsG(uglļ~h8Ψ(O[yiz9^<HGT@#J iogM5glɸhш`_b}B1֘4bه©%6F$gD?HHpGl~=m=̰'ЌX5䣱(H_'GFwG'E] >~\B4ߪjxZaݺaNPn:\#o0DtgTdQ|`ꋊ ҝ%pNZq#9ܘb|jV; F!FUٔa3*ѝݻ6F2:C2B  \8.t?sKjLmX6eײF *94DAA302e $be!`$1mTgD}YYl0cS `̲eyy1w$D =AD"hq)'|-`հm<0Hz(aeFWOvC]:aXFl)oE2vy/HV;oD ֮;GyKnʸ3Á݈# %lfpm'R9*gsR~/ |)ZU{[3- J+T3-fOv*C=dj51% #TCj:p2љsl aV)y.Bq!`qw۽a%NzpS."@hhNrF@!q&r %!-M]kSp4FBcJyڹfD(QIzStsӫ^hFfw|cT=s"KBcхK}i8Fo(6 isILKi iSa12^=Vg<jJJ8ޞףw\=}rZQcUf/},jX2t=ѯiRupv.C9kl|0&$5zNz.UͮQFhOle4^㢟\Nm~U{j.uN:κi^dc%*'JFa)J#J@hG@!H4TK CԲn`ll[=ȏpgO {RG^:u5]qޓj*$*1h_(5ɫvCpA:=/?<V,nҴ`tm8Eۧm3r&YpPFsV8ֺnç P8 Ӧ5uKg]cJ[V)"ɉfؗ.As17T[GԎgG$d~9{IJ^ЏtMz)`MKg.'GK1iRK*\=>Y#iʕp.6RBjj!CXB͚AUA5#¬^ϐ󦞍xΩk!RvkUePGFq2AVL`tq$$ !kj&9Tck3ːejQ1ɥdm:)z%;bp?*mZmd,#$,HRJfd mըKL5U&lXkTbT,YiZ-ZYMhYfaY0ѡRllc S_ EW85;M2f;ctbcjU6֕(g q "JЏH#"ymI? '11 ,,1ffY8NT?I5G>: B}GlTbLDJf[`WӁdRD}`E02˔$ ).e -q*1T$)H#2!5d:yxy2j#C&m*tBU8 RQ,0$U>"j .=!I}$*My5Z'3ckfHv| >J~JoiTqn1VqD}U_my9q0g _B=U1kT6c{[6j|q^_wm'UeZ#VMe?/wU䜔7N=?/EVfnOKNdn}a_`W|\6)&Br5#) ! $T \&7fYM2b/~_mފ(,,5-oUG*2*6'Ȟ^{QU'g6EU"ɂ2&O7K=  AOG#d>X?9j8%%gfQ`dəF&Gm~t r^eZ CRBR DQH܉" CVa`^$[AXJd.p ~[