From fb5c84652d16ee44c737f459a28c049f9c1e926b Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Sat, 4 Mar 2023 16:34:53 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addon/message/api/controller/Message.php | 69 +++++++ addon/message/model/Message.php | 70 +++++-- addon/message/model/MessageRead.php | 26 +++ addon/message/shop/controller/Message.php | 62 +++---- addon/message/shop/controller/Remark.php | 31 ++++ addon/message/shop/view/message/index.html | 171 +++++------------- .../shop/view/message/send_message.html | 13 +- addon/message/shop/view/remark/index.html | 168 +++++++++++++++++ 8 files changed, 428 insertions(+), 182 deletions(-) create mode 100644 addon/message/api/controller/Message.php create mode 100644 addon/message/model/MessageRead.php create mode 100644 addon/message/shop/controller/Remark.php create mode 100644 addon/message/shop/view/remark/index.html diff --git a/addon/message/api/controller/Message.php b/addon/message/api/controller/Message.php new file mode 100644 index 00000000..f0b53131 --- /dev/null +++ b/addon/message/api/controller/Message.php @@ -0,0 +1,69 @@ +checkToken(); + if ($token['code'] < 0) return $this->response($token); + // 参数获取 + $page = input('page', 1); + $page_size = input('page_size', PAGE_LIST_ROWS); + $message_type = input('message_type',0); + // 获取内容 + $field = [ + 'a.id', + 'a.is_see', + 'a.order_id', + 'a.created_time', + 'mc.type', + 'mc.message_title', + 'mc.message_content', + ]; + // 条件生成 + $condition = [ + ['a.site_id','=',$this->site_id], + ['a.member_id', '=', $this->member_id ], + ]; + if($message_type > 0) $condition[] = ['mc.type', '=', $message_type ]; + // 表关联 + $join = [ + ['message_center mc', 'mc.id = a.message_center_id', 'left'], + ]; + $list = (new MessageRead())->getPageList($condition, $page, $page_size, 'a.created_time desc,a.id desc', $field, 'a', $join); + + return $this->response($list); + } + /** + * Common: 消息查看 + * Author: wu-hui + * Time: 2023/03/04 16:31 + */ + public function see(){ + $id = input('id',0); + model('message_center_read')->update(['is_see'=>1], ['id'=>$id]); + + return $this->response($this->success()); + } + +} \ No newline at end of file diff --git a/addon/message/model/Message.php b/addon/message/model/Message.php index c0fbe374..92e1adcb 100644 --- a/addon/message/model/Message.php +++ b/addon/message/model/Message.php @@ -8,19 +8,49 @@ use think\facade\Db; class Message extends BaseModel{ + private $types = [ + 1 => '交易信息', + 2 => '系统消息', + 3 => '通知消息', + 4 => '留言反馈', + ]; + /** - * 获取列表 - * @param array $condition - * @param int $page - * @param int $page_size - * @param string $order - * @param string $field - * @param string $alias - * @param array $join + * Common: 获取消息列表 + * Author: wu-hui + * Time: 2023/03/04 15:02 * @return array + * @throws \think\db\exception\DbException */ - public function getPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = 'a.*', $alias = 'a', $join = []){ - $list = model('message_center')->pageList($condition, $field, $order, $page, $page_size, $alias, $join); + public function getList($siteId){ + // 参数获取 + $page = input('page',1); + $pageSize = input('page_size',PAGE_LIST_ROWS); + $title = input('title',''); + $type = input('type',''); + // 条件生成 + $where = [ + ['a.site_id','=',$siteId], + ['a.type','in',[2,3]], + ]; + if($title) $where[] = ['a.message_title','like',"%{$title}%"]; + if($type) $where[] = ['a.type','=',$type]; + // 列表获取 + $result = Db::name('message_center') + ->alias('a') + ->field('a.id,a.type,a.created_time,a.message_title,count(mcr.message_center_id) as total') + ->join('message_center_read mcr','mcr.message_center_id = a.id', 'left') + ->where($where) + ->group('a.id') + ->order('a.id','DESC') + ->paginate(['list_rows' => $pageSize,'page' => $page]); + if($result) $result = $result->toArray(); + + $list = [ + 'count' => $result['total'], + 'list' => $result['data'], + 'page_count' => $result['last_page'], + ]; return $this->success($list); } /** @@ -32,9 +62,10 @@ class Message extends BaseModel{ * @param int $type * @param string|int $member_id * @param int $orderId + * @param string $title * @return array */ - public function addMessage(int $siteId,string $content,int $type,$member_id = 'all',int $orderId = 0){ + public function addMessage(int $siteId,string $content,int $type,$member_id = 'all',int $orderId = 0,$title = ''){ if(!$content) return $this->error('','消息不能为空!'); // 记录消息信息 try{ @@ -42,6 +73,7 @@ class Message extends BaseModel{ ->insertGetId([ 'site_id' => $siteId, 'type' => $type, + 'message_title' => $title ?? $this->types[$type], 'message_content' => $content, 'created_time' => time() ]); @@ -76,9 +108,19 @@ class Message extends BaseModel{ } } + /** + * Common: 删除消息 + * Author: wu-hui + * Time: 2023/03/04 15:48 + * @param $id + * @return array + */ + public function delInfo($id){ + // 删除消息信息 + Model('message_center')->delete(['id'=>$id]); + Model('message_center_read')->delete(['message_center_id'=>$id]); - - - + return $this->success(); + } } \ No newline at end of file diff --git a/addon/message/model/MessageRead.php b/addon/message/model/MessageRead.php new file mode 100644 index 00000000..00018bb7 --- /dev/null +++ b/addon/message/model/MessageRead.php @@ -0,0 +1,26 @@ +pageList($condition, $field, $order, $page, $page_size, $alias, $join); + return $this->success($list); + } + + +} \ No newline at end of file diff --git a/addon/message/shop/controller/Message.php b/addon/message/shop/controller/Message.php index 17efaed1..53dbb712 100644 --- a/addon/message/shop/controller/Message.php +++ b/addon/message/shop/controller/Message.php @@ -17,47 +17,15 @@ use addon\message\model\Message as messageModel; use think\facade\Db; class Message extends BaseShop{ - // 进入消息中心 + /** + * Common: 进入消息中心 + * Author: wu-hui + * Time: 2023/03/04 15:03 + * @return array|mixed + * @throws \think\db\exception\DbException + */ public function index(){ - if(request()->isAjax()){ - - - - - } - - - debug(table('message_center_read')); - // 参数获取 - $page = input('page',1); - $pageSize = input('page_size',PAGE_LIST_ROWS); - // 获取内容 - $field = [ - 'a.id', - 'a.type', - 'a.created_time', - 'count(a.id) as total', - '(select count(id) from )', - - ]; - // 表关联 - $join = [ - ['message_center_read mcr', 'mcr.message_center_id = a.id', 'left'], - ]; - // 条件生成 - $condition = [ - ['a.site_id','=',$this->site_id] - ]; - $res = (new messageModel())->getPageList($condition, $page, $pageSize, 'a.created_time desc,a.id desc', $field, 'a', $join); - - debug($res); - - - - - - - + if(request()->isAjax()) return (new messageModel())->getList($this->site_id); $this->forthMenu(); return $this->fetch('message/index'); @@ -73,11 +41,23 @@ class Message extends BaseShop{ // 参数获取 $type = input('type',2); $content = input('message_content',''); + $title = input('title',''); - return (new messageModel())->addMessage($this->site_id,$content,$type); + return (new messageModel())->addMessage($this->site_id,$content,$type,'all',0,$title); } return $this->fetch('message/send_message'); } + /** + * Common: 删除信息 + * Author: wu-hui + * Time: 2023/03/04 15:48 + * @return array + */ + public function delMessage(){ + $id = input('id'); + + return (new messageModel())->delInfo($id); + } } \ No newline at end of file diff --git a/addon/message/shop/controller/Remark.php b/addon/message/shop/controller/Remark.php new file mode 100644 index 00000000..46404e4b --- /dev/null +++ b/addon/message/shop/controller/Remark.php @@ -0,0 +1,31 @@ +isAjax()) return (new messageModel())->getList($this->site_id); + + $this->forthMenu(); + return $this->fetch('remark/index'); + } + + + + + +} \ No newline at end of file diff --git a/addon/message/shop/view/message/index.html b/addon/message/shop/view/message/index.html index 815e5903..0b1233b4 100644 --- a/addon/message/shop/view/message/index.html +++ b/addon/message/shop/view/message/index.html @@ -5,7 +5,6 @@ background-color: #009688; color: #fff; } - {/block} @@ -16,51 +15,22 @@
交易信息
'; break; - case 2: statusText = '系统消息
'; break; - case 3: statusText = '通知消息
'; break; - case 4: statusText = '留言反馈
'; break; + switch (parseInt(d.is_see)) { + case 0: statusText = '未读
'; break; + case 1: statusText = '已读
'; break; } - return statusText; - }, title: '消息类型', unresize: 'false' + }, title: '是否已读', unresize: 'false' }, + {align: 'center', title: '留言时间', field: 'created_time',unresize: 'area', + templet: function(data) { + return ns.time_to_date(data.created_time); + }}, {title: '操作', toolbar: '#operation', unresize: 'false', align: 'right'} ]], }); - // 点击发布 - form.on('submit(publish)', function(data) { - layer.open({ - type: 2, - title: '消息发布', - skin: 'layer-tips-class', - area: ['80%','90%'], - content: ns.url("message://shop/message/sendMessage"), - end: function(){ - table.reload(); - } - }); - }); // 点击搜索 form.on('submit(search)', function(data) { table.reload({ @@ -122,7 +123,7 @@ // 重置表单 form.on('submit(reset)', function(data) { let field = { - "title": "", + "nickname": "", "type": "", }; form.val("search_form", field); @@ -141,28 +142,19 @@ eval(obj.event)(data) }); }); - // 删除消息 - function deleteInfo(data){ - layer.confirm('确认删除当前消息?删除后所有已发送给用户当前消息将同步删除。', {icon: 3, title:'提示'}, function(index){ - layer.close(index); - $.ajax({ - type: 'POST', - dataType: 'JSON', - url: ns.url("message://shop/message/delMessage"), - data: { id: data.id }, - async: false, - success: function(res){ - if (res.code == 0) { - layer.alert('删除成功', function(index){ - layer.close(index); - table.reload(); - }); - }else{ - layer.msg(res.message); - } - } - }) + // 查看信息详情 + function seeInfo(data){ + layer.open({ + type: 2, + title: '消息发布', + skin: 'layer-tips-class', + area: ['80%','90%'], + content: ns.url("message://shop/remark/seeInfo",{ message_center_id: data.id }), + end: function(){ + table.reload(); + } }); } + {/block} \ No newline at end of file diff --git a/addon/message/shop/view/remark/see.html b/addon/message/shop/view/remark/see.html new file mode 100644 index 00000000..a05bfb9d --- /dev/null +++ b/addon/message/shop/view/remark/see.html @@ -0,0 +1,112 @@ +{extend name="app/shop/view/base.html"/} +{block name="resources"} + +{/block} + +{block name="body"} +)nbrQDKVJU(|%&QdXyyV?@O1sk=Z)$g+%@ zbp_>`wFiaf`FQJ$DJ-YL@qtfCAy0x*63wYqpCa+JFKP34DlVWL(>o3dhMdL@YJEqW znr`^=Orm@h`|cHPy?J>4&D*U7tNds`)!U+OPG)y|+q(j@TR)poZmzmYRrNbbhoL;G z8A@-DRxzm5>3_d{a78iYD}7IUav1vf{z)6+AW^RsKk!t3pxrF;%5&zUD@ zAR@y5#5kKWM_Az0olqH1`t*K23tXKMep4q_SP`4AO*LTRIf93YDbg{fT1^bgGS6_D z^nEvxm00lo1V=}_wMPAzIYW-3@K}?^?! 0J3sj_r8 z)ti)VPMQe)=faXTUd{&_?<-(6Y1BR}i-#}j)B43`)Hd!-b2w`HMHml q{$EvEl VR@o-KtMoP zCI`p6K!fU}j5gr`4V``^&5+D6rl%Jzg4S@&n9bo70=xm4OtDL8MvGTkf*Ji6EpHK& zne*UhKXQ_1pP0Rl^={ym+%TzX*b9e{EnWx- 9^ lW^eHx&KYp||ZB~~II{C`>ZcIDwju3}N z(5QQt)Tgj7P6qhg{rUuVI6gii(@$o&pj5Fw)JyF9n}b`gxDLHjg~rp?UU|lp!fnN1 zTE*VkjTqV_bOl}f?*l%43<`mMx*COH#7(T?WE3bUG!G9hWL ?OJ3)LCgCx&06r661wr_EN?RDGek*{Q_S(kLf;|Z zsjwkMhsv@Z@!50F7vBFE8Hn1S*Sew39iYfq(-=z}6_hE)R>=5tGFCEQHIbbyl0>wc z%yRY`x$#iP18>f96I^qy`Gxlx94wRsLG4D2g>Bd$01`Fl2+sboVUZ_0;x9I7m6oX^ zH18%$v}D;&8)^*7qb8rwnCVZpg!`u_&Dj@b9awj8r^|gi4wj&v*sgTcEr@u6=;@nI zPhFcye|w?GTm-43@kV;OsBQ<^*aSCW>-M?K&yx7&hAZ_h=crkaLSn+Sz-8u7$tcMC zt73Ev>`e5;vkQrz?uR!YI;91Z#0nwRZ}EG#vdvO#Wxa}S!(t2*hz-{bmj5e{k(fOC z5h*=uTV$#Qf=ET8EGKs4h5RgAPC&3;Q?O1(C5yklflJIFRKu!fk!c|0J?U0{AXh5n ztz(<;5_KeT6oE3zN44VZoYa+q?}~krbJ5H59X0p*tJc-+`{jkxDsJ_b)Px>kCcU!P zuhq= Qd|{v^xiUS|t257qjKzz#RLI&s0<^ VvC&CMsx6y<+INF z?dwkBG@nn~w{fAG{yMcwBkMB3MLWv3(_4994(5;h7TLoDCRb)2xy-qUZOi-ab$76i zzyl?&Y>OG*x+W)!rxes4h2 &6`F5OBtk+^Y>t{iTB6wU=7M(CxTwbQ)Vng#zJ-U znV*nHk}<-`=3H4JTJ1(oY(aKO0WI3GAvRZ)^dmnd$@5)@z7yNsPn;i!jU$eE_c75{ z?J?<7zH91?mPPf<^tbNFn`knYcU9OAUyRuCtoU*QC~Z$^<~&P!BVZU?%XP`pW^h@m zNL_AlvS}(pF%4d67w$VR9lgzIuy 5<{lqEVC3nn7` z7qy|Fetw9f5?jz)Jx$gYs`gg4YYUx4RGo8C^QJmZEl*=iGR0B-vF|I4O-DXv$F`7Q zynN1qr!0TFS%Wnjhd|vsBdD?&d{7TpQq9UTqmF&V$gC~tPn}{)9+1~!VG$hm6s7Lv zl0E;1yYRJQZ|wz!ew|U8R@KD%V}sPyTlF=g{R42HHH{^d$HMrqxcB-KAIwEc_?o25 zU| Zj*mo^c@>(^pj{P-BW!dQ_FYYE-YuNLSLze-AL9~QqM#Zx1>7Qj$$N( zt4F#g#Hgr^&qWo+;<2VFW38o3lIv0|CFKQg@ +d$EY-9N;-^#tB?gAthk!sy^SJ}EX zRKj|VNurf_6Unc#;o-xHvE;Qmvzx@K=kXyP<*dkLBcwcyOIz!u*$KTCR9-R5QzMhS z5dUY-S)xNQUI&rlG;1 tGw*YN@yF>peAmV|_Myq^Epn zdnAfd)I`_TmJe%+a?}&{KKoEUZ}1y{kDUNA-%Z25e(dSrxcA0#-ag55cvm_`8_B!z zdT4fkcLOTRW1AKxsOHfuGH;Nm&G)n^BnN}vgt3vn-YGif-93JOLS}uX5S@fLB?e|P zIr*z1)VZ)&<=deyiCrDs+Daz8#qrek*iWll^fm=F dD;zh{8sdv?9aft)^v a07tZ^#$OT-ZsM`gGuFyS9E)VX>yxr^+C| zL3v>}k!Fo&dP#Y~lqWa0XgbGx%<#i8VrOxD=3d 65lQLjtz7 zh`?K6=1AgUUV~h=83?~lIDv=p%v%kUprDX8-J)6NCjujz zYo|^bC53Bve9azP-<*ojPorI?!Hry=DIMb-o_Z{DYqdx}x2kFIyy=?Z^b)eW)*7j5 zd;(~FYbmdPvdts7;#_IgIdS;3PIKNOb)qB5RkpQ(Z*Oi!H?N}5Zsb7!)3T4SX-V35 z&b4D7R8tX;8~%~XrpCd}qd@VzRd`(W@NRNXYc*2b%}UTIMsCg@nnG65>G*L`uyYnc zBmnN0RBX#>I8LnbY`j^qSE;->wcaqtS=}~rqS92i{Md@m2hGNJd}|+^5TcY=Io>%h zSQQ;Y`Z}4iyY V#247NRz=^ZFn0EJPA#x=s=aN_GMBXQhceOY z56de+xwYWrSg&W}scUi4JU6zallALamX2LocLrPymlKvg$0z3U7*hH8S{1HrSR8|1 zk;7dErBc<)j&wiOvL1-|w-!%BKU?=W%r;1``x%zjua+ghOEy!bvEJSKRx#Z~_w|(! zSC#$Vw^$zykAv#PulcY`_s9oes`^(htbFOcvYqAvK7!O5$y2BX$FsLx(@n7ex%;F- z81p4XHY7*uQ*MU4zfM^Y9P%#OuH8BZWA2g8Rc7lr{e)3wiwsy8@5eZk9I+O*%^rVq z`p%ieXd(?|{Ghy6s`4;f%Nu(6U+JCXS$TDA<~!wUnX8j6Wn+}v?f0M6ig6Gq$(N)M z`a6Ym+Tf9pWduL%4(DG=>T>ZglP@SC-|^#}I}odpu&NLID(GRFmM`w0Af#&MbwM1x znoraw)g>MHwQbEU`H6qyS=&6MiTBC=X8UDTwIqJhW?{2(-n6Jl>WIeB*l?g#f;~0g zCAzPP=yM0^*xIeZyi^Eft3@@IeZe(MGWKp8Jxe#= zZ~K+z_ds{j(%U|(6j+ySIZidb|4R8`tMFi~v*1nen=1kJF8w|wEY4GN^P?W4n;uf> z7v}{Abcu?41`N{ntcOSD3_a71?CdtScY9rERVF@%6(9<_SvU2Urm?JoKZYgpK}Z?Z z)WT*T@{i=DxQAu3J;$m}xtd}T6b^2@)y8DjINF3+?S!+eN%sc%<5Ys HYo~GJGGb7*1>Z(^2 z!{wU2^$|L^D-F49@8&s`o4&3FpW kEKGLQ@7vjQ&rwEWShT-L*ya->&6IYk z6;0$%Ca@4gvhwM~%Dqr&G-rW9E$m)~SY$BDX)wn%BAgQfnXfUCP?O8Q`j{dor_TD8 zekqTRDb=}vmA`#gsO_-;8Sk1q%MJTxHMNwo1?JnYw$FK(aXhMipBU);C}x&4R@(2j z=fZYss@;A`rbh%z4SQ @7FuOGWUAxbSB8emR$yIAGPWy6H}-m-Rd0(5On4|#l# z7%e{knM?ClcU@7b`;4(>+|KyYTdAY-C}Y|ilE+n-R?h2GznIA2$H@8^6cm(57b{ua z&gH?*IXKIelCW7CtKAK?CeoJXji9MR8BtNa7o}sv|LaaHR6Cp$#(p=cEUb_%`Zfs( zV*=RjC?m<|%;eTs08|+pUr#p{PMtLee=ND0OI2uB$X(4eBQ)RlKDXU+^l4yl<;TZV zuS;KaT;Xq@hCd}oS|+xn#;X+Fzir)+uSvecBlBr5zqFwODOBZWmJ%% ?OWF}LTq zVVyBno;t-mAhpq5iM=Y>t-Zdo`Gh*d94mXSLi&L3f}5sc{E836skWk&My^I>kBETZ zQ537uHY=qg*f@vVV V@Go1~;XeRyB>>eVL7FS;!# z-UU6!`c7j8@!6UuVv_zAZBTF4;BvA}0VS0TqrXI%B1!xcQnaFsw7bGev*^R_6$EV> zwCC@u+%^hA#IbUuS#elX87(TuIW~7$#&T Dekd1dtK$ZLmm^+V*>>(;0sV@rtpEuCk`yrz5PtJhx2nT z-1CIPGM8C$bQr{N8ReRys2o+>csMOPOcE8E%icYS-6r8n6;ig*CoY@iP8gBvNC;YB zVgsMkm@o+Xc;$>U?!?M5$1sgq*s7Hw)UN5p;9@sARw}s2S<-<&qu3D^#jC3}2p5D3 ziOLI5ISDxF-^kfl!S6^+tbSg6^I1&i)6PBxCk2xhW$iQ%^`sME+jRZre)_YW+lo0a z$|PLl1-xoKW7${4Jw0RR_IOue*_supRvQ kk(^99H(JxT*@ApSaIx=&Kk=*zB&? zeLtc$y1gexL#0jm0 vzou #CGtb-g2E S|Q*q7G*3bBR8VSv0ZPngz?6bXG~0j|>Lu_Vt`S zIxxyyy4m{(+1C^(M76qpXq}D @vqs)G%*d>hYu yEz=eFJvB53RNfswdNEIy{-?;kj&o9oZgO zz44-MFPOSa&R6d6B*gidIqv{*ESCRuh-}z+sj1SrKqn(sB^8U5PcIVUq1tSYQ3RvG zeBgk^!1TAx7YOl4zU^e7!7jX*jG4&Dx?7g~FhvWNDrBT<2 zdCIP_zNnDVCQ_@ys#c3-ktG;S;g)e~wN0PgU~>=F-C({(>Xc4?r$GMv)&lGDZDin- z&wO05)04lfyT-7b8As)rCzHBba|_+9rAr6K#~&jbR|I7*^R_h8C7Sdb KB)TJ zLB(sb9|^KLc5_M21c%U1hfC2KtbvpAje)yg*0)@i{+{lJ>*4m_c6JU)>k}Jt^G&=) zY~Fl`?XE9)-Zi0E|1Hq^pob=U{F0E(Qm?V-sMhE}RLi3)j$W5+E{kJ5dEJ%rRW rx4t z;_nosjf%$l$UKu31~1>}=&@_y#!^MtP0T3rnM{0*`|Nm4zBsz@eptY#fXWzcf#;%m z?99w6*Cn% %KGE*9gRD0R__ZYL@VBl(!^a^iWCl#!2N53%&S zu(D_Up MIB5 z?#TQNO}5##(yBI4+Owz{208cnJGs_coaHNBGBPQ 6opM7qE2r1dS(!Oz9$!g~J;a|a#62m4Sdq^*_+sUfX@l z=wSS(VHk8oM0Us&wZzAqH8IA#?YP49EM%>stTWss=F~IPI{v{KIpWf eYg}D}{d}ogKI?68$ek05n`4C|>W7~6k zt;2AvNcmlzNK$2JoYbIM)Li-YIMosPV$r0lP;K3n8LD2+q9-H0V$>S^V<_E6?T%Zw zDtA{6x>e?jLig=l3t!Yz=8=Dk1Apqps(!c9qt?8ss5oeK&(+w!LsptTIbdmE&6LOb z-t({=y#pvtOdm9yiImj>@g7h4kzBquwK^XA0+R-*Q@KBBP?AZuCSH(ofOB*rel-Jq z(5!aO9mdeil<08gJ3Xvl=_R8U#JV~&=!n5P;TBGF|Fpz8s%Q-<%v&zw3rAN9ybb$a z??p@m$9wb*Ps=TP658w% o& zy6oFT^%YUlR@%KAXr$WE*-cX`$;|nVMru8XGCcL#Tz^Yt3%omS!EVk=YIw-30>i4g z )y)+Y6ktugV2QyRG>0WxjHvi@Jx~hMkjv#;gkpXPbf-k-lN&2CU2}MN zYGTz@5>bhA_ssq1*~wH_z#zVUSX-A4{#Xfjr;O2Dnd=dIYI1hFB{N0sm-J);1B4k- zu5s~NU7FQEZt@s?2~(ZKg5JFSMScF 4Y=vKRSttg5Tq$sgM zsZld_%%o-#L5zfo(f{4g^L+o$_xJgIUcbj3lKVb)a^B}$*LB7<&bhm0R5vQ*IM6wU zp?5MZ3(i3bMeWZH#poWLPq&VgRS2&4CUSZzOD5;LSfupFN8i7C$@pEI;kyh8u@hM> z?Mzo|^~^6h@+HicRoZ4rUR1SGPfyoTXuaxf@ZesNUUm3!p*++4EBd9^;zgcVdb99- z>IllZ8kznsmi?r+lFr39JiWf DD$Ju7 zM^eZK?&8!G6 B=JC106GdEFZ=xeAZ6jb*F~1Ju!8IlGeHDYdReq zPvi@p?Sw>WSS}0?B _0}oDyFMbbzMC+{q9}5=Yub% zTyZQ~Ozk(b6fVgNa~|qHaOoqO^K=w2`L`G1D*tk3t=i@kOPHjO*DQjmQS+|mUDKS@ z?z0KE0_H1WQ)_##OcBClNKo5SC;I%o9NiG!F{7d45%> k ztpo-f+rAscGA`%!fIX=ohNC0KCn6xy7B@HIK)ulhwcIkV6#4$e&H?0znoE%(g27&9 zUgZKc1!ZmOZuM=v=H7}jQtnRJz*`3O)!Q}CJ!Sh_yB!`3%s8I-)N0ZZCyTj8Suwcm zyr?};$1-r5MM5gv>p(#JNfSBHr;CCj+Mk*}qT`R*K6~h4aOomoQ0@J6SldNVtUXPl z>)_@3$TjfuTSg#FvpCA_EKZKd*8v;#u< -&_1T}HP$UigUx$0L7b y{B`oz-#df`Mv z! NbXVQ22R3KQ-n|1I(-Cq3!VVJczZ40% z-1^LMibk8VlTQLa=g~O#O}9}yi@oV9h)o4oZjQIaAjN^sS8mpCVLanEC>=lEF*>*{ zp0!>RvX0+AI5{GCN6VtPbNe?a$$k^LX096?rA)Y1cp)WGwkzHDrak1r9L9f8w}^-; zaS !T{A8zZH-$@2}YPk1J9S&kE*{6;OT1q zfOvs&_^OPCo2dc~)bqzu>jZ7tIcR-O=`AeCyS8mmEpyZV(XxqjE{!~a>a90VR?Y92 z#kVQ`2FXP{?s(L($C?3^BIY4N`&`II!tIxQP*K~Ya`2f_^tY3*N6o^K%Z qSXCB&${4_d@D7!>pnUkKsDulVk>76vPmQQ?%DgHi( zoRwY>c5F&skc4`>F`)1yG$6=_Q@s1?3yNiZ9a`jngN$e7;UYPOel 997T;c5CXHPCf z^0B|S4L@_mr=`9Kd9l5{r UCR*^8r znLhh`UI)SO(!uDYc|kj9?+q9xRr0OKdlSBviPo+%Pm>BgON)uqbK>B~1%b>5s>8oB zgK{q?zNTco2VE37HhqcX`O&ZziFQ$AZP@w=u|}?DrgrOr_aLT-jH9nOPl0CB&Dgt4 z?$UUrhKWhkh0Nw%u`JK+_oCE^C6%q#iY1MK-qnh8K%I{BD?|tKLm+dzo86L|LtBfV z#_}E*azq*>Xej4?4{J@b<5-NmfpW&1P>xXn1wNi1(a{!=WMo-dZjiE4P-@s9)e$H2 zV9V)f&(jWmT@UOz5C4g!)WklGLwcU>5>Sb9zUG09)POPE>-eiOe!@;RdZr1!-5Sph z-O9Zv%;6TMApD*qn&sAOgohVXJMhr=yB^*s<@5u=&0Y`EI~;X1M0h|4xfR)4MQ$C8 zyHsNrch@l8dAvmY`s9#fIKxn57W$|ab&E)*PRrC@iqOiMSulCA -2~^k FdC_@!7d2MQD_}PpdAGtO4a|M?-xA!?24h|N$bY;cdDfWfM+sHtz z1Jy6T97y;XIZukY%zQ<=vGGFW&)HPaA+0N)Y7z$Zs_uH2x@cYTPv#flntpce50`8~ zceE95FdrJ|t|-B=B`-T+TY>}u9(_Sl)0fmfzAf_9C-kn!a1eKUP8ixA?aN c#R5LC1{mcAa#fwW(H9ZUH5K~ zU{6OTCw*kMbCGtvog}@o@awT<3FfAzv(${8$Uvl?V3|Tn(#t2#qpgLK+9oUyf1Lhe zG9z(`ML+Sj0ZZI8->F2d>JM>dr+?hKD1Y%v`jm3~50;c~B|7(M6|ZyRpC5SkdE{W^ z{e|Yc3Edixtx`e}&XXlJ0DqFh8ETncO7BML0)FQx0gTFqr_`-o^%WKTQKj^+#TW~; z8ZakIhLpF>&M~C7Wjhipg$`NzuH`1gSv|IK6n+>L6*x6WHMg% 59oWd0xq)9oAFog zX+M9Btl<$l{SkO%mAu&HORwYKgIV6eECTgFpebq3x T?P5ScUySdsqQarmUd7B-VS>f?9A(FBKv2-q|rLpW&Bi9Z&*&~^jQ@<|7ji|2}! zva<3U)Rwny!x;tlAxs6(05)WPk!77Q0B4LBbBPt| ycNCi zB@o=l2obE7-Pu+3Q4JNaUCaAU$Tt>%PW(&?b<+UYh %a` z{0Y==`+x#HB8F4_?j%DdPOhs=Isl#%x`3LW>o9EC3fS~mD|zk#_BJw)AV>8u(L#$x zDH>3vyz1NL70j2EEBRmu)m(-V{b%;B!+xL+9##fJ%k&1ECSM9TR~NH!(%jP8sAkrV zrS@0?Eg*V8dIYxmIhd`gv9QK#Mzedcf1<5w3t_d*b}?wdOZC96usDqy1;1R}ydShj zA>qp#K7A$*%v< qmwc=nRXgCmnoPl3 &r8Xqd&03X`Rrd>9Ec|S;xLc*5)6jF6uzb!Mv zt%Ai!lZLUAMb_kz_4*eG2u5GrxclD9F5 neC^4uFYa0eup7`2?1g GW2KW3YyJH0%Qj#Pmv4tYU KxPwU44};wM{hTiO|t+`@wSl-U1Ec=c*}g1OkmFhJi TaF>H zG&QCg8|P^iWQh7a)(}c6?^{`C-5*rUjv=(6Yg4p%1*-;x!vfPIqgkk9$?^y9`gah! zif$E0WKxzqWc;XL&Y|_1d}zcHg!tVpc`(3A7JV`ZcuX&N(H|08`fxuq9Lx`2X3+Fi z{2miCmz^oiyMlRM@QQe7!Bh`}EmK5NBBpQv#XRx&U{3Qo3|FvjX}*CMZiLtA2@aRL zp7Gw~UiJ?faQm_kC?;ek2cE7S5o9(Ma}bTPVW%Nt+n0y*@dYtTB>uUnaIu=|h4Z0{ zD<%RcR;V#~bsIHUZ&QLbncE0$URbutC6=QH`p8_*_knff>rSY5FI^JtJpQ^KT3tfm zrbQRDFB^
-fcLJh!dCis(c^~D2afeIE>dI7E!n`Yr9CCBZX9J-|DvXe FrusP^p5 zL)xe6J $zw8x tvz0p1*g#qA3t&Y_%7I=~)QQ>2R?jhsX?YSFiH(A{xdey@mhv z)X@I|$O~Un*@^Ct2*y-d6KesN?rMk@DLtBQW(kSatl!A#VjMI`>vMjFe6=ibT2az5 zV@mZ^mp={{s5zbAGP>)K+%rtKc_w4fU;1Bw{E+W3#3bv486gNH9XJugTz#X z<(yoen@_t5e>I8I3S($#&TRS{=8+e64>~z_6-Hwh<#|1(;4YkPxz@@%U|KL(u)cjt z(#EE3-Y_3Y#9lZ2>YRU}d_PzxeSei~La#1hj{tK{KsLlkySlOX0y|QT@)CpMY$H;L z9Pz4PZrT{R!q1CS;t66)E(=O-bVbBmnMLH-e1AI3V3}|+>)j6)P?cr7fopC^Rb^mK z%b^Sm$sxkEW~hFjs%`2p?laN`4R_U7T-mKW*=As-Jn?9JYCd_a{&u`l)dCn7(7vM> zT*XkB+x@r?FeW7GU|-X~pvMT=%Es{3o;YbzD|WI %A?uknx+O}m)buoT}+FUKlX-Lw} K@8lTp^&;DSfPr`qtp^EAUh^7is0k3)55ohhig^5FVLHYJ0JDoS z9<1J!_UUZglvh(Z>X;I#nv?RyU3Y!4bORx*wf8+4nFa-1nUkVk+klVszaK|lC=)dE zY?DpwvI5wwBk*!0**!Jy5_>4TErTW{;4lh7e`4?lNqYqKuo|j|&CdYhno>$|{V8L* z9C)K(djk8pka1qKPb=U4-G4^|f%>%4NbtL*X(qOW*&u_<{tek90V?CFLzC+vnKTe! zFXsI+2TApZ5RW(pGfVwY !~>HLYX0I}IZ&5Yo#RpgZY{ zS2D>%a91@>!1(NYNCGi$N`MBrzW9ocXPqg{nzI}Vdg0=-Xn5`0KH!d&)PbSBEYg#2 zA(qvs-ylv}a6~)R%C&r;oVa_e?L&PJrnYcEjd@~9+UFx81ib7CL~Ts|I*~x%W1T^F zue#CI%;McbB=-RY;w1t)7+uN*hh|a6x hiMzh) z8;IrG%O4yVH>}$lzQw?@CnS;lRD&D7z XJ-OT6A(7 z)pXo3#~#bL7~s~2$dxmgys;A0%4#?8o=CTzbo~s^Jp2LC_Wel< -BFDwoB2) 1g4BB zhKC$Z-fL^OKRHIT=2wF(0gJ=JzwHC+$cG)A`mnEUOF? <7eQoXJu+XAE2aQn-B193`|v0Qyt?;>*ls0g zp^4u}{H01f=0R?Wev_8l^)E#NFm%Yo`z?&Y6zikL`WDY|KHmr2$)^D&p+4D)_`DvW z0D?XWa6?2Re=HALI({a!F$6o?txAXD$DW1sY C9L|eW zV?ZArsNWwQWw7%Ml{_%N?ia0gMwGvQCSVUR^vfGpxwEI$$G4?h^sH?x>c$o!;6=@3 ziLb9~hQ7-8ZEWgXe$iTr6jU Ddf>71bJ_Kd7AG5z|-8AX; zfwLOvB7=`^sTr220VFK=u{=EPSm@%p_ng?V5$I#LXrG5wTK>WtJ@H^+6sBnTZnHtU z8*rnq-RV9jt^?0>G~V2wD$$6N>0RQGhT$H?#M8!p0uF0(di3nXIt^K^cGqa0>QB~Q zppZM?EU(B+yg+J~cTH&3Yz04t5d>rX7JMN|Z8;l0)bV}E#tEMFAl5l4m!aB2b(wj9 z<`?#t<|ov}aNyhB)KV+$iE&xp+Lc||9X_lD4;#uJom&>1*!g~A*FCm0YczJGQ zXt8#GV4MKhh$X%9reiz9+TA}h*9WiVrO-L#Np$b=$G=bn-yodRvl55CFq)hyb{U;_ z htVDkeR&TSKeUOI`4=GHNZVpw@<+tB#HYoi-84-ip z95Qc~>xyn$sEqFut6nZE@IwV<@ljg_U6HbCqe%`#EN&OkgX-0KcLJP?VLp3t82Qzp zB<8i<%MTZ5kYqtu2(@uGv~X>dxdPR{KG5Md9Fya+uWs?CcL#ODtGl@LCBkmdIj4E| zeC`^&!qS|90>{%#1awx0DH$#@hl#-C^eI#@%HYl5?2^>@FTDsl#N=`%X+dGZKE_e2 zzfx=;?HP1d>KkE6K|jV|hi?_1X1OOuwib(>DDJ^N=!~J=UxV_=T*Y|nTZy~B98*ad zaSlLi3O=i+exKtmSW7uxQ9MK)?1c2h WsGM1Cso}0=B2>$3y-%*? zEwlD$XT =-Uxr%USwWHVxznhscV8cB5C^*?UU8cqXtK_st zAO-+Nsvd1ZK8)ndh_N$7?~iHHzKx>|I+TL)={>2DN7Q!=VS_n_Sd#ml@)Vll4BpPz zv1onFX9^y9qK`U&E7mA)pKz?%sx)Mj9MKs^&Ij=Z4V34Oq4qVDJsp2h?$_>`V|P9< zwD_AEH?^=D@~YZ8Id8m}rloAzX?7zteV~nF(s?+Vwo~!BGC&Es*`U&W-e}(Iz=Go2 z`G!0{pIYBv`w@?mJRW{-aaGPX5vp2)l$ciduWHrMvE|Ob#eC9>*5dGhk+rdescrqh zQPP#kf_Wu|rQIfkO*u#{zT-M37?YG=xZw-u+F$o!kj|f);=6l2GGsLvWsQ&{jBHu| z23eP@-5JRtz4SL-5Qn_#B4@r>x~UqY0e%}}MJ6q_P59eD=>nF*vNDTFPIHFNTDAKV zMQLK=D5Za)209}gLH}Sk1Ne-s=U{A>XmQi}m@G#w9R!sc7@fF7sBGGk%SQDNET{wr zx9zsQ=@vJgD?74qZNnL!?5 Rjyy}$)PUJbZq8UbKi zQ)VJx;3&C*2C-$2?dQNp%ut>2@nsYK`81RgDEd QyPSSQqk@5u&o_N9kQ0O0dQV>;~;eJPzsy!=W{LzBMIH=jBKh*r~l2;3k>?L6(u5 zu*-o>&Ug#49~l}Xs0~lU9af>D?X{gFzd^;T^_yhn&3Z>uq*HqK(o@Ef{WUXV0p~2z zs6M24 wSUHJk#`lJY#|^=AOu+N zQJsg~dKs4y*N3#smz|w$qR6W{OVKTE#aQIGk&uEl0W@KXp z^=6P>+W8= z+^>ist^}f=Kr)+BkZ=l}we5VLO9{@c0l6WwePe$TZ@#CMwNR}gP}0K@;I3Pu#!kyr zn}fQUnUlG__re9SgEJ_@#jVtxIR>9oS 9+dsa ze(D8s&TpZqoXW?IG@X|qS5!>bC-zqDc5D|>N4@vn;ca*F&bt?sxH&?<-RP`dUW22x zBGLqsyBTPc*m0@WQHg~hj6hrI^L M{Hr>VCj=US?woe*1p68rg8sG|ouQ+!>Wy%2>4pgg* z4v&&jy!S#8wqA(w<*J(L`OO`HCDa|V$2L_xA{`Ri%@8-t^y|20Zc5I`2yP4B7YPs5 z*+9QGjcQcM%qzjhfw;>B<>*B}bCSaPUKrkXIS*Vl{m4+RHU=)sU^dJko!hxKObhmI z@Cn!)ZSBlZ%^ArlCG5*|*=Wd#Uz{t9xC!mtpkt=@lKcPIIm}7s01(2Kl$SRC^pTuY z`OjK~&HDUvwKVxrG-(HyL#swxt$fuFF2LoNyX?yXeABK2TB~W|He7zFF5lg<9$=JQ z?8N5|s%|v2PYm!Yjt50YANFR95UZgfq}AF?t(bItOeaiOH`Bydc1GWZX){?l1-dLh znntZcY?2ke{a5MmCmx5MQkHY(4NNv^RK{sNBLEJiXDJ_X=!43c-j)c!2(1=7QILjF zXNC4|cMcVP+^~S{%x~-*gw+#k+o`)ZWStl`G7BmOX$d>z}+W+OZV zVu|ZSdA5$CaLOf5;60ab{lCh>G)OCHA}~!fViC}l^(McfK?l%5m|Edp(1_5p3YSJU z5&SR;*z-egcGD>tW~NNY2B+3uE!==9lIAx{=NFZd4I}VSh3a 2g)CW!eDM_hdv!CnG6CmKHjyja7 zx>zpFTlpwIp6U#4-aQBSXv@K{9%X8lR&t){c#vN`Mj9?p39@d;YNyst>=0>tS_6tZ z_|7CQK1#nF5%m{`03xWQVRFk*MO&^fch!3QqH3Q14`Jm0I+#IxAf_M87iMQ?+4=r` zFQ7rp`Dkzez7d zMM;biA@RVvgPaUPn|=|zmCDgTB|92^UfoN^%@N!RJLSpe*0H@3xOVz2AV2<4r@Ac$ zIAer56xgE22M@^|4bJ^ATO`Gzzeuw6PjLrM8ztND6N<5Nd^cM z{VR6rT<0!$eQz|uqT+g^A;32Rz_ p%}YABLaDtM282!8QLoB<4gb;(8ZE|v?yj>`41#9D!&N5Hbe)2BIJJqMkd zW&%BD@nHJKe1Y#B=>0wK3-3X9frDu}I0VkD8bD|yWI#)Cojy~4Wdu61)?gO+8-$*V zLK-jfu4PO<`xTQzGcfcc%EA6P%nH^yi=8tI2XSh0{r-nXH+GlBv-}izeuKz6$)7hA zptZh>M*&7=ezZfyFFgM%Pe1;`^;*(ii0yf!b#o=kmeq5QJ9ln@PVwD7bo%GC)v3;x zJRW}z5D3_6?xo;|yI$U`k59eS_PYH3=gN7hzNYgTn=2v24C+z9zV%m*z}qBY0h{XQ zl3 hGOsuMD DFKd!5r~n(lmf z+}PNB@z4c65bN!BAaJy+`clHZcVX=8O_#2EM$SMJ$Uli#_^;dRJ)1Er=>NY{WvWFD zHApOTs2G~q9S@8tz=cFGgaJ;=_bgL0#Y6nJY=DqY45?CP02sY}Q=ma5&>U#>xzlt3 zFzC3m6{i)_# zw>})bXK<0F8E7Z3Qto R(tNCxT z9-)Sq?Q~XjA{Pi@2(@8n=GLI&pS|FT-sL1yvipWI>a#(NHtj3rRR($W`!l@j{3d== z+%CAh8Lnj+ )H`#FT2kz1?%sPBF8txW z!lg@s|0>au#RjvTwo*OpV8h`$U^>e7uZH(*Wt_I8AGBSEnadqf36B1{g-GMMUS7Af zretVoX}?FE6KE*U*oLRzY$q@8!8S)IbBZ7T%JJaK0|%e8H#eVtb5n1-?Gw=vH=sQ4 zyDRtt-l0tB@=>Pt_$YEC2&5f;d`|0lKI+21$^kkU_Z!rYTMWw3Gg-H0W1C+L80PUQ zlDs2nYy0}iv&iU6mo<)NYxBi&u-^Lfi-UdyWU&22u9)%S*|p#tO9(Lh0oJ?lVuIe> zRKrBzWRGvj9x<$#)jhZMoGd(vc&^${y3%!V54_0FgQ0r6u=E=eQU7U`2TmUVu?k)I z@J4d}@#}) qu%unmM2)maqPITS5b<=^cVy4xkF_v2k3msH2yyH6eg-#XW~ zYq>6f1B~zuM|NWJhx37W4Wrr3v&)Rb;vd@*Yg-#EXgfjHtGi}$1gPiu%;w(axn~%) zi;MWpo{fjYWd@3xJ9OF!-?gCoKyHUFm!0yIIMmFNEOlKV!a |X?%)`1mraHF&1m957d){A?(Uv4;-}yjiTvLkEi232 z3)8kNVcrR4b4jY3K>>$LLw&J-#-qO<2Sz!5%GgKqZusyCWeWugHFxXv%ZI(6zkFBk z5(spXyjQ#x?is#zcvY&S?78+Lh z8w6hm-0*+~upKxKdH9U`KSSn~_k4VpPGnonU0oWTinEm2?xqjl`+J%Gx@MX)or^qU zKAkY9D3r~S?GSGwD-kXHA(lt_-_%+hkWNkh8I$mr*G8Lc6+P>_yt%~P>!)g)RXi2^ zJ*)&FT-<7n+*Y*+el I zxA$Fu{Z=0T&otuiC1dLQl5UiZJ(905Qh3R+xkm`t6kCc%_zw^9+zW&hXqctUjm8)e zGQ9=xGxjU+cj(9kF~^_3{b36+qxfNWxth0siqYj+xr_y3{NSldA)Dt#H&vsP?a1q{ z-qEok%DV^o12Z3h4rPPX **sHgqVTv{erMe z4h5-fp}QJ9N83N1%h@$wKd;?k?_~W-z+`|D0W6~V L}>SAdlUQsBtJyI4I^SSh>aoyXNwpy^RLWKZg@ zwEbXYIQ?qK9#v2o@hq=(a-wE}Eo*TF!JBv+(>gZ$w_BEh=*00Fi*rxuzd`apY;@a} zRje(q&3v-Ks{Penoo;{h>YBYIszY+!E5^6sKj8mxb}-jYUL5J3ic548{hazPg`9S_ ztL 5g5fGC=*G+I&xk)vt!!Ap`3Fq+|AivwIHM25kh6+dbGtLA_Wk zjjg!fzXadOKyPCY#|o5pF#PauGDW|}{wWJ#mhmNBPd6bfJ$f|%nqOhsh5v>752wtL zxFlw$QT1rkk!~~5w #g;sMAEO&npb^?6<3MFrBe)8<|XVs}p=Ko!Mty3ET#U`~MkU(GE{ z0}>hVh0#Iho(4`Udy|t>dxcvWc-!`Z(ol%{Fh#I6i23vCHrmRCTBAs~GveG6E&(6k z!UU`YAtX$Pig5h} Kod+0$7D7_}tg=ImcZAjiP+$QuQj)46tkwdnH$!pP U9(?qPqDa(7A&}P79-s6EB5p!p?U<$ z##Bw*QTh3|jQ{D9X}-Z@ZBM0#1l>(l(KX2_IL}QJmz>>%M{_YkW$N{ J(qN`W?F_?Q2h5f73O}Q>Kv>;I)OSHnmABAXYo(j|2<7+d&7-8pE6F^l)+@` z<`%H=(A1=7p|u9GFz)O1))v%X15*%O 8? Zae#n|x?V&@{M|9?)$Psox_c6mY*p#5+MF?n#xffmF^} zA-mT r&ZtXtT*;3+v>q)H=XJ?8EJ`v@?{Q>R>!a6IABbm#t~6QMpXs{)Gg*F> zL+on2kV3nBI~T|GQ!~lz((5-*AGN*M%AO#Vd6RfXWa_lTRr{`7shC5b5w^niuUY2! zVxL4w_VI{Z^6cO6qSO;@%G_}<`;jr6z7;) I zuO{ls(22 fG2T^>*- z%_|<5-(6fuafRynQlzpSe1|5gi=w?3&A~8z{Y2dicw&NHx~Ov#Qc0|+DR08bv$e!I z{6~66q2P!5Sg@>p{1T=P&U|9$hUrJoHcsK3(jRUahjt$F8oG+_h~}dNMA~pL(=M z 2z&l#xMz74{5Fwdfanw(>G5Cqin}%v3fJ>jY3xoLP&C@Y*oqBe@=-nk3_Xr z{tbfU_1K(~I!!R@>-4o6ZCJnx5Q(W}>-cz9;etzY`NSvqJ!MylMS#UxfXX>HHwT5X zv^P5uDoS2-@fvV?)M9m6y;n*8m9~?Gi=U?_gcrfEa`nhBC67ZQ-OR@-uROH3b}OkE z;B_V*%LrBC(M``YH`VxndnS^y(sZ@VB?~Q*{MjWu_r8h5oFt{k`a^lEhNn>7+-O3Q zvfh|ON7s$4{2MZBdD-pN&PI#tSq)|xXxx|jOum`Od^<@y#j7b2iS^y2)k?+n2$tMb z`{Ep=!kO+eiBS1O2NfGJ5wjtCnUSusa`eI^pB869o@k{^iNfX5e0_>R$BEL=!#5O6 z^?arM%r&CWx$83`ze28 zlq_3Z@GH)+6uZ$EZPhB#JdVr@itkR7UA9iX?p&ieEVu2@<_5kxvQWc5SyXbYfIMD< zi80Kv)e2cy*_JadDb0v?u-CK>u@vY_$8SniTFP#X#++D?K-AptYcj#DOkT&HN2Uc& z^t?<9Qs=9wHY|s_Ms7C?YUHYTp-uWA9&HVUH4iCitKOEP#Xa5qvwHK^#B_s9Ej+L| z>V-0YJ%4fH35|KLSPsvjiL`=p-P{WE9}QzZGeu_9^Lksm;+d3VvkW#H2MWG}m}sU7 z)T}s0yi;5^5-^qW)d{xy-3W#{7MYex<(CdGAt$_YP( id95Z 8jNo`iMZsuQSvWJ0(w;g3V0Ae}} z8eYuAhd+90R}yJ|`UA4b?i|eCIOo&}U&27iUdDr}j?%~+O-bZ{Xxh76F>+pF($z$J zoh# un&^Xu8$3C;ZhhV< _fVd9t=}lt|`paIQz5kAM6&G2KbXTOa}L-h6~cZ7d!Zn=IEeDXIt)w>L0z_ z`#KGF<^?Gp^4k1 ~i1hqdXp{d?p+H=|@M%;?h?YM@7CF>epVmiWxhk{6fcq z-*A9xW5~tu$Vq m9GeuR2LDEK@&p*vIoO%hOiR2tQ zcGCp%&iLZ-OQKA)u+r#M8VO~PDiP N%P&KYhoqeO+%7^BX~^Ovop$bh zdBjSLyrXFi`%}gPN36tYQ;rw81_pAzO_-Gh2%3LgxsrIf-vrhaYsUE`)%2x)$ oGAgy7jJzg_4;L;woIQsSL_q%#ORl|OtiB< z9+eOMZYA1YB!awb8gHh*_}(S;m-AE!_b;b*OuWre)Y~fXcQgG{e anUf0X2Ma_CIErM8Ca3`B5}E`HYz zyYc{UE#YKv=des-lePn^MJg@8?65|MM>U72^sI7)uh2Cv%NuCxyI> 6^`U%dI6F7;regZa?qg<-_QBo#W6wdk)XMF@XueGgN!kO1l(7 P=}{=9IvA?v~*y| _dqg#f8Gw_#~N1O!Q}xTQ_x#`a*(t*zrf z&Y$sOeh0Zlx<1P~PP&2X *m!sAmx7qa7{|YQaX+19 z?fU^agHc^oL*xHoU4V7ZvOQuP{Oa}RtKeSiKRMin)xRVOiW@U$nZh`Yp64FSpD^ML z>ibvD!2}Q7(j4&D@3a1Vmx;kRNT)GVHnxYheSNomJ9ca4_?3U22XY^$f|oYm$i&I_ zH>>M}e+=Rcb32_-&EwV27hO4wJ$(HhS?~ObY~-YAky^%WU^^5ia^}0aQRf@w=dV6_ zJ$K^cqnLM+jh`g=-ezmo-XGDq_ZWR*KF)4FOkC;88??v=s_|5Xrn0?ouU4*lbm{~D z=?EigUzA&<(@D*bgHEKDFAmp_WcQy9*UF1{EN~t6w1PYXzN6wJi2L(q6vI1tbh?I} z+$w09!&@Wqw45tm;7TIzg p!O*#rJ|&xT_eTS6r(=8b$AaGlGg* z2A
C|tf^)RlwN{>KmrPglu(k;MEZ|ZDG5X% z5E78yl%n)sKtx)UA}xd>y|>U6DbhOu6p$t=(owKb6%g?qy!XEMzFjycd* L*?dO`%A zF=7RieJAw3nuTo**7E~1$-&7RoV2WOg<~dirOWZlid0=oDK53eb7)KY)>Eh05;FJC zeH_1{P0O=?4wrBLC|?fp$q82wZyT!+eBt2J#ahj=U~a_tRoid?5SQ 3kv10 |` zY?f`+Z4r+1coUWTG*K58gBj?9xe3AC C%&qk%W_(L3;Zc)i5*G)`Sq2rDfn1m~;p zMX-s*xijYkr%`)fe&Sum+$+ekgm(YFKA~1dsvKGnwy+eNn02XPuukVyvC^rGv40=% zmaVpY5E|qh@~ppKh?zx^t-}oYa3yvv_G7PEnl(N5y}nZ#mD7Ln!h(LeUk+n!5AO?= z-8j4xS3Q6=z7B%Ly(yc-#FS3Utg~NJSxZv3s5$lGOI{OCLtltF|GxKPnU yo;b2?b6PHmlQX1_Vf@xYhF*v-;9ln7TMu=y))}^m}q}W z({g%Y?NC2vhyM>1y8y@)J@ve}R40adc89sx)^1cF*l$Fn7gt l6hF(h(@@#nQt^9i6rnV;D1*Q#&k-!$esN$j_CR8SwO0_2Jp%}~FSjC!~`@A@8 zrO3iWK|A$Ta58U0 #G
0@8uLJUnaw%__c5!0M^cVI@r z$wFQwFv-iwLcs|~js?V*cJDJ0<~%vJ558PaizirP2kW+9dJ^bG|Gi$^T U!c+Z
x{uoUn%KqPN#%VabjZB%b?k_ @j~=~HTl$#uD2!+X3g zoPu(Ll}HuyI5$Onv*RLZkBN$%s*yQ8{uj=_fKEn>fXG0o&|vP%>_c$6Idgp_(mO(; zErj$|m#_{BQPYWw_{@4TZ+!u!_NxQd0c($S5RP71IqNO=d3y@**t76OeC+Eek1Ga@ zy&`@Yt%cH#wla`D1jcQ0kjmQqZ22daDDOtD;Y5&C63vQwl68`7^;E^3mjqMX6Yf*a z;r>V6m??@~HnY+G!MVl7fAOY4U9FxzeVTo>ZlQK}1iW}uLV4Sxe0P9e;d`Pn(jAKR z |%v{wJA)>NfF{xuHYD#(ub7p2K z-#8Fl_*Bp40N%=mO3@*GwA=&wl0{v#) G&%>6@%;{6{4UO_y)owW zrTGK!gembUuCyU!Y)`UL2P+R=2<2J9=~Ns%SHW4PnBO$h6oVEvlaf}OizN@3-IblJ zIPA%b-F#i_52;dwTp^J<2w9gMv{(N2gz^ZrK#bY~V(rkKE?cZFv&W6 QH2u 3;uop>pc>W8?+LQjb%2>b zM&VL~G@6V-BYQ-u;2Lt;LaliEq>M1>OwrtWzdRE$7nl9r8ZyuTaBX zU1xuKBgol@Y*FPqPf;CalUTB O;0+sM7KqsVo$T-=ehMK$+KeZQnc$u|%|l&0YpucXVGCc|`u5t7 igBZE`6Bkng~K4N)V9LXGis7Zsz3@?ed8e>&p#RYn&F$JjZ>)fH8cb@ z+yHvXxQTktBcX6CFz+by#ddN^#9_3y)i(FlFx1?TC<_i06>lS_M6SrZaFzQ&)otJH zcDt@T>P6iX4H^0)<14TG)wYs%)S_1w)fO(eFYuS|$fazfTpY~swlX&sG4G@%r@-k} zn8Y%Lzth7;>MOBx3Nt2?krzX1h;)k|)V@wg)uW*V$7i?KKUn2xfV9Aqspx8@lo&}E zQhi*p$ejhQ&j*Zw`R;ahHgI@fxQ(g=O (ooy{8jnAXAzu;ZKSA@rO$8ZV1OZ*{<(03%0!U;L)^4 zWblek7nZ >lOXzfVwC zr0oivk1p!%3XF6YTl5xS?E6E7i&q@T9LR*zak3LWg`bHQH1*W@6g &hGUA8rCSSKxxGW128rIOjVhkHmlU>O-{Wqy zp2HSV0>w9uT8#(^wh?)DczEH(`gprVt7?mOvBjNcc}|G-+=C+h?V%OD#Dn~~y&vqt zcl7&3`mJ9--p~#&MB9Za1Si$L$>@CK6vnwIx))QJN(H8OM0>EWRbxDMWBM(9JR5n^ z8zRx;C2_?^oouK4 Qyn80_5gbqFyQ|@hz z=naie8Zy27uVtu52)4Dsid70uI;re55~a~(69Mso_2Q70>rqB~m^Sii$aIxPT2oJo z4#`;2W>+}q0m;li%km?< }}p-MQG9&A;m%h8h<|9Q{fV0ZL?$ehc5MzXN* z^y+Csn3h%U4aKZ=)_aV5#%iP75NMuy=!-%fk1DzeG?^Kg@yYkOs}$TDeGEWgrYgs{ zXc&mDqD!JPS}`~OGrT|byi*nC9jq`52N!vZshhci?+>7thzLQ_)Pwr*1lot2HMd#D z!SvK#RB^MYR_*_U==#D;;pN(8w>@WMfN<$QI{{q2Une_IiXOfj3xI&E|olev6 zJ(+9dOK2!<29G>5 )$9lQWlxuzD{Y( zcJ{_drsgk4u)6gAp%M^Jf5$)EP|lJ?y%;i0snP{RpjetIY5{I}`if9fo%D5!!o1Pq zSkpdUWo*2{6xg~QhL1=ym&ls(zMXnJXqtHv=Op8g-U^f9*T^o}8#8@cht?;U`$NObDK5-c}2fr*D6( zR+Ncuqr!YT2Vc&tZ=r^@mUB7y@ szNj36HkNbkrbW`jz$#_wXZZZ-Io#FU43>4v z6PeYK{}Ej==|e|kZ2svthwTqMlRD9ZrfP2=QlbMbK%X-|XZe4{_cKyo(z4OAxgn~h zFojn9q~OJ3`xx;{k&Nko^Qa#hTQ7uAHq@=W8B6bH(&egOeofTGIjJ-)e;yUW4r&*o zr%0OGPdMgzQU4ff>BW1nQhRMqjC27*OysQuLmjAhQL{?EzF)g9(m1Zv?A}!?p$F2^ z;-$nxkxH3qw0q~;aKVtdox0twqi+GF854oFi=j3zCQX+wtm*0zrM~$7V5}>080gtl z<|H){KvpD+He^YYA2WTUXd?%%ILxdsaByQq@( + zky))QsM45HR~&v{tP%f*O0g_s6)rP6a%yBO#b%BThMUrT?6T%mb`-AmVhO))73--X z!^dIK$R>}$Xlt?TW+GAWRZ@Ocxj1j8?{9iu9S3@tDcyMq3q*o>ak6Ru&BtrO>93Ee zWDcEj1Z;W8za(}KLHyl~w2SO@x|;*h3XU)xf&^ypqR0|a`Np1E;V0J2F0BSK_79a5 zu#^#^$mGc!aj124EAp2Y-^{U{PFRefLN=gNU&Y2w+ogw-7i#YG^rhU`G3a3y)o0{k zpkWn#=KP{iz~y=I348!e9h=Bb-4y{binL2#!<;O1pIkYN?29ucPj8-bx6@4qvU9xd z G{Uv9zcB z1tVb$L}%*TrTpZ=r QoadpO7uBMf=7a`fYgF~lz;OUtJrex zwd>qox+#v`HBZm>1NtTsv^1GeVUWAr(BT^*Z)$SvArY+sz}0`N%tn=Uf?IuX?aRW# zkf4Q-u3L+VV2NHG90*wvQqdOh{x56}jqge;r7DRL?DbwOAUwnmw@teHJ^>KFL#-0d zmwBpEsx40{Pb8-Pvd^Py&*!i`<+L7r? Ie&wDM> zz0bPLAT!lW_V!{f;hXrOYh$7KLqO~g)uT?O1D(9+jYAKmBHVWB?y7IrdeN%oq4f*i z=}t-;s}8^K(((D%y 2ASkrkND{q{~`qCg7GqkAH z-PJixU93%&=oSc83tgrH{9eo3oy#&~zkNeKK6-hd^YQ1QHKj5Aq0bH6(z2C}w{~kO z@!A_{f2bZmUMm=x!xEW #itkk{9Zt%5q?$&{~ehXr|(&!IjJF zhkFIVU1-h+$*=pr*_{;uSHEMNwf%laZ7m4uoAoMj#17mX%2(OwwOhZ!6+Y6eAG4O< zabfFXO^MU81r^&{<=RCVZ6etO(#3h#fV%N5Tx`A8A$q*;HbE@2A=LpdO;tKx7hEh* z*J+I_ZwxND+tN_HeP^MpPUWyI@V>hR*HleGP07tm{#*3+g_0qdBt2?f$XQcYLEeA^ zFMHA3^L!rn#5iqB`s^=90 S?Y> zm@1K{Yqg-`%!LIWaps|+B6)FLr!+^0MI+0dO0gjwZ#TXs*wSXK9U86%{lavZw`Q%E zb>PYPnd+u*`Dz*xZM%P{ws+Jzy0($^Y6dU(sIPms%6?o#*Q@wqQaOqAmUx(;pb%Wz zzgnx!`~~qg-3xF8y=Ws03R=wU(`BRE*%sSpt<=cs^V IFV}@a*;A z<2n`7B~2fG;DbDg8t%p;sRO0k*lW9=ShB@{W&zs$`bPT0$8l>v`m?D>DFYqC**aYj zkv&}yj5!HXUS42 Vc!%#XJ)20ex8YrXbr %ATRHtPBx!*yF6 zHo;q&W_^iwaU&@d@573v c;jm=rB-PPb%ap? zxNV2=rJE<^@4C!w#ifr-Lpo@Im3;YSf(u=sgcXs)5lI_^iowZncieihw9HM;WaxM6 z)?_JnkpG+U5B`m>MI*nJ*OrccdF+zM4l%}`hZn_zD!!*51-gG+v!y9KYWSXh{+vb_ z{V=tVCOZrD_4mbG*WZL#1RW~uU29UCQi*#1qL?}gq@>O`7yr8dyThx{d9}`oQ-IR2 z|5A$FMFEW9#u2N40B_R~PJ<2072B|L%%S@xxQo>uZIAXJBy7d|i1lTKz);%K=E1_P z|6W2&-egwui1#V2om#O5u0O!is=|@lt%7gL$(eBIPU*yxeO-U8OLR#jIzZ(*%Nu+E z2qEp@zfBW{AtXj)2u|3uKwnw^H-tlRynnN*Q5a~R iF4wcl>VzBQ$HEDo;JF_JKa1fpHdHcco^8mwepbVKEqT=acNRkIlL?G zKH9Eg2iI>03BmsV7nO&O*LKd7%608NHS#j|YX6o3_o@cIGO%0&Uv9>Mnv0J-5|?~x z6b9#3w0~Zx{(rBZ!PdyXoZADQ^(=6zTjxoBR8W;p$kg@kw}${c#7AAWIlCRIAGf;g zkUHcOePxcn{o}v?$S@~OLu@$%mBdH>8I_28VYxC{6Z3ZpQ4`u5F-HjpdF)a$nVl9c zvNArc2@sFNs67jc)kgqY)qzH9{~T2FC+5$kVf3aZQt4UZ(jHZ$UM;t~2yP2x_;+Yt zy7-9Fm_d6zZ=VN8wb@B>h}OE=&YcLx6lqiKBpTR2%{o3?_Q7h(?&^{2QM|~=N@XWe zh7wfvnrE1fEzQ y-^|9;?Ro&OoPTNWlk z40nsBM``QQJrV9yoz|eRX9Vi4SlUsXw{O3lhJU@X+rE5K@m(?((?(fWBk9Jw7i#$B zI_2n9k=L#ai?0|Gw6gXA5W+wGazUs)MBeYP*{fD%M?eupEU>$ltE_QwxS^fQg3OTF z`{Lcyb)3d8X+&~MwYkRVzRHw4rNdC1pkpd3U>Eo}@_zsld(~!xX5$;CEo*kLTr6)- zmXdy(PWLy=e=sy2%~Y&Zf+Y)H75Pz4p5$K6a!1iQ#Uut21|t`c{3SuDuTQ)6bKGlq z^Pci=DrLcU8O^Dtwx#TBsLz?j73FrC3^7`>) ze!6GhIlH>Z%MY%{CEhJN(3(5!6$ujk@9SE_Zt4r zc@n$aRH;>$rJrJs6z8bYYc$^Vy{oU9;OSfDJw+R>#7}xL+ozk@X1H4$o3jD*)u*cv z!ZoYS*v(j=Kgjs1ywUt9%|@F-j`AnGAkC4-zH<)t)OgtzZ*v9Z>aRVfXQU6%buYMM ztkWy5&HaVRrxog-J(5;+p~Cw2N}c>c-4IIKB@ERC&IjR!U3)K9n _m zEw5XyB3ADIqWlC8?Nat+o~{Cl8IgGR#I?&A8 uXR+8HeVoK|d_(a{)9TOY{Mj4X7p~_?=DM$|J!i6P@GyJ#Q?+HhDyDNLI!@nb zO~}$IO7I1I?!gMg2@`4_*#oFs2GgSJtIZz1ZxV}#`V2iro7#FdJTGraE9j#ai~_0? z`Z@*rmXkoLxp(MxUE)NcQhC#T!!FxJLW$L|svah+goXt;# Ko=IZzK)FmgUv&DwQ=85kw+AhPXQxpf)LY#6r8 zABrx9uxeQ%hTkn+q7t2Dja%P|F%#H{&DwRYrGXx$-XFx6+4yL!rp(@L)ZcY-z|q7o zG%VJA(<^pxyHnDXh88H0_4@o^c_5Poy$-u}(V2Tqf~GKQxj~0gcsv$h4e++iDVX|g z7e&hZQZU(1M5bBi0rXeDA5K9cH#^r%MxV$IIytncT&hUCGA1?vs++NDD7d&l{gCrk z1ILtM$L_F3naElHOR!ZfIzsNT1#sXjtk%J@OFbo({TuZza7@D=svu}c)8@Ua!~6s` zaVDTyKZu75aNK3H?9!))K?zKEl9{PF+Lt9Tw<9r9Z<3_UwB)slY3(ENXdi&UqSGb4 zBKAZW_%+F|Ja6guvTqlHa(KaoJpvn>I+j^iNOi#sU|;&{DpOvH*x_244O5NYUwsD% z%Fi@oB2K~YR^EDug7I$ns9*W1CzvzIRgi@bS->d0gr*hvYSY!6^ovx^GyOGz2K2 zHJ3zs&iIeQ+R2f*@%HJCN*`Dvh8cD}QL Ck(dX48Eun j+l`}-1b3%X z=Q3CTcSCK`pwQ@%<4Iy*csnR-7wUUPPRJdr9Jk-Y(VTT?SR=g1Tg7 v{pr z62n0d8Oy{Ji$?rRiN-n)HMKeY^%YC65yu(7oaXDm4(fLfRBiaZ2XK^VknUDpAkB2pwm>Xd6Kcp!gVWLtBvg}@~4u|({@#At~j z!VuEl4i0W8n%=0tt!$& I$wKKbs-w4kEYbAoexDjNu2F%fqMV1R zr!=b}nx{@2 6jy2=dwBziGy1c?SEDz;20TEM4#cHG4; zE^1LF2M#7!yI kVBXL=QTu ^KVk+@A}lGkSf_`zym2v->MC`Ukrl2ox{$;Vy{?XM@> zhB5tG4WxRHwf8z|dgpI@mzRFI-=};iGonJvW-r;;v;)Os#%vqm)#XTKlO#9K_j>5m zwB6e_Lh@?$cgBClU2-aO_D@j{gyqP>Q2%bBb^=vAW=dM7kV^)hP$9Tz)LU=*if7x_ z1lsNXBY-16-Mz&gfp2)N*fx;(sE}$CgM=1l!OCY*yGz}SAT6ZH->OYfzWUGb)mK4{ z>m__yGX==wJ$Jez(!4eoPux?Vl`&>F++Wu8#Jt d(UG`bI#hL2+vEHo-2y= zA(mIihGk)NCsX`F&yTI#A6EQuu~Qm<7*p?&Q|{2&Z54I-y*m;U*2AkiLNm=QufhW5 z)YS&g4*CvVIX2UsC*Cdb^T@$FE?LDWKil_FTBK;6%Zp`#+^45vsx#LBm;yU<9^CSo zZ(yq5tsE{F+s5;_Zwy`Z7Nu``WZ~9=-rG$XbIUQOmltGSOB89@z|g63Sz15M3z$>LdsW|m9V!~^y`Wzfd!@6Y-Q`yzHXwcooOU2H2Ankr#Q%aF z_o^A6Pu^)9D4H+aH7Kw*_bks7Sr8iXOYUxA7|t4 *PI+?2^AjzT0KzrHe%8j7|n! zzNGcAhRR1#U93M&;C5lkkdJsa0CIUl95~AX_Wm_=S6!80cySR!GBJlWX35sZMBIHV zR^@fnFIfMb(+bT%gx^G-LwZtQ;Sps9lfv>Y>5*?m5=2s*%>@2cQ9?1im#K0!d`z~# zD^L+>`R`YKtV?U>4cCruu2y-16r- @xxtSZGv?%aGh z-TgczxslzOy=#+0g%-D3f)gGfQ^lM*#+Ti_4ujOsNcuzdZ0}@C1Ap;oxfGqvFwKAB zQ&Hz-&$v;eK?-Hiukw2zwt7D~d7YFh>h=>J>Xo{7d-NwxJl-;Q#oc-!_rYhjP$qRQ zjox8E76sNaq&vY=bPpcDm9rL2w4=;+^cu7BnIJ$3Pq~dNp0&kTDsFZsn>=GuNl{;3 zSNUd462JN(q%n5%C!?9G|4M>t=fKlb0l@R+Oa|=yC-e1KBb6fT1$V0dfZ`Q&MTcGT zS#6y{k mmFqPjo*v9q3Q<@B{-KtG1+b~h+v7es*8-sX;u<`7!$slgx5;?d z;FqSZf2iKP>v8GD)B+2qkZ~Cs`B}8W1f*Qq9qen|^8y=ha(KZhLQ4BT=u#x6gMJ__ z^|l6l8{TihU-A8rMnJ3&=Vo~8$n1R6n+L(|XPfYufJNG0O~%>X|5ATQB3SVghkCcF zpU>bdbH5;MT!Zt}Uujfjg+3|RMlF|EeNv=G0TyoY0p-!Zdm=as>2)m`G`QF)2^PyW z!7E3``(vtG(k}lbmp9B)?#URhgGV0~H!Vd0$al`r0&0_LYXo2{wFLp{HMSm5VB^XE zxy5dtsWTb@O-67#tWQWKxBZQZi|hUBjDIZC9_F}i9DmLe1K4NC$i{u~azrJt$vQ=K z2{|gHS&|E3#+5sh#B&h2&8McnZ`ftI2AMt8+kEZVkaMfdFY_;Ab$ RsGvohB;5ng#K); +%wqFgW<&LK^jDX+GiF)Bwmzv{ z755{{M5e08A>uv?Tn8d%o6P1bui9!qcMA@_@(U!zdsV! B^5!RLox|iw}#B z*4T3rQ}BUv7R9tbg)~_77L_sbnJL>7?0F@LLf}|(U$J0lp02ex5gGyr`zv0*+}+`Ajc%zn zdN}I*7FG|c=k@;Z870_<>rxR2-Z(N|3SV;9@vsq!5`Ql$1TT@(<**>*c R=SORfpNQnWBwFxgp7c zH+!aEMW0;k6w`+RQ^?cZD>Lesu3MBSPTiwcqqYjWk?!M>w23ZwD*+DL0_r*3eFKRU z<@iK(ZP?5W3j?8V_AK!0S{-;fn^bg)X;I5Hr|wy46JJcyMjPDVu!_F?o~#7LOXTLJ zYNrUB4L=u&`A@aX)3jhK&Q