From e3d371399463fbeba4aa654291c485d90d1a0f7a Mon Sep 17 00:00:00 2001 From: ragu Date: Tue, 1 Aug 2023 07:47:54 +0200 Subject: [PATCH] copri Faktura ticket email integration. Table depended sort. Cleanup users table --- copri4/main/src/Mod/APIjsonserver.pm | 2 +- copri4/main/src/Mod/Buttons.pm | 2 +- copri4/main/src/Mod/DBtank.pm | 26 ++--- copri4/main/src/Mod/Indexsharee.pm | 34 +++--- copri4/main/src/Mod/Libenzdb.pm | 15 +-- copri4/main/src/Mod/Payment.pm | 4 +- copri4/main/src/Mod/Prelib.pm | 51 +++++++-- copri4/main/src/Mod/Prelogic.pm | 80 ++++++-------- copri4/main/src/Mod/Shareework.pm | 15 +-- copri4/main/src/Tpl/BaseEdit.pm | 13 +++ copri4/main/src/Tpl/Liste3.pm | 36 +++---- copri4/main/src/Tpl/SubListe.pm | 46 +++++--- copri4/main/src/Tpl/TransPositionen.pm | 29 ++--- copri4/main/src/scripts/mailTransportcms.pl | 102 ++++++------------ .../examples/sharee_operator.sql.gz | Bin 32691 -> 33198 bytes copri4/shareedms-operator/src/Lib/Mlogic.pm | 2 +- 16 files changed, 219 insertions(+), 238 deletions(-) diff --git a/copri4/main/src/Mod/APIjsonserver.pm b/copri4/main/src/Mod/APIjsonserver.pm index c582a2a..2041112 100755 --- a/copri4/main/src/Mod/APIjsonserver.pm +++ b/copri4/main/src/Mod/APIjsonserver.pm @@ -68,7 +68,7 @@ my $response = { apiserver => "$apiserver", response => "$respreq", uri_primary => "$dbt->{primary}->{sharee_primary}->{primaryApp}", - copri_version => "4.1.23.15", + copri_version => "4.1.23.16", user_id => "", authcookie => "", new_authcoo => "0", diff --git a/copri4/main/src/Mod/Buttons.pm b/copri4/main/src/Mod/Buttons.pm index 7952789..6fe55d8 100755 --- a/copri4/main/src/Mod/Buttons.pm +++ b/copri4/main/src/Mod/Buttons.pm @@ -31,7 +31,7 @@ sub ibuttons(){ 'barcode' => 'Barcode Label drucken', 'buchen' => 'buchen', 'send_invoice_again' => 'senden', - 'email_generate' => 'eMail generieren', + 'send_invoice_cms' => 'eMail senden', 'new_contenttver' => 'Neues Arbeitsprofil', 'new_content' => 'NEUER Datensatz', 'new_contentcms' => 'NEUER Datensatz', diff --git a/copri4/main/src/Mod/DBtank.pm b/copri4/main/src/Mod/DBtank.pm index 270d70c..7419acd 100755 --- a/copri4/main/src/Mod/DBtank.pm +++ b/copri4/main/src/Mod/DBtank.pm @@ -1679,9 +1679,9 @@ sub search_content(){ my $searchref = shift; my $node_meta = shift; my $users_dms = shift; - my $main_ids = shift || ""; - my $tplids = shift || ""; - my $ct_ids = shift || ""; + my $main_ids = shift || 0; + my $tplids = shift || 0; + my $ct_ids = shift || 0; my $v_journal = shift || ""; my $ck4ex = shift || ""; @@ -1692,13 +1692,13 @@ sub search_content(){ $ck4ex =~ s/\s/,/g; $ck4ex =~ s/,$//; - my $owner = $users_dms->{u_id}; - my $sort_updown = $users_dms->{sort_updown}; - my $scol = $searchref->{scol}; - my $offset = $searchref->{offset}; - my $limit = $searchref->{limit}; - my $export = $searchref->{export}; - my $opos = $searchref->{opos}; + my $owner = $users_dms->{u_id} || 0; + my $sort_updown = $users_dms->{sort_updown} || "down"; + my $scol = $searchref->{scol} || "mtime"; + my $offset = $searchref->{offset} || 0; + my $limit = $searchref->{limit} || 200; + my $export = $searchref->{export} || ""; + my $opos = $searchref->{opos} || 0; my $stamp_time = strftime("%d.%m.%Y %H:%M",localtime(time)); my $debug=0; @@ -1751,10 +1751,10 @@ sub search_content(){ $cptxt_where .= " and cp.$key $opref->{$key} $valref->{$key}"; } }else{ - if($key eq "ct_name" && $valref->{$key} =~ /^(\d+)(0\d)$/){ + if($key eq "ct_name" && $valref->{$key} =~ /^\d+$/){ $txt_where .= " and (ct.$key ilike '$valref->{$key}' OR ct.barcode $opref->{$key} $valref->{$key})"; }elsif($key eq "ct_name"){ - $txt_where .= " and ct.$key ilike '$valref->{$key}'"; + $txt_where .= " and ct.$key ilike '$valref->{$key}%'"; }elsif($key =~ /_id|barcode|int\d+|sort|owner/ && (looks_like_number($valref->{$key}) || $valref->{$key} =~ /null|0/)){ $txt_where .= " and ct.$key $opref->{$key} $valref->{$key}"; }elsif($key =~ /txt|uri/){ @@ -1826,7 +1826,7 @@ sub search_content(){ $txt_where .= " and ct.int14 is $opos" if($opos eq "null"); } - $txt_where = " and ct.c_id IN ($ck4ex)" if($export =~ /check4export/); + $txt_where = " and ct.c_id IN ($ck4ex)" if($export eq "check4export" && $ck4ex); my $sth = ""; my $updown = "ASC"; $updown = "DESC" if($sort_updown eq "down"); diff --git a/copri4/main/src/Mod/Indexsharee.pm b/copri4/main/src/Mod/Indexsharee.pm index f6d25f7..c9faa4b 100755 --- a/copri4/main/src/Mod/Indexsharee.pm +++ b/copri4/main/src/Mod/Indexsharee.pm @@ -311,16 +311,17 @@ sub handler { my $today4db = strftime("%Y-%m-%d %H:%M",localtime(time)); $db->users_up("cal_start","$today4db",$users_dms->{u_id}); } - if($R::col_sort){ - $db->users_up("col_sort",$R::col_sort,$users_dms->{u_id}); - } - if($R::sort_updown){ - $db->users_up("sort_updown",$R::sort_updown,$users_dms->{u_id}); - } if($R::cal_sort_updown){ $db->users_up("cal_sort_updown",$R::cal_sort_updown,$users_dms->{u_id}); } + if($R::col_sort && $node_meta->{ct_table}){ + $db->users_up("col_sort_$node_meta->{ct_table}",$R::col_sort,$users_dms->{u_id}); + } + if($R::sort_updown){ + $db->users_up("sort_updown_$node_meta->{ct_table}",$R::sort_updown,$users_dms->{u_id}); + } + #base_edit implements new DMS methodes without Pre* things #permissions #DMS Kunden rw @@ -431,26 +432,23 @@ sub handler { $return = $pl->set_accounting2invoice($q,$users_dms,$R::c_id4trans,$R::set_main_id4workflow) if(looks_like_number($R::c_id4trans) && looks_like_number($R::tpl_id4trans) && looks_like_number($R::set_main_id4workflow)); }elsif($R::ct_trans =~ /save_text|save_adr/){ $feedb = $pl->save_text2contenttrans($q,$users_dms,$R::c_id4trans) if(looks_like_number($R::c_id4trans)); - }elsif($R::ct_trans =~ /email_generate/){ - #TODO - my $sendref = $pl->prepare_email({},{ txt08 => 'xxxx@sharee.bike' }, {}, $varenv{cms}->{$R::email_select}->{txt}); - #print Dumper($sendref); - my $email_body = $q->unescapeHTML($sendref->{message}); - $email_body =~ s/\r\n/\%0A/g; - $email_body =~ s/\n/\%0A/g; - #print "$email_body"; - print redirect("mailto:$sendref->{mail_to}?subject=$sendref->{subject}\&body=$email_body"); - exit 0; + } + #not used because of attachement + elsif($R::ct_trans =~ /email_generate/ && $R::c_id4trans && $R::email_select){ + #my $sendref = $pl->prepare_email(\%varenv,$R::c_id4trans,$R::email_select); + #print redirect("mailto:$sendref->{mail_to}?subject=$sendref->{subject}\&body=$sendref->{message}"); + #exit 0; + }elsif($R::detail_search && $R::detail_search eq "operator_accounting"){ my $ck4ex = "@R::ck4ex" || ""; $return = $pl->operator_accounting($q,$users_dms,$users_sharee,$R::accounting_type,$ck4ex); - }elsif($R::ct_trans || $R::v_abschluss || $R::trans2edit){ + }elsif($R::ct_trans || $R::set_state || $R::v_abschluss || $R::trans2edit){ #should do all else invoice text save , without positions and booking payment if($R::ct_trans !~ /_pos|open/ && looks_like_number($R::c_id4trans) && !$R::v_abschluss && !$R::trans2edit){ $feedb = $pl->save_text2contenttrans($q,$users_dms,$R::c_id4trans); } $return .= "|"; - $return .= $pre->preinit($q,$users_dms);#transactions logic + $return .= $pre->preinit($q,$node_meta,$users_dms); } }elsif($R::ct_trans){ $feedb->{message} = "failure::Abbruch. Schreibender Zugriff \"Faktura\" verweigert."; diff --git a/copri4/main/src/Mod/Libenzdb.pm b/copri4/main/src/Mod/Libenzdb.pm index 3c1dc5d..6707e39 100755 --- a/copri4/main/src/Mod/Libenzdb.pm +++ b/copri4/main/src/Mod/Libenzdb.pm @@ -612,9 +612,7 @@ sub update_users4trans(){ my ($c_id4trans,$tpl_id4trans,$kind_of_trans,$u_id) = @_; my $sth = $dbh->prepare("UPDATE users SET c_id4trans='$c_id4trans', - tpl_id4trans='$tpl_id4trans', - ctpos_activ='0', - kind_of_trans='Faktura' + tpl_id4trans='$tpl_id4trans' where u_id=$u_id"); my $rows = $sth->execute(); return $rows; @@ -625,15 +623,7 @@ sub cleanup_users(){ my $u_id = shift; my $sth = $dbh->prepare("UPDATE users SET c_id4trans='0', - tpl_id4trans='0', - ctpos_activ='0', - c_id4package='0', - kind_of_trans='', - parts_uri='', - address_uri='', - project_uri='', - transaction_uri='', - nel_uri='' + tpl_id4trans='0' where u_id=$u_id"); my $rows = $sth->execute(); return $rows; @@ -2103,7 +2093,6 @@ sub update_content4comp(){ } my $val="0"; $val=$menge if($menge); - $val = $val * -1 if($table eq "content" && $kind_of_trans eq "Einkauf"); my $ct_set = "int03=(int03 $operator $val)"; my $sth = $dbh->prepare("UPDATE $table SET $ct_set where $where") if($c_id || $ct_name); my $rows = $sth->execute(); diff --git a/copri4/main/src/Mod/Payment.pm b/copri4/main/src/Mod/Payment.pm index 00d4d0e..0805a5e 100755 --- a/copri4/main/src/Mod/Payment.pm +++ b/copri4/main/src/Mod/Payment.pm @@ -743,8 +743,8 @@ sub payone_capture(){ #send_invoice infomail, only if eMail never sent if(-f "$dbt->{copri_conf}->{basedir}/$varenv->{syshost}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" && !$ctt->{txt30}){ - system("$dbt->{copri_conf}->{basedir}/$varenv->{syshost}/src/scripts/mailTransportcms.pl '$varenv->{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' ''"); - print EMA "---> Payment send_invoice e-mail command: $dbt->{copri_conf}->{basedir}/$varenv->{syshost}/src/scripts/mailTransportcms.pl '$varenv->{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '$praefix-$ctt->{ct_name}.pdf' ''\n"; + system("$dbt->{copri_conf}->{basedir}/$varenv->{syshost}/src/scripts/mailTransportcms.pl '$varenv->{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' ''"); + print EMA "---> Payment send_invoice $praefix-$ctt->{ct_name}.pdf email command: $dbt->{copri_conf}->{basedir}/$varenv->{syshost}/src/scripts/mailTransportcms.pl '$varenv->{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' ''\n"; } close EMA; } diff --git a/copri4/main/src/Mod/Prelib.pm b/copri4/main/src/Mod/Prelib.pm index cbb2ce7..7737afb 100755 --- a/copri4/main/src/Mod/Prelib.pm +++ b/copri4/main/src/Mod/Prelib.pm @@ -1479,14 +1479,49 @@ sub export_csv { return $feedb; } -#prepare email by cms markup -#also done in mailTransportcms +#prepare email standalone for extern email client posting +#partly adapted from mailTransportcms +#attachement breaks, that's because not used sub prepare_email { my $self = shift; - my $sendref = shift; - my $ctadr = shift; - my $ctt = shift || {}; - my $cms_prim = shift; + my $varenv = shift; + my $ct_id = shift || ""; + my $email_select = shift || ""; + my $dbh = ""; + + my $cms_prim = $varenv->{cms}->{$email_select}->{txt}; + + #mailxcfg is shareeconf/mailx.cfg selection! + #hash data to send + my $sendref = { + mailxcfg => "mailx_default", + syshost => "$varenv->{syshost}", + mail_from => "", + mail_to => "", + mail_bcc => "", + c_id => 0, + subject => "", + message => "", + signature => "", + attachment => "", + }; + + my $fetchctt = { + table => "contenttrans", + fetch => "one", + c_id => "=::$ct_id", + }; + my $ctt = { c_id => 0 }; + $ctt = $dbt->fetch_tablerecord($dbh,$fetchctt); + + my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname},"iso-8859-1"); + my $pref_adr = { + table => "contentadr", + fetch => "one", + c_id => "$ctt->{int10}", + }; + my $ctadr = { c_id => 0 }; + $ctadr = $dbt->fetch_tablerecord($dbh_primary,$pref_adr); my $app_name = "Mietrad App"; $app_name = $dbt->{operator}->{$varenv{dbname}}->{app_name}; @@ -1500,8 +1535,8 @@ sub prepare_email { my $subject = "TeilRad Mietradsystem";#default $subject = $1 if($cms_prim =~ /--subject--(.*)--subject--/); - $subject .= " $sharee_ticket" if($sharee_ticket); $cms_prim =~ s/--subject--$subject--subject--//; + $subject .= " $sharee_ticket" if($sharee_ticket); $cms_prim =~ s/\n//; $cms_prim =~ s/\n//; @@ -1522,6 +1557,6 @@ sub prepare_email { #$sendref->{message} =~ s/\n/\
/g; return $sendref; -}#end prepare_content +}#end prepare_email 1; diff --git a/copri4/main/src/Mod/Prelogic.pm b/copri4/main/src/Mod/Prelogic.pm index 9c6c61c..779a4bf 100755 --- a/copri4/main/src/Mod/Prelogic.pm +++ b/copri4/main/src/Mod/Prelogic.pm @@ -37,6 +37,7 @@ sub new { sub preinit(){ my $self = shift; my $q = shift; + my $node_meta = shift; my $users_dms = shift; $q->import_names('R'); @@ -115,15 +116,6 @@ sub preinit(){ my $barcode=0; my $s_owner_id=0; - if($R::cash_sort){ - $db->users_up("cash_sort",$R::cash_sort,$users_dms->{u_id}); - } - if($R::ctpos_close){ - $db->users_up("ctpos_activ","0",$users_dms->{u_id}); - }elsif($R::ctpos_activ){ - $db->users_up("ctpos_activ",$R::ctpos_activ,$users_dms->{u_id}); - } - if($R::s_start_date_time && $varenv{dataflow} =~ /wiki/){ $db->users_up("cal_start","$R::s_start_date_time",$users_dms->{u_id}); } @@ -439,27 +431,12 @@ sub preinit(){ } my $pos_id = $R::c_idpos || $R::pos_id; - #DELETE verpos - if($ib_key eq "remove_verpos" && $pos_id){ - $table = "contenttverpos"; - $d_rows += $db->delete_content("$table","$pos_id"); - } - #DELETE pos - if($ib_key =~ /delete_pos|delete_verpos/ && $pos_id){ + if($ib_key =~ /delete_pos/ && $pos_id){ $table = "contenttranspos"; - $table = "contenttverpos" if($ib_key =~ /delete_verpos/); my $cttpos = $db->get_content1($table,$pos_id); - my $ctpos_sort; - if($pos_id == $users_dms->{ctpos_activ}){ - my $ctt_subpos = $db->collect_content2($table,"ctpos_id","$pos_id"); - foreach my $id (keys(%$ctt_subpos)){ - $d_rows += $db->delete_content("$table","$ctt_subpos->{$id}->{c_id}"); - } - } $d_rows += $db->delete_content("$table","$pos_id"); - $db->users_up("ctpos_activ","0",$users_dms->{u_id}) if("$pos_id" eq "$users_dms->{ctpos_activ}"); $ct_name = $1 if($R::ct_name =~ /^(\d+)/); $u_rows += $db->update_content4comp("content",$ct_name,"$cttpos->{cc_id}","+","$cttpos->{int03}","",""); } @@ -478,7 +455,7 @@ sub preinit(){ ###SET Relation (like move doc-type) #executed by Terminal submit-buttons #2. counter for WaWi and ReNr - if((!$R::close_time && $R::set_main_id) && ($R::set_relation || $R::set_state || $R::open_set_main_id > 300000 || $R::ct_trans =~ /print_pdf|print/i)){ + if((!$R::close_time && $R::set_main_id) && ($R::set_relation || $R::set_state || $R::open_set_main_id > 300000 || $R::ct_trans =~ /print_pdf/i)){ if($R::open_set_main_id){ $R::set_main_id = $R::open_set_main_id; $users_dms = $db->select_users($users_dms->{u_id}); @@ -630,8 +607,8 @@ sub preinit(){ } ###end SET Relation or state (V Terminal submit's) - my $c_id4print = $R::c_id4trans; - $c_id4print= $R::c_id if($R::printer_id =~ /Adresse|Kunde/); + my $c_id4print = ""; + $c_id4print = $R::c_id4trans if(looks_like_number($R::c_id4trans)); if($c_id4print){ open(EMA, ">> $varenv{logdir}/copri-print.log"); print EMA "$today4db\n"; @@ -643,43 +620,54 @@ sub preinit(){ my $praefix = "$ctt->{txt00}-$varenv{praefix}";#like Rechnung-sharee_operator - ###PRINT - if($R::ct_trans =~ /print_pdf|print/i){ - my $main_id = $R::set_main_id || $R::main_id; - my $node = $db->get_node4multi($main_id,$lang); + #PDF generate + if($R::ct_trans =~ /print_pdf/ || $R::print_pdf){ my $psize="A4"; - if("$ctt->{txt00}" =~ /Quittung/){ - $psize="A5"; - #-B 0 -T 0 -L 0 -R 0 # testing paper-margin=0 - } - my ($sysname, $nodename, $release, $version, $machine) = uname(); my $topdf = "$varenv{basedir}/src/wkhtmltopdf-amd64"; - if("$R::printer_id" =~ /PDF/){ #without system() because we have to wait until PDF is ready - $print_return = `$topdf --page-size $psize "$varenv{wwwhost}$script/Printpreview?printer_id=$R::printer_id\&mandant_main_id=$mandant_main_id\&main_id=$node->{main_id}\&ct_name2print=$ctt->{ct_name}\&c_id4trans=$c_id4print\&u_id=$users_dms->{u_id}\&pkey=$apikeyconf{pdfprinter}->{pkey}" "$varenv{pdf}/$praefix-$ctt->{ct_name}.pdf" 2>&1`; + $print_return = `$topdf --page-size $psize "$varenv{wwwhost}$script/Printpreview?printer_id=$R::printer_id\&mandant_main_id=$mandant_main_id\&main_id=$node_meta->{main_id}\&ct_name2print=$ctt->{ct_name}\&c_id4trans=$c_id4print\&u_id=$users_dms->{u_id}\&pkey=$apikeyconf{pdfprinter}->{pkey}" "$varenv{pdf}/$praefix-$ctt->{ct_name}.pdf" 2>&1`; $exit_code = $?; my $filesize = -s "$varenv{pdf}/$praefix-$ctt->{ct_name}.pdf"; - print EMA "$topdf --page-size $psize $varenv{wwwhost}$script/Printpreview?printer_id=$R::printer_id\&mandant_main_id=$mandant_main_id\&main_id=$node->{main_id}\&ct_name2print=$ctt->{ct_name}\&c_id4trans=$c_id4print\&u_id=$users_dms->{u_id}\&pkey=$apikeyconf{pdfprinter}->{pkey} $varenv{pdf}/$praefix-$ctt->{ct_name}.pdf\nreturn: $print_return\nfilesize: $filesize\nexit_code: $exit_code\nset_state: $R::set_state\n"; + print EMA "$topdf --page-size $psize $varenv{wwwhost}$script/Printpreview?printer_id=$R::printer_id\&mandant_main_id=$mandant_main_id\&main_id=$node_meta->{main_id}\&ct_name2print=$ctt->{ct_name}\&c_id4trans=$c_id4print\&u_id=$users_dms->{u_id}\&pkey=$apikeyconf{pdfprinter}->{pkey} $varenv{pdf}/$praefix-$ctt->{ct_name}.pdf\nreturn: $print_return\nfilesize: $filesize\nexit_code: $exit_code\nset_state: $R::set_state\n"; - if($R::set_state ne "buchen"){#no redirect if buchen incl. print_pdf + #no redirect + if($R::ct_trans eq "print_pdf"){ if( -f "$varenv{basedir}/pdf/$praefix-$ctt->{ct_name}.pdf"){ print ""; }else{ return "failure::PDF konnte nicht generiert werden, bitte Info an: admin\@sharee.bike\n $varenv{wwwhost}/pdf/$praefix-$ctt->{ct_name}.pdf"; } } - - } } + #PDF will be generated by "print_pdf" in context "buchen" + #"send_invoice_again" will use formarly generated PDF if(-f "$varenv{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" && (($R::set_state eq "buchen" && $R::send_invoice && $ctt->{int01} && $ctt->{int01} != 0) || ($ib_key eq "send_invoice_again"))){ - system("$dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' ''"); - print EMA "---> Prelogic send_invoice e-mail command: $dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '$praefix-$ctt->{ct_name}.pdf'\n"; + my $cms_message_key = "email-invoice"; + $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => "de" }); + if(!$varenv{cms}->{$cms_message_key}->{txt}){ + return "failure::Achtung, CMS-Text '$cms_message_key' ist nicht vorhanden. Es wurde keine eMail versandt!"; + } + + system("$dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' '$cms_message_key' '1'"); + print EMA "---> Prelogic send_invoice $praefix-$ctt->{ct_name}.pdf email command: $dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice' '$ctt->{int10}' '$ctt->{c_id}' '' '$cms_message_key' '1'\n"; } - # + + if($ib_key eq "send_invoice_cms" && $R::cms_message_key){ + + $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => "de" }); + if(!$varenv{cms}->{$R::cms_message_key}->{txt}){ + return "failure::Achtung, CMS-Text '$R::cms_message_key' ist nicht vorhanden. Es wurde keine eMail versandt!"; + } + my $with_pdf = ""; + $with_pdf = 1 if(-f "$varenv{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" && $R::print_pdf); + system("$dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice_cms' '$ctt->{int10}' '$ctt->{c_id}' '' '$R::cms_message_key' '$with_pdf'"); + print EMA "---> Prelogic send_invoice_cms $praefix-$ctt->{ct_name}.pdf email command: $dbt->{copri_conf}->{basedir}/$varenv{syshost}/src/scripts/mailTransportcms.pl '$varenv{syshost}' 'send_invoice_cms' '$ctt->{int10}' '$ctt->{c_id}' '' '$R::cms_message_key' '$with_pdf'\n"; + } + close EMA; }#end c_id4print diff --git a/copri4/main/src/Mod/Shareework.pm b/copri4/main/src/Mod/Shareework.pm index a1635ae..56c7226 100755 --- a/copri4/main/src/Mod/Shareework.pm +++ b/copri4/main/src/Mod/Shareework.pm @@ -410,20 +410,24 @@ sub save_account(){ #phonenr }elsif($_ eq "txt07"){ $valxx =~ s/[\s\-\/]//g; - if($valxx !~ /\d{9}/ || length($valxx) > 16){ + my $email = ""; + my $phone = ""; + $phone = $1 if($valxx =~ /([+0-9]+)/); + if(length($phone) < 9 || length($phone) > 16){ $ret = "failure::$_#top"; }else{ #smsAck reset - if($valxx ne $ctadr->{txt07}){ + if($phone ne $ctadr->{txt07}){ $u_rows = $dbt->update_one($dbh,$update_primary,"int13=0"); } - $u_rows = $dbt->update_one($dbh,$update_primary,"$_='$valxx'"); - my $email = $R::txt08; + $u_rows = $dbt->update_one($dbh,$update_primary,"$_='$phone'"); + $email = $q->escapeHTML("$R::txt08"); $email =~ s/\s//g; - my $confirm_digest = sha1_base64($email . $valxx); + my $confirm_digest = sha1_base64($email . $phone); $confirm_digest =~ s/[I1LO0]//ig; $u_rows = $dbt->update_one($dbh,$update_primary,"txt34='$confirm_digest'"); } + print FILE "confirm_digest input after substitution: $email . $phone\n" if($debug); #user alias email }elsif($_ eq "txt08"){ $valxx =~ s/\s//g; @@ -438,7 +442,6 @@ sub save_account(){ order => "mtime", }; my $account_check = $dbt->fetch_tablerecord($dbh,$pref_ac); - #my $account_check = $self->check_account("txt08","ilike",$valxx,"c_id","!=",$c_id); print FILE "account_check email:$valxx, c_id:$account_check->{c_id} && $account_check->{c_id} != $c_id\n" if($debug); if($account_check->{c_id} && $account_check->{c_id} != $c_id){ diff --git a/copri4/main/src/Tpl/BaseEdit.pm b/copri4/main/src/Tpl/BaseEdit.pm index b2c165a..224194f 100755 --- a/copri4/main/src/Tpl/BaseEdit.pm +++ b/copri4/main/src/Tpl/BaseEdit.pm @@ -952,6 +952,19 @@ EOF my $legend = ""; $legend = " Orange markierte Angaben bitte prüfen und ggf. korrigieren." if($node_meta->{tpl_id} == 221); print $q->div($but->singlesubmit7("$edit","$save_key","$ib{$save_key}","margin:10px 5px;"), "$legend"),"\n"; + + if($node_meta->{tpl_id} == 194){ + print $q->div({-style=>'font-size:13px;'},"Text Variablen Legende:
+ --subject-- --subject-- → eMail Betreff
+ ::user_name:: → Kunden Name
+ ::app_name:: → App Name
+ ::invoice_nr:: → Faktura Beleg Nr
+ ::invoice_name:: → Faktura PDF Name
+ ::txid:: → Payone TXID
+ ::signature:: → eMail Signature
+ "),"\n"; + } + my $debug = ""; $debug = "(ct_table: $node_meta->{ct_table} | main_id: $node_meta->{main_id} | c_id: $ctrel->{c_id} | tpl_id: $tpl->{tpl_id} | rel_id: $ctrel->{rel_id})"; print $q->div({-style=>'z-index:10;font-size:13px;'},"$debug"),"\n" if($users_dms->{u_id} == $dbt->{copri_conf}->{superu_id}); diff --git a/copri4/main/src/Tpl/Liste3.pm b/copri4/main/src/Tpl/Liste3.pm index 7574084..3e9c511 100755 --- a/copri4/main/src/Tpl/Liste3.pm +++ b/copri4/main/src/Tpl/Liste3.pm @@ -78,7 +78,6 @@ sub tpl(){ $path =~ s/\/login|\/user|\/manager|\/admin|\/$//; my $user_agent = $q->user_agent(); - my $saved_query = $q->url(-query=>1); my %ib = $but->ibuttons(); my $main_id = $node_meta->{main_id}; my $tpl_id = $node_meta->{template_id}; @@ -134,7 +133,7 @@ sub tpl(){ $cttpos = { %$cttpos_trans }; - my $table = $node_meta->{ct_table} || ""; + my $table = $node_meta->{ct_table} || "content"; my $hashfile = "$varenv{logdir}/$users_dms->{u_id}-$table-searchhash"; @@ -153,19 +152,9 @@ sub tpl(){ my @tpl_order = split /,/,$node_meta->{tpl_order}; - my $scol = "c_id"; - $scol = "txt01" if($path =~ /Waren/); - #table columne check for col_sort - if($users_dms->{col_sort} eq "node_name" && ($table eq "contenttver")){ - $scol = "node_name"; - }elsif($users_dms->{col_sort} eq "date_time" && ($table =~ /contenttver|contenttrans/)){ - $scol = "end_time"; - }elsif($users_dms->{col_sort}){ - my $tinfo = $db->table_info($table); - foreach (keys(%$tinfo)){ - $scol = "$users_dms->{col_sort}" if("$users_dms->{col_sort}" eq "$tinfo->{$_}->{attname}"); - } - $db->users_up("col_sort","0",$users_dms->{owner}) if("$scol" ne "$users_dms->{col_sort}"); + my $scol = "mtime"; + if($users_dms->{"col_sort_$table"}){ + $scol = $users_dms->{"col_sort_$table"}; } my $limit = $R::limit || 250; @@ -546,7 +535,7 @@ EOF print $q->a({-class=>'elinkbutton',-style=>'margin:0 0 2px 20px;', -href=>'?accounting_select=1'},"1. Einzüge selektieren"),"\n"; } print "$months[$mon -1] $year\n"; - print $q->span({-style=>'font-size:0.81em;'}," (1. selektiert Rechnungen mit Payone Einzug & kein OPOS & p-Saldo=0 & kein Storno & keine interne Bemerkung, alle anderen bitte manuell überprüfen und falls i.O. selektieren)"),"\n"; + print $q->span({-style=>'font-size:0.81em;'}," (1. selektiert Rechnungen mit Payone Einzug & kein OPOS & p-Saldo=0 & kein Storno & keinen internen Bearbeitungsstatus & payone-sequence=1, alle anderen bitte manuell überprüfen und falls i.O. selektieren)"),"\n"; print "\n"; } print $q->hidden(-name=>'mandant_main_id', -value=>"$dbt->{shareedms_conf}->{parent_id}"),"\n"; @@ -689,8 +678,8 @@ EOF $i += 2; my $sort_up = "up"; my $sort_down = "down"; - $sort_up = "$sort_up" if($users_dms->{sort_updown} eq "up"); - $sort_down = "$sort_down" if($users_dms->{sort_updown} eq "down"); + $sort_up = "$sort_up" if($users_dms->{"sort_updown_$table"} eq "up"); + $sort_down = "$sort_down" if($users_dms->{"sort_updown_$table"} eq "down"); print $q->th($q->a({-class=>"sortnav",-href=>"?sort_updown=up\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>'Aufsteigend sortieren'},"$sort_up"),"|",$q->a({-class=>"sortnav",-href=>"?sort_updown=down\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>'Absteigend sortieren'},"$sort_down")),"\n"; print $q->th(""),"\n"; @@ -698,7 +687,7 @@ EOF foreach (@tpl_order){ my ($key,$val,$size,$title) = split /=/,$_; my $sort_title=" $title"; - $val = "$val" if($key eq $users_dms->{col_sort}); + $val = "$val" if($key eq $users_dms->{"col_sort_$table"}); if($key =~ /byte|txt|time|node|int|time\d+|save|state|owner|c_id|ct_name|barcode|sort|public/){ $i++; print $q->th({-nowrap=>1},$q->a({-class=>"sortnav",-href=>"?col_sort=$key\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"$sort_title"},"$val")),"\n"; @@ -718,7 +707,7 @@ EOF #BIG LOOP loop content table foreach my $id (sort { - if($users_dms->{sort_updown} eq "down"){ + if($users_dms->{"sort_updown_$table"} eq "down"){ if ($scol =~ /barcode|int/) { $ct4rel->{$b}->{$scol} <=> $ct4rel->{$a}->{$scol} }else{ @@ -835,7 +824,7 @@ EOF } #1.Spalte if("$ct4rel->{$id}->{main_id}" eq "$node_meta->{main_id}" || "$ct4rel->{$id}->{main_id}" eq "$node_meta->{parent_id}"){ - if($table =~ /content$|contentadr|contentnel/){ + if($table =~ /content$|contentadr/){ $ecol++; print "\n"; @@ -960,7 +949,7 @@ EOF my $opos = ""; $opos = "" if($ct4rel->{$id}->{int14}); print $q->td({-class=>'tdint',-style=>"font-weight:normal;$set_style4nr", -nowrap=>1},$q->a({-class=>"linknav3",-href=>"?ct_trans=open\&mode=manager\&c_id4trans=$ct4rel->{$id}->{c_id}\&tpl_id4trans=$ct4rel->{$id}->{template_id}\&owner=$users_dms->{u_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$opos $ct4rel->{$id}->{$key}")); - }elsif($table =~ /content$|contentadr|contentnel/){ + }elsif($table =~ /content$|contentadr/){ print $q->td({-class=>"tdint",-style=>"font-weight:normal;$set_style4nr"},$q->a({-class=>"linknav3",-href=>"?node2edit=editpart\&mode=manager\&rel_id=$ct4rel->{$id}->{rel_id}\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"Terminal öffnen"},"$ct4rel->{$id}->{$key}")),"\n"; }elsif(($node_meta->{tpl_order} !~ /barcode/) || ("$ct4rel->{$id}->{$key}" ne "$ct4rel->{$id}->{barcode}")){ print $q->td({-class=>'tdint',-style=>"font-weight:bold;$set_style4nr"},"$ct4rel->{$id}->{$key}"),"\n"; @@ -1246,9 +1235,8 @@ EOF print $q->td({-class=>'tdint',-colspan=>"1",-nowrap=>"1"},"$sum_CCpayone €"); } if($sum_gutschrift != 0){ - $sum_gutschrift *= -1; + #$sum_gutschrift *= -1; $sum_gutschrift = sprintf('%.2f',$sum_gutschrift); - $sum_gutschrift += $sum_gutschrift; $sum_success += $sum_gutschrift; print $q->Tr(); print $q->td({-style=>"background-color:silver;"},""),"\n"; diff --git a/copri4/main/src/Tpl/SubListe.pm b/copri4/main/src/Tpl/SubListe.pm index a25d6bf..f645dd2 100755 --- a/copri4/main/src/Tpl/SubListe.pm +++ b/copri4/main/src/Tpl/SubListe.pm @@ -121,10 +121,15 @@ sub tpl(){ $searchref->{table_pos} = "contentpos"; if($node_meta->{tpl_id} == 194 || $node_meta->{tpl_id} == 199){ $table = "contentuser"; + $searchref->{table} = "$table"; $searchref->{table_pos} = ""; $searchref->{template_id_pos} = ""; - $searchref->{c_id} = ">::400"; - $main_ids = $node_meta->{main_id}; + $searchref->{c_id} = ">::400" if($node_meta->{tpl_id} == 199); + if($node_meta->{main_id} < 400000){ + $main_ids = $node_meta->{main_id}; + }else{ + $searchref->{ct_name} = "$node_meta->{node_name}"; + } $tpl_ids = $node_meta->{tpl_id}; } elsif($node_meta->{tpl_id} > 400 && $node_meta->{tpl_id} <= 499){ @@ -187,22 +192,23 @@ EOF my @tpl_order = split /,/,$node_meta->{tpl_order}; my $rows = 0; #table columne check for col_sort - if($users_dms->{col_sort}){ - my $tinfo = $db->table_info($table); - foreach (keys(%$tinfo)){ - $searchref->{scol} = "$users_dms->{col_sort}" if($users_dms->{col_sort} eq $tinfo->{$_}->{attname}); - } - $db->users_up("col_sort","0",$users_dms->{owner}) if($searchref->{scol} ne $users_dms->{col_sort}); + if($users_dms->{"col_sort_$table"}){ + $searchref->{scol} = $users_dms->{"col_sort_$table"}; } $searchref->{scol} = "u_id" if($node_meta->{template_id} == 198); - $users_dms->{sort_updown} = "down" if(!$users_dms->{sort_updown}); + $users_dms->{"sort_updown_$table"} = "down" if(!$users_dms->{"sort_updown_$table"}); #print Dumper($node_meta); my $hashfile = "$varenv{logdir}/$users_dms->{u_id}-$searchref->{table_pos}-searchhash"; + $hashfile = "$varenv{logdir}/$users_dms->{u_id}-$searchref->{table}-searchhash" if(!$searchref->{table_pos}); + + if($node_meta->{tpl_id} =~ /194/ && !$R::detail_search && -f $hashfile && ($R::node2edit || $R::base_edit)){ + $searchref = {}; + $searchref = retrieve($hashfile); + } + my $ct4rel = {}; - #print Dumper($node_meta); - #print "if(!$start_chck && !$end_chck && $main_ids && $tpl_ids){"; if(!$start_chck && !$end_chck && $main_ids && $tpl_ids){ #$rows = $db->count_content($searchref->{table_pos},"$main_ids","$tpl_ids"); @@ -221,6 +227,12 @@ EOF my $ck4ex = ""; #only if permission read if(($node_meta->{ct_table} eq "users" && $users_dms->{int07} >= 1) || ($node_meta->{ct_table} eq "contentadrpos" && $users_dms->{int01} >= 1) || ($node_meta->{ct_table} eq "contentpos" && $users_dms->{int01} >= 1) || ($node_meta->{ct_table} eq "contentuser" && $users_dms->{int08} >= 1)){ + + #trying to save hashref + if($node_meta->{tpl_id} =~ /194/ && $R::detail_search && ref($searchref) eq "HASH"){ + store $searchref, $hashfile; + } + $ct4rel = $dbt->search_content($dbh,$searchref,$node_meta,$users_dms,"$main_ids","$tpl_ids","","",$ck4ex); }else{ $return = "failure::Abbruch. Keine Zugriffsberechtigung"; @@ -259,14 +271,14 @@ EOF } #1. Search-fields - my $s_val = ""; foreach(@tpl_order){ my ($key,$val,$size) = split /=/,$_; $size = 15 if($size =~ /area/); $size = 10 if($size =~ /time/); $size = 2 if($size =~ /checkbox/); - #$s_val = $searchref->{$key} if($searchref->{$key}); + my $s_val = ""; + $s_val = $searchref->{$key} if($searchref->{$key}); #print "$key=$searchref->{$key}|"; if($key =~ /node|txt|int|ct_name|_id|barcode|sort|public/){ if($key =~ /_id|barcode|int04/){ @@ -309,8 +321,8 @@ EOF #print $q->th({-style=>""}," "),"\n"; my $sort_up = "up"; my $sort_down = "down"; - $sort_up = "$sort_up" if($users_dms->{sort_updown} eq "up"); - $sort_down = "$sort_down" if($users_dms->{sort_updown} eq "down"); + $sort_up = "$sort_up" if($users_dms->{"sort_updown_$table"} eq "up"); + $sort_down = "$sort_down" if($users_dms->{"sort_updown_$table"} eq "down"); print $q->th($q->a({-class=>"sortnav",-href=>"?sort_updown=up\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>'Aufsteigend sortieren'},"$sort_up"),"|",$q->a({-class=>"sortnav",-href=>"?sort_updown=down\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>'Absteigend sortieren'},"$sort_down")),"\n"; print $q->th({-style=>""}," "),"\n"; } @@ -335,7 +347,7 @@ EOF my $sort_title="| $val"; if($node_meta->{tpl_id} !~ /198|199/){ - $val = "$val" if($key eq $users_dms->{col_sort}); + $val = "$val" if($key eq $users_dms->{"col_sort_$table"}); print $q->th({-style=>'padding:5px 0'},$q->div({-style=>"$divstyle"},$q->a({-class=>"sortnav",-href=>"?col_sort=$key\&offset=$searchref->{offset}\&limit=$searchref->{limit}",-title=>"$val"},"$val"))),"\n" if($key ne "u_id"); }else{ print $q->th({-style=>'padding:5px 0'},$q->div({-style=>"$divstyle"},"$val")),"\n" if($key ne "u_id"); @@ -368,7 +380,7 @@ EOF else{ my $scol = $searchref->{scol}; foreach my $id (sort { - if($users_dms->{sort_updown} eq "down"){ + if($users_dms->{"sort_updown_$table"} eq "down"){ if ($scol =~ /barcode|int|_id/) { $ct4rel->{$b}->{$scol} <=> $ct4rel->{$a}->{$scol} }else{ diff --git a/copri4/main/src/Tpl/TransPositionen.pm b/copri4/main/src/Tpl/TransPositionen.pm index 2f14178..abbcca2 100755 --- a/copri4/main/src/Tpl/TransPositionen.pm +++ b/copri4/main/src/Tpl/TransPositionen.pm @@ -587,7 +587,7 @@ EOF my $send_invoice_checkbox = 1; $send_invoice_checkbox = 0 if($ctt->{txt30} || $ctt->{ct_name} =~ /\d-\d/); print $q->div({-class=>'element6',-style=>'float:right;background-color:silver;'}, $q->b("$ctt->{txt00}"), - ": PDF drucken ",$but->checkbox("print_pdf","ct_trans","1","PDF drucken",""), + ": PDF drucken ",$but->checkbox("1","print_pdf","1","PDF drucken",""), " – eMail senden ",$but->checkbox("1","send_invoice","$send_invoice_checkbox","eMail $ctt->{txt00}",""), " – Zahlungsart/Status ", $but->selector("state","250px",$kind_of_payment,@_paymentstate), @@ -633,6 +633,7 @@ EOF my $praefix = "$ctt->{txt00}-$varenv{praefix}"; print $q->div({-style=>"clear:both;height:0.1px;"},""),"\n"; if($ctt->{txt30}){ + $ctt->{txt30} = $lb->newline($ctt->{txt30},"",""); print $q->div({-style=>"padding:0.5em;font-size:0.81em;width:98%;text-align:right;"}, "$ctt->{txt30}"),"\n"; }elsif( -f "$dbt->{copri_conf}->{basedir}/$varenv{syshost}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf" ){ print $q->start_form(),"\n"; @@ -644,36 +645,28 @@ EOF print $q->end_form; } - #TODO - if(1==2 && "$varenv{praefix}-$ctt->{ct_name}" =~ /\d+/){ - my $sharee_ticket = ""; - my $subject = ""; - $sharee_ticket = " [$varenv{praefix}-$ctt->{ct_name}]"; - $subject .= $sharee_ticket if($sharee_ticket); - $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => 'de' }); - my @_valxx = (""); + if( -f "$varenv{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf"){ + print $q->div({-style=>'padding:0.5em;font-size:0.91em;width:98%;text-align:right;'}, "PDF download: ", $q->a({-href=>"$varenv{wwwhost}/FileOut?file=$praefix-$ctt->{ct_name}.pdf&sessionid=$coo", -target=>"_blank" , -type=>'application/octet-stream', -style=>'text-decoration:underline;'}, "$praefix-$ctt->{ct_name}.pdf")),"\n"; + } + + #copri-Ticket-mailing, eMail send by select cms_message_key + if("$varenv{praefix}-$ctt->{ct_name}" =~ /\d+/){ + $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => 'de', ct_name => 'email-invoice%' }); + my @_valxx = ("email CMS-Text select"); foreach my $rid (sort { $varenv{cms}->{$a}->{ct_name} cmp $varenv{cms}->{$b}->{ct_name} } keys (%{$varenv{cms}})){ push (@_valxx, "$varenv{cms}->{$rid}->{ct_name}:$varenv{cms}->{$rid}->{ct_name}"); } - #print $q->start_form(-action=>'mailto:xxxx@sharee.bike', -method=>'GET'),"\n"; print $q->start_form(),"\n"; print $q->hidden(-name=>'c_id4trans', -override=>'1', -value=>"$ctt->{content_id}"),"\n"; print $q->hidden(-name=>'tpl_id4trans', -override=>'1', -value=>"$ctt->{template_id}"),"\n"; print $q->hidden(-name=>'offset', -override=>'1', -value=>"$R::offset"),"\n" if($R::offset); print $q->hidden(-name=>'limit', -override=>'1', -value=>"$R::limit"),"\n" if($R::limit); - print $q->hidden(-name=>'mailto', -value=>"xxxx\@sharee.bike"),"\n"; - print $q->hidden(-name=>'subject', -value=>"xxxx"),"\n"; - print $q->div({-style=>"padding:0.5em;font-size:0.91em;width:98%;text-align:left;"}, $but->selector_class("email_select","eselect","width:250px;",$ctt->{txt31},@_valxx), $but->singlesubmit1("ct_trans","email_generate","")),"\n"; + print $q->div({-style=>"padding:0.5em;font-size:0.81em;width:98%;text-align:right;"}, "Copri-Ticket-mailing: ", $but->selector_class("cms_message_key","eselect","width:250px;","",@_valxx), "mit PDF", $but->checkbox("1","print_pdf","1","mit PDF",""), $but->singlesubmit1("ct_trans","send_invoice_cms","")),"\n"; print $q->end_form; } - - if( -f "$varenv{basedir}/pdfinvoice/$praefix-$ctt->{ct_name}.pdf"){ - print $q->div({-style=>'padding:0.5em;font-size:0.91em;width:98%;text-align:right;'}, "Download: ", $q->a({-href=>"$varenv{wwwhost}/FileOut?file=$praefix-$ctt->{ct_name}.pdf&sessionid=$coo", -target=>"_blank" , -type=>'application/octet-stream', -style=>'text-decoration:underline;'}, "$praefix-$ctt->{ct_name}.pdf")),"\n"; - } - $db->updater("contenttrans","c_id","$ctt->{content_id}","txt20","$accounting_start - $accounting_end","","","","","no_time") if(!$int05 && $accounting_start && $accounting_end); $db->updater("contenttrans","c_id","$ctt->{content_id}","int15","$sum_preauth","","","","","no_time") if($sum_preauth || $sum_preauth == 0); diff --git a/copri4/main/src/scripts/mailTransportcms.pl b/copri4/main/src/scripts/mailTransportcms.pl index a75ddff..fb9ba72 100755 --- a/copri4/main/src/scripts/mailTransportcms.pl +++ b/copri4/main/src/scripts/mailTransportcms.pl @@ -7,6 +7,7 @@ # #Example #./src/scripts/mailTransportcms.pl 'shareedms-operator' 'send_alarm2hotline' '[user.c_id]' '[contenttxxxx.c_id]' +#./src/scripts/mailTransportcms.pl 'shareedms-operator' 'send_invoice_cms' '[user.c_id]' '[contenttxxxx.c_id]' '' '[cmstext_select]' '[with_pdf]' # # # @@ -42,6 +43,8 @@ my $todo = $ARGV[1] || ""; my $adr_id = $ARGV[2] || ""; my $ct_id = $ARGV[3] || ""; my $temppw = $ARGV[4] || ""; +my $cmstext_select = $ARGV[5] || ""; +my $with_pdf = $ARGV[6] || ""; open(EMA, ">> $dbt->{copri_conf}->{logdir}/mailTransportcms.log"); print EMA "\n$now_dt, start mailTransportcms.pl syshost: $syshost, todo:$todo, adr_id:$adr_id, ct_id:$ct_id, temppw:$temppw\n"; @@ -80,13 +83,13 @@ if(looks_like_number($adr_id)){ #send_invoice if($todo eq "send_invoice" && looks_like_number($ct_id)){ $sendref->{mailxcfg} = "mailx_invoice"; - $sendmail = send_invoice($todo,$sendref,$ctadr,$ct_id); + $sendmail = send_invoice($todo,$sendref,$ctadr,$ct_id,"email-invoice",$with_pdf); } - #send_warninginvoice - if($todo eq "send_warninginvoice" && looks_like_number($ct_id)){ - $sendref->{mailxcfg} = "mailx_invoice_bcc"; - $sendmail = send_warninginvoice($todo,$sendref,$ctadr,$ct_id); + #send_invoice_cms + if($todo eq "send_invoice_cms" && looks_like_number($ct_id) && $cmstext_select){ + $sendref->{mailxcfg} = "mailx_invoice_bcc";#with BCC + $sendmail = send_invoice($todo,$sendref,$ctadr,$ct_id,$cmstext_select,$with_pdf); } #send_emailack @@ -115,7 +118,7 @@ if($todo eq "send_occupied2hotline"){ $sendmail = send_occupied2hotline($sendref); } -#send_invoice_onwork once a week as reminder +#send_invoice_onwork once a week as reminder [in Arbeit|eMail gesendet] if($todo eq "send_invoice_onwork"){ #loop operators DB while (my ($key, $op_name) = each %{ $dbt->{operator} }) { @@ -144,18 +147,21 @@ if($sendmail->{c_id}){ #send_invoice sub send_invoice { - my $todo = shift; - my $sendref = shift; - my $ctadr = shift; - my $ct_id = shift; - - my $project = $dbt->{operator}->{$varenv{dbname}}->{project} || ""; - my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname},"iso-8859-1"); - $varenv{cms} = $dbt->fetch_cms($dbh_primary,{ lang => $ctadr->{txt10} }); - my $cms_message_key = "email-invoice"; + my $todo = shift || ""; + my $sendref = shift || {}; + my $ctadr = shift || ""; + my $ct_id = shift || ""; + my $cms_message_key = shift || "email-invoice"; + my $with_pdf = shift || ""; my $dbh = $dbt->dbconnect_extern($dbt->{operator}->{$varenv{dbname}}->{database}->{dbname},"iso-8859-1"); - #ex. primary hotline c_id=1# changed to Kunden-Fakture c_is=100002, check tablefields + my $project = $dbt->{operator}->{$varenv{dbname}}->{project} || ""; + $varenv{cms} = $dbt->fetch_cms($dbh,{ lang => $ctadr->{txt10} }); + + if(!$varenv{cms}->{$cms_message_key}->{txt}){ + exit 1; + } + my $pref_ctu = { table => "contentuser", fetch => "one", @@ -178,52 +184,13 @@ sub send_invoice { table => "contenttrans", c_id => "$ct_id", }; - $dbt->update_one($dbh,$updatectt,"txt30='$now_dt, $ctt->{txt00} per eMail versandt'"); + my $log_stamp = strftime "%d.%m.%Y %H:%M:%S", localtime; + my $mailing_log = $ctt->{txt30} . "\n- $log_stamp mailing: $cms_message_key"; + $dbt->update_one($dbh,$updatectt,"txt30='$mailing_log'"); return $sendref; }#end send_invoice -#TODO with CMS-Text selection -#send_warninginvoice -sub send_warninginvoice { - my $todo = shift; - my $sendref = shift; - my $ctadr = shift; - my $ct_id = shift; - - my $project = $dbt->{operator}->{$varenv{dbname}}->{project} || ""; - my $dbh_primary = $dbt->dbconnect_extern($dbt->{primary}->{sharee_primary}->{database}->{dbname},"iso-8859-1"); - $varenv{cms} = $dbt->fetch_cms($dbh_primary,{ lang => $ctadr->{txt10} }); - my $cms_message_key = "email-invoice"; - - my $dbh = $dbt->dbconnect_extern($dbt->{operator}->{$varenv{dbname}}->{database}->{dbname},"iso-8859-1"); - my $pref_ctu = { - table => "contentuser", - fetch => "one", - c_id => "100002", - }; - my $uadr = { c_id => 0 }; - $uadr = $dbt->fetch_tablerecord($dbh,$pref_ctu); - - my $fetchctt = { - table => "contenttrans", - fetch => "one", - c_id => "=::$ct_id", - }; - my $ctt = { c_id => 0 }; - $ctt = $dbt->fetch_tablerecord($dbh,$fetchctt); - - $sendref = prepare_content($sendref,$ctadr,$uadr,$ctt,$varenv{cms}->{$cms_message_key}->{txt}); - - my $updatectt = { - table => "contenttrans", - c_id => "$ct_id", - }; - #$dbt->update_one($dbh,$updatectt,"txt30='$now_dt, $ctt->{txt00} per eMail versandt'"); - - return $sendref; -}#end send_warninginvoice - #send_emailack sub send_emailack { @@ -496,28 +463,22 @@ sub prepare_content { my $ctt = shift || {}; my $cms_prim = shift; - my $globalconf_file = "/var/www/copri4/shareeconf/global.cfg"; - my $conf = Config::General->new($globalconf_file); - my %globalconf = $conf->getall; - my $app_name = "Mietrad App"; - #while (my ($key, $merchant) = each %{ $globalconf{merchant_ids} }) { - # $app_name =~ s/$app_name/$merchant->{app_name}/ if($merchant->{app_name} && $ctadr->{int15} && $ctadr->{int15} == $merchant->{id}); - #} $app_name = $dbt->{operator}->{$varenv{dbname}}->{app_name}; my $invoice_name = ""; + my $invoice_nr = ""; my $sharee_ticket = ""; if(ref($ctt) eq "HASH" && $ctt->{ct_name}){ $invoice_name = "$ctt->{txt00}-$varenv{dbname}-$ctt->{ct_name}.pdf"; $sendref->{attachment} = "$invoice_name"; - $sharee_ticket = "[$varenv{dbname}-$ctt->{ct_name}]"; + $invoice_nr = "$varenv{dbname}-$ctt->{ct_name}"; + $sharee_ticket = "[$invoice_nr]"; } my $subject = "TeilRad Mietradsystem";#default $subject = $1 if($cms_prim =~ /--subject--(.*)--subject--/); - $subject .= " $sharee_ticket" if($sharee_ticket); $cms_prim =~ s/--subject--$subject--subject--//; - $cms_prim =~ s/\n//; + $subject .= " $sharee_ticket" if($sharee_ticket); $cms_prim =~ s/\n//; my $signature = <{subject} =~ s/Mein // if($sendref->{subject} =~ /^Mein/); $sendref->{message} = $cms_prim; - $sendref->{message} =~ s/::user_name::/$ctadr->{txt01}/; + $sendref->{message} =~ s/::user_name::/$ctadr->{txt01}/g; $sendref->{message} =~ s/::app_name::/$app_name/g; - $sendref->{message} =~ s/::invoice_name::/$invoice_name/ if($invoice_name); + $sendref->{message} =~ s/::invoice_nr::/\$invoice_nr\<\/b\>/g if($invoice_nr); + $sendref->{message} =~ s/::invoice_name::/$invoice_name/g if($invoice_name); $sendref->{message} =~ s/::txid::/$ctt->{txt16}/; $sendref->{message} =~ s/::email_temppassword::/\$ctadr->{txt04}\<\/b\>/g; $sendref->{message} =~ s/::email_ack_digest::/\$ctadr->{txt34}\<\/b\>/g;#send_emailack diff --git a/copri4/shareeconf/examples/sharee_operator.sql.gz b/copri4/shareeconf/examples/sharee_operator.sql.gz index 3a39e0fe36fa902f41b2b2de7fe9556386edbcac..248c2d5fae7fc359749c6d1760660bc0dcc2713c 100755 GIT binary patch literal 33198 zcmZU)Q>-w|(lokk+qSJ|*|u%lwr$(CZQHhO0+CvfUC*>pLkUxc{*a)TA+USJT(W9kU4fOk9^;q6LCLVNGmL6;C0`X+Q5X)YH#1 zz&G-1p>Jj8CJ})PD>hbgO`?xQ4t3&mx;?v}4!?YR`}Dc6sgEor?C^A>ipd$r zK5-uJw}UjiyFAv^6pIu($iP_7lmT&w)*oW!d73f4$g?VAe}GyVztFe8?N--RCI8KmcRM z1Qz0@KOIPXSu}-WDQr)@FU5dGPi8aAoc=xz<`sbp4IUtuY{L%IbsnqFk=6we8#6u} zcAAtkVIy5TMIWGNQcWpH2VmwfJnOQXd(#0p}+XFm9VRe)6LE8 zj<2O~fi@$cJzCgy(i2C|^F~_KlJ8b2G#^VN7h5A|AjYLAn=dx=Li%wiDv(1@AbRBF z64xx8O9*WDn%=3}?it;=+U`+kcMIE9f24p@LXtc~Ut9e6T3ULMPs*}%cys;0qYUwa zN-4Y@gGTbaWqtzS(`!4*bZuFt>*4b7dH#LYR9q!yu{f5w@LQ$z4E^hzpkQa5<{%@| zH|!n!wfAFCkAp~mue6`BOj5CFbRvo-a!BSZDS$T3LHY{Y#C1W->o!l_mh1!PonU+l zlABW`s3M4-G%t(BROo^pB{6~Bn*vcmkv=r!aJADSB%NME{2*eZv&imogTs%q>9(pXHS7YaK@JM94Ov^{|1wru0b8gN=jmVu^HXzF@Lmw@()S?JO;IUv_n)={iD+r{g^`(iTsEJMW<>92Ut` zw0)tp)#GwH_lj+?jt?WqW-=|yk~2nlq>$E8yxGZs82 zBDu0hwW8iEpi?zvo>Q#MI*>S*)jCIgn{X&1i@`dEf+7C>KsGdt+Vh3#$0mix?cj5I zaNrZ9J{j#N^wwmR_U-)p&O6)gBrr9-EB7>I6SsiN4Zz#{ zz5R}{hs4yn2YJC{=v{I9w8ya9A`(qID8fRVblYPL_HwlYeqw{Frn#JHt&olt8D`sk zw~>rY$$H`~>AY&2wrS(=m2~6wcq-LWfkbKnt%48sthhgk42r90$#J2A&jTvk7j#LDzrEGU+e0U13mbuX+IAEZ!?xr| z-&In#ckv`(k}&2YUQV-z>C{=>8_|H0yx$lgh*NCx;{fqeZHWHmGdLz(zzU@l zziLxqD7yHo?SbunI||i$0hTk5;t*puz}gGC_Kv2V&2l_RsXIeuoDFJ_}5h z&Ap9M%pyc=mR-`yZ74~WIflx&kR>R_a)z;!9=TY)?^k-Le1hdNRtkIMXfb4o6B`XO zDyWwfdk+dMPM*OW;(E^#bPIp3f)WyiIRGm8lO&(%c?;0o?hAO{GR5jYXr@?URZgb; z6I%6d?<|gz2`QeDH8^u{%W^h33nBJRAQwNrRpGESl0CcF77ZzK)>l$QuM-~|Yr`Cd zowWlO;NYARGRT<8PFIng#v(V3L2eq2&^Q{db}(G!V6@7{ zvc&Pl3d?keLd&YvjmjN18?y;r_{4#<==rs8l^7kKLO7%Fi53;d6vRzDxDyz znX?}+7u$mml06<9k=Sj{g0CJz3*s0IZr>K1!#8mf7yLv+<~g*rVL6C@cYJ@JPj`R6 zSAObt9<%lCY&32oo93F*f@aP)H$aYo&|d7KPPDM0Ej|pnV0V|mxCQ;CZh@ZQ*4pnk zX9N6!HdwjQSf5?>Z%pTrC3mCKQ&GI}-?GwL{t64_Nwyp4=}zM3MZM_nxEju2bgY)1 zT@4y-DEN(X$WJ#nY(DTy$T>;9HEbh=OUo&xh5`+%@s6V{luB&&5ZyQ1`5^cB6O|y; zZUZs0*Hv(Bg$X7`#u!6dSX(UjstImO2^A;zn^%NecN8T36>O<29>+WK!`Y%b(n@@1BM6U)Pl%3msn$qGW%h(>Yct$zsTYMB$wM1?0}>2S0pumj!)C|5eRpOfsiyV34T zm}%cluX4NTmUf(o>%8!Y#a~4i@rP)^GjQx@;#s4|A7~6UPFINiek4zb)!U%#T#Wf# z+mUF=F$o4Rc7oS{JymD-AgY$!4m}sc-3P-%78t{%)R2MLaopD(ZN<;uvv4D_K}!ZH zJGwJEJE^qp>1)kR`sl2Z&VzlkMNh!c4Q+(e$T7>o`9OU-!EY#pp%oc|4olC{ekp?m{S?Gi7pA zmCAPJJ9wQ*FRM@HhdVSzqB;k)O{<2cBP&g_T^f`?UwWo#u)VU%g22r$>;MydOiO*m z6)Dl3gRphoP@cyoP}_1Ma0Ou@~XWC#eP~VzovPtwLAG1R08HZ^?_y zQQ&yY$Ti{teu+&40#my7MaebfacxIvC@_i1DFYaQu|~U+)V@&)BioV`aX)aOC~Q+@ zwEcd`CDxdx71R1)dHZvto|JsuBm;k&7vq(C*Sk8jbQ1}^g+zb4%3MQvf_&(KBJY+r z{X@6=ZX@Hp1H2TJKB5oFNJtyZ%$`Z+@5H1pj1aOE8p||sLX+x5PFLe@<0Q%4= zOMY(2nDm*K?lJ)Yv;=qTgnGL3)`FdT9g=UkoFhEox`MqsE7pR0^}C8ALSJ6_&o-OD zdU9@+rLtu}j!#;fRhLLXIj@lbEn=D?Km-yhBEZIzk7^gd>q)nd*rumE#QrVDff!Kp z%cHF*88LD10nyLF&Z+p-06SBW^m)>B^>nip6ry?lM(`A`cP0LoH56>aX4~H$x}U4A zDo5KE^h8vXb89F*J1y3QQbX6?%EM5jzam$~GK25=o4_L}uOclnUfrN>H+Wi|QCZlh zu*y@dH9{+~tyhIvjEXX5dPw8(`I@A}M-%t$97J-d4^Kz+r~q0t0M;!L_yLnt0ndSp zr!osFGAG1Uy{s=(0nLG7Cn7^=aqTDpY)zf+l%V=88vqc~ZjAty&sZ=GR74^Gs`0cs zRRB);+l+TulvQ>V0k)@4cgs)!Y#RWYh@t1fDv7eDLHLQi!pXIVMN>ZMHsn!O8rx6+ z*qb`uC_()-LG)Q50Bi^WBpa!;lCMMsnJx zlQRIIZYxv(M)?%3TU(|D|5uRzE)f8tdILBUG?vb3AFq5h;Ht@%vb4D13m#Re{L8nP_^S1YYTFC{ z|H6;{R6aqg19dNdsBs3PA0XeNYPuiQ+6xW=8;y~%v6vd)tHSST<%Y zp4Cb^02mrPJe}?|U7T}!8}r$}Rp$8>z&J^!0e7x+I+{G{HDkm%WVAN)EYn(L9GI+g zc;m7fOSaURm1PVb^W$V)O7j)IrE!Z5is98M+CWC{ zLsd@OSYfRsYdDu960JXKPqS9uk^FWhOsoj2OrH1NN5I{#{O+*DS zOIM@>(ZzwFNd5hUwGU51ub=an&m-3t5y0#R&a6E**w++E95QFs&X}Qln|Hsp-1M9VPWkHpiSy5 zXx2!Ot$KK`utRGIW>mezjzZ3)$n$bW9A!Q0gvf78*cVk$CXp^Rj?(OOd%Rpa-f342 zpD%97(SJO@e$Rtms2lfaME5)xU1#?`+wSOEhB09(4$92~$CighYoo}KEx%vY8xq(s zF*8lzfc+}Lnb+Fyf5pk7MMG<|j6h?Yl~xiiGR>uzAH)|>po|Zd$f zHh}43Xsr>gjN@okoLGFWkw%;mM)VkQl1gia`n_W8vNz(K1rMv#n8`_uF=!;tg$34) z(uu6kr;{*gHu$kh|5m)}=<9ZSxfrAMd_PLu9)BCdEHq;+i1M+SWDF@{$FGTp?S;+# zV*+ALrbN-6LM2ukU)9V8?smOzz2%lbFE%oc6h)v_o6r}rFEvh)Y~tx^i}gr~$Hn~! zL)w6g*Bc+TKLgs?2i}|uhJ7UKdg7%6=k|z;CnV<_i0@Lv)kkLW{wXD9^T&>h6G>369U#@pYoRMLdhk^R&#z~M5SzejCBHZ2=-7N|)6=_ckB;3b0 zF1;U^jY@n9Ei669^|Cv9uNq*Y9W^E1V>0q;;r}F@;h|;ZlzHc4t+SQKxBHvJBn!i= zOG*Z1bEOKw=4g5XyvyVWo8i~)%Fyj04t?Bu-Gp^rVZTw}YMzpnHfWZ44y$fZ9N*ui zc-t>a=u&2Y;g#X|t$L|l$u*+!cz_RBMA;K>~>5Z9sPz4+l zpM!5e|M!raZDJ~2w3P*u>S%NeT%D+?CNNn+wGA%2Ozg8@eoL(YYB6rEctv-e!B!HU zHFogi=wDY|qS|x4=VuM7<9e@jruk=+(8r&r*7Wt+(o$vPRf$-29tzKd`j^V1pv<%L ziF>=nT?YYgb$ln%7bog^{q=}$5>Tn#iCF#I7m0j=1N25f~t$- z(Z7p6@k^Oe0EJQM|KDcmZ&1luF=_5!0QMg*0CTnk5CNvZ;$Hxagp+snF9b%x%|D0v zQtYAg2q1a}G{@z?0?-7X2lHnGXa>xOO*aED2S#84hy;{}@izoOLC#MH7y+Rm<7Whn zgp`-|Hw5~>BOnSi{sw?ZP)|Ud4Cn?D>bPLYXzs-(_!}*J9RqwmK;?0<3 z-bNB*IAxoB^+r?TA(jG&mt%r(|m}8UfYS9bN1>7s~J2i<3rlJR@$0T%izB9fa zk5+6gsvjOW+6hr22*{TN*#%sEZg~{UEHu*>tmirOMR25D;aO+W9k5 zmpVVnNSpQVflMCQNDZ|F=Gb*F>soPlDde$Vhkdzj3wnp*u(aVUguXu}k|@-RJjIK6 zA*|Z%EQR|I1j;Z9%rJOA0;#Z8MgHrd#VbNfHenv_mu-#Vm-!duGH>yQe9SQWQiu1Y z?WZzhx^rguB^eokypd0Dro6h;SUDY^zsU$9LX>}`PIz*K4j5hRD~!p@Rip(d2z-F( zUrGZ6!WRULkZQ8eUHRC|(TC@63)$_=0)3wD$Fr)`ZfIN&;qQTnn+MpPyd4H1tG#D$ zlw+ULpEMaX_h<*!fxho-FrvnX(}Us2+r$}2qKzh%>OV}<6{l%fQb>AG;Mr5HBE(Y)8rN)mLQq8ara2$03X9xf(J|O`N!Wg-$;zEab}27oJjQ zu{|A8fZW7SjJW;0^6i=ukVd|et=D!ql9rvbB(KPG2MG*`B~|(dB1j?6f7d!QPFv!x ze9V3#S4^x*q(tvv0{CQ!C-5ulx@k8L#*Q0-<75#?5athrG0u`DkN6~GGKwuJMzcIhc^0G~Xs$k%I41E=5dOxAC8#oT z?4|5g#p!d6lSme`bE!TYdD=P;_S-j@ZY~l-KiOxU(EhN|q+vFOl2Q>-sQ;+}`=YL0 zsY#Z($PaC~`iX{1S{nI)8EqrMXzb|LaT3^78j-}MN`%t+k-tRjxT-g{QyHTjRwoaG zebgdgG)6JMW&X&i(r#jX0}1jpDNq-IDY{%3y~W&sjBBEa(woPKq?N+L6BmWWEfgsN zjHC9!4r~n|gRXi^rd;)~HWg@W6DwQKzrnz)2rof9^#BsC-SI@x zy86y?phYug=K?S02i(`AbhSGwN_vamM(7*lzppaA-;XrDh^M6_wQ_rXa3BG#K%sf- ztp{Ngu>$*^)`N==BZFYOmx^!J(_}fd;I1H-6n0@-fRzZpDWzZ(|72PjX!$;ZES01CZ@%8#llCNm#9iFk7s0Wc(2dv?|A0oqpImnj|V$S zOpuRMmQarGlEgo6^|wfC_({!exJWE+_|4Ah%G}=zy}^cznEYO64SQqjbTKAL^RT)46b)?@xL&{mv-w_Px~$rY%S6=QGs^K6+Xp45CS5 zU*?|%!>cxR=r-@>uwR;}n@*nZd7IJFUA!;R=K%~9s5{nFgbw&$J1_|c49?n--+AVg z-U{os%7zb|3ljlmw7OL;O{$Ao+Bsz7#K;bJlevUiT50KhJ(C1KB!;;WctnR1n*o2d zI#owZXJIThQ1pt`st#T^#py`>$VFB6OrY{2M(CQL0kvLDG&M~Ja#!!Z0IpWI(F}Yd zal{SH{XDxN9L=gYYr!7VhASGvjpM_c;qEdGWiln#ZDylO@!Bh~d0|rx*wpD+GHL1| z9F{mQ8hw<}qJJ#p*cg%O;AbDA0_q<9qz%gC1Lgp`3#Z#ToElYp#cW4v0rtYbzY-X` zp4>k51K%uEI6L5 zb<~(`3E5edwQYSSW(?pNCMG4nT6jxp?uR;8&(_*{)1ms(q44?Df}uDJvGeT&LKQ_| zZW+-!jqHLWksS~~@|0Cbev$0X=y@N~Xj=vUlacpM>rk-UN<>TOR|o%xz3dkT9Ppxs z8;yiJ(AgfG0FAI4qF2sGV)ozQTjKiQ{#|28yS#4R0KLC{9C3c&`4>ub+fp@t5Y#Kb zCQTzuMAVQ~r;3$fY#dN`^VuBwVh=wcWL{<)GEa{QSjK-!mb@t`nvu@642@S`135&o ze6K)LPolL{TV8w`&>UQokfI515fhnC_!>@sRK_|K(qRNwzAzWx*htnX1j`x{T2^sP zmo$soTV?f!>gSnnw23%UxyFLCfj+o}jd|;Z`d`}r=yOs)NDAYVBC0D1&qW)OgI3Rl-m^{8 zsu6KoMwdAytV&if!bOn;vQRg=gS}qEYg(`*F!1?%kU}D)h_a)T0Uo6?*dL)(wH{XR zGYfs6L&d4Y)dh?-bO5_Sby~sr$~AB!@UgGya{amPPRS~QbHA!5$^{m}C4jImU|FZF z67DfiF!I1k+RVjQtFbE1r|~~@Rm+iNQT4vyuZp%o^Nx-<6fn%+zl7ET1ST331XFF@ z4_t)-YpbcCJY$r%F$P2`F$PpL5F&IUyRg+i zN)~N733|p^KaQyzNm7&Awhzx5SBHV5<0+a+RAm!e+-o|6UcFK$cXvb-t9}?{$_dw7 zptAidxJW%KNUaP(F`wNnlcqv0B~-5if+B~xe9I7xxa_$0WNOd3=Jaleav8ogh?EY) z6Pea+20q_TSyG${D-d~JvY$O;$M$D0KG5A8FP}pzeGVkO+_8Cj=WO;K^=0ecP^A0K(sMUW`?PvBpvqESbq8XHe1_Z zBbI&JF?FzrSkP`oCgF?{dn_2`TRF1$?v^oaouZ#JM>ubwXVNb4`lSLaG-E6!AuEPB zhU12vh;8}6a2~tMz<|Ij?iD){KX>?zlm!W$Dm}{Dh0?%fFRb9knMw#@8%Za^(r@2c zocQvEh*aXm&7AP#fDMC3w}5;lYSikslS?=g;m({_JSJ`rM7sTfs3KuZI96j)$aYd# z&PV&nmtfMGS|Ge;2y1vXO>HOG+ng%Kntavb+pW=eh3>AqRT!WQ_canc<6Se!wrz~g zi6;UU%O!~_X(m3Lzz{i4;VEt~5j^ZrvkQ+*G0B9^Em^a9$5c-2^-ES65uDB=m6F`6 zHye{E0^(9_8(FB1STNY7Qyt{B<|kTHNB7XTBf{yR2fX@*yXPbvaSpgDkn`)qLkhn6aTy$&ApWv%jwP zs^MBlZc-AN$FvfI9M0VcmH68Mrpn}dyxZ8=ht+F=wk)rPyv37{tA>rz4yywSOtRJ+ z4Qu~w_2>9#qltk>NfKqkCb%V@2DC=)NRjDgE~78AeDFG!xjN zvR|zCTX0chZq}iM=3?RCq$7(g87Lo8TBUjXHw&VxtFd|{^=*&Zo4Qe#M~&X8>z^#6 zu+v|m3}dZC3wv{zpN?k*0}9QXnzgCm z{HkhDgWU`Dmqc~RGaA*+6+HUvX^F^St5EY!8lp(<56~YdAlmS*oAUC|)}*`A2U(HL zX)Vr=WTXf^Y2RR+Nwhr@`V^S;VI2u8`9B))Il;-@{$;^E&`#Fuj^ZCt4bC-zIj(gX z{|>xsCQkk5W+oODxxt8W0U#ot@cGD6QAi7xsM>F6CAURZVj^sJuq4+>^m{5{HWd0S zrm*C&=7zGXSe39*VN?G%%I$C|uj@%Q8PTCc4@KfW;5~q>Wi7p`7j3BVHEFH!WE?h| z1Y}FA!HspsdACr$ZYyl~H{`Emk}=h=M;0Xs91N>H)#4T$T%zlgaLB{VSr-$ZLTarn zY*0egYx2qC1)7Eep|Kx!UE&%||T1!dIdc z$owxH;b@zHRAM9h@2Oh7)Weffm%zSP+0|U3-X`JBs#}4brofwb606+QN)v{S`+a-C zve2Kt2VQf~kYAodRUmD9CC9~*a<)P!v{7XpbedWs_NhKbg(D2HvG-uz&r;jBi?hc< zb5hELUweZ>xfDQ#bK;|`w19iVt+;+VQrqix6LLw~uPN!2kTRiSb+9c07|;PA^$s+l zk4KS0KX2ardW)lrF7{}A%hhz%2olR;}xEb;HB<)W@S22oqocchz2>r}4h|EjPuP>ufg$kOueDcH)>%Swu?qMvn8+i9`x==`~Vt_WaT zO*a2nM?yp93vL|kfx>TIQ2tCB{e5pYp-p6wr7Ec6HzOev-sDZu5Z1dh#W6GOr^5e))46d7T?sn9WR>3eG5fV)&nCer#zO!?AHG5l9&6x zjHKenxZ2=v8c*Z-Y{j2)~jmAALjJy)#!&a3raN?%p^MEOgrv_nc{ zA_Y>t2|i`9l^p(sH%ZkkQDOtDKJgxIWWK2a(_$z34QSCMqDh?plAj=vt@vc}_xBQO ziX?JC4^T~ELwhIc7$k@TVMdyAUS0WxRmXI|eWd_r&)@=`^Il8n&})m_hZx#=U9D$>gMPS9QF0TC@4CAH2|i zKBS-@iYjAf+CoLE>5@cH(}W{YbiYuLfj{&s$S|ybaw$t@s;df$tmscnwh26W+O#8!!u7lYqS0+l1{5sE-3)fQ>WT zY6Zz-$9==mtx5d)Cef+0UjlcFTjxdNX@S!x@NUAU-!AM~!rbp5pAmMvoiQE9R>Z9G zyHF?tx_ybL_mMZMl_;B80;k$l_B-yQi-QZ^nVY*flQ8nBj7Y^yEU;_3(u3nN=wn) zBJ+=zZZ(RvB>q=>=H>zDSI{=Np4Y*F+P{YKuqvQu+vM&+_YdK4oh%x>-G3z})_ci@+SUPk3Kht+20JDlv-$M)zQKpD%H+pK9-j`GG zL}3e;^Vd~j>|}le;eoBy43v261zt?!WHPp)Qm|5a#bi)e7JDKES6hQ4+7qBM;X*pN zZx@SuKuGLxNAM$`oS`?ql-jwhrid;>{t7(WXBWyW(Oq#2>L zhOm6FC*MpJo3OEFx#-rAt|~ZPSk=vSASU{F4*~xXvE*4d@B6(=O^)M45)$5R1SfWQ z3=>+L{L*1-cWDUAyc0I2tQ2iB_ zBVoXwN@R!}S<`}ZzyjP%o|`DoDm9o>pAZEj7XxFdxA$M?PXM+LEw07;01 zo+>owTJu?!nSTFO7z{4tokCNG=P*gv3nzXVMA6V0WK8u9SZcXjj~16vpMC>pf#IzgJBcr7!VOB6$BKul|U6CEZ#@}z*^bGU%`_rM$kfL{Q zz+29=n(?}IXfVDMD3UFgD$$u~*tr;isj5%t3CF5&b&W=AtJ7WADOGpoa7HnPd9} z8=)V(SmK^Z6Yi7jCi+%D?VV%< zGMIZ@$BBgl9r85r9v~mmLO#44L2qs6eMFkZPDF#H#klM>v#%htUo*y``I&g4J_RnU8I4>Xe)z#0ps8Ij#&tEr*ZbQQH8y)&8KnWpkhJA{whcj_c4H&(Y+ zaSA~R59L`16o&>`Tj4mf@kfN>s!Ybz1=N?bf^rIrs*{WIycFjSy|Y8da-kjgZEa?0 zFdgC`fEZoFW{{KYNNKRuJHl^VkJXmVw)oPTH#8d>hO^NoXk+9^(CK83gj=8le*Cnw zkyBGX$>ymh8K^?zk#CGoh)1+X`%hn=JH;f*%EWZ-!~lUPl2o#AhwR_Mzj|nj_WUlf z={&$-wWAi(dDv#kV=L#}ELSCBbshp>nJnaF2q@`nYXq-mD)_7xLK?Hv8YNLXzo0Ir zFhbjy)0bd?t-^*4_130A{y7OYqSnijmXb8tNJkSkhgCp3AY*yizRcS(LDtaSAW4MN(1p`O%<;>WPgyp(|sRwe@xzK z>}C;ktJFJw(IeOrx{ zk0)eb>@_EU8LNk~XDlE;T*A#1N$G}lO5JE9-KiM=4R|SfIvz9!@e~0TWi)g?3z876 zmO8X|^5?$`cUR<+op~QtteVE$auNY0x(u>l4!kMeJ}Pw`R5QwYVVihkKk>XB+pIdv z*x7SDj2DsVkrJc}nJ*#=Imt!#CHS&+2pO9d+@=~il*!;b%*&BP1rB9?U=XxRp_UU= zL85^*_7RY)R7HhXGW3RNoZfn^bu?3Bh!LoST^cqiT57e{y2;eP7>y!BEV}fm{}NBu zxW(26%O&q=*E*2V)7$Hpx4Z2vd{;fg)(dA=yrtBty;Kd*nTO%H?eO_Yaknmdjf0@I zqhKAAco#?DIr8G@=M-SZc4TGZr6~0;c`)67)g6=y6Uqz`MI?^rp!P?X(%J9JKFQHp zq2I2Y<$paE$PPW^;N>7M z24#pHj|_B6pSLqxu8qa5tDv9P@s+5%81tZ^%VE!2J)mZGp0n z?HOyViSz^l@5;h7baBuY*_1G(RJhE16kUiqyss_FX>@x0b^Xat;8Q`V<8i_sb849+ zm+slT#U;1d!h1=cT&Pk3+h#61he%+L(-^R*E*tA=>_f&Yyj;(sI6+~NmSRat|C87wOS(ZJlWr2m-k+B%Pqg&~@uN&kVnA z=7uUi(qeB?HFaN6{kWNqzPVxTw*Y_fZwnf0H)Kf-YyXY)rP;JtiyII8=G$Ru(eJ@W zI6Og7fPe)IudMeCNsniM?x;vQus*JDKB`a(r@Z+-5oQC;H z^dSh0am&DSeg)lchB*>5+IIBJx??*9-Wj9MQP)uQc^57ehGtS&A;crfc}Q)0&90&7 z+~}h9j-dpS$l{%EN^qxEz+yY1)4AN= z3-{}*nfv190^X80h;YGu3}sAb=@@gqNF8oUfu$z(KUaRgrdZKsspEjFx8TsWrz>bqIk+ve z4-xTUy=ZYy-}#|A&bHlFDaw&llb(4FQ+ft;N2&EvPZVH5?bNh*%fpJHqS19zg9!lD z3dgRb5S5s_;-oom&Xj5NP5AWb+ehvb@J%KhK1A2pS=SukC!SlR5h}bCNb`^(Ksndq z!u9?^LQVc+k&fu>mt%(AYfI9uY&*TdO`E+RK1nUU$MXzj6nxQpic=Ugvzr$%enDX| zHM0Yc`$;kwyFklQT=N;cQX#D^*^k6`eDClzluQDw5YMJYPLa>^iAra|eQk|lwOKiFmT2BdAMvEBGr-Af1D^6Uk&(j;OYVrAP{U1yHWtz4NI_w{m(bPHNfN9C z_1lFE`;%*uZ5!CG0!nL&=~2jryG3bORfw0;Eqn6qX0+o2P#mSshLReKI+ifWYeX0qhs9i`qnlH2r>SOBE zq@DE1LUJnh90vW@p_zp5MHjy}oWQ80>K$}o9L4V8-LwcS@X{(xcPzH;mU+hDME=_*|cA^_O<7UD(j(55j1;0+Kra3(S;It?OHS;+PYNi8rS%I)&%dYk**{Ks z%xwCF44X6W`o&Qw7$^}EOo$V3OVL^78Ns%*$=+g!F%NK$=bk5@gUr1$7BX>~5_yMg z5VKW!*eLquXR|e<1UA{KaXih&%7s^MQ@EQ>PqB^mXgs?sobo z)U{dWGoht}s)Lu13#--E7FtzU+PODclY6$Ru6%by6a0OeU)W+QN$Fl3m}yu5%SkGD z0>E~@)k0Bow$+&ddT?8Ks4_|K7rjHv+2?!?^zQqiol{x z6$G403I3l_M9FE>^SvaO4XCl2712IG$H(Q5dP-gO9%;=iQAx|SMQa72*7}Ms3yMv> z6g2v<_NH6a8!K;XNZqktZDyRhWAx+HZb|5EqT@6-4y~3%7=6y8F!X#t6{2Llp`~~0 zy2&)k1cE1CPg8_QTY*Ilj#VMdId;@~m(3u8B_aBEa+!bnS6lo{|=;`}@yF8s2 ztUo~Q`HbvEZ`w=SGwVrha`$ z(^jD1WTB_i_3tf&yK(!tgvE<#b+V%E@x{RG8LGe{Y46PHmGka)BpdtHX$O1U$S~W3>yY%Gx5Yg@5HJpc&fJ7a7zqr8DYbxI z)kS0gLR}-}oFfwz9f=nLtW}>M!0mz_3^4weXxohz#NXFv_xFz>j3!@)`LP8n4)Ys8 zCz9g%bdBNGqlY`6Dz`=^_NIF()s?z3G_S}Zr9%u1qB#cgOiOjtj|E6_OfE(0XhzuGM-?tB_Q>~&`u-k#W$ASL`;K8LWOUx^JV zAW-MwX|7(69WjLm@dBaExC_vG-K2`9Z*Fx~i!PrzFN#NXoAAX}Dm1zp#jneIgz+888)nUn-{ zVBy_zsPQ>ORGO{JrqAr!wS7Z%R_|Pou8Qdwz6KWE#qdbOm?}(do~gt@$oh5gL){hK z?N{K++XlFl+%>a^m%MNodZ>X8ZEKWLF1UAbqPo%vV%QM--K+{E0}kll4?#PdX9&5~ zD1DQRYuDa_xsY1VKy1Nkl>BYVQ%{!K3gN#Y@R6?ScOBK3Q7KT9dJ7kJ(h)n96AuNZ z%HleVFC-}XXfrnY_M-le?upnp&Q$LNCG*%rbKUKEKOF9ULWSRKHvb_^CXs^z@}MV7 zCaZ#31>2e37>9Z`eYBwGYkjg(xpjU%GFDj@AoE}HUccFdz!iH#c;loq`~W?6`NdK9 z^#C;R$`w$m?DKgCCl3Y|ky^zg+dR>P>gN03ve!gB%mo&u%}7QX^{)YClLG(t<;`Vz z@I+Dy{G+5ysZVRsTj6jC8Tz;~H5wC~9EUQ4UVDs-;Vj%|hI;Hiwr6Y-l`zzG_AELn zK(cFE9;fx>WYb^Q7NQNGOhvbJX(%k#aIBt%dBQCd7;l`DVUMOmy*AHTh$xhvow#ynki{H} zLzkr<3;jSJch`i#wm-&>6xyy?P6nv=ZY&hI4<%d(I*oGw9V>^znTEkEU;o z5+zo;9ox2f#eNa)-78hunTUck6-!5$(X0bi z$Ka`*L+&bEc54kroIa^vR4$#mqAetV2(?mtu2^1DX9@pF(%k={oNUPs`P7dDjnKOg zp_xh9S|G|lk^DnvjNq!<9r*4|UGMQ&lqr4V(gHVezW@82NQS@x$k7bW) zDdw^ig(d&t&`YWv;u}$TzZpK=i+wIrj8U2CYL60YDO%$UL$>pr&sx5oh0wvU;BbD5 zX-JSgI%6KVDf-7dYfeC9b_^nEfnMxn?W}8{-1*SPsSx{1p@K66{sn?Rn#9qho=UcG z3;FfCOwGj-CijTc-GNHw??6ZtHzck(@)@k>^j*5ilk#nkpzbm&W|Lj`%;>@RXigJ^ zJ3rve3x-vFU>T54bHT-9biX_pMt%h@*@CL66RV-PqbKa48yX*M)x=GnvJ)6rG_>RX zSCDQgGeMHMkO^P-GN!#Ts?ZU+tO4e%jj$K?MPL@R8~$RmO{Z2?#5@2YMOKjv38~QD zJg8|GUQ-WjE*h+GOEm*mu^I|n&;X@{t8wvR5{&+w`i-_`k2%h26`^meIdM+P7Yvg-s}exn;^YT>QAIQWaVIiEQ5$ zV!p9@2_fUPn4nuE>)qA_-4=k7Ji29F7Lh;(e-}Z~9vHF_By;Q#EQLHc3HwMSpRT_8 z&UfF6YZ00z8Et~uZ{<_U(n^3?uqc9>jndAYg$9CWn|9P<`^Qln3_9Xk&fdpS#9UCB zsR;brU1)7zImQ$}Me}GfRf>+q`ur4d@S|E%)f1*;gJhHNr*EF3uB>0v%vO>3!Hy&~ zp&){FT+dG^rw!$MpCI=Os8x_RdA;#upfVB_+)9PdhgMNEMaI9_`5IEQc9P(epg7R- z0fj}21fHgZ7YQI)BEgzi^Q!}qoTSR_&18_Yyru14KT!`E)lP91$Ta9`E5Pd)(; z%Ta=gZJB&z2~Goq?UGhZM%Q6y1^%|2fc_E_ph#ObMK{<+^sx+Ft+oiZ0!bu8roP``u>z>0}6ykTylbZd8?v zV81uCWlv8<_c;@MKwM)+4Dn$uM5D;;{&<=9)lRuQHYCn-te-*P!4?iW7c)5VU;lpG z=cK90)S#ZGk=}u7Si8}Ev~oPMwO+?r8eY#R)Si{w*TJjVnssjh%e^Q;9cjo;P^7JM zdGBd&W#Lj#2OAdsJ{-GgN4nwqFu8eP$V3o?d!*7i69&;Q8emci1}OK7Ql>9_S4NLa zk`Yx;<}!Lhzk)lVM*G?w9_TI}eYAY(_1gC`q;=>lC1z)&pSVICAtHFsP zY6yk{ljfl4x-o~4-bf%0qIAJ9zm*0CP#RV<<6CG{Jb&=C=2;ZzHIq@y{V0Bsk+L6e z-1dc!$wvqkI9Ng!ATg%55|KgwsPoQ)P9}Gv4s-`JN?Xvgy{}dWKQ?~~<}-pv1>NDN zSO4XTMl|S!y%xAr0@H}OxNY1GDf(v2hjp}37T9eSn2*w7JC9fYD_WVx#7wNbWuiEi zN7hvBN3EGWru1?Ro~Qd*=1Af9es&o608AzR9Kg zP%WW9HCXAz$I?lu3yn&NnT1VX1{SPyHA{1HXV7^vhh3LPRoIJzuxWmtrYn%@yWF+B z;r$K|y(T?&9R{xePbNy1h?_}_1;ewe`g4`H-os~xDy9zyT9tac1CZZsvU*}_jYZknc5p`x=w=qs@=0D#|H+4&kRc^ z{q;UPzA$6tvd#*8b+v!+XPPY(cNLlQ8)ea_jS>*kRAjyK$|TVG*Md&VaNhv6JU7if z&BvoMGys0{@dl9Kug;RQ?Y@r%&a`xRr}Lv5N@4~sVZZ~)e3UfKy73%gVWObKZ07P6 zgdG5ki1QQ5W^l+%C$M}t=7`N)%U$L}U3QzXK0+9ULVc-Rw0;n6lJM`}H^#8%Dj*)b zLGqD;O>Ljt8a!MZwFLmY7hM|%T1?X!^2e;t@~xvvNYG4y&0DE+{5#rJjn?YNU;|6K_9g$;Lz|Ras!fd?*Nu;7?OKZMs|KgWUJ91Yk^UGarz_-e3bN$~gu$4Z0u2GcxQM1_8ac5}GLH1<^H5b!?VJj*^TzXa9h6;mw3)Bo(LMISfacC-vB{_x%Cou3JcU)u_eo*t(wC5!qv5>i z<>}DCE&<94NmDe6kH;9is8t=$^}mnKD$CrR-^iz?j{%U;`7me+g2a3;a(I(o*|S`o zrB3v=|ZwI*7V4uZhNKrao@#4XV{m=s4ePGce-Ch}xTn82S`8a5Nl)&uh1>(P>3q7nj{r&6O&E>E)_WgK9DY{D=)*^)VTg!)o zvWv;Fb#9df0uBd+L3}N~Vb9p^Rj45oWJ|C(`NwMcTQNmo`BJ zH__9Ff<%c0zu)oi$h^#l(BDJh(PT$(sY$?=dS7nSrlwcj^0Y6IFdd*pO{{7X6 zFw7T2Tr1Aya@bS4x&o}q*u_$%vdpGAO|D{E{`r&IFg|F07y@s9V8|`@hEx_F8jbfWX2x0i3%r)^>y(#Q2TC3cg;5zT#t-JiACX{_IpBNh!Fbamv|VV-=} zNW?}I%rZe!wJxFd<1YSh?r&2q+uQE;+`H}bmvP*#BBH{CR=lHscgcQR_qVW*Scd>N zg`G!_w~%gYce@Wkq`YGYMNei>N7#Mt#PzIQ9&Ek>Z zlWtupw|1JC@f;s#A*=2$$tUD5adwOmdoKDl?G5iX?koPd9Tr+{=f?g8N6zV{=YgGZ zCpX(zn8!PPfu7xkm5l#>sa}6}n@tk-g=6IzEpr~|%bDPggC6(v{pR5GsFhPP2 z#$i5&nzPQ?g}Y$z+z2vasiV-K`4Umm*VKQea@vyg6e(7(v%#Bb2FA}mp$v>jOn$;% z6t?HcX^20qNl+Pnetz=g&D_wOK4Zm!sn%Qq+_od$nbZP;L_aSddA#c5Pbz^z#C`V~ ze(p)&Jv^Hey|0wUkLMo*#hj8XrC-P26ePUA!_lRisiWUolczC-X=hZu_wY)qg(XyV@h>|{}u=2b4l*HTee^S#TRm|U%A%EXcoC= z+y$^-;Tp5A#mPe+F&QT#p&l=i7TjE$IkQb2#x-~r=KQ1KOhQVb^(gUP`)8si?VTIn z$tfcqbeQ00Gp={N0L;+YX;^>8Bg(BN{Oy}OEZf=R&Gqr`;EU1HrRJ8a`$qd>Lo_v| z3pZ~*g(NQ8_ed4$DA*?U!ZP$iq*!dCOf) zB$u0+xkKkLcJ1O@X#e7njEel;R^3$1wYi6{&H265{b~Cid{mw7C0e%rwRi35?)HuD zd{EuA_3hcgzl&{COq7%`lk53;>BN@|4EJy8?fkiaIKU*&JI1$hZPI*ykCELIOO{Lz+HAC*VoS2x{0~XwYEJgeztw%nQalf`U6}b&DZrg#Fye% zfnN*%+w^^6yW6w2gFBD*ei2?WyL$$!5gwYE>EYrhn##FoXQDL!mYva5V3y}Qa~`^E z!eQcO&^1b)v=E}mK`4N5y?frt+L7me5GEL7SLT;**I$I9dD2eEiX5gg8db(vKs@9S zXnF``!aXRvuphh6MQ5f=mdLKY{di1pRDEW0jqA;D@V!4g35!DQU4nD^d7mY?Axl`6 zmMAaJwCpmos)JgzeSJNWb*0?&$3BC_V#TNQp4GP$jri4c<;{ej!D)|@d*d?cb|y81 zok8X`Y6Am^2{mKn=H&$@xf_~yhbj^1y-<6;l;VyDEc2G8=~{w_*>>y^mcZlt%fj{T zO}EWl`?iMF$32kFRzAW212}lEak1LG*GFh-7vX`eh*8(n*<_eJh)FMnb7nHOpj4~d zEW`D!OqY=t4(@1`;OF&oFm(HSv$I|CnY1tc(XP^7D~na(+Axt@#{5@W%rNndC2z>| zD;>y>4`=qLx+uZ#Sdj=n#9Y!wcsT1X$gDowH}U1H|G%l>1$Ry2T1Fq&UpIc9^4Qvk z39y?FuCby+n%uVI^2q;67{@0(4V}FuH3^GLlAp;3jE)SeQglXWN^YkB>Lc*U{|j3m zm7JAe+xz))EM3A0n{*N*7mTb1uQeI8>3rD-lKq(lvNw4+z5h{CQw@X}o}0u0KZ+C8 z45O~$a_HyX0x~kk$@H5^#mTkt6Auk_T?^kC*_hgXw6i?j`JzmMPHn8r>SQ@7HqCa# z2VbXw%}QrwTx3<1Orr0eZLB%Iz~fm=2CWC&Yh%+X+5+qFCKj*l^a4Fbi%c%gA*N86 zNgpC2q+7hFrgRiyDZQ%~0;-rhR8)rghGT-ru3&Jo>{?KYMOLc(lD?c`X=55+rMA$e3vS_&g%-d zKHn8Wx+D)_-N|(it2Sh58XJC@cB;2cOVlwgT)0q0VF7aTxTg|c=FH?M=Qi^(D4Z+> zUGek!>JhISd6G`CL}lJ5dBj3*9;BH&QU|z)_VTeU1HrChRpoC)tlGL`Oov-r6)Sl6M%u@^=^9A zIHS?Cw7VjpsyogpO=lX(l{U(Rn8E~7H4*@GausV==}|~`2Gb>5We+rsaia#QQhc0> zgfJ=hS-s8Tv+gPSi8e?P==vIg;HO@&u6qfP^t_*(WoB_JInykGq3qy$@3|@U{!UCOfsyyavFe2!6k>2 zubm_97G%}gDpq1$7)Z*Zh8MdP-(jmNG1>H^xv}aF zZTq5L7f}wpf(<90T=g()s*fLw-`&y1THUTJe@BdJ@V+h^9Sx+=R!l@3sOmSUn6WfJ`{Tz^4m-wQVA09Pc{4uvbF zMYw(v%(R-b91^(w7cwPw8m(7D@987TMFY=GMK-|4+~Mu#5TQFLx{4O_?WzLv*Mdu0 z^~6yEa_oxaH}T*_VN8e2xS(x#;D^MO$l0(YvlMSlM^pL7 zJ_#2CXb(drNP{q7Nd<=1wK!oB6|7D2nQ+G0xp@D+O{pD>#PQ@_%A#1Nd$klGN1*&U zFv)}2bILPSYKNJ71!AjYuQZPfp%T8QQRuUQ0R>CjGZ}>2f`mZPc#Az5O1d~O03aPT zILejLIY&m25Ij>vDEnAvPC$d$|Ef|bF_9fipMk`pkai33E96K)+o-${(G_UoeJl#i zL=;F{_s{c$5WD2=H0XBFll2N~jjZMIh9gqr+fab3a%^%0>uVNiybfyYhd>)u`R zxU4qa264iez|x?OFr>b$Ac=KjZta(^A=;QwC()66Y`S}LE3Sf1w=J6urC>ByHQ_S=^czWAQ zsJR1(mUklTp|LYKGFY&+hxXiih8ARHR^td~8A4`$$pz6y84GhWemTyA7fNXk8%_T# z37)t#s-yZ+ym&U)=FKo~N!U0YzbqzP1aX2bjs=hQk@Uowre0118^fO0yr9G zhSZV1?568@b-#jZf2+o(w*ppU2B}0);2Ac46`*3cF<3u#^){iwt(M#qkT^x$ID7yF z+7HNR71=5>zb=pkTzL!tduxvsMj>Dn5(FoHdsrjX>({k3xn)rKB>wNGQoy+U%>gVW zI~w@}{ua;$3xJ{G1XyKwbHAnp{upg}oc=Vfqv>DOE)gMRBV!M==S?fl}m`5;=C^tVe0pYZ{iT-(+LT?01~_*F|j7YVjz-E+{br=89YPcoFg$YCj6sW zB_V}-8ytyFQMi#)elcaj8T9_)+mcKPG4-bNl5;@I4a{vX-cUX9qM}e6YmH`omeUJk zmJ2c11ml-$^fpHxjSrX$6{mR2#Wmuv&5H zv9f2dlzO*5YK~tmF>J!6!8(lu74Y#}hO7M_kZtXlsuZ4_?N8FEIQpLk+OR|3DFfvh z%_gM(LD=+K^qp~Ku(l(7$kVqoy>0reKo}_qXd-?@@i_i#12)Z?{gSi7v;~)#JUyG! zq!X|a);>X2UD?uzqyMVtzd-c9qbYO`OG8#NKW^i;-#SFlggtXTYTS%OR?M0Wztw|E z{=A$-W+uyJ7sy4}HQ10Sfuusnr(@@I2Z2AQK__56EFBA{yBy8G_XM|o+iwlU2$gJU zCcx%BjYM9|ijRnOSa@-n^KM$tlk^||6S1Bng!nv8X;7?|^ndlB#nNcW8FN(#@JMCE zE%*qT1q@3^T@2N@7o_#h|11!=P`*fs>IzxWg;#SKd;->=M?pD<^#~ZcWq+Nqg zi4sI41Av#~TK%V<3nnePg%cMaxb0;z;6DUhu&I(hg3t~I4Huc%|BsLr?#kkI7GVj3 z{a>5wHD*D56pd#JaTB4@D|)?_MUH6HiShCy|4$&6@oeZ1b_oX= zw>tapLp}>pcrygKgcH{05V>H&u3^d%I6X`^=n{uQV%GHetxU%gt0{46jtfaxorYq7 z4TuqJ)&S)vZCaWs!eMdi5B=64hE%Qc!#fXKfXawna1b)Th}cER(pQke6V|d@b%zn_ ziOVm;pMFeU3Q1gC^9l~a)~-s6=@(ZtA`{lO`~4$`4agTh?aP!aql6`_7Vjx)+>9h? zoiDXIAH^gJZ=%G8QEShcgGR8}h%K?_@k#4tMn~HY3ipW-l`N#MUg9X;%{Z}&QKQGm z1S9h<7@m?W^$W7fw%OQJ;XGu>1 z@F57vRPl)q!vY{hcmhTu65+&4xK7ae_WE&JCsSs+x)jlj;sZ7y&=JS%J3ubJl=8E2 zho>o}q>EiZpHE#I4-d=s^769tWyKcB=-7VaJ6tYod5RuHfjGk2g^oR?9c9*JlW%qFYA@d;QsPRESc*#>zH8dyF0nvv0hvr%HjcE@ zlFt|CD-rM}sjc)CL>=_a|+<^SbA)P)G5L}uOEUx5CH%mC^KOu+;gzKQK0 z_p!(fDF`iZ0^}f;6bn$W$-_{VU4A@-r{xV8ETiTpt(prVUZh#)1GZt9l~Ln!K zPmJ?kQc0I@<_u3~bXeh!hee7;unU61z>)%fRveJF@h$n0zYa~(Pj3t)R>in`J}i21?g!*6D$vpcE?fFOddMvbalHM=8v%w3&4;j$fqEct zV8>ZU_E~H9RQ?jHF>F)tg6MIyp>U;!Ci|T9kel}*?*dKG;%LV+d9AQxBv(uMqXavk zBo@MwxtDo?KB=CCmlkKf=E*;`Wi zm|epT^BxDYaSNcfMe6Z4yl9wP|A){NL^P7-*BN8_P0<{dE7UAKLF%|*a5PmcIO;eN0ZBsMUii>aVwrGxRp2${}H56ozz z7}Me;w{XKM&YFnjORTj^#lAxjMEuMSu!~pmU}pqfv*&s(8k?2MjGQemX?%|riH*J= ziSA8&~q2Gi7tknwQNkncKSavEO@tiiD}m(Sbtyq65l)x_@??yesY#!E!UT#mEh zhRCLa!;CZmrfcs0k09#{xuI_)<-MUFR-ZJJFuam5t|qBKj|OM7tHF2;z3KbjqxdfG z6TA6}g~5f=dREyp(3PZ3XQ`n$ef>J38yW1K?eojO{QSLZm<5H#b;U*`1@J@VV0NIJ z1cs3aQnfN1V)Oet>_m#cleGL$g6`{Ec9N!~cnlXe&Qd!0dS`KHGy}tb6hEADG2Usd z`s50(yzR;Bt0G(3V~!tr(8hlFa@6*_<_XAGonKvq&nqT8mrK}tvw2Ya`*P`<)L}bS zOS?0#3+cQ4@}xRpjA#6je2+xMyT9u*^-omwyf!J$h=kyB{ z6|wMEL295jvttnF1@{Nei#8+%Qli2~3LhTmhew$pQ7D@Y)JX|1%$<+&c0!Vbz}-u|rS;NaII@M>j2f_)BE@*KiRV_Yq45VJ z1v)ihFm!!?{k#%V1%>;d$CaB#Lt2|UC(H29(MMS6Xd4t^FSS0byKpa~kNWbmM`y?` z(7vfMEOc!zA==HA=gaEv*R$?FJw!Z3sXkw3jUlKW>dhKHcQ1wH$OfK$OxTT6+lWkO zbz%oQy*02mO3K{G`7@EZwh+p}rQxL2w!*h2>J7>i=reZ*X{AwL^9$hMjX;pOv=K0! z$E&@Dt4QGB%!8IRLs2&g_2HIYa}B&QfkobP8_8{y2ldAHC8FcXlC<5F+`2GjG2%$l z>*-0G6&38Q+k$O1hltNn7B)wtp(IKwUPu8S?6$o^043P;uA0#=m0NsCM0zi2d)EBt zZ&19U!b@7!@1`Cq8zp3h=2EhI9$4yitf?! zYGRZFl6VZ~3{fT4^oI=e>A#@~slvz!ts-1f@J;gV zK3mfMqJ4&s(9Mev=<090t;5a{;mLkitkKqWfO(Quq~B_T@af})@W!7q_Hki@Rl}## z`%eD3s`6(8q=vV&qZ4!vK;7j6M4ax@_zgqy4Wb_-P0nfCY=Lpf6IXO2aQl8wTvXkP zMJ?s?jo=$X>*Vd^JXV`1@n?v|0U%2Wh=TE^Odl{*v>OsgJ1?+eFX$hi4-nXP8{K89 z3FjG@lqRx1VyS-!{1h!}Obp@xqb9FM$L==)pi-^Vi-8{s(&!HLW)r#JK|b1s^*QsCpb~L;4PFGUFAC zgF=djLc0dESlE1ZF0;8rKu5FB{z3F0RwVjWpbi9Q@gfxJiOmZU3u9t#8$OpQypvjA z?A=LLe1t?>t?TQBz>Zbk{Z}vd%DN zvTS>*#%I~xtkP;7qqM2X5i`7cy~ZgiLcK}m@VzN+x{n} zOCcQ62)S7n3+DNO$4_2=MqR-PZ6x5?v`#Wqkxyv}j;4(B4E!kfdAFW?`vipKWIXp5 zv+Un~M;zFPz!Xv`qlpBS-k(0m*PO{PxUMXcHDTFQ`f1M^6`$P5Wt5FIDZ^0pe>??w8uiHA5T}#Cc{&b-W$2ROKV48{ zAHL4G`IXt65XC-h-`hq6wTYTTI@s5|zU7=;H3dnTjaPn*kaKIyDF zAPmrP(k*_`v(a{3;-@mFAtk>OLYseq^Z-3Y%=ZAIwA{mw#_*ys(5tH-e6&2)m^5i% zPCU!#r2_oXDWd?4w&pzlS}5{#o;;#fBpcMaQq`w-UJRQkb zg>}hsL7Ta!=W-No(55N-69a=v*~PWIehfz9HKJiy06m*ppj_3yvi}#B%FBKhAPufk z|5umjy!mO7Vi9<6W#TGu?p*G{fRcHmpA#K)9zv*6<^u|JpD>jz?6hJe*_x;?CK{+k z(Y}ZS3o4smy5x_HHyQoac%)0`deT+2tV(#*$#;Ww3-*GPH-Vhqiy9V`Wg`VZX*I?u{atkl~Fjf(FeP!OjO)AE8xAUO?IJ%9#AqF|TOx!LjjI|ibzWTWU1U2A2}MpcF8 z(b&~#!i5*joo^dYR1XNFJwKY_-t?7q{a1Bgv7Z@p|J2EDKP0eTPQN-NOmdvxZttQk zKxqFTm24Zk_{-)ta(%xFl4_Clp-4h479m>1AU+koOkBe5w>tNNt>NJMCq1YN02>OMPTkx;P{t z6{~TTP~(*nm`I518dkOI>f4wiMxZIdgMjQFH-qp=pQ-2p>?=Eg;A0u^nDmU%0-^9WE^2b%dA_V|~Z z4C~^Z+<9pCZ_vkk%qms%sTIC{t;4boYAJ522r;2BcPRq|n!zMSYeuyj4hsG2MO;>8 z0u@#tG<&K0ys+Ztyi8(`h@-rDc^fVSp1LVKf6L#hl_t=QfyG{6FevU9A%e!nDLrGr zadEPPwsN5@EaOtMWOK?wujKR8U-|x$ci}MQlw=S?^^M(`z$97TRW@;{Hihri;$Do?by!0jB0x2tB`8_5V!n^DZhYnZb2|{lJ3QJ3nLKk|Jj?nI~r z323N#j8OC9R`l{x^b%yTYM}khH1Q#5=~fsz6lkf%jf6kxXE6TS+mkLG`W2e_)!^`b z_?4c?ReA=YXKh!ViR~4fSyiv#RzD|WMOZN`>-R5#3hc-bN z=3H&T;xO4yT-f!Eu2k`%1$L&%4j%FROQhVbIVILL})~6mo`W&wJ>`HK3*N zu?-D^UfA6vJT^eSx{kB2$9-`bYhQ!<lXNB!e*Z)~MlSgJ4hx7T zY#H5w3zG2VBl8|8;){@w3ju@V8vieZl9&U7I{;UhRs;vA&xkQx^lBIF0?j373ux|; zKJOb#|J$iQ^Jcw63p{swbm^f|gMEAr<@F=9X&vY8+}%PhDf2jLG99Fh($s3B?!$k_ zMzu6lN7aoV26)r;nMKWRaaR@qcne1FP0U%h&oXLu&(gy}HSH6%3Nb+cfFu??00cZs zTWf#Z0ZiR67>%TIwe12KsIKR%&Q8m3IY|09WVmD--JD+@w$%6P_LrCz4>e zJCbtC#DK@jHC>U9DBK$tt;PkD@}Dqrm?^(B?A*HE@{_-h=9VB#^wWS_4bUWg5+ZCi zU8KHkxn4tMr0Z4bNr|Xuu33<^tHP3_@dEN=k5$PsR0&N0uH{yDU4M_^uBcs5saiV_ zRY3{n25s+<;5m6iK^3#YNjdF$g}UJSB2e>{d^=OD+tIlHIM7rDV07nYfkydm&wYon z0Jd19msH-d^X6m-^?}^j)pFjxW&|XyE6jXrW$F@*bO6!7T7syBME!|ZJrZ<92^>s= zHS?@j1L+AlwVGXpT0CH(%F%2!2m&tZ#T~;6=S1UDRQ267XUXmG9X*ODv~Gqb#E_xw z1I4)ukDbF~f}uoJIAfHpT-r^0RF0&;l$W-UbihP)DOj zO_es;IoZ?R@N)C;mfy(kT+mtaLKsJI;zL3Dw#N0>os9aPfZtzVWtVN-2L}MpNG&{I zz=&oCue|0Mkf$7P3Qg|t7!pHF9JTPH3|0QL>}jXt{ysRwtu6p|tAU_H&{GeiS6Kny zjDjRQ$(Zkgs|aUXXDB2C|IC7B_O7Vxziaq#hRp&2VRD%#Xid4Vo3IAi)fxNVOlV-h z8S;WNRq}_n4MwclrLpu3tx=5D#r_Luh+*twpL@~rFqp=OwF4J?20JZioAvhi(EDM1 zfUY+FT%%s}wg*H0Lq8L1^(V7&A zqPhrH=Jea-OJ+`P6Ie!V%X6~whCeMdCT+4C7ct`U(Gwf8`t)LdOS)G4AnxZ1$hfqv z@6Rr6*WMcs&r9)mf-nB5HMfwA_P^fl4_+Ow=VHFZ<)48hj;ORK*B=PbPeE%)ax#yh z+xxT zJ!&YA%mL5wJi_jeAa4IibP|Uxobjr1s#Dx~(vcv4|06(V4~n@S=SZnj4(9DI!eRy~ z`6ZfMT4pOypP}-sb!l(lJ#*osUIP|;9{K!4YB$3-UhJ*nJltSWCf@+_XGu=zTS?2R zU8G`3j+l19C|F^_M|TGwK@_Gj6L#z@#Y`75#P1NNYLwEq)p~>D?+FEr>++$%+-9|F ze6RunM*tq$I{lw7q7wWk~4n*!zbpj~)4A7)zIacpUVcgSd~ zwld-}qC*Slh3x!Z*jr?=T=q+pSynIiBN}i2{10XCRuLZD@7_@B#YK*nE|O#~4He76 z)p%xSEdV+JDsV_C>w4`<3V&RU<=5~UL>4Ou&*np~_^z`OT|L^in)rjwtw5|tdpX_%z}~avCpV=`nNm2^Ha+*YlJsD#O_1fp^Z38LysQw z;+1Ju?bH@sOQhD~4T!ECCe-$Nby@yi=`l|wvilUscAO$xYpPdvLi;FUvZX0#h%AT8db6(+z#Z!hL$*VpUvL&$1M61v%&h0cYT}O!5NM zA1=7tg|A62~-wYFr4qPrX%kVjL?XMK?QKW z=@_W{lR;h;;w7P6nI%!YOUhKJi+zom+G$lD!8*p>7v)^eAOZ2MQ%If$ggMDA!Y;itMb>_OhcuD3Eb{0*z3~A) zrd7zVF0v>a4?r)#v+L-on#bjNrd;`w_@%A1fD{xmlH5V=N zH~|{fQrKX1zK~c0i6sWO`~%Bl&TjQa_qqiU>xKGr_$iw}1ktnq?9ixxL1B=~wS6X0 z_P3VBF9n5=vF3UN0SL;i(MjTsM@!Bt50vPSs!)Oz+rS9pz!xp9(@+bA`!aR~M=}#v z&17#d039yw>-#!gWw4G;Wz^1PxgU&mHmnltOq5L_G@Z%9oP0cdNQFFf+KmVJ5g@l; zy9#_QRIxyq=lwdMmCyJ|ad&)-X4Y)YWUhn3LvjnGo0U$U88nl!F~pdCbtHvxIXjF^ zI>+Yn@&In7f5{m{`cZAL`QeVM>A8dBqv{OzMUjmknpi9H(dgAZtMZ;kU#QZ^R zWqMuGO~U}-wEDqb$8Qg}lC6Cuv2fsujV;>#yaLw?GUcOh@|AkAB214b;w7fS?_vS=Fa2sO*Mo%C-+}b*@r#Cj8+Dt* zGlt5t8kesbDwN@vIjgH2B2{r8@ZSr{kEWnbZvp!<8CzA>{)UDh`lp`so%>Q_(rS+l zk=rWQzsV_%qt;?HN#Q_mWvp+tGQI&h#{>DJus{%VIHFK@gZ#AddR{K4G82a)5&m&M z;sn){DMKN@G&PFIk+nZ-CMA!|RJ?rk#}RjA-0B^Y(Y*wKY&nr0AwTPE&5G^$$_U)z z&)>kpcq$LBb |4!62`n>p^%56KDR`#+MB=*bjsC2ITC{x`ft2XN>46(>R#QdusB zG|@|l3^HqA>r=eTNY^x2?e*%B(dP}M4!`MT`D@5`=u?UgRVC7&f-)P$c$J4yGH zzYV*?VNO?3v|XCTA5Xp7qr3#z!@^)aYZ1&8m;Uk+7P9eG;W@m8I@eQ`6TGD z;>}C`c`01A>yQv{H3AyD=erB{yEw6&NMh6!ygj@7zU?gU(F~PSv88VWYdg#4`}s-a z?G7{G6ipmX>G|_Sl83;iZAVC?ouB{)vPH=KG27|)u3u>Gl0i#(Do}a& zYK|bN!o#C2mNC98kGvD&E6A^J>-_}vP-CB?0{QM9ZK+vOP;Y#}OBoajIyzlzF_N}W83;w6A*BIq;FYQRIss0~E5(T+ zzZM=@5_FSKDudd*e#kg{G=Wu$lloqLVHhNA-_2FfrWC%3Pdq*NFIYLw$4NuFmQ}j6 zp+2pLVaq!p-Wj1M_`k?tWVD#4NCRGoG>Q4x=tkP(Bi_FAL}%is+FzzY85NFauoXG@ z))iSnQz56>&2^{w7!%lCOW|poN*Uk5(&g;er^_yH_u7y}%O=8^rc(imVYp4l1r)+H zdn0L?ii*R30&8?dYC%y(is^Vn;Eu0PNV zH6LQj5z?3uZnOj=cF5mkPX{D#9>`H2fZc61C79&>B6GcDmz{QSrhK_KvTXCvEKQd9 z?H$sMA8vx&wV)SA95FFItiXlWZ+>e^HYhra<{jIAy^zf@Hd9K6|0+k1)rE>A?mOi zku@8;f!X-g&W~MonNbH@5odY-D+9n&UmlaeYk5&<*@KFANs+Hieh_Xz>3vVmA9-wH z$NU+%(AEMsyaCsVp+&llS^No~^X=~E&#$Z}RXyBK-Fd@)$MG^`NP(6HU9PAPOHZKl zqe;6B%4(2H=XSYYJQ!9+K&be4gI<8~*YKXJ7;RN@RKHO@T!5H>2r~xP64({!c1eRe zyq>&LI7nX%i~MeAouAce;gNS4eZ?x+QjJNXdKKs#U75f@50FPw_E41yhGt(BjZ(W3}8c zT(duCzD+=NW6fMpVk{mBSRw3GKpSMkh?>}xm1-l)n6)6bS$qRzg;DuoR3vOF0(s@& zEzqeQGlWk$`zjxt$10%b0Dt_z%m&So2_ud-Q6svVUakH(qutL=|9f)(JLw*d>F%DN z0gGLXBBwq|HCo$66I&eEgnC^#M+qUCTvEV@GL}@G@`keiq^Tr%@(bN9wK1@jzRfk6 zt-wY|mrPS75M3Nwl+8f9(Z_4GUn2@?+PHY_KJu_V=-()K6D~qwDN|o@REJ{v#OEoZ zC=s|TFDTZnYQ~UkUmrR-6$8T4)I+^D^Py?5F+QThJ#LIat4R{6+;lX8n#@YTu*TiY zCr@BMA+UZC0>_H?;m7v>7kB`N|9!EPJIE46N+9!MfxKB7xxU@}#lBp2aq=Xdl!RW2 zC4>ZiTufQ-z-m9LQ;aT5w6)u|ZQHhO+gNSewr!hl+qUi1=4#tM-`;=De{)V{$ml<**q?bFo?J13zN?G1Sd-4>P&Gu^vg*p4u_QuC?nswP!{ohr zGPE!>DljHA4QOR-0}@stgGx@8|100upa~n*RANKa}9d%rc zC9f1p&Z%7|wL<_1kpCI0V}lPl=^BJbAZ5HG2Qn*^ofnWp5meaNQj%Wc6c3NCwPf)$ z2xjR_(P(A{?Zh_Q@d zIPHeBeGM3b(E;S6V3u-@fPHx;97bq6%k-BX@gl`UQ~9C&^o47(BFsHy+lpn(*b;{P z;y=P~Q53LvfW#2$zn{gM%+7cq`LW3Jpc!mArY+vW6;Nrn*gA*GK^d-Y?IiV@l8lP+ zhEf@!UF0~@HGi7!axs_Q0STfHQxpcN3N4zLzy7YPdBmrnh#J2tavgOr2W{dfkj>9j*tzFj!ZdMBwfHo=m_vN(lurI1|uR6J9%pn+sS^fZ|02s)OL8^~3tuC-r>)-nt-&8O< z__QSkrJOSYs!9T#G1S0ML2Gb_SO}e+z^yc(#GLh%3YWfGrfQn_S{dMI6GL_FDwpDJ z?t@)bfo=#xUFo90)ox^JWd>@LQUKJ_wMI?uD_K?g6UyfcJXzW1>ei^u&CvKArZBaV zB0aWNsZI?gng*%Fs&fKpgqN3ig}Qjgk@)+sBWwTCbQbHlray|F5I( zi#6|huE${_Rba)0p#i?Wo;2Z}!8cV<%l{T%j4o?#L?mR zS;q5cO^K!;fox&ki^&EgD>3+8c40d1xxV&uAbZ1-j7(N{I_)!h|G#%YCgBq~7#`N}FbuQVx=}cIX8cEntZz$ilGtq;x zmqg3ZJ{Og}DQrPLrY(vIK&RQL8l;t|4eM~OXZ4YWCfWzJ)9;+7*9*WRFZKE6!qc&fw@SRxHzInDzz7?%2r~Qd|MnQ$UuPCEr z_RY#x#(`knFk`|tB8tzBddMGI(#q7%5fdKWbQh z#oe5i_qP3M;opl?Bdiud#b?}vYDFj;Fh}kMLpUaTJEd7%B_939^X7vglymcZ+r19^ zvQ-Zbmj3Q`$pv!+d*fKI_EEPM;he35bE+HrZcATqdFo65e%ZRWTVrpGf!`LMTrOGq zhRtmIQI{&l-&AH#`-}Q7AFy;gVm#w3zI7+@F4nsdr!Hw~(<$By9B$0RJ{`Fgng3pIa4M4YU9u2paCYYaoLuSQFxM9Rnr)_H7 zBwc5L3rQr+;~V!<4zg3=O4u9BT7el=jg`t&_lfray17M?%F|JQ2c`C~*Bj2>7xz5Qo3%mlV=(087+O$RIZX=C>5 zG8x@wal_eKt`$ssr+`|y5G_9xM0=;sdhbf-k?P~~h>C8KW5s#m|?r-lJP-+KYyhycI~ zcE)@-dbw84%#`q1ZftL!sDe|GhiS{{l2&sa;uz|wzTtu~h^;&2ghxXhZ2u=8R*KO& zoT6^rxBi(Ax~u%MN6EicVL~Z?#%lV3%GwpH)+^W*?vX!Lx8VMYIC&w{so6dDwQKm3 z5nszAzFzGLd!o-`r=<=T;!$U8Zh*>MC0n)9U?=?)Y6mX!o@@OguscHO8Zgq=!8n7b z8tC?>nh9cJl2b+*E&ZYazTNw@ogdVHe_dL^Y;#+>kBiAyh9~=s%gsDeU=hhhh#=|+VkoN z+#@_3$}YE7k42W2Rj6SjZUNqXoJujW&uOZ|^|@=vd_CR$ zYU6H;{aRNByPcEw^;7)1&-(;%C%UfNyG6G}ChZwFNG8o(w`^6zs$H!vVJnITmzzy| zUAf6tX0pk}(p6#aPQx=S*G4Q?T=OE-tDa#!zl|iG<7q(w1RwZI62|raoKTQFitVW& zg-r>Cye_5*Y|8Ew%?Gq%nYI)a)OUUuDyt0nCEpQB^;NuPx%T$Kh{n^etI)l`WG%mR zIjI!gr;qD+AEwX@BQ`_ER@N)(D<5Q~J`NjDoM=VMo9IN7Kp$n*Ppm@v8KNUlhkR5{jx-gVG$9w49)OS8fDu0*kNkgtRKm1S!1~imjyOrwg|F#nA zU%{KWARl^FMeE__~ThwR$ltTboZfuUiy(%~;tf`ebd0Bhqk z$AJkGRK-DHP*eJq%nxWdDt0l|kKyk~HQzaoYc-FkaBik~YQ%opppjbPgwh*=kn{?4 z@oc(!oaoaFc&F#t2pGXyzXV);u+v~os`bw_i`q_M zZ+S5R?z3$@An@xcOF-mGCOF^(*{d!xMmHb|XvG~^s74%!T#g64Fd>k^CcNC5f?OMa zp@HMGK3KH1j$$pB;FgCJ!^eL@3eHdSSZCwBpv3Ps$Y1q$;_RYTkQY*D3N{x$ea z1zF$)BLbmq6Ee4w(0s2?K(hgJ`^$lz0$%h1lqyZ!+&g?$`PYKiz7UzXhSJ{x0e1 z-}LL+e@vY7e&q!t<_T^$s=0etQnu#Yvf@^X`sJJqY^At0=ZkG{w%+p~KAGBc3H%#E z)~fL>snBLxHE@{OK4P{TPcmULO)GR30*`tXBoiU&D23@dnok4?H+>M`|CM~ zl7s-mpl^5X_c>W29-q^_p8f?0w69F6c$o49atMb*E=L~lYUA!`_?GjL1v(eJH&*^k z-my+jqV&PGGEU+b3TS49Ju40-bRczkPC1)ED(BxIYysyUN63)%@et?*yp&j0SYkHv(Q+$TBh-`%Cf35z2}Foki1lEM zHi|ZzDx4+P^}*<*~$ej z8y*l2S-?dICuYX20U_=fWB(Tm*N-D}Aem$Mi27x?oE-Haa^{LZ3LY?)uxY92-=-jO zen}k7TEL{$U3a@y;cb*?Mt&Yigj@(wc7Nh7O0S_*sSrWa z@{?j8r?3E^0WRi2TlyW2ssNz)Gvb0UJ;M;p!ogl>heUkhS`Fi-*`=_99wkRdE??@n z+;{;cwJsC+lfx6IC}_}EV9+xT@p0pG9noE5b4q2Sb3#FuuSWS8Sq{bN4E1#qkN5(8 z-W#8#E2Mtgu&b{VklSKw;p2#}%N2tWGm|U+kCX*A|1;^3p)cgHtM@@bHzVtYZB)H^ zlX}SiL=z+b@ocE(;~QabyRBej80}0n^)*jQR{{9Iqm$2;ptgVFt1c*)f|+rf zpMx#$vb7=i-GJ3tpTmAlw&}Z9}cAb9bgXGyx z19j*KZS>^$H7kjKtMAbLqTbrzXKS-Bxzi@oceif-q4Ix1#|Ewo0_OR7ZQM^TsI{$4 zEqW8Y08tgnz1so<0b($InIDlULEqg86c$UfiHcdaU?lAe(hqCvtdR;?y{q>=&|p*Q zS5sLu&A5^UPCdM6jA_PPfy0dLf7}XII8KSGsS+E6xT%sWgt*23Ma70@lhrwWcx`;p z8n$KL{~#oY1M7dFCHOxs7$U@kiRynr5n{qZ_5TNq5EEvq{}<=i5bVuG>d&&M-KW|- z=5G-C$e8kIMhp?UJ#4-hrBvT zy^>ZU%oX=8AF8DUf|!CK;(dlX(%<|D^ylspUZ|qj!dxn7*x4AR?>Kk!m`jp)2IH0( z(wsqz+F)K*hvKeXjbH2iXrmmqKWEeVW69bX%+99XSu^Aa4pRGEzUXhN4jfYO=Lg^~ z3aQ7@j!>A<+~Q`JQup|Ewq8s+0xD zv=SplHIARsOc?h$YVv*n9rhvQu3-*4#o5+$(VntMD8SE@I}XD73_VFXQf<&? zJ_E+#XO~$}vGd;jg*9gd((#r;XH06xGLKq1sL>q$BkoZGIc%INcP1}6e6ZyeN!}Gs zh7(`52nEovayDa2W{C7whEMaC@c`5-V;!l?D;`i5{CpA`eurBd_kFa0*C$1ZM zYh{xbN2(mASkvWsb0PfxJl6k~d0ZBek#I~7kC04wC7@m{R$mTOyc3?U!IEe2g-|my z9KR>KQkKX=NB)wsgMDE)LZB%ZY)U}OQ$V*eH9aLgP(68yjvSD7k7L2YvSDd@Gaa>kXOv-pa+m<~l-965v! z=85fIU6Nu>)*!ZG+wHY2oFs{|L@K;Ts`xy1d?VZ#Z^b`oo)@^b`WnwQ)BvUv$X=SU z);JC)YtsRPsT5Jy_?Mw5w-wASMNu<`;V=yjqqrJpy{l-T9Dn)|Y~v+~&&d`GjdR}+ zb(t!z8m+D?Z%Mpau4m-2z|Ja7S6!^@vFx0Me1tA5w_|8Y0Y>5OV~J;{ zlW#Als3FUo^RJb@DYzcMk@02HdDVTSYj}TcUpf6t595bRhaV~j%sU!djtXhxE#kMF zr)$qwITPKJJNrbm1;V-qfQ$~!dXyV!6mfXeQ?a-fDFvT}Q-;O=V(fJ3^maGhURl@Y zO<9MqW0p1|f!$8Pk#btr@Mtm0T)UqY0rV7BVJbo}TKx|EanJjgVh=Mq>TR<4AgaB% zoC=GCz1&&comMN^;zC`XHWL{?_Q>XNoSmFMd7-d(NkebnCF}Lie;{=YKK>5K_FgS- z6_u^5S8{zZKI^jg-4|hss7J(wn~04=I&O9`0!cxtmnZ#~0`fTzeRIr<`F{SEfAPSOz)n{B%q5?InvE8hYWvi18&4l-X zWL+M?{pH-$8K079e?q@cF6-4-JkC)0$O4E}to;d^8^;r>%dN+_lH^JObH-5*ug_Oe zF8D>%;^8K?agV;P;GpG4VBsL|0>VjT{dU8I{w?FvPIRIp&9 z-f|;hZGGXlf4IiupS(Wl7HF^QeB;*dmYL2Dl2(%6OcgT>rQSGlmw)a^(y0gOISKS@ z+@G`Xpwo9zi#@Fme->Rmjpv!MkvARIkb4+d4++ti0-Fb<=cGB1;lT6 z{15y^ML9t{`5KJ;4`)r>3(9GPF#w*YzeHWlekuJ+c8?35fj2B)UT`||EAc%kE~cSmYoUJg zh8-#(Mc8{@W*b}xdi8MJS9xq=hn8=!{Ii?s%)M_tmNDwvKN5)SD2&rCDynl)W0EAu zzps0OzmN035_0NaO!Y5LRGda2d&=!S!2G;S&Suqm`Skf}e4T*_{ip?n!F~v>Hb-NI zZViSNAqQ3%3*l!5-s3Y>4z63IAKE(GQQSE4z*bgY=r1#Tv`+#@kV9pB3~RzGJ#~`X zfb9{XjqQ){oPN2}ut_C>1tO;^gMs-n>bdd&QStklJrMlxvHIx+#RNnbsN($ypsWs&^7I|i;x zt*2P1)}`)0X&S-l{WBKmE4{4gz}bOW4oD8Ay#sQ_!YHxtpd7EV+AYq|+C+Wt6>YWz zz0#C$YO;q&7f@}Dg~M&nB{-{DZ=gxKWe|nc_;pZgXN`(mxj3l+tcv{}+Mo=m=u|_I zke@15@96Y4?H!pgq@S772bD6&Ro^SYE5>#vd%Uphf#9Ii-~lL1$VPd}uZca`D55bp z^ZMJaZfStzC$Y>EbPTmw2-u1dF>Q}_anbJzJ9Fuvo3||7gg3BW)iFH%G4^yr@N*Uq z=)R}$5{=#bs7>;+)%3~>X>&X8nn$_J6^ESiNL^hOcjjGk>UVDG_72R3Fim{j9zhv7 zHenKalug(hF++{SBbyP8N|n?+O(bgc`i1-co2JmX&vCA;jt2 z-NSMsh|tNxBOB z9bBM3tOJ0yKbNB^7}??vwC@&fxO7v&iRv(vHBI!Un0s#Mjicdg{?Qjzetk_6H6Y?w zew?$scvuDkFfR@~Am*b$Z=5pwQp0x3nsqCRnzVL9Mm3wY8bTD1lx0n1-#qWf>!p-e=Ba`kkCe6x4gJDg`(0uk0ljx_9n zk5Hflc~yx-m}8|Qybyb{SL44-%HAY)!r%ioPkwYQ$nboK{y9X!-wtOV_8o*5p-gBz z(9R`M94O;aFX?MMa|seV)g;vtJ63+IQsYO-91nqSV1R;W)2!285Urg%9-L~2IT9@1 zPu2d3!%?xZz zoQ-)SdsG~5#|8FrrlxVw$?_2Abh9v*fMi9P#)6ENxi#F*)WC383R?62>ofm%74AO# zQE5C$$c$*$eWu3Y4aDBPG5Hr1K}YjRBOAxqJN)yp$)_bb*N%dR-PfFdSO{Z((jB0{pQ;`GMnUX=+UG)a?Dpn zq~CPy07OHm>9ZEN~^gX7~w@%Zu4on5r%2 z3_9aD9OvanNVxO~w&zfK?@kS<30Re_+KvuG9oOjUbF-_Z(^Yv};7fTs&q5Au&CM4B+>2c` zK-y-dZSB>`>c6!hffpSO_PuC;9*$=prCAPS$7*K$FwUqzcI)4^-8(shd&hFtzkd&; z#;q`6t9&P;#|c~+%%@m1jr!wGTMdvn9O>Kgk)dSy|M3mG{BvHzvd;#$RU0ubleud4 zs;;X^)i21Se1c$PR?E+fv*<9wq%PNqN|aDM5oaa^F;c(W5ftbzF0=NZqG*|8vNwth zuth#BwVnI*QfFu)=|*PUkE~C{*GaY2J$}r#UxC)8nlEgEs9wy*05yxMSrZ%J)ImhM zl${SrZ@^lh$)(jq*t?kPYe_p^F(8_O>AtUkpP{u1YA?e2FR>*i%tsr+Rysc1Jv>ut zlR2jXJKB^hCqQwWb?!W7MZFqsrHr%E#et(MKY*8|6t^?b;PEuMs37AWDuM{d2JZ-3 z*F2OTXdRV0xulaf_B0#bxCHYS{tOpmWb5;Z|M${c3N}*&PZJkbm9b^ao%bmSamZy>cv(Ap7H5dGAj2Wh#_ z1jKi>;$4SO(&AlLSJ+(voi+RxU0!)H0Ds}$NmujlipxDH!|`26&8StMGInS`kZ}4$ zKai;L?g=RJ$bsr7#v5q(nrN0bOTiuzC6tVEZ7ah8@)NFyCi4WR$Wq?UntB79$9#Hh z)o9jFS#)rHE{gop{|sRvLd_!lB57~a(B8idx#}_&ug($6yYH4zg`y`3H&MXYrw(_F zaun0A=XIoo5h)dWqMC;GQkp*Udqxc^c|VYKASv5xUzK~_Dk3GZ4dCGd7L2?lbudbL zP8S&QMj_djy*q(;U35#iYixr|O%m_mqs-S+zkiSH-}PUOWp!p6J0cYm`}!R7t(Z^c zFIH6V)_8^U~i zEq<0Mjh=9Ll)IlAF-KpnP6StD{11U8CpMv!D>?uK(tErfBR zqRW$9N$c9C&lJFy(ft99$Ty~bY^zCmZ=%Vp5m|eV$4bLwu}6N4t^Zx-7*aH#5W>JT zW!;F-M&^M>k(nTc5e&ZTD7g+@j?SS)^xl{M_3DtHPBkpiR*ZBraDWV7GDPDUvoU=* zqGcM3FE38y$;4=U6G>gtiDxMy2@Dt)7Bk3-X+-ygo33D497_x?@Z(EDP&qZpTP$UdIdA90I zpL*_FjvPBjuWm)V{PxQbZt(4V=r~yX{lVYNn2kEbI8dC4oD$C^xjblMns?4-&<{te zy)^LdBI~~uOZeZVuSFnhc2ZVd3os?egX}9ATK^ zr#&oT#Avs;&`oy7U;2SXjHaxNDbkl)-qhdN4x>)-XTLz^Bb;XhOlAdWDdgZR^G=q` zse*LuJf2J4ep>KzUbbxk7EtiG=Hiov_|FnH2{C%ui;%J0J@=6Qof~fw+-xOFn{Ibs zJllV|GQ{5={B7edZ?K)nLmwm00H9X$$a;w92YOD1y$(Skysc0t;CA|BYZuRs8iH_{ z)WKbjvrmzoDY8Fl%#X=?W28dAX2Pr?ILjBYUhk%>>!wd`WfdZM+T$U6w=)f+kJJVG znK>;T=z0j)R=lSp`C>4JUM0f>tZJqeLB10z#N14#JK%J;6U4>FE2rH~f5*ugBRm7@ zj^KBU1Xu34TscH~;*Pcs7M_Ebl{Gq5#EPr4snpf`eWY2fy45gOQKg#n;6nal51?t>h?$_pw_rvFkDzyTRM;20ti%`KRBVt6B z#rg6x%;+Jr2NBUi+WoJZg4f^Y%@Le7*XaDbbtU9CX{=ipz!7%^y!`GH@yDSowIXku zs;`Jg(rmepVD#>Qt!)#%Wonz1oM1E+36hOg-bryu+Na0m9d3@Bgr`2FdIEl4f{}x1 zz`*>?J&;L0WhBpZXa3|RCr;$-GQ1g_)E9p5$izGN%ll4HlAZPUy$#wK7$&BU2xz?gY6ygta8hWbY-L&=$iHQYP;n|o@%fAtP{K|q92+0 zY$_>vW>tU3eYy;>2%>9`!r)LDH@gw$iHC0N#V|BWI{#cU9E$F&5r|7(Vd3YbHl3-VmBq;V*?msVsxhluRt6w~ z=;3YM^E2|H<<9;j3^X21;7U~d`*QPLrZih~JS)CD8BwtskJM#nNx;2~)4n&}`N&LP zFxF+=ox&wFk14HP#DI;W{h&M@a-O~8_!cN0bT;eVbS+)2tD+oQHOsC`xPk15kD39j1zbx0AkeOzwo3AX(6c`RKWaRt@ zpV2#CRB|x!Xv+wd;urwrcDwbuzolrhj;I*T?|c)DP34(~;b+n?y7mvzZxJQtQr(?0 z!79sFirFD^)4D%^{r(qwKF>l@W*O=xUsRD2)H{Ycto6P{~%7R+UNM-HlyIfuth|{ zwhn19Y;?ebFJ}+Is+W=0lWBzW+~hq{)%|{zWCfC{Q6S_G`Hw$Y&A72CFsQI#{QiM} zQXQ=;ciP(P@O~*q!Zia$;f7XE(Of+K*@)MD;BXR87gb-fW(uYPNNgzDlf5~v8aLYQe8EQxR#Yr zn`i7|9QUBLp}qQ)+0KQN`0ye|yFHa#6-&KFGQF!?R)7+N=FX4+O0>LdGXFUln0sDA znOc}5X}JBFM8y&Ql{GcBo*d0dVb#(-JpG#yiA781+T*?63OwH}9!aqw*8uuBLC>-s zAqp62a^1+XtHNPPvMCABOWOct(1y7hMox9GKl+e^Mw1A<1I3oCwwqV$*}?s7?_dg? z1KYmB%_i$*rxY_rC}g0VREUUJnCHUNcZO-@GCXOE`!%jdMdRk?N=j7~q94iea91Cah85!KR#zVA_Zjvc7Hv#Nh#HAIK z@qRd^iJ>8C`^myR&Eka&$tL#u(j}4|=hsJ?)IEyD_rqty>kv-*ya{xvT5+BjJNvnw zrVbl&*vG+nPgUiH>iW7x_>^&ImW3ZI2^cf99=$Rz;yoI}&;SI0B z(M=B8B2h(PyKitoF*xCPn^KAwzJv@$QAYE02GiUZrh~3VMSL?~1_7=@yBO?sx=9L` z0gJlQ!RRU%Y0V)SP4$wKf#Wj!>-Bitch=**d(xxx%d$AesqF2tNsr4;v#fIf4TcnW zrh7BDrO+*}o>gu){jy25pX~L-^qql;h}0$1pK-ctuFmD19dP21yG9Z(i9_Qtrl_KfK^u-ub~#k+;6>UF`X_ zsoGRgy7ROCXJf6VX>!ba9NRqqx8i2g9hYxsYu0pAH4Mvi0~k&L_+x)}!NRKmdAGv7B<=Utl>93CeV;DCfMNVULD(O=f90$Ra^5HxLep}FQi^D^+}L78Xp>hkQBg5nx@)UN%w7}fvS~~(C=S=G zLXO(HBk?ULZw@g%kAf{zk(E4;F_~sJ0oA-2>1LNup)g7G8n|U^>@^8>34`&!E`w;W z%kG03Kb=$#Uh#FHB{YNWwl0(mOispCz3=}OVyvDK8pU&J-qY>1UTX&#%p>tVcliUY zdDkF6Cmhfww(z z9wC18evhY`9Q)-UPxdJNf}!>FFa)@#^7Pht218AIQCTl37G0Dzlgkxi^JVeClR~SW zsCtN5#(15u%$m3U>quQ-C#hYF+35E7)b2TUyq5SQoLzd4MH_;^7)b%4O<|$c6}63Q z9Gz|~MhsKTwfC8%fpogOZ~1K$sV#~B=(1f4jIg$s|5&rhah_y48rr|T&_c&bo4Jw- z)Q`DAqSPmO8VYCpuV|PpI|CZuLt^LS4Z8aR=KJ{+t%g)PVRZB{{ZYpc_;i&9DjR3% z$Fgz)=Q)p%?e&UN-07-#cL3M{6RxqFi@wCJj3uqA_2g^OwS?-S z9-K}w7vdq;4n}5~uWf)8xtD zDG%G!OuE!e_e|Oab}LccRdkA*lnh2c?828b<|NdjK(M*k1Ds`?7Ej`4A(*r{X9G0O z%Z_H8d4wXIZe2Nb-6mLG{7e>d@lcP3(Hbg#4r<3AX!p$NS=i#J2ve}K5Tu-cVMM|p zuZb$hn6q`=_|G$-FQcNMYK`c1SFYIp)j3Nzk0QJ|*Nh*;--|E7;T{LiX%KII^85h& zbA*I(Vcvl4mM6ndq0q{-spR_)h)@$(BuZl*QMOLrkFDp~)h_>94!1sz#sQnRrk|$_ z5C2alU8cQlHGrAqW3Qlt($YmtRrB*_9&J_68 zJvj3Wz(R9jk>4@r92FZmf}Q00dzCqUZ1B6zMuxesurno4N9F|UmL7FL{q`akyVX1EMAmZF3PxmK>+Ar!adUgw}DF0vW-W0#5 zXZgOOySf?^-xK`;+v56Z+yQ9{w%Fj4es(ijC$N*3Mgp}d64NR(ocY6wvW*ut26*J> ziv^|a-lFI8$I0;0w9lvV9IyV#c3sfhN}6?<=I0^XUbe^K*`fZLS6mqneTkaa9rz6c z*Cu-oUvCXP^>V$E-JSk>_>U1ox7v*Z&a5#pV{_UWCO4!oHqbGO=)znK@H4i#WLtOj z`dHn!iZHW!i}3|(wf!jQSVh_WlKZG(Au*Dvu@}?UeSc@9F_{_Jq==eihMV&0`gAvV z35Spl41ZWV^oRWEDF^wJ#ng1&Jpm0*wmP^RN+IaYS15y&&lF zX`0gr!KjaXsls1}zhF0ZHS$I?N%4wuwvj{!RA#;s&^@@taKQF7$(H`+S&iL?Iy0q7 zpO3NgPbR?ee0R0+LPRaoGwS1~73`icYyOS#BIJyXyC&GBJkh5Sy_0$m)qrIuNkVa8 za~vOj;oAVh_4j@Vnvh3wp62UZAX>ZHfkGv*WaUD!QuAZERR&j&x+|M#$DY?j$vvMv z^}csM8Pnhq6$l#n=Ch%XGGk<6y3s3dx}{Mo^-)tv4ff6aikTw)t&o}?MBPHKEcXMD zQA+l}qGOX>jYh1?5*Q>@5f|^dy6k)b)I{5|N=0xo`UA6Ul~ugcP@T$Skt0%ZX)4*$ z+&m&1tWMjXrVq6Y+PXZ<-2}Uc`JqeN<@J`fR(uV3`gua0seM1=?m|ywGs1nkAJ9@7 z894z$xEXjL>nR#UBH%YcU1d@>TsxP$$Dpl{APXGp2#CZeRG{x1Qf27*6}SiiwUc~f zhqLtVdZY13hzG9P_SKiet93g$%;de;cOa$nY#fFHe-ivNwTknw9x8(oC#13{m1f!( z%9}r~XXN>^R9*%SzL!lr27Mb`Y~IifEj-Fmcn+&#$gV4g*qdVEQvhs2bW;g56P;_! z9OkU(`}Gu?GKpAoRb}@g65!_yIwfNc(NB~eQ`+1X73@#2iAm{`J(cbTuk{wTn&y?d zl=Y%;TO*Yh%f?zp7+5XP+`k+)?$6&PVD-yC*W&T(=de>_d#S6v$Sl)7x%9GNM;UXO z2jpy0>@29vY<}Y}#kNJoM9L(&h6qWW7{%T>iaEuX+Cc-e9Kl zK)~axFak785b;TGpOoeyfHqcR8Xa6>;K#o_O?*00T-RL=RCk%z(4p<^gUzD;Yj{{5 zL4SYXQ!DeUWpFHRh4U8sFOk;y57}1+SB2KnJKT#we2b^15?3>e4q!%}&)=eS;YG!T z0-i6ZzMC`7kFKpZAs;$^TKD4u?em&yX=t~r&}24xF7Q869Gi1zt8qJAX5}$ zv93zIcFYt4xk$Ds#nB)BD1UvLwEA##^LS(T)8xFZnC=TNu4YJ(S*XyC?yk?+?2D4L z&~+M3ohKqDpHhUW3RnY46Z()0fsw8+l3Aa67L>at6g-CU0^9T%FG`=Yz*OMAnte9U znTwD@C}UaFibnwlHMV-iDS2-CAVT)czCC1C%+rs9ASdj|LjnrT`tVa&;E_-+w{)S4XrqY~;kfok`AJ5R!HG~Ua0UZEUxt8l@l{XOK@xIJ7};&0Q@ zRcosM?h>bu=Se_J-!ilIiPBE0-po4oBH8U15oSKEdjyWm=V_68gEQ>XSJz33KBI%L zh63wD*f%=Zhjv&j@Hb5c#F$NtJo4SMy|pE`YiF%r3gF%S=_IkNy@fdkj~V|dSAi$P zyBwS)cq9vk41Cbrx7AoXnn*&9quZ|E;>x{ai(_~1oUlM0`!{1PJb|b2o{lAL7}qju zsezco=ftlv0h91MWbI@VTu$+dP128HK|7PoRG+RbPSrRO3f-c)dX5-LR)4>s2IUVA z)YVhS{^l8aJ^;I)fn)UBU$O*V{~3cfT!&Glv%cr{tH}ys6kLF6*KG8*$(r2&hblzA zrkk4Dzl4f$FqtXsUZ&5eC*NGo_VR_Q6SxyeT;{gbK6kr-*{m2pA8{t%%cMc9lS~o%}U2&(ec@n!3DI==+Pa41QKnlg9yVeS?@n$%W~&5V+}^v zkg9PZAcrb8x}x|}>4mcOKv{PSs_*aM7C*bL$)Dfb z1HWs>a{N}l)2-8pocb0+J@fhIXf=$i7dPJ0!o&ZJ7E!;+s%6JI=9LB4JaAv^O7>z4 zrB;`(J=>&+Mw19NJg#FPFeZM{62KiVEmDRDEZVsVHGqG`LV_L2kGI3YldFH^Ia7Ch z$GYC(-b;ou9SNvWgI*DAg)t-;ai72lE!hQZjm4V1crL0{&0mz1kU~Y<0N&c{ZW{8% zf+rkzzdC4JCE=gOG2qcg7is8c4Y$5v==m3J4NASU5D_VZIQ*&JRFGFJGBr&WI`0OR#&}HCk3bp~#7)ek~Xt6K%CWNots`M$I?$@#>&eqJA ze9PL9*Ae(IC&EvJY5i&uRpG zgZip%SkCrQdJ$Kf6ZmbAA0k0=FPS%tA(g?uOvG3JYjr4sQ!1&>`=e3`%acQ0+Bux= z^j{KSXq>n&;P8a>u7!0z_z%{r;vh}65H}Z;T?BVD$q+xJm{-YJaFPs#eGr|3?2fwv zx*0GlOxT2=U?{Cnr6-X*T^GTPje(026N|ICQXh4Asl2BQ7E?~<6;K}i4d$TdJL?uP zEB4kw8{Hr`Zp!vRlU#BFAeXc0VQ@O7@eIyKv1e!O)mfQcC6ojvA9Q?S!(=XBLUnl?e2g(;lLB9GLKnp+f^*YRCNvl`<|)* zMLz%k^z@ElqV=%a@XYM7ZQHhO+qP}nwr$(CvB$P;fBQM#Iq%P;chaj(yRzDqm9U4q z5b)%{>m!=nUw!qT>wPV%fp4IIvjMJpAoNF{dg;v4DVqMjyFfF!#zJSr3LikcQytT2kuT zyrEdACGv+JPjN+thwQ<9m~qM+%lAEJ8Who~A#L@6#Fc@}Y*KJ96FwInM%FsF_RYpy zmy*4`5R(ky4x0xcBwEDxG%d7<55^2hO$LoI;xlZ0lDG6lP#8CAp3aNZ39018(NmF~ zDk&<}=6fTAFvefT(kqlX`Te#%r8_?w0zL`bubF}Ca{#bRrn)zzt=eRZzMY1%`-+=B z`sn7qvhA39;u(?S01?|V{YV#@0SMnEshp~*$I1@+Z8!l{bkeexJjAw6`vv<*HtgU! z>LTlu=^TP*BNp_-;szcsj-9)B(KtSRI>Jf~qPmUSxMc5&dOpUQi(~6$J?Z{(qk6j? z1uxa-Y+6h231t*#N(ddA=Y%>atr-4T64uSMggbxQYy_Is33zKY>|C-KaO11 z3ro(txNvo+KFLEDYg6Y-60SfY>jdLE)8pX)G{zPtcq@HJMH=zSBKSt!QHx74s&BtT zRrT)N9p`IPJ~9$?_x&a9KBf;bDwC|zw2Px^t;^TZBRbAMY>*wB)GfqIXnsM#(FSUt z-cAmocCa^`5~LtpJ3ru00T!~#0}~*j!Bs#RF{9F)l6RcA{L?C<8To(YNl(}8Y+iXR^ z1Jh?8FKR3l$PPa}`!{D4ykS=qTkuXtw4kP_RAUT(mChX`Gs( zNM#x$GlBA^k-}I$NlP&kj5?+SSCriaZPfk%MkISiijGDQV-=@9_c!Ljcl|bhWB-@J zZ|x^z*=2e^lq}NF4$lk*%d1qz_$|6GCNxGQT{J=d@KWYsC8M00Woo(qltpOkn=MCe+1aPk-E+9U6iQG8 z?DdTS9%7z(kQnJPDybxE;wsVxaBcl?Sw`0umaCQw`&mi)bH5hUI2*;pF0u=z^*hUF z4+{#dO#FL#dgy71iwD_zE!PbWAYpQHrRUFY*~-Fnayu7WT$#RN6On*?t_cGXl9(%o z^Y~e@JR`Ij3l||afRF+X&xmV5#On`$vSC02Rx{04C$BY`tp>VCz^pRn=;^3@5fsTn zA9Qf^qPuDUZrnbT(ZY4@S8`o0x2^gj0PaiPtt2f5+K$`_$8VXZQY|TRGL(F?5ze^! z|= zQ4cGh<_#EE{d6*=Nj&Tgbk@H3Vl2E3^uLwtiryEjY$5xa^Po^l2X&a(V+elvE8Lf#G zcjwRBY24&?XrLyqrnLI~IYb0Z)_6Gz0u&Lv)=4sLh{Ql4J)m$LIdd_RAyh`kdAd@w zJY9AbQ>3f@ey$wFK;e=8i9g-d+7GA%>G$QWhpm9puJqm@+RuU+P+DaQCBpr@$W5RQ z>ApL>nUsG2{)xAnJSm?4>xIyzlm7-0{mQ5I`a}W%{OiqL zn7hBn@^)g&!CIH=oysFpu``$UY_O}=SD}+v#`e=%)1Onbw3wDVttq__R+P-Q%&B;Y zqgo+o1 z^XDuZia;_UL{-5GmG64Iz2r>B7VJdq>kmuhIZUK(Fai#@1iBtN@(XiBlKOBH7P65x ztj19l7vxvB-iy_(Eo4!Co$w^MFa#%D&bdW8bZnrLK{_b%dic7Dh~RSr+NjNp`Bya* zoFR|iYc>KoGkxhFcgyEO+wQUl4}OLKWP(KLsD#+4;~Q~JHqP9%RF=4OtyDX)>eF&- zn z*w9zrQ^Ac-M1%{Eh?qzJb`A4qzbl`aIBbr_-Hs=R&K|kmn{V-)gyW})GpK#8(YcIn4OMkg zMxu>D{h&pGgAlg0{181KcvO;$J4>*%nwy6LKGLS9N_ZLqcOa<~&{d(nS)lQ%#Z3ZI zu9!KMNpJ-xp$78_R@0xergk%rHATk=zX)CkBqWm`GA|f!$E`%mmKPAjI4WMI*p-%j zsKZkzkUJ+%=X6gRr(Xq3?I^~p>F_>EH;3Vd=0jY?8EmcY4}yFmmS*^&YP}DD&_OtM+kJHma*DJi{=R;Gj?4_QialKaB(`o+IH7v3kO#1qI@b?avBse` z1X>;{cAN!yH44~@5~7l{y$oyjUd+&x^7<{kBYmk+ZT&vy@<|=xHH4F!*4B6Q&&K0i zK65>B9Y7pN2P}P#aP;alX#Pl&5)?rzII}`HBNXr*O%&}(>&{B+Sp8&a{+&-Uo7zl3 z_2bgJaoavJ?#ayZ)!oQlP&n<2B}Yf+JXg{`%Sh11VYfBLYW!>*ZkorYuHV%j&w_~_W9Z$g zwyjw>4o&AhWF4&=>3=v36q~b>2RCuSKWMfiCy&t_(eXXm9rp9pzcAN7(f|4gD41iX zf7)MVrbp)hl?+6ryv4Z1!sJdjpnSn%Znj>>!A9Sb237Hv1fg+Q+CB-$EeZ{XeEI$) zfAHS%LnDr4=tbMUq3UArZ5oVuXR&-=RmUIQj^U{IIsHLI!ZjR;sf%3FSzUctS42j# zU06yuqe(r{sII3pYir4)N5BHjNPN2X+8?F|#a6K zh(h%0Yk;J?&M~sobRVuG=3GCFIBY$ZzL3NYe?P;*gw9}G{JU%?M`noYuB|KQ8*JbO z`uJOASl{qbumfbhht*lQzjy?YPblg>*0vCsofKFlC?@Ovsfat)5OU5w_WdO&NvCO?Q!t zMI7F@Ihyg|nE!+B*2&d?3k{z<2yqhKGkMu0OdY4Pz?;717gp+2G&Xd4Vp@YZVjHH_ zyzzPj)+(@LD@RK$sAC()my!g%OvyXSEvV0!qY{yoOTCDru0P4?Sd9?cS_VOajDPCi z9~xDHvm;9C-!j~`c8 z78~?2Y~S%s-)wa-2m<2!b@5WFzRCNA1HEu;;a$&^$p!UlUW0)9+FTKLHMaf8sy!$ej#HTVD zO-_;)^qZP&aa?;Hleb(x3u9lYkW6JRRvR?E@r0zl@M!dR+=?ImOKnnph&fcmQgyxV zu?i1LdXY;`1{47yhw0I#D<`ntm4D5{M!wbC?D&BU+N&nI;RNO2l?=Xsbmi`Z`}EY$b9w;ZUepv|HeM$ns2t)g74OC|FV0{e|zj zwGdVAA&B=RRR}k||H8ok8@GK@x~*sXDf=E~KbZ|C6;pW7%(B9Z+A>NYb1R`wZRrV3 z7qt2Y`^VqTb;(YL5`wo|QY6a&Itj~wp{(;DbI^8CYqW0Y`Z9Uoa!;}mBm@v9G(x7$ zdN)Llqm1bZyR3!wva!^2a{*=|%Knqkgl}P?hdFy55Wezc_%xMBgMgR8 z3HL4=iXx)eD&r3DS4Cwf zO?E9n!`c(;PJW~Bew88Ocl|?Q0`hZIYKU5-~$f1ovfFhCgl!|r;$9z6BBNw^KCM#}X7O3i>51-qZ}JH{gF-Kqx|!;@`6A`|@9wVPB3(0C$`)xF zx6_5W>Uy$Y_)eXb>Pqv>6SFp(wh6g}?m*vLON+3F$cN1W&#*A8Jb=VMS3dw36k514 z-=0<=#9HjN7;X_3VP7)RR=6)0T9HLtJS3Y!!y)RZ{@vZczLOtiyq~v}S9iA>`RKJH z69a}YOF6Z`W|E-o;7(uQY;NUG6DSNodXObChg*Awg)XM(G(=X}cWuqp3E|mm;bspQ zgGVIUBTs0KdWnkCUcyO+eu`=HmhiRMcN?7kexPe7krVnoytobDDxlz58SuTGc_Ubj z5`|*tPS~)XfehtY*tFuPq8xwvg5zygY_O6E8s1G8?hA(|W2hN90BmI}$xZomGw3nH zg}1v_Vb+Rkpc4u?UG4J|K_^@-P)VC{xys&q65>*yKLoi2d?J>jj>@_l0=GBli%nP7 zE-)1z<=KV_7_h&iisf;t#jbm`kmMAt#i}K0_40cNt2ZX8WbJ%Y|D;AqGmAH`yW59* z?Y9#cd@*pK2#b#?O-Kqsk=Ird_Wj~RgI;5fgy7By|GT}UMod$%6MYIXQgi8AXhr7I zC0kK1nC7H0vs67H!E7RAvi;CQr_7?CDW16+0$8zeR%F}fZPbtU5d#$OGNZc@!dVt z7IL$a1(Grj4CY@_W?jQWC5?z#p_-RB>!qo400oj-$#HT_$8_V33nha`h2Wl(IqMr@g{DLHwYpmtYz zJ>N!Jxovl3FJTa->>X~TE+*TC-{py+YLdzm9o5lvckd@wG$)-?gH+Av9pZVRWP*1Yt}zYMPr*rp|OI>#`kZy~P|W%gbY? z-G(8wpF~FN1|_HnVvwpE8x!BzDuN$UlVlRn?H>*Z5+GhQ&zoWj?Gh!$=4YgO*by^F(|jPG704dHIlX2qZow*-Tx@k zvyv`kh5Hj`c%endF!w;^lgTHD^qUh;=!trBor#AlO<{}K7 z(6w*MMc`1-slui*kZ!rb(E|kO!bPOMqwmc~VTm7aK$KAK>2OXL2C-y<$e|{y+PPQA zg1bXR1-*R7b{o`~I%|UAR45b-Sz}HI#AbUEK8O8N+~Yq|d9lo_Yi1@cQ6|jcOhiTB zPG8A()y~Ne6pZ>s4hv1;L<_1L+CBbmW~I~khxj5Mm`fN)nNQ=i7$jc4bCvwkTzV#X z9T*0kl=~30JtGZOI&CM4mk{A|+A38iIzIRe2b`Luz&=+?t(q1E4NO;fYG75@FFZJb zv#k`UIeS|0l_}1XAoPqyds5P<`qgy{YWAx(oVI9$dL5`jio|hV5OESKnNe(TZ^2l@ zu)xLWPt+Lk@Lp2vI)oKMPxzv^;C-htSgJC{T8ibt)kZE>cK=AdY7MFhO=BZkczQbc zuQwrfQoV@q@F~&)KzDlh7ZBm7tp|+oUo->*283@BVRz|aZv+Gcqzc|FaP?P80!2So z1SJQeZ{IL%=elWKQ60#nC4z)tbZ>|YcnFp%dY*GY2%t;NT_{{R?g89MeQ3l)f*7|c@Br%_?rl*i}Md)BYoe>gGNgH}i>tH1g` zUoi(dZrqICjE4=oWI}cJO>`9iSG?w0t1sgP4|;1crZT$|0{|X&ELr2jv6rC7H2Cq9 zchL7-P!i)wqCOP5I)W7*N{kun-Up7tBkqEP-8D>TMCd6e8A%CY5fMhOFHFPh!^L&* zhzqNk*rkHK#;nU(O}gtllfkHo`54a{qN$6A`5-oa0bMkc7e7DxKg7j@WqIH!2%i#JT$^16vJXOg6Ik-B^!mh>3yeymnG;9Xc8j> z%bR-21rZPMBQhVW(Ew+3QHcJ&4uzUfYW7h!qf1d(dF11DKg>#~Q;|V8r9LTFM};St zg&Of>%##d$0F(Vq<9zBk7eILSl@X=*%g-5vQa9>7!d1>ieI=U#kC9!}QVz#2+|Hh{ zA0z!C+8mpTt?W&t@+4}@Fp@vNksdCK@sO5qPkNuip49-klF@%s(3%^M=pq>o6P!r- zfFgasNjMBDI9ZtlNPvq7gb+p61^rRSAG1_Y6u1E!ES&<6h(HiIfRs{004OE9MZ^GK zX)Gx&ie8K~lYUc`D?!`7h(LgWScxP^DHPslNmZ|J@?}YhfAnGsD#$4Wp42+m-&q80 z3`l^3Xb3@&L?A4(C4s|)K!AjJ08wBmEuPv=FKD#k3k$A7P~iM_2~7|%W{E);6A7_Q zK!AZ{Xc7v)jEt&oN<=t386PhR-T+OYh=9^*Cn6jk66`D(ZU(O4OEn+hTtO(vO`JT< zLdqCCepqO=Z+PG-NYJPfXq_t1T3j5M(#l)zFCT85f}dp)Ph-Ul$DEExd7=<*o%0{V zrU}d+bofAGO3?Tcc%3@P+SxiF-DI*p{h!4D0BYDx+Uxwq7-IhqKvKRzOs_UN4VzGd zWc&!-h?3cr-x8rIHZ&*np9=0E>n;O=WXV!+xc>z-Bqo*$he^c!kAi>AB7=Cqt||}V z|9=l=@h}(o@Ib~*>FeCWt+MemOyi@SWQeImB_3Nv@av=ktat=jhok^vw}q+Hnj-Gu z)=BtTaq%-0R>*6a((y6q@Q?{Mi2M%-_zqd%Y1Z*ylA=keVgAez_#@!)|59OTCfKmT zBNE`t0EsgI5#zLj?bF!{aT>OQ16m;RMC?cEK&xm7M(2G^M z&kJg+K|~sZt~URH2<0pv`?sVHIwkdqnc789g?NV4k#T33|BrJ*f&fH%4lc?F?3&Uq zZt6cXk({8J;v!A{?;nJ{f3yvf8`fW*Lp7)X9Wq0ie>6`n&=F=_s9xxJZ4!uOiqU!ppwI*?SV z^HZWMO8D0>_KUW~X78^whM!a~{zI%${;|dn?&#L{iA~cm5fp@|R{>oMEXA}{SY;@n zBu)m3;#D zcGJY$_Cb=375cw6C#%XLy-N4pfY{r39!ZM(+s!H#osiJ zubJ0ksxqh@F&qvaKY?hJ0bPe=xz1po99H^&4EK4&LuxCeCURg_Ie#0*epMh9a8(PE z12(9D86^EI==v04IOd`D2J|?BdJmwh|EvHE)w-W=A~vOo0+dD8U(47JD(H-wA_i#r zmlZ!5plcEU>zlBjNFizsu|iOvO!uR460l3qrAM@f5A&N6xK-R==h$DyS2KDnx~Ap- zXq}=RxN2G>lVZpK8boXrB5a5>XKhN9x-S)QqJ+Ip%zaEZhWOQbbP0@zpZ{d;)MM_* z%MnS)S?bwGt;A6d6o~07#png|z*mHVM-)bTr#XWY{`C~+PeTsJe)IUSrd%ha9rZ71 zHh3(uTf|FsHR4n`>^?an`w9^|B7uCYePM(7`~`e0V}KD)U=cqVaGHKq1S9I23%FQD ze*^A7LgVD%R@xbV3~0?iF(eMHxTEU)LN6d?gju7<0@&kf={t3^yK!-iH1t_qCa&Qk zX;Sf=41DxPd%`Efzi2K%bI zR8oTE4E(clf(q1Yd8JK%`9>NoQ~wx)ta@!H3Mv!?$bcN{Y7wj^K!R!;6^o5M81RsO zS=N;`_bNI4R77`{bi9^Wi2uiur>@9OK};sVLBRBfk(8Xg0$76_0-Rqjt5#={R@s-e zt6x@AF_9b>4rWHhik~DEQ!70}C;(h@SLG#84hgOR7+ zP1vFzI!ceL)Yazy_xNpK5u!c;55Y{Cgp9Hb(OgQ|23 z10M~*0{ci}E@$atrQ$kR;*vy{=_30`Wr#+R$g6@%84#XG4`f2F^$R0H$ReoADt`zX zb!l>8*OUkHNL{GM5-5U1fq#CajJi^hlee!8p)`6V0sJ5BUd--(g<*qX2?)&F-9jW7CaEDtQd!l8sCQpX@-h(v*aD}^}|PvFC#** zLLC?&LO*8{pc4o%lWP76pp!ns(}y#XBFldNFCbUE9@eD#`57xTOfJpNXE09hz}-Wx zy4@-+V$RJ;y1RY5qi{x9`NQSz{DF~|&bPhj$NPhBK~Ao!y-RD;=E3gFJI-yY$}&{I9g%oo5@B z$A|a0CkZw>R;~|Y%rx@!UKN=zl9)RtrJ3^y3LnOqd*7(%1s)Pr7P+n_ih4gksol#H z3YCe%(*>06?AlZ<>BZiW+iaHB%X9~$-p!>U4!hnWM6FnAw3(n&K0;g_$AA|@CI)>6 zwPSnUBiM9^B(-ht1sVXc?cv_npc@~yHVoEYj&oMFw(CL*HXSLS{h7y?%FSxlE>kEv zuU@Xe{lNn3y@8SKv9Vpb2IHNc&=fJVYfz`h4ZU20+TG)xQS5#4@RQ;o25VxUs?4N! zN8hf#klWP#xKk2E>S#$i%hnv z}_B&eT#F#({BlagW!$+HDFCYw}))Vjv1j;!hDM$I$yFU_kKvo4{?-k#fgV2 z--ZtVg-l<*leat6+_t(6Cdnn<>vt*ig_+lMwC^v>`tYbF+l3pt25;f}9-37jd-!x( zNob8i9I;q4VxVfc3f$jJ1@ssJ4iH*6qdS4n7Yt!_jz7zk++4n4j9TDlM<~mx?tQz+ z^nYw{dm~bw=Wwz8cIl5vzMI0{Mr0e7#^~a(s+SuBdCgG$(W7I+)~5Eb|Kf1h7(Ei^CX(lQmy7v)z$h5yH>j3C1`hkHURw-s`4WWo|j^MSj zx9tbqDdAHeQV>j5Q1i)A<7BdgHp;D0iw3?Bo9HYL6rV__p5y|~#MOK2U)Q;`*;kz` zrIn3LExXE2kgL&*-a~-N1MY% zaZB^6#y3iVu8NcY1nOk>3*z3;{bSd4em|A=g89-xg z^D=e^ib_tU%_2n^5#;j*{j=A-GK?o3APnZSfQ8S1xQ$Nw5zUn=&{@nJP^X|_J4agq zU1gMP7VA6*hYuGg=F?{FUD+<$uEwr=qphkaW$Sj!OwH7CmK5}LbMQ5oKE>63FDmlU7#Tb>*iPL|YT$KS7wB^_6FjHP z0D4VuK~M5XB%%@js%Y?$A~0Q8>JWI2&sNvQ8gSD8U1~kK1wQ|b3mlVw8zAkVwpD*c zXR+V*@zq?IR}Jzc#1^K(>r;Pj+lJE(E`Mu6Cz$gdv00n5gW0{ z)aPH(X{8{1WVoNp~>$Dl;FRU=HC$giRJw0*u;5ByLmZ7i`$|Py8ncM>NEXC>@9#%$z4F7 zg$)5ZA%YVQDq6VziF(WueN`p}`s6GhabqT>oFht=6Nc-ZH>V5jSm>v0q!Zl$P7fvm z5JH;119B^h^4xogiB{&*{;3^Q+54n8Gfmu0^gowlq_{V zDKf^e8t-nU7H6NpsM~A}K~~bYA)6lE2^)DrR30a#u}j47-V^u+qC`%-^&CGdTHQuf zUuwG&e2~-X^!vZ0q`@+qHTA0i5EM#?}Q@6SiN7MF8E|Vy~ zI=e3Nm>iz)1*4LTyhdTWmqg0aPPISgg+(rqEc@RZF8=qEr0C4??!zWc)e_j67e>35 z!;$W!Vm*lkmF}}^XSKSrfyVqJ>X#}9y}mM!=v}q|8U|etur%VjBJB~prQ`@3a;!#3 z>p)hj8Gb~*48Aoub?a3BmAVB4$b$nbt4tPXsCJYa!WlR zK55Q&$hKh>Ec?8Y9xU1dNj|ZG$tRQ`B#)lj-2>}tTTxC`_N)L*Cs%x={HT?5L{s*VqIf_gl5 zuj?Yeso`JdM>{@r9-a4(_C&I2oABBdk6a3vOwGvI!(QiJEHCfEjhngCkBnOi4Sue8I^y zSlYC8>*-8iv%piXcq86j9X||;&=thVlf!-G*!`_N^{dF``}UKb%bQJ8+FN@H^6dQp z;^~tcQtl)qbgP{==q7A>N|X}3!cJE@-x@6rx_^WK0}_s%mqX@!XM?7 z>RU<)d_V$tH=s5(a0d?n>vsci%R72_1K;2UZ5~4Z1nA}sub#8FWM}7bSND!8Nn$IC zHPOMr6I?Iv%&xR%DL^-I!66^@%XyO0e?fSE9q1*q!0k}>VYJwFl4d$>?pZx;O^9|a**(=@S8`+*V&FNzoN7^2@o$04@yVif6 zu6gyjyi4bOn|3yn&$`tLS$9+CR?a!~1W&Ckmdd_noE zy)ST9+wfgkoz@!VV+WDnBd^%*F7zT~^@jSYmBWczDcBeA=oB#^hD!d#o9 zK+fDM^AAXAWY-v4+gZaWdkkgqJ;e1TDf4{Xs@3h}8!%db0*oRzd%El9bgWpnPAana zeB|@~mTzi;z;w5OH>|!U;4Ekz>7OrKdq|YC;r8MM0%)-{KSCN$Eu?*l6csrG?IX!VCB<+H9YY&epo zTH{J5g_Y7eiH)dWTd_aQ6gMB&(_S&uI%C=)27Z7!U2WIi`+ZG&FaJshm_>C>H6D+c zp3*8edhpxUp>X!*WX4O11$cFR$CswC$%~A`R6GeqiY#x2;K=`8;N!DZ>6-GcCEYdQ zQmd;Jj{8@my&Dk$<`+pKLmL&F=w#5h28M)i>TTW_kW1HjKQ9h4;%Y6$D*E-@vfDf^ zjwa$D-J+WlWR@)?02L9*4ZThRiQN z4gGtsO0fSE{mV}$+~zDWO;MdZr*_J=@O*LurxOJQX!-qU+vOA2h&{fOpFGCz|FUA| zo!=IV{G@Z=y16ImJO`0#@JEWP;vLbyBPOI)3q7(+{H73ubELT*i|(!V^V(5n%Zmbx|@PS|BTm$A}!XgzH?gZeidISqAIeU%WtsI5W3t+tkiZ!DS-#|@``~uWwlHN~VXr?9Hj)Qbv51EJErIMWx zBpz5$5q}9ee7n~H{m~N0Usrqilfwk%g)Q$199{$pQjjDlsS@eKzT`vEf)H%Dh4nbQ z&-`e9c*66}CoI=*Fm+3%eBrCpB}D6H;ulBi-qR=jl=~ioGGl)TMMTRYqr2qUWP2Xa zKK@Yu2-XR#-2h&+`JtID6mbLD<>Po` zVEuJhey{vy}Og&RyGP#0D)mG$~(MGPXkej|^JQ)C5MXw3@yH0rJ}$(I}Z zt`{6UYgt9-RVClo&0<3~|6hHIiw;_R%wmpEqS{(j-eQE>;Kz18AlB(^I6P)4o1_EU z*&Q$22oE4Dj`WDR)HJG76el&=4HDc7M_yt#1T#-Mb!0fX;)pX4KVK zEi1_04c+DfAm@JKApvlP=W?qH8I@VCejU#W=Y5&)wkgzj5De5+ec{*uyqaBCm0X*L zpi!_q4uidhUy~hVWoOO0M3ov%E{xov5+-(nDO?S_}(rHHpsa#pk4LBa~-JaV5*$ z&5jK2K>WeY`4yt*k_iCb`=Na_cbpddCAet4UswVcktS@8Lsx7x$GzYJy@jNkUL%N58&yKNO)Pt&fYn2MlY?;40dgLPjRM7ktSrunfpy-_ZU_Mx* zq|5(`09@Y-boTcBGc>otCVxlaVq?04rBBT5gnGeEr%Is5 zMIi&I`mE-9`h4R2)cF`KA&~|_fWWZ{E6Kg7^IC!(?E5rIybm;cZ?WamwCDN-t?H45 z7O_1L^@S5hw5{m6SfXC|a4AQ$`Q&mZ6WD-7s+SC%_FS1*Y7ffsu7`vgK`DCL{AMcO;i^y=NEYb}Az^-QPFBiZw^ zaiM3n`d!Iwf{B!N^76r zVQ^klIaN^a53dsQzca}fAM4i7wp*4Ph=d_kvpdckXXETuf%BSuDL~GJ4`%pkP?6E6 zEf)?Km$)K|+r9Y_qVG*mKT?Je7*-j^1XGloqOP|)8cBi(9>U$$?cI*Zx=-C*AMzM+ z<#rQWL01^xo%R-oEu(HX29*EKq+ihU;mcr*zMuzseuhSaE%Fv=Jv0 za04ZCaY5xZeEh{Ns45c|yeL|?0EWxM96-D}J~GM`-K0-!%x^!oT_LSm4zm|DI^9v< zfqFkvdOuWKJ`2|dF|@Qh1M&$Z0WsMZf>;O^Qc@URd(eYkzq?ufVN0qC{3CP;O_AUz zZm-F;mbZy2*VhFCU-iCG5LK#dkGA7tE**OQ!#Yn974}u8@0qpT4Yv57An{Dz1M76> zCUKC)joiDv9F(^IoYiX8)ap&x<8olEAx=StJK%~&o`_ZZd-t|(m#A$V=T#db{-zeH3)^;%amu+2gEbfMaWGkm+w+&0Q*mGAEBL9O9deTfq<7_ylOeLrmy&=lCaQ*iVX!;@y5^RyLST; z(ij7ctXe#*Li^_yNo${M_@AganV;bg#K;z;?INu#ZN_A_C)?InsnVM^7^4JSf=@Rj4+X#4O-uprR8uSjM(WB)C z}U(XRWG8B$cw*T(v)0G+1ZyOo!KD)e+Uaaygm z0r&h~1;W-GCYnH6wtJ*s{LD748ZCNi#WFUY-y7nE;hMbD}|^&KCKY>O`~h7Uqno(#$mV()L>rQ-i| zabs?SD+3K&Gjgd+|2=!ci(rW}q@QRWJPWrWtKv7l>SSY>lp17$)m&L-P}MF<&INNQ zQ3$A4rLyc^p&xhmYI<@{yZ`_fyt&j0Nox~Hwah=6$*e|~HFiYz=TdI8>Ajf^+sg1+ z^wB<3rj7IvAy3$(mrvuUjtw383(}yb>io{j&eKRIl&w9vL68zzB}TyXKsR6}5KmZk z@Kyr1>Fen50vSEf7c~SK`mt&sj?B!mgg71gq~DMn5rH0d9P}x$yh8c}5Kvjd-v191 zxh-6&zx1g>6Hg@i$2xx-l{sUOhQFT(D0ep~&$8@QyHql!ekp=+^GN=RAvZA*!PggL zEp@?|f8(zje$g3|!ja@2cd@!U1<8_c#}V_uWcHMONIxON#e(It#(V*3d50TDE4ro; z+Q}>GUf=>SlM}5FDp1sLxz4dA{ZcTgd4(BGbs=2wjw)tkeWwcZ$VG#o`Oae&b7;ly<>~_2==xXFl7s&0)=wIV|-I Wx5wmo3G(89cMx+G+qdOF0RJET1iu#m diff --git a/copri4/shareedms-operator/src/Lib/Mlogic.pm b/copri4/shareedms-operator/src/Lib/Mlogic.pm index d860cf5..293fc01 100755 --- a/copri4/shareedms-operator/src/Lib/Mlogic.pm +++ b/copri4/shareedms-operator/src/Lib/Mlogic.pm @@ -231,7 +231,7 @@ sub tpl(){ foreach my $id2 (sort {$node2->{$a}->{n_sort} <=> $node2->{$b}->{n_sort}} keys (%$node2)){ my $parent_node4rel = $db->get_node4rel($node2->{$id2}->{parent_id},"","","null"); #because of don't view Service Attribut on Einste. - if($parent_node4rel->{template_id} =~ /205|225/){ + if($parent_node4rel->{template_id} =~ /205|225|194/){ #if(1==1){ $mclass = ""; $mstyle = "";