From 16c883c71167fab87fc2f7426a06248c097924f8 Mon Sep 17 00:00:00 2001
From: Davo Smith Attendance Merge Accounts
+
+
\ No newline at end of file
diff --git a/db/upgrade.php b/db/upgrade.php
index 12a0b95..8ec0802 100644
--- a/db/upgrade.php
+++ b/db/upgrade.php
@@ -85,5 +85,41 @@ function xmldb_attendance_upgrade($oldversion=0) {
upgrade_plugin_savepoint($result, 2014112001, 'mod', 'attendance');
}
+ if ($oldversion < 2015040501) {
+ // Define table attendance_tempusers to be created.
+ $table = new xmldb_table('attendance_tempusers');
+
+ // Adding fields to table attendance_tempusers.
+ $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
+ $table->add_field('studentid', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
+ $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
+ $table->add_field('fullname', XMLDB_TYPE_CHAR, '100', null, null, null, null);
+ $table->add_field('email', XMLDB_TYPE_CHAR, '100', null, null, null, null);
+ $table->add_field('created', XMLDB_TYPE_INTEGER, '10', null, null, null, null);
+
+ // Adding keys to table attendance_tempusers.
+ $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
+
+ // Conditionally launch create table for attendance_tempusers.
+ if (!$dbman->table_exists($table)) {
+ $dbman->create_table($table);
+ }
+
+ // Conditionally launch add index courseid.
+ $index = new xmldb_index('courseid', XMLDB_INDEX_NOTUNIQUE, array('courseid'));
+ if (!$dbman->index_exists($table, $index)) {
+ $dbman->add_index($table, $index);
+ }
+
+ // Conditionally launch add index studentid.
+ $index = new xmldb_index('studentid', XMLDB_INDEX_UNIQUE, array('studentid'));
+ if (!$dbman->index_exists($table, $index)) {
+ $dbman->add_index($table, $index);
+ }
+
+ // Attendance savepoint reached.
+ upgrade_mod_savepoint(true, 2015040501, 'attendance');
+ }
+
return $result;
}
diff --git a/lang/en/attendance.php b/lang/en/attendance.php
index 3dcb964..5ac7897 100644
--- a/lang/en/attendance.php
+++ b/lang/en/attendance.php
@@ -24,6 +24,7 @@
$string['attendance:addinstance'] = 'Add a new attendance activity';
$string['Aacronym'] = 'A';
+$string['adduser'] = 'Add user';
$string['Afull'] = 'Absent';
$string['Eacronym'] = 'E';
$string['Efull'] = 'Excused';
@@ -51,6 +52,7 @@ $string['attendance:changepreferences'] = 'Changing Preferences';
$string['attendance:changeattendances'] = 'Changing Attendances';
$string['attendance:export'] = 'Export Reports';
$string['attendance:manageattendances'] = 'Manage Attendances';
+$string['attendance:managetemporaryusers'] = 'Manage temporary users';
$string['attendance:takeattendances'] = 'Taking Attendances';
$string['attendance:view'] = 'Viewing Attendances';
$string['attendance:viewreports'] = 'Viewing Reports';
@@ -69,6 +71,7 @@ $string['column'] = 'column';
$string['columns'] = 'columns';
$string['commonsession'] = 'Common';
$string['commonsessions'] = 'Common';
+$string['confirmdeleteuser'] = 'Are you sure you want to delete user \'{$a->fullname}\' ({$a->email})?
All of their attendance records will be permanently deleted.';
$string['countofselected'] = 'Count of selected';
$string['copyfrom'] = 'Copy attendance data from';
$string['createmultiplesessions'] = 'Create multiple sessions';
@@ -88,6 +91,7 @@ $string['deletelogs'] = 'Delete attendance data';
$string['deleteselected'] = 'Delete selected';
$string['deletesession'] = 'Delete session';
$string['deletesessions'] = 'Delete all sessions';
+$string['deleteuser'] = 'Delete user';
$string['deletingsession'] = 'Deleting session for the course';
$string['deletingstatus'] = 'Deleting status for the course';
$string['description'] = 'Description';
@@ -99,6 +103,7 @@ $string['downloadtext'] = 'Download in text format';
$string['donotusepaging'] = 'Do not use paging';
$string['duration'] = 'Duration';
$string['editsession'] = 'Edit Session';
+$string['edituser'] = 'Edit user';
$string['endtime'] = 'Session end time';
$string['endofperiod'] = 'End of period';
$string['enrolmentend'] = 'User enrolment ends {$a}';
@@ -125,6 +130,7 @@ $string['indetail'] = 'In detail...';
$string['invalidsessionenddate'] = 'The session end date can not be earlier than the session start date';
$string['invalidaction'] = 'You must select an action';
$string['jumpto'] = 'Jump to';
+$string['mergeuser'] = 'Merge user';
$string['modulename'] = 'Attendance';
$string['modulename_help'] = 'The attendance activity module enables a teacher to take attendance during class and students to view their own attendance record.
@@ -151,6 +157,7 @@ $string['nosessionsselected'] = 'No sessions selected';
$string['notfound'] = 'Attendance activity not found in this course!';
$string['noupgradefromthisversion'] = 'The Attendance module cannot upgrade from the version of attforblock you have installed. - please delete attforblock or upgrade it to the latest version before isntalling the new attendance module';
$string['olddate'] = 'Old date';
+$string['participant'] = 'Participant';
$string['period'] = 'Frequency';
$string['pluginname'] = 'Attendance';
$string['pluginadministration'] = 'Attendance administration';
@@ -158,6 +165,41 @@ $string['remark'] = 'Remark for: {$a}';
$string['remarks'] = 'Remarks';
$string['report'] = 'Report';
$string['required'] = 'Required*';
+$string['requiredentries'] = ' Temporary records overwrite participant attendance records';
+$string['requiredentry'] = ' Temporary user merge help guide';
+$string['requiredentry_help'] = '
+
+
+
+
+Moodle User
+Temporary User
+Action
+
+
+Attendance data
+Attendance data
+Temporary user will override Moodle user
+
+
+No attendance data
+Attendance data
+Temporary user attendance will be transfered to Moodle user
+
+
+Attendance data
+No attendance data
+Temporary user will be deleted
+
+
+No attendance data
+No attendance data
+Temporary user will be deleted
+
Temporay user will be deleted in all cases after merge action
'; $string['resetdescription'] = 'Remember that deleting attendance data will erase information from database. You can just hide older sessions having changed start date of course!'; $string['resetstatuses'] = 'Reset statuses to default'; $string['restoredefaults'] = 'Restore defaults'; @@ -206,9 +248,22 @@ $string['strftimehm'] = '%H:%M'; // Line added to allow display of time. $string['strftimeshortdate'] = '%d.%m.%Y'; $string['studentid'] = 'Student ID'; $string['takeattendance'] = 'Take attendance'; +$string['tempaddform'] = 'Add temporary user'; +$string['tempexists'] = 'There is already a temporary user with this email address'; +$string['tempusers'] = 'Temporary users'; $string['thiscourse'] = 'This course'; $string['tablerenamefailed'] = 'Rename of old attforblock table to attendance failed'; +$string['tactions'] = 'Action'; +$string['tcreated'] = 'Created'; +$string['temptable'] = 'List of temporary users'; +$string['tempuser'] = 'Temporary user'; +$string['tempusersedit'] = 'Edit temporary user'; +$string['tempuserslist'] = 'Temporary users'; +$string['tempusermerge'] = 'Merge temporary user'; +$string['tuseremail'] = 'Email'; +$string['tusername'] = 'Full name'; $string['update'] = 'Update'; +$string['userexists'] = 'There is already a real user with this email address'; $string['variable'] = 'variable'; $string['variablesupdated'] = 'Variables successfully updated'; $string['versionforprinting'] = 'version for printing'; diff --git a/locallib.php b/locallib.php index f003c73..09c8b89 100644 --- a/locallib.php +++ b/locallib.php @@ -44,6 +44,7 @@ class attendance_permissions { private $cantake; private $canchange; private $canmanage; + private $canmanagetemp; // Can manage temporary users. private $canchangepreferences; private $canexport; private $canbelisted; @@ -122,6 +123,18 @@ class attendance_permissions { public function require_manage_capability() { require_capability('mod/attendance:manageattendances', $this->context); } + + // Check to see if the user can manage temporary users. + public function can_managetemp() { + if (is_null($this->canmanagetemp)) { + $this->canmanagetemp = has_capability('mod/attendance:managetemporaryusers', $this->context); + } + return $this->canmanagetemp; + } + + public function require_managetemp_capability() { + require_capability('mod/attendance:managetemporaryusers', $this->context); + } public function can_change_preferences() { if (is_null($this->canchangepreferences)) { @@ -588,7 +601,7 @@ class attendance { $this->cm = $cm; $this->course = $course; if (is_null($context)) { - $this->context = context_module::instance_by_id($this->cm->id); + $this->context = context_module::instance($this->cm->id); } else { $this->context = $context; } @@ -738,6 +751,42 @@ class attendance { return new moodle_url('/mod/attendance/manage.php', $params); } + /** + * @param array $params optional + * @return moodle_url of tempusers.php for attendance instance + */ + public function url_managetemp($params=array()) { + $params = array_merge(array('id' => $this->cm->id), $params); + return new moodle_url('/mod/attendance/tempusers.php', $params); + } + + /** + * @param array $params optional + * @return moodle_url of tempdelete.php for attendance instance + */ + public function url_tempdelete($params=array()) { + $params = array_merge(array('id' => $this->cm->id, 'action' => 'delete'), $params); + return new moodle_url('/mod/attendance/tempedit.php', $params); + } + + /** + * @param array $params optional + * @return moodle_url of tempedit.php for attendance instance + */ + public function url_tempedit($params=array()) { + $params = array_merge(array('id' => $this->cm->id), $params); + return new moodle_url('/mod/attendance/tempedit.php', $params); + } + + /** + * @param array $params optional + * @return moodle_url of tempedit.php for attendance instance + */ + public function url_tempmerge($params=array()) { + $params = array_merge(array('id' => $this->cm->id), $params); + return new moodle_url('/mod/attendance/tempmerge.php', $params); + } + /** * @return moodle_url of sessions.php for attendance instance */ @@ -1058,17 +1107,53 @@ class attendance { $users[$user->id]->enrolmentstatus = $enrolments[$user->id]->status; $users[$user->id]->enrolmentstart = $enrolments[$user->id]->mintime; $users[$user->id]->enrolmentend = $enrolments[$user->id]->maxtime; + $users[$user->id]->type = 'standard'; // Mark as a standard (not a temporary) user. } } + // Add the 'temporary' users to this list. + $tempusers = $DB->get_records('attendance_tempusers', array('courseid' => $this->course->id)); + foreach ($tempusers as $tempuser) { + $users[] = self::tempuser_to_user($tempuser); + } + return $users; } + // Convert a tempuser record into a user object. + protected static function tempuser_to_user($tempuser) { + $ret = (object)array( + 'id' => $tempuser->studentid, + 'firstname' => $tempuser->fullname, + 'email' => $tempuser->email, + 'username' => '', + 'enrolmentstatus' => 0, + 'enrolmentstart' => 0, + 'enrolmentend' => 0, + 'picture' => 0, + 'type' => 'temporary', + ); + foreach (get_all_user_name_fields() as $namefield) { + if (!isset($ret->$namefield)) { + $ret->$namefield = ''; + } + } + return $ret; + } + public function get_user($userid) { global $DB; $user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST); + // Look for 'temporary' users and return their details from the attendance_tempusers table. + if ($user->idnumber == 'tempghost') { + $tempuser = $DB->get_record('attendance_tempusers', array('studentid' => $userid), '*', MUST_EXIST); + return self::tempuser_to_user($tempuser); + } + + $user->type = 'standard'; + // CONTRIB-4868 $mintime = 'MIN(CASE WHEN (ue.timestart > :zerotime) THEN ue.timestart ELSE ue.timecreated END)'; $maxtime = 'MAX(ue.timeend)'; @@ -1516,8 +1601,34 @@ class attendance { $event->trigger(); } + /** + * Check if the email address is already in use by either another temporary user, + * or a real user. + * + * @param string $email the address to check for + * @param int $tempuserid optional the ID of the temporary user (to avoid matching against themself) + * @return null|string the error message to display, null if there is no error + */ + public static function check_existing_email($email, $tempuserid = 0) { + global $DB; + + if (empty($email)) { + return null; // Fine to create temporary users without an email address. + } + if ($tempuser = $DB->get_record('attendance_tempusers', array('email' => $email), 'id')) { + if ($tempuser->id != $tempuserid) { + return get_string('tempexists', 'attendance'); + } + } + if ($DB->record_exists('user', array('email' => $email))) { + return get_string('userexists', 'attendance'); + } + + return null; + } } + function att_get_statuses($attid, $onlyvisible=true) { global $DB; diff --git a/pix/ghost.png b/pix/ghost.png new file mode 100644 index 0000000000000000000000000000000000000000..b199efa48aee951d390b92d90730c748d6d893f3 GIT binary patch literal 48062 zcmYg%by$-R)b_J6QW}(IbVy1`Z%9jnBGMg_QqqhDkw#FYLr_Ezq-!8bcZ1R$(lKKD z=I{Nk@BRMT{@Jy&^W5h?_c`ZYoUXPi2@yRJ001QFYD)S50K&cn0R(v17gNtNdjM#T zQdd%V;y1U~dZ)p3`YBh#g?#DGj_YiOfJQZAx4X#>2HFL$}N_U)ky|eYZ;C@Aa*;HPIiqo75pB_2Gd}6!7d)Y>WQqmqP#OA?kqpiS{ z+9>Bx&@6#{3(3PhK7a<-j^MU7meIPxOmr;*vZ0T=4Ms!x?iY$ 1*=5fCk$LV$%IHvj=9ehhm$ExZI~MJ% zP}k2|HdUcxFD^!TUBZ)wBLq4MAzxAve0?5rbZ@>wIrPi5nIMFbVg_!EDpGJRi+G+H ztJiS|w(9ph@7*h<*svPX)4L9$ i-@FGZg4NXUc5jmFW{&J~73ezt(#>`N|}d7;*Mcd-t&=R)^ bEHpo zvzyrmoqeOJ$V@8Av-X)_-p2!?8FHX3nyPGu#Nm6^so|Ax@uWXQ@y5pMaOL;m4{WE4 z0B)wffQRd|{Fa7laCi#a&Ww+FA&dT%fWVJNA8W|Dw}or<*~V31;GcG$6mmpt7Qfgi z8P^FLdWq(k3WOIn4t-DR17X6?`2M>qg^2hKg*G#D@Y+m(WQ#8+ <8Nnrez{XXFcMki~H748^_7H(8?f`L=7c0Hgyx($_ZQyX{Z?zeK}<2ty|{2qeL zEZRKFYUxkR!KX7#K}_f+Mq%d+KnkIC{ 3pKVh>z4G(csx$y0z zdf4(b&%o`;cw7N QI$yupn+OL&Y);?ZVWo1A{6vaD-O@(Mj^ zX*hbMqAQ)`yX$uxwxoc!wU;j#lpb>}JpWEqcyt@+?=e5~ #lXo!*J|EJ?BGUQ8C(MD)KA2AHnoi3z_Rd8*;zcCg*u`->f&7o5^Uei%-Xhn z(?uY*9mK6i^z$$J_WHbK5-S$I&yfT2?Q$UCd+1prlMIGK2K83kmNq*Xl!Fj=p4J|u zi}S#rCxLgb$Y 7Sw zh;;W8)fsfMwa%ggrw@^==ix)g#?mVhADKEhUvBy0ry7c)#YK&PTW;s}$!0&v1xWbj zEp9%Tp*gYMM%c1fm)DyJ%91|)Yf1p-8)OzD?+0S@2T 4X-2s!}pOj>| z8^7*$hF0a*eBl=L$z^#!Mu9Jmq>2v#aJ5E6G^b!nu@QkqAM$_ZX$J!7FLe8{7fO1A zznO2DWqe)CLasWD(k#J!y=m9`|2RMUpETC>250{h@z?_^7WzTUza0RRde_iUbQhYS z`}qS%#FK`2E2sUe-Z4LQ@umVy-5|GmX{B{9A|g$?t?p+j3uXbV@^E*QMxtQ #g&Cz@R~SFW)`-3OMds6k2o9sv b^z3VHeX`rW0kMpFL#UE@b$9k$B<@qF4c009fl*4 Qvsyu zNc^h)lLspU&1p*jjYajogC`L>so!{HFX*Nx>6eBRB6jT$kY z!VTvA;`nfb n2TPj&MKLhxSviD`-QtjGHi zX&L|3FQtnSp- bpsa!+*lFxxSVio2&=q z*Ph!uY_)4$Q+tv}#}LS_v>m-mn jeF;kw$)~MdMu^{PQ~m zy*#)5gQ!{^%Lz@@spgB|L;~H%aSL{;yM6fy1hQFm@l!O 1V5|HKW!pa7l>?ms9yaO2>-$90*1x!qhdd{b;}J9hDizlS^ES-@_}yvI)L zli#P{#_nMardTAsOP3Su1-J>-8q~4X+S>(- dIf1kZi05Thb2 z5PQXM4gI %nY zZ<#yET&Nq%!(9zMRdW04TWt<<|G2-bF$e|F+W%}h@ee~&`%fEO=Y?*U_Yz>b(;mcO z#*DUvPkveJkw%im!VF?QJ8XYjcgTm<0x#?dDF0%uGa`npbM~LS#>n3>%q_?5Uo(Y{ zQ66oKyv=U;s)NQKOo_2<;z#P+v zWyl)*4cOC61V@Ms9ipMWjQU1 z7Q3W!y~(7u6k339_6Jz+QZGGRtPefNO=`B Md*{ezs zsPIElm%wX#GoYrL9ck=6R81j(@AHY~&N7w5LxnzA@q^4-SRW8H3p1LEpkaPAO5k1R zJt2Z~uFO}VBeJLyTI+t0d(lWY?>=+qQtaQK0 lR1LQCi3bA~uvosbFAS3H!(xkf zM(%%- Y7YnTbSPcPg-O)A4fig^QDON@5<}H3O{Dkidm9M zwvFky_^86T7z}+c^|+I5nVZd$J>wWZ6ho(zaA^|3$Cnbm!7`(N=efYjz@tAFY=qZ^ z-*$206&SR}HQP7Bu {9}dU^aldc0ThQ}txxt~h9qt^~#XOxt%MM)#ciMuCOk zNUYv~*6?2RNL=uz>k_9PhS;e^ci>TF;T}CT?WZ*JFUYTpdP@z24bEQ4w68vi>M1Iq zGX!p$gRU@q7hM6N*c;eCm*orJM=Ub|z2_QUt!QWs)WtGkPjO)A@Q)P5rB9xmTEDda zqf8L%GwKMJF?a3#>C@9}fsNBB@-i`)u6)ZE;GJB;)Y$FUt!wqWJ$SLkpjTc~6j9Tk z%q78of6dy}o|Hri5N<=uzTds`bM{+~!^Nx<4Xco%;J{4-C6}HyrWJKAQ^J)ksoopc z+0+z_S@R1*k zq2~drwb-exS_ZjY^Vc;73e;yXgkHiw-m&zY%ewjzZS_#`l8!@r0Mj}XvBQ<^!j 5;OkKRv>roZ_&Lk jK z*EEw$o}E #xma*RBZk;<~I23)}f?j2VMAA@vxGNwr+FS5!pp?^|x7O zIcL8VvdcY%HX1jZuGuSSUx3XGJ>tb&HalsddZJg3_b{@YHcR`<#V{Rc4Pp5 zSKjts+>apc9_~T)ipe8ZpZ0z3_YBV ?U4Dn*5CC^I LXP$QS6KZ(ZaA|_#7c}nKd=G@AYB0XnJnT zrVY8J=Fms9aX+noXs3(=d$d#Z;5TYGd48v^YOwd8Opbnv{F#mKmij7*Cxam&2e-|k zcB2RVjc)(G+T}X2KScOhE6iBMwEvyQFsjrt_bq|wjw|Lm>JeWknJ&1Hk1a}wdZ`dF z6+@@lQJna$K=RF|eYs^b?7@B3tfdQb{-91mqSktE`ogmdxp{=^;@_f^d43%HgsbP# zk*CXNjSKDW|NDizb^Do{28Wg332f@bGqo9L3G_b^k8G5yyrAJ?KcHUGrMUVYmK({7 z{91W{OI~KMlyGU2Z=!cR+M3%#>1h`idroYG$(@dfeUfsAeEXuU7`1Vlb?jAqI#+v- z)_xt%O))BB77H{4F1E>4TAT)o{KJ;se4EWCx95vsIu$dAxm(dz1QlnS>0%<^9eDgn zseX4nEpmy%21KKieNmZUulW(m*?vnU272uzZ($U!he9C=g<_Z&gxU=@A$d!~+)5q`Q!0@*X`VXG{O zIlszp2bRhO^`cp>QpjfQP8e=)=1WqA%$vP{aDT^cToP)%J0rfBw_~8)mVKH)bGQ{C z{V-Fur-RNPZpnfV_fiLwHV-|fBZ}H0q;(d?|Bl_9Hg6Wihrs?FghXG^ShVbu%tB$B zOmgbh*N?{cUlDLIfM4*^yQE=_PIOMUaX4^m3e~6xJ{IejBVZ!^W{s-gr0?C@Z29Zu zABxV8H(yF9LB=Wd!Xk5U1!X6{>NQsuUuzx-)PP>b(!x 1#KN6_)I`gO`a;C3cAh z?7;ywG1@hGG{?y$r%|n2ntAarlnX+Mk06?+kYR<0pe$aVbpWi;SQ+%E0{`ORI$F7% zCZZQR91+jgxypn{1$KTgcwbnfjc@`6a>k|#Yr^tEPROh-vyWr^RWG=UxBslF!OY6v zqf?nU7&hft2V brM5=bcv-%XU)WN06(a#m zRHKna?LS(tm%@Vcj83nG-(i*9aFtn$&wSIK*h7cS@`{{=-D4|lV91rb z{>)p~j;+CZFEx3dUpXpUKL}fc+36_aDz%RX^xM6VIV@b14mzG(MAkY<*34Xw^&y&U zCgHcmOE>IYGiz0zw-IEFvUInvs&KJ2anJJK+(V}7bK9xSEk@z3<|4X2WnB5B;X>3S zY0mmqX38L7)3*L9wL`O_@o{O*K8~aw?$!~pDavPi|HoA|%i!Od-wj^`Wxl=TnY4g} z)$#49eSLFx(R*tt%-#5O7dA5x4O9XB&yhN|nSRjhZv@^voRtB>x&j@aGY?lLm>$N& zex7#*4=KdrPU^_{ZT%rEhBlirYuq3jMUaEx_&QfBndH4a$}qz$Snz}Yk*IlU@G3iQs)jKsb^(O2xZCHAcoM~XKTF?r z|NEFj46XrT#;jpjqf)*A2Maqc;hzgRm}Q${ekoNTOC=d~#YfDQdfWRm7uK{pc|wGg z$|)@~QMM1GubN4je_wo4ZbwH9VxQ8TYE!)5`Y|ukUW6 cuG zs?NeK>gZedQ*?L3AT83}Al)t9C?Fsp-9v-YprFz%-6b&~(hbrn-Q6*Fe&?R^oO}O* z?|x?Q*?X;bt@pEFpw_F8|JuKr?< *@?3s{4XBc#Iq>nlfT$B(XF>s6RNLpn%*KU#ag zpu-0tSb0B;q`G?gruw-ajg56UV1ls+Qz$J~*6Fl@Jtisiw~!P&Br3iLPb;Vsmc+Cq zPAj0Ls=XL&z396-M&sj>5ze}I>M;gJy9xfAXK~Y|f$Wie)z8^}cz)uzc-^-ylRv@Q z?eJZr?%JM!a+ihIq7xuDY1O<`D8iH-FDrFdUuegdk4zT}i6TQYetf}aYOmVgAIK`= zlFBx~`XmopYUy|~jEt$ji&{VhzU=imR-cmbK4pl)Jx1ipcOHjjBEt^DM6+7wz6KEi zguCwFtNhYWhNBn*9O&;X8)@GddL7=)zMh-^2cDa4xI?enTJqeb(Kd;RBhvEeAw{=* z0*&*EkhlHNPX0_;?Ha8S@+a$a#;@#0zU5#~^a>8;ot-nh7z=Aq){m5p1iGNpkX5tG zga7tRFO1qrJn)GSbi&{JP?he0v|IILmcPWS+SVmoCmd+|mlN^XMXWLrE%RFv9Ci|S zV;|I2J(@eWjt6thH16NcqTYvKj^jPw1!2v__UK*Xsu)f?elb$#1n?$hpoC`}wXOHB z%Vz(tKYQWrSnEHb3uT0H0V4k_J;%syBTy-GDB2~qhGj3DJE4c_)Xp!!7?>3+;qxL< zND2-9;OQo~NwgiINNd+|imx+pe`f(f8BZR9>TI#20>*!6CFf9vTnMR$#coW1A8sUq zC#r5NHUG1P JGa$#fNUiP4t zh7q-n7et4AdL}T KX-|iL}G>=lQUMqh48)vMI9As}nX9-GYH3ccHK#h1K zgC*?4n&@c_KU_4w2{fCe`^YcS>pSlr{0C}EgC=+0^eDefLiI5lcyVeeU(?(er+O4G|S=s z{`(y@UxSB>*eVw`ky9D LGPp{Vp;0uAbxH9I01y{u`p1n#6G6GNcvc=R?2tIgh?P}z-mkX zQTObdsd $Yrn+i*Wy+#IgH?Kh_YHzdI;oKTd&Py`5+UP5N7^60>gPXG|^g8!1ud5uc@LI zW;;M8)nV*^?E7=(xBt=t93{JgX>T*HFXe4d01&YpN7n1&DYk-}$Mf@#Xnmy4&2DeE ze6;tkidbKbcAO{%3(%HRfOTmOI10ZlB;G&Pq2zYsxf;pJ-t9=z-DH@MC-ed{v7DF` z4yuSg5G+*wb(MW4YNc*|Q#>N^aI+%C4L}x !Lp{U sEB`_5Eis=wIyP6u0J c#`pIPJ7G3NFk&JE!g^}QGQ(; zCtZSWEvc p;Ovt_`uUJ+OxN2BP@U_5Xcw}~w+ z?Q5^3Sa81#U>%AGiu;H%*sG7L1x#!Cj1Qnsl#+}>Uh#*gZ6FD6En($AWU3QN-h-G`P#IA@RK_;;5AZ~ zSlZuDZHCS`Zn^)O`WSD@S+AZUI0dQ3gPN9Q2JBL&4;t1QFNY)LI~JALBzlD0DYn}1 zScKRhvZw2x3YSuVjnY6U_ClCGCyh9$XYxBwT~sNhHY)WMR@T@@PVMuH_>{kYg=odA zUDAQVvPj{>4%YtfOI5(U?~gGAdhKK4fs?RFW;><^YPE}K#6?vt3i=wCm=|?|f*U`r z;`G7YG&30A7}&xXU9znG8cNaUIky(J`nI@hvxnO``kF>1>dZc-EWFpI;C}7WK=>^4 z9%n%xu#>I!#@+Rk6V9|fVrvKU94`#gmrepotk~T7@ew~-Rn;*IF)!vV(YQP7Q=Rf3 zmJYywZ^*pH4Jib##HW097O0q%al`G4(2zDZGorUl;|n=7CCXTtP`zuSN|?=|9sBu^ z&X_?BZ1%?%0#b9SNbf89JQNme&w=j7SBO51(dU}JgndIN)QRV{Lehnz$PKKjPQDlN z3@D(J=YIzRWY|M1W6zn2pLr1G8EVW&?b*K$O65B{!X#S$vt>0xfy+WmHTCuN1WK)A zxcaKHQm%QNv)A*v0bZ;i$6?g-fq49+I&gL{*UVqm_>0-n7s*fuH{Kv;Qg~6Ia23}C zK{ZAMMGvtY8@{idN^t^P@kx;HTa*VB;c4Aj{b3{UAnGV|vrl%oKcsm3JKylDdNU#e z17@EN9;q=j@70HvG|u}5n!|zrY*=*Q(~r)x6vvs^Drqybh@{)b6%<#8#kt#oeF#`k z1Si`T%>-po;~(ziQ9v)6B?>uXw--HX_+d#i7r@VHRX>$@C+3KiXvJ44Da;^I*B_P0 zmTG8--Qn$B4d$&(pIW!u8X6xaBOorVdYo}O-whYiWx$B)Tlv(x`2y5;w$Z1J@MdQ( zyIJmh$P#+>zsuSJoT44fRt5WNRDd-Mi9jm1QjYrp=L`*F#icIai%dpXq-ue~pv@B= z7O0@PmIa>a)8TCo#`zOHtIxQ1(*Ez7GrYa0RHHwo*^Oq>f)f-~upw0$&}%q)7O#zJ z%XEo*jm6G`jFy#Hb)`*a=Bk^#kL^*mD(vu)z2EdhC*s+^^TR~dk) {<`%B*pti`_r_Fxx@F!X-|Z#GkM zQspKF117W%eo1rT?ouT?WM~H3fNiC!$i+|T*hvW8FxJ3#K?+yo)S-}a;7x?|+c}^~ zIJwQ}7|S*`3<#B4HMu@+K~N#VG5?MF=~+3SX?iln1)TJXOY5V{+|{Fmj`@jakJ@*s z*M)VR6;l&_&*6uf;LCuT0prh&-~1TyrwOF9wHDFRsaPvC8~tH#Q7NMA3EzZpbTN)} z;vW!Xqh(5>F-uV M7%>qITU7XI-7Kr@JFRuB`!N^uUP z N^M&s8g+!g&}6 z(+W**rtU%vkl32u2jtNm`5feo=Km4-4pLaV_%8|}KF3iB1#;ax*jFjvYub5F)#u8* zUscF^hAyam +d4ZiNGVtMmO~!Hg(wPd-BgX3Z~~z%|sa6U3o7hgjAR zJhCN9%BbCV#dKRc;UXwXf%$SW`+)tA9U1$jX*db?WZM9k1llfWDH#mc0%dd|6JNfb zmFH`hyS*za!M0A!-72p6cSpO 8ruqYP%;i(npgcMIohYBiY0wZclo*68bXaS@@ z+U&1>tup(33@DMZ#r`KfMgjJO%rCmMIQEl-(`jf5SPn*LTk_9q!1ShrUgBa|o+*up zLl&dq_jNm4^dQV}Em05;unJD@I{HRhue<&QGuV68f6T1P?0-*!|BhJa#_ETq=Cg`Z z1(<6iL*iryCdeM;T(1y>?{|CK;Q<8Ps?U)Y_^=M5Cin&vY)|9c3tS(ly%2AiuEKz5 zz$~H8fb36~!qSo+AVY)=H+sE=Evifov>Jeln;i3k51a`5n1l2 s|l&1TCj?v^GLI>~<1d{YLSlQ#VRz zm;O1DH4HO+-)wRPr9-4_^tQRSEm1aC(XQ`)Vwc0$6m8D2Sm}COfCJ%M{zBH;l|uN@ z_<)ZsliS#9ga6Mjf75Z|FZt!*Ff-?zm#Ik*s^K&Yfam67^$(2@Gr*}YfwI;4AeXQl z={;_ZLlN!=$`3nT(gcrG )BTYMqBmYs z9&qK27}P)}uUhW18Prg!#B_itn3|mOF9Z>-z2=L`19UsDdo(mMmk|QY1Gqz6I)jnv z)UW@2TOVe;+b*uiGJ>BGG52(34X*!C;}1pquaX J(1m zhnxjiH?GpNn;!93R>S#c8**4=MB62x#ZgN%#0d!6-)MH>9+BomW1_+r`lkSO0*+EB zsE81K^QxrR1Wv)GGEmfl{yjgOJY~vv_Wn;;+7$c{e9?6w=yD$dXP8^`ahC6;6}t37 z2UTnX8POuOO~ykcBE3R@^*H#qy$;NPBWVsIpf`X9X#bdBfo^0439Wq+8aV>x&t-Rm z2c$9{SWf%wdVK+@D7P!qq2yxq?l9x<0uD`{>eOs@AIucx3r7*~?YIAD1^%lK62X$R z2^NsPzODpPYLWo>v~u3@wz0))I+_@%Nep{q4%`qAL&4;5*MDU<36}JML8l;LmT_oJ z)ca2Ma(GYw+NbT{WIdQc7Th?vhi+j(>H|mj%a3nSQz43$Yi|Ltm~<2kL~lj;D~5;L zA^($>hhIosAfDHMZo|-{gN|paMvK6!FTrUv?_$>}2R;I0f6GDJ1U?SNLoGGR#4tX% z%CHo4i*!omhH^V}&yk0x(A8T$zp_Ike4hTq e=VWuo yWd`3HNbDtd|dlLPh70|3+j|O+V9r}vr;Y{{2 zc9xg#hVVQ(-cxGdvE&dmGWJul1P%pQiIel)%E(xfu>Y!a*KFWG-=v3tYC&Rd7~FS4 zCL|ge(yt@~ (%}JZ)*Ny82LL~gvkrdFi$N?~VxM@QpbRwWHs8%8 z#g*#d)u$V-`-cBcd@08fG>c8aqMcYKz-ue3;%g_JnkZfqd9rF7tV9U3 KhPl_6UUuKCrW22Aw0j1!tT{`SdfP 0+Ye#w+;B=Kczx}{6PAnICCjYpEUp>fJqtsrx10cHWfG9Q35`pr-p}R z9KgF#XSg2i5AL)%KrZQ1S3f|q>YWVt$ZI>3P=yR!#w6C*GzIN?o6v-xb@PB&j-7|c zgkK+i-93;!`Qcs5{pUm+I c z+Es7OSh50|h(TSi03ZnFhw
ZJvKC^gk98BG -~>3ALmzc%5X z_D5%lb|OxH=hS)fBrT&xPDK~)YX)?~0sDRkTc4`x9UH$lom9{xLfG$emySl{5x$>i zf#~|L3eJ&d6{2*+r0K&`?q|-{U94-DkAafKPz#_Ec2d|VjE0lg_+QS|^gTZ%F(?K}poK<}J_ThQ z{71&_H@_;K{V?}&;%jhi;9}!R<^Du#yx65_f4q*-@ew0H`sat2mw7?6DyPiFrv(qm zmtl0W5Jo#7a09Mwuz49g2m{#loy=hajDlV hv|HNH{%myM1+I x_Ec=~3^yL@Ejb3#Seof#?IY;}mY&zr5G51BzKo3(> zva_I-N^ue|Tq=1#a2k<#fy#}JCNxb~*U=``2sRPnuZ@}c8mOR4%>m2#`;>v{fozs` zBCPCrzF1&d;{e1ut=pqFGy_JfLFy!L+BjH;W7r4G)^w&!B`u?T>{R4de879RXInqw zCC>Y+R^7+Uf*W^l4os2ah`9P!&Brrj0_eZWWYQFLGWlJAj6C9NxqrsJ*3F**>=Pvq zrMP_tzG%_RnEMS|v>N7*VAsBdtUyFh1RVsR|G>wpwKLQk+@8@!FR%F{!lVM7PaR;I z@Ke?lFBgvrJDC}f^ }G!6dsM} Mgc+U1z*EgN&IX~AKwo 3qc}A%rNU$w)fmVMmg|dfO>XOUV-JNj_S*}8t>{gC5z9r zo|w2bYc*^6CC}^%5X{b}Y~O>k!p)I9*%u7)DP-gsl_{K-wU+ci&Dr8RLbPiqimw&6 z@>JFTD&dyS(tBt+0#H|VVQ)0c4>AC2P7H+%>Tr!5!8ofRfKA^pgxJ1R3yqkqND0yg zeREYZ<;U}mP1$+mr~hHi2Ax>IW`F0y(z5sSa^C9df6)Z?w=M2UXWM*tMpY5NE(D!B zK*hqOj@D{|!RckBYVG7Ac43$zEW0XC9Qs_0G`d$-q~n4_q1SN(eq}Us)h8!%^|^XJ zWpAi%5cDOMkmii(HVa%tH3|AoQJoH?XW!THWU t9GJ35QW zi_1mNM;>=;?MkGLi=8Z>m4iM_ip{KOUel9P&H7L4c@f|C d$-%iW~Cyw%IPKgc56^hoC>yZN>LSkU#BR2B__GAo*)sL%D0 zJ5w!jWeS)x_ >VLT{^!rW2ByGX8K@_=E1w6bhg9zl zaHh3JnTQp};9f7%i7L3((^uNh TD8u(f?@? IvI0K#r% z%J)xWdO`UFz6G~ad+HHc=nAkOm1Ixc@kpqI+7g5DEWH-3no8H^^ kb-!ASOi?Jp|{--u}n3L27=Rm)2&v*r*zG z`R{X62P&4}S#6vGNrV_nioPE@?!6q09g^9+LUa^4h gC0NlcZ_C=|nZ_9{Sduk$9Pu?ity#qZzhbT2nS&GIIe1TW zM)4Lim());7gDN4s0D6Yw!1+=(jxAKGZy+xXOMm9fUCtN>cvl~q8UJHBmp#uW^J9@ z1STijH61+;#{~JJs96%)k=z>C3=u@j^GLlTb_ua8PP^^je?q&adpr&Nb@FhNApSV+ zCS;3ZF^&|RKW@kb&DUiG{%M#se;DIhuGuJSsIIHU7O_=yHrn7*7YLNd>RqTXlCN=& z?)A34W=!@D@3Dz(dK(E)p!)?hQ{~1B&2;X_M3 7s*!ru%?<88p1kxWJC#ciu
b+!rv8o6Qd89~m6+Arfp)5u{( zw;qATQ|51B3n3X~_EfDAAZ*XOZ;yiV=U6w3Ug=!%Oxy)6RWqSK9u6wx9lB&DZ6!2e z?`(^Bse5#CcoXp^2nr!UIQ&m&+w7w|2jx`;^QAR*-gVW5^MSM#fr-G^IeK!kk9lrb zySFkl5Kr7hQYbCk2bnJ6o^xJ&vTtfJZ>fEEb34TXZo5`nj%G}riCq$&sD_bcTHZF? zt7{surX3 C`@|;F0pTL;TuzUrC=mS-+URW9A1TSD){fR?VM> zU_En7bJgy6xJ3L_@>8)|?w3-$$-vq>V~sf_KdPI*+|&*)khm^;fsUAfTb%<2*J>gw zQvgbtIT|c-m4l^IJ5<#q!3bj$p15srXpbK-t)s;gH1K3_L^mf7u(bb$lW_*hP>I}Z zxa(&sdIn+Y%VRepzcp;yfO`rC?SQ$BJ9qkEQI7)86_rktbe9lr( PNRo67mE<{9quEoU&WlVxHLw6z~H5ujk(;Le&}R#PM)NSE?l@5ZIiT8!v** z=Yw+ND_Gz_K!P^*JCn>0bvQolZn|sW4n+d-Q}R*DO#r@gEM?~ujby;B6pi2MxXa2F zl5Es7^bRqqEM@=(C>>ns8(7@b4rP1JKQuY7J{$Y=+Si9?=YBy^L^rHCsuvO3)`1^v zmb*?T_axv6MhN-}pFNU#XCDa_r~F`ODPLb#>X<&Yf7%Q8?oitg!4P(47XEVoH7h8a z$~&VrPEMKIkv&h-+zY@9_6D()ys+(lF$xoNMyVa?EF?ZHJrhx(=Kqs67|osN|3j0r zhyLgl?mqf%qv^{}3>jh4@&1tYOD8;qpXmCHj)`2AF`w*Lp(fEY1m(UImU$|l`j3=s zEWiBZm4ERg+qKupHW4rrvX-x`fJ1>I(y8#ueK;%{Gg;)Z98iKM6>u4!LGn1d?7ez5 zv1jYawCc4#T7%o&LJCNnjjuwY`z mk+Wc%9n^(#8=%5d7cRIo3fb(jWGl*} zap!gTXP_8TZ-Zg9(fK{4XEagK;$p0Xq<`mt8Rmns4DZm_2$VjEr&+CR6W$MZ^Mb^+ zw-J6EgMM{c?h~IgKdS2Rj)FHx_*J>JB93DQ>;Dd1uFE3Bq0KD+ E&)NtIE7^L$=e@C*pfezBe!6{8h z(1DifzX=ykslyHrcCkXa_H1v**8_hSd(ynOreIZ~h8H~?%61QT)6N23zlU&N3^2X^ zK7zZ;PevuYrneKrc^o42g?>y8?&za*8`7jM2QY7Ujp`Xz>!E+Fd>&Ex_EInKv`pBV z`k~Q&g7-j)@7nTBXf|vFJtOIpLWqJOtO+=IpcqemSLc6xw-kj-CwXa9EbaOx4b9FS z051+c>W$lRZrLv_TRkfu%D$>>aGd=R8AS6i`X%!P?tAfAz@f7kIJ+N4BpWAC^m8xg za+sxg#+j^OLHM!xmnk8j#btnC+_2N<0UgtD%el-~nB9UnfID85d+hE7U@(<(So-W< ztm;rYgsK04bzfO)4EBrSB&TkAWfDQO+4=VC#Hk~~YE9HSb4}a9Gn-;~KiEJ?rprWT zv^6UqILKXF#_WX6Yo*OWab^jM4@|=UP1K#IT>@Q4p+K7ADIT xrYhOluLag4zAcDq%iFP?x%g}|kqO>00Qor0I zPJv$jrH{x MF==x`==1K`-0ab%p%{|l4c|uV_!Fa9gHgW8j!1-=itf){E8_QavDp8G zSP;DGVR9WNCRQVVui$BU6}spNVR0l#IrNmdwoHD9ZP1L9g$8m9qCQxV+h^U^Jf*B5 zRifsbmYS;6S{ebRQ0<(`(s*N84 z+vD=@CX4<>ebBh9BpojxVsfoj&yf75@cmm{DK(Mg!&U)@^>+!ao!!Txa7WXC7Z1eS zaB(SBBP90Y=ErHzzo-#qp#;ayFR6a&Ck+K>I+H_ZHQJu3oUg|g4&GHrH9WReM|Lk} zH$29o+fu}{6Tz7H$=Ca$1yJmCpPW8}hDAQJmee83jJr`>UP(lCg7i~?EK6Df;=e!| zQ(;d%^eGs0^xWNH%MNYLGw~pcR&3FyGTO3J=7Lfpb8%3|^{dqkIIdal4K`hJ07)ya z&-z)1qjw1CrL}}8k>9r$VGh5yN>`*jHgkU*BL!rx >_WEhp2w|HKkl8Vq%?c|;r$W0Mnp@U zc|dVFEV`qhQM%coJV LTO(0q_R z%+ ry{>v`mxZ^c$_@R?N$!|aO|7k=)Ryt+PZ$a6 z_14EUEP}IF>}2 {=eR8uZz=n$c``QJN_Uk;cw$d(p>H5m0?T6YATU!Ry?{XX{OS!j1ho$vvL~2tL z`HG0^tg*o3V2Oa+@yY;;gjTML%C0njfMJ?uA;+w#|MIWO*7Hv{;qU9|i| @{H;jg~qgas%M MB-Oc+Sk=1ouYfnC^KwJn$Lx!sXlw_9R+6! zc&v^9-In1US^C6M>a 7A#gWtF~*b)21#4}u@&d}QSN7m>2}{^3-r@i~gsb);dG7F?3fZi6N3vv9J< zS>}FFef|sj9n#blxU{t5Rw`vML9v7s9puEd)79@ct~fw8XVmy& nkVH# z%rJJ|rt5CF^5rV0QPm2Wg9{e @) %w z#rI=O3PGt@*&;O3GM*M#VlXu7PjWp>dq MO2|;FxcTjBO|Pj@ zX|fw%m*ltssKAWm*}x4c+UG=hBS#W7`yaZ;GOIo*IluwQ4Yaxxw4oUOYd0&Tsmyx> ze$PjIoN~O0P5UNk%Be~&4nc$sb7T>WE+;8g63K=xCSVei(u@ml 77Otpz8A ziPn%v{+oa>JlMgf4YD&l6j)=%>KdLaD)5Gxn*L6Y*gv`OXZxh)tA?O^M4A6A`A{Xh zgwsjjaYazlvaPPVO6o14gUs)m7a|)qeIb3-Au_zxU gYOke$M$+xIG|{EYI-1^w@&O82wc-LLOE zT#f=YGfniDoxGYjwU+g7km23NA#!Zl>ita9oZ>-+Brjz3>9P=M)_6bC>A5n0Cc^3r ztJOje@og!jds(FPuT1jI89+O1D<%aT(q-TIW&^E7g`=zSVe!&x!_u%18lm`kBG|DI z$Rr8-2Jk|G=ybyKaFkM0W}UF*Oi`;DVmwewsPs8yQQ}9~@{(eR;(tb#|FyOlM2`(o zH`%@{yV%;|I_teUIBD~`+7G_DHtBo{R__Z$1W^qgk^jZ(uAscpwRoI7xp&tTf4 uJoUHV;N9>BrF>Y|BV5s7klz7jb3mdvf)ZcFMC%dn0BQ#grSlUthGNTd;$ zg@+khCRrXxO4w|zUB`PbSWAG*+LuLeSHn$sMZi(JXz0xX+jOcu`r%qa8y{DwMXIk4 ztzkxU>Aad*4csfNdfeJOb3r<$V5ewZzyh{_fMdm=n}p{-ikuSXfBa-_uHVcQ*ho)c z#<8=rYg;vil*ax&9;q={G_TUpi+389^vJ?oV`%WQ(FfEiKIUW_@6&I+&_h@9Png zK2AE*v&NGXQ@_dHY8#fXuhGeS?LYf$*V(D%F{H?c&JH<#B~b#k2^GvTf^F8Nr1p(t z6XSTwZBojc^M +gM0cX^6PrhZxe{F82WTL9aztfNr5(zP}6_b54VS`|b6d1}m~AC^z!CQ;V75mZ6^ zShsqA?(wc*Kl501kU-^GPyN(HY+Jx6c_?Qxm4`kc9M-!kz#JO&=>VvI1qI-8|& ziYp>*Y-Z|>P}{4{t>t|;T(huhA=_16BBls?{|-)Y OZR*b{tw3F20 zrLT*iE{!`l<$YaeL?+}57=aqlAHgGd#P6S}^qY4np-2rrG&1%jY=FLw$dyC}-x#fi zb3$4!mRXOby)qlM4xOF>m0%)u{Mo`{Y}9IB=K47q+_o=!y7_w{Oi}B5&E97|e63Su z9A0bd=w#WE-2&@aN7a4ezS5rtVa^K_#)(GDOO1k+W)ExZ7I%Ybh&mG?mpAR*XkYnG zrNv+aw-(6e*pADlv1}>CaO%10n~s@~3a3A!Lc-f%FKQ)yH1v6r0gJyoaos>)ue9HS z=0Vk>0sWDe3C#Zp90ONx5e-$@egQ>gntzs);MCzhtov31PyKF7GCF2cEx50kqT;jn z78qYKrw8L8I0`iNp6JQRwN3_K5m1uvhy& 6X@+pbLA;zZ2)YwrOja&pIni?qLG;LF%?Q)>fbBX$T@DEjk?iX`W90% z7N34f2h)q?{Gz~%OLsF=RhTl8d_4U M+DS^QMW2i|160G>)3vzmCPNH< z(KNl&=Dy04W87Gvmi|-_McGyGNom2fRrKu(G;o7qOVjD!_Z^1;tLc*F= 4mXxvq3 L+~#v842 zR 6JWiChoTL3cV^SrRzqT _}}_>)GoWHXyJJ>-XosF*??lUM8o0!>ubf;5T7J1BIQm4VX5zGuk@sKOX= zIF3^?i@I1P68D8T!h`y4cloek`!=lqw+HaCRVQ~T4+D`-N>Dz2)gJ`jqkydvv=J!h zj}y%){fSWc#GY!hi84vV`7RFBg@={uK5INsG^0nuTTjCmvNiEt?&rFFi*4Wt8{zF> zTJXhe@Yi%W*wY`M27dp|F6$v7+xL1NA)c#|U8-Oj3W%7q;;|CK06&c9(!Y(7Vsf@A z9AZ*%MPbZ_%4g h{ zQZ!~xzl69N!i-jhc00Fo=Gfk6e@<6n)iDtaA*hvemz=hJ_hVmNXK#LUXz1aj6M^V> zJU4i@^?|E|<7I$-E+>XMPcEb`|E(HT&H8Wuv0(}+7jfm4kI#*N58*je-mWoBmHt^x z$JEd(f4xnnWit}a)P<8c4Cix|#Si*{=_2q>w$?c`f#RIC#d!!9gu& QY;|+Ptw&Fw{it9MGL{@g4wR*x=&@dw`-fSN4^!Y|;a*66 z@je3I! 1kDh*=tEgu#N6^s>M(F=%6 z3GxvZRTolVfeaYQc~!h6El}sgz6FadzrM`PuJ`in=CS>IqP>bW70%HQSnxX}$r*E_ zC!pa(OJwXP` $JJ^ko6*+#Bs(5EC{=*zCCPf-yDKVkx^BS)!+Njk zf@%tgmq&6oPetY+sA9IG@iV2E2V!k)hRP-2X*Kv{`Q&NvsZn5=mJy9R;QEg2d5J~R zZOg6)`$u<&u?{b%Po}Z~3IhN{*(6Rp=}Qsx(p`~5O8!%~RZ|!Y)#u7{f
-nWJu_yqf@v$({FwUs-L1Vw-v CNp5s;bV%Ndv^32g3WfsVm|X$+p5GqrHD5zDI=Zy~wB{!w3^JzbzxwWI^pIS(*diA@ zn!sltH%s-hE?2kz+^zcRlNjv*a T4lG`D8GmHLyR^gM$8I6fmd{MtbgYb1l^E$^_@D{SwEiLnj6sG^z;3$!J>A7S zHd^bgHcRcULFuus`x+vO@AA?gXcKp3y l>-XZ&+32z87E61N15{$txee3s(wLJTtwsd{XKr`~G zY&FSJ!f@OQHAA<;llF(@&ifIUwzHkzU@gi3Eo%7uj>YYgMb i4n%w^u?P*SfP(ZP$}ef^BHsz<_hz?E4sY16ss^ZvPt;sLtEZ^W4hSfwAN|zn*fq z(oEAq-MIfEf77Qd($Rx9MyRh8mOglN#Bx{dcg4h0xMXJpCkGQ=J~{8u%%Ky84!VRq zx=#Gr&yw=>Hz}Zyqdf;Hd}d@nHuz>6Nk;uaC-Bd`gPwW$jEl4`x*p+Z-o1_xcgY3b zCQ~EU&MS(ra)peN)9h$D{8ckPoYO*&t6(lh)aMVc47QiU!lJOJ `vv`15)Yl~T^ zDBjVwP^xMicDz<~>psORdL^hM;s2SFBy0`IKZG|EG+z({EvM z@sgU5!pMgQv@PV2T*T>BS=IAT*KDIuyil<4g_z{cU8nzg_Z?ls2cGFWC#{~rUUfXE zf8yQjfPcst<|mfFS(whF(My)2R>S;MPN0Qbt&cY9*e@uV9KUKvgOyZ1L7d8{ h7tVq{j1Cah6q-;^bn-R)QYc5gG(^*3n8&w{WN2dUkEi12AF5 zO(LK_G{TJ^_X*iK@0T`y0Jq%aX7+jS4xj&Ijg-X7dCBox#P l2Z#OxP;=fAV^pfzyJZNRQ_u)QxTT%dE#ukB2n2HqMRC^|pqMd|m8^p+2Bmbf zy`RqNP~H }+8(|BcnjuzAmE)B;E3Pd@#>WZ}sqw=CqwRzbpH z)ZMi_@5fO`1$yz=0~cZ0-M`^q-O3K$bfHb5bLXkcq-ge1i$~ruXa^ntvmeYAqtyTS zI~K+~ZuCQ~x3Ugf0{mB*Q70hm@5Ou%UKhdUS0e`W#8LZqKuTTd*UD_I9rElbAG1Or za^v@l#^HPnQIfp)ldJu*xZhFGi<8miOvBYBzlCS)wgFG~>jZ74AI}17-_EX0z|$}ppvU6QeijeM zh3-4PTUEdlJgh82F_PF5@i!e+mePJrUvQu`I2gh@^^Y!4Fc;oF{N@b>VAP=@C~xlB zUkhmn#@rst=bWa*NQDzpL2J7km9hSQafaJ#X-jW0=j6_9U&<#Z qB_d8;Wox7tKIHAqoH6kE00{EW4FzfFbMc&hDs z*aslR&AU!lWb>pHCPYZD*8=A% bP_?UgxSD(bO?9jQl$yTM_UnY mr`+##wv{V&p=@cE z1gihm@S}Z_4eYYTYIs=jlXf21V*BOx=_xRN8Z%>r=!R_Cf=j5oehD9ZRw}DL9)EL( z(M=RiUv2D=ZH4XeD9^Bx7w1^z+gxt}+*LlK)(26#$?@mBV{`Yo;xmr2dU4aGGdTBu z0*N?w$Ey$nCx9RK&L->=Vul9LwM|5HQ-Q%+2CN=$|G=VxT+@T9GJNaS{wrU5{k4BJ z+$Slq`{n>91Ap|n&%W^gO#fe8S3SQf^s%nxzICd*havw6)dri}r)G|5Y#{5*fS_ba zMN5$scwD%GMh`M)C98$dKWkfc{lASx5p~A5>f}C5)11R})e={toIOMEOrt~>9;=vj zAr;YYjaR^C9pwL&E!dn)jRcspgNtATMY16J$ORQ$ofBb!9kT^THOeFY$6>QwfBWWX z04E0rs33Tr&z&)PdvA0h6^7*nLrAlUgBsF`1|Yl dMx;S^axO& zkfiX)WFTY~|Hb{-SV_=IgEb<^l{Zkcg&Q|+{DU{X{`#M~A9i@Z96);dndknOvuDr# z9>_zRaZlcR&q(EaduIX^q@W1Hy0cnMNy d)xK(zMZaU;M$&@uo+Ry5QqtndYS zYm8K_wvVk{(sp5#9|(4d53u8UcXj@)!%Fau!XjL|Jw$;IwaoHV(ZMj-dhM)(^Qbv~ z1_Q_FKV8EXu95ol!46DCa0R;zV~C9bh(8Gq#unk|+TcC3iidNN79YtKq8>A=#F%dC AO}Bd4wbXyx{S0k`)2IDb zSlra^zeOSn_MH?W|H#D$jSPdW3>L;)KBH?XjX*nv=)fUJD8!s*)eR_UMV5d`CTS>b zM?m--PBqpb6E^V_7Xgk<4a!tKs40O7#F;&SV*L=00U%hSyUNHmi0BT${S5A6)e&_e zipW?wnIqxHO7g07fJ5sLto;Iq_V^S9{8!)l<{SU>y|%^s;sB=b|35f;?%bcP;lAbi z!^#lf$_1#D(TK6q#s^ *r_xg2aIgQ`nZIU&j@Y7DY+qrHEP_6BFQK#?2~Iw;0m zTYPXj9yvXWnSmT$Vq(m4GGCdEOwJB$^=;h56X5n099btX*kN|;{yd#ZjQ)9B1YjE^ z sIlBMw#ig1hUK%lDvMV^8frS%1v zhyb!ayHmoTR6oIVq@*x{05B^LEDM^m9nmBeW7MnxHCsWRf#fqdU sgHxPf+G zupv@Ge^n$HgL3P@io?(mloZq%C8~f1Ue7U-T}kYRwm;Z+oupo5ZMt1b5t?)8vjh!; zjY^70zCy7g>R3x7;lN7AXw1>37hypJ0nf$7Wuz878V-;R2RN)iV6dIvN(5vI9&X-! z?X{PGZ@9-=0r%VioIQK)%BMf`)IXU*yFD7aUDdtyI@tipI>y^Tz{IobKsnRu}GCn{kGX5Z1aK!=k52{FP?GdPdkESE>;fL4$wKw1V*00`6d%Wik;4@D> z{jZ-nbM_Z%&R?y;cKe$1PlnI1KZyp+;ggYC@d4GS V^fiX86fGWey0pJ%davGVq4P|T2z!sI5VRvaxC!kL- z1v0VW1O`^rK+#X=y-2~!WTFYGjLWAX*oKp_k3laGSbJA!->UHZ3;+^IX6~jGMOI=~ z21+^u(9=FmI>wVYNC6mxT>?d#F}CO6_4~Ak_n|>dTw!TSFmeLn3&=kv3RQ!z@AhE- zuuv-?3k$e$ s#OW#d~Rw_uK(I{mgTJVQ+8!N2|=!3iG-n8-Hp;N8;{pCBTZP zvQ~@P?+PVjo7t*p4#W;Cmcji(%34>Ri_bd$y8IaAeYTxOl4y)TL=-+CECsbVdH+2? zKyXu&F%Lt})3>@lMvO5h^n=OOr=4ks7l8!Y0+oDMk7uJ_V0yq03_wyFx- 1Qs z-;0xoIFvli2&%SXNSP`i+_`h0dV2r oUbMdLK4uSMXOar=3x4LN)7VnaQsKFzy9ja+)I1B*A8HK z_SxtE?`hY6s>(ru=~uh`(CT~U%$YQR`!C)2gh@Z- cDxv@R$l(H0^3BXvQW)U80FQGjDzb|ciY5g6Lvk%S(W z`^*7Qb_|l-m{`kdfK4ivu3zRmw11+(k(nKZy|MH6>UNU%wld*ZzWg2y2^e6c 7@e~i|{$G^O1jx)l&*vO`9PU0)%xB9dH#LJaf<}w0u|&z@&fC1CXE{Ncw)s>LzS- zeUXlA{nVzQF>>eTeqcSN%}H3_uO M`v4+5_AgazW;B-DoZmM|i zK)`ju&Rl}@OZ1we?FNrvG&r@T5Gq+_J}aq&S6b!QGdq_4lrE|nXk&Em6dFajI6nfz zs4D+IAe^&=v={}L!z665XwwWlw347z1B@MbP!9GF{^Zxce)WI9S2lUC9Du#fGtYkZ z=cn-h->Ca}1!$( Cq9<<+vL4E&*39M@iFzBHkDJ0E+M_oB$ItZC#6?6&Q`3=;AD;SISr1UwlUBxk@ zrCw{FaKCd -oGNE)ci%1p(jNH zWY&ojMexs&bndtg;i!X9^~n^~!vlj)3ja|7Vy@?~3<107{SoSU$i!dRLSB@g^Gk@X z?4k-HzZV659pTAYmW6%WQQ4)&PZUU#<-92ZO1UwJ1jwPWrs`CU-J;VC0l-=gtY_Ol zxHVS1V2Tia>Gi9x{zsv??R#gSAM?4Z^w+OVrf;ghwa0G?^D!`TJs2NsZ*QGAS563U zVEb=et@dm;TtNmJ^I#zcijl4 Mp?ELqrn+I7Bt_EM%FgzYr+}amPo1l_CbDCK*kRCW|KHdA@!} z5 $2*XVmu*s!5566^)GR zp`8roD-n@D1 zrK?w8`IoyZ@Uc3AkHZ1Pg}>udPd)R+^B2zl{pt6i?)=q&s}KmrKTpxXo{fXD0TXZl zrv58*pL5@)g)qd%+YX+#X_h+|Ly$x^a%!si_M0}0R780aavQmXJ>B>$66+|cD&amG zGLD22`MhStkz;`S7`j6ZB)edS?d(P?4J3(V`j?ho5b`D_fL%WUL6any;{t*A*@{u_ zUbgpscVb%yh1Qs)TWWivBmZ`XQz{TDGi_pp!Jel=Af&mN*9Q=540Gw!bx6hKb6ijq zGXgS1J%Vy~FFCqk2cs%RAascXqX#f95bh&1Z)`(FllGP=Jj#z3)Ju>wL&2S^Lmnvq z<)+HS609wUswgGA(4^+9s)O*~)PZUvn8}148u{no;Lz|v0|hZt@V%E_`mHa8ZNvZA zoWR|70E@<7f1Z8r`9D78{QphO`D^$Oa?fCS{s0nojRfLAQP3d`Obt;^vfTtd0xItf zk%eV_K}3{M9!H9wAl-%UkZm`SQ)5sHG$9HvwY5}0h$8#=y+^*y7Zu>f(A~vAf tUQ;DAJG1+`$vO6xmKpUI8W$ZIv!TcP2j2)$d!bzjX!Z0HllEX;zl?IpW zE>i0e79jgX?*Y8xpeaMaU$d?+-}!?h`CiHlWRx U zR%+M5^Fk{xceCCV`kG;))TiPBwDd*1Ev^|L^gfVLLc&mFjXn@HjASN78ao6EF=yTm zp>(uAUwQ)WoKQbzc~9vH_~mjyj{f&MIqOk!0@1hZc1$^8>EL_xc%4qL0fL2LI?mt8 ziFHn=F$t~KkGD3!a1fEm0n}p$+rOnhxRUa2j7^L~RR#fzax?*TdK$8a_7)vLESA4h zYK&B7vPqb!q|DAlYE2HznK1BF!%Ced9en;F)TeUMbfzp`gyTz)rmhiQodIc!vDW-Y zP6w**31vT13by0-_YX3OLgB{E8-MtXufP74AXe4vQr$(H{n#8p3f=Bs|9 g0Rtwnni4hN3PBpe$Ed?gpR%>h zNYjh=T-l9l)Gk-Xf>H9=!)3_)4`d!;0DOx;`Az)SK_o(La0-YbP~wX+ydJ!(H_jPx zCt&b4 utxxUB5C-Y9MJM2d;EzMxav)HRHe4@`$w<(t;sr4d)rch0sO%;>EG}xW z!Sx&h5`61pAAez {PssQ(MVMS1lQ7I*Drdo<}HeQ z7_!7go4`QpO8BZpg}^ac*rYS5oI#Ux*nor3yomA|a}em}09 VI)OVo)xqy}#}135N(UwQ0|wvSjw->uuEVAZ$CjMzf=oAW588ExD3 z-8mE)YEL#I=iM299ag{yK>%NH%ps=cq%i%rh4TR1hCsT3hyQpVCe&eV;3+yMi5Z+C z2Z@$K>8F)M<-d}%4- -Jop<|Uwh@}d9ib6{QdlZ2hIU(h5Y=f zD`Iu&kw-p#$zed2PmTwfzADAqG?asn0P5Aj9|u(!L{rzz{V7I6|DlM?rbNwhGf+ z*}jw6HwK_D_PeVVyaQhh$1(8+WgmUV76U-gAvoPQ`Vf*rurGQT5B8rMI5vA4Cv$vz zEn)+NBm#B`p$x1Xs7+l3Yrnr=1B|n~< QH1ONgXFjUU4|gUUAwtb3S8p`X|S0{9Q&Zu#X-i%P9I8;Ga_jXK>Pq~;9^B0 z$gs&Aj!hmtNH-wxwSj-Q45aZLntmw7Qv%tAMT98MiztjNi?k;w@t!3RQt^PpI)C2g z228tuHtFy>F0Qr@|F5sS^3|UU=n3eZfd20nz+ExkyYYPO{Jrs;19 0GG>l~l4hO{>VVPd^_llK?SJL*z0+XFaWDm88ea_J`zw{6 z(|>gxS`&~55?jABLJC1d8MplGySdiXwv*^k{}{I%0Gw6w_vrojN&}*L10t~sNsDPN zUnA`_wx0vJSX8myuT-K7(G@j#c{cg*5_z}6?mk5;HeWE1Fy %XK}M@qjnXPZy*dG#7Fi9yb^=zz9}O|YeVffMzw+`||8&6I zz_}CXQ-KG@0UXKstKsu!{q!@>{nWX0XaDQ^ V-w# z;bZteJE6zRjHTn};yn;Ih{=zG6Da&D^On&T3QjP6aRYA#ynSh%=p^8-6n6-M8@ws9 zyXo8w8|c#qd0qMaRz5uX98^_c%wDzS4jp`_#`{QqnffwijD53F?7SPc>INDPy%TaK zA}UGA$XD3O!47PhQL8%G>zN}!q-eT_7W!uwrp-lAMCCwO+$m%CvTQco5Asc-nAaTN zT7&KXY!cyzn>sVF4i(MgAt=KC_|=zR`V-R|I1DiS-U-~*DBx~7fZq6R=bwHm6>I&O zr=I=~FFbVN-=pYz&G0b+XsD4uG^u~e0Gj+aLNLyeWl4s}a6;)PQ9}Y3d9=wb;)ezw zhvn^T;(m%b$2V=?qzgur=(|3*L^%K~_uOLyS!%KxqN%RD9&H!#h77(aGLIJMXnA`n znskg@Ups2 ?d0)B9elI{mcHApgTV5LD{ zZ!};q@S4|XV9bq9Eq4hiL-@i%l}1dc#dtVW2yCQ01!T !R^;?8%TV{;7s z<>&-Ix5E40sie>V#cd~Ygbv(aa5r`ldFGF|^Y@0|=kX5yMFrK6 pHjmB z>Q_88c>%oI7FU2@KF56rHg+?*@JJ&VP7#k-Q0)3Y^j`QGtWk@iCHn3%#blZDW1x#L zrc7}N_IKFcQP)TX{VE+8gJi8)pmvN_Hxc&t_kZ*C*IxbUfE1v20!vuHeRBZ2^8ad` z)d`sK*PmxU`}}{qUax;5TA39S9|o5B2IxxL#Fl}rzX8WZU0mxB?D9(A8N>((to+zl zpN(b6u)9V6vE_LR47#Az(H%OH<^YN+-PynF?5w`vlYs~y(}5I^J@mJy6T~9sMw=a+ zjG>W%8p_{3$yUD22q14A*KmX2VZS1j&VV~ZFWvi4TGTLz5RRq;%At?;4=C4GKHa)+ z#1j&nuNK>`l~>gp=IZJd@KRpKJ!+|e2DXSvD6A0|c54)vI0X*y>AS*bj-6B6DkFLY zDe58+d$sSZPL;yk$$$aS$N`7|VCYMgce0(nSY}X63Jh(+bx;VrM9GJ63@=@M_2oYv zAP~9 $t9TW%wq3_mO`{$JNWPI?Y9m!8Yw3mm7Rt ){-?)8xY zkbQSFMAb{@D11i_4IiMMDMo#jKD-Y>CBxK_iiCv_q+<$*IfES_xCI6pSnR?jN*TEr zyrk(=UX@g%^&RvnQAs3kY3^d^UXKG}?NUldMr3eI7>=d@lu1j?wnhr2DX0pC-hViV zYVbBf-lW5_jgOyRX1eR8*Is$)r|AF=e^4Ai5B?1_{^|tIJp0)f{?d9q{78gA2Z%pu zaH3yg@>dOdMV25Z&GO!aL*VJ_D#%os39JV XtIOxy<&>FX64{{v-%gsbIhtNP z2XDK!+Is;IqL~LBiDNVD9DIk*#RnKU{!lugP)5~ogWlkrSsI%2X&|83X=0$Z0SWEA z0t9uQKA&$pbvY6V^!IH$6g@9Fkh#SQ?4B2+h+23Ys=(eq&)vL*(rW2dR1iS*BtS?U zVGzqNIEFylu*dP}&_hI&Je3F<=mCe36z1c*Q+1?}+Nm$l@t6)X31oH@zqU5)*PIVW z!BZpzU4AD0ijuFP|0w |ZIs-N zxpxpPr!J5Z^ANwir@r}TzDBlp^j(oc|96k>HzuHJ_{|_o`?inZ2x8+kAeAk^#Aj1% z;9zXwggI?B66tgIO-Rh;qACVz3&)yRmA)#{=*z0+K*q}*ic5fab-}-*=u>}#Qbmk% z!Q6tNnses-wn9npakGgw@HqfEE(8UP2V$2GJp$AFsuzEAcyRdD8#iwJ&2N6=>;E|X z06Kt03}E^>d-<`)o_*{SSN@aftNa%e3bO+_8xh#wfL#LJoss2%poYLYDvJI=*G9Vv zT!pLBXme1q*mrxy4)Gy?7Miiw=RylEfv6K9<*ls2+lJuHBeR3zZNOcHq25NDINU;Z zjqcvo_ao33wma=wUB9Q}cKU;~)ot*uU7G$l ;CUmdnWcSZ?O(L{1hfxt4KcMuv507iar z-hn$WNksD+vYLdZ9(Ukq@D^>GCU4iS?&xd~v)!Fl01HA11r&n)g>rILs;U}&4GRu7 z )Y}yYE-5>x){V}!%5kq<{QMA?pO3A7%RD&AWr> 2;J1vzKX3VBWxBQ|3I ze_<%ew6Lzhx-(3H Q{D4 2fMokl_5zkx0Cu1uf7Xi?P zJ^F4)(G|Ac@Cigk2LpQ!fbhTiHa4ac==J$*G;cW#qWo}9(K-4A-xQw8Xa&0UR9%sj z#EWkvAao!qZ$-(m&tdst{Jckve{0L`>Y%J|goX`lmHf60x&OU)R3T(f&tR}=>oYZ- z|2C$LwR!<|q4^m0-v W{_SF~`$^o$T@xH05^YDu|7DuaVyR`uYAy3<#0aBF}6)~|o?{` >^m%e2uUi#_!ae}5(hl|4 zmmx%7Y%$H|l#XA0Y-GOQT7Fwpu#MVhN7;+7-)%I1j?^~ U0{)01ETsqb zX+`&?BoWq%Eu11opV)f|Y$SJPg&09S5oO A0X9*%)_9B%~{01gD-s^RL zE^9S)gdn$&wR>aal!Ql=(-Zv-UIhrntB1-d&FMr?LK6*Nw~< c}E`%NDl}(pF0J8R}Bor>saGZ5%Le;?DS;4XXkFzJGaJ*$LL*_ z5(^n@z{_YmZj dinZ?*Z#jL#Q)W4-P{b#z QbPrAbwxThX z3`+A)13;~!$f>*9)oYs(`PflAS>f2L!Q@;_K!R=e(yFr>zPE>%vD0V+YwcdgSE;bb zP}v#Cry}Yg$mh*L0;Z5+pz| ~&VWFcOy z7&@=vdofGa^X0Mhx(e|d2BBPCJHE TFN%Of0@*u42xw!Z)L5=hIsI2Z zc>nwV{H?d%`i;rxZ-us#_q+PR!u@lj@5BCG-GF_2@EzUmMin5=?px9Wm`4M>Gw6Tz z=8s)@{E06 zrSdEk`xvKA02B8nMQ)_R6vQXV()TtMnktud99=4+- z#c42Bs~WX1Lf~$0Ib`Ux^D0p&Yx8K}9vO(f%Ec~(;%_TL7=Y-4e;n(rl4OukH!+Uh zz?-9JY(KvMi{bpPa37a!nHi|p>oI{cyRWzt*jgCQO3brbIv)3a0I!7 S|SlKOb@Cc}Rg%Vx_YAjhKNr;|H5J3oHZs6k8oIXPhIAdJf zbXO&?RvEE_!-Eg5U%&C2*FJdv*QcHSH$pS)&BD*&j>pHa+wgB!58$? HDt66gHROY z%x=r Y0@?eT!VJh S?%P*cg zf8mGEpF97;WWyIRDyZ(PVbByEt)-v^+c7+A)kY)}Ef_NOh**_WMlT2<9Iu8wMGH_F z%5f{qrURg)x2n-@eIg5iTi`CJ=bhLsm(tl|Q}CVh4ElQiwvlf$1DnGLopYFzjdn*7 z{o_ZlftZdQt0)KqJ(`v}YwO&OTi<^vt@BUk;UL!FY{968A@DkYW#H>{X95G4ES%Xd z-tJ)47y}A3 rn})oJ {)|Z@u%*x2wSm zoI7qe?~myXy#IR_z&D0FGydali_eKWe!r93{9H2p5RL+by%ShU6ZHGs5%dmY>*tY2 z9(nSihcABqp@$xN`pn+mQ^RWYgpn}#dPPt)t5BKzPWpqS(wY5Xv+WI~Pd2+R1}DHL z!v^3CF!>jsyXgRWXq{}@jz}UXX$CnPZZyGxGm&~?a@8R_FUT!T^;a63d{$q+@6!a` znh408Ow A|hkC=jrg?*_+MRJseI z?nXKcrU*#4z$DBz8768Rxt1SFdVDR-IW(++ef`M>%Yq6}eRDPVx=f}s+&tL7_08)y zZd`ru-S2(*d*A!sH^NcFuK)KAV4OXE(#}5rk-?v|>xUip-R{k!1R3gfJb34~c|sT$ zeo{E<2zrMw|9u^n(}($eLw9T?5}mz#`LXAxbm5tY9(wqhy)*02OuND(RB=sHD5ty< zgZU!nl6KjzcCtvC4zVJDP<7$hoOlq8Wjb1tMkTE7QVf*P$rh)NZN#`nk5 zIJ_h@C7nX+cM?=+p?%w~yQ`{m^_+W;8Ug{v*zpir88398-xgj#1zg|OL+l)hEdwj( zIUCT6FYVpJ@S)0Vwf_2@s&`-ce5S-ZpDV5gIpn!HLPZ~`T{yCQlBqjaM{JilQ*z#b zJPZX1H}-Gc`0eZ0Z@&Ki`|thcWboe#+q?RF=azxzux#x8b4qB=qTk*7-$U4K_)EsW z^!pv(T0HmB&T-P;sk=YU?i<3<2w}DG`>rTqmou0@p4RL2LsQx?Ife7joIQ8`>Af>& zo|qQi#kz?Uj@vriZ0ahvrlmoIl6n;h;)$}GZ5Od!E2#uPWl`He#Vg@H4P)}MVfN79 z